code: def forward_regular_loss(
      self, emb, labels, indices_tuple, ref_emb, ref_labels, world_size
  ):
      if world_size <= 1:
          return self.loss(
              emb, labels, indices_tuple, ref_emb, ref_labels
          )
  
      (
          all_emb,
          all_labels,
          all_ref_emb,
          all_ref_labels,
          labels,
      ) = gather_emb_and_ref(emb, labels, ref_emb, ref_labels)
  
      if self.efficient:
          if all_labels is not None:
              all_labels = select_ref_or_regular(
                  all_labels, all_ref_labels
              )
          all_emb = select_ref_or_regular(all_emb, all_ref_emb)
          if indices_tuple is None:
              indices_tuple = get_indices_tuple(labels, all_labels)
          loss = self.loss(
              emb, labels, indices_tuple, all_emb, all_labels
          )
      else:
          loss = self.loss(
              all_emb,
              all_labels,
              indices_tuple,
              all_ref_emb,
              all_ref_labels,
          )
  
      return loss * world_size
  
imports: import torch
  from ..losses import BaseMetricLossFunction, CrossBatchMemory
  from ..miners import BaseMiner
  from ..utils import common_functions
  from ..utils import loss_and_miner_utils
label_desc: Use image node_id 3 for calling the DistributedLossWrapper obj's underlying member method code with example usage: obj.forward_regular_loss(emb, labels, indices_tuple, ref_emb, ref_labels, world_size) and returns: unknown, self