Ë
    éÓ^jÀÛ  ã                   ó~  — d Z ddlZddlmZ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ZddlmZ ddlmZmZ ddlmZmZmZmZmZmZmZ ddlmZmZ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dgZ-e G d„ d«      «       Z.de/de0de0fd„Z1	 �dsdee0   dee/   dee0   de/deee0   ee0   f   f
d„Z2	 �dtde/de0de/de0de0d e0deee0   e0ee0   f   fd!„Z3	 	 	 	 	 	 	 �dud"e0d#e0d$e0d%e0d&e0d'eeejh                        d(e5dejh                  fd)„Z6	 	 	 	 	 	 	 �dud"e0d#e0d$e0d%e0d&e0d'eeejh                        d(e5dejn                  fd*„Z8	 	 	 	 	 �dvd+ee9   d"e0d#e0d$e0d%e0d&ee0e0f   d'eeejh                        d(e5deejh                     fd,„Z: G d-„ d.ejh                  «      Z; G d/„ d0ejh                  «      Z< G d1„ d2ejh                  «      Z= G d3„ dejh                  «      Z>�dwd5ejh                  d6e9d7e5ddfd8„Z?d9e
e9ef   de
e9ef   fd:„Z@ eA�dxi d; e.d<d=d>dd?¬@«      “dA e.d<dBdCdDdE¬@«      “dF e.d<dBdCdDdEdG¬H«      “dI e.dJdKdLd<dD¬@«      “dM e.dNdOdPdDdD¬@«      “dQ e.dRdSdTd<dU¬@«      “dV e.dWdXdTdJdY¬@«      “dZ e.d[d\d]d^d_¬@«      “d` e.dadbdcdNdd¬@«      “de e.dRdfdgdhd_¬@«      “di e.djdkdldmdn¬@«      “do e.dpdqdrdsdE¬@«      “dt e.dudvdwdjd_¬@«      “dx e.d<d=d>dd?dy¬z«      “d{ e.dJd|d}ddDdy¬z«      “d~ e.dJdd€dDd�dy¬z«      “d‚ e.dNdƒd„dDd…dy¬z«      “d† e.dNdƒd„dDd…dydG¬‡«      “dˆ e.dJd‰dŠd<d‹dy¬z«      “dŒ e.dRd�dŽd<d�dy¬z«      “d� e.d[d‘dLd’dEdy¬z«      “d“ e.dmd”d•d–dYdy¬z«      “d— e.d˜d™dšdNdddy¬z«      “d› e.d˜d™dšdNdddydG¬‡«      “dœ e.djdkdldmdndy¬z«      “d� e.dždŸd dmdUdy¬z«      “d¡ e.d¢d£d¤d¢d¥dy¬z«      “d¦ e.d§d¨d„d©d¥dy¬z«      “dª e.d«d¬d­d®d‹dy¬z«      “d¯ e.d°d±d¤d²d‹dy¬z«      “d³ e.d[d‘dLd’dEdyd´ eedD¬µ«      ¬¶«      “d· e.dEd[d‘dLd’dyd¸d´¬¹«      “dº e.dYdmd”d•d–dyd¸d´d»¬¼«	      “d½ e.d�dDd¾d¿dÀdÁdydd¸dÂd´¬Ã«      “dÄ e.dÅdJdÆdÇddÁdydd¸dd´¬Ã«      “dÈ e.dÅdJdÆdÇddÁdydd¸dÉd´¬Ã«      “ŽZBdÊe9dËe5de>fdÌ„ZC�dydÍe9de
e9ef   fdÎ„ZD�dydÍe9de
e9ef   fdÏ„ZE�dydÍe9de
e9ef   fdÐ„ZF e*i dÑ eDdÒdÓ¬Ô«      “dÕ eDdÒdÖ¬Ô«      “d× eDdÒdØ¬Ô«      “dÙ eDdÒdÚ¬Ô«      “dÛ eDdÒ¬Ü«      “dÝ eDdÒ¬Ü«      “dÞ eDdÒ¬Ü«      “dß eDdÒdà¬á«      “dâ eDdÒdà¬á«      “dã eDd4¬ä«      “då eDdÒdædç¬è«      “dé eDdÒdêdç¬è«      “dë eDd4¬ä«      “dì eDdÒdídîdïdðdñ¬ò«      “dó eDdÒdôdîdïdðdñ¬ò«      “dõ eDdÒdö¬Ô«      “d÷ eFdÒdø¬Ô«      “i dù eFdÒdú¬Ô«      “dû eFdÒdü¬Ô«      “dý eFdÒdþ¬Ô«      “dÿ eFdÒ�d ¬Ô«      “�d eFdÒ�d¬Ô«      “�d eFdÒ�d¬Ô«      “�d eFdÒ�d¬Ô«      “�d eFdÒ�d¬Ô«      “�d	 eFdÒ�d
¬Ô«      “�d eFdÒ�d¬Ô«      “�d eFdÒ�d¬Ô«      “�d eFdÒ�d¬Ô«      “�d eFdÒ�d¬Ô«      “�d eFdÒ�d�d�d�ddð�¬«      “�d eFdÒ�d�d�d�ddð�¬«      “�d eFdÒ�d�d�d�ddð�¬«      “�d eFdÒ�d�d�¬«      “¥i �d  eFdÒ�d!�d�¬«      “�d" eFdÒ�d#�d�¬«      “�d$ eFdÒ�d%�d&�d'�d�ddð�¬(«      “�d) eFdÒ�d%�d&�d*�d�ddð�¬(«      “�d+ eFdÒ�d%�d&�d,�d�ddð�¬(«      “�d- eFdÒ�d%�d&�d.�d�ddð�¬(«      “�d/ eFdÒ�d0d�d%�d&�¬1«      “�d2 eFdÒ�d3d�d%�d&�¬1«      “�d4 eFdÒ�d5d�d%�d&�¬1«      “�d6 eEdÒ¬Ü«      “�d7 eEdÒ¬Ü«      “�d8 eEdÒ¬Ü«      “�d9 eEdÒ¬Ü«      “�d: eEdÒ¬Ü«      “�d; eEdÒ¬Ü«      “�d< eEdÒ¬Ü«      “�d= eEdÒ¬Ü«      “¥i �d> eEdÒ¬Ü«      “�d? eEdÒ¬Ü«      “�d@ eEdÒ¬Ü«      “�dA eEdÒ¬Ü«      “�dB eEdÒ¬Ü«      “�dC eEdÒ¬Ü«      “�dD eEdÒ¬Ü«      “�dE eEdÒ¬Ü«      “�dF eEdÒ¬Ü«      “�dG eEdÒ¬Ü«      “�dH eEdÒ¬Ü«      “�dI eEdÒ¬Ü«      “�dJ eEdÒ¬Ü«      “�dK eEdÒ¬Ü«      “�dL eEdÒ¬Ü«      “�dM eEdÒ¬Ü«      “¥«      ZGe+�dzdËe5de>f�dN„«       ZHe+�dzdËe5de>f�dO„«       ZIe+�dzdËe5de>f�dP„«       ZJe+�dzdËe5de>f�dQ„«       ZKe+�dzdËe5de>f�dR„«       ZLe+�dzdËe5de>f�dS„«       ZMe+�dzdËe5de>f�dT„«       ZNe+�dzdËe5de>f�dU„«       ZOe+�dzdËe5de>f�dV„«       ZPe+�dzdËe5de>f�dW„«       ZQe+�dzdËe5de>f�dX„«       ZRe+�dzdËe5de>f�dY„«       ZSe+�dzdËe5de>f�dZ„«       ZTe+�dzdËe5de>f�d[„«       ZUe+�dzdËe5de>f�d\„«       ZVe+�dzdËe5de>f�d]„«       ZWe+�dzdËe5de>f�d^„«       ZXe+�dzdËe5de>f�d_„«       ZYe+�dzdËe5de>f�d`„«       ZZe+�dzdËe5de>f�da„«       Z[e+�dzdËe5de>f�db„«       Z\e+�dzdËe5de>f�dc„«       Z]e+�dzdËe5de>f�dd„«       Z^e+�dzdËe5de>f�de„«       Z_e+�dzdËe5de>f�df„«       Z`e+�dzdËe5de>f�dg„«       Zae+�dzdËe5de>f�dh„«       Zbe+�dzdËe5de>f�di„«       Zce+�dzdËe5de>f�dj„«       Zde+�dzdËe5de>f�dk„«       Zee+�dzdËe5de>f�dl„«       Zfe+�dzdËe5de>f�dm„«       Zge+�dzdËe5de>f�dn„«       Zhe+�dzdËe5de>f�do„«       Zie+�dzdËe5de>f�dp„«       Zje+�dzdËe5de>f�dq„«       Zk e,el�drdÈi«       y({  a  RegNet X, Y, Z, and more

Paper: `Designing Network Design Spaces` - https://arxiv.org/abs/2003.13678
Original Impl: https://github.com/facebookresearch/pycls/blob/master/pycls/models/regnet.py

Paper: `Fast and Accurate Model Scaling` - https://arxiv.org/abs/2103.06877
Original Impl: None

Based on original PyTorch impl linked above, but re-wrote to use my own blocks (adapted from ResNet here)
and cleaned up with more descriptive variable names.

Weights from original pycls impl have been modified:
* first layer from BGR -> RGB as most PyTorch models are
* removed training specific dict entries from checkpoints and keep model state_dict only
* remap names to match the ones here

Supports weight loading from torchvision and classy-vision (incl VISSL SEER)

A number of custom timm model definitions additions including:
* stochastic depth, gradient checkpointing, layer-decay, configurable dilation
* a pre-activation 'V' variant
* only known RegNet-Z model definitions with pretrained weights

Hacked together by / Copyright 2020 Ross Wightman
é    N)Ú	dataclassÚreplace)Úpartial)ÚAnyÚCallableÚDictÚListÚOptionalÚUnionÚTupleÚType©ÚIMAGENET_DEFAULT_MEANÚIMAGENET_DEFAULT_STD)ÚClassifierHeadÚAvgPool2dSameÚConvNormActÚSEModuleÚDropPathÚGroupNormActÚcalculate_drop_path_rates)Úget_act_layerÚget_norm_act_layerÚcreate_conv2dÚmake_divisibleé   )Úbuild_model_with_cfg)Úfeature_take_indices)Úcheckpoint_seqÚnamed_apply)Úgenerate_default_cfgsÚregister_modelÚregister_model_deprecationsÚRegNetÚ	RegNetCfgc                   óþ   — e Zd ZU dZdZeed<   dZeed<   dZe	ed<   dZ
e	ed	<   d
Zeed<   dZe	ed<   dZe	ed<   dZe	ed<   dZeed<   dZee   ed<   dZeed<   dZeed<   dZeed<   dZeeef   ed<   dZeeef   ed<   y)r%   z"RegNet architecture configuration.é   ÚdepthéP   Úw0çq=
×£PE@ÚwaçHáz®G@Úwmé   Ú
group_sizeç      ð?Úbottle_ratioç        Úse_ratioÚgroup_min_ratioé    Ú
stem_widthÚconv1x1Ú
downsampleFÚ
linear_outÚpreactr   Únum_featuresÚreluÚ	act_layerÚ	batchnormÚ
norm_layerN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r(   ÚintÚ__annotations__r*   r,   Úfloatr.   r0   r2   r4   r5   r7   r9   r
   Ústrr:   Úboolr;   r<   r>   r   r   r@   © ó    ú]/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/regnet.pyr%   r%   -   s¯   … á,Ø€Eˆ3ƒOØ€BˆƒLØ€BˆÓØ€BˆÓØ€J�ÓØ€L�%ÓØ€HˆeÓØ€O�UÓØ€J�ÓØ )€J�˜‘Ó)Ø€J�ÓØ€FˆDÓØ€L�#ÓØ&,€Iˆu�S˜(�]Ñ#Ó,Ø'2€J��c˜8�mÑ$Ô2rK   ÚfÚqÚreturnc                 ó6   — t        t        | |z  «      |z  «      S )zºConverts a float to the closest non-zero int divisible by q.

    Args:
        f: Input float value.
        q: Quantization divisor.

    Returns:
        Quantized integer value.
    )rE   Úround)rM   rN   s     rL   Úquantize_floatrR   A   s   € ô Œu�Q˜‘U‹|˜aÑÓ Ð rK   ÚwidthsÚbottle_ratiosÚgroupsÚ	min_ratioc           	      óæ  — t        | |«      D ��cg c]  \  }}t        ||z  «      ‘Œ }}}t        ||«      D ��cg c]  \  }}t        ||«      ‘Œ }}}|r*t        ||«      D ��cg c]  \  }}t        |||«      ‘Œ }}}n(t        ||«      D ��cg c]  \  }}t	        ||«      ‘Œ }}}t        ||«      D ��cg c]  \  }}t        ||z  «      ‘Œ } }}| |fS c c}}w c c}}w c c}}w c c}}w c c}}w )a,  Adjusts the compatibility of widths and groups.

    Args:
        widths: List of channel widths.
        bottle_ratios: List of bottleneck ratios.
        groups: List of group sizes.
        min_ratio: Minimum ratio for divisibility.

    Returns:
        Tuple of adjusted widths and groups.
    )ÚziprE   Úminr   rR   )	rS   rT   rU   rV   ÚwÚbÚbottleneck_widthsÚgÚw_bots	            rL   Úadjust_widths_groups_compr_   N   së   € ô" 14°F¸MÓ0J×K©¨¨1œ˜Q ™U�ÐKÐÑKÜ,/°Ð8IÓ,J×K¡  5Œc�!�U�mÐK€FÑKÙäQTÐUfÐhnÓQo×pÁXÀUÈAœ^¨E°1°iÕ@ÐpÐÒpäFIÐJ[Ð]cÓFd×e¹(¸%Àœ^¨E°1Õ5ÐeÐÑeÜ-0Ð1BÀMÓ-R×S¡ ¨Œc�%˜!‘)�nÐS€FÑSØ�6ˆ>Ðùó LùÛKùó qùãeùÛSs   �CºCÁ$C!ÂC'Â6C-é   Úwidth_slopeÚwidth_initialÚ
width_multr(   r0   Úquantc                 óà  — | dk\  r|dkD  r|dkD  r||z  dk(  sJ ‚t        j                  |t         j                  ¬«      | z  |z   }t        j                  t        j                  ||z  «      t        j                  |«      z  «      }t        j                  |t        j                  ||«      z  |z  «      |z  }t        t        j                  |«      «      t        |j                  «       j                  «       «      dz   }
}	t        j                  t        |	«      D �cg c]  }|‘Œ c}t         j                  ¬«      }|j                  «       j                  «       |	|j                  «       fS c c}w )au  Generates per block widths from RegNet parameters.

    Args:
        width_slope: Slope parameter for width progression.
        width_initial: Initial width.
        width_mult: Width multiplier.
        depth: Network depth.
        group_size: Group convolution size.
        quant: Quantization factor.

    Returns:
        Tuple of (widths, num_stages, groups).
    r   r   )Údtype)ÚtorchÚarangeÚfloat32rQ   ÚlogÚmathÚpowÚlenÚuniquerE   ÚmaxÚitemÚtensorÚrangeÚint32Útolist)ra   rb   rc   r(   r0   rd   Úwidths_contÚ
width_expsrS   Ú
num_stagesÚ	max_stageÚ_rU   s                rL   Úgenerate_regnetrz   j   s  € ð* ˜!Ò °Ò 1°jÀ1²nÈÐY^ÑI^ÐbcÒIcÐcÐcô —,‘,˜u¬E¯M©MÔ:¸[ÑHÈ=ÑX€KÜ—‘œUŸY™Y {°]Ñ'BÓCÄdÇhÁhÈzÓFZÑZÓ[€JÜ�[‰[˜-¬%¯)©)°JÀ
Ó*KÑKÈuÑTÓUÐX]Ñ]€FÜ¤§¡¨VÓ 4Ó5´s¸:¿>¹>Ó;K×;PÑ;PÓ;RÓ7SÐVWÑ7W�	€JÜ�\‰\¬u°ZÓ/@ÖA¨!š:ÒAÌÏÉÔU€FØ�:‰:‹<×ÑÓ  *¨f¯m©m«oÐ=Ð=ùò Bs   Ä	E+Úin_chsÚout_chsÚkernel_sizeÚstrideÚdilationr@   r;   c	                 ó®   — ||dœ}	|xs t         j                  }|dk(  r|dk(  rdn|}|dkD  r|nd}|rt        | ||f||dœ|	¤ŽS t        | ||f|||ddœ|	¤ŽS )am  Create convolutional downsampling module.

    Args:
        in_chs: Input channels.
        out_chs: Output channels.
        kernel_size: Convolution kernel size.
        stride: Convolution stride.
        dilation: Convolution dilation.
        norm_layer: Normalization layer.
        preact: Use pre-activation.

    Returns:
        Downsampling module.
    ©Údevicerf   r   )r~   r   F)r~   r   r@   Ú	apply_act)ÚnnÚBatchNorm2dr   r   )
r{   r|   r}   r~   r   r@   r;   r‚   rf   Údds
             rL   Údownsample_convr‡   ‹   s¡   € ð2  UÑ	+€BØÒ-œrŸ~™~€JØ ’{ x°1¢}‘!¸+€KØ&¨š?‰x°€HÙÜØØØð
ð Øñ
ð ñ
ð 	
ô ØØØð	
ð ØØ!Øñ	
ð ñ	
ð 		
rK   c	                 óL  — ||dœ}	|xs t         j                  }|dk(  r|nd}
t        j                  «       }|dkD  s|dkD  r,|
dk(  r|dkD  rt        nt         j                  } |d|
dd¬«      }|rt        | |dfddi|	¤Ž}nt        | |dfd|ddœ|	¤Ž}t        j                  ||gŽ S )	aà  Create average pool downsampling module.

    AvgPool Downsampling as in 'D' ResNet variants. This is not in RegNet space but I might experiment.

    Args:
        in_chs: Input channels.
        out_chs: Output channels.
        kernel_size: Convolution kernel size.
        stride: Convolution stride.
        dilation: Convolution dilation.
        norm_layer: Normalization layer.
        preact: Use pre-activation.

    Returns:
        Sequential downsampling module.
    r�   r   é   TF)Ú	ceil_modeÚcount_include_padr~   )r~   r@   rƒ   )r„   r…   ÚIdentityr   Ú	AvgPool2dr   r   Ú
Sequential)r{   r|   r}   r~   r   r@   r;   r‚   rf   r†   Ú
avg_strideÚpoolÚavg_pool_fnÚconvs                 rL   Údownsample_avgr“   ¾   s´   € ð6  UÑ	+€BØÒ-œrŸ~™~€JØ# qš=‘¨a€JÜ�;‰;‹=€DØ�‚z�X ’\Ø'1°Q¢¸8Àaº<•mÌRÏ\É\ˆÙ˜1˜j°DÈEÔRˆÙÜ˜V W¨aÑ@¸Ð@¸RÑ@‰ä˜6 7¨AÐf°aÀJÐZ_ÑfÐceÑfˆÜ�=‰=˜4 ˜,Ð'Ð'rK   Údownsample_typec
                 óØ   — ||	dœ}
| dv sJ ‚||k7  s|dk7  s|d   |d   k7  r7t        d	||d   ||dœ|
¤Ž}| sy| dk(  rt        ||fi |¤ŽS t        ||fd|i|¤ŽS t        j                  «       S )
aË  Create shortcut connection for residual blocks.

    Args:
        downsample_type: Type of downsampling ('avg', 'conv1x1', or None).
        in_chs: Input channels.
        out_chs: Output channels.
        kernel_size: Kernel size for conv downsampling.
        stride: Stride for downsampling.
        dilation: Dilation rates.
        norm_layer: Normalization layer.
        preact: Use pre-activation.

    Returns:
        Shortcut module or None.
    r�   )Úavgr8   Ú Nr   r   )r~   r   r@   r;   Nr–   r}   rJ   )Údictr“   r‡   r„   rŒ   )r”   r{   r|   r}   r~   r   r@   r;   r‚   rf   r†   Údargss               rL   Úcreate_shortcutrš   ç   s›   € ð6  UÑ	+€BØÐ:Ñ:Ð:Ð:Ø�Ò˜F ašK¨8°A©;¸(À1¹+Ò+EÜÐe˜F¨X°a©[ÀZÐX^ÑeÐbdÑeˆÙØØ Ò%Ü! &¨'Ñ;°UÑ;Ð;ä" 6¨7ÑUÀÐUÈuÑUÐUä�{‰{‹}ÐrK   c                   ó:  ‡ — e Zd ZdZdddddddej
                  ej                  ddddfd	ed
ededeeef   de	dede	de
dedeej                     deej                     deeej                        de	fˆ fd„Zdd„Zdej$                  dej$                  fd„Zˆ xZS )Ú
BottleneckzúRegNet Bottleneck block.

    This is almost exactly the same as a ResNet Bottleneck. The main difference is the SE block is moved from
    after conv3 to after conv2. Otherwise, it's just redefining the arguments for groups/bottleneck channels.
    r   ©r   r   ç      Ð?r8   FNr3   r{   r|   r~   r   r2   r0   r4   r9   r:   r>   r@   Ú
drop_blockÚdrop_path_ratec           	      óˆ  •— ||dœ}t         ‰| �  «        t        |
«      }
t        t	        ||z  «      «      }||z  }t        |
|¬«      }t        ||fddi|¤|¤Ž| _        t        ||fd||d   ||dœ|¤|¤Ž| _        |r,t        t	        ||z  «      «      }t        |f||
dœ|¤Ž| _
        nt        j                  «       | _
        t        ||fdd	d
œ|¤|¤Ž| _        |	rt        j                  «       n |
«       | _        t        |||fd|||dœ|¤Ž| _        |dkD  rt#        |«      | _        yt        j                  «       | _        y)a³  Initialize RegNet Bottleneck block.

        Args:
            in_chs: Input channels.
            out_chs: Output channels.
            stride: Convolution stride.
            dilation: Dilation rates for conv2 and shortcut.
            bottle_ratio: Bottleneck ratio (reduction factor).
            group_size: Group convolution size.
            se_ratio: Squeeze-and-excitation ratio.
            downsample: Shortcut downsampling type.
            linear_out: Use linear activation for output.
            act_layer: Activation layer.
            norm_layer: Normalization layer.
            drop_block: Drop block layer.
            drop_path_rate: Stochastic depth drop rate.
        r�   ©r>   r@   r}   r   é   r   )r}   r~   r   rU   Ú
drop_layer©Úrd_channelsr>   F)r}   rƒ   )r}   r~   r   r@   N)ÚsuperÚ__init__r   rE   rQ   r˜   r   Úconv1Úconv2r   Úser„   rŒ   Úconv3Úact3rš   r9   r   Ú	drop_path)Úselfr{   r|   r~   r   r2   r0   r4   r9   r:   r>   r@   rŸ   r    r‚   rf   r†   Úbottleneck_chsrU   ÚcargsÚse_channelsÚ	__class__s                        €rL   r¨   zBottleneck.__init__  sv  ø€ ðF ¨Ñ/ˆÜ‰ÑÔÜ! )Ó,ˆ	ÜœU 7¨\Ñ#9Ó:Ó;ˆØ :Ñ-ˆä˜y°ZÔ@ˆÜ  ¨ÑVÀQÐVÈ%ÐVÐSUÑVˆŒ
Ü ØØð

ð ØØ˜a‘[ØØ!ñ

ð ð

ð ñ

ˆŒ
ñ Üœe F¨XÑ$5Ó6Ó7ˆKÜ˜~Ðb¸;ÐR[ÑbÐ_aÑbˆD�Gä—k‘k“mˆDŒGÜ  °ÐhÀaÐSXÑhÐ\aÐhÐegÑhˆŒ
Ù%/”B—K‘K”M±Y³[ˆŒ	Ü)ØØØð	
ð ØØØ!ñ	
ð ñ	
ˆŒð 6DÀaÒ5Gœ .Ó1ˆ�ÌRÏ[É[Ë]ˆ�rK   rO   c                 ó~   — t         j                  j                  | j                  j                  j
                  «       y)z1Zero-initialize the last batch norm in the block.N)r„   ÚinitÚzeros_r¬   ÚbnÚweight©r¯   s    rL   Úzero_init_lastzBottleneck.zero_init_last`  s    € ä
