code: def __init__(self, loss_config: AttrDict):
      super().__init__()
      self.loss_config = loss_config
      self.swapped_assignment = self.loss_config.swapped_assignment
      self.use_teacher_prototypes = (
          self.loss_config.use_teacher_prototypes
      )
      self.num_global_crops = self.loss_config.num_global_crops
      self.student_num_crops = self.loss_config.student_num_crops
      self.student_temp = self.loss_config.student_temp
      self.teacher_temp = self.loss_config.teacher_temp
      self.teacher_patch_temp = self.loss_config.teacher_patch_temp
      self.lambda1 = self.loss_config.lambda1
      self.lambda2 = self.loss_config.lambda2
  
      # Teacher prototype probabilities that will be used to compute the
      # assignments for the student model crops prototype scores
      self.teacher_scores: Optional[torch.Tensor] = None
  
file_path: vissl/vissl/losses/ibot_distillation_loss.py
imports: import pprint
  from typing import List, Optional
  import torch
  import torch.nn.functional
  from classy_vision.losses import ClassyLoss, register_loss
  from vissl.config import AttrDict
label_desc: Use image node_id 1 to create a new IBOTDistillationLoss object from inherited base classes: ClassyLoss with example: obj = IBOTDistillationLoss(loss_config)