U
    ¯Ê¹j.  ã                   @   sn  d Z ddlmZmZmZ ddlT ddlT ddlT ddlm	Z	m
Z
mZ deejjƒkZdeejjƒkZdeejjƒkZd	eejjƒkZeer�ejneerœejneer¨ejneejejejejejejee e!e"e#erÖej$ne%erâej&ne'e(d
�Z)eerøejne*e�rejne*e�rejne+e�r"ej$ne,e�r0ej&ne-e.d�Z/ee�rHejne0e�rVejne0e�rdejne1e�rrej$ne2e�r€ej&ne3e4d�Z5e5e/e)fZ6e6D ]*Z7e7 8de7 9d¡¡ e7 8de7 9d¡¡ �q˜ee�rÒej:ne;e�ràej:ne;e�rîej<ne<ej=ej>ej?ej@eAejBejCeDeEeFeGeHe�r ejIneJe�r.ejKneLeMejNd�ZOee�rJej:nePe�rXej:nePe�rfej<neQe�rtejIneRe�r‚ejKneSeTd�ZUee�ršej:neVe�r¨ej:neVe�r¶ej<neWe�rÄejIneXe�rÒejKneYeZd�Z[e[eUeOfZ\e\D ]*Z7e7 8de7 9d¡¡ e7 8de7 9d¡¡ �qêdeee]f dœdd„Z^deeej_ e]f dœdd„Z`deeej_ e]f dœdd„ZadS )zF Activation Factory
Hacked together by / Copyright 2020 Ross Wightman
é    )ÚUnionÚCallableÚTypeé   )Ú*)Úis_exportableÚis_scriptableÚ	is_no_jitÚsiluÚ	hardswishÚhardsigmoidÚmish)r
   Úswishr   ÚreluÚrelu6Ú
leaky_reluÚeluÚceluÚseluÚgeluÚ	gelu_tanhÚ
quick_geluÚsigmoidÚtanhÚhard_sigmoidÚ
hard_swishÚ	hard_mish)r
   r   r   r   r   r   r   r   )r
   r   r   r   r   r   r   Zprelur   r   r   r   r   r   r   r   r   r   Úidentityr   ©Únamec                 C   s\   | sdS t | tƒr| S tƒ s8tƒ s8tƒ s8| tkr8t|  S tƒ sTtƒ sT| tkrTt|  S t|  S )zÁ Activation Function Factory
    Fetching activation fns by name with this function allows export or torch script friendly
    functions to be returned dynamically based on current config.
    N)Ú
isinstancer   r	   r   r   Ú
_ACT_FN_MEÚ_ACT_FN_JITÚ_ACT_FN_DEFAULTr   © r$   úU/var/www/html/bwave/python/venv/lib/python3.8/site-packages/timm/layers/create_act.pyÚ
get_act_fnn   s    
r&   c                 C   sh   | dkrdS t | tƒs| S | s"dS tƒ sDtƒ sDtƒ sD| tkrDt|  S tƒ s`tƒ s`| tkr`t|  S t|  S )zÁ Activation Layer Factory
    Fetching activation layers by name with this function allows export or torch script friendly
    functions to be returned dynamically based on current config.
    N)r    Ústrr	   r   r   Ú_ACT_LAYER_MEÚ_ACT_LAYER_JITÚ_ACT_LAYER_DEFAULTr   r$   r$   r%   Úget_act_layer‚   s    
r+   Nc                 K   s^   t | ƒ}|d krd S |d kr&|f |ŽS z|f d|i|—ŽW S  tk
rX   |f |Ž Y S X d S )NÚinplace)r+   Ú	TypeError)r   r,   ÚkwargsZ	act_layerr$   r$   r%   Úcreate_act_layer—   s    
r/   )r   )r   )N)bÚ__doc__Útypingr   r   r   ZactivationsZactivations_jitZactivations_meÚconfigr   r   r	   ÚdirZtorchÚnnZ
functionalZ	_has_siluZ_has_hardswishZ_has_hardsigmoidZ	_has_mishÚdictÚFr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r#   Z	swish_jitZmish_jitZhard_sigmoid_jitZhard_swish_jitZhard_mish_jitr"   Zswish_meZmish_meZhard_sigmoid_meZhard_swish_meZhard_mish_mer!   Z_ACT_FNSÚaÚ
setdefaultÚgetZSiLUZSwishZMishZReLUZReLU6Z	LeakyReLUZELUZPReLUZCELUZSELUZGELUZGELUTanhZ	QuickGELUZSigmoidZTanhZHardsigmoidZHardSigmoidZ	HardswishZ	HardSwishZHardMishZIdentityr*   ZSwishJitZMishJitZHardSigmoidJitZHardSwishJitZHardMishJitr)   ZSwishMeZMishMeZHardSigmoidMeZHardSwishMeZ
HardMishMer(   Z_ACT_LAYERSr'   r&   ÚModuler+   r/   r$   r$   r$   r%   Ú<module>   s¸   ïú	ú	
íú	ú	
