
    kh}                     t    d Z ddlZ	 ddlmZ dZddlmZ  G d d	      Z G d
 d      Z	y# e$ r dZdZY &w xY w)zE CUDA / AMP utils

Hacked together by / Copyright 2020 Ross Wightman
    N)ampTF   )dispatch_clip_gradc                   .    e Zd ZdZ	 	 	 	 	 ddZd Zd Zy)
ApexScalerr   Nc                     t        j                  ||      5 }|j                  |       d d d        |r4|!t        t        j                  |      ||       |j                          y y # 1 sw Y   @xY wN)create_graph)mode)r   
scale_lossbackwardr   master_paramsstep)	selfloss	optimizer	clip_grad	clip_mode
parametersr
   need_updatescaled_losss	            K/var/www/teggl/fontify/venv/lib/python3.12/site-packages/timm/utils/cuda.py__call__zApexScaler.__call__   sj     ^^D), 	<  l ;	<$"3#4#4Y#?QZ[NN 	< 	<s   A))A2c                 P    dt         j                  v rt        j                         S y )N
state_dict)r   __dict__r   r   s    r   r   zApexScaler.state_dict%   s     3<<'>>## (    c                 T    dt         j                  v rt        j                  |       y y )Nload_state_dict)r   r   r    r   r   s     r   r    zApexScaler.load_state_dict)   s!    ,
+ -r   NnormNFT)__name__
__module____qualname__state_dict_keyr   r   r     r   r   r   r      s'    N "$,r   r   c                   6    e Zd ZdZddZ	 	 	 	 	 ddZd Zd Zy)	NativeScaler
amp_scalerc                     	 t         j                  j                  |      | _        y # t        t
        f$ r7}t         j                  j                  j                         | _        Y d }~y d }~ww xY w)N)device)torchr   
GradScaler_scalerAttributeError	TypeErrorcuda)r   r-   es      r   __init__zNativeScaler.__init__1   sO    	7 99//v/>DL	* 	7 ::>>446DLL	7s   %( A.-A))A.Nc                 (   | j                   j                  |      j                  |       |re|-|J | j                   j                  |       t	        |||       | j                   j                  |       | j                   j                          y y r	   )r0   scaler   unscale_r   r   update)r   r   r   r   r   r   r
   r   s           r   r   zNativeScaler.__call__7   s~     	4 ))|)D$!---%%i0":yyILLi(LL! r   c                 6    | j                   j                         S N)r0   r   r   s    r   r   zNativeScaler.state_dictJ   s    ||&&((r   c                 :    | j                   j                  |       y r;   )r0   r    r!   s     r   r    zNativeScaler.load_state_dictM   s    $$Z0r   )r3   r"   )r$   r%   r&   r'   r5   r   r   r    r(   r   r   r*   r*   .   s,    !N7 "&)1r   r*   )
__doc__r.   apexr   has_apexImportErrorr   r   r   r*   r(   r   r   <module>rA      sQ    H
 *, ,: 1  1I  
CHs   + 	77