
    RЦi                     l    S SK r S SKJr   " S S\R                  5      r " S S\R                  5      rg)    Nc                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )AsymmetricLossMultiLabel   c                 f   > [         [        U ]  5         Xl        X l        X0l        XPl        X@l        g N)superr   __init__	gamma_neg	gamma_posclipdisable_torch_grad_focal_losseps)selfr
   r   r   r   r   	__class__s         X/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/loss/asymmetric_loss.pyr	   !AsymmetricLossMultiLabel.__init__   s+    &68""	-J*    c                    [         R                  " U5      nUnSU-
  nU R                  b+  U R                  S:  a  XPR                  -   R                  SS9nU[         R                  " UR                  U R
                  S95      -  nSU-
  [         R                  " UR                  U R
                  S95      -  nXg-   nU R                  S:  d  U R                  S:  a  U R                  (       a  [         R                  " S5        XB-  n	USU-
  -  n
X-   nU R                  U-  U R                  SU-
  -  -   n[         R                  " SU-
  U5      nU R                  (       a  [         R                  " S5        X-  nUR                  5       * $ )zR"
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   forward AsymmetricLossMultiLabel.forward   sO    MM!$	Y 99 TYY]yy(//A/6F eii :;;q5EIIflltxxl&@AA  >>A!!311&&u-*CAE"CB"nnq04>>QU3KKO))AFO<K11&&t,D
{r   )r   r   r   r
   r   )   r   g?g:0yE>F)__name__
__module____qualname____firstlineno__r	   r,   __static_attributes____classcell__r   s   @r   r   r      s    # #r   r   c                   >   ^  \ rS rSrSS\4U 4S jjjrSS jrSrU =r$ )AsymmetricLossSingleLabel5   r   c                    > [         [        U ]  5         X0l        [        R
                  " SS9U l        / U l        Xl        X l	        X@l
        g )Ndim)r   r7   r	   r   nn
LogSoftmax
logsoftmaxtargets_classesr   r
   	reduction)r   r   r
   r   rA   r   s        r   r	   "AsymmetricLossSingleLabel.__init__6   s=    '79--B/!"""r   c                    UR                  5       S   nU R                  U5      n[        R                  " U5      R	                  SUR                  5       R                  S5      S5      U l        U R                  nSU-
  n[        R                  " U5      nSU-
  n	X-  nX-  n	[        R                  " SU-
  U	-
  U R                  U-  U R                  U-  -   5      n
XZ-  nU R                  S:  aI  U R                  R                  SU R                  -
  5      R                  U R                  U-  5      U l        U R                  R                  U5      * nUR                  SS9nU R                   S:X  a  UR#                  5       nU$ )zB"
Parameters
----------
x: input logits
y: targets (1-hot vector)
r:   r   r   r;   mean)sizer?   r   
zeros_likescatter_long	unsqueezer@   expr   r   r
   r   muladdr   rA   rD   )r   inputstargetrA   num_classes	log_predstargetsanti_targetsr"   r#   asymmetric_wr&   s               r   r,   !AsymmetricLossSingleLabel.forward@   sX    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
   r   r?   rA   r@   )r   r.   g?rD   r   )	r/   r0   r1   r2   floatr	   r,   r3   r4   r5   s   @r   r7   r7   5   s    #e # #! !r   r7   )r   torch.nnr=   Moduler   r7    r   r   <module>rY      s,     -ryy -`,		 ,r   