ó
    Eñi  ã                   ób  • S SK Jr  S SKJrJrJr  S SKJrJr  S SK	J
r
Jr  S SKJr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  SSKJrJrJ r   / SQr! " S S\5      r" " S S\5      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ÚUnion)ÚnnÚTensor)ÚDeQuantStubÚ	QuantStub)ÚInvertedResidualÚMobileNet_V2_WeightsÚMobileNetV2é   )ÚConv2dNormActivation)ÚImageClassificationé   )Úregister_modelÚWeightsÚWeightsEnum)Ú_IMAGENET_CATEGORIES)Ú_ovewrite_named_paramÚhandle_legacy_interfaceé   )Ú_fuse_modulesÚ_replace_reluÚquantize_model)ÚQuantizableMobileNetV2ÚMobileNet_V2_QuantizedWeightsÚmobilenet_v2c                   ó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$ )ÚQuantizableInvertedResidualé   ÚargsÚkwargsÚreturnNc                 ól   >• [         TU ]  " U0 UD6  [        R                  R	                  5       U l        g ©N)ÚsuperÚ__init__r   Ú	quantizedÚFloatFunctionalÚskip_add©Úselfr"   r#   Ú	__class__s      €Úh/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torchvision/models/quantization/mobilenetv2.pyr(   Ú$QuantizableInvertedResidual.__init__   s)   ø€ Ü‰Ò˜$Ð) &Ò)ÜŸ™×4Ñ4Ó6ˆ�ó    Úxc                 óš   • U R                   (       a*  U R                  R                  XR                  U5      5      $ U R                  U5      $ r&   )Úuse_res_connectr+   ÚaddÚconv©r-   r2   s     r/   ÚforwardÚ#QuantizableInvertedResidual.forward   s6   € Ø××Ø—=‘=×$Ñ$ Q¯	©	°!«Ó5Ð5à—9‘9˜Q“<Ðr1   Úis_qatc           	      óþ   • [        [        U R                  5      5       H[  n[        U R                  U   5      [        R
                  L d  M.  [        U R                  [        U5      [        US-   5      /USS9  M]     g )Nr   T©Úinplace)ÚrangeÚlenr6   Útyper   ÚConv2dr   Ústr)r-   r:   Úidxs      r/   Ú
fuse_modelÚ&QuantizableInvertedResidual.fuse_model"   sV   € Üœ˜TŸY™Y›Ö(ˆCÜ�D—I‘I˜c‘NÓ#¤r§y¡yÔ0Ü˜dŸi™i¬#¨c«(´C¸¸a¹³LÐ)AÀ6ÐSWÔXò )r1   )r+   r&   ©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r(   r   r8   r   ÚboolrD   Ú__static_attributes__Ú__classcell__©r.   s   @r/   r    r       sP   ø† ð7˜cð 7¨Sð 7°T÷ 7ð ˜ð   Fô  ñY ¨$¡ð Y¸4÷ Yó Yr1   r    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 V2 main class

Args:
   Inherits args from floating point MobileNetV2
N)r'   r(   r
   Úquantr	   Údequantr,   s      €r/   r(   ÚQuantizableMobileNetV2.__init__)   s)   ø€ ô 	‰Ò˜$Ð) &Ò)Ü“[ˆŒ
Ü"“}ˆ�r1   r2   c                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ r&   )rR   Ú_forward_implrS   r7   s     r/   r8   ÚQuantizableMobileNetV2.forward4   s1   € Ø�J‰J�q‹MˆØ×Ñ˜qÓ!ˆØ�L‰L˜‹OˆØˆr1   r:   c                 ó¼   • U R                  5        HH  n[        U5      [        L a  [        U/ SQUSS9  [        U5      [        L d  M7  UR                  U5        MJ     g )N)Ú0Ú1Ú2Tr<   )Úmodulesr@   r   r   r    rD   )r-   r:   Úms      r/   rD   Ú!QuantizableMobileNetV2.fuse_model:   sF   € Ø—‘–ˆAÜ�A‹wÔ.Ò.Ü˜a¢°&À$ÒGÜ�A‹wÔ5Ô5Ø—‘˜VÖ$ò	  r1   )rS   rR   r&   rF   rN   s   @r/   r   r   (   sL   ø† ð	%˜cð 	%¨Sð 	%°T÷ 	%ð˜ð  Fô ñ% ¨$¡ð %¸4÷ %ó %r1   r   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   éB   zOhttps://download.pytorch.org/models/quantized/mobilenet_v2_qnnpack_37f702c5.pthéà   )Ú	crop_sizeièz5 )r   r   ÚqnnpackzUhttps://github.com/pytorch/vision/tree/main/references/classification#qat-mobilenetv2zImageNet-1Kg'1¬êQ@gš™™™™‰V@)zacc@1zacc@5gÝ$�•CÓ?gü©ñÒMb@z«
                These weights were produced by doing Quantization Aware Training (eager mode) on top of the unquantized
                weights listed below.
            )
