
    kh                         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 Zd Zy)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                    t        | t        j                  j                        r| S d }| r5t        | t              r| j                         } | dk(  rt        }|S | dk(  rt        }|S | dk(  rt        }|S | dk(  rt        t        d      }|S | 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(  rt        }|S | dk(  rt        }|S | dk(  rt        }|S | dk(  rt         }|S | dk(  rt"        S | dk(  rt$        S | dk(  rt&        S | dk(  rt(        }|S | dk(  rt*        }|S J d| z         t        | t,              r
| rt        }|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_clss     S/var/www/teggl/fontify/venv/lib/python3.12/site-packages/timm/layers/create_attn.pyget_attnr3      s    )UXX__-Ji%!)I D %
d c e#.
` _ e#&
\ [ f$$Y=
X W f$'
T S d")
P O d"*
L K e#$]TeT
H G f$'
D C g%,
@ 7 d",
4 3 g%&
0 ' h&""l*%%f$d")
  e#,
  E89DDu	4(%
  #J    c                 0    t        |       }|	 ||fi |S y )N)r3   )r0   channelskwargsr1   s       r2   create_attnr8   T   s%    )$J(-f--r4   ) __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   r3   r8    r4   r2   <module>rE      s>      + - & ' )  % 9 - ! 7<~r4   