Ë
    þÍ:jó;  ã                   óŒ  — d dl mZ d dlmZ d dlmZmZmZ d dlZd dlm	Z	m
Z
 d dlmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZmZmZ ddlmZ ddlmZmZ g d¢Z  G d„ de	jB                  «      Z" G d„ de	jF                  «      Z$ G d„ d«      Z% G d„ de	jF                  «      Z&de'e%   de(dee   de)dede&fd„Z*d ed!d"d#œZ+ G d$„ d%e«      Z, G d&„ d'e«      Z- G d(„ d)e«      Z. G d*„ d+e«      Z/ e«        ed,e,j`                  f¬-«      dd.d/œdee,   de)dede&fd0„«       «       Z1 e«        ed,e-j`                  f¬-«      dd.d/œdee-   de)dede&fd1„«       «       Z2 e«        ed,e.j`                  f¬-«      dd.d/œdee.   de)dede&fd2„«       «       Z3 e«        ed,e/j`                  f¬-«      dd.d/œdee/   de)dede&fd3„«       «       Z4y)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                   ó   — e Zd Zdedefd„Zy)ÚLayerNorm2dÚxÚreturnc                 óØ   — |j                  dddd«      }t        j                  || j                  | j                  | j
                  | j                  «      }|j                  dddd«      }|S )Nr   r   é   r   )ÚpermuteÚFÚ
layer_normÚnormalized_shapeÚweightÚbiasÚeps©Úselfr#   s     úp/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/torchvision/models/convnext.pyÚforwardzLayerNorm2d.forward    sW   € Ø�I‰I�a˜˜A˜qÓ!ˆÜ�L‰L˜˜D×1Ñ1°4·;±;ÀÇ	Á	È4Ï8É8ÓTˆØ�I‰I�a˜˜A˜qÓ!ˆØˆó    N)Ú__name__Ú
__module__Ú__qualname__r	   r1   © r2   r0   r"   r"      s   „ ð˜ð  Fô r2   r"   c            
       óh   ‡ — e Zd Z	 d
dededeedej                  f      ddfˆ fd„Zde	de	fd	„Z
ˆ xZS )ÚCNBlockNÚlayer_scaleÚstochastic_depth_probÚ
norm_layer.r$   c                 ó  •— t         ‰| �  «        |€t        t        j                  d¬«      }t        j
                  t        j                  ||dd|d¬«      t        g d¢«       ||«      t        j                  |d|z  d¬	«      t        j                  «       t        j                  d|z  |d¬	«      t        g d
¢«      «      | _
        t        j                  t        j                  |dd«      |z  «      | _        t        |d«      | _        y )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Úonesr9   r   Ústochastic_depth)r/   Údimr9   r:   r;   Ú	__class__s        €r0   rH   zCNBlock.__init__(   sÉ   ø€ ô 	‰ÑÔØÐÜ ¤§¡°4Ô8ˆJä—]‘]Ü�I‰I�c˜3¨A°qÀÈ4ÔPÜ’LÓ!Ù�s‹OÜ�I‰I #°A¸±GÀ$ÔGÜ�G‰G‹IÜ�I‰I ! c¡'¸À$ÔGÜ’LÓ!ó
ˆŒ
ô Ÿ<™<¬¯
©
°3¸¸1Ó(=ÀÑ(KÓLˆÔÜ /Ð0EÀuÓ MˆÕr2   Úinputc                 ón   — | j                   | j                  |«      z  }| j                  |«      }||z  }|S ©N)r9   rN   rR   )r/   rU   Úresults      r0   r1   zCNBlock.forward?   s9   € Ø×!Ñ! D§J¡J¨uÓ$5Ñ5ˆØ×&Ñ& vÓ.ˆØ�%‰ˆØˆr2   rW   )r3   r4   r5   Úfloatr   r   r   ÚModulerH   r	   r1   Ú__classcell__©rT   s   @r0   r8   r8   '   s_   ø„ ð :>ñNð ðNð  %ð	Nð
 ˜X c¨2¯9©9 nÑ5Ñ6ðNð 
õNð.˜Vð ¨÷ r2   r8   c                   ó6   — e Zd Zdedee   deddfd„Zdefd„Zy)ÚCNBlockConfigÚinput_channelsÚout_channelsÚ
num_layersr$   Nc                 ó.   — || _         || _        || _        y rW   )r_   r`   ra   )r/   r_   r`   ra   s       r0   rH   zCNBlockConfig.__init__H   s   € ð -ˆÔØ(ˆÔØ$ˆ�r2   c                 ó”   — | j                   j                  dz   }|dz  }|dz  }|dz  }|dz  } |j                  di | j                  ¤ŽS )Nú(zinput_channels={input_channels}z, out_channels={out_channels}z, num_layers={num_layers}ú)r6   )rT   r3   ÚformatÚ__dict__)r/   Úss     r0   Ú__repr__zCNBlockConfig.__repr__R   sX   € Ø�N‰N×#Ñ# cÑ)ˆØ	Ð.Ñ.ˆØ	Ð,Ñ,ˆØ	Ð(Ñ(ˆØ	ˆS‰ˆØˆq�x‰xÑ(˜$Ÿ-™-Ñ(Ð(r2   )r3   r4   r5   Úintr   rH   Ústrri   r6   r2   r0   r^   r^   F   s=   „ ð%àð%ð ˜s‘mð%ð ð	%ð
 
