U
    ¯Ê¹jü  ã                   @   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   úZ/var/www/html/bwave/python/venv/lib/python3.8/site-packages/timm/layers/create_norm_act.pyÚ	<setcomp>&   s     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   ÚkwargsÚlayerZlayer_instancer   r   r   Úcreate_norm_act_layer,   s
    r   c                 C   sl  | d krd S t | tttjtjfƒs&t‚|d ksHt |tttjtjfƒsHt‚i }t | tjƒrj| | j	¡ | j
} t | tƒr | s|d S |  dd¡ ¡  d¡d }t| }nž| tkr®| }n�t | tjƒrÀ| }n~| j ¡ }| d¡rÚt}nd| d¡rêt}nT| d¡�rtjtdd	�}n8| d
¡�rt}n&| d¡�r*t}nd�s>td|› �ƒ‚|tk�rT| d|¡ |�rhtj|f|Ž}|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ÚAssertionErrorÚupdateÚkeywordsÚfuncÚreplaceÚlowerÚsplitÚ_NORM_ACT_MAPÚ_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   sD    "





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EvoNorm2dS2ar1   Úitemsr2   r5   r   r   r   r   r   r   Ú<module>   sJ   í     ÿ