�‰�‰�t—z‘z—}‘}×+Ñ+Õ,rK   Úxc                 ó  — |}| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  �#| j                  |«      | j	                  |«      z   }| j                  |«      }|S ©zoForward pass.

        Args:
            x: Input tensor.

        Returns:
            Output tensor.
        )r©   rª   r«   r¬   r9   r®   r­   ©r¯   r»   Úshortcuts      rL   ÚforwardzBottleneck.forwardd  sw   € ð ˆØ�J‰J�q‹MˆØ�J‰J�q‹MˆØ�G‰G�A‹JˆØ�J‰J�q‹MˆØ�?‰?Ð&ð —‘˜qÓ! D§O¡O°HÓ$=Ñ=ˆAØ�I‰I�a‹LˆØˆrK   ©rO   N©rA   rB   rC   rD   r„   ÚReLUr…   rE   r   rG   rH   rI   r   ÚModuler
   r¨   rº   rg   ÚTensorrÀ   Ú__classcell__©r³   s   @rL   rœ   rœ     s   ø„ ñð Ø(.Ø"#ØØ"Ø'Ø$Ø)+¯©Ø*,¯.©.Ø48Ø$&ØØñ!G[àðG[ð ðG[ð ð	G[ð
 ˜C ˜H‘oðG[ð  ðG[ð ðG[ð ðG[ð ðG[ð ðG[ð ˜BŸI™I‘ðG[ð ˜RŸY™Y™ðG[ð !  b§i¡i¡Ñ1ðG[ð "õG[óR-ð˜Ÿ™ð ¨%¯,©,÷ rK   rœ   c                   ó:  ‡ — e Zd ZdZdddddddej
                  ej                  ddddfd	ed
ededeeef   de	dede	de
dedeej                     deej                     deeej                        de	fˆ fd„Zdd„Zdej$                  dej$                  fd„Zˆ xZS )ÚPreBottleneckznPre-activation RegNet Bottleneck block.

    Similar to Bottleneck but with pre-activation normalization.
    r   r�   rž   r8   FNr3   r{   r|   r~   r   r2   r0   r4   r9   r:   r>   r@   rŸ   r    c                 óp  •— ||dœ}t         ‰| �  «        t        ||
«      }t        t	        ||z  «      «      }||z  } ||fi |¤Ž| _        t        ||fddi|¤Ž| _         ||fi |¤Ž| _        t        ||fd||d   |dœ|¤Ž| _	        |r,t        t	        ||z  «      «      }t        |f||
dœ|¤Ž| _        nt        j                  «       | _         ||fi |¤Ž| _        t        ||fddi|¤Ž| _        t!        |||fd||dd	œ|¤Ž| _        |dkD  rt%        |«      | _        y
t        j                  «       | _        y
)aÂ  Initialize pre-activation RegNet Bottleneck block.

        Args:
            in_chs: Input channels.
            out_chs: Output channels.
            stride: Convolution stride.
            dilation: Dilation rates for conv2 and shortcut.
            bottle_ratio: Bottleneck ratio (reduction factor).
            group_size: Group convolution size.
            se_ratio: Squeeze-and-excitation ratio.
            downsample: Shortcut downsampling type.
            linear_out: Use linear activation for output.
            act_layer: Activation layer.
            norm_layer: Normalization layer.
            drop_block: Drop block layer.
            drop_path_rate: Stochastic depth drop rate.
        r�   r}   r   r£   r   )r}   r~   r   rU   r¥   T)r}   r~   r   r;   N)r§   r¨   r   rE   rQ   Únorm1r   r©   Únorm2rª   r   r«   r„   rŒ   Únorm3r¬   rš   r9   r   r®   )r¯   r{   r|   r~   r   r2   r0   r4   r9   r:   r>   r@   rŸ   r    r‚   rf   r†   Únorm_act_layerr°   rU   r²   r³   s                        €rL   r¨   zPreBottleneck.__init__€  so  ø€ ðF ¨Ñ/ˆÜ‰ÑÔÜ+¨J¸	ÓBˆÜœU 7¨\Ñ#9Ó:Ó;ˆØ :Ñ-ˆá# FÑ1¨bÑ1ˆŒ
Ü" 6¨>ÑOÀqÐOÈBÑOˆŒ
Ù# NÑ9°bÑ9ˆŒ
Ü"ØØð
ð ØØ˜a‘[Øñ
ð ñ
ˆŒ
ñ Üœe F¨XÑ$5Ó6Ó7ˆKÜ˜~Ðb¸;ÐR[ÑbÐ_aÑbˆD�Gä—k‘k“mˆDŒGÙ# NÑ9°bÑ9ˆŒ
Ü" >°7ÑPÈÐPÈRÑPˆŒ
Ü)ØØØð	
ð ØØØñ	
ð ñ	
ˆŒð 6DÀaÒ5Gœ .Ó1ˆ�ÌRÏ[É[Ë]ˆ�rK   rO   c                  ó   — y)z?Zero-initialize the last batch norm (no-op for pre-activation).NrJ   r¹   s    rL   rº   zPreBottleneck.zero_init_lastÈ  s   € àrK   r»   c                 óV  — | j                  |«      }|}| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }| j                  |«      }| j                  |«      }| j                  �#| j                  |«      | j                  |«      z   }|S r½   )	rË   r©   rÌ   rª   r«   rÍ   r¬   r9   r®   r¾   s      rL   rÀ   zPreBottleneck.forwardÌ  s‘   € ð �J‰J�q‹MˆØˆØ�J‰J�q‹MˆØ�J‰J�q‹MˆØ�J‰J�q‹MˆØ�G‰G�A‹JˆØ�J‰J�q‹MˆØ�J‰J�q‹MˆØ�?‰?Ð&ð —‘˜qÓ! D§O¡O°HÓ$=Ñ=ˆAØˆrK   rÁ   rÂ   rÇ   s   @rL   rÉ   rÉ   z  s   ø„ ñð Ø(.Ø"#ØØ"Ø'Ø$Ø)+¯©Ø*,¯.©.Ø48Ø$&ØØñ!F[àðF[ð ðF[ð ð	F[ð
 ˜C ˜H‘oðF[ð  ðF[ð ðF[ð ðF[ð ðF[ð ðF[ð ˜BŸI™I‘ðF[ð ˜RŸY™Y™ðF[ð !  b§i¡i¡Ñ1ðF[ð "õF[óPð˜Ÿ™ð ¨%¯,©,÷ rK   rÉ   c                   ó¤   ‡ — e Zd ZdZdefdedededededeee      d	e	e
j                     fˆ fd
„Zdej                  dej                  fd„Zˆ xZS )ÚRegStagez—RegNet stage (sequence of blocks with the same output shape).

    A stage consists of multiple bottleneck blocks with the same output dimensions.
    Nr(   r{   r|   r~   r   Údrop_path_ratesÚblock_fnc                 ó  •— t         ‰| �  «        d| _        |dv rdnd}	t        |«      D ]U  }
|
dk(  r|nd}|
dk(  r|n|}|	|f}|�||
   nd}dj	                  |
dz   «      }| j                  | |||f|||d	œ|¤Ž«       |}	ŒW y)
a˜  Initialize RegNet stage.

        Args:
            depth: Number of blocks in stage.
            in_chs: Input channels.
            out_chs: Output channels.
            stride: Stride for first block.
            dilation: Dilation rate.
            drop_path_rates: Drop path rates for each block.
            block_fn: Block class to use.
            **block_kwargs: Additional block arguments.
        F)r   r‰   r   r‰   r   Nr3   zb{})r~   r   r    )r§   r¨   Úgrad_checkpointingrr   ÚformatÚ
