ó
    Eñi¬?  ã                   ól  • 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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Jr  / SQr " S S5      r " S S\	R>                  5      r  " S S\	R>                  5      r! S-S\"S\#S\$S\$S\4
S jjr%S\&\   S\'S\\   S\$S\S\!4S  jr(S!\S".r) " S# S$\5      r* " S% S&\5      r+\" 5       \" S'\*RX                  4S(9SS)S*.S\\*   S\$S\S\!4S+ jj5       5       r-\" 5       \" S'\+RX                  4S(9SS)S*.S\\+   S\$S\S\!4S, jj5       5       r.g).é    )ÚSequence)Úpartial)ÚAnyÚCallableÚOptionalN)ÚnnÚTensoré   )ÚConv2dNormActivationÚSqueezeExcitation)ÚImageClassification)Ú_log_api_usage_onceé   )Úregister_modelÚWeightsÚWeightsEnum)Ú_IMAGENET_CATEGORIES)Ú_make_divisibleÚ_ovewrite_named_paramÚhandle_legacy_interface)ÚMobileNetV3ÚMobileNet_V3_Large_WeightsÚMobileNet_V3_Small_WeightsÚmobilenet_v3_largeÚmobilenet_v3_smallc                   ó^   • \ rS rSrS\S\S\S\S\S\S\S	\S
\4S jr\	S\S
\4S j5       r
Srg)ÚInvertedResidualConfigé   Úinput_channelsÚkernelÚexpanded_channelsÚout_channelsÚuse_seÚ
activationÚstrideÚdilationÚ
width_multc
                 óÌ   • U R                  X5      U l        X l        U R                  X95      U l        U R                  XI5      U l        XPl        US:H  U l        Xpl        X€l        g )NÚHS)	Úadjust_channelsr   r    r!   r"   r#   Úuse_hsr%   r&   )
Úselfr   r    r!   r"   r#   r$   r%   r&   r'   s
             Ú[/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torchvision/models/mobilenetv3.pyÚ__init__ÚInvertedResidualConfig.__init__   s^   € ð #×2Ñ2°>ÓNˆÔØŒØ!%×!5Ñ!5Ð6GÓ!TˆÔØ ×0Ñ0°ÓJˆÔØŒØ  DÑ(ˆŒØŒØ �ó    Úchannelsc                 ó   • [        X-  S5      $ )Né   )r   )r1   r'   s     r-   r*   Ú&InvertedResidualConfig.adjust_channels0   s   € ä˜xÑ4°aÓ8Ð8r0   )r&   r!   r   r    r"   r%   r+   r#   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚintÚboolÚstrÚfloatr.   Ústaticmethodr*   Ú__static_attributes__© r0   r-   r   r      s�   † ð!àð!ð ð!ð ð	!ð
 ð!ð ð!ð ð!ð ð!ð ð!ð ô!ð* ð9 #ð 9°5ó 9ó ó9r0   r   c            	       óª   ^ • \ rS rSr\" \\R                  S94S\S\	S\R                  4   S\	S\R                  4   4U 4S jjjrS\S	\4S
 jrSrU =r$ )ÚInvertedResidualé5   )Úscale_activationÚcnfÚ
