U
    ¯Ê¹jí  ã                   @   sj   d Z ddlZzddlmZ dZW n ek
r<   dZdZY nX 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                   @   s*   e Zd ZdZddd„Zdd	„ Zd
d„ ZdS )Ú
ApexScalerr   NÚnormFTc           	   	   C   sP   t  ||¡�}|j|d� W 5 Q R X |rL|d k	rDtt  |¡||d� | ¡  d S ©N)Úcreate_graph)Úmode)r   Z
scale_lossÚbackwardr   Zmaster_paramsÚstep)	ÚselfÚlossÚ	optimizerÚ	clip_gradÚ	clip_modeÚ
parametersr   Úneed_updateZscaled_loss© r   úN/var/www/html/bwave/python/venv/lib/python3.8/site-packages/timm/utils/cuda.pyÚ__call__   s    
zApexScaler.__call__c                 C   s   dt jk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krt  |¡ 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                   @   s2   e Zd ZdZdd„ Zddd	„Zd
d„ Zdd„ ZdS )ÚNativeScalerZ
amp_scalerc                 C   s   t jj ¡ | _d S ©N)ÚtorchÚcudar   Z
GradScalerÚ_scalerr   r   r   r   Ú__init__1   s    zNativeScaler.__init__Nr   FTc                 C   s`   | j  |¡j|d� |r\|d k	rF|d k	s,t‚| j  |¡ t|||d� | j  |¡ | j  ¡  d S r   )r#   Úscaler
   ÚAssertionErrorZunscale_r   r   Úupdate)r   r   r   r   r   r   r   r   r   r   r   r   4   s    
zNativeScaler.__call__c                 C   s
   | j  ¡ S r    )r#   r   r   r   r   r   r   G   s    zNativeScaler.state_dictc                 C   s   | j  |¡ d S r    )r#   r   r   r   r   r   r   J   s    zNativeScaler.load_state_dict)Nr   NFT)r   r   r   r   r$   r   r   r   r   r   r   r   r   .   s        ø
r   )
Ú__doc__r!   Zapexr   Zhas_apexÚImportErrorr   r   r   r   r   r   r   r   Ú<module>   s   
