
    Ng                        d Z ddlmZ ddlmZmZmZmZmZ ddl	Z	ddl
mZ ddlmZmZmZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZ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'm(Z( ddl)m*Z*m+Z+m,Z, dgZ- G d dej.                  Z/ G d dej.                  Z0 G d dej.                  Z1 G d dej.                  Z2ddZ3d Z4ddZ5ddZ6ddZ7 e*i d e6ddd d!          d" e6ddd d!          d# e6dd$d$%          d& e6dd$d$d'(          d) e6d*dd d+          d, e6d-dd d+          d. e6d/d0          d1 e6d2dd d+          d3 e6d4dd d+          d5 e6d6dd d+          d7 e6d8ddd d9          d: e6ddd d!          d; e6d<ddd d9          d= e6d>ddd d9          d? e6d@ddd d9          dA e6ddBdCddDE          dF e6ddBdCddDE          i dG e6dddHI          dJ e6dddHI          dK e6dddHI          dL e6dMdd d+          dN e6dOdd d+          dP e6dQdd d+          dR e6dSdd d+          dT e6dUdd d+          dV e6dWdd d+          dX e6dYdd d+          dZ e6d[dd d+          d\ e6d]dd d+          d^ e6d_ddBdCddD`          da e6dbddBdCddD`          dc e6ddddBdCddD`          de e6dfddBdCddD`          dg e6dhddBdCddD`          i di e6djddkl          dm e6dnddkl          do e6dpddkl          dq e6drddkl          ds e6dtddkl          du e7dvdd d+          dw e7dxddBdCddD`          dy e7dzdd d+          d{ e7d|ddBdCddD`          d} e7d~dd d+          d e7dddBdCddD`          d e7ddd d+          d e7dddBdCddD`          d e7dddBdCddD`          d e7ddddddD`          d e7ddd d+          d e7ddd d+          i d e7ddd d+          d e7ddd d+          d e7ddd d+          d e7ddd d+          d e7ddd d+          d e7ddd d+          d e7dddl          d e7dddl          d e7dddl          d e7dddl          d e7dddl          d e7dddl          d e7dddl          d e7dddl          d e6            d e6deed/dd          d e6deedBdCddD          i d e6deeddd          d e6deedBdCddD          d e6deed/dd          d e6deedBdCd          d e6deed/dd          d e6deedBdCddD          d e6deed/dd          d e6deedHd/dd          d e6deedHddd          d e6deedHdBdCddD          d e6deedHdBdCddD          d e6deedHd/dd          d e6ddeed/dddĬŦ          d e6ddeed/dddĬŦ          d e6ddeed/dddĬŦ          d e6ddeeddddĬŦ          d e6ddeeddddĬŦ           e6ddeed/dddϬŦ           e6ddeeddddϬŦ           e6ddeeddddϬŦ           e6ddeed/dddӬŦ           e6ddeed/dddӬŦ           e6dd$d$ddd           e6dd$d$ddd           e6dd$d$ddd          dל          Z8e+dde2fdل            Z9e+dde2fdڄ            Z:e+dde2fdۄ            Z;e+dde2fd܄            Z<e+dde2fd݄            Z=e+dde2fdބ            Z>e+dde2fd߄            Z?e+dde2fd            Z@e+dde2fd            ZAe+dde2fd            ZBe+dde2fd            ZCe+dde2fd            ZDe+dde2fd            ZEe+dde2fd            ZFe+dde2fd            ZGe+dde2fd            ZHe+dde2fd            ZIe+dde2fd            ZJe+dde2fd            ZKe+dde2fd            ZLe+dde2fd            ZMe+dde2fd            ZNe+dde2fd            ZOe+dde2fd            ZPe+dde2fd            ZQe+dde2fd            ZRe+dde2fd            ZSe+dde2fd            ZTe+dde2fd            ZUe+dde2fd            ZVe+dde2fd            ZW e,eXdLdNdPdRdTd^dadcdedgdidmdodqdsd           dS )ax   ConvNeXt

Papers:
* `A ConvNet for the 2020s` - https://arxiv.org/pdf/2201.03545.pdf
@Article{liu2022convnet,
  author  = {Zhuang Liu and Hanzi Mao and Chao-Yuan Wu and Christoph Feichtenhofer and Trevor Darrell and Saining Xie},
  title   = {A ConvNet for the 2020s},
  journal = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
  year    = {2022},
}

* `ConvNeXt-V2 - Co-designing and Scaling ConvNets with Masked Autoencoders` - https://arxiv.org/abs/2301.00808
@article{Woo2023ConvNeXtV2,
  title={ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders},
  author={Sanghyun Woo, Shoubhik Debnath, Ronghang Hu, Xinlei Chen, Zhuang Liu, In So Kweon and Saining Xie},
  year={2023},
  journal={arXiv preprint arXiv:2301.00808},
}

Original code and weights from:
* https://github.com/facebookresearch/ConvNeXt, original copyright below
* https://github.com/facebookresearch/ConvNeXt-V2, original copyright below

Model defs atto, femto, pico, nano and _ols / _hnf variants are timm originals.

Modifications and additions for timm hacked together by / Copyright 2022, Ross Wightman
    )partial)CallableListOptionalTupleUnionN)IMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STDOPENAI_CLIP_MEANOPENAI_CLIP_STD)trunc_normal_AvgPool2dSameDropPathMlpGlobalResponseNormMlpLayerNorm2d	LayerNorm	RmsNorm2dRmsNormcreate_conv2dget_act_layerget_norm_layermake_divisible	to_ntuple)NormMlpClassifierHeadClassifierHead   )build_model_with_cfg)feature_take_indices)named_applycheckpoint_seq)generate_default_cfgsregister_modelregister_model_deprecationsConvNeXtc                   &     e Zd Zd fd	Zd Z xZS )
Downsampler   c                 |   t                                                       |dk    r|nd}|dk    s|dk    r4|dk    r|dk    rt          nt          j        } |d|dd          | _        nt          j                    | _        ||k    rt          ||dd          | _        d S t          j                    | _        d S )Nr      TF)	ceil_modecount_include_pad)stride)	super__init__r   nn	AvgPool2dpoolIdentityr   conv)selfin_chsout_chsr,   dilation
avg_strideavg_pool_fn	__class__s          P/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/models/convnext.pyr.   zDownsample.__init__<   s    '1}}VV!
A::A+5??x!||--QSQ]K#AzTUZ[[[DIIDIW%fgqCCCDIIIDIII    c                 Z    |                      |          }|                     |          }|S N)r1   r3   r4   xs     r;   forwardzDownsample.forwardJ   s%    IIaLLIIaLLr<   r   r   __name__
__module____qualname__r.   rA   __classcell__r:   s   @r;   r'   r'   :   sL        & & & & & &      r<   r'   c                        e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 ddedee         dededeeeeef         f         dede	de	de	dee         dee
ef         dee         def fdZd Z xZS )ConvNeXtBlockaa   ConvNeXt Block
    There are two equivalent implementations:
      (1) DwConv -> LayerNorm (channels_first) -> 1x1 Conv -> GELU -> 1x1 Conv; all in (N, C, H, W)
      (2) DwConv -> Permute to (N, H, W, C); LayerNorm (channels_last) -> Linear -> GELU -> Linear; Permute back

    Unlike the official impl, this one allows choice of 1 or 2, 1x1 conv can be faster with appropriate
    choice of LayerNorm impl, however as model size increases the tradeoffs appear to change and nn.Linear
    is a better choice. This was observed with PyTorch 1.10 on 3090 GPU, it could change over time & w/ different HW.
    N   r   rB      FTư>gelu        r5   r6   kernel_sizer,   r7   	mlp_ratioconv_mlp	conv_biasuse_grnls_init_value	act_layer
norm_layer	drop_pathc           	         t                                                       |p|} t          d          |          }t          |          }|s|rt          nt
          }t          |	rt          nt          |          }|| _	        t          |||||d         d|          | _         ||          | _         ||t          ||z            |          | _        |
)t          j        |
t#          j        |          z            nd| _        ||k    s|dk    s|d         |d         k    rt)          ||||d         	          | _        nt          j                    | _        |d
k    rt/          |          nt          j                    | _        dS )a[  

        Args:
            in_chs: Block input channels.
            out_chs: Block output channels (same as in_chs if None).
            kernel_size: Depthwise convolution kernel size.
            stride: Stride of depthwise convolution.
            dilation: Tuple specifying input and output dilation of block.
            mlp_ratio: MLP expansion ratio.
            conv_mlp: Use 1x1 convolutions for MLP and a NCHW compatible norm layer if True.
            conv_bias: Apply bias for all convolution (linear) layers.
            use_grn: Use GlobalResponseNorm in MLP (from ConvNeXt-V2)
            ls_init_value: Layer-scale init values, layer-scale applied if not None.
            act_layer: Activation layer.
            norm_layer: Normalization layer (defaults to LN if not specified).
            drop_path: Stochastic depth probability.
        r)   )use_convr   T)rP   r,   r7   	depthwisebias)rV   Nr   )r,   r7   rO   )r-   r.   r   r   r   r   r   r   r   use_conv_mlpr   conv_dwnormintmlpr/   	Parametertorchonesgammar'   shortcutr2   r   rX   )r4   r5   r6   rP   r,   r7   rQ   rR   rS   rT   rU   rV   rW   rX   	mlp_layerr:   s                  r;   r.   zConvNeXtBlock.__init__[   s   B 	#V9Q<<))!),,	 	@(0?iJWE11#PXYYY	$$#a[
 
 
 Jw''	9Wc)g*=&>&>)TTTJWJcR\-%*W2E2E"EFFFim
W!x{hqk/I/I&vwvPXYZP[\\\DMMKMMDM09B),,,BKMMr<   c                    |}|                      |          }| j        r+|                     |          }|                     |          }nZ|                    dddd          }|                     |          }|                     |          }|                    dddd          }| j        0|                    | j                            dddd                    }|                     |          | 	                    |          z   }|S )Nr   r)      r   )
r^   r]   r_   ra   permutere   mulreshaperX   rf   )r4   r@   rf   s      r;   rA   zConvNeXtBlock.forward   s    LLOO 	&		!AAA		!Q1%%A		!AA		!Q1%%A:!dj((B15566ANN1h 7 77r<   )NrK   r   rB   rL   FTFrM   rN   NrO   )rD   rE   rF   __doc__r`   r   r   r   floatboolstrr   r.   rA   rG   rH   s   @r;   rJ   rJ   P   s>         &* 4: ""!-1.4-1!9R 9R9R c]9R 	9R
 9R CsCx019R 9R 9R 9R 9R $E?9R S(]+9R !*9R 9R 9R 9R 9R 9R 9Rv      r<   rJ   c                   >     e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 d fd		Zd
 Z xZS )ConvNeXtStagerK   r)   rB   N      ?FTrN   c                 v   t                                                       d| _        ||k    s|dk    s|d         |d         k    rl|dk    s|d         |d         k    rdnd}|d         dk    rdnd}t          j         ||          t          |||||d         ||
                    | _        |}nt          j                    | _        |pdg|z  }g }t          |          D ]A}|	                    t          ||||d         ||         ||	|