norm_layer.Úse_layerc                 ó  >• [         TU ]  5         SUR                  s=::  a  S::  d  O  [        S5      eUR                  S:H  =(       a    UR                  UR
                  :H  U l        / nUR                  (       a  [        R                  O[        R                  nUR                  UR                  :w  a0  UR                  [        UR                  UR                  SUUS95        UR                  S:”  a  SOUR                  nUR                  [        UR                  UR                  UR                  UUR                  UR                  UUS95        UR                   (       a;  [#        UR                  S-  S5      nUR                  U" UR                  U5      5        UR                  [        UR                  UR
                  SUS S95        [        R$                  " U6 U l        UR
                  U l        UR                  S:„  U l        g )Nr   r
   zillegal stride value©Úkernel_sizerE   Úactivation_layer)rI   r%   r&   ÚgroupsrE   rJ   é   r3   )Úsuperr.   r%   Ú
ValueErrorr   r"   Úuse_res_connectr+   r   Ú	HardswishÚReLUr!   Úappendr   r&   r    r#   r   Ú
SequentialÚblockÚ_is_cn)	r,   rD   rE   rF   ÚlayersrJ   r%   Úsqueeze_channelsÚ	__class__s	           €r-   r.   ÚInvertedResidual.__init__7   sª  ø€ ô 	‰ÑÔØ�S—Z‘ZÕ$ 1Õ$ÜÐ3Ó4Ð4à"Ÿz™z¨Q™×Y°3×3EÑ3EÈ×IYÑIYÑ3YˆÔà"$ˆØ+.¯:¯:œ2Ÿ<š<¼2¿7¹7Ðð × Ñ  C×$6Ñ$6Ó6Ø�M‰MÜ$Ø×&Ñ&Ø×)Ñ)Ø !Ø)Ø%5ñôð —l‘l QÓ&‘¨C¯J©JˆØ�‰Ü Ø×%Ñ%Ø×%Ñ%ØŸJ™JØØŸ™Ø×,Ñ,Ø%Ø!1ñ	ô	
ð �:�:Ü.¨s×/DÑ/DÈÑ/IÈ1ÓMÐØ�M‰M™( 3×#8Ñ#8Ð:JÓKÔLð 	�‰Ü Ø×%Ñ% s×'7Ñ'7ÀQÐS]Ðptñô	
ô —]’] FÐ+ˆŒ
Ø×,Ñ,ˆÔØ—j‘j 1‘nˆ�r0   ÚinputÚreturnc                 óR   • U R                  U5      nU R                  (       a  X!-  nU$ ©N)rT   rO   )r,   rZ   Úresults      r-   ÚforwardÚInvertedResidual.forwardo   s%   € Ø—‘˜EÓ"ˆØ××Ø‰OˆFØˆr0   )rU   rT   r"   rO   )r5   r6   r7   r8   r   ÚSElayerr   ÚHardsigmoidr   r   ÚModuler.   r	   r_   r>   Ú__classcell__©rX   s   @r-   rA   rA   5   sl   ø† ñ .5°WÈrÏ~É~Ñ-^ñ	6%à#ð6%ð ˜S "§)¡)˜^Ñ,ð6%ð ˜3 §	¡	˜>Ñ*÷	6%ð 6%ðp˜Vð ¨÷ ò r0   rA   c                   óÊ   ^ • \ rS rSr    SS\\   S\S\S\\S\	R                  4      S\\S\	R                  4      S	\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   év   NÚinverted_residual_settingÚlast_channelÚnum_classesrT   .rE   ÚdropoutÚkwargsr[   c                 óæ  >• [         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  [        [        R                  SSS9n/ n	US   R                  n
U	R                  [        SU
SS	U[        R                   S
95        U H  nU	R                  U" Xµ5      5        M     US   R"                  nSU-  nU	R                  [        UUSU[        R                   S95        [        R$                  " U	6 U l        [        R(                  " S5      U l        [        R$                  " [        R,                  " XÒ5      [        R                   " SS9[        R.                  " USS9[        R,                  " X#5      5      U l        U R3                  5        GH  n[	        U[        R4                  5      (       ab  [        R6                  R9                  UR:                  SS9  UR<                  b+  [        R6                  R?                  UR<                  5        Mƒ  M…  [	        U[        R                  [        R@                  45      (       aU  [        R6                  RC                  UR:                  5        [        R6                  R?                  UR<                  5        GM	  [	        U[        R,                  5      (       d  GM+  [        R6                  RE                  UR:                  SS5        [        R6                  R?                  UR<                  5        GM‚     gs  snf )aæ  
MobileNet V3 main class

Args:
    inverted_residual_setting (List[InvertedResidualConfig]): Network structure
    last_channel (int): The number of channels on the penultimate layer
    num_classes (int): Number of classes
    block (Optional[Callable[..., nn.Module]]): Module specifying inverted residual building block for mobilenet
    norm_layer (Optional[Callable[..., nn.Module]]): Module specifying the normalization layer to use
    dropout (float): The droupout probability
z1The inverted_residual_setting should not be emptyzDThe inverted_residual_setting should be List[InvertedResidualConfig]Ngü©ñÒMbP?g{®Gáz„?)ÚepsÚmomentumr   é   r
   )rI   r%   rE   rJ   éÿÿÿÿé   r   rH   T)Úinplace)Úprs   Úfan_out)Úmode)#rM   r.   r   rN   Ú
isinstancer   Úallr   Ú	TypeErrorrA   r   r   ÚBatchNorm2dr   rR   r   rP   r"   rS   ÚfeaturesÚAdaptiveAvgPool2dÚavgpoolÚLinearÚDropoutÚ
classifierÚmodulesÚConv2dÚinitÚkaiming_normal_ÚweightÚbiasÚzeros_Ú	GroupNormÚones_Únormal_)r,   rh   ri   rj   rT   rE   rk   rl   ÚsrV   Úfirstconv_output_channelsrD   Úlastconv_input_channelsÚlastconv_output_channelsÚmrX   s                  €r-   r.   ÚMobileNetV3.__init__w   s{  ø€ ô* 	‰ÑÔÜ˜DÔ!æ(ÜÐPÓQÐQäÐ0´(×;Ñ;ÜÑD]Ó^ÒD]¸q”Z Ô#9Ö:ÑD]Ñ^×_Ñ_äÐbÓcÐcà‰=Ü$ˆEàÑÜ ¤§¡°UÀTÑJˆJà"$ˆð %>¸aÑ$@×$OÑ$OÐ!Ø�‰Ü ØØ)ØØØ%Ü!#§¡ñô		
ó -ˆCØ�M‰M™% Ó0Ö1ñ -ð #<¸BÑ"?×"LÑ"LÐØ#$Ð'>Ñ#>Ð Ø�‰Ü Ø'Ø(ØØ%Ü!#§¡ñô	
ô Ÿš vÐ.ˆŒÜ×+Ò+¨AÓ.ˆŒÜŸ-š-Ü�IŠIÐ.Ó=Ü�LŠL Ñ&Ü�JŠJ˜¨$Ñ/Ü�IŠI�lÓ0ó	
ˆŒð —‘—ˆAÜ˜!œRŸY™Y×'Ñ'Ü—‘×'Ñ'¨¯©°yÐ'ÑAØ—6‘6Ñ%Ü—G‘G—N‘N 1§6¡6Ö*ñ &ä˜A¤§¡´·±Ð=×>Ñ>Ü—‘—‘˜aŸh™hÔ'Ü—‘—‘˜qŸv™v×&Ü˜AœrŸy™y×)Ô)Ü—‘—‘ §¡¨!¨TÔ2Ü—‘—‘˜qŸv™v×&ò  ùòg _s   ÁM.Úxc                 óš   • U R                  U5      nU R                  U5      n[        R                  " US5      nU R	                  U5      nU$ )Nr   )r{   r}   ÚtorchÚflattenr€   ©r,   r‘   s     r-   Ú_forward_implÚMobileNetV3._forward_implÒ   s@   € Ø�M‰M˜!Óˆà�L‰L˜‹OˆÜ�MŠM˜!˜QÓˆà�O‰O˜AÓˆàˆr0   c                 ó$   • U R                  U5      $ r]   )r–   r•   s     r-   r_   ÚMobileNetV3.forwardÜ   s   € Ø×!Ñ! !Ó$Ð$r0   )r}   r€   r{   )iè  NNgš™™™™™É?)r5   r6   r7   r8   Úlistr   r9   r   r   r   rc   r<   r   r.   r	   r–   r_   r>   rd   re   s   @r-   r   r   v   sÉ   ø† ð
  Ø48Ø9=ØñY'à#'Ð(>Ñ#?ðY'ð ðY'ð ð	Y'ð
 ˜  b§i¡i Ñ0Ñ1ðY'ð ˜X c¨2¯9©9 nÑ5Ñ6ðY'ð ðY'ð ðY'ð 
÷Y'ð Y'ðv˜vð ¨&ô ð%˜ð % F÷ %ò %r0   r   Úarchr'   Úreduced_tailÚdilatedrl   c                 ó  • U(       a  SOSnU(       a  SOSn[        [        US9n[        [        R                  US9nU S:X  a÷  U" SSSSSSSS5      U" SSS	S
SSSS5      U" S
SSS
SSSS5      U" S
SSSSSSS5      U" SSSSSSSS5      U" SSSSSSSS5      U" SSSSSSSS5      U" SSSSSSSS5      U" SSSSSSSS5      U" SSSSSSSS5      U" SSSSSSSS5      U" SSSSSSSS5      U" SSSSU-  SSSU5      U" SU-  SSU-  SU-  SSSU5      U" SU-  SSU-  SU-  SSSU5      /n	U" SU-  5      n
Xš4$ U S:X  a¿  U" SSSSSSSS5      U" SSSS
SSSS5      U" S
SSS
SSSS5      U" S
SSSSSSS5      U" SSSSSSSS5      U" SSSSSSSS5      U" SSSSSSSS5      U" SSSSSSSS5      U" SSS SU-  SSSU5      U" SU-  SS!U-  SU-  SSSU5      U" SU-  SS!U-  SU-  SSSU5      /n	U" S"U-  5      n
Xš4$ [        S#U  35      e)$Nr
   r   )r'   r   é   rp   FÚREé@   é   éH   é   é(   Téx   éð   éP   r)   éÈ   é¸   ià  ép   i   é    iÀ  i   r   éX   é`   é0   é�   i   i@  i   zUnsupported model type )r   r   r*   rN   )r›   r'   rœ   r�   rl   Úreduce_dividerr&   Ú
bneck_confr*   rh   ri   s              r-   Ú_mobilenet_v3_confr³   à   s:  € ö '‘Q¨A€NÞ‰q €HäÔ/¸JÑG€JÜÔ4×DÑDÐQ[Ñ\€OàÐ#Ó#á�r˜1˜b " e¨T°1°aÓ8Ù�r˜1˜b " e¨T°1°aÓ8Ù�r˜1˜b " e¨T°1°aÓ8Ù�r˜1˜b " d¨D°!°QÓ7Ù�r˜1˜c 2 t¨T°1°aÓ8Ù�r˜1˜c 2 t¨T°1°aÓ8Ù�r˜1˜c 2 u¨d°A°qÓ9Ù�r˜1˜c 2 u¨d°A°qÓ9Ù�r˜1˜c 2 u¨d°A°qÓ9Ù�r˜1˜c 2 u¨d°A°qÓ9Ù�r˜1˜c 3¨¨d°A°qÓ9Ù�s˜A˜s C¨¨t°Q¸Ó:Ù�s˜A˜s C¨>Ñ$9¸4ÀÀqÈ(ÓSÙ�s˜nÑ,¨a°¸Ñ1FÈÈ~ÑH]Ð_cÐeiÐklÐnvÓwÙ�s˜nÑ,¨a°¸Ñ1FÈÈ~ÑH]Ð_cÐeiÐklÐnvÓwð%
Ð!ñ" ' t¨~Ñ'=Ó>ˆð& %Ð2Ð2ð% 
Ð%Ó	%á�r˜1˜b " d¨D°!°QÓ7Ù�r˜1˜b " e¨T°1°aÓ8Ù�r˜1˜b " e¨T°1°aÓ8Ù�r˜1˜b " d¨D°!°QÓ7Ù�r˜1˜c 2 t¨T°1°aÓ8Ù�r˜1˜c 2 t¨T°1°aÓ8Ù�r˜1˜c 2 t¨T°1°aÓ8Ù�r˜1˜c 2 t¨T°1°aÓ8Ù�r˜1˜c 2¨Ñ#7¸¸tÀQÈÓQÙ�r˜^Ñ+¨Q°°~Ñ0EÀrÈ^ÑG[Ð]aÐcgÐijÐltÓuÙ�r˜^Ñ+¨Q°°~Ñ0EÀrÈ^ÑG[Ð]aÐcgÐijÐltÓuð%
Ð!ñ ' t¨~Ñ'=Ó>ˆð %Ð2Ð2ô Ð2°4°&Ð9Ó:Ð:r0   rh   ri   ÚweightsÚprogressr[   c                 ó®   • Ub#  [        US[        UR                  S   5      5        [        X40 UD6nUb  UR	                  UR                  USS95        U$ )Nrj   Ú
categoriesT)rµ   Ú
check_hash)r   ÚlenÚmetar   Úload_state_dictÚget_state_dict)rh   ri   r´   rµ   rl   Úmodels         r-   Ú_mobilenet_v3r¾     s^   € ð ÑÜ˜f m´S¸¿¹ÀlÑ9SÓ5TÔUäÐ1ÑJÀ6ÑJ€EàÑØ×Ñ˜g×4Ñ4¸hÐSWÐ4ÐXÔYà€Lr0   )r   r   )Úmin_sizer·   c                   óŽ   • \ rS rSr\" S\" \SS90 \ESSSSS	S
.0SSSS.ES9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)  zChttps://download.pytorch.org/models/mobilenet_v3_large-8738ca79.pthéà   ©Ú	crop_sizeiªS ú^https://github.com/pytorch/vision/tree/main/references/classification#mobilenetv3-large--smallúImageNet-1Kg¦›Ä °‚R@gö(\�ÂÕV@©zacc@1zacc@5g-²�ï§ÆË?gw¾Ÿ/5@zJThese weights were trained from scratch by using a simple training recipe.©Ú
num_paramsÚrecipeÚ_metricsÚ_opsÚ
_file_sizeÚ_docs©ÚurlÚ
transformsrº   zChttps://download.pytorch.org/models/mobilenet_v3_large-5c1a4163.pthéè   )rÃ   Úresize_sizezHhttps://github.com/pytorch/vision/issues/3995#new-recipe-with-reg-tuningg¨ÆK7‰ÑR@gNbX9$W@g¬Zd5@a/  
                These weights improve marginally 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/>`_.
            r?   N)r5   r6   r7   r8   r   r   r   Ú_COMMON_METAÚIMAGENET1K_V1ÚIMAGENET1K_V2ÚDEFAULTr>   r?   r0   r-   r   r   )  s«   † ÙØQÙÐ.¸#Ñ>ð
Øð
à!ØvàØ#Ø#ñ ðð Ø Øeò
ñ€Mñ$ ØQÙÐ.¸#È3ÑOð
Øð
à!Ø`àØ#Ø#ñ ðð Ø ðò
ñ€Mð, ƒGr0   r   c                   óR   • \ rS rSr\" 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   iU  zChttps://download.pytorch.org/models/mobilenet_v3_small-047dcff4.pthrÁ   rÂ   iÍ& rÄ   rÅ   g˜nƒÀêP@g}?5^ºÙU@rÆ   gÉv¾Ÿ/­?gœÄ °r¨#@z}
                These weights improve upon the results of the original paper by using a simple training recipe.
            rÇ   rÎ   r?   N)r5   r6   r7   r8   r   r   r   rÓ   rÔ   rÖ   r>   r?   r0   r-   r   r   U  sY   † ÙØQÙÐ.¸#Ñ>ð
