U
    ¯Ê¹jº  ã                   @   sÀ   d Z ddlZddlmZ ddlmZ ddlmZmZ ddl	m
Z
mZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZmZ ddlmZ ddlmZ ddlmZmZ dd„ Zdd„ ZdS )zF Attention Factory

Hacked together by / Copyright 2021 Ross Wightman
é    N)Úpartialé   )ÚBottleneckAttn)Ú
CbamModuleÚLightCbamModule)Ú	EcaModuleÚ
CecaModule)ÚGatherExcite)ÚGlobalContext)ÚHaloAttn)ÚLambdaLayer)ÚNonLocalAttnÚBatNonLocalAttn)ÚSelectiveKernel)Ú	SplitAttn)ÚSEModuleÚEffectiveSEModulec                 C   sh  t | tjjƒr| S d }| �rdt | tƒ�rH|  ¡ } | dkr@t}�qd| dkrNt}nø| dkr\t}nê| dkrrt	tdd�}nÔ| dkr€t
}nÆ| dkrŽt}n¸| d	krœt}nª| d
kr´t	tddd�}n’| dkrÂt}n„| dkrÐt}nv| dkrÞt}nh| dkrìt}nZ| dkrøtS | dk�rtS | dk�rtS | dk�r$t}n"| dk�r4t}nd�sdtd|  ƒ‚nt | tƒ�r`| �rdt}n| }|S )NÚseZeseÚecaZecamT)Zuse_mlpZcecaÚgeÚgcZgcaF)Zfuse_addZ
fuse_scaleÚcbamZlcbamÚskZsplatÚlambdaZ
bottleneckZhaloÚnlÚbatzInvalid attn module (%s))Ú
isinstanceÚtorchÚnnÚModuleÚstrÚlowerr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   ÚAssertionErrorÚbool)Ú	attn_typeÚ
module_cls© r&   úV/var/www/html/bwave/python/venv/lib/python3.8/site-packages/timm/layers/create_attn.pyÚget_attn   s\    



r(   c                 K   s    t | ƒ}|d k	r||f|ŽS d S )N)r(   )r$   ZchannelsÚkwargsr%   r&   r&   r'   Úcreate_attnT   s    r*   ) Ú__doc__r   Ú	functoolsr   Zbottleneck_attnr   r   r   r   r   r   r   Zgather_exciter	   Zglobal_contextr
   Z	halo_attnr   Zlambda_layerr   Znon_local_attnr   r   Zselective_kernelr   Z
split_attnr   Zsqueeze_exciter   r   r(   r*   r&   r&   r&   r'   Ú<module>   s   ?