o
    پi                     @   s   d Z ddlZddlZddlmZ ddlmZ ddlmZm	Z	m
Z
mZmZmZmZmZ ddlmZ eejejejee	e
eeeeeedZdd	 e D Zd
d Zdd ZdS )z Norm Layer Factory

Create norm modules by string (to mirror create_act and creat_norm-act fns)

Copyright 2022 Ross Wightman
    N)Type   )	GroupNorm
GroupNorm1	LayerNormLayerNorm2dRmsNorm	RmsNorm2d
SimpleNormSimpleNorm2d)FrozenBatchNorm2d)	batchnormbatchnorm2dbatchnorm1d	groupnorm
groupnorm1	layernormlayernorm2drmsnorm	rmsnorm2d
simplenormsimplenorm2dfrozenbatchnorm2dc                 C   s   h | ]\}}|qS  r   ).0nmr   r   K/home/ubuntu/.local/lib/python3.10/site-packages/timm/layers/create_norm.py	<setcomp>   s    r   c                 K   s   t | }||fi |}|S )N)get_norm_layer)
layer_namenum_featureskwargslayerlayer_instancer   r   r   create_norm_layer!   s   r%   c                 C   s   | d u rd S t | tttjtjfsJ i }t | tjr$|| j | j	} t | tr:| s-d S | 
dd }t| } n| } |rGtj| fi |} | S )N_ )
isinstancetypestrtypesFunctionType	functoolspartialupdatekeywordsfuncreplacelower	_NORM_MAP)
norm_layernorm_kwargsr    r   r   r   r   '   s    

r   )__doc__r-   r+   typingr   torch.nnnnnormr   r   r   r   r   r	   r
   r   torchvision.ops.miscr   dictBatchNorm2dBatchNorm1dr4   items_NORM_TYPESr%   r   r   r   r   r   <module>   s0    (