|||	r|n|                     |}Bt          j        | | _        d S )	NFr   r   r)   same)rP   r,   r7   paddingr\   rO   )r5   r6   rP   r7   rX   rU   rR   rS   rT   rV   rW   )r-   r.   grad_checkpointingr/   
Sequentialr   
downsampler2   rangeappendrJ   blocks)r4   r5   r6   rP   r,   depthr7   drop_path_ratesrU   rR   rS   rT   rV   rW   norm_layer_clds_kspadstage_blocksir:   s                      r;   r.   zConvNeXtStage.__init__   s   " 	"'W

hqkXa[.H.H!x{hqk'A'AAAqE$QK!OO&&C m
6"" %!%a["   DO FF kmmDO)9bTE\u 	 	A'!!)!,+!##)1D::}! ! !    FFm\2r<   c                     |                      |          }| j        r4t          j                                        st          | j        |          }n|                     |          }|S r>   )rz   rx   rc   jitis_scriptingr!   r}   r?   s     r;   rA   zConvNeXtStage.forward   sZ    OOA" 	59+A+A+C+C 	t{A..AAAAr<   )rK   r)   r)   rB   Nrt   FTFrN   NNrC   rH   s   @r;   rs   rs      ss          83 83 83 83 83 83t      r<   rs   c            +           e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d>dededededeedf         deedf         deeeedf         f         dee	         dedede	de
dee         d e
d!e
d"e
d#eeef         d$eeeef                  d%ee	         d&e	d'e	f* fd(Zej        j        d?d)            Zej        j        d@d*            Zej        j        d+ej        fd,            ZdAdedee         fd-Z	 	 	 	 	 dBd/ej        d0eeeee         f                  d1e
d2e
d3ed4e
d+eeej                 eej        eej                 f         f         fd5Z	 	 	 dCd0eeee         f         d7e
d8e
fd9Zd: Zd?d;e
fd<Zd= Z xZS )Dr%   zl ConvNeXt
        A PyTorch impl of : `A ConvNet for the 2020s`  - https://arxiv.org/pdf/2201.03545.pdf
    ri     avg    ri   ri   	   ri   `           rK   rM   patchrL   rt   FNTrN   rO   in_chansnum_classesglobal_pooloutput_stridedepths.dimskernel_sizesrU   	stem_type
patch_sizehead_init_scalehead_norm_firsthead_hidden_sizerR   rS   rT   rV   rW   norm_eps	drop_ratedrop_path_ratec                    t                                                       |dv sJ  t          d          |          }t          |t                    o|                    d          }||rI|rt          nt          }|r|n|rt          nt          }|"t          ||          }t          ||          }n0|s
J d            t          |          }|}|t          ||          }t          |          }|| _        || _        g | _        |	dv sJ |	dk    rIt!          j        t!          j        ||d	         |
|
|
           ||d	                             | _        |
}nd|	v rt)          |d	         dz            n|d	         }t!          j        t+          dt!          j        ||ddd|          d|	v r
 |            ndt!          j        ||d	         ddd|           ||d	                   g           | _        d}t!          j                    | _        d t/          j        d	|t3          |                                        |          D             }g }|d	         }|}d}t7          d          D ]}|dk    s|d	k    rdnd} ||k    r| dk    r|| z  }d} || z  }|dv rdnd}!||         }"|                    t;          ||"||         | |!|f||         ||         |||||||                     |"}| xj        t=          ||d|           gz  c_        t!          j        | | _        |x| _        | _         |r<|rJ  || j                  | _!        tE          | j        ||| j                  | _#        nNt!          j$                    | _!        tK          | j        |||| j        |d          | _#        | j#        j        | _         tM          t          tN          |          |            dS )a  
        Args:
            in_chans: Number of input image channels.
            num_classes: Number of classes for classification head.
            global_pool: Global pooling type.
            output_stride: Output stride of network, one of (8, 16, 32).
            depths: Number of blocks at each stage.
            dims: Feature dimension at each stage.
            kernel_sizes: Depthwise convolution kernel-sizes for each stage.
            ls_init_value: Init value for Layer Scale, disabled if None.
            stem_type: Type of stem.
            patch_size: Stem patch size for patch stem.
            head_init_scale: Init scaling value for classifier weights and biases.
            head_norm_first: Apply normalization before global pool + head.
            head_hidden_size: Size of MLP hidden layer in head if not None and head_norm_first == False.
            conv_mlp: Use 1x1 conv in MLP, improves speed for small networks w/ chan last.
            conv_bias: Use bias layers w/ all convolutions.
            use_grn: Use Global Response Norm (ConvNeXt-V2) in MLP.
            act_layer: Activation layer type.
            norm_layer: Normalization layer type.
            drop_rate: Head pre-classifier dropout rate.
            drop_path_rate: Stochastic depth drop rate.
        )      r   rL   rmsnormN)epszcIf a norm_layer is specified, conv MLP must be used so all norm expect rank-4, channels-first input)r   overlapoverlap_tieredoverlap_actr   r   )rP   r,   r\   tieredr)   ri   r   )rP   r,   rw   r\   actc                 6    g | ]}|                                 S  )tolist).0r@   s     r;   
<listcomp>z%ConvNeXt.__init__.<locals>.<listcomp>K  s     eee1AHHJJeeer<   )r   r)   )rP   r,   r7   r~   r   rU   rR   rS   rT   rV   rW   r   zstages.)num_chs	reductionmodule)	pool_typer   rN   )hidden_sizer   r   rW   rV   )r   )(r-   r.   r   
isinstancerq   
startswithr   r   r   r   r   r   r   r   r   feature_infor/   ry   Conv2dstemr   filterstagesrc   linspacesumsplitr{   r|   rs   dictnum_featuresr   norm_prer   headr2   r   r    _init_weights)$r4   r   r   r   r   r   r   r   rU   r   r   r   r   r   rR   rS   rT   rV   rW   r   r   r   use_rmsr   stem_stridemid_chsdp_ratesr   prev_chscurr_strider7   r   r,   first_dilationr6   r:   s$                                      r;   r.   zConvNeXt.__init__   s   ^ 	++++#y||L11Z--R*2G2G	2R2R&->;J*2[JJG9ZQZM#$ZX>>>
 '8 D D D v vuv v v'
33J&M# '8 D D D!),,	&"QQQQQ	(DGJ]fggg
47## DI %KK6>)6K6KnT!W\222QUVWQXGvd	(G1aV_```$	11		t	'47!QU^___
47##	5 ( ( DI Kmooeeq.#f++(V(V(\(\]c(d(deee7!q 	g 	gA%**a!eeQQFm++