ó%ð)˜#ô )r2   r^   c                   óº   ‡ — e Zd Z	 	 	 	 	 ddee   dedededeede	j                  f      deede	j                  f      d	ed
dfˆ fd„Zded
efd„Zded
efd„Zˆ xZS )r   NÚblock_settingr:   r9   Únum_classesrN   .r;   Úkwargsr$   c                 óô  •— t         ‰| �  «        t        | «       |st        d«      ‚t	        |t
        «      r't        |D �cg c]  }t	        |t        «      ‘Œ c}«      st        d«      ‚|€t        }|€t        t        d¬«      }g }	|d   j                  }
|	j                  t        d|
ddd|d d¬	«      «       t        d
„ |D «       «      }d}|D ]ß  }g }t!        |j"                  «      D ]5  }||z  |dz
  z  }|j                   ||j                  ||«      «       |dz  }Œ7 |	j                  t%        j&                  |Ž «       |j(                  €Œ€|	j                  t%        j&                   ||j                  «      t%        j*                  |j                  |j(                  dd¬«      «      «       Œá t%        j&                  |	Ž | _        t%        j.                  d«      | _        |d   }|j(                  �|j(                  n|j                  }t%        j&                   ||«      t%        j2                  d«      t%        j4                  ||«      «      | _        | j9                  «       D ]Ž  }t	        |t$        j*                  t$        j4                  f«      sŒ.t$        j:                  j=                  |j>                  d¬«       |j@                  €Œft$        j:                  jC                  |j@                  «       Œ� y c c}w )Nz%The block_setting should not be emptyz/The block_setting should be List[CNBlockConfig]r=   r>   r   r&   rC   T)r@   ÚstriderA   r;   Úactivation_layerr,   c              3   ó4   K  — | ]  }|j                   –— Œ y ­wrW   )ra   )Ú.0Úcnfs     r0   ú	<genexpr>z$ConvNeXt.__init__.<locals>.<genexpr>…   s   è ø€ Ò I°C §¥Ñ Iùs   ‚g      ð?r   r   )r@   rq   éÿÿÿÿg{®Gáz”?)Ústd)"rG   rH   r   Ú
ValueErrorÚ
isinstancer   Úallr^   Ú	TypeErrorr8   r   r"   r_   Úappendr   ÚsumÚrangera   r   rJ   r`   rK   ÚfeaturesÚAdaptiveAvgPool2dÚavgpoolÚFlattenrL   Ú
classifierÚmodulesÚinitÚtrunc_normal_r+   r,   Úzeros_)r/   rm   r:   r9   rn   rN   r;   ro   rh   ÚlayersÚfirstconv_output_channelsÚtotal_stage_blocksÚstage_block_idru   ÚstageÚ_Úsd_probÚ	lastblockÚlastconv_output_channelsÚmrT   s                       €r0   rH   zConvNeXt.__init__\   s‘  ø€ ô 	‰ÑÔÜ˜DÔ!áÜÐDÓEÐEÜ˜]¬HÔ5¼#ÐerÖ>sÐ`a¼zÈ!Ì]Õ?[Ò>sÔ:tÜÐMÓNÐNàˆ=ÜˆEàÐÜ ¤°$Ô7ˆJà"$ˆð %2°!Ñ$4×$CÑ$CÐ!Ø�‰Ü ØØ)ØØØØ%Ø!%Øô	ô	
ô !Ñ I¸=Ô IÓIÐØˆØ ò 	ˆCà%'ˆEÜ˜3Ÿ>™>Ó*ò $�à/°.Ñ@ÐDVÐY\ÑD\Ñ]�Ø—‘™U 3×#5Ñ#5°{ÀGÓLÔMØ !Ñ#‘ð	$ð
 �M‰Mœ"Ÿ-™-¨Ð/Ô0Ø×ÑÑ+à—‘Ü—M‘MÙ" 3×#5Ñ#5Ó6ÜŸ	™	 #×"4Ñ"4°c×6FÑ6FÐTUÐ^_Ô`óõð	ô$ Ÿ™ vÐ.ˆŒÜ×+Ñ+¨AÓ.ˆŒà! "Ñ%ˆ	à&/×&<Ñ&<Ð&HˆI×"Ò"Èi×NfÑNfð 	!ô Ÿ-™-ÙÐ/Ó0´"·*±*¸Q³-ÄÇÁÐKcÐepÓAqó
