ó
    Eñi($  ã                   óº  • 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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	SKJrJrJrJrJr  SSK J!r!J"r"  / SQr# " S S\5      r$ " S S\5      r% " S S\5      r&S\'\   S\(S\\   S\)S\)S\S\&4S jr* " S S \5      r+\" S!S"9\" S#S$ 4S%9SS&S'S(.S\\\+\4      S\)S\)S\S\&4
S) jj5       5       r,g)*é    )Úpartial)ÚAnyÚOptionalÚUnionN)ÚnnÚTensor)ÚDeQuantStubÚ	QuantStubé   )ÚConv2dNormActivationÚSqueezeExcitation)ÚImageClassificationé   )Úregister_modelÚWeightsÚWeightsEnum)Ú_IMAGENET_CATEGORIES)Ú_ovewrite_named_paramÚhandle_legacy_interface)Ú_mobilenet_v3_confÚInvertedResidualÚInvertedResidualConfigÚMobileNet_V3_Large_WeightsÚMobileNetV3é   )Ú_fuse_modulesÚ_replace_relu)ÚQuantizableMobileNetV3Ú#MobileNet_V3_Large_QuantizedWeightsÚmobilenet_v3_largec                   óv   ^ • \ rS rSrSrS\S\SS4U 4S jjrS\S\4S	 jrSS
\	\
   SS4S jjrU 4S jrSrU =r$ )ÚQuantizableSqueezeExcitationé   r   ÚargsÚkwargsÚreturnNc                 ó’   >• [         R                  US'   [        TU ]  " U0 UD6  [         R                  R                  5       U l        g )NÚscale_activation)r   ÚHardsigmoidÚsuperÚ__init__Ú	quantizedÚFloatFunctionalÚskip_mul©Úselfr$   r%   Ú	__class__s      €Úh/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torchvision/models/quantization/mobilenetv3.pyr+   Ú%QuantizableSqueezeExcitation.__init__!   s8   ø€ Ü%'§^¡^ˆÐ!Ñ"Ü‰Ò˜$Ð) &Ò)ÜŸ™×4Ñ4Ó6ˆ�ó    Úinputc                 óX   • U R                   R                  U R                  U5      U5      $ ©N)r.   ÚmulÚ_scale)r0   r5   s     r2   ÚforwardÚ$QuantizableSqueezeExcitation.forward&   s"   € Ø�}‰}× Ñ  §¡¨UÓ!3°UÓ;Ð;r4   Úis_qatc                 ó    • [        U SS/USS9  g )NÚfc1Ú
activationT©Úinplace)r   )r0   r<   s     r2   Ú
fuse_modelÚ'QuantizableSqueezeExcitation.fuse_model)   s   € Ü�d˜U LÐ1°6À4ÓHr4   c           	      ó  >• UR                  SS 5      n[        U S5      (       aÒ  Ub  US:  aÉ  [        R                  " S/5      [        R                  " S/5      [        R                  " S/[        R                  S9[        R                  " S/[        R                  S9[        R                  " S/5      [        R                  " S/5      S.n	U	R                  5        H  u  p«X*-   nXÁ;  d  M  X±U'   M     [        TU ]  UUUUUUU5        g )	NÚversionÚqconfigr   g      ð?r   )Údtyper   )z.scale_activation.activation_post_process.scalezFscale_activation.activation_post_process.activation_post_process.scalez3scale_activation.activation_post_process.zero_pointzKscale_activation.activation_post_process.activation_post_process.zero_pointz;scale_activation.activation_post_process.fake_quant_enabledz9scale_activation.activation_post_process.observer_enabled)ÚgetÚhasattrÚtorchÚtensorÚint32Úitemsr*   Ú_load_from_state_dict)r0   Ú
state_dictÚprefixÚlocal_metadataÚstrictÚmissing_keysÚunexpected_keysÚ
error_msgsrE   Údefault_state_dictÚkÚvÚfull_keyr1   s                €r2   rN   Ú2QuantizableSqueezeExcitation._load_from_state_dict,   sþ   ø€ ð !×$Ñ$ Y°Ó5ˆä�4˜×#Ñ#¨©¸GÀa»KäBGÇ,Â,ÐPSÈuÓBUÜZ_×ZfÒZfÐhkÐglÓZmÜGLÇ|Â|ÐUVÐTWÔ_d×_jÑ_jÑGkÜ_d×_kÒ_kØ�CœuŸ{™{ñ`ô PUÏ|Ê|Ð]^Ð\_ÓO`ÜMRÏ\Ê\Ð[\ÐZ]ÓM^ñ	"Ðð +×0Ñ0Ö2‘�Ø!™:�ØÕ-Ø+,˜xÓ(ñ 3ô
 	‰Ñ%ØØØØØØØõ	