F"6!K"*f"4"4QQ!N1gGMM-(O((3Qi (+!##%+       H$x;WdabWdWd"e"e"e!ffmV,4<<D1  	;''''&Jt'899DM&!%.	  DII KMMDM-!,%.%   DI %)I$:D!GM?KKKTRRRRRr<   c                 0    t          d|rdng d          S )Nz^stemz^stages\.(\d+)))z^stages\.(\d+)\.downsample)r   )z^stages\.(\d+)\.blocks\.(\d+)N)z	^norm_pre)i )r   r}   )r   )r4   coarses     r;   group_matcherzConvNeXt.group_matcher  s9    (. $$ 5 5 5
 
 
 	
r<   c                 (    | j         D ]	}||_        
d S r>   )r   rx   )r4   enabless      r;   set_grad_checkpointingzConvNeXt.set_grad_checkpointing  s(     	* 	*A#)A  	* 	*r<   returnc                     | j         j        S r>   )r   fc)r4   s    r;   get_classifierzConvNeXt.get_classifier  s    y|r<   c                 J    || _         | j                            ||           d S r>   )r   r   reset)r4   r   r   s      r;   reset_classifierzConvNeXt.reset_classifier  s&    &	[11111r<   NCHWr@   indicesr_   
stop_early
output_fmtintermediates_onlyc                    |dv s
J d            g }t          t          | j                  dz   |          \  }}	d}
|                     |          }|
|v r|                    |           t
          j                                        s|s| j        }n| j        d|	         }|D ]+}|
dz  }
 ||          }|
