
    h;                        S SK Jr  S SKJr  S SKJrJrJr  S SKrS SKJ	r	J
r
  S SKJr  SSKJrJr  SS	KJr  SS
KJr  SSKJr  SSKJrJrJr  SSKJr  SSKJrJr  / SQr  " S S\	RB                  5      r" " S S\	RF                  5      r$ " S S5      r% " S S\	RF                  5      r&S\'\%   S\(S\\   S\)S\S\&4S jr*S \S!S"S#.r+ " S$ S%\5      r, " S& S'\5      r- " S( S)\5      r. " S* S+\5      r/\" 5       \" S,\,R`                  4S-9SS.S/.S\\,   S\)S\S\&4S0 jj5       5       r1\" 5       \" S,\-R`                  4S-9SS.S/.S\\-   S\)S\S\&4S1 jj5       5       r2\" 5       \" S,\.R`                  4S-9SS.S/.S\\.   S\)S\S\&4S2 jj5       5       r3\" 5       \" S,\/R`                  4S-9SS.S/.S\\/   S\)S\S\&4S3 jj5       5       r4g)4    )Sequence)partial)AnyCallableOptionalN)nnTensor)
functional   )Conv2dNormActivationPermute)StochasticDepth)ImageClassification)_log_api_usage_once   )register_modelWeightsWeightsEnum)_IMAGENET_CATEGORIES)_ovewrite_named_paramhandle_legacy_interface)	ConvNeXtConvNeXt_Tiny_WeightsConvNeXt_Small_WeightsConvNeXt_Base_WeightsConvNeXt_Large_Weightsconvnext_tinyconvnext_smallconvnext_baseconvnext_largec                   &    \ rS rSrS\S\4S jrSrg)LayerNorm2d   xreturnc                     UR                  SSSS5      n[        R                  " XR                  U R                  U R
                  U R                  5      nUR                  SSSS5      nU$ )Nr   r      r   )permuteF
layer_normnormalized_shapeweightbiasepsselfr$   s     S/var/www/auris/envauris/lib/python3.13/site-packages/torchvision/models/convnext.pyforwardLayerNorm2d.forward    sU    IIaAq!LL114;;		488TIIaAq!     N)__name__
__module____qualname____firstlineno__r	   r2   __static_attributes__r5   r4   r1   r"   r"      s     F r4   r"   c            
       x   ^  \ rS rSr SS\S\S\\S\R                  4      SS4U 4S jjjr	S	\
S\
4S
 jrSrU =r$ )CNBlock'   Nlayer_scalestochastic_depth_prob