add_module)r¯   r(   r{   r|   r~   r   rÓ   rÔ   Úblock_kwargsÚfirst_dilationÚiÚblock_strideÚblock_in_chsÚblock_dilationÚdprÚnamer³   s                   €rL   r¨   zRegStage.__init__ê  s¾   ø€ ô. 	‰ÑÔØ"'ˆÔà&¨&Ñ0™°aˆÜ�u“ò 	&ˆAØ%&¨!¢V™6°ˆLØ%&¨!¢V™6°ˆLØ,¨hÐ7ˆNØ(7Ð(C�/ !Ò$ÈˆCØ—<‘<  A¡Ó&ˆDØ�O‰OØÙØ Øðð (Ø+Ø#&ñð #ñô
ð &‰Nñ#	&rK   r»   rO   c                 óÌ   — | j                   r:t        j                  j                  «       st	        | j                  «       |«      }|S | j                  «       D ]
  } ||«      }Œ |S )z�Forward pass through all blocks in the stage.

        Args:
            x: Input tensor.

        Returns:
            Output tensor.
        )rÖ   rg   ÚjitÚis_scriptingr   Úchildren)r¯   r»   Úblocks      rL   rÀ   zRegStage.forward  sZ   € ð ×"Ò"¬5¯9©9×+AÑ+AÔ+CÜ˜tŸ}™}›°Ó2ˆAð ˆð Ÿ™›ò �Ù˜!“H‘ðàˆrK   )rA   rB   rC   rD   rœ   rE   r
   r	   rG   r   r„   rÄ   r¨   rg   rÅ   rÀ   rÆ   rÇ   s   @rL   rÒ   rÒ   ä  s†   ø„ ñð 6:Ø(2ñ,&àð,&ð ð,&ð ð	,&ð
 ð,&ð ð,&ð & d¨5¡kÑ2ð,&ð ˜2Ÿ9™9‘oõ,&ð\˜Ÿ™ð ¨%¯,©,÷ rK   rÒ   c                   ó:  ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 d#dedededededed	ed
efˆ fd„Z		 	 	 d$dededed	ede
eeeef      eeef   f   f
d„Zej                   j"                  d%dedeeef   fd„«       Zej                   j"                  d&deddfd„«       Zej                   j"                  dej*                  fd„«       Zd'dedee   ddfd„Z	 	 	 	 	 d(dej2                  deeeee   f      dededededeeej2                     e
ej2                  eej2                     f   f   fd„Z	 	 	 d)deeee   f   dededee   fd„Zdej2                  dej2                  fd„Zd%dej2                  d edej2                  fd!„Zdej2                  dej2                  fd"„Zˆ xZ S )*r$   z¬RegNet-X, Y, and Z Models.

    Paper: https://arxiv.org/abs/2003.13678
    Original Impl: https://github.com/facebookresearch/pycls/blob/master/pycls/models/regnet.py
    NÚcfgÚin_chansÚnum_classesÚoutput_strideÚglobal_poolÚ	drop_rater    rº   c           
      ó¢  •— t         ‰| �  «        |	|
