text: import torch
  import torch.nn as nn
  import torch.nn.functional as F
  
  
  class CircleLoss(nn.Module):
      def __init__(self, gamma, m):
          super().__init__()
          self.gamma = gamma
          self.m = m
  
      def forward(self, s_p, s_n):
          alpha_p = torch.clamp_min(1 + self.m - s_p, 0)
          alpha_n = torch.clamp_min(self.m + s_n, 0)
          delta_p = 1 - self.m
          delta_n = self.m
          logit_p = (-self.gamma) * alpha_p * (s_p - delta_p)
          logit_n = self.gamma * alpha_n * (s_n - delta_n)
          return F.softplus(torch.logsumexp(logit_p, dim=0) + torch.logsumexp(logit_n, dim=0))
  