norm_layer.r%   c                 
  > [         TU ]  5         Uc  [        [        R                  SS9n[        R
                  " [        R                  " XSSUSS9[        / SQ5      U" U5      [        R                  " USU-  SS	9[        R                  " 5       [        R                  " SU-  USS	9[        / S
Q5      5      U l
        [        R                  " [        R                  " USS5      U-  5      U l        [        US5      U l        g )Nư>r.      r'   T)kernel_sizepaddinggroupsr-   )r   r   r'   r      )in_featuresout_featuresr-   )r   r'   r   r   r   row)super__init__r   r   	LayerNorm
SequentialConv2dr   LinearGELUblock	Parametertorchonesr>   r   stochastic_depth)r0   dimr>   r?   r@   	__class__s        r1   rM   CNBlock.__init__(   s     	 48J]]IIcAq4PL!sOII#AG$GGGIII!c'$GL!

 <<

31(=(KL /0Eu Mr4   inputc                 l    U R                   U R                  U5      -  nU R                  U5      nX!-  nU$ N)r>   rS   rW   )r0   r[   results      r1   r2   CNBlock.forward?   s7    !!DJJu$55&&v.r4   )rS   r>   rW   r]   )r6   r7   r8   r9   floatr   r   r   ModulerM   r	   r2   r:   __classcell__rY   s   @r1   r<   r<   '   sj     :>N N  %	N
 Xc299n56N 
N N.V   r4   r<   c                   B    \ rS rSrS\S\\   S\SS4S jrS\4S jrS	r	g)
CNBlockConfigF   input_channelsout_channels
num_layersr%   Nc                 (    Xl         X l        X0l        g r]   )rg   rh   ri   )r0   rg   rh   ri   s       r1   rM   CNBlockConfig.__init__H   s     -($r4   c                     U R                   R                  S-   nUS-  nUS-  nUS-  nUS-  nUR                  " S0 U R                  D6$ )N(zinput_channels={input_channels}z, out_channels={out_channels}z, num_layers={num_layers})r5   )rY   r6   format__dict__)r0   ss     r1   __repr__CNBlockConfig.__repr__R   sV    NN##c)	..	,,	((	Sxx($--((r4   )rg   ri   rh   )
r6   r7   r8   r9   intr   rM   strrr   r:   r5   r4   r1   re   re   F   s=    %% sm% 	%
 
%)# )r4   re   c                      ^  \ rS rSr     SS\\   S\S\S\S\\	S\
R                  4      S	\\	S\
R                  4      S
\SS4U 4S jjjrS\S\4S jrS\S\4S jrSrU =r$ )r   [   Nblock_settingr?   r>   num_classesrS   .r@   kwargsr%   c                 4  > [         TU ]  5         [        U 5        U(       d  [        S5      e[	        U[
        5      (       a/  [        U Vs/ s H  n[	        U[        5      PM     sn5      (       d  [        S5      eUc  [        nUc  [        [        SS9n/ n	US   R                  n
U	R                  [        SU
SSSUS SS	95        [        S
 U 5       5      nSnU H  n/ n[!        UR"                  5       H5  nX,-  US-
  -  nUR                  U" UR                  UU5      5        US-  nM7     U	R                  [$        R&                  " U6 5        UR(                  c  M  U	R                  [$        R&                  " U" UR                  5      [$        R*                  " UR                  UR(                  SSS95      5        M     [$        R&                  " U	6 U l        [$        R.                  " S5      U l        US   nUR(                  b  UR(                  OUR                  n[$        R&                  " U" U5      [$        R2                  " S5      [$        R4                  " UU5      5      U l        U R9                  5        H  n[	        U[$        R*                  [$        R4                  45      (       d  M4  [$        R:                  R=                  UR>                  SS9  UR@                  c  Mk  [$        R:                  RC                  UR@                  5        M     g s  snf )Nz%The block_setting should not be emptyz/The block_setting should be List[CNBlockConfig]rB   rC   r   r'   rH   T)rE   striderF   r@   activation_layerr-   c              3   8   #    U  H  oR                   v   M     g 7fr]   )ri   ).0cnfs     r1   	<genexpr>$ConvNeXt.__init__.<locals>.<genexpr>   s      I=C=s   g      ?r   r   )rE   r|   g{Gz?)std)"rL   rM   r   
ValueError
isinstancer   allre   	TypeErrorr<   r   r"   rg   appendr   sumrangeri   r   rO   rh   rP   featuresAdaptiveAvgPool2davgpoolFlattenrQ   
classifiermodulesinittrunc_normal_r,   r-   zeros_)r0   rx   r?   r>   ry   rS   r@   rz   rq   layersfirstconv_output_channelstotal_stage_blocksstage_block_idr   stage_sd_prob	lastblocklastconv_output_channelsmrY   s                       r1   rM   ConvNeXt.__init__\   s    	D!DEE]H55#er>ser`az!]?[er>s:t:tMNN=E $7J"$ %2!$4$C$C! )%!%		
 ! I= II C%'E3>>*/@DVY\D\]U3#5#5{GLM!#	 +
 MM"--/0+MM"3#5#56		#"4"4c6F6FTU^_` !$ v.++A.!"%	&/&<&<&HI""iNfNf 	! --/0"**Q-KcepAq
 A!bii344%%ahhD%966%GGNN166*	  s ?ts   Lr$   c                 l    U R                  U5      nU R                  U5      nU R                  U5      nU$ r]   )r   r   r   r/   s     r1   _forward_implConvNeXt._forward_impl   s0    MM!LLOOOAr4   c                 $    U R                  U5      $ r]   )r   r/   s     r1   r2   ConvNeXt.forward   s    !!!$$r4   )r   r   r   )g        rB   i  NN)r6   r7   r8   r9   listre   r`   rt   r   r   r   ra   r   rM   r	   r   r2   r:   rb   rc   s   @r1   r   r   [   s     (+!489=L+M*L+  %L+ 	L+
 L+ bii01L+ Xc299n56L+ L+ 
L+ L+\v & % %F % %r4   r   rx   r?   weightsprogressrz   r%   c                     Ub#  [        US[        UR                  S   5      5        [        U 4SU0UD6nUb  UR	                  UR                  USS95        U$ )Nry   
categoriesr?   T)r   
check_hash)r   lenmetar   load_state_dictget_state_dict)rx   r?   r   r   rz   models         r1   	_convnextr      sd     fmSl9S5TU]Z:OZSYZEg44hSW4XYLr4   )    r   zNhttps://github.com/pytorch/vision/tree/main/references/classification#convnexta  
        These weights improve upon the results of the original paper by using a modified version of TorchVision's
        `new training recipe
        <https://pytorch.org/blog/how-to-train-state-of-the-art-models-using-torchvision-latest-primitives/>`_.
    )min_sizer   recipe_docsc            
       P    \ rS rSr\" S\" \SSS90 \ESSSS	S
.0SSS.ES9r\r	Sr
g)r      z>https://download.pytorch.org/models/convnext_tiny-983f1562.pth      	crop_sizeresize_sizeiH<ImageNet-1KgzGT@gMbX	X@zacc@1zacc@5gm@gV-G[@
num_params_metrics_ops
_file_sizeurl
transformsr   r5   Nr6   r7   r8   r9   r   r   r   _COMMON_METAIMAGENET1K_V1DEFAULTr:   r5   r4   r1   r   r      sS    L.#3O

"##  !
M  Gr4   r   c            
       P    \ rS rSr\" S\" \SSS90 \ESSSSS	.0S
SS.ES9r\r	Sr
g)r      z?https://download.pytorch.org/models/convnext_small-0c510722.pthr   r   iHZr   gClT@g)X@r   g|?5^!@g"~g@r   r   r5   Nr   r5   r4   r1   r   r      sS    M.#3O

"##  !
M  Gr4   r   c            
       P    \ rS rSr\" S\" \SSS90 \ESSSS	S
.0SSS.ES9r\r	Sr
g)r      z>https://download.pytorch.org/models/convnext_base-6075fbad.pthr      r   ihGr   gU@gHz7X@r   g(\µ.@g/$!u@r   r   r5   Nr   r5   r4   r1   r   r      sS    L.#3O

"##  !
M  Gr4   r   c            
       P    \ rS rSr\" S\" \SSS90 \ESSSS	S
.0SSS.ES9r\r	Sr
g)r   i  z?https://download.pytorch.org/models/convnext_large-ea097f82.pthr   r   r   ir   g"~U@gX9v>X@r   g|?5.A@gK@r   r   r5   Nr   r5   r4   r1   r   r     sS    M.#3O

###  !
M  Gr4   r   
pretrained)r   T)r   r   c                     [         R                  U 5      n [        SSS5      [        SSS5      [        SSS5      [        SSS5      /nUR                  SS	5      n[	        X4X40 UD6$ )
aM  ConvNeXt Tiny model architecture from the
`A ConvNet for the 2020s <https://arxiv.org/abs/2201.03545>`_ paper.

Args:
    weights (:class:`~torchvision.models.convnext.ConvNeXt_Tiny_Weights`, optional): The pretrained
        weights to use. See :class:`~torchvision.models.convnext.ConvNeXt_Tiny_Weights`
        below for more details and possible values. By default, no pre-trained weights are used.
    progress (bool, optional): If True, displays a progress bar of the download to stderr. Default is True.
    **kwargs: parameters passed to the ``torchvision.models.convnext.ConvNext``
        base class. Please refer to the `source code
        <https://github.com/pytorch/vision/blob/main/torchvision/models/convnext.py>`_
        for more details about this class.

.. autoclass:: torchvision.models.ConvNeXt_Tiny_Weights
    :members:
`      r'        	   Nr?   g?)r   verifyre   popr   r   r   rz   rx   r?   s        r1   r   r   "  st    & $**73G 	b#q!c3"c3"c4#	M #JJ'>D]7WPVWWr4   c                     [         R                  U 5      n [        SSS5      [        SSS5      [        SSS5      [        SSS5      /nUR                  SS	5      n[	        X4X40 UD6$ )
aQ  ConvNeXt Small model architecture from the
`A ConvNet for the 2020s <https://arxiv.org/abs/2201.03545>`_ paper.

Args:
    weights (:class:`~torchvision.models.convnext.ConvNeXt_Small_Weights`, optional): The pretrained
        weights to use. See :class:`~torchvision.models.convnext.ConvNeXt_Small_Weights`
        below for more details and possible values. By default, no pre-trained weights are used.
    progress (bool, optional): If True, displays a progress bar of the download to stderr. Default is True.
    **kwargs: parameters passed to the ``torchvision.models.convnext.ConvNext``
        base class. Please refer to the `source code
        <https://github.com/pytorch/vision/blob/main/torchvision/models/convnext.py>`_
        for more details about this class.

.. autoclass:: torchvision.models.ConvNeXt_Small_Weights
    :members:
r   r   r'   r   r      Nr?   g?)r   r   re   r   r   r   s        r1   r   r   A  st    * %++G4G 	b#q!c3"c3#c4#	M #JJ'>D]7WPVWWr4   c                     [         R                  U 5      n [        SSS5      [        SSS5      [        SSS5      [        SSS5      /nUR                  SS	5      n[	        X4X40 UD6$ )
aM  ConvNeXt Base model architecture from the
`A ConvNet for the 2020s <https://arxiv.org/abs/2201.03545>`_ paper.

Args:
    weights (:class:`~torchvision.models.convnext.ConvNeXt_Base_Weights`, optional): The pretrained
        weights to use. See :class:`~torchvision.models.convnext.ConvNeXt_Base_Weights`
        below for more details and possible values. By default, no pre-trained weights are used.
    progress (bool, optional): If True, displays a progress bar of the download to stderr. Default is True.
    **kwargs: parameters passed to the ``torchvision.models.convnext.ConvNext``
        base class. Please refer to the `source code
        <https://github.com/pytorch/vision/blob/main/torchvision/models/convnext.py>`_
        for more details about this class.

.. autoclass:: torchvision.models.ConvNeXt_Base_Weights
    :members:
      r'   i   i   r   Nr?         ?)r   r   re   r   r   r   s        r1   r   r   b  st    & $**73G 	c3"c3"c4$dD!$	M #JJ'>D]7WPVWWr4   c                     [         R                  U 5      n [        SSS5      [        SSS5      [        SSS5      [        SSS5      /nUR                  SS	5      n[	        X4X40 UD6$ )
aQ  ConvNeXt Large model architecture from the
`A ConvNet for the 2020s <https://arxiv.org/abs/2201.03545>`_ paper.

Args:
    weights (:class:`~torchvision.models.convnext.ConvNeXt_Large_Weights`, optional): The pretrained
        weights to use. See :class:`~torchvision.models.convnext.ConvNeXt_Large_Weights`
        below for more details and possible values. By default, no pre-trained weights are used.
    progress (bool, optional): If True, displays a progress bar of the download to stderr. Default is True.
    **kwargs: parameters passed to the ``torchvision.models.convnext.ConvNext``
        base class. Please refer to the `source code
        <https://github.com/pytorch/vision/blob/main/torchvision/models/convnext.py>`_
        for more details about this class.

.. autoclass:: torchvision.models.ConvNeXt_Large_Weights
    :members:
r   r   r'   r   i   r   Nr?   r   )r   r   re   r   r   r   s        r1   r    r      st    * %++G4G 	c3"c3"c4$dD!$	M #JJ'>D]7WPVWWr4   )5collections.abcr   	functoolsr   typingr   r   r   rU   r   r	   torch.nnr
   r)   ops.miscr   r   ops.stochastic_depthr   transforms._presetsr   utilsr   _apir   r   r   _metar   _utilsr   r   __all__rN   r"   ra   r<   re   r   r   r`   boolr   r   r   r   r   r   r   r   r   r   r    r5   r4   r1   <module>r      s   $  * *   $ 4 2 5 ' 6 6 ' B
",, bii >) )*V%ryy V%r&  k" 	
  & &^		K ([ (K ([ ( ,0E0S0S!TU@DW[ Xh'<= XPT Xgj Xow X V X: ,0F0T0T!UV37$X/0XCGXZ]XX W X> ,0E0S0S!TU@DW[ Xh'<= XPT Xgj Xow X V X: ,0F0T0T!UV37$X/0XCGXZ]XX W Xr4   