dœ}|| _        || _        || _        |dv sJ ‚t        |fi |¤Ž}|j                  }t        |j                  |j                  ¬«      }|j                  rt        ||dfddi|¤Ž| _        nt        ||dfddi|¤|¤Ž| _        t        |dd¬«      g| _        |}d}| j                  |||¬	«      \  }}t!        |«      d
k(  sJ ‚|j                  rt"        nt$        }t'        |«      D ]j  \  }}dj)                  |dz   «      }| j+                  |t-        d||dœ|¤|¤|¤Ž«       |d   }||d   z  }| xj                  t        |||¬«      gz  c_        Œl |j.                  r2t        ||j.                  fddi|¤|¤Ž| _        |j.                  | _        nV|j2                  xs |j                  }|r t5        |j                  «      «       nt7        j8                  «       | _        || _        | j.                  | _        t=        d| j.                  |||dœ|¤Ž| _        tA        tC        tD        |¬«      | «       y)a  Initialize RegNet model.

        Args:
            cfg: Model architecture configuration.
            in_chans: Number of input channels.
            num_classes: Number of classifier classes.
            output_stride: Output stride of network, one of (8, 16, 32).
            global_pool: Global pooling type.
            drop_rate: Dropout rate.
            drop_path_rate: Stochastic depth drop-path rate.
            zero_init_last: Zero-init last weight of residual path.
            kwargs: Extra kwargs overlayed onto cfg.
        r�   )r`   é   r6   r¢   r£   r~   r‰   Ústem)Únum_chsÚ	reductionÚmodule)rê   r    é   zs{}r   )r{   rÔ   r|   r}   )Úin_featuresré   Ú	pool_typerì   )rº   NrJ   )#r§   r¨   ré   rè   rì   r   r7   r˜   r>   r@   r;   r   rï   r   Úfeature_infoÚ_get_stage_argsrm   rÉ   rœ   Ú	enumerater×   rØ   rÒ   r<   Ú
final_convr:   r   r„   rŒ   Úhead_hidden_sizer   Úheadr    r   Ú_init_weights)r¯   rç   rè   ré   rê   rë   rì   r    rº   r‚   rf   Úkwargsr†   r7   Úna_argsÚ
prev_widthÚcurr_strideÚper_stage_argsÚcommon_argsrÔ   rÛ   Ú
stage_argsÚ
stage_nameÚ	final_actr³   s                           €rL   r¨   zRegNet.__init__0  s~  ø€ ô6 	‰ÑÔØ¨Ñ/ˆØ&ˆÔØ ˆŒØ"ˆŒØ Ñ+Ð+Ð+Ü�cÑ$˜VÑ$ˆð —^‘^ˆ
Ü §¡¸3¿>¹>ÔJˆØ�:Š:Ü% h°
¸AÑNÀaÐNÈ2ÑNˆD�Iä# H¨j¸!ÑWÀAÐWÈÐWÐTVÑWˆDŒIÜ!¨*ÀÈ&ÔQÐRˆÔð  ˆ
ØˆØ&*×&:Ñ&:ØØ'Ø)ð ';ó '
Ñ#ˆ˜ô
 �>Ó" aÒ'Ð'Ð'Ø$'§J¢J•=´JˆÜ& ~Ó6ò 	f‰MˆAˆzØŸ™ a¨!¡eÓ,ˆJØ�O‰OØÜð Ø%Ø%ñð !ðð "ð	ð
 ñô	ð $ IÑ.ˆJØ˜: hÑ/Ñ/ˆKØ×Ò¤$¨zÀ[ÐYcÔ"dÐ!eÑeÖð	fð" ×ÒÜ)¨*°c×6FÑ6FÑgÐTUÐgÐY`ÐgÐdfÑgˆDŒOØ #× 0Ñ 0ˆDÕàŸ™Ò4¨#¯*©*ˆIÙ@IÐ:œm¨C¯M©MÓ:Ô<ÌrÏ{É{Ë}ˆDŒOØ *ˆDÔØ $× 1Ñ 1ˆÔÜ"ð 
Ø×)Ñ)Ø#Ø!Øñ	
ð
 ñ
ˆŒ	ô 	”GœM¸.ÔIÈ4ÕPrK   Údefault_striderO   c           	      ód  — t        |j                  |j                  |j                  |j                  |j
                  «      \  }}}t        j                  t        j                  |«      d¬«      \  }}	|j                  «       |	j                  «       }	}t        |«      D �
cg c]  }
|j                  ‘Œ }}
g }g }d}d}t        |«      D ]8  }
||k\  r||z  }d}n|}||z  }|j                  |«       |j                  |«       Œ: t        ||	d¬«      }t        ||||j                  ¬«      \  }}g d¢}t!        ||||	|||«      D �cg c]  }t#        t!        ||«      «      ‘Œ }}t#        |j$                  |j&                  |j(                  |j*                  |j,                  ¬«      }||fS c c}
w c c}w )	aM  Generate stage arguments from configuration.

        Args:`
            cfg: RegNet configuration.
            default_stride: Default stride for stages.
            output_stride: Target output stride.
            drop_path_rate: Stochastic depth rate.

        Returns:
            Tuple of (per_stage_args, common_args).
        T)Úreturn_countsr‰   r   )Ú	stagewise)rV   )r|   r~   r   r(   r2   r0   rÓ   )r9   r4   r:   r>   r@   )rz   r,   r*   r.   r(   r0   rg   rn   rq   rt   rr   r2   Úappendr   r_   r5   rX   r˜   r9   r4   r:   r>   r@   )r¯   rç   r  rê   r    rS   rw   Ústage_gsÚstage_widthsÚstage_depthsry   Ústage_brÚstage_stridesÚstage_dilationsÚ
net_strider   r~   Ú	stage_dprÚ	arg_namesÚparamsr  r  s                         rL   r÷   zRegNet._get_stage_args‰  s¯  € ô& (7°s·v±v¸s¿v¹vÀsÇvÁvÈsÏyÉyÐZ]×ZhÑZhÓ'iÑ$ˆ�
˜Hô &+§\¡\´%·,±,¸vÓ2FÐVZÔ%[Ñ"ˆ�lØ%1×%8Ñ%8Ó%:¸L×<OÑ<OÓ<Q�lˆÜ.3°JÓ.?Ö@¨�C×$Ó$Ð@ˆÐ@ØˆØˆØˆ
ØˆÜ�zÓ"ò 	-ˆAØ˜]Ò*Ø˜NÑ*�Ø‘à'�Ø˜fÑ$�
Ø× Ñ  Ô(Ø×"Ñ" 8Õ,ð	-ô .¨n¸lÐVZÔ[ˆ	ä!:Ø˜( H¸×8KÑ8Kô"MÑˆ�hâoˆ	ô �˜m¨_¸lÈHÐV^Ð`iÓjö
Ø-3ŒD”�Y Ó'Õ(ð
ˆð 
ô Ø—~‘~Ø—\‘\Ø—~‘~Ø—m‘mØ—~‘~ô
ˆð ˜{Ð*Ð*ùò= Aùò&
s   Â F(ÅF-Úcoarsec                 ó.   — t        d|rd¬«      S d¬«      S )z"Group parameters for optimization.z^stemz^s(\d+)z^s(\d+)\.b(\d+))rï   Úblocks)r˜   )r¯   r  s     rL   Úgroup_matcherzRegNet.group_matcherÁ  s&   € ô ØÙ!'�:ô
ð 	
à-?ô
ð 	
rK   Úenablec                 óT   — t        | j                  «       «      dd D ]	  }||_        Œ y)z)Enable or disable gradient checkpointing.r   éÿÿÿÿN)Úlisträ   rÖ   )r¯   r  Úss      rL   Úset_grad_checkpointingzRegNet.set_grad_checkpointingÉ  s-   € ô �d—m‘m“oÓ& q¨Ð,ò 	*ˆAØ#)ˆAÕ ñ	*rK   c                 ó.   — | j                   j                  S )zGet the classifier head.)rû   Úfcr¹   s    rL   Úget_classifierzRegNet.get_classifierÏ  s   € ð �y‰y�|‰|ÐrK   c                 óL   — || _         | j                  j                  ||¬«       y)zŸReset the classifier head.

        Args:
            num_classes: Number of classes for new classifier.
            global_pool: Global pooling type.
        )rõ   N)ré   rû   Úreset)r¯   ré   rë   s      rL   Úreset_classifierzRegNet.reset_classifierÔ  s    € ð 'ˆÔØ�	‰	�‰˜¨{ˆÕ;rK   r»   ÚindicesÚnormÚ
