o
    پi                     @   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mZmZ ddlmZ ed&i ded	ed
e	deje	ddde
dedededededededededededededededeZdd e D Zee	e
eeeeehZd'd"d#Zd(d$d%Z dS ))aU   NormAct (Normalization + Activation Layer) Factory

Create norm + act combo modules that attempt to be backwards compatible with separate norm + act
instances 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
RmsNormActRmsNormAct2d)
InplaceAbn	batchnormbatchnorm2d	groupnorm
groupnorm1
num_groups	layernormlayernorm2d	evonormb0	evonormb1	evonormb2	evonorms0
evonorms0a	evonorms1
evonorms1a	evonorms2
evonorms2afrnfrntlu
inplaceabniabnrmsnorm	rmsnorm2dc                 C   s   h | ]\}}|qS  r$   ).0nmr$   r$   O/home/ubuntu/.local/lib/python3.10/site-packages/timm/layers/create_norm_act.py	<setcomp>(   s    r)   TFc                 K   s4   t | |d}||fd|i|}|rtj|}|S )N)	act_layer	apply_act)get_norm_act_layertorchjitscript)
layer_namenum_featuresr*   r+   r.   kwargslayerlayer_instancer$   r$   r(   create_norm_act_layer6   s
   r5   c                 C   sp  | d u rd 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r5|| j | j	} t | trP| s>d S | 
dd dd }t| }nQ| tv rW| }nJt | tjr`| }nA| j }|drmt}n4|drut}n,|drtjtdd	}n|d
rt}n|drt}n|drt}nJ d| |tv r|d| |rtj|fi |}|S )N_ -r   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_NORM_ACT_TYPES__name__
startswithr   r   r	   r   r   _NORM_ACT_REQUIRES_ARG
setdefault)
norm_layerr*   norm_act_kwargsr0   norm_act_layer	type_namer$   r$   r(   r,   >   sH   "








r,   r$   )NTF)N)!__doc__r<   r>   evo_normfilter_response_normr   r   norm_actr   r   r   r	   r
   r   inplace_abnr   dictr?   EvoNorm2dB0EvoNorm2dB1EvoNorm2dB2EvoNorm2dS0EvoNorm2dS0aEvoNorm2dS1EvoNorm2dS1aEvoNorm2dS2EvoNorm2dS2arF   itemsrG   rJ   r5   r,   r$   r$   r$   r(   <module>   s|     	

