a
    d                     @   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rt
}n| dkrt}n| d	krt}n| d
krt	tddd}n| dkrt}n| dkrt}nv| dkrt}nh| dkrt}nZ| dkrtS | dkrtS | dkrtS | dkr$t}n"| dkr4t}ndsdJ 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nlZ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 r$   `/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/timm/layers/create_attn.pyget_attn   s\    



r&   c                 K   s$   t | }|d ur ||fi |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   ?