stop_earlyÚ
output_fmtÚintermediates_onlyc                 ó@  — |dv sJ d«       ‚g }t        d|«      \  }}	d}
| j                  |«      }|
|v r|j                  |«       d}|r|d|	 }|D ]/  }|
dz  }
 t        | |«      |«      }|
|v sŒ|j                  |«       Œ1 |r|S |
dk(  r| j	                  |«      }||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:

        )ÚNCHWzOutput shape must be NCHW.é   r   ©Ús1Ús2Ús3Ús4Nr   ró   )r   rï   r
  Úgetattrrù   )r¯   r»   r%  r&  r'  r(  r)  ÚintermediatesÚtake_indicesÚ	max_indexÚfeat_idxÚlayer_namesÚns                rL   Úforward_intermediateszRegNet.forward_intermediatesÞ  sØ   € ð* ˜YÑ&ÐDÐ(DÓDÐ&ØˆÜ"6°q¸'Ó"BÑˆ�ið ˆØ�I‰I�a‹LˆØ�|Ñ#Ø× Ñ  Ô#à.ˆÙØ% j yÐ1ˆKØò 	(ˆAØ˜‰MˆHØ ”˜˜aÓ  Ó#ˆAØ˜<Ò'Ø×$Ñ$ QÕ'ð		(ñ Ø Ð à�qŠ=Ø—‘ Ó"ˆAà�-ÐÐrK   Ú
prune_normÚ
prune_headc                 óâ   — t        d|«      \  }}d}||d }|D ]!  }t        | |t        j                  «       «       Œ# |dk  rt        j                  «       | _        |r| j                  dd«       |S )aE  Prune layers not required for specified intermediates.

        Args:
            indices: Indices of intermediate layers to keep.
            prune_norm: Whether to prune normalization layer.
            prune_head: Whether to prune the classifier head.

        Returns:
            List of indices that were kept.
        r,  r-  Nró   r   r—   )r   Úsetattrr„   rŒ   rù   r$  )r¯   r%  r:  r;  r4  r5  r7  r8  s           rL   Úprune_intermediate_layersz RegNet.prune_intermediate_layers  st   € ô  #7°q¸'Ó"BÑˆ�iØ.ˆØ! ) *Ð-ˆØò 	,ˆAÜ�D˜!œRŸ[™[›]Õ+ð	,à�qŠ=Ü Ÿk™k›mˆDŒOÙØ×!Ñ! ! RÔ(ØÐrK   c                 óÒ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }| j                  |«      }|S )z’Forward pass through feature extraction layers.

        Args:
            x: Input tensor.

        Returns:
            Feature tensor.
        )rï   r.  r/  r0  r1  rù   ©r¯   r»   s     rL   Úforward_featureszRegNet.forward_features)  sX   € ð �I‰I�a‹LˆØ�G‰G�A‹JˆØ�G‰G�A‹JˆØ�G‰G�A‹JˆØ�G‰G�A‹JˆØ�O‰O˜AÓˆØˆrK   Ú
pre_logitsc                 óN   — |r| j                  ||¬«      S | j                  |«      S )zàForward pass through classifier head.

        Args:
            x: Input features.
            pre_logits: Return features before final linear layer.

        Returns:
            Classification logits or features.
        )rB  )rû   )r¯   r»   rB  s      rL   Úforward_headzRegNet.forward_head:  s(   € ñ 7Aˆt�y‰y˜ zˆyÓ2ÐRÀdÇiÁiÐPQÃlÐRrK   c                 óJ   — | j                  |«      }| j                  |«      }|S )zoForward pass.

        Args:
            x: Input tensor.

        Returns:
            Output logits.
        )rA  rD  r@  s     rL   rÀ   zRegNet.forwardF  s)   € ð ×!Ñ! !Ó$ˆØ×Ñ˜aÓ ˆØˆrK   )	r£   éè  r6   r–   r3   r3   TNN)r‰   r6   r3   ©F)T)N)NFFr+  F)r   FT)!rA   rB   rC   rD   r%   rE   rH   rG   rI   r¨   r   r	   r   r   r÷   rg   râ   Úignorer  r  r„   rÄ   r!  r
   r$  rÅ   r   r9  r>  rA  rD  rÀ   rÆ   rÇ   s   @rL   r$   r$   )  sÑ  ø„ ñð Ø#Ø!#Ø$Ø!Ø$&Ø#'ØØñWQàðWQð ðWQð ð	WQð
 ðWQð ðWQð ðWQð "ðWQð !õWQðx #$Ø!#Ø$&ñ6+àð6+ð  ð6+ð ð	6+ð
 "ð6+ð 
ˆt�D˜˜c˜‘NÑ# T¨#¨s¨(¡^Ð3Ñ	4ó6+ðp ‡Y�Y×Ññ
 Dð 
°T¸#¸s¸(±^ò 
ó ð
ð ‡Y�Y×Ññ*¨Tð *¸Tò *ó ð*ð
 ‡Y�Y×Ñð §	¡	ò ó ðñ<¨Cð <¸hÀs¹mð <ÐW[ó <ð 8<ØØ$Ø$Ø',ñ. à�|‰|ð. ð ˜e C¨¨c© NÑ3Ñ4ð. ð ð	. ð
 ð. ð ð. ð !%ð. ð 
ˆt�E—L‘LÑ! 5¨¯©°t¸E¿L¹LÑ7IÐ)IÑ#JÐJÑ	Kó. ðd ./Ø$Ø#ñ	à˜3  S¡	˜>Ñ*ðð ðð ð	ð
 
ˆc‰óð6 %§,¡,ð °5·<±<ó ñ"
S˜eŸl™lð 
S¸ð 
SÈÏÉó 
Sð˜Ÿ™ð ¨%¯,©,÷ rK   r—   rò   rà   rº   c                 óÄ  — t        | t        j                  «      r©| j                  d   | j                  d   z  | j                  z  }|| j
                  z  }| j                  j                  j                  dt        j                  d|z  «      «       | j                  �%| j                  j                  j                  «        yyt        | t        j                  «      rct        j                  j                  | j                  dd¬«       | j                  �*t        j                  j                  | j                  «       yy|rt!        | d«      r| j#                  «        yyy)	z¯Initialize module weights.

    Args:
        module: PyTorch module to initialize.
        name: Module name.
        zero_init_last: Zero-initialize last layer weights.
    r   r   ç       @Nr3   g{®Gáz„?)ÚmeanÚstdrº   )Ú
isinstancer„   ÚConv2dr}   Úout_channelsrU   r¸   ÚdataÚnormal_rk   ÚsqrtÚbiasÚzero_ÚLinearrµ   r¶   Úhasattrrº   )rò   rà   rº   Úfan_outs       rL   rü   rü   T  s  € ô �&œ"Ÿ)™)Ô$Ø×$Ñ$ QÑ'¨&×*<Ñ*<¸QÑ*?Ñ?À&×BUÑBUÑUˆØ�F—M‘MÑ!ˆØ�‰×Ñ×"Ñ" 1¤d§i¡i°°g±Ó&>Ô?Ø�;‰;Ð"Ø�K‰K×Ñ×"Ñ"Õ$ð #ä	�FœBŸI™IÔ	&Ü
�‰�‰˜Ÿ™¨C°TˆÔ:Ø�;‰;Ð"Ü�G‰G�N‰N˜6Ÿ;™;Õ'ð #á	œG FÐ,<Ô=Ø×ÑÕð >ˆrK   Ú
state_dictc                 ó  — | j                  d| «      } g d¢}d| v rÕddl}| d   d   d   } i }| d   j                  «       D ]q  \  }}|j                  dd	«      }|j                  d
d«      }|j	                  dd„ |«      }|j	                  dd|«      }|D ]  \  }}|j                  ||«      }Œ |||<   Œs | d   j                  «       D ]%  \  }}d|v sd|v rŒ|j                  dd«      }|||<   Œ' |S d| v r‹ddl}i }| j                  «       D ]p  \  }}|j                  dd	«      }|j                  dd«      }|j	                  dd„ |«      }|D ]  \  }}|j                  ||«      }Œ |j                  dd«      }|||<   Œr |S | S )zžFilter and remap state dict keys for compatibility.

    Args:
        state_dict: Raw state dictionary.

    Returns:
        Filtered state dictionary.
    Úmodel))zf.a.0z
