
    Ng                         d Z ddlZ	 ddlmZ dZn# e$ r dZdZY nw xY wddlmZ  G d d	          Z G d
 d          Z	dS )zE CUDA / AMP utils

Hacked together by / Copyright 2020 Ross Wightman
    N)ampTF   )dispatch_clip_gradc                   0    e Zd ZdZ	 	 	 	 	 d	dZd Zd ZdS )

ApexScalerr   NnormFTc                    t          j        ||          5 }|                    |           d d d            n# 1 swxY w Y   |r<|$t          t          j        |          ||           |                                 d S d S 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/html/ai-engine/env/lib/python3.11/site-packages/timm/utils/cuda.py__call__zApexScaler.__call__   s     ^D),, 	<  l ;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	$"3#4Y#?#?QZ[[[[NN	 	s   9= =c                 H    dt           j        v rt          j                    S d S )N
state_dict)r   __dict__r   r   s    r   r   zApexScaler.state_dict%   s%    3<''>### ('    c                 N    dt           j        v rt          j        |           d S d S )Nload_state_dict)r   r   r!   r   r   s     r   r!   zApexScaler.load_state_dict)   s.    ,,
+++++ -,r   Nr   NFT)__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 Z	 	 	 	 	 d
dZd Zd	 ZdS )NativeScaler
amp_scalerc                 V    t           j        j                                        | _        d S N)torchcudar   
GradScaler_scalerr   s    r   __init__zNativeScaler.__init__1   s    z~0022r   Nr   FTc                 4   | j                             |                              |           |rg|0|J | j                             |           t	          |||           | j                             |           | j                                          d S d S r
   )r1   scaler   unscale_r   r   update)r   r   r   r   r   r   r   r   s           r   r   zNativeScaler.__call__4   s     	4  ))|)DDD 	"$!---%%i000":yyIIIILi(((L!!!!!	" 	"r   c                 4    | j                                         S r-   )r1   r   r   s    r   r   zNativeScaler.state_dictG   s    |&&(((r   c                 :    | j                             |           d S r-   )r1   r!   r"   s     r   r!   zNativeScaler.load_state_dictJ   s    $$Z00000r   r#   )r$   r%   r&   r'   r2   r   r   r!   r(   r   r   r*   r*   .   sk        !N3 3 3 " " " "&) ) )1 1 1 1 1r   r*   )
__doc__r.   apexr   has_apexImportErrorr   r   r   r*   r(   r   r   <module>r=      s     HH   
CHHH * ) ) ) ) ), , , , , , , ,:1 1 1 1 1 1 1 1 1 1s    	