ó
    EñiN<  ã                   ó&  • S SK Jr  S SKJrJrJr  S SKrS SK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\S\	4S jr " S S\R4                  5      r " S S\R4                  5      rS\\   S\S\S\S\4
S jrS\SS.r " S S\5      r  " S S \5      r! " S! S"\5      r" " S# S$\5      r#\" 5       \" S%\ RH                  4S&9SS'S(.S\\    S\S\S\4S) jj5       5       r%\" 5       \" S%\!RH                  4S&9SS'S(.S\\!   S\S\S\4S* jj5       5       r&\" 5       \" S%\"RH                  4S&9SS'S(.S\\"   S\S\S\4S+ jj5       5       r'\" 5       \" S%\#RH                  4S&9SS'S(.S\\#   S\S\S\4S, jj5       5       r(g)-é    )Úpartial)ÚAnyÚCallableÚOptionalN)ÚTensoré   )ÚImageClassification)Ú_log_api_usage_onceé   )Úregister_modelÚWeightsÚWeightsEnum)Ú_IMAGENET_CATEGORIES)Ú_ovewrite_named_paramÚhandle_legacy_interface)	ÚShuffleNetV2ÚShuffleNet_V2_X0_5_WeightsÚShuffleNet_V2_X1_0_WeightsÚShuffleNet_V2_X1_5_WeightsÚShuffleNet_V2_X2_0_WeightsÚshufflenet_v2_x0_5Úshufflenet_v2_x1_0Úshufflenet_v2_x1_5Úshufflenet_v2_x2_0ÚxÚgroupsÚreturnc                 óÊ   • U R                  5       u  p#pEX1-  nU R                  X!XdU5      n [        R                  " U SS5      R	                  5       n U R                  X#XE5      n U $ )Nr   r   )ÚsizeÚviewÚtorchÚ	transposeÚ
contiguous)r   r   Ú	batchsizeÚnum_channelsÚheightÚwidthÚchannels_per_groups          Ú\/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torchvision/models/shufflenetv2.pyÚchannel_shuffler*      sb   € Ø-.¯V©V«XÑ*€I˜VØ%Ñ/Ðð 	
�‰ˆyÐ"4¸eÓD€Aä�Š˜˜1˜aÓ ×+Ñ+Ó-€Að 	
�‰ˆy¨Ó6€Aà€Hó    c                   ó˜   ^ • \ rS rSrS\S\S\SS4U 4S jjr\ SS\S	\S
\S\S\S\S\R                  4S jj5       r
S\S\4S jrSrU =r$ )ÚInvertedResidualé+   ÚinpÚoupÚstrider   Nc                 óä  >• [         TU ]  5         SUs=::  a  S::  d  O  [        S5      eX0l        US-  nU R                  S:X  a  XS-  :w  a  [        SU SU SU S35      eU R                  S:”  aŠ  [        R
                  " U R                  XSU R                  SS	9[        R                  " U5      [        R                  " XSSS
SS9[        R                  " U5      [        R                  " SS95      U l
        O[        R
                  " 5       U l
        [        R
                  " [        R                  " U R                  S:”  a  UOUUSSS
SS9[        R                  " U5      [        R                  " SS9U R                  XDSU R                  SS	9[        R                  " U5      [        R                  " XDSSS
SS9[        R                  " U5      [        R                  " SS95      U l        g )Nr   é   zillegal stride valuer   zInvalid combination of stride z, inp z	 and oup zB values. If stride == 1 then inp should be equal to oup // 2 << 1.©Úkernel_sizer1   Úpaddingr   F)r5   r1   r6   ÚbiasT©Úinplace)ÚsuperÚ__init__Ú
ValueErrorr1   ÚnnÚ
SequentialÚdepthwise_convÚBatchNorm2dÚConv2dÚReLUÚbranch1Úbranch2)Úselfr/   r0   r1   Úbranch_featuresÚ	__class__s        €r)   r;   ÚInvertedResidual.__init__,   s§  ø€ Ü‰ÑÔà�VÕ ˜qÕ ÜÐ3Ó4Ð4ØŒà ™(ˆØ�K‰K˜1Ó 3¸QÑ*>Ó#>ÜØ0°°¸¸s¸eÀ9ÈSÈEð  RTð  Uóð ð �;‰;˜‹?ÜŸ=š=Ø×#Ñ# C¸!ÀDÇKÁKÐYZÐ#Ð[Ü—’˜sÓ#Ü—	’	˜#¸AÀaÐQRÐY^Ñ_Ü—’˜Ó/Ü—’ Ñ%óˆD�Lô Ÿ=š=›?ˆDŒLä—}’}Ü�IŠIØŸ™ a›‘¨oØØØØØñô �NŠN˜?Ó+Ü�GŠG˜DÑ!Ø×Ñ ÈaÐX\×XcÑXcÐmnÐÐoÜ�NŠN˜?Ó+Ü�IŠI�oÀAÈaÐYZÐafÑgÜ�NŠN˜?Ó+Ü�GŠG˜DÑ!ó
ˆ�r+   ÚiÚor5   r6   r7   c           
      ó0   • [         R                  " XX#XEU S9$ )N)r7   r   )r=   rA   )rI   rJ   r5   r1   r6   r7   s         r)   r?   ÚInvertedResidual.depthwise_convV   s   € ô �yŠy˜˜{°GÈqÑQÐQr+   r   c                 ó  • U R                   S:X  a8  UR                  SSS9u  p#[        R                  " X R	                  U5      4SS9nO5[        R                  " U R                  U5      U R	                  U5      4SS9n[        US5      nU$ )Nr   r   )Údim)r1   Úchunkr!   ÚcatrD   rC   r*   )rE   r   Úx1Úx2Úouts        r)   ÚforwardÚInvertedResidual.forward\   st   € Ø�;‰;˜!ÓØ—W‘W˜Q A�WÐ&‰FˆBÜ—)’)˜R§¡¨bÓ!1Ð2¸Ñ:‰Cä—)’)˜TŸ\™\¨!›_¨d¯l©l¸1«oÐ>ÀAÑFˆCä˜c 1Ó%ˆàˆ
r+   )rC   rD   r1   )r   r   F)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Úintr;   ÚstaticmethodÚboolr=   rA   r?   r   rT   Ú__static_attributes__Ú__classcell__©rG   s   @r)   r-   r-   +   s™   ø† ð(
˜Cð (
 cð (
°3ð (
¸4÷ (
ðT àZ_ñRØðRØðRØ%(ðRØ25ðRØDGðRØSWðRà	�‰ôRó ðRð
	˜ð 	 F÷ 	ò 	r+   r-   c                   ó–   ^ • \ rS rSrS\4S\\   S\\   S\S\S\R                  4   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   éh   iè  Ústages_repeatsÚstages_out_channelsÚnum_classesÚinverted_residual.r   Nc                 óò  >• [         TU ]  5         [        U 5        [        U5      S:w  a  [	        S5      e[        U5      S:w  a  [	        S5      eX l        SnU R
                  S   n[        R                  " [        R                  " XVSSSSS	9[        R                  " U5      [        R                  " S
S95      U l        Un[        R                  " SSSS9U l        U   U   U   S Vs/ s H  nSU 3PM
     nn[        X�U R
                  SS  5       H\  u  pšnU" XVS5      /n[        U
S-
  5       H  nUR!                  U" XfS5      5        M     [#        X	[        R                  " U6 5        UnM^     U R
                  S   n[        R                  " [        R                  " XVSSSSS	9[        R                  " U5      [        R                  " S
S95      U l        [        R&                  " Xc5      U l        g s  snf )Nr3   z2expected stages_repeats as list of 3 positive intsé   z7expected stages_out_channels as list of 5 positive intsr   r   r   F)r7   Tr8   r4   )r   r3   é   Ústageéÿÿÿÿ)r:   r;   r
   Úlenr<   Ú_stage_out_channelsr=   r>   rA   r@   rB   Úconv1Ú	MaxPool2dÚmaxpoolÚzipÚrangeÚappendÚsetattrÚconv5ÚLinearÚfc)rE   rb   rc   rd   re   Úinput_channelsÚoutput_channelsrI   Ústage_namesÚnameÚrepeatsÚseqrG   s               €r)   r;   ÚShuffleNetV2.__init__i   s»  ø€ ô 	‰ÑÔÜ˜DÔ!äˆ~Ó !Ó#ÜÐQÓRÐRÜÐ"Ó# qÓ(ÜÐVÓWÐWØ#6Ô àˆØ×2Ñ2°1Ñ5ˆÜ—]’]Ü�IŠI�n°q¸!¸QÀUÑKÜ�NŠN˜?Ó+Ü�GŠG˜DÑ!ó
ˆŒ
ð
 )ˆä—|’|°¸!ÀQÑGˆŒñ 	ÙÙÙ,5Ó6ªI q˜˜q˜c“{©IˆÐ6Ü.1°+Èt×OgÑOgÐhiÐhjÐOkÖ.lÑ*ˆD˜?Ù$ ^ÀaÓHÐIˆCÜ˜7 Q™;Ö'�Ø—
‘
Ñ,¨_ÈqÓQÖRñ (ä�D¤§¢¨sÐ 3Ô4Ø,ŠNñ /mð ×2Ñ2°2Ñ6ˆÜ—]’]Ü�IŠI�n°q¸!¸QÀUÑKÜ�NŠN˜?Ó+Ü�GŠG˜DÑ!ó
ˆŒ
ô —)’)˜OÓ9ˆ�ùò 7s   Ã&G4r   c                 ó  • U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU R                  U5      nUR                  SS/5      nU R                  U5      nU$ )Nr   r3   )rm   ro   Ústage2Ústage3Ústage4rt   Úmeanrv   ©rE   r   s     r)   Ú_forward_implÚShuffleNetV2._forward_impl™   ss   € à�J‰J�q‹MˆØ�L‰L˜‹OˆØ�K‰K˜‹NˆØ�K‰K˜‹NˆØ�K‰K˜‹NˆØ�J‰J�q‹MˆØ�F‰F�A�q�6‹NˆØ�G‰G�A‹JˆØˆr+   c                 ó$   • U R                  U5      $ )N)r„   rƒ   s     r)   rT   ÚShuffleNetV2.forward¥   s   € Ø×!Ñ! !Ó$Ð$r+   )rl   rm   rt   rv   ro   )rV   rW   rX   rY   r-   ÚlistrZ   r   r=   ÚModuler;   r   r„   rT   r]   r^   r_   s   @r)   r   r   h   s†   ø† ð
  Ø6Fñ.:à˜S™	ð.:ð " #™Yð.:ð ð	.:ð
 $ C¨¯© NÑ3ð.:ð 
÷.:ð .:ð`
˜vð 
¨&ô 
ð%˜ð % F÷ %ò %r+   r   ÚweightsÚprogressÚargsÚkwargsc                 ó¬   • U b#  [        US[        U R                  S   5      5        [        U0 UD6nU b  UR	                  U R                  USS95        U$ )Nrd   Ú
categoriesT)r‹   Ú
check_hash)r   rk   Úmetar   Úload_state_dictÚget_state_dict)rŠ   r‹   rŒ   r�   Úmodels        r)   Ú_shufflenetv2r•   ©   s]   € ð ÑÜ˜f m´S¸¿¹ÀlÑ9SÓ5TÔUä˜$Ð) &Ñ)€EàÑØ×Ñ˜g×4Ñ4¸hÐSWÐ4ÐXÔYà€Lr+   )r   r   z2https://github.com/ericsun99/Shufflenet-v2-Pytorch)Úmin_sizer�   Úrecipec                   óP   • \ rS rSr\" S\" \SS90 \ESSSSS	.0S
SSS.ES9r\r	Sr
g)r   éÁ   zDhttps://download.pytorch.org/models/shufflenetv2_x0.5-f707e7126e.pthéà   ©Ú	crop_sizeiÛ úImageNet-1Kg-²�ï§FN@g9´Èv¾oT@©zacc@1zacc@5g{®Gáz¤?gTã¥›Ä @úVThese weights were trained from scratch to reproduce closely the results of the paper.©Ú
num_paramsÚ_metricsÚ_opsÚ
_file_sizeÚ_docs©ÚurlÚ
transformsr‘   © N©rV   rW   rX   rY   r   r   r	   Ú_COMMON_METAÚIMAGENET1K_V1ÚDEFAULTr]   r©   r+   r)   r   r   Á   sT   † ÙàRÙÐ.¸#Ñ>ð
Øð
à!àØ#Ø#ñ ðð ØØqò
ñ	€Mð$ ƒGr+   r   c                   óP   • \ rS rSr\" S\" \SS90 \ESSSSS	.0S
SSS.ES9r\r	Sr
g)r   é×   zBhttps://download.pytorch.org/models/shufflenetv2_x1-5666bf0f80.pthrš   r›   iÌÄ" r�   gºI+WQ@gNbX9V@rž   g�Âõ(\�Â?g¢E¶óý”!@rŸ   r    r¦   r©   Nrª   r©   r+   r)   r   r   ×   sT   † ÙàPÙÐ.¸#Ñ>ð
Øð
à!àØ#Ø#ñ ðð ØØqò
ñ	€Mð$ ƒGr+   r   c                   óT   • \ rS rSr\" S\" \SSS90 \ESSSS	S
S.0SSSS.ES9r\r	Sr
g)r   éí   zBhttps://download.pytorch.org/models/shufflenetv2_x1_5-3c479a10.pthrš   éè   ©rœ   Úresize_sizeú+https://github.com/pytorch/vision/pull/5906iv5 r�   g9´Èv¾?R@g/Ý$�ÅV@rž   g‹lçû©ñÒ?gw¾Ÿ/+@úé
                These weights were trained from scratch by using TorchVision's `new training recipe
                <https://pytorch.org/blog/how-to-train-state-of-the-art-models-using-torchvision-latest-primitives/>`_.
            ©r—   r¡   r¢   r£   r¤   r¥   r¦   r©   Nrª   r©   r+   r)   r   r   í   ó[   † ÙØPÙÐ.¸#È3ÑOð
Øð
àCØ!àØ#Ø#ñ ðð Ø ðò
ñ€Mð* ƒGr+   r   c                   óT   • \ rS rSr\" S\" \SSS90 \ESSSS	S
S.0SSSS.ES9r\r	Sr
g)r   i  zBhttps://download.pytorch.org/models/shufflenetv2_x2_0-8be3c8ee.pthrš   r²   r³   rµ   iÌÒp r�   g…ëQ¸S@gªñÒMb@W@rž   g-²�ï§â?g+‡Ùn<@r¶   r·   r¦   r©   Nrª   r©   r+   r)   r   r     r¸   r+   r   Ú
pretrained)rŠ   T)rŠ   r‹   c                 óP   • [         R                  U 5      n [        X/ SQ/ SQ40 UD6$ )aÅ  
Constructs a ShuffleNetV2 architecture with 0.5x output channels, as described in
`ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design
<https://arxiv.org/abs/1807.11164>`__.

Args:
    weights (:class:`~torchvision.models.ShuffleNet_V2_X0_5_Weights`, optional): The
        pretrained weights to use. See
        :class:`~torchvision.models.ShuffleNet_V2_X0_5_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.shufflenetv2.ShuffleNetV2``
        base class. Please refer to the `source code
        <https://github.com/pytorch/vision/blob/main/torchvision/models/shufflenetv2.py>`_
        for more details about this class.

.. autoclass:: torchvision.models.ShuffleNet_V2_X0_5_Weights
    :members:
©rh   é   rh   )é   é0   é`   éÀ   é   )r   Úverifyr•   ©rŠ   r‹   r�   s      r)   r   r     s*   € ô4 )×/Ñ/°Ó8€Gä˜ªIÒ7NÑYÐRXÑYÐYr+   c                 óP   • [         R                  U 5      n [        X/ SQ/ SQ40 UD6$ )aÅ  
Constructs a ShuffleNetV2 architecture with 1.0x output channels, as described in
`ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design
<https://arxiv.org/abs/1807.11164>`__.

Args:
    weights (:class:`~torchvision.models.ShuffleNet_V2_X1_0_Weights`, optional): The
        pretrained weights to use. See
        :class:`~torchvision.models.ShuffleNet_V2_X1_0_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.shufflenetv2.ShuffleNetV2``
        base class. Please refer to the `source code
        <https://github.com/pytorch/vision/blob/main/torchvision/models/shufflenetv2.py>`_
        for more details about this class.

.. autoclass:: torchvision.models.ShuffleNet_V2_X1_0_Weights
    :members:
r¼   )r¾   ét   r²   iÐ  rÂ   )r   rÃ   r•   rÄ   s      r)   r   r   >  ó*   € ô4 )×/Ñ/°Ó8€Gä˜ªIÒ7PÑ[ÐTZÑ[Ð[r+   c                 óP   • [         R                  U 5      n [        X/ SQ/ SQ40 UD6$ )aÅ  
Constructs a ShuffleNetV2 architecture with 1.5x output channels, as described in
`ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design
<https://arxiv.org/abs/1807.11164>`__.

Args:
    weights (:class:`~torchvision.models.ShuffleNet_V2_X1_5_Weights`, optional): The
        pretrained weights to use. See
        :class:`~torchvision.models.ShuffleNet_V2_X1_5_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.shufflenetv2.ShuffleNetV2``
        base class. Please refer to the `source code
        <https://github.com/pytorch/vision/blob/main/torchvision/models/shufflenetv2.py>`_
        for more details about this class.

.. autoclass:: torchvision.models.ShuffleNet_V2_X1_5_Weights
    :members:
r¼   )r¾   é°   i`  iÀ  rÂ   )r   rÃ   r•   rÄ   s      r)   r   r   ]  rÇ   r+   c                 óP   • [         R                  U 5      n [        X/ SQ/ SQ40 UD6$ )aÅ  
Constructs a ShuffleNetV2 architecture with 2.0x output channels, as described in
`ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design
<https://arxiv.org/abs/1807.11164>`__.

Args:
    weights (:class:`~torchvision.models.ShuffleNet_V2_X2_0_Weights`, optional): The
        pretrained weights to use. See
        :class:`~torchvision.models.ShuffleNet_V2_X2_0_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.shufflenetv2.ShuffleNetV2``
        base class. Please refer to the `source code
        <https://github.com/pytorch/vision/blob/main/torchvision/models/shufflenetv2.py>`_
        for more details about this class.

.. autoclass:: torchvision.models.ShuffleNet_V2_X2_0_Weights
    :members:
r¼   )r¾   éô   iè  iÐ  i   )r   rÃ   r•   rÄ   s      r)   r   r   |  rÇ   r+   ))Ú	functoolsr   Útypingr   r   r   r!   Útorch.nnr=   r   Útransforms._presetsr	   Úutilsr
   Ú_apir   r   r   Ú_metar   Ú_utilsr   r   Ú__all__rZ   r*   r‰   r-   r   r\   r•   r«   r   r   r   r   r¬   r   r   r   r   r©   r+   r)   Ú<module>rÕ      sn  ðÝ ß *Ñ *ã Ý Ý å 5Ý 'ß 6Ñ 6Ý 'ß Bò
€ð�vð  sð ¨vô ô:�r—y‘yô :ôz>%�2—9‘9ô >%ðBØ�kÑ"ðàðð ðð ð	ð
 ôð$ Ø&ØBñ€ô ô ô, ô ô, ô ô2 ô ñ2 ÓÙ ,Ð0J×0XÑ0XÐ!YÑZà7;ÈdòZØÐ3Ñ4ðZØGKðZØ^aðZàôZó [ó ðZñ: ÓÙ ,Ð0J×0XÑ0XÐ!YÑZà7;Èdò\ØÐ3Ñ4ð\ØGKð\Ø^að\àô\ó [ó ð\ñ: ÓÙ ,Ð0J×0XÑ0XÐ!YÑZà7;Èdò\ØÐ3Ñ4ð\ØGKð\Ø^að\àô\ó [ó ð\ñ: ÓÙ ,Ð0J×0XÑ0XÐ!YÑZà7;Èdò\ØÐ3Ñ4ð\ØGKð\Ø^að\àô\ó [ó ñ\r+   