ó
    KëgjN  ã                   ób   • S SK r  " S S\ R                  R                  5      r\R                  rg)é    Nc            
       óª   • \ rS rSrSr\ SS\R                  S\R                  S\S\R                  4S jj5       r	\S\R                  4S	 j5       r
S
rg)ÚL2Wrapé   z»
This class of penalty prevents the model from becoming overconfident,
thereby mitigating precision loss in BF16.

This version is memory-optimized by not storing the full logits tensor.
ÚlossÚlogitsÚl2_penalty_factorÚreturnc                 óÄ   • [         R                  " USSS9u  pEUR                  U l        X2R                  S   UR                  S   -  -  nXF-  nU R	                  XE5        U$ )a  
Args:
    loss (torch.Tensor):
        The already-reduced (scalar) loss to wrap.
    logits (torch.Tensor):
        The logits of shape `[B, T, V]`.
    l2_penalty_factor (float, Optional):
        The strength of the L2 penalty on the max logit. Default: 1e-4.
éÿÿÿÿT)ÚdimÚkeepdimr   é   )ÚtorchÚmaxÚshapeÚlogits_shapeÚsave_for_backward)Úctxr   r   r   ÚmaxxÚidsÚfactors          Ú C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\fla/modules/l2warp.pyÚforwardÚL2Wrap.forward   s[   € ô  —I’I˜f¨"°dÑ;‰	ˆØ!Ÿ<™<ˆÔØ"§l¡l°1¡o¸¿¹ÀQ¹Ñ&GÑHˆØ‰}ˆØ×Ñ˜dÔ(Øˆó    Úgrad_outputc                 ó¸   • U R                   u  p#[        R                  " U R                  UR                  UR
                  S9nUR                  SX2U-  5        XS 4$ )N)ÚdeviceÚdtyper   )Úsaved_tensorsr   Úzerosr   r   r   Úscatter_)r   r   r   r   Úglogitss        r   ÚbackwardÚL2Wrap.backward)   sV   € à×%Ñ%‰	ˆÜ—+’+˜c×.Ñ.°{×7IÑ7IÐQ\×QbÑQbÑcˆð 	×Ñ˜˜S¨Ñ"4Ô5Ø TÐ)Ð)r   © N)g-Cëâ6?)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ústaticmethodr   ÚTensorÚfloatr   r$   Ú__static_attributes__r&   r   r   r   r      sq   † ñð ð
 $(ñ	à�l‰lðð —‘ðð !ð	ð
 
�‰ôó ðð, ð* 5§<¡<ó *ó ó*r   r   )r   ÚautogradÚFunctionr   ÚapplyÚl2_warpr&   r   r   Ú<module>r4      s,   ðó ô%*ˆU�^‰^×$Ñ$ô %*ðP �,‰,�r   