|v r|                    |           ,|r|S |                     |          }||fS )a   Forward features that returns intermediates.

        Args:
            x: Input image tensor
            indices: Take last n blocks if int, all if None, select matching indices if sequence
            norm: Apply norm layer to compatible intermediates
            stop_early: Stop iterating over blocks when last desired intermediate hit
            output_fmt: Shape of intermediate feature outputs
            intermediates_only: Only return intermediate features
        Returns:

        )r   zOutput shape must be NCHW.r   r   N)	r   lenr   r   r|   rc   r   r   r   )r4   r@   r   r_   r   r   r   intermediatestake_indices	max_indexfeat_idxr   stages                r;   forward_intermediateszConvNeXt.forward_intermediates  s    * Y&&&(D&&&"6s4;7G7G!7KW"U"Ui IIaLL|##  ###9!!## 	-: 	-[FF[),F 	( 	(EMHaA<''$$Q''' 	!  MM!-r<   r   
prune_norm
prune_headc                     t          t          | j                  dz   |          \  }}| j        d|         | _        |rt          j                    | _        |r|                     dd           |S )z@ Prune layers not required for specified intermediates.
        r   Nr    )r   r   r   r/   r2   r   r   )r4   r   r   r   r   r   s         r;   prune_intermediate_layersz"ConvNeXt.prune_intermediate_layers  sr     #7s4;7G7G!7KW"U"Uik*9*- 	*KMMDM 	)!!!R(((r<   c                     |                      |          }|                     |          }|                     |          }|S r>   )r   r   r   r?   s     r;   forward_featureszConvNeXt.forward_features  s6    IIaLLKKNNMM!r<   
pre_logitsc                 ^    |r|                      |d          n|                      |          S )NT)r   )r   )r4   r@   r   s      r;   forward_headzConvNeXt.forward_head  s,    0:Ltyyty,,,		!Lr<   c                 Z    |                      |          }|                     |          }|S r>   )r   r   r?   s     r;   rA   zConvNeXt.forward  s-    !!!$$a  r<   )ri   r   r   r   r   r   rK   rM   r   rL   rt   FNFTFrN   NNrO   rO   F)Tr>   )NFFr   F)r   FT)rD   rE   rF   rn   r`   rq   r   r   r   ro   rp   r   r.   rc   r   ignorer   r   r/   Moduler   r   Tensorr   r   r   r   r   rA   rG   rH   s   @r;   r%   r%      s         #$!#&2$789-1$%'$).2""!.49=(,!$&-TS TSTS TS 	TS
 TS #s(OTS S/TS  U38_ 45TS $E?TS TS TS #TS "TS 'smTS TS  !TS" #TS$ S(]+%TS& !sH}!56'TS( uo)TS* +TS, "-TS TS TS TS TS TSl Y
 
 
 
 Y* * * * Y	    2 2C 2hsm 2 2 2 2 8<$$',/  / |/  eCcN34/  	/ 
 /  /  !%/  
tEL!5tEL7I)I#JJ	K/  /  /  / f ./$#	 3S	>*  	      M M$ M M M M      r<   rt   c                     t          | t          j                  rEt          | j        d           | j        &t          j                            | j                   d S d S t          | t          j                  rt          | j        d           t          j                            | j                   |rFd|v rD| j        j	        
                    |           | j        j	        
                    |           d S d S d S d S )Ng{Gz?)stdhead.)r   r/   r   r   weightr\   initzeros_Lineardatamul_)r   namer   s      r;   r   r     s    &")$$ 	3fm----;"GNN6;''''' #"	FBI	&	& 3fm----
v{### 	3GtOOM##O444K!!/222223 3	3 	3OOr<   c                 Z   d| v sd| v r| S d| v r| d         } i }d| v rd |                                  D             }d| v r4| d         |d<   t          j        | d         j        d                   |d	<   nMd
| v rI| d
         |d<   | d         |d<   | d         |d<   t          j        | d         j        d                   |d	<   |S ddl}|                                  D ]O\  }}|                    dd          }|                    dd|          }|                    dd|          }|                    dd          }|                    dd          }d|v rL|                    dd          }|                    dd          }|                    |j        d                   }|                    d d!          }|                    d"          r|                    d#d$          }|j	        d%k    r8d&|vr4|
                                |         j        }|                    |          }|||<   Q|S )'z Remap FB checkpoints -> timm zhead.norm.weightznorm_pre.weightmodelzvisual.trunk.stem.0.weightc                 l    i | ]1\  }}|                     d           |                    d d          |2S )zvisual.trunk.r   )r   replace)r   kvs      r;   
<dictcomp>z(checkpoint_filter_fn.<locals>.<dictcomp>  sA    vvv$!QXYXdXdetXuXuvAIIor22Avvvr<   zvisual.head.proj.weightzhead.fc.weightr   zhead.fc.biaszvisual.head.mlp.fc1.weightzhead.pre_logits.fc.weightzvisual.head.mlp.fc1.biaszhead.pre_logits.fc.biaszvisual.head.mlp.fc2.weightNzdownsample_layers.0.zstem.zstages.([0-9]+).([0-9]+)zstages.\1.blocks.\2z#downsample_layers.([0-9]+).([0-9]+)zstages.\1.downsample.\2dwconvr^   pwconvzmlp.fcgrnzgrn.betazmlp.grn.biasz	grn.gammazmlp.grn.weightrj   r   zhead.fc.znorm.r_   z	head.normr)   r   )itemsrc   zerosshaperer  subrm   r   ndim
state_dict)r  r  out_dictr  r  r  model_shapes          r;   checkpoint_filter_fnr    si   Z''+<
+J+J*(
H#z11vv*BRBRBTBTvvv$
22)34M)NH%&',{:>W3X3^_`3a'b'bH^$$)Z774>?[4\H012<=W2XH./)34P)QH%&',{:>Z3[3abc3d'e'eH^$III  ""  1II,g66FF.0FJJFF9;UWXYYIIh	**IIh))A::		*n55A		+'788A		!'"+&&AIIgz**<<   	/		&+..A6Q;;6??**,,Q/5K		+&&AOr<   Fc                     |                     dd          dk    r|                    dd           t          t          | |ft          t          dd          d	|}|S )
Npretrained_cfgr   fcmaepretrained_strictF)r   r   r)   ri   T)out_indicesflatten_sequential)pretrained_filter_fnfeature_cfg)get
setdefaultr   r%   r  r   )variant
pretrainedkwargsr  s       r;   _create_convnextr"  '  sy    zz"B''722 	-u555 ':1\dKKK  	 E
 Lr<   r   c                 4    | dddddt           t          ddd
|S )	Nr   ri      r%  rK   rK         ?bicubicstem.0head.fc)
urlr   
input_size	pool_sizecrop_pctinterpolationmeanr   
first_conv
classifierr	   r
   r+  r!  s     r;   _cfgr5  5  s5    =vI%.Bi   r<   c                 <    | dddddt           t          dddd	d
