o
    ÓÙ¾iá  ã                   @   s(  d Z ddlZddlZddlmZmZ ddlZg d¢Zdada	da
daeejjdƒZdejv r6eejd ƒandad	ejv rEeejd	 ƒandad
d„ ZG dd„ dƒZdd„ ZG dd„ dƒZdd„ ZG dd„ dƒZG dd„ dƒZd$dedefdd„Zd%dedefdd„Zdefd d!„Zd&defd"d#„ZdS )'z& Model / Layer Config singleton state
é    N)ÚAnyÚOptional)Úis_exportableÚis_scriptableÚ	is_no_jitÚuse_fused_attnÚset_exportableÚset_scriptableÚ
set_no_jitÚset_layer_configÚset_fused_attnÚset_reentrant_ckptÚuse_reentrant_ckptFÚscaled_dot_product_attentionÚTIMM_FUSED_ATTNé   ÚTIMM_REENTRANT_CKPTc                   C   ó   t S ©N)Ú_NO_JIT© r   r   úF/home/ubuntu/.local/lib/python3.10/site-packages/timm/layers/config.pyr   ,   ó   r   c                   @   ó:   e Zd Zdeddfdd„Zddd„Zdedefd	d
„ZdS )r
   ÚmodeÚreturnNc                 C   ó   t | _|a d S r   )r   Úprev©Úselfr   r   r   r   Ú__init__1   ó   zset_no_jit.__init__c                 C   ó   d S r   r   ©r   r   r   r   Ú	__enter__6   r   zset_no_jit.__enter__Úargsc                 G   ó
   | j adS ©NF)r   r   ©r   r%   r   r   r   Ú__exit__9   ó   zset_no_jit.__exit__©r   N©Ú__name__Ú
__module__Ú__qualname__Úboolr    r$   r   r)   r   r   r   r   r
   0   ó    
r
   c                   C   r   r   )Ú_EXPORTABLEr   r   r   r   r   ?   r   r   c                   @   r   )r   r   r   Nc                 C   r   r   )r2   r   r   r   r   r   r    D   r!   zset_exportable.__init__c                 C   r"   r   r   r#   r   r   r   r$   I   r   zset_exportable.__enter__r%   c                 G   r&   r'   )r   r2   r(   r   r   r   r)   L   r*   zset_exportable.__exit__r+   r,   r   r   r   r   r   C   r1   r   c                   C   r   r   )Ú_SCRIPTABLEr   r   r   r   r   R   r   r   c                   @   r   )r	   r   r   Nc                 C   r   r   )r3   r   r   r   r   r   r    W   r!   zset_scriptable.__init__c                 C   r"   r   r   r#   r   r   r   r$   \   r   zset_scriptable.__enter__r%   c                 G   r&   r'   )r   r3   r(   r   r   r   r)   _   r*   zset_scriptable.__exit__r+   r,   r   r   r   r   r	   V   r1   r	   c                
   @   s`   e Zd ZdZ				ddee dee dee dee fdd„Zdd
d„Zded	efdd„Z	dS )r   z— Layer config context manager that allows setting all layer config flags at once.
    If a flag arg is None, it will not change the current value.
    NÚ
scriptableÚ
exportableÚno_jitÚno_activation_jitc                 C   sF   t tttf| _|d ur|a |d ur|a|d ur|a|d ur!|ad S d S r   )r3   r2   r   Ú_NO_ACTIVATION_JITr   )r   r4   r5   r6   r7   r   r   r   r    i   s   
ÿzset_layer_config.__init__r   c                 C   r"   r   r   r#   r   r   r   r$   }   r   zset_layer_config.__enter__r%   c                 G   s   | j \aaaadS r'   )r   r3   r2   r   r8   r(   r   r   r   r)   €   s   zset_layer_config.__exit__)NNNNr+   )
r-   r.   r/   Ú__doc__r   r0   r    r$   r   r)   r   r   r   r   r   e   s"    ûþýü
û
r   Úexperimentalr   c                 C   s    t rtrdS | rtdkS tdkS )NFr   r   )Ú_HAS_FUSED_ATTNr2   Ú_USE_FUSED_ATTN)r:   r   r   r   r   ‰   s
   r   TÚenablec                 C   s6   t s	t d¡ d S |r| rdad S | rdad S dad S )Nz^This version of pytorch does not have F.scaled_dot_product_attention, fused_attn flag ignored.é   r   r   )r;   ÚwarningsÚwarnr<   )r=   r:   r   r   r   r   ’   s   
r   c                   C   r   r   ©Ú_USE_REENTRANT_CKPTr   r   r   r   r   Ÿ   r   r   c                 C   s   | a d S r   rA   )r=   r   r   r   r   £   s   r   )F)TF)T) r9   Úosr?   Útypingr   r   ÚtorchÚ__all__r   r8   r2   r3   ÚhasattrÚnnÚ
functionalr;   ÚenvironÚintr<   r0   rB   r   r
   r   r   r   r	   r   r   r   r   r   r   r   r   r   Ú<module>   s8    

$	