ˆŒð —‘“ò 	+ˆAÜ˜!œbŸi™i¬¯©Ð3Õ4Ü—‘×%Ñ% a§h¡h°DÐ%Ô9Ø—6‘6Ñ%Ü—G‘G—N‘N 1§6¡6Õ*ñ		+ùòs ?ts   ÁK5r#   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S rW   )r€   r‚   r„   r.   s     r0   Ú_forward_implzConvNeXt._forward_implª   s0   € Ø�M‰M˜!ÓˆØ�L‰L˜‹OˆØ�O‰O˜AÓˆØˆr2   c                 ó$   — | j                  |«      S rW   )r”   r.   s     r0   r1   zConvNeXt.forward°   s   € Ø×!Ñ! !Ó$Ð$r2   )g        r=   iè  NN)r3   r4   r5   Úlistr^   rY   rj   r   r   r   rZ   r   rH   r	   r”   r1   r[   r\   s   @r0   r   r   [   sÀ   ø„ ð (+Ø!ØØ48Ø9=ñL+à˜MÑ*ðL+ð  %ðL+ð ð	L+ð
 ðL+ð ˜  b§i¡i Ñ0Ñ1ðL+ð ˜X c¨2¯9©9 nÑ5Ñ6ðL+ð ðL+ð 
õL+ð\˜vð ¨&ó ð%˜ð % F÷ %r2   r   rm   r:   ÚweightsÚprogressro   r$   c                 ó´   — |�#t        |dt        |j                  d   «      «       t        | fd|i|¤Ž}|�"|j	                  |j                  |d¬«      «       |S )Nrn   Ú
categoriesr:   T)r˜   Ú
check_hash)r   ÚlenÚmetar   Úload_state_dictÚget_state_dict)rm   r:   r—   r˜   ro   Úmodels         r0   Ú	_convnextr¡   ´   sd   € ð ÐÜ˜f m´S¸¿¹ÀlÑ9SÓ5TÔUä�]ÑZÐ:OÐZÐSYÑZ€EàÐØ×Ñ˜g×4Ñ4¸hÐSWÐ4ÓXÔYà€Lr2   )é    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            
       óT   — e Zd Z ed eedd¬«      i e¥ddddd	œid
ddœ¥¬«      ZeZy)r   z>https://download.pytorch.org/models/convnext_tiny-983f1562.pthéà   éì   ©Ú	crop_sizeÚresize_sizeiH<´úImageNet-1Kgáz®G¡T@gÓMbX	X@©zacc@1zacc@5gmçû©ñÒ@gV-²�G[@©Ú
num_paramsÚ_metricsÚ_opsÚ
_file_size©ÚurlÚ
transformsr�   N©	r3   r4   r5   r   r   r   Ú_COMMON_METAÚIMAGENET1K_V1ÚDEFAULTr6   r2   r0   r   r   Ò   sS   „ ÙØLÙÐ.¸#È3ÔOð
Øð
à"àØ#Ø#ñ ðð Ø!ò
ô€Mð  �Gr2   r   c            
       óT   — e Zd Z ed eedd¬«      i e¥ddddd	œid
ddœ¥¬«      ZeZy)r   z?https://download.pytorch.org/models/convnext_small-0c510722.pthr§   éæ   r©   iHZþr¬   g�•C‹lçT@gš™™™™)X@r­   g‘í|?5^!@gÑ"Ûù~ög@r®   r³   Nr¶   r6   r2   r0   r   r   æ   sS   „ ÙØMÙÐ.¸#È3ÔOð
Øð
à"àØ#Ø#ñ ðð Ø!ò
ô€Mð  �Gr2   r   c            
       óT   — e Zd Z ed eedd¬«      i e¥ddddd	œid
ddœ¥¬«      ZeZy)r   z>https://download.pytorch.org/models/convnext_base-6075fbad.pthr§   éè   r©   ihÌGr¬   g‡ÙÎ÷U@gHáz®7X@r­   gö(\�Âµ.@g/Ý$!u@r®   r³   Nr¶   r6   r2   r0   r   r   ú   sS   „ ÙØLÙÐ.¸#È3ÔOð
Øð
à"àØ#Ø#ñ ðð Ø!ò
ô€Mð  �Gr2   r   c            
       óT   — e Zd Z ed eedd¬«      i e¥ddddd	œid