Ú
num_paramsÚmin_sizeÚ
categoriesÚbackendÚrecipeÚunquantizedÚ_metricsÚ_opsÚ
_file_sizeÚ_docs)ÚurlÚ
transformsÚmeta© N)rG   rH   rI   rJ   r   r   r   r   r   ÚIMAGENET1K_V1ÚIMAGENET1K_QNNPACK_V1ÚDEFAULTrL   rq   r1   r/   r   r   B   s_   † Ù#Ø]ÙÐ.¸#Ñ>à!ØØ.Ø ØmØ/×=Ñ=àØ#Ø#ñ ðð Øðñ
ñÐð0 $ƒGr1   r   Úquantized_mobilenet_v2)ÚnameÚ
pretrainedc                 óp   • U R                  SS5      (       a  [        R                  $ [        R                  $ )NÚquantizeF)Úgetr   rs   r   rr   )r#   s    r/   Ú<lambda>r{   b   s1   € à�z‰z˜* e×,Ñ,ô *×?Ñ?ð 4ä%×3Ñ3ð4r1   )ÚweightsNTF)r|   Úprogressry   r|   r}   ry   r#   r$   c                 ó®  • U(       a  [         O[        R                  U 5      n 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[        SS[        0UD6n[        U5        U(       a  [        XT5        U b  UR                  U R                  USS95        U$ )	az  
Constructs a MobileNetV2 architecture from
`MobileNetV2: Inverted Residuals and Linear Bottlenecks
<https://arxiv.org/abs/1801.04381>`_.

.. 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_V2_QuantizedWeights` or :class:`~torchvision.models.MobileNet_V2_Weights`, optional): The
        pretrained weights for the model. See
        :class:`~torchvision.models.quantization.MobileNet_V2_QuantizedWeights` 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.
    quantize (bool, optional): If True, returns a quantized version of the model. Default is False.
    **kwargs: parameters passed to the ``torchvision.models.quantization.QuantizableMobileNetV2``
        base class. Please refer to the `source code
        <https://github.com/pytorch/vision/blob/main/torchvision/models/quantization/mobilenetv2.py>`_
        for more details about this class.
.. autoclass:: torchvision.models.quantization.MobileNet_V2_QuantizedWeights
    :members:
.. autoclass:: torchvision.models.MobileNet_V2_Weights
    :members:
    :noindex:
Únum_classesrf   rg   rc   ÚblockT)r}   Ú
check_hashrq   )r   r   Úverifyr   r?   rp   Úpopr   r    r   r   Úload_state_dictÚget_state_dict)r|   r}   ry   r#   rg   Úmodels         r/   r   r   ^   s½   € ö\ 19Õ,Ô>R×ZÑZÐ[bÓc€GàÑÜ˜f m´S¸¿¹ÀlÑ9SÓ5TÔUØ˜Ÿ™Ó$Ü! &¨)°W·\±\À)Ñ5LÔMØ�j‰j˜ IÓ.€Gä"ÑOÔ)DÐOÈÑO€EÜ�%ÔÞÜ�uÔ&àÑØ×Ñ˜g×4Ñ4¸hÐSWÐ4ÐXÔYà€Lr1   )'Ú	functoolsr   Útypingr   r   r   Útorchr   r   Útorch.ao.quantizationr	   r
   Útorchvision.models.mobilenetv2r   r   r   Úops.miscr   Útransforms._presetsr   Ú_apir   r   r   Ú_metar   Ú_utilsr   r   Úutilsr   r   r   Ú__all__r    r   r   rK   r   rq   r1   r/   Ú<module>r“      sâ   ðÝ ß 'Ñ 'ç ß 8ß ^Ñ ^å ,Ý 6ß 7Ñ 7Ý (ß Cß ?Ñ ?ò€ôYÐ"2ô Yô"%˜[ô %ô4$ Kô $ñ8 Ð-Ñ.Ùàñ	
ðñ	ð UYØØò	3à�eÐ9Ð;OÐOÑPÑQð3ð ð3ð ð	3ð
 ð3ð ô3ó	ó /ñ3r1   