dd|S )Nr   r$  r&  r'  r(  r)  r*  zcc-by-nc-4.0zarXiv:2301.00808zGConvNeXt-V2: Co-designing and Scaling ConvNets with Masked Autoencodersz/https://github.com/facebookresearch/ConvNeXt-V2)r+  r   r,  r-  r.  r/  r0  r   r1  r2  license	paper_ids
paper_name
origin_urlr3  r4  s     r;   _cfgv2r;  @  sA    =vI%.Bi!0B_G
 
 
 
r<   zconvnext_tiny.in12k_ft_in1kztimm/gffffff?)ri      r<  )	hf_hub_idr.  test_input_sizetest_crop_pctzconvnext_small.in12k_ft_in1kz&convnext_zepto_rms.ra4_e3600_r224_in1k)      ?r@  r@  )r=  r0  r   z*convnext_zepto_rms_ols.ra4_e3600_r224_in1kg?)r=  r0  r   r.  zconvnext_atto.d2_in1kzrhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/convnext_atto_d2-01bb0f51.pth)r+  r=  r>  r?  zconvnext_atto_ols.a2_in1kzvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/convnext_atto_ols_a2-78d1c8f3.pthzconvnext_atto_rms.untrained)ri      rA  )r>  r?  zconvnext_femto.d1_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/convnext_femto_d1-d71d5b4c.pthzconvnext_femto_ols.d1_in1kzwhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/convnext_femto_ols_d1-246bf2ed.pthzconvnext_pico.d1_in1kzrhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/convnext_pico_d1-10ad7f0d.pthzconvnext_pico_ols.d1_in1kzvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/convnext_pico_ols_d1-611f0ca7.pth)r+  r=  r.  r>  r?  zconvnext_nano.in12k_ft_in1kzconvnext_nano.d1h_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/convnext_nano_d1h-7eb4bdea.pthzconvnext_nano_ols.d1h_in1kzwhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/convnext_nano_ols_d1h-ae424a9a.pthzconvnext_tiny_hnf.a2h_in1kzwhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-rsb-weights/convnext_tiny_hnf_a2h-ab7e9df2.pthzconvnext_tiny.in12k_ft_in1k_384)ri   r   r   )   rB  squash)r=  r,  r-  r.  	crop_modez convnext_small.in12k_ft_in1k_384zconvnext_nano.in12ki-.  )r=  r.  r   zconvnext_tiny.in12kzconvnext_small.in12kzconvnext_tiny.fb_in22k_ft_in1kzDhttps://dl.fbaipublicfiles.com/convnext/convnext_tiny_22k_1k_224.pthzconvnext_small.fb_in22k_ft_in1kzEhttps://dl.fbaipublicfiles.com/convnext/convnext_small_22k_1k_224.pthzconvnext_base.fb_in22k_ft_in1kzDhttps://dl.fbaipublicfiles.com/convnext/convnext_base_22k_1k_224.pthzconvnext_large.fb_in22k_ft_in1kzEhttps://dl.fbaipublicfiles.com/convnext/convnext_large_22k_1k_224.pthz convnext_xlarge.fb_in22k_ft_in1kzJhttps://dl.fbaipublicfiles.com/convnext/convnext_xlarge_22k_1k_224_ema.pthzconvnext_tiny.fb_in1kzDhttps://dl.fbaipublicfiles.com/convnext/convnext_tiny_1k_224_ema.pthzconvnext_small.fb_in1kzEhttps://dl.fbaipublicfiles.com/convnext/convnext_small_1k_224_ema.pthzconvnext_base.fb_in1kzDhttps://dl.fbaipublicfiles.com/convnext/convnext_base_1k_224_ema.pthzconvnext_large.fb_in1kzEhttps://dl.fbaipublicfiles.com/convnext/convnext_large_1k_224_ema.pthz"convnext_tiny.fb_in22k_ft_in1k_384zDhttps://dl.fbaipublicfiles.com/convnext/convnext_tiny_22k_1k_384.pth)r+  r=  r,  r-  r.  rD  z#convnext_small.fb_in22k_ft_in1k_384zEhttps://dl.fbaipublicfiles.com/convnext/convnext_small_22k_1k_384.pthz"convnext_base.fb_in22k_ft_in1k_384zDhttps://dl.fbaipublicfiles.com/convnext/convnext_base_22k_1k_384.pthz#convnext_large.fb_in22k_ft_in1k_384zEhttps://dl.fbaipublicfiles.com/convnext/convnext_large_22k_1k_384.pthz$convnext_xlarge.fb_in22k_ft_in1k_384zJhttps://dl.fbaipublicfiles.com/convnext/convnext_xlarge_22k_1k_384_ema.pthzconvnext_tiny.fb_in22kzAhttps://dl.fbaipublicfiles.com/convnext/convnext_tiny_22k_224.pthiQU  )r+  r=  r   zconvnext_small.fb_in22kzBhttps://dl.fbaipublicfiles.com/convnext/convnext_small_22k_224.pthzconvnext_base.fb_in22kzAhttps://dl.fbaipublicfiles.com/convnext/convnext_base_22k_224.pthzconvnext_large.fb_in22kzBhttps://dl.fbaipublicfiles.com/convnext/convnext_large_22k_224.pthzconvnext_xlarge.fb_in22kzChttps://dl.fbaipublicfiles.com/convnext/convnext_xlarge_22k_224.pthz#convnextv2_nano.fcmae_ft_in22k_in1kzWhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_nano_22k_224_ema.ptz'convnextv2_nano.fcmae_ft_in22k_in1k_384zWhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_nano_22k_384_ema.ptz#convnextv2_tiny.fcmae_ft_in22k_in1kzWhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_tiny_22k_224_ema.ptz'convnextv2_tiny.fcmae_ft_in22k_in1k_384zWhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_tiny_22k_384_ema.ptz#convnextv2_base.fcmae_ft_in22k_in1kzWhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_base_22k_224_ema.ptz'convnextv2_base.fcmae_ft_in22k_in1k_384zWhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_base_22k_384_ema.ptz$convnextv2_large.fcmae_ft_in22k_in1kzXhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_large_22k_224_ema.ptz(convnextv2_large.fcmae_ft_in22k_in1k_384zXhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_large_22k_384_ema.ptz'convnextv2_huge.fcmae_ft_in22k_in1k_384zWhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_huge_22k_384_ema.ptz'convnextv2_huge.fcmae_ft_in22k_in1k_512zWhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im22k/convnextv2_huge_22k_512_ema.pt)ri      rE  )   rF  zconvnextv2_atto.fcmae_ft_in1kzUhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_atto_1k_224_ema.ptzconvnextv2_femto.fcmae_ft_in1kzVhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_femto_1k_224_ema.ptzconvnextv2_pico.fcmae_ft_in1kzUhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_pico_1k_224_ema.ptzconvnextv2_nano.fcmae_ft_in1kzUhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_nano_1k_224_ema.ptzconvnextv2_tiny.fcmae_ft_in1kzUhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_tiny_1k_224_ema.ptzconvnextv2_base.fcmae_ft_in1kzUhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_base_1k_224_ema.ptzconvnextv2_large.fcmae_ft_in1kzVhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_large_1k_224_ema.ptzconvnextv2_huge.fcmae_ft_in1kzUhttps://dl.fbaipublicfiles.com/convnext/convnextv2/im1k/convnextv2_huge_1k_224_ema.ptzconvnextv2_atto.fcmaezZhttps://dl.fbaipublicfiles.com/convnext/convnextv2/pt_only/convnextv2_atto_1k_224_fcmae.ptzconvnextv2_femto.fcmaez[https://dl.fbaipublicfiles.com/convnext/convnextv2/pt_only/convnextv2_femto_1k_224_fcmae.ptzconvnextv2_pico.fcmaezZhttps://dl.fbaipublicfiles.com/convnext/convnextv2/pt_only/convnextv2_pico_1k_224_fcmae.ptzconvnextv2_nano.fcmaezZhttps://dl.fbaipublicfiles.com/convnext/convnextv2/pt_only/convnextv2_nano_1k_224_fcmae.ptzconvnextv2_tiny.fcmaezZhttps://dl.fbaipublicfiles.com/convnext/convnextv2/pt_only/convnextv2_tiny_1k_224_fcmae.ptzconvnextv2_base.fcmaezZhttps://dl.fbaipublicfiles.com/convnext/convnextv2/pt_only/convnextv2_base_1k_224_fcmae.ptzconvnextv2_large.fcmaez[https://dl.fbaipublicfiles.com/convnext/convnextv2/pt_only/convnextv2_large_1k_224_fcmae.ptzconvnextv2_huge.fcmaezZhttps://dl.fbaipublicfiles.com/convnext/convnextv2/pt_only/convnextv2_huge_1k_224_fcmae.ptzconvnextv2_small.untrainedz/convnext_base.clip_laion2b_augreg_ft_in12k_in1k)r   r   )r=  r0  r   r,  r-  r.  z3convnext_base.clip_laion2b_augreg_ft_in12k_in1k_384)r=  r0  r   r,  r-  r.  rD  z6convnext_large_mlp.clip_laion2b_soup_ft_in12k_in1k_320)ri   @  rG  )
   rH  z6convnext_large_mlp.clip_laion2b_soup_ft_in12k_in1k_384z)convnext_base.clip_laion2b_augreg_ft_in1kz,convnext_base.clip_laiona_augreg_ft_in1k_384z.convnext_large_mlp.clip_laion2b_augreg_ft_in1kz2convnext_large_mlp.clip_laion2b_augreg_ft_in1k_384z*convnext_xxlarge.clip_laion2b_soup_ft_in1kz*convnext_base.clip_laion2b_augreg_ft_in12k)r=  r0  r   r   r,  r-  r.  z1convnext_large_mlp.clip_laion2b_soup_ft_in12k_320z3convnext_large_mlp.clip_laion2b_augreg_ft_in12k_384)r=  r0  r   r   r,  r-  r.  rD  z1convnext_large_mlp.clip_laion2b_soup_ft_in12k_384z+convnext_xxlarge.clip_laion2b_soup_ft_in12kzconvnext_base.clip_laion2bz,laion/CLIP-convnext_base_w-laion2B-s13B-b82Kzopen_clip_pytorch_model.bin  )r=  hf_hub_filenamer0  r   r,  r-  r.  r   z!convnext_base.clip_laion2b_augregz3laion/CLIP-convnext_base_w-laion2B-s13B-b82K-augregzconvnext_base.clip_laionaz4laion/CLIP-convnext_base_w-laion_aesthetic-s13B-b82Kzconvnext_base.clip_laiona_320z8laion/CLIP-convnext_base_w_320-laion_aesthetic-s13B-b82Kz$convnext_base.clip_laiona_augreg_320z?laion/CLIP-convnext_base_w_320-laion_aesthetic-s13B-b82K-augregz5laion/CLIP-convnext_large_d.laion2B-s26B-b102K-augregr   z5laion/CLIP-convnext_large_d_320.laion2B-s29B-b131K-ftz:laion/CLIP-convnext_large_d_320.laion2B-s29B-b131K-ft-soupz9laion/CLIP-convnext_xxlarge-laion2B-s34B-b82K-augreg-soup   z;laion/CLIP-convnext_xxlarge-laion2B-s34B-b82K-augreg-rewind)ri      rL  )   rM  )z&convnext_large_mlp.clip_laion2b_augregz&convnext_large_mlp.clip_laion2b_ft_320z+convnext_large_mlp.clip_laion2b_ft_soup_320z"convnext_xxlarge.clip_laion2b_soupz$convnext_xxlarge.clip_laion2b_rewindztest_convnext.r160_in1kztest_convnext2.r160_in1kztest_convnext3.r160_in1kr   c           	      ^    t          dddd          }t          dd| it          |fi |}|S )	Nr)   r)   rL   r)   r   @      rA  T	rmsnorm2dr   r   rR   rW   convnext_zepto_rmsr   )rU  r   r"  r   r!  
