a
    d                     @   s   d Z ddlZddlZddlT ddlmZmZ ddlmZm	Z	m
Z
mZ ddlmZ eeee	eje	dde
eeeeeeeeeeeeeed	Zd
d e D Zee	e
eeehZdddZdddZdS )aU   NormAct (Normalizaiton + Activation Layer) Factory

Create norm + act combo modules that attempt to be backwards compatible with separate norm + act
isntances in models. Where these are used it will be possible to swap separate BN + act layers with
combined modules like IABN or EvoNorms.

Hacked together by / Copyright 2020 Ross Wightman
    N   )*)FilterResponseNormAct2dFilterResponseNormTlu2d)BatchNormAct2dGroupNormActLayerNormActLayerNormAct2d)
InplaceAbnZ
num_groups)	batchnormZbatchnorm2d	groupnorm
groupnorm1	layernormlayernorm2dZ	evonormb0Z	evonormb1Z	evonormb2Z	evonorms0Z
evonorms0aZ	evonorms1Z
evonorms1aZ	evonorms2Z
evonorms2aZfrnZfrntluZ
inplaceabnZiabnc                 C   s   h | ]\}}|qS  r   ).0nmr   r   d/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/timm/layers/create_norm_act.py	<setcomp>&       r   TFc                 K   s4   t | |d}||fd|i|}|r0tj|}|S )N)	act_layer	apply_act)get_norm_act_layerZtorchjitscript)
layer_nameZnum_featuresr   r   r   kwargsZlayerZlayer_instancer   r   r   create_norm_act_layer,   s
    r   c                 C   s^  t | tttjtjfsJ |d u s<t |tttjtjfs<J i }t | tjr^|| j | j	} t | tr| 
dd dd }t|d }n| tv r| }nt | tjr| }n|| j }|drt}nb|drt}nR|drtjtdd	}n8|d
rt}n&|drt}nds,J d| |tv rB|d| |rZtj|fi |}|S )N_ -r   r   r   r   r   r   r   r   Fz!No equivalent norm_act layer for r   )
isinstancetypestrtypesFunctionType	functoolspartialupdatekeywordsfuncreplacelowersplit_NORM_ACT_MAPget_NORM_ACT_TYPES__name__
startswithr   r   r	   r   _NORM_ACT_REQUIRES_ARG
setdefault)Z
norm_layerr   Znorm_act_kwargsr   Znorm_act_layer	type_namer   r   r   r   4   s<    "





r   )NTF)N)__doc__r&   r(   Zevo_normZfilter_response_normr   r   Znorm_actr   r   r   r	   Zinplace_abnr
   dictr)   ZEvoNorm2dB0ZEvoNorm2dB1ZEvoNorm2dB2ZEvoNorm2dS0ZEvoNorm2dS0aZEvoNorm2dS1ZEvoNorm2dS1aZEvoNorm2dS2ZEvoNorm2dS2ar0   itemsr2   r5   r   r   r   r   r   r   <module>   s@   
