ó
    Eñió;  ã                   ó†  • 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     ÚX/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torchvision/models/convnext.pyÚforwardÚLayerNorm2d.forward    sU   € Ø�I‰I�a˜˜A˜qÓ!ˆÜ�LŠL˜×1Ñ1°4·;±;ÀÇ	Á	È4Ï8É8ÓTˆØ�I‰I�a˜˜A˜qÓ!ˆØˆó    © 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Ñ8ˆJä—]’]Ü�IŠI�c¨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ˆÕ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   € Ø×!Ñ! D§J¡J¨uÓ$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ð
 ˜X c¨2¯9©9 nÑ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)
ÚCNBlockConfigéF   Ú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   € Ø�N‰N×#Ñ# cÑ)ˆØ	Ð.Ñ.ˆØ	Ð,Ñ,ˆØ	Ð(Ñ(ˆØ	ˆS‰ˆØ�xŠxÑ(˜$Ÿ-™-Ñ(Ð(r4   )rg   ri   rh   )
r6   r7   r8   r9   Úintr   rM   Ústrrr   r:   r5   r4   r1   re   re   F   s=   † ð%àð%ð ˜s‘mð%ð ð	%ð
 
ô%ð)˜#÷ )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{®Gáz”?)Ú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Ó>sÒerÐ`a¼zÈ!Ì]Ö?[ÑerÑ>s×:tÑ: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Ó4Ü—‘×%Ñ% a§h¡h°DÐ%Ñ9Ø—6‘6Ó%Ü—G‘G—N‘N 1§6¡6Ö*ò	  ùò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   € Ø�M‰M˜!ÓˆØ�L‰L˜‹OˆØ�O‰O˜AÓˆØˆ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Ë   ø† ð (+Ø!ØØ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+ð 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   € ð ÑÜ˜f m´S¸¿¹ÀlÑ9SÓ5TÔUä�]ÑZÐ:OÐZÐSYÑZ€EàÑØ×Ñ˜g×4Ñ4¸hÐSWÐ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-1Kgáz®G¡T@gÓMb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¼   g�•C‹lçT@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¹   ihÌGr¼   g‡ÙÎ÷U@gHáz®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@gX9´Èv>X@r½   g‘í|?5.A@gžï§ÆK”‡@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Ó3€Gô 	�b˜#˜qÓ!Ü�c˜3 Ó"Ü�c˜3 Ó"Ü�c˜4 Ó#ð	€Mð #ŸJ™JÐ'>ÀÓDÐÜ�]¸7ÑWÐPVÑ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Ó4€Gô 	�b˜#˜qÓ!Ü�c˜3 Ó"Ü�c˜3 Ó#Ü�c˜4 Ó#ð	€Mð #ŸJ™JÐ'>ÀÓDÐÜ�]¸7ÑWÐPVÑ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Ó3€Gô 	�c˜3 Ó"Ü�c˜3 Ó"Ü�c˜4 Ó$Ü�d˜D !Ó$ð	€Mð #ŸJ™JÐ'>ÀÓDÐÜ�]¸7ÑWÐPVÑ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Ó4€Gô 	�c˜3 Ó"Ü�c˜3 Ó"Ü�c˜4 Ó$Ü�d˜D !Ó$ð	€Mð #ŸJ™JÐ'>ÀÓDÐÜ�]¸7ÑWÐPVÑ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ò
€ô�"—,‘,ô ôˆ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r4   