model_argsr  s       r;   rU  rU    sK     \0BT^ijjjJggjgDQ[LfLf_eLfLfggELr<   c           	      `    t          ddddd          }t          d	d| it          |fi |}|S )
NrO  rP  TrS  r   )r   r   rR   rW   r   convnext_zepto_rms_olsr   )rZ  rV  rW  s       r;   rZ  rZ    sY     "4tP[gtv v vJkk*kPTU_PjPjciPjPjkkELr<   c           	      \    t          ddd          }t          dd| it          |fi |}|S )Nr)   r)      r)   (   P   rL  rG  Tr   r   rR   convnext_attor   )rb  rV  rW  s       r;   rb  rb    sG     \0BTRRRJbbbtJGaGaZ`GaGabbELr<   c           	      ^    t          dddd          }t          dd| it          |fi |}|S )	Nr\  r^  Tr   r   r   rR   r   convnext_atto_olsr   )re  rV  rW  s       r;   re  re    sK     \0BT]mnnnJffZf4PZKeKe^dKeKeffELr<   c           	      ^    t          dddd          }t          dd| it          |fi |}|S )	Nr\  r^  TrS  rT  convnext_atto_rmsr   )rg  rV  rW  s       r;   rg  rg    sK     \0BT^ijjjJffZf4PZKeKe^dKeKeffELr<   c           	      \    t          ddd          }t          dd| it          |fi |}|S )Nr\  0   r   r   r   Tra  convnext_femtor   )rk  rV  rW  s       r;   rk  rk    sG     \0BTRRRJcc*cZHbHb[aHbHbccELr<   c           	      ^    t          dddd          }t          dd| it          |fi |}|S )	Nr\  ri  Tr   rd  convnext_femto_olsr   )rm  rV  rW  s       r;   rm  rm  
  sK     \0BT]mnnnJggjgDQ[LfLf_eLfLfggELr<   c           	      \    t          ddd          }t          dd| it          |fi |}|S )Nr\  rQ  rR  rA  rE  Tra  convnext_picor   )rp  rV  rW  s       r;   rp  rp    G     \0CdSSSJbbbtJGaGaZ`GaGabbELr<   c           	      ^    t          dddd          }t          dd| it          |fi |}|S )	Nr\  ro  Tr   rd  convnext_pico_olsr   )rs  rV  rW  s       r;   rs  rs    sK     \0Cd_opppJffZf4PZKeKe^dKeKeffELr<   c           	      \    t          ddd          }t          dd| it          |fi |}|S )Nr)   r)   r   r)   r`  rL  rG  rI  Tra  convnext_nanor   )rw  rV  rW  s       r;   rw  rw  "  rq  r<   c           	      ^    t          dddd          }t          dd| it          |fi |}|S )	Nru  rv  Tr   rd  convnext_nano_olsr   )ry  rV  rW  s       r;   ry  ry  *  sK     \0Cd^ghhhJffZf4PZKeKe^dKeKeffELr<   c           	      ^    t          dddd          }t          dd| it          |fi |}|S )Nr   r   T)r   r   r   rR   convnext_tiny_hnfr   )r{  rV  rW  s       r;   r{  r{  2  sL     \0CUYdhiiiJffZf4PZKeKe^dKeKeffELr<   c           	      Z    t          dd          }t          dd| it          |fi |}|S )Nr   r   r   r   convnext_tinyr   )r~  rV  rW  s       r;   r~  r~  :  sC    \0CDDDJbbbtJGaGaZ`GaGabbELr<   c           	      b    t          g dg d          }t          dd| it          |fi |}|S )Nri   ri      ri   r   r}  convnext_smallr   )r  rV  rW  s       r;   r  r  A  sM    ]]]1D1D1DEEEJcc*cZHbHb[aHbHbccELr<   c           	      b    t          g dg d          }t          dd| it          |fi |}|S )Nr  rR  rA  rE  rK  r}  convnext_baser   )r  rV  rW  s       r;   r  r  H  sM    ]]]1F1F1FGGGJbbbtJGaGaZ`GaGabbELr<   c           	      b    t          g dg d          }t          dd| it          |fi |}|S )Nr  r   r   r      r}  convnext_larger   )r  rV  rW  s       r;   r  r  O  sM    ]]]1F1F1FGGGJcc*cZHbHb[aHbHbccELr<   c           	      d    t          g dg dd          }t          dd| it          |fi |}|S )Nr  r  r  )r   r   r   convnext_large_mlpr   )r  rV  rW  s       r;   r  r  V  sQ    ]]]1F1F1FY]^^^JggjgDQ[LfLf_eLfLfggELr<   c           	      b    t          g dg d          }t          dd| it          |fi |}|S )Nr  )rA  rE  rK  i   r}  convnext_xlarger   )r  rV  rW  s       r;   r  r  ]  sM    ]]]1G1G1GHHHJdd:djIcIc\bIcIcddELr<   c           	          t          g dg d|                    dd                    }t          dd| it          |fi |}|S )	N)ri   rL      ri   )r   r   r  i   r   h㈵>)r   r   r   convnext_xxlarger   )r  r   popr"  rW  s       r;   r  r  d  sb    ]]]1G1G1GRXR\R\]gimRnRnoooJeeJe$zJdJd]cJdJdeeELr<   c           	      `    t          dddd d          }t          dd| it          |fi |}|S )Nr\  r^  Tr   r   rT   rU   rR   convnextv2_attor   )r  rV  rW  s       r;   r  r  k  sW     "4dRVaeg g gJdd:djIcIc\bIcIcddELr<   c           	      `    t          dddd d          }t          dd| it          |fi |}|S )Nr\  ri  Tr  convnextv2_femtor   )r  rV  rW  s       r;   r  r  t  sW     "4dRVaeg g gJeeJe$zJdJd]cJdJdeeELr<   c           	      `    t          dddd d          }t          dd| it          |fi |}|S )Nr\  ro  Tr  convnextv2_picor   )r  rV  rW  s       r;   r  r  }  W     "5tSWbfh h hJdd:djIcIc\bIcIcddELr<   c           	      `    t          dddd d          }t          dd| it          |fi |}|S )Nru  rv  Tr  convnextv2_nanor   )r  rV  rW  s       r;   r  r    r  r<   c           	      ^    t          dddd           }t          dd| it          |fi |}|S )Nr   r   Tr   r   rT   rU   convnextv2_tinyr   )r  rV  rW  s       r;   r  r    sH    \0CTaefffJdd:djIcIc\bIcIcddELr<   c           	      f    t          g dg ddd           }t          dd| it          |fi |}|S )Nr  r   Tr  convnextv2_smallr   )r  rV  rW  s       r;   r  r    sR    ]]]1D1D1DdbfgggJeeJe$zJdJd]cJdJdeeELr<   c           	      f    t          g dg ddd           }t          dd| it          |fi |}|S )Nr  r  Tr  convnextv2_baser   )r  rV  rW  s       r;   r  r    sS    ]]]1F1F1FPTdhiiiJdd:djIcIc\bIcIcddELr<   c           	      f    t          g dg ddd           }t          dd| it          |fi |}|S )Nr  r  Tr  convnextv2_larger   )r  rV  rW  s       r;   r  r    sS    ]]]1F1F1FPTdhiiiJeeJe$zJdJd]cJdJdeeELr<   c           	      f    t          g dg ddd           }t          dd| it          |fi |}|S )Nr  )i`  i  i  i   Tr  convnextv2_huger   )r  rV  rW  s       r;   r  r    sS    ]]]1G1G1GQUeijjjJdd:djIcIc\bIcIcddELr<   c           	          t          g dg d|                    dd          d          }t          d	d| it          |fi |}|S )
