Ë
    þÍ:j  ã                   ój  — d dl mZ d dlmZmZmZ d dlmZmZ d dl	m
Z
mZ d dlmZmZmZ ddlmZ ddlmZ d	d
lmZmZmZ d	dlmZ d	dlmZmZ ddlmZmZm Z  g d¢Z! G d„ de«      Z" G d„ de«      Z# G d„ de«      Z$ ed¬«       edd„ f¬«      ddddœdeee$ef      d e%d!e%d"ed#e#f
d$„«       «       Z&y)%é    )Ú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                   óT   ‡ — e Zd Zdededdfˆ fd„Zdedefd„Zd
dee   ddfd	„Z	ˆ xZ
S )ÚQuantizableInvertedResidualÚargsÚkwargsÚreturnNc                 ój   •— t        ‰| �  |i |¤Ž t        j                  j	                  «       | _        y ©N)ÚsuperÚ__init__r   Ú	quantizedÚFloatFunctionalÚskip_add©Úselfr!   r"   Ú	__class__s      €ú€/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/torchvision/models/quantization/mobilenetv2.pyr'   z$QuantizableInvertedResidual.__init__   s)   ø€ Ü‰Ñ˜$Ð) &Ò)ÜŸ™×4Ñ4Ó6ˆ�ó    Úxc                 ó’   — | j                   r+| j                  j                  || j                  |«      «      S | j                  |«      S r%   )Úuse_res_connectr*   ÚaddÚconv©r,   r0   s     r.   Úforwardz#QuantizableInvertedResidual.forward   s8   € Ø×ÒØ—=‘=×$Ñ$ Q¨¯	©	°!«Ó5Ð5à—9‘9˜Q“<Ðr/   Úis_qatc           	      óü   — t        t        | j                  «      «      D ][  }t        | j                  |   «      t        j
                  u sŒ,t        | j                  t        |«      t        |dz   «      g|d¬«       Œ] y )Nr   T©Úinplace)ÚrangeÚlenr4   Útyper   ÚConv2dr   Ústr)r,   r7   Úidxs      r.   Ú
fuse_modelz&QuantizableInvertedResidual.fuse_model"   s]   € Üœ˜TŸY™Y›Ó(ò 	YˆCÜ�D—I‘I˜c‘NÓ#¤r§y¡yÒ0Ü˜dŸi™i¬#¨c«(´C¸¸a¹³LÐ)AÀ6ÐSWÖXñ	Yr/   r%   ©Ú__name__Ú
__module__Ú__qualname__r   r'   r   r6   r   ÚboolrA   Ú__classcell__©r-   s   @r.   r    r       sJ   ø„ ð7˜cð 7¨Sð 7°Tõ 7ð ˜ð   Fó  ñY ¨$¡ð Y¸4÷ Yr/   r    c                   óT   ‡ — e Zd Zdededdfˆ fd„Zdedefd„Zd
dee   ddfd	„Z	ˆ xZ
S )r   r!   r"   r#   Nc                 ó`   •— t        ‰| �  |i |¤Ž t        «       | _        t	        «       | _        y)zq
        MobileNet V2 main class

        Args:
           Inherits args from floating point MobileNetV2
        N)r&   r'   r
   Úquantr	   Údequantr+   s      €r.   r'   zQuantizableMobileNetV2.__init__)   s)   ø€ ô 	‰Ñ˜$Ð) &Ò)Ü“[ˆŒ
Ü"“}ˆ�r/   r0   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S r%   )rK   Ú_forward_implrL   r5   s     r.   r6   zQuantizableMobileNetV2.forward4   s1   € Ø�J‰J�q‹MˆØ×Ñ˜qÓ!ˆØ�L‰L˜‹OˆØˆr/   r7   c                 ó¸   — | j                  «       D ]G  }t        |«      t        u rt        |g d¢|d¬«       t        |«      t        u sŒ7|j                  |«       ŒI y )N)Ú0Ú1Ú2Tr9   )Úmodulesr=   r   r   r    rA   )r,   r7   Úms      r.   rA   z!QuantizableMobileNetV2.fuse_model:   sK   € Ø—‘“ò 	%ˆAÜ�A‹wÔ.Ñ.Ü˜a¢°&À$ÕGÜ�A‹wÔ5Ò5Ø—‘˜VÕ$ñ		%r/   r%   rB   rH   s   @r.   r   r   (   sG   ø„ ð	%˜cð 	%¨Sð 	%°Tõ 	%ð˜ð  Fó ñ% ¨$¡ð %¸4÷ %r/   r   c                   ój   — e Zd Z ed eed¬«      ddeddej                  dd	d
dœiddddœ
¬«      Z	e	Z
y)r   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ÚmetaN)rC   rD   rE   r   r   r   r   r   ÚIMAGENET1K_V1ÚIMAGENET1K_QNNPACK_V1ÚDEFAULT© r/   r.   r   r   B   s_   „ Ù#Ø]ÙÐ.¸#Ô>à!ØØ.Ø ØmØ/×=Ñ=àØ#Ø#ñ ðð Øðñ
ôÐð0 $�Gr/   r   Úquantized_mobilenet_v2)ÚnameÚ
pretrainedc                 óf   — | j                  dd«      rt        j                  S t        j                  S )NÚquantizeF)Úgetr   rg   r   rf   )r"   s    r.   ú<lambda>rp   b   s0   € à�z‰z˜* eÔ,ô *×?Ñ?ð ô &×3Ñ3ð r/   )ÚweightsNTF)rq   Úprogressrn   rq   rr   rn   r"   r#   c                 óš  — |rt         nt        j                  | «      } | �Kt        |dt	        | j
                  d   «      «       d| j
                  v rt        |d| j
                  d   «       |j                  dd«      }t        ddt        i|¤Ž}t        |«       |rt        ||«       | �"|j                  | j                  |d¬«      «       |S )	aÞ  
    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_classesr[   r\   rX   ÚblockT)rr   Ú
check_hashri   )r   r   Úverifyr   r<   re   Úpopr   r    r   r   Úload_state_dictÚget_state_dict)rq   rr   rn   r"   r\   Ú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Ô&àÐØ×Ñ˜g×4Ñ4¸hÐSWÐ4ÓXÔYà€Lr/   )'Ú	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   rF   r   ri   r/   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r/   