conv1.conv)zf.a.1zconv1.bn)zf.b.0z
conv2.conv)zf.b.1zconv2.bn)z
f.final_bnúconv3.bn)zf.se.excitation.0zse.fc1)zf.se.excitation.2zse.fc2)zf.ser«   )zf.c.0ú
conv3.conv)zf.c.1r[  )zf.cr\  )zproj.0údownsample.conv)zproj.1zdownsample.bn)Úprojr]  Úclassy_state_dictr   NÚ
base_modelÚtrunkz_feature_blocks.conv1.stem.0ú	stem.convz_feature_blocks.conv1.stem.1zstem.bnz&^_feature_blocks.res\d.block(\d)-(\d+)c                 óx   — dt        | j                  d«      «      › dt        | j                  d«      «      dz   › �S )Nr  r   ú.br‰   ©rE   Úgroup©r»   s    rL   ú<lambda>z_filter_fn.<locals>.<lambda>Ž  ó2   € ˜Aœc !§'¡'¨!£*›oÐ.¨b´°Q·W±W¸Q³Z³À1Ñ1DÐ0EÐF€ rK   zs(\d)\.b(\d+)\.bnzs\1.b\2.downsample.bnÚheadsÚprojection_headÚ
prototypesz0.clf.0úhead.fczstem.0.weightzstem.0zstem.1z)trunk_output.block(\d)\.block(\d+)\-(\d+)c                 óx   — dt        | j                  d«      «      › dt        | j                  d«      «      dz   › �S )Nr  r   rd  r£   re  rg  s    rL   rh  z_filter_fn.<locals>.<lambda>¢  ri  rK   zfc.zhead.fc.)ÚgetÚreÚitemsr   Úsub)rX  Úreplacesrp  ÚoutÚkÚvr  Úrs           rL   Ú
_filter_fnrx  j  sß  € ð —‘ ¨Ó4€Jò€Hð  ˜jÑ(ãØÐ 3Ñ4°\ÑBÀ7ÑKˆ
ØˆØ˜wÑ'×-Ñ-Ó/ò 		‰DˆAˆqØ—	‘	Ð8¸+ÓFˆAØ—	‘	Ð8¸)ÓDˆAØ—‘Ø9ÙFÈóKˆAð —‘Ð+Ð-EÀqÓIˆAØ ò $‘��1Ø—I‘I˜a “O‘ð$àˆC�ŠFð		ð ˜wÑ'×-Ñ-Ó/ò 	‰DˆAˆqØ  AÑ%¨¸Ñ):ØØ—	‘	˜) YÓ/ˆAØˆC�ŠFð		ð
 ˆ
Ø˜*Ñ$ãØˆØ×$Ñ$Ó&ò 		‰DˆAˆqØ—	‘	˜( KÓ0ˆAØ—	‘	˜( IÓ.ˆAØ—‘Ø<ÙFÈóKˆAð !ò $‘��1Ø—I‘I˜a “O‘ð$à—	‘	˜% Ó,ˆAØˆC�ŠFð		ð ˆ
ØÐrK   Úregnetx_002r/   g¸…ëQ8B@gìQ¸…ë@é   )r*   r,   r.   r0   r(   Úregnetx_004g{®Gáz8@gR¸…ëQ@rî   é   Úregnetx_004_tvgÍÌÌÌÌÌì?)r*   r,   r.   r0   r(   r5   Úregnetx_006é0   g\�Âõ(|B@gìQ¸…ë@Úregnetx_008é8   g=
×£pÝA@g=
×£p=@Úregnetx_016r)   gáz®GA@g      @é   Úregnetx_032éX   g�Âõ(\O:@é   Úregnetx_040é`   g33333SC@gq=
×£p@é(   é   Úregnetx_064é¸   g
×£p=jN@g�Âõ(\� @é   Úregnetx_080gHáz®ÇH@g
×£p=
@éx   Úregnetx_120é¨   g×£p=
WR@gö(\�Âõ@ép   é   Úregnetx_160éØ   gìQ¸…ËK@gÍÌÌÌÌÌ @é€   Úregnetx_320é@  g×£p=
wQ@rJ  Úregnety_002rž   )r*   r,   r.   r0   r(   r4   Úregnety_004g¤p=
×ã;@g¸…ëQ¸ @Úregnety_006g…ëQ¸E@@g�Âõ(\�@é   Úregnety_008gìQ¸…kC@g333333@é   Úregnety_008_tv)r*   r,   r.   r0   r(   r4   r5   Úregnety_016gö(\�Âµ4@g333333@é   Úregnety_032r+   r-   r'   Úregnety_040g)\�Âõh?@é@   Úregnety_064g\�Âõ(œ@@g)\�Âõ(@éH   Úregnety_080éÀ   g®Gáz4S@g…ëQ¸…@Úregnety_080_tvÚregnety_120Úregnety_160éÈ   g…ëQ¸ŽZ@g×£p=
×@Úregnety_320éè   g)\�Âõø\@g=
×£p=@é   Úregnety_640i`  g�Âõ(\ob@iH  Úregnety_1280iÈ  gÃõ(\�d@g)\�Âõ(@i  Úregnety_2560i€  gÃõ(\�Úl@iu  Úregnety_040_sgnÚsilu)r0   )r*   r,   r.   r0   r(   r4   r>   r@   Úregnetv_040T)r(   r*   r,   r.   r0   r4   r;   r>   Úregnetv_064r–   )	r(   r*   r,   r.   r0   r4   r;   r>   r9   Úregnetz_005gffffff%@g®Gáz@ró   g      @i   )r(   r*   r,   r.   r0   r2   r4   r9   r:   r<   r>   Úregnetz_040é   g      -@g+‡ÙÎ@Úregnetz_040_hi   ÚvariantÚ
pretrainedc                 óB   — t        t        | |ft        |    t        dœ|¤ŽS )zÓCreate a RegNet model.

    Args:
        variant: Model variant name.
        pretrained: Load pretrained weights.
        **kwargs: Additional model arguments.

    Returns:
        RegNet model instance.
    )Ú	model_cfgÚpretrained_filter_fn)r   r$   Ú
model_cfgsrx  )r»  r¼  rý   s      rL   Ú_create_regnetrÁ  ì  s2   € ô  Ü�˜ðä˜WÑ%Ü'ñð ñ	ð rK   Úurlc                 ó6   — | dddddddt         t        dd	d
dœ|¥S )z»Create default configuration dictionary.

    Args:
        url: Model weight URL.
        **kwargs: Additional configuration options.

    Returns:
        Configuration dictionary.
    rF  ©r£   éà   rÅ  ©é   rÇ  )r£   é   rÈ  gffffffî?r1   Úbicubicrb  rm  z
apache-2.0)rÂ  ré   Ú
input_sizeÚ	pool_sizeÚtest_input_sizeÚcrop_pctÚtest_crop_pctÚinterpolationrK  rL  Ú
first_convÚ
classifierÚlicenser   ©rÂ  rý   s     rL   Ú_cfgrÔ  þ  s:   € ð  4°}ÐSYØ(°dÈSØ"Ô,AÔJ^Ø!°Øñð
 $*ðð rK   c                 ó4   — | dddddt         t        dddd	d
œ|¥S )z¹Create pycls configuration dictionary.

    Args:
        url: Model weight URL.
        **kwargs: Additional configuration options.

    Returns:
        Configuration dictionary.
    rF  rÄ  rÆ  g      ì?rÉ  rb  rm  Úmitz)https://github.com/facebookresearch/pycls©rÂ  ré   rÊ  rË  rÍ  rÏ  rK  rL  rÐ  rÑ  rÒ  Ú
