a
    d                     @   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0 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   sd   t ||}|j|d W d    n1 s.0    Y  |r`|d urXt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   X/var/www/html/stable-diffusion-webui/venv/lib/python3.9/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 )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)torchZcudar   Z
GradScaler_scalerr   r   r   r   __init__1   s    zNativeScaler.__init__Nr   FTc                 C   s`   | j |j|d |r\|d urF|d us,J | j | t|||d | j | | j   d S r   )r"   Zscaler
   Z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   