r4   )r.   r7   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú_versionr   r+   r   r:   r   ÚboolrB   rN   Ú__static_attributes__Ú__classcell__©r1   s   @r2   r"   r"      sY   ø† Ø€Hð7˜cð 7¨Sð 7°T÷ 7ð
<˜Vð <¨ô <ñI ¨$¡ð I¸4õ I÷$
ó $
r4   r"   c                   óJ   ^ • \ rS rSrS\S\SS4U 4S jjrS\S\4S jrS	rU =r	$ )
ÚQuantizableInvertedResidualéS   r$   r%   r&   Nc                 óx   >• [         TU ]  " US[        0UD6  [        R                  R                  5       U l        g )NÚse_layer)r*   r+   r"   r   r,   r-   Úskip_addr/   s      €r2   r+   Ú$QuantizableInvertedResidual.__init__U   s/   ø€ Ü‰Ò˜$ÐPÔ)EÐPÈÒPÜŸ™×4Ñ4Ó6ˆ�r4   Úxc                 óš   • U R                   (       a*  U R                  R                  XR                  U5      5      $ U R                  U5      $ r7   )Úuse_res_connectri   ÚaddÚblock©r0   rk   s     r2   r:   Ú#QuantizableInvertedResidual.forwardY   s6   € Ø××Ø—=‘=×$Ñ$ Q¯
©
°1«Ó6Ð6à—:‘:˜a“=Ð r4   )ri   )
r[   r\   r]   r^   r   r+   r   r:   ra   rb   rc   s   @r2   re   re   S   s5   ø† ð7˜cð 7¨Sð 7°T÷ 7ð!˜ð ! F÷ !ò !r4   re   c                   óf   ^ • \ rS rSrS\S\SS4U 4S jjrS\S\4S jrSS	\\	   SS4S
 jjr
SrU =r$ )r   é`   r$   r%   r&   Nc                 ób   >• [         TU ]  " U0 UD6  [        5       U l        [	        5       U l        g)zQ
MobileNet V3 main class

Args:
   Inherits args from floating point MobileNetV3
N)r*   r+   r
   Úquantr	   Údequantr/   s      €r2   r+   ÚQuantizableMobileNetV3.__init__a   s)   ø€ ô 	‰Ò˜$Ð) &Ò)Ü“[ˆŒ
Ü"“}ˆ�r4   rk   c                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ r7   )ru   Ú_forward_implrv   rp   s     r2   r:   ÚQuantizableMobileNetV3.forwardl   s1   € Ø�J‰J�q‹MˆØ×Ñ˜qÓ!ˆØ�L‰L˜‹OˆØˆr4   r<   c                 ó@  • U R                  5        HŠ  n[        U5      [        L aP  SS/n[        U5      S:X  a0  [        US   5      [        R
                  L a  UR                  S5        [        X#USS9  Me  [        U5      [        L d  My  UR                  U5        MŒ     g )NÚ0Ú1r   r   Ú2Tr@   )
ÚmodulesÚtyper   Úlenr   ÚReLUÚappendr   r"   rB   )r0   r<   ÚmÚmodules_to_fuses       r2   rB   Ú!QuantizableMobileNetV3.fuse_modelr   sy   € Ø—‘–ˆAÜ�A‹wÔ.Ò.Ø#&¨ *�Ü�q“6˜Q“;¤4¨¨!©£:´·±Ò#8Ø#×*Ñ*¨3Ô/Ü˜a°&À$ÔGÜ�a“Ô8Ô8Ø—‘˜VÖ$ò  r4   )rv   ru   r7   )r[   r\   r]   r^   r   r+   r   r:   r   r`   rB   ra   rb   rc   s   @r2   r   r   `   sL   ø† ð	%˜cð 	%¨Sð 	%°T÷ 	%ð˜ð  Fô ñ% ¨$¡ð %¸4÷ %ó %r4   r   Úinverted_residual_settingÚlast_channelÚweightsÚprogressÚquantizer%   r&   c                 óž  • UbM  [        US[        UR                  S   5      5        SUR                  ;   a  [        USUR                  S   5        UR                  SS5      n[	        X4S[
        0UD6n[        U5        U(       ae  UR                  SS9  [        R                  R                  R                  U5      Ul        [        R                  R                  R                  USS9  Ub  UR                  UR                  USS	95        U(       a8  [        R                  R                  R!                  USS9  UR#                  5         U$ )
NÚnum_classesÚ
categoriesÚbackendÚqnnpackro   T)r<   r@   )rŠ   Ú
check_hash)r   r�   ÚmetaÚpopr   re   r   rB   rJ   ÚaoÚquantizationÚget_default_qat_qconfigrF   Úprepare_qatÚload_state_dictÚget_state_dictÚconvertÚeval)r‡   rˆ   r‰   rŠ   r‹   r%   r�   Úmodels           r2   Ú_mobilenet_v3_modelr�   }   s  € ð ÑÜ˜f m´S¸¿¹ÀlÑ9SÓ5TÔUØ˜Ÿ™Ó$Ü! &¨)°W·\±\À)Ñ5LÔMØ�j‰j˜ IÓ.€Gä"Ð#<ÑxÔRmÐxÐqwÑx€EÜ�%Ôæð
 	×Ñ ÐÑ%ÜŸ™×-Ñ-×EÑEÀgÓNˆŒÜ�‰×Ñ×)Ñ)¨%¸Ð)Ñ>àÑØ×Ñ˜g×4Ñ4¸hÐSWÐ4ÐXÔYæÜ�‰×Ñ×%Ñ% e°TÐ%Ñ:Ø�
‰
Œà€Lr4   c                   óf   • \ rS rSr\" S\" \SS9SS\SS\R                  S	S
SS.0SSSS.
S9r
\
rSrg)r   é¡   zUhttps://download.pytorch.org/models/quantized/mobilenet_v3_large_qnnpack-5bcacf28.pthéà   )Ú	crop_sizeiªS )r   r   r�   zUhttps://github.com/pytorch/vision/tree/main/references/classification#qat-mobilenetv3zImageNet-1KgÇK7‰A@R@gôýÔxé¶V@)zacc@1zacc@5g-²�ï§ÆË?gçû©ñÒ�5@z«
                These weights were produced by doing Quantization Aware Training (eager mode) on top of the unquantized
                weights listed below.
            )
Ú
num_paramsÚmin_sizerŽ   r�   ÚrecipeÚunquantizedÚ_metricsÚ_opsÚ
_file_sizeÚ_docs)ÚurlÚ
transformsr’   © N)r[   r\   r]   r^   r   r   r   r   r   ÚIMAGENET1K_V1ÚIMAGENET1K_QNNPACK_V1ÚDEFAULTra   r¬   r4   r2   r   r   ¡   s_   † Ù#ØcÙÐ.¸#Ñ>à!ØØ.Ø ØmØ5×CÑCàØ#Ø#ñ ðð Ø ðñ
ñÐð0 $ƒGr4   r   Úquantized_mobilenet_v3_large)ÚnameÚ
pretrainedc                 óp   • U R                  SS5      (       a  [        R                  $ [        R                  $ )Nr‹   F)rH   r   r®   r   r­   )r%   s    r2   Ú<lambda>r´   Á   s1   € à�z‰z˜* e×,Ñ,ô 0×EÑEð :ä+×9Ñ9ð:r4   )r‰   TF)r‰   rŠ   r‹   c                 ó|   • U(       a  [         O[        R                  U 5      n [        S0 UD6u  pE[	        XEXU40 UD6$ )ap  
MobileNetV3 (Large) model from
`Searching for MobileNetV3 <https://arxiv.org/abs/1905.02244>`_.

