class_docstr: Computes ArcFace Angular softmax angle loss
  reference: https://openaccess.thecvf.com/content_CVPR_2019/papers/Deng_ArcFace_Additive_Angular_Margin_Loss_for_Deep_Face_Recognition_CVPR_2019_paper.pdf
  args:
  scale: scale value for cosine angle
  margin: margin value added to cosine angle 
code: def forward(self, logits, labels):
      numerator = self.scale * torch.cos(
          torch.acos(
              torch.clamp(
                  torch.diagonal(logits.transpose(0, 1)[labels]),
                  -1.0 + self.eps,
                  1 - self.eps,
              )
          )
          + self.margin
      )
      excl = torch.cat(
          [
              torch.cat((logits[i, :y], logits[i, y + 1 :])).unsqueeze(
                  0
              )
              for i, y in enumerate(labels)
          ],
          dim=0,
      )
      denominator = torch.exp(numerator) + torch.sum(
          torch.exp(self.scale * excl), dim=1
      )
      L = numerator - torch.log(denominator)
      return -torch.mean(L)
  
file_path: NeMo/nemo/collections/asr/losses/angularloss.py
imports: import torch
  from nemo.core.classes import Loss, Typing, typecheck
  from nemo.core.neural_types import LabelsType, LogitsType, LossType, NeuralType
label_desc: Use image node_id 4 for calling the AngularSoftmaxLoss obj's underlying member method code with example usage: obj.forward(logits, labels) and returns: unknown