o
    پi}                     @   sh   d Z ddlZz
ddlmZ dZW n ey   dZdZY nw ddlmZ G dd	 d	ZG d
d dZ	dS )zE CUDA / AMP utils

Hacked together by / Copyright 2020 Ross Wightman
    N)ampTF   )dispatch_clip_gradc                   @   s4   e Zd ZdZ					dddZdd	 Zd
d ZdS )
ApexScalerr   NnormFTc           	      C   sh   t ||}|j|d W d    n1 sw   Y  |r2|d ur,tt |||d |  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_loss r   C/home/ubuntu/.local/lib/python3.10/site-packages/timm/utils/cuda.py__call__   s   
zApexScaler.__call__c                 C   s   dt jv r	t  S d S )N
state_dict)r   __dict__r   r   r   r   r   r   %   s   
zApexScaler.state_dictc                 C   s   dt jv rt | d S d S )Nload_state_dict)r   r   r   r   r   r   r   r   r   )   s   
zApexScaler.load_state_dictNr   NFT)__name__
__module____qualname__state_dict_keyr   r   r   r   r   r   r   r      s    
r   c                   @   s>   e Zd ZdZdddZ					dd	d
Zdd Zdd ZdS )NativeScaler
amp_scalercudac              
   C   sP   zt jj|d| _W d S  ttfy' } zt jj | _W Y d }~d S d }~ww )N)device)torchr   
GradScaler_scalerAttributeError	TypeErrorr%   )r   r&   er   r   r   __init__1   s   zNativeScaler.__init__Nr   FTc                 C   sd   | j |j|d |r0|d ur#|d usJ | j | t|||d | j | | j   d S d S r   )r)   scaler   unscale_r   r   update)r   r   r   r   r   r   r   r   r   r   r   r   7   s   
zNativeScaler.__call__c                 C   s
   | j  S N)r)   r   r   r   r   r   r   J   s   
zNativeScaler.state_dictc                 C   s   | j | d S r1   )r)   r   r   r   r   r   r   M   s   zNativeScaler.load_state_dict)r%   r   )r   r    r!   r"   r-   r   r   r   r   r   r   r   r#   .   s    


r#   )
__doc__r'   apexr   has_apexImportErrorr   r   r   r#   r   r   r   r   <module>   s    