N)r   r)   rL   r)   )   r   rj  rQ  r   r  	gelu_tanhr   r   r   rV   test_convnextr   )r  r  rW  s       r;   r  r    sb    \\\0@0@0@6::V`bfKgKgs~JbbbtJGaGaZ`GaGabbELr<   c           	          t          g dg d|                    dd          d          }t          d	d| it          |fi |}|S )
Nr   r   r   r   r   rQ  r   rR  r   r  r  r  test_convnext2r   )r  r  rW  s       r;   r  r    sk    \\\0A0A0AFJJWacgLhLht  A  A  AJcc*cZHbHb[aHbHbccELr<   c           	          t          g dg d|                    dd          dd          }t          d
d	| it          |fi |}|S )Nr  r  r   r  )rK   rM  rM  ri   silu)r   r   r   r   rV   test_convnext3r   )r  r  rW  s       r;   r  r    sr    ||"3"3"3fjjUY>Z>Ziu  BHI I IJcc*cZHbHb[aHbHbccELr<   )convnext_tiny_in22ft1kconvnext_small_in22ft1kconvnext_base_in22ft1kconvnext_large_in22ft1kconvnext_xlarge_in22ft1kconvnext_tiny_384_in22ft1kconvnext_small_384_in22ft1kconvnext_base_384_in22ft1kconvnext_large_384_in22ft1kconvnext_xlarge_384_in22ft1kconvnext_tiny_in22kconvnext_small_in22kconvnext_base_in22kconvnext_large_in22kconvnext_xlarge_in22k)Nrt   r   )r   )Yrn   	functoolsr   typingr   r   r   r   r   rc   torch.nnr/   	timm.datar	   r
   r   r   timm.layersr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   _builderr   	_featuresr   _manipulater    r!   	_registryr"   r#   r$   __all__r   r'   rJ   rs   r%   r   r  r"  r5  r;  default_cfgsrU  rZ  rb  re  rg  rk  rm  rp  rs  rw  ry  r{  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rD   r   r<   r;   <module>r     s   N       9 9 9 9 9 9 9 9 9 9 9 9 9 9        d d d d d d d d d d d dx x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x = = = = = = = = * * * * * * + + + + + + 4 4 4 4 4 4 4 4 Y Y Y Y Y Y Y Y Y Y,       ,U U U U UBI U U UpB B B B BBI B B BJ@ @ @ @ @ry @ @ @F
3 
3 
3 
3' ' 'T          %$ H&!44}C$I $I $IH&
 #DD}C%I %I %IH& -dd//3 /3 /3H& 1$$/3 3 3H&  TT A%T; ; ;!H&(   E%T"; "; ";)H&0 "44%T$; $; $;1H&6 dd B%T; ; ;7H&> !$$ F%T#; #; #;?H&F TT A%T; ; ;GH&N   E}C"I "I "IOH&V "44}C$I $I $IWH&\ dd B}CI I I]H&d !$$ F}C#I #I #IeH&l !$$ F}C#I #I #ImH&v &tt8sh(X (X (XwH&| ' Hsx)Y )Y )Y}H& H&D 445* * *EH&J 445* * *KH&P DD5* * *QH&X %ddR%S': ': ':YH&` &ttS%S(: (: (:aH&h %ddR%S': ': ':iH&p &ttS%S(: (: (:qH&x 'X%S): ): ):yH&B TTR%S: : :CH&J ddS%S: : :KH&R TTR%S: : :SH&Z ddS%S: : :[H&d )$$R Hsh+X +X +XeH&l *44S Hsh,X ,X ,XmH&t )$$R Hsh+X +X +XuH&| *44S Hsh,X ,X ,X}H&D +DDX Hsh-X -X -XEH& H& H&N ddO  OH&V ttP     WH&^ ddO  _H&f ttP     gH&n Q! ! !oH&x *66e%S,: ,: ,:yH&@ .vve Hsh0X 0X 0XAH&H *66e%S,: ,: ,:IH&P .vve Hsh0X 0X 0XQH&X *66e%S,: ,: ,:YH&` .vve Hsh0X 0X 0XaH&h +FFf%S-: -: -:iH&p /f Hsh1X 1X 1XqH&x .vve Hsh0X 0X 0XyH&@ .vve Hsh0X 0X 0XAH&J $VVc%T&; &; &;KH&R %ffd%T'; '; ';SH& H& H&Z $VVc%T&; &; &;[H&b $VVc%S&: &: &:cH&j $VVc%S&: &: &:kH&r $VVc%S&: &: &:sH&z %ffd%S': ': ':{H&B $VVc%S&: &: &:CH&L VVh  MH&T ffi  UH&\ VVh  ]H&d VVh  eH&l VVh  mH&t VVh  uH&| ffi  }H&D VVh  EH&N !$$&&OH&T 6tt? FS8B 8B 8BUH&\ :44? Hsh<X <X <X]H& H& H&d =dd? Hs?D ?D ?DeH&l =dd? Hsh?X ?X ?XmH&v 0? FS2B 2B 2BwH&~ 3DD? Hs5D 5D 5DH&F	 5dd? FS7 7 7G	H&P	 9$$? Hsh; ; ;Q	H&Z	 1$$? FS3B 3B 3B[	H&d	 1$$? FS3B 3B 3Be	H&l	 8? Hs:D :D :Dm	H&t	 :44? Hsh<X <X <Xu	H&|	 8? Hsh:X :X :X}	H&D
 244? FS4B 4B 4BE
H&P
 !$$@5? FSc	#S #S #SQ
H&Z
 (G5? FSc	*S *S *S[
H&d
  H5? FSc	"S "S "Se
H&n
 $TTL5? HsPS	&U &U &Uo
H&x
 +DDS5? HsPS	-U -U -Uy
H& H&B /3dI5? FSc	/S /S /S
 /3dI5? HsPS	/U /U /U
 484N5? HsPS	4U 4U 4U
 +/$M5? FSd	+T +T +T
 -1DO5? FSd	-T -T -T  $t/ FT C  C  C !%/ FT!C !C !C !%/ FT!C !C !CGH& H& H& H HV  h      (            X      X      (      h            X            X      X            (            (      h      8      H      8      H      8      8      8      H      8      H      8            (      (      H>@>@ B"F#H"F#H$J35357' '     r<   