code: def training_step(self, batch, batch_idx):
      self.prototypes.normalize()
      views = batch[0]
      multi_crop_features = [
          self.forward(view.to(self.device)) for view in views
      ]
      high_resolution = multi_crop_features[:2]
      low_resolution = multi_crop_features[2:]
      loss = self.criterion(high_resolution, low_resolution)
      return loss
  
file_path: lightly/examples/pytorch_lightning_distributed/swav.py
imports: import pytorch_lightning
  import torch
  import torchvision
  from torch import nn
  from lightly.loss import SwaVLoss
  from lightly.models.modules import SwaVProjectionHead, SwaVPrototypes
  from lightly.transforms.swav_transform import SwaVTransform
label_desc: Use image node_id 3 for calling the SwaV obj's underlying member method code with example usage: obj.training_step(batch, batch_idx) and returns: loss