ddœ¥¬«      ZeZy)r   z?https://download.pytorch.org/models/convnext_large-ea097f82.pthr§   r½   r©   i¨°Ér¬   gÑ"Ûù~U@gX9´Èv>X@r­   g‘í|?5.A@gžï§ÆK”‡@r®   r³   Nr¶   r6   r2   r0   r   r     sS   „ ÙØMÙÐ.¸#È3ÔOð
Øð
à#àØ#Ø#ñ ðð Ø!ò
ô€Mð  �Gr2   r   Ú
pretrained)r—   T)r—   r˜   c                 óÒ   — t         j                  | «      } t        ddd«      t        ddd«      t        ddd«      t        ddd«      g}|j                  dd	«      }t	        ||| |fi |¤ŽS )
a�  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   Úverifyr^   Úpopr¡   ©r—   r˜   ro   rm   r:   s        r0   r   r   "  sy   € ô& $×*Ñ*¨7Ó3€Gô 	�b˜#˜qÓ!Ü�c˜3 Ó"Ü�c˜3 Ó"Ü�c˜4 Ó#ð	€Mð #ŸJ™JÐ'>ÀÓDÐÜ�]Ð$9¸7ÀHÑWÐPVÑWÐWr2   c                 óÒ   — t         j                  | «      } t        ddd«      t        ddd«      t        ddd«      t        ddd«      g}|j                  dd	«      }t	        ||| |fi |¤ŽS )
a…  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Æ   r^   rÇ   r¡   rÈ   s        r0   r   r   A  sy   € ô* %×+Ñ+¨GÓ4€Gô 	�b˜#˜qÓ!Ü�c˜3 Ó"Ü�c˜3 Ó#Ü�c˜4 Ó#ð	€Mð #ŸJ™JÐ'>ÀÓDÐÜ�]Ð$9¸7ÀHÑWÐPVÑWÐWr2   c                 óÒ   — t         j                  | «      } t        ddd«      t        ddd«      t        ddd«      t        ddd«      g}|j                  dd	«      }t	        ||| |fi |¤ŽS )
a�  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Æ   r^   rÇ   r¡   rÈ   s        r0   r   r   b  sy   € ô& $×*Ñ*¨7Ó3€Gô 	�c˜3 Ó"Ü�c˜3 Ó"Ü�c˜4 Ó$Ü�d˜D !Ó$ð	€Mð #ŸJ™JÐ'>ÀÓDÐÜ�]Ð$9¸7ÀHÑWÐPVÑWÐWr2   c                 óÒ   — t         j                  | «      } t        ddd«      t        ddd«      t        ddd«      t        ddd«      g}|j                  dd	«      }t	        ||| |fi |¤ŽS )
a…  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Æ   r^   rÇ   r¡   rÈ   s        r0   r    r    �  sy   € ô* %×+Ñ+¨GÓ4€Gô 	�c˜3 Ó"Ü�c˜3 Ó"Ü�c˜4 Ó$Ü�d˜D !Ó$ð	€Mð #ŸJ™JÐ'>ÀÓDÐÜ�]Ð$9¸7ÀHÑWÐPVÑWÐWr2   )5Úcollections.abcr   Ú	functoolsr   Útypingr   r   r   rP   r   r	   Útorch.nnr
   r(   Úops.miscr   r   Úops.stochastic_depthr   Útransforms._presetsr   Úutilsr   Ú_apir   r   r   Ú_metar   Ú_utilsr   r   Ú__all__rI   r"   rZ   r8   r^   r   r–   rY   Úboolr¡   r·   r   r   r   r   r¸   r   r   r   r    r6   r2   r0   ú<module>rÝ      sŒ  ðÝ $Ý ß *Ñ *ã ß Ý $ç 4Ý 2Ý 5Ý 'ß 6Ñ 6Ý 'ß Bò
€ô�"—,‘,ô ôˆb�i‰iô ÷>)ñ )ô*V%ˆr�y‰yô V%ðrØ˜Ñ&ðà ðð �kÑ"ðð ð	ð
 ðð óð& Ø&Ø^ðñ		€ô˜Kô ô(˜[ô ô(˜Kô ô(˜[ô ñ( ÓÙ ,Ð0E×0SÑ0SÐ!TÔUØ@DÐW[ò X˜hÐ'<Ñ=ð XÐPTð XÐgjð XÐowò Xó Vó ðXñ: ÓÙ ,Ð0F×0TÑ0TÐ!UÔVà37È$òXØÐ/Ñ0ðXØCGðXØZ]ðXàòXó Wó ðXñ> ÓÙ ,Ð0E×0SÑ0SÐ!TÔUØ@DÐW[ò X˜hÐ'<Ñ=ð XÐPTð XÐgjð XÐowò Xó Vó ðXñ: ÓÙ ,Ð0F×0TÑ0TÐ!UÔVà37È$òXØÐ/Ñ0ðXØCGðXØZ]ðXàòXó Wó ñXr2   