
    Ng                         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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                    t          | t          j        j                  r| S d }| ret          | t                    r.|                                 } | dk    r	t          }n,| dk    r	t          }n| dk    r	t          }n| dk    rt          t          d          }n| dk    rt          }n| dk    rt          }n| d	k    rt          }n| d
k    rt          t          dd          }n| dk    rt          }n| dk    rt          }n| dk    rt          }n| dk    rt           }nq| dk    rt"          S | dk    rt$          S | dk    rt&          S | dk    rt(          }n<| dk    rt*          }n.J d| z              t          | t,                    r
| rt          }n| }|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/html/ai-engine/env/lib/python3.11/site-packages/timm/layers/create_attn.pyget_attnr3      s   )UX_-- J 7#i%% 6	#!))I D  %

e##.

e##&

f$$$Y===

f$$'

d"")

d""*

e##$]TeTTT

f$$'

g%%,


 d"",

g%%&


 h&&""l**%%f$$d"")

e##,

 E89DDDD	4(( 	# &%
"J    c                 :    t          |           }|	 ||fi |S d S )N)r3   )r0   channelskwargsr1   s       r2   create_attnr8   T   s2    )$$Jz(--f---4r4   ) __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      s3           + + + + + + - - - - - - - - & & & & & & & & ' ' ' ' ' ' ) ) ) ) ) )       % % % % % % 9 9 9 9 9 9 9 9 - - - - - - ! ! ! ! ! ! 7 7 7 7 7 7 7 7< < <~    r4   