
    kh                     l    d dl Z d dlmZ  G d dej                        Z G d dej                        Zy)    Nc                   &     e Zd Zd fd	Zd Z xZS )AsymmetricLossMultiLabelc                 p    t         t        |           || _        || _        || _        || _        || _        y N)superr   __init__	gamma_neg	gamma_posclipdisable_torch_grad_focal_losseps)selfr	   r
   r   r   r   	__class__s         U/var/www/teggl/fontify/venv/lib/python3.12/site-packages/timm/loss/asymmetric_loss.pyr   z!AsymmetricLossMultiLabel.__init__   s5    &68""	-J*    c                    t        j                  |      }|}d|z
  }| j                  .| j                  dkD  r|| j                  z   j                  d      }|t        j                  |j                  | j
                              z  }d|z
  t        j                  |j                  | j
                              z  }||z   }| j                  dkD  s| j                  dkD  r| j                  rt        j                  d       ||z  }	|d|z
  z  }
|	|
z   }| j                  |z  | j                  d|z
  z  z   }t        j                  d|z
  |      }| j                  rt        j                  d       ||z  }|j                          S )zz"
        Parameters
        ----------
        x: input logits
        y: targets (multi-label binarized vector)
           r   )max)minFT)torchsigmoidr   clamplogr   r	   r
   r   set_grad_enabledpowsum)r   xy	x_sigmoidxs_posxs_neglos_poslos_neglosspt0pt1ptone_sided_gammaone_sided_ws                 r   forwardz AsymmetricLossMultiLabel.forward   sY    MM!$	Y 99 TYY]tyy(//A/6F eii :;;q5EIIflltxxl&@AA  >>A!!311&&u-1*CAE"CsB"nnq04>>QU3KKO))AFO<K11&&t,KD
{r   )   r   g?g:0yE>F)__name__
__module____qualname__r   r*   __classcell__r   s   @r   r   r      s    #r   r   c                   .     e Zd Zddef fdZddZ xZS )AsymmetricLossSingleLabelr   c                     t         t        |           || _        t	        j
                  d      | _        g | _        || _        || _	        || _
        y )Ndim)r   r2   r   r   nn
LogSoftmax
logsoftmaxtargets_classesr
   r	   	reduction)r   r
   r	   r   r;   r   s        r   r   z"AsymmetricLossSingleLabel.__init__6   sE    '79--B/!"""r   c                    |j                         d   }| j                  |      }t        j                  |      j	                  d|j                         j                  d      d      | _        | j                  }d|z
  }t        j                  |      }d|z
  }	||z  }|	|z  }	t        j                  d|z
  |	z
  | j                  |z  | j                  |z  z         }
||
z  }| j                  dkD  rI| j                  j                  d| j                  z
        j                  | j                  |z        | _        | j                  j                  |       }|j                  d      }| j                   dk(  r|j#                         }|S )zj"
        Parameters
        ----------
        x: input logits
        y: targets (1-hot vector)
        r4   r   r   r5   mean)sizer9   r   
zeros_likescatter_long	unsqueezer:   expr   r
   r	   r   muladdr   r;   r=   )r   inputstargetr;   num_classes	log_predstargetsanti_targetsr    r!   asymmetric_wr$   s               r   r*   z!AsymmetricLossSingleLabel.forward@   s^    kkmB'OOF+	$//7@@FKKMD[D[\]D^`ab &&7{9%V'!,&yyVf!4!%'!9DNN\<Y!Y[,	88a<#'#7#7#;#;AL#I#M#MdhhYdNd#eD  %%)))44xxBx>>V#99;Dr   )r   r+   g?r=   r   )r,   r-   r.   floatr   r*   r/   r0   s   @r   r2   r2   5   s    #e #!r   r2   )r   torch.nnr7   Moduler   r2    r   r   <module>rQ      s,     -ryy -`,		 ,r   