.. note::
    Note that ``quantize = True`` returns a quantized model with 8 bit
    weights. Quantized models only support inference and run on CPUs.
    GPU inference is not yet supported.

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

.. autoclass:: torchvision.models.quantization.MobileNet_V3_Large_QuantizedWeights
    :members:
.. autoclass:: torchvision.models.MobileNet_V3_Large_Weights
    :members:
    :noindex:
)r    )r   r   Úverifyr   r�   )r‰   rŠ   r‹   r%   r‡   rˆ   s         r2   r    r    ½   sE   € ö^ 7?Õ2ÔD^×fÑfÐgnÓo€Gä.@Ñ.`ÐY_Ñ.`Ñ+ÐÜÐ8ÈÐ[cÑnÐgmÑnÐnr4   )-Ú	functoolsr   Útypingr   r   r   rJ   r   r   Útorch.ao.quantizationr	   r
   Úops.miscr   r   Útransforms._presetsr   Ú_apir   r   r   Ú_metar   Ú_utilsr   r   Úmobilenetv3r   r   r   r   r   Úutilsr   r   Ú__all__r"   re   r   ÚlistÚintr`   r�   r   r    r¬   r4   r2   Ú<module>rÄ      sN  ðÝ ß 'Ñ 'ã ß ß 8ç ?Ý 6ß 7Ñ 7Ý (ß C÷õ ÷ 0ò€ô2
Ð#4ô 2
ôj
!Ð"2ô 
!ô%˜[ô %ð:!Ø#Ð$:Ñ;ð!àð!ð �kÑ"ð!ð ð	!ð
 ð!ð ð!ð ô!ôH$¨+ô $ñ8 Ð3Ñ4Ùàñ	
ðñ	ð aeØØò	'oà�eÐ?ÐA[Ð[Ñ\Ñ]ð'oð ð'oð ð	'oð
 ð'oð ô'oó	ó 5ñ'or4   