Øð
à!ØvàØ#Ø#ñ ðð Øðò
ñ€Mð( ƒGr0   r   Ú
pretrained)r´   T)r´   rµ   c                 ó`   • [         R                  U 5      n [        S0 UD6u  p4[        X4X40 UD6$ )ao  
Constructs a large MobileNetV3 architecture from
`Searching for MobileNetV3 <https://arxiv.org/abs/1905.02244>`__.

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

.. autoclass:: torchvision.models.MobileNet_V3_Large_Weights
    :members:
)r   )r   Úverifyr³   r¾   ©r´   rµ   rl   rh   ri   s        r-   r   r   m  ó:   € ô2 )×/Ñ/°Ó8€Gä.@Ñ.`ÐY_Ñ.`Ñ+ÐÜÐ2À'Ñ^ÐW]Ñ^Ð^r0   c                 ó`   • [         R                  U 5      n [        S0 UD6u  p4[        X4X40 UD6$ )ao  
Constructs a small MobileNetV3 architecture from
`Searching for MobileNetV3 <https://arxiv.org/abs/1905.02244>`__.

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

.. autoclass:: torchvision.models.MobileNet_V3_Small_Weights
    :members:
)r   )r   rÚ   r³   r¾   rÛ   s        r-   r   r   Œ  rÜ   r0   )g      ð?FF)/Úcollections.abcr   Ú	functoolsr   Útypingr   r   r   r“   r   r	   Úops.miscr   r   ra   Útransforms._presetsr   Úutilsr   Ú_apir   r   r   Ú_metar   Ú_utilsr   r   r   Ú__all__r   rc   rA   r   r;   r<   r:   r³   rš   r9   r¾   rÓ   r   r   rÔ   r   r   r?   r0   r-   Ú<module>rè      sÍ  ðÝ $Ý ß *Ñ *ã ß ç IÝ 5Ý 'ß 6Ñ 6Ý 'ß SÑ Sò€÷9ñ 9ô8>�r—y‘yô >ôBg%�"—)‘)ô g%ðV UZñ.3Ø
ð.3Ø ð.3Ø6:ð.3ØMQð.3Øehõ.3ðbØ#Ð$:Ñ;ðàðð �kÑ"ðð ð	ð
 ðð ôð& Ø&ñ€ô) ô )ôX ô ñ0 ÓÙ ,Ð0J×0XÑ0XÐ!YÑZà7;Èdò_ØÐ3Ñ4ð_ØGKð_Ø^að_àô_ó [ó ð_ñ: ÓÙ ,Ð0J×0XÑ0XÐ!YÑZà7;Èdò_ØÐ3Ñ4ð_ØGKð_Ø^að_àô_ó [ó ñ_r0   