origin_urlr   rÓ  s     rL   Ú_cfgpycrÙ    s:   € ð  4°}ÐSYØ¨IÜ%Ô.BØ!°ØÐ(Sñð
 X^ðð rK   c                 ó4   — | dddddt         t        dddd	d
œ|¥S )zÂCreate torchvision v2 configuration dictionary.

    Args:
        url: Model weight URL.
        **kwargs: Additional configuration options.

    Returns:
        Configuration dictionary.
    rF  rÄ  rÆ  gáz®Gáî?rÉ  rb  rm  zbsd-3-clausez!https://github.com/pytorch/visionr×  r   rÓ  s     rL   Ú_cfgtv2rÛ  $  s:   € ð  4°}ÐSYØ¨IÜ%Ô.BØ!°Ø!Ð1Tñð
 Y_ðð rK   zregnety_032.ra_in1kztimm/znhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/regnety_032_ra-7f2439f9.pth)Ú	hf_hub_idrÂ  zregnety_040.ra3_in1kzshttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-tpu-weights/regnety_040_ra3-670e1166.pthzregnety_064.ra3_in1kzshttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-tpu-weights/regnety_064_ra3-aa26dc7d.pthzregnety_080.ra3_in1kzshttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-tpu-weights/regnety_080_ra3-1fdc4344.pthzregnety_120.sw_in12k_ft_in1k)rÜ  zregnety_160.sw_in12k_ft_in1kzregnety_160.lion_in12k_ft_in1kzregnety_120.sw_in12ki-.  )rÜ  ré   zregnety_160.sw_in12kzregnety_040_sgn.untrained)rÂ  zregnetv_040.ra3_in1kzshttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-tpu-weights/regnetv_040_ra3-c248f51f.pthrï   )rÜ  rÂ  rÐ  zregnetv_064.ra3_in1kzshttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-tpu-weights/regnetv_064_ra3-530616c2.pthzregnetz_005.untrainedzregnetz_040.ra3_in1kzshttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-tpu-weights/regnetz_040_ra3-9007edf5.pth)r£   é   rÝ  )r`   r`   r1   )r£   r˜  r˜  )rÜ  rÂ  rÊ  rË  rÍ  rÌ  zregnetz_040_h.ra3_in1kzthttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-tpu-weights/regnetz_040h_ra3-f594343b.pthzregnety_160.deit_in1kz<https://dl.fbaipublicfiles.com/deit/regnety_160-a5fe301d.pthzregnetx_004_tv.tv2_in1kz?https://download.pytorch.org/models/regnet_x_400mf-62229a5f.pthzregnetx_008.tv2_in1kz?https://download.pytorch.org/models/regnet_x_800mf-94a99ebd.pthzregnetx_016.tv2_in1kz?https://download.pytorch.org/models/regnet_x_1_6gf-a12f2b72.pthzregnetx_032.tv2_in1kz?https://download.pytorch.org/models/regnet_x_3_2gf-7071aa85.pthzregnetx_080.tv2_in1kz=https://download.pytorch.org/models/regnet_x_8gf-2b70d774.pthzregnetx_160.tv2_in1kz>https://download.pytorch.org/models/regnet_x_16gf-ba3796d7.pthzregnetx_320.tv2_in1kz>https://download.pytorch.org/models/regnet_x_32gf-6eb8fdc6.pthzregnety_004.tv2_in1kz?https://download.pytorch.org/models/regnet_y_400mf-e6988f5f.pthzregnety_008_tv.tv2_in1kz?https://download.pytorch.org/models/regnet_y_800mf-58fc7688.pthzregnety_016.tv2_in1kz?https://download.pytorch.org/models/regnet_y_1_6gf-0d7bc02a.pthzregnety_032.tv2_in1kz?https://download.pytorch.org/models/regnet_y_3_2gf-9180c971.pthzregnety_080_tv.tv2_in1kz=https://download.pytorch.org/models/regnet_y_8gf-dc2b1b54.pthzregnety_160.tv2_in1kz>https://download.pytorch.org/models/regnet_y_16gf-3e4a00f9.pthzregnety_320.tv2_in1kz>https://download.pytorch.org/models/regnet_y_32gf-8db6d4b5.pthzregnety_160.swag_ft_in1kzChttps://download.pytorch.org/models/regnet_y_16gf_swag-43afe44d.pthzcc-by-nc-4.0)r£   é€  rÞ  )é   rß  )rÜ  rÂ  rÒ  rÊ  rË  rÍ  zregnety_320.swag_ft_in1kzChttps://download.pytorch.org/models/regnet_y_32gf_swag-04fdfa75.pthzregnety_1280.swag_ft_in1kzDhttps://download.pytorch.org/models/regnet_y_128gf_swag-c8ce3e52.pthzregnety_160.swag_lc_in1kzFhttps://download.pytorch.org/models/regnet_y_16gf_lc_swag-f3ec0043.pth)rÜ  rÂ  rÒ  zregnety_320.swag_lc_in1kzFhttps://download.pytorch.org/models/regnet_y_32gf_lc_swag-e1583746.pthzregnety_1280.swag_lc_in1kzGhttps://download.pytorch.org/models/regnet_y_128gf_lc_swag-cbe8ce12.pthzregnety_320.seer_ft_in1kzseer-licensez)https://github.com/facebookresearch/visslzhttps://dl.fbaipublicfiles.com/vissl/model_zoo/seer_finetuned/seer_regnet32_finetuned_in1k_model_final_checkpoint_phase78.torch)rÜ  rÒ  rØ  rÂ  rÊ  rË  rÍ  zregnety_640.seer_ft_in1kzhttps://dl.fbaipublicfiles.com/vissl/model_zoo/seer_finetuned/seer_regnet64_finetuned_in1k_model_final_checkpoint_phase78.torchzregnety_1280.seer_ft_in1kz€https://dl.fbaipublicfiles.com/vissl/model_zoo/seer_finetuned/seer_regnet128_finetuned_in1k_model_final_checkpoint_phase78.torchzregnety_2560.seer_ft_in1kz€https://dl.fbaipublicfiles.com/vissl/model_zoo/seer_finetuned/seer_regnet256_finetuned_in1k_model_final_checkpoint_phase38.torchzregnety_320.seerzihttps://dl.fbaipublicfiles.com/vissl/model_zoo/seer_regnet32d/seer_regnet32gf_model_iteration244000.torch)rÜ  rÂ  ré   rÒ  rØ  zregnety_640.seerzphttps://dl.fbaipublicfiles.com/vissl/model_zoo/seer_regnet64/seer_regnet64gf_model_final_checkpoint_phase0.torchzregnety_1280.seerz¢https://dl.fbaipublicfiles.com/vissl/model_zoo/swav_ig1b_regnet128Gf_cnstant_bs32_node16_sinkhorn10_proto16k_syncBN64_warmup8k/model_final_checkpoint_phase0.torchzregnetx_002.pycls_in1kzregnetx_004.pycls_in1kzregnetx_006.pycls_in1kzregnetx_008.pycls_in1kzregnetx_016.pycls_in1kzregnetx_032.pycls_in1kzregnetx_040.pycls_in1kzregnetx_064.pycls_in1kzregnetx_080.pycls_in1kzregnetx_120.pycls_in1kzregnetx_160.pycls_in1kzregnetx_320.pycls_in1kzregnety_002.pycls_in1kzregnety_004.pycls_in1kzregnety_006.pycls_in1kzregnety_008.pycls_in1kzregnety_016.pycls_in1kzregnety_032.pycls_in1kzregnety_040.pycls_in1kzregnety_064.pycls_in1kzregnety_080.pycls_in1kzregnety_120.pycls_in1kzregnety_160.pycls_in1kzregnety_320.pycls_in1kc                 ó   — t        d| fi |¤ŽS )zRegNetX-200MFry  ©rÁ  ©r¼  rý   s     rL   ry  ry  ï  ó   € ô ˜-¨Ñ>°vÑ>Ð>rK   c                 ó   — t        d| fi |¤ŽS )zRegNetX-400MFr{  rá  râ  s     rL   r{  r{  õ  rã  rK   c                 ó   — t        d| fi |¤ŽS )z+RegNetX-400MF w/ torchvision group roundingr}  rá  râ  s     rL   r}  r}  û  ó   € ô Ð*¨JÑA¸&ÑAÐArK   c                 ó   — t        d| fi |¤ŽS )zRegNetX-600MFr~  rá  râ  s     rL   r~  r~    rã  rK   c                 ó   — t        d| fi |¤ŽS )zRegNetX-800MFr€  rá  râ  s     rL   r€  r€    rã  rK   c                 ó   — t        d| fi |¤ŽS )zRegNetX-1.6GFr‚  rá  râ  s     rL   r‚  r‚    rã  rK   c                 ó   — t        d| fi |¤ŽS )zRegNetX-3.2GFr„  rá  râ  s     rL   r„  r„    rã  rK   c                 ó   — t        d| fi |¤ŽS )zRegNetX-4.0GFr‡  rá  râ  s     rL   r‡  r‡    rã  rK   c                 ó   — t        d| fi |¤ŽS )zRegNetX-6.4GFr‹  rá  râ  s     rL   r‹  r‹    rã  rK   c                 ó   — t        d| fi |¤ŽS )zRegNetX-8.0GFrŽ  rá  râ  s     rL   rŽ  rŽ  %  rã  rK   c                 ó   — t        d| fi |¤ŽS )zRegNetX-12GFr�  rá  râ  s     rL   r�  r�  +  rã  rK   c                 ó   — t        d| fi |¤ŽS )zRegNetX-16GFr”  rá  râ  s     rL   r”  r”  1  rã  rK   c                 ó   — t        d| fi |¤ŽS )zRegNetX-32GFr—  rá  râ  s     rL   r—  r—  7  rã  rK   c                 ó   — t        d| fi |¤ŽS )zRegNetY-200MFr™  rá  râ  s     rL   r™  r™  =  rã  rK   c                 ó   — t        d| fi |¤ŽS )zRegNetY-400MFrš  rá  râ  s     rL   rš  rš  C  rã  rK   c                 ó   — t        d| fi |¤ŽS )zRegNetY-600MFr›  rá  râ  s     rL   r›  r›  I  rã  rK   c                 ó   — t        d| fi |¤ŽS )zRegNetY-800MFr�  rá  râ  s     rL   r�  r�  O  rã  rK   c                 ó   — t        d| fi |¤ŽS )z+RegNetY-800MF w/ torchvision group roundingrŸ  rá  râ  s     rL   rŸ  rŸ  U  ræ  rK   c                 ó   — t        d| fi |¤ŽS )zRegNetY-1.6GFr   rá  râ  s     rL   r   r   [  rã  rK   c                 ó   — t        d| fi |¤ŽS )zRegNetY-3.2GFr¢  rá  râ  s     rL   r¢  r¢  a  rã  rK   c                 ó   — t        d| fi |¤ŽS )zRegNetY-4.0GFr£  rá  râ  s     rL   r£  r£  g  rã  rK   c                 ó   — t        d| fi |¤ŽS )zRegNetY-6.4GFr¥  rá  râ  s     rL   r¥  r¥  m  rã  rK   c                 ó   — t        d| fi |¤ŽS )zRegNetY-8.0GFr§  rá  râ  s     rL   r§  r§  s  rã  rK   c                 ó   — t        d| fi |¤ŽS )z+RegNetY-8.0GF w/ torchvision group roundingr©  rá  râ  s     rL   r©  r©  y  ræ  rK   c                 ó   — t        d| fi |¤ŽS )zRegNetY-12GFrª  rá  râ  s     rL   rª  rª    rã  rK   c                 ó   — t        d| fi |¤ŽS )zRegNetY-16GFr«  rá  râ  s     rL   r«  r«  …  rã  rK   c                 ó   — t        d| fi |¤ŽS )zRegNetY-32GFr­  rá  râ  s     rL   r­  r­  ‹  rã  rK   c                 ó   — t        d| fi |¤ŽS )zRegNetY-64GFr°  rá  râ  s     rL   r°  r°  ‘  rã  rK   c                 ó   — t        d| fi |¤ŽS )zRegNetY-128GFr±  rá  râ  s     rL   r±  r±  —  ó   € ô ˜.¨*Ñ?¸Ñ?Ð?rK   c                 ó   — t        d| fi |¤ŽS )zRegNetY-256GFr²  rá  râ  s     rL   r²  r²  �  r  rK   c                 ó   — t        d| fi |¤ŽS )zRegNetY-4.0GF w/ GroupNorm r³  rá  râ  s     rL   r³  r³  £  s   € ô Ð+¨ZÑB¸6ÑBÐBrK   c                 ó   — t        d| fi |¤ŽS )zRegNetV-4.0GF (pre-activation)rµ  rá  râ  s     rL   rµ  rµ  ©  rã  rK   c                 ó   — t        d| fi |¤ŽS )zRegNetV-6.4GF (pre-activation)r¶  rá  râ  s     rL   r¶  r¶  ¯  rã  rK   c                 ó    — t        d| fddi|¤ŽS )zÛRegNetZ-500MF
    NOTE: config found in https://github.com/facebookresearch/ClassyVision/blob/main/classy_vision/models/regnet.py
    but it's not clear it is equivalent to paper model as not detailed in the paper.
    r·  rº   Frá  râ  s     rL   r·  r·  µ  ó   € ô ˜-¨ÑTÀEÐTÈVÑTÐTrK   c                 ó    — t        d| fddi|¤ŽS )úÛRegNetZ-4.0GF
    NOTE: config found in https://github.com/facebookresearch/ClassyVision/blob/main/classy_vision/models/regnet.py
    but it's not clear it is equivalent to paper model as not detailed in the paper.
    r¸  rº   Frá  râ  s     rL   r¸  r¸  ¾  r  rK   c                 ó    — t        d| fddi|¤ŽS )r	  rº  rº   Frá  râ  s     rL   rº  rº  Ç  s   € ô ˜/¨:ÑVÀeÐVÈvÑVÐVrK   Úregnetz_040h)r3   )r`   )r   r   r   NFNN)r�   NFNN)r—   FrJ   )r—   rG  )mrD   rk   Údataclassesr   r   Ú	functoolsr   Útypingr   r   r   r	   r
   r   r   r   rg   Útorch.nnr„   Ú	timm.datar   r   Útimm.layersr   r   r   r   r   r   r   r   r   r   r   Ú_builderr   Ú	_featuresr   Ú_manipulater   r    Ú	_registryr!   r"   r#   Ú__all__r%   rG   rE   rR   r_   rz   rÄ   rI   r‡   rŽ   r“   rH   rš   rœ   rÉ   rÒ   r$   rü   rx  r˜   rÀ  rÁ  rÔ  rÙ  rÛ  Údefault_cfgsry  r{  r}  r~  r€  r‚  r„  r‡  r‹  rŽ  r�  r”  r—  r™  rš  r›  r�  rŸ  r   r¢  r£  r¥  r§  r©  rª  r«  r­  r°  r±  r²  r³  rµ  r¶  r·  r¸  rº  rA   rJ   rK   rL   ú<module>r     sŸ  ðñó2 ß *Ý ß J× JÓ Jã Ý ç Aß × Ñ ß XÓ XÝ *Ý +ß 4ß YÑ Yà�[Ð
!€ð ÷3ð 3ó ð3ð&
!�eð 
! ð 
!¨ó 
!ð" ò	Ø�S‘	ðà˜E‘{ðð �S‘	ðð ð	ð
 ˆ4�‰9�d˜3‘iÐÑ óðD ò>Øð>àð>ð ð>ð ð	>ð
 ð>ð ð>ð ˆ4�‰9�c˜4 ™9Ð$Ñ%ó>ðH ØØØ04ØØØò0
Øð0
àð0
ð ð0
ð ð	0
ð
 ð0
ð ˜T "§)¡)™_Ñ-ð0
ð ð0
ð ‡Y�Yó0
ðl ØØØ04ØØØò&(Øð&(àð&(ð ð&(ð ð	&(ð
 ð&(ð ˜T "§)¡)™_Ñ-ð&(ð ð&(ð ‡]�]ó&(ð^ %+Ø04ØØØò&Ø! #™ð&àð&ð ð&ð ð	&ð
 ð&ð ˜˜S˜‘/ð&ð ˜T "§)¡)™_Ñ-ð&ð ð&ð ˆb�i‰iÑó&ôRg�—‘ô gôTg�B—I‘Iô gôTBˆr�y‰yô BôJhˆR�Y‰Yô hòV	 ˜"Ÿ)™)ð  ¨3ð  ÀTð  ÐVZó  ð,>˜4  S ™>ð >¨d°3¸°8©nó >ñD ó =á˜R E¨d¸qÈÕKð=ñ ˜R E¨d¸rÈÕLð=ñ   u°À"ÈBÐ`cÕdð	=ñ
 ˜R E¨d¸rÈÕLð=ñ ˜R E¨d¸rÈÕLð=ñ ˜R E¨d¸rÈÕLð=ñ ˜R E¨d¸rÈÕLð=ñ ˜R E¨d¸rÈÕLð=ñ ˜S U¨tÀÈ"ÕMð=ñ ˜R E¨d¸sÈ"ÕMð=ñ ˜S U¨tÀÈ2ÕNð=ñ ˜S U¨s¸sÈ"ÕMð=ñ ˜S U¨s¸sÈ"ÕMð=ñ" ˜R E¨d¸qÈÐUYÕZð#=ñ$ ˜R E¨d¸qÈÐUYÕZð%=ñ& ˜R E¨d¸rÈÐVZÕ[ð'=ñ( ˜R E¨c¸bÈÐUYÕZð)=ñ*   u°ÀÈ2ÐX\ÐnqÕrð+=ñ, ˜R E¨d¸rÈÐVZÕ[ð-=ñ. ˜R E¨d¸rÈÐVZÕ[ð/=ñ0 ˜R E¨d¸rÈÐVZÕ[ð1=ñ2 ˜S U¨tÀÈ"ÐW[Õ\ð3=ñ4 ˜S U¨tÀÈ"ÐW[Õ\ð5=ñ6  ¨°$À2ÈRÐZ^ÐpsÕtð7=ñ8 ˜S U¨tÀÈ2ÐX\Õ]ð9=ñ: ˜S V°ÀÈBÐY]Õ^ð;=ñ< ˜S V°ÀÈBÐY]Õ^ð==ñ> ˜S V°ÀÈ2ÐX\Õ]ð?=ñ@ ˜c f°À#ÈRÐZ^Õ_ðA=ñB ˜c f°À#ÈRÐZ^Õ_ðC=ñJ Ø�%˜D¨R°rÀDØ¡W¨\ÀbÔ%IõKðK=ñT Ø�R˜E d°rÀDÐQUÐagõiðU=ñX Ø�S˜U t¸ÀTÐRVÐbhØõðY=ñb Ø�R˜D T°aÀcÐTXØ D°tÀvõðc=ñj Ø�R˜D U°qÀsÐUYØ D°qÀFõðk=ñr Ø�R˜D U°qÀsÐUYØ D°tÀvõðs=€
ð@˜Cð ¨Tð Àó ò$ˆcð  T¨#¨s¨(¡^ó ò&�ð ¨¨S°#¨X©ó ò&�ð ¨¨S°#¨X©ó ñ& %ð u&à™4ØØ|ô~ðu&ð
 ™DØð BôCðu&ð ™DØð BôCðu&ð ™DØð BôCðu&ð #¡D°7Ô$;ðu&ð #¡D°7Ô$;ðu&ð  %¡d°WÔ&=ð!u&ð& ™DØØôð'u&ð, ™DØØôð-u&ð6  ¡¨"¤ð7u&ð8 ™DØð BØôð9u&ð@ ™DØð BØôðAu&ðJ ™T bœ\ðKu&ðL ™DØð BØ ¨F¸SÐR_ôaðMu&ðT ™dØð CØ ¨F¸SÐR_ôaðUu&ð` ™TØÐ]ô_ðau&ðf ™wØØMô Oñgu&ðl ™GØØMôOðmu&ðr ™GØØMôOðsu&ðx ™GØØMôOðyu&ð~ ™GØÙKôMðu&ñD ™GØÙLôNðEu&ñJ ™GØÙLôNðKu&ñR ™GØÙMôOðSu&ñX ™wØÙMô OðYu&ñ^ ™GØÙMôOð_u&ñd ™GØÙMôOðeu&ñj ™wØÙKô Mðku&ñp ™GØÙLôNðqu&ñv ™GØÙLôNðwu&ñ~ ¡ØÙQÑ[iÙ ©H¸sõ!Dðu&ñF ¡ØÙQÑ[iÙ ©H¸sõ!DðGu&ñN  ¡ØÙRÑ\jÙ ©H¸sõ"DðOu&ñX ¡ØÙTÑ^lõ!nòYu&ñ^ ¡ØÙTÑ^lõ!nð_u&ñd  ¡ØÙUÑ_mõ"oðeu&ñl ¡ØÙÑ+Vñ NÙ ©H¸sõ	!Dðmu&ñv ¡ØÙÑ+Vñ NÙ ©H¸sõ	!Dðwu&ñ@  ¡ØÙÑ+Vñ OÙ ©H¸sõ	"DðAu&ñJ  ¡ØÙÑ+Vñ OÙ ©H¸sõ	"DðKu&ñV ™ØÙwØ™~Ñ:eõgðWu&ñ^ ™ØÙ~Ø™~Ñ:eõgð_u&ñf ™Øñ qØ™~Ñ:eõgðgu&ñx ™g°Ô8ðyu&ñz ™g°Ô8ð{u&ñ| ™g°Ô8ð}u&ñ~ ™g°Ô8ðu&ñ@ ™g°Ô8ðAu&ñB ™g°Ô8ðCu&ñD ™g°Ô8ðEu&ñF ™g°Ô8òGu&ñH ™g°Ô8ðIu&ñJ ™g°Ô8ðKu&ñL ™g°Ô8ðMu&ñN ™g°Ô8ðOu&ñR ™g°Ô8ðSu&ñT ™g°Ô8ðUu&ñV ™g°Ô8ðWu&ñX ™g°Ô8ðYu&ñZ ™g°Ô8ð[u&ñ\ ™g°Ô8ð]u&ñ^ ™g°Ô8ð_u&ñ` ™g°Ô8ðau&ñb ™g°Ô8ðcu&ñd ™g°Ô8ðeu&ñf ™g°Ô8ðgu&ñh ™g°Ô8ñiu&ó u€ðp ò?˜Dð ?°vó ?ó ð?ð
 ò?˜Dð ?°vó ?ó ð?ð
 òB˜tð B¸&ó Bó ðBð
 ò?˜Dð ?°vó ?ó ð?ð
 ò?˜Dð ?°vó ?ó ð?ð
 ò?˜Dð ?°vó ?ó ð?ð
 ò?˜Dð ?°vó ?ó ð?ð
 ò?˜Dð ?°vó ?ó ð?ð
 ò?˜Dð ?°vó ?ó ð?ð
 ò?˜Dð ?°vó ?ó ð?ð
 ò?˜Dð ?°vó ?ó ð?ð
 ò?˜Dð ?°vó ?ó ð?ð
 ò?˜Dð ?°vó ?ó ð?ð
 ò?˜Dð ?°vó ?ó ð?ð
 ò?˜Dð ?°vó ?ó ð?ð
 ò?˜Dð ?°vó ?ó ð?ð
 ò?˜Dð ?°vó ?ó ð?ð
 òB˜tð B¸&ó Bó ðBð
 ò?˜Dð ?°vó ?ó ð?ð
 ò?˜Dð ?°vó ?ó ð?ð
 ò?˜Dð ?°vó ?ó ð?ð
 ò?˜Dð ?°vó ?ó ð?ð
 ò?˜Dð ?°vó ?ó ð?ð
 òB˜tð B¸&ó Bó ðBð
 ò?˜Dð ?°vó ?ó ð?ð
 ò?˜Dð ?°vó ?ó ð?ð
 ò?˜Dð ?°vó ?ó ð?ð
 ò?˜Dð ?°vó ?ó ð?ð
 ò@˜Tð @¸ó @ó ð@ð
 ò@˜Tð @¸ó @ó ð@ð
 òC ð C¸6ó Có ðCð
 ò?˜Dð ?°vó ?ó ð?ð
 ò?˜Dð ?°vó ?ó ð?ð
 òU˜Dð U°vó Uó ðUð òU˜Dð U°vó Uó ðUð òW˜dð W¸ó Wó ðWñ ˜HÙ�Oð'õ rK   