Ë
    éÓ^j¨  ã                   ó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         €úd/var/www/ramen.bs-engineer-server.com/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  € ô —M‘M !Ó$ˆ	ØˆØ�Y‘ˆð �9‰9Ð  T§Y¡Y°¢]Ø˜tŸy™yÑ(×/Ñ/°AÐ/Ó6ˆFð ”e—i‘i §¡°·± Ó :Ó;Ñ;ˆØ�q‘5œEŸI™I f§l¡l°t·x±x lÓ&@ÓAÑAˆØ˜Ñ ˆð �>‰>˜AÒ §¡°!Ò!3Ø×1Ò1Ü×&Ñ& uÔ-Ø˜1‘*ˆCØ˜A ™EÑ"ˆCØ�s‘ˆBØ"Ÿn™n¨qÑ0°4·>±>ÀQÈÁUÑ3KÑKˆOÜŸ)™) A¨¡F¨OÓ<ˆKØ×1Ò1Ü×&Ñ& tÔ,Ø�KÑˆDà—‘“
ˆ{Ðr   )é   r   gš™™™™™©?g:Œ0âŽyE>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^  € ð —k‘k“m BÑ'ˆØ—O‘O FÓ+ˆ	Ü$×/Ñ/°Ó7×@Ñ@ÀÀFÇKÁKÃM×D[ÑD[Ð\]ÓD^Ð`aÓbˆÔð ×&Ñ&ˆØ˜7‘{ˆÜ—‘˜9Ó%ˆØ�V‘ˆØ˜'Ñ!ˆØ˜,Ñ&ˆÜ—y‘y  V¡¨fÑ!4Ø!%§¡°'Ñ!9¸D¿N¹NÈ\Ñ<YÑ!Yó[ˆà Ñ,ˆ	à�8‰8�aŠ<Ø#'×#7Ñ#7×#;Ñ#;¸AÀÇÁ¹LÓ#I×#MÑ#MÈdÏhÉhÐYdÑNdÓ#eˆDÔ ð ×%Ñ%×)Ñ)¨)Ó4Ð4ˆà�x‰x˜BˆxÓˆØ�>‰>˜VÒ#Ø—9‘9“;ˆ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,   ðÛ Ý ô-˜rŸy™yô -ô`, §	¡	õ ,r   