o
    پi                     @   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   sl  t | tjjr	| S d }| rt | tr|  } | dkrt}|S | dkr&t}|S | dkr.t}|S | dkr:t	tdd}|S | dkrBt
}|S | dkrJt}|S | d	krRt}|S | d
kr_t	tddd}|S | dkrgt}|S | dkrot}|S | dkrwt}|S | dkrt}|S | dkrtS | dkrtS | dkrtS | dkrt}|S | dkrt}|S J d|  t | tr| rt}|S | }|S )NseeseecaecamT)use_mlpcecagegcgcaF)fuse_add
fuse_scalecbamlcbamsksplatlambda
bottleneck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   bool)	attn_type
module_cls r0   K/home/ubuntu/.local/lib/python3.10/site-packages/timm/layers/create_attn.pyget_attn   sz   
20.,*(&$" 

r2   c                 K   s$   t | }|d ur||fi |S d S )N)r2   )r.   channelskwargsr/   r0   r0   r1   create_attnT   s   r5   ) __doc__r(   	functoolsr   bottleneck_attnr   r   r   r   r   r   r   gather_exciter	   global_contextr
   	halo_attnr   lambda_layerr   non_local_attnr   r   selective_kernelr   
split_attnr   squeeze_exciter   r   r2   r5   r0   r0   r0   r1   <module>   s     ?