Ë
    þÍ:jY*  ã                   ó¤  — d dl Z d dlmZ d dlmZmZmZ d dlZd dlm	Z	 d dl
m	c mZ d dlmZ d dlmZ d dlmZ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jH                  «      Z% G d„ dejL                  «      Z' G d„ dejP                  «      Z) G d„ dejT                  «      Z+ G d„ dejX                  «      Z- G d„ dej\                  «      Z/ G d„ dej`                  «      Z1 G d„ dejd                  «      Z3 G d „ d!e«      Z4 ed"¬#«       ed$d%„ f¬&«      dd'd(d)œd*eee4ef      d+e5d,e5d-ed.e3f
d/„«       «       Z6y)0é    N)Úpartial)ÚAnyÚOptionalÚUnion)ÚTensor)Ú	inception)ÚInception_V3_WeightsÚInceptionOutputsé   )ÚImageClassificationé   )Úregister_modelÚWeightsÚWeightsEnum)Ú_IMAGENET_CATEGORIES)Ú_ovewrite_named_paramÚhandle_legacy_interfaceé   )Ú_fuse_modulesÚ_replace_reluÚquantize_model)ÚQuantizableInception3ÚInception_V3_QuantizedWeightsÚinception_v3c                   ó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 )ÚQuantizableBasicConv2dÚargsÚkwargsÚreturnNc                 óV   •— t        ‰| �  |i |¤Ž t        j                  «       | _        y ©N)ÚsuperÚ__init__ÚnnÚReLUÚrelu©Úselfr   r   Ú	__class__s      €ú~/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/torchvision/models/quantization/inception.pyr#   zQuantizableBasicConv2d.__init__   s"   ø€ Ü‰Ñ˜$Ð) &Ò)Ü—G‘G“Iˆ�	ó    Úxc                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S r!   ©ÚconvÚbnr&   )r(   r,   s     r*   ÚforwardzQuantizableBasicConv2d.forward   s.   € Ø�I‰I�a‹LˆØ�G‰G�A‹JˆØ�I‰I�a‹LˆØˆr+   Úis_qatc                 ó&   — t        | g d¢|d¬«       y )Nr.   T)Úinplace)r   )r(   r2   s     r*   Ú
fuse_modelz!QuantizableBasicConv2d.fuse_model%   s   € Ü�dÒ2°FÀDÖIr+   r!   )Ú__name__Ú
__module__Ú__qualname__r   r#   r   r1   r   Úboolr5   Ú__classcell__©r)   s   @r*   r   r      sJ   ø„ ð˜cð ¨Sð °Tõ ð˜ð  Fó ñJ ¨$¡ð J¸4÷ Jr+   r   c                   ó<   ‡ — e Zd Zdededdfˆ fd„Zdedefd„Zˆ xZS )ÚQuantizableInceptionAr   r   r   Nc                 óv   •— t        ‰| �  |dt        i|¤Ž t        j                  j                  «       | _        y ©NÚ
conv_block©r"   r#   r   r$   Ú	quantizedÚFloatFunctionalÚmyopr'   s      €r*   r#   zQuantizableInceptionA.__init__+   ó/   ø€ Ü‰Ñ˜$ÐLÔ+AÐLÀVÒLÜ—L‘L×0Ñ0Ó2ˆ�	r+   r,   c                 ó\   — | j                  |«      }| j                  j                  |d«      S ©Nr   ©Ú_forwardrD   Úcat©r(   r,   Úoutputss      r*   r1   zQuantizableInceptionA.forward/   ó%   € Ø—-‘- Ó"ˆØ�y‰y�}‰}˜W aÓ(Ð(r+   ©r6   r7   r8   r   r#   r   r1   r:   r;   s   @r*   r=   r=   )   ó0   ø„ ð3˜cð 3¨Sð 3°Tõ 3ð)˜ð ) F÷ )r+   r=   c                   ó<   ‡ — e Zd Zdededdfˆ fd„Zdedefd„Zˆ xZS )ÚQuantizableInceptionBr   r   r   Nc                 óv   •— t        ‰| �  |dt        i|¤Ž t        j                  j                  «       | _        y r?   rA   r'   s      €r*   r#   zQuantizableInceptionB.__init__6   rE   r+   r,   c                 ó\   — | j                  |«      }| j                  j                  |d«      S rG   rH   rK   s      r*   r1   zQuantizableInceptionB.forward:   rM   r+   rN   r;   s   @r*   rQ   rQ   4   rO   r+   rQ   c                   ó<   ‡ — e Zd Zdededdfˆ fd„Zdedefd„Zˆ xZS )ÚQuantizableInceptionCr   r   r   Nc                 óv   •— t        ‰| �  |dt        i|¤Ž t        j                  j                  «       | _        y r?   rA   r'   s      €r*   r#   zQuantizableInceptionC.__init__A   rE   r+   r,   c                 ó\   — | j                  |«      }| j                  j                  |d«      S rG   rH   rK   s      r*   r1   zQuantizableInceptionC.forwardE   rM   r+   rN   r;   s   @r*   rU   rU   ?   rO   r+   rU   c                   ó<   ‡ — e Zd Zdededdfˆ fd„Zdedefd„Zˆ xZS )ÚQuantizableInceptionDr   r   r   Nc                 óv   •— t        ‰| �  |dt        i|¤Ž t        j                  j                  «       | _        y r?   rA   r'   s      €r*   r#   zQuantizableInceptionD.__init__L   rE   r+   r,   c                 ó\   — | j                  |«      }| j                  j                  |d«      S rG   rH   rK   s      r*   r1   zQuantizableInceptionD.forwardP   rM   r+   rN   r;   s   @r*   rY   rY   J   rO   r+   rY   c                   óR   ‡ — e Zd Zdededdfˆ fd„Zdedee   fd„Zdedefd„Zˆ xZ	S )	ÚQuantizableInceptionEr   r   r   Nc                 ó  •— t        ‰| �  |dt        i|¤Ž t        j                  j                  «       | _        t        j                  j                  «       | _        t        j                  j                  «       | _        y r?   )	r"   r#   r   r$   rB   rC   Úmyop1Úmyop2Úmyop3r'   s      €r*   r#   zQuantizableInceptionE.__init__W   sW   ø€ Ü‰Ñ˜$ÐLÔ+AÐLÀVÒLÜ—\‘\×1Ñ1Ó3ˆŒ
Ü—\‘\×1Ñ1Ó3ˆŒ
Ü—\‘\×1Ñ1Ó3ˆ�
r+   r,   c                 óæ  — | j                  |«      }| j                  |«      }| j                  |«      | j                  |«      g}| j                  j                  |d«      }| j                  |«      }| j                  |«      }| j                  |«      | j                  |«      g}| j                  j                  |d«      }t        j                  |ddd¬«      }| j                  |«      }||||g}|S )Nr   r   )Úkernel_sizeÚstrideÚpadding)Ú	branch1x1Úbranch3x3_1Úbranch3x3_2aÚbranch3x3_2br_   rJ   Úbranch3x3dbl_1Úbranch3x3dbl_2Úbranch3x3dbl_3aÚbranch3x3dbl_3br`   ÚFÚ
avg_pool2dÚbranch_pool)r(   r,   rf   Ú	branch3x3Úbranch3x3dblrp   rL   s          r*   rI   zQuantizableInceptionE._forward]   sä   € Ø—N‘N 1Ó%ˆ	à×$Ñ$ QÓ'ˆ	Ø×&Ñ& yÓ1°4×3DÑ3DÀYÓ3OÐPˆ	Ø—J‘J—N‘N 9¨aÓ0ˆ	à×*Ñ*¨1Ó-ˆØ×*Ñ*¨<Ó8ˆà× Ñ  Ó.Ø× Ñ  Ó.ð
ˆð —z‘z—~‘~ l°AÓ6ˆä—l‘l 1°!¸AÀqÔIˆØ×&Ñ& {Ó3ˆà˜i¨°{ÐCˆØˆr+   c                 ó\   — | j                  |«      }| j                  j                  |d«      S rG   )rI   ra   rJ   rK   s      r*   r1   zQuantizableInceptionE.forwardr   s%   € Ø—-‘- Ó"ˆØ�z‰z�~‰~˜g qÓ)Ð)r+   )
r6   r7   r8   r   r#   r   ÚlistrI   r1   r:   r;   s   @r*   r]   r]   U   sG   ø„ ð4˜cð 4¨Sð 4°Tõ 4ð˜&ð  T¨&¡\ó ð**˜ð * F÷ *r+   r]   c                   ó,   ‡ — e Zd Zdededdfˆ fd„Zˆ xZS )ÚQuantizableInceptionAuxr   r   r   Nc                 ó0   •— t        ‰| �  |dt        i|¤Ž y r?   )r"   r#   r   r'   s      €r*   r#   z QuantizableInceptionAux.__init__y   s   ø€ Ü‰Ñ˜$ÐLÔ+AÐLÀVÓLr+   )r6   r7   r8   r   r#   r:   r;   s   @r*   rv   rv   w   s'   ø„ ðM˜cð M¨Sð M°T÷ Mñ Mr+   rv   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        ‰| �  |dt        t        t        t
        t        t        t        gi|¤Ž t        j                  j                  j                  «       | _        t        j                  j                  j                  «       | _        y )NÚinception_blocks)r"   r#   r   r=   rQ   rU   rY   r]   rv   ÚtorchÚaoÚquantizationÚ	QuantStubÚquantÚDeQuantStubÚdequantr'   s      €r*   r#   zQuantizableInception3.__init__~   st   ø€ Ü‰ÑØð	
ô 'Ü%Ü%Ü%Ü%Ü%Ü'ðð	
ð ò	
ô —X‘X×*Ñ*×4Ñ4Ó6ˆŒ
Ü—x‘x×,Ñ,×8Ñ8Ó:ˆ�r+   r,   c                 ój  — | j                  |«      }| j                  |«      }| j                  |«      \  }}| j                  |«      }| j                  xr | j
                  }t        j                  j                  «       r#|st        j                  d«       t        ||«      S | j                  ||«      S )NzIScripted QuantizableInception3 always returns QuantizableInception3 Tuple)Ú_transform_inputr   rI   r�   ÚtrainingÚ
aux_logitsr{   ÚjitÚis_scriptingÚwarningsÚwarnr
   Úeager_outputs)r(   r,   ÚauxÚaux_defineds       r*   r1   zQuantizableInception3.forward�   s�   € Ø×!Ñ! !Ó$ˆØ�J‰J�q‹MˆØ—‘˜qÓ!‰ˆˆ3Ø�L‰L˜‹OˆØ—m‘mÒ7¨¯©ˆÜ�9‰9×!Ñ!Ô#ÙÜ—‘ÐiÔjÜ# A sÓ+Ð+à×%Ñ% a¨Ó-Ð-r+   r2   c                 ót   — | j                  «       D ]%  }t        |«      t        u sŒ|j                  |«       Œ' y)a  Fuse conv/bn/relu modules in inception model

        Fuse conv+bn+relu/ conv+relu/conv+bn modules to prepare for quantization.
        Model is modified in place.  Note that this operation does not change numerics
        and the model after modification is in floating point
        N)ÚmodulesÚtyper   r5   )r(   r2   Úms      r*   r5   z QuantizableInception3.fuse_modelœ   s2   € ð —‘“ò 	%ˆAÜ�A‹wÔ0Ò0Ø—‘˜VÕ$ñ	%r+   r!   )r6   r7   r8   r   r#   r   r
   r1   r   r9   r5   r:   r;   s   @r*   r   r   }   sH   ø„ ð;˜cð ;¨Sð ;°Tõ ;ð".˜ð .Ð$4ó .ñ
% ¨$¡ð 
%¸4÷ 
%r+   r   c                   ól   — e Zd Z ed eedd¬«      ddeddej                  d	d
ddœiddddœ
¬«      Z	e	Z
y)r   zUhttps://download.pytorch.org/models/quantized/inception_v3_google_fbgemm-a2837893.pthi+  iV  )Ú	crop_sizeÚresize_sizei°rž)éK   r”   Úfbgemmzdhttps://github.com/pytorch/vision/tree/main/references/classification#post-training-quantized-modelszImageNet-1Kg%�•CKS@g-²�ï§VW@)zacc@1zacc@5g'1¬Ú@gL7‰A`%7@zª
                These weights were produced by doing Post Training Quantization (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)r6   r7   r8   r   r   r   r   r	   ÚIMAGENET1K_V1ÚIMAGENET1K_FBGEMM_V1ÚDEFAULT© r+   r*   r   r   ©   sa   „ Ù"ØcÙÐ.¸#È3ÔOà"Ø Ø.ØØ|Ø/×=Ñ=àØ#Ø#ñ ðð Ø ðñ
ôÐð0 #�Gr+   r   Úquantized_inception_v3)ÚnameÚ
pretrainedc                 óf   — | j                  dd«      rt        j                  S t        j                  S )NÚquantizeF)Úgetr   r¤   r	   r£   )r   s    r*   ú<lambda>r­   É   s0   € à�z‰z˜* eÔ,ô *×>Ñ>ð ô &×3Ñ3ð r+   )ÚweightsTF)r®   Úprogressr«   r®   r¯   r«   r   r   c                 ó6  — |rt         nt        j                  | «      } |j                  dd«      }| �id|vrt	        |dd«       t	        |dd«       t	        |dt        | j                  d   «      «       d| j                  v rt	        |d| j                  d   «       |j                  dd	«      }t        di |¤Ž}t        |«       |rt        ||«       | �F|r|sd|_        d|_        |j                  | j                  |d¬
«      «       |s|sd|_        d|_        |S )a¦  Inception v3 model architecture from
    `Rethinking the Inception Architecture for Computer Vision <http://arxiv.org/abs/1512.00567>`__.

    .. note::
        **Important**: In contrast to the other models the inception_v3 expects tensors with a size of
        N x 3 x 299 x 299, so ensure your images are sized accordingly.

    .. 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.Inception_V3_QuantizedWeights` or :class:`~torchvision.models.Inception_V3_Weights`, optional): The pretrained
            weights for the model. See
            :class:`~torchvision.models.quantization.Inception_V3_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, return a quantized version of the model.
            Default is False.
        **kwargs: parameters passed to the ``torchvision.models.quantization.QuantizableInception3``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/quantization/inception.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.quantization.Inception_V3_QuantizedWeights
        :members:

    .. autoclass:: torchvision.models.Inception_V3_Weights
        :members:
        :noindex:
    r…   FNÚtransform_inputTÚnum_classesr˜   r™   r•   )r¯   Ú
check_hashr¦   )r   r	   Úverifyr¬   r   Úlenr¢   Úpopr   r   r   r…   Ú	AuxLogitsÚload_state_dictÚget_state_dict)r®   r¯   r«   r   Úoriginal_aux_logitsr™   Úmodels          r*   r   r   Å   s  € ñh 19Õ,Ô>R×ZÑZÐ[bÓc€Gà Ÿ*™* \°5Ó9ÐØÐØ FÑ*Ü! &Ð*;¸TÔBÜ˜f l°DÔ9Ü˜f m´S¸¿¹ÀlÑ9SÓ5TÔUØ˜Ÿ™Ñ$Ü! &¨)°W·\±\À)Ñ5LÔMØ�j‰j˜ HÓ-€Gä!Ñ+ FÑ+€EÜ�%ÔÙÜ�u˜gÔ&àÐÙÑ/Ø$ˆEÔØ"ˆEŒOØ×Ñ˜g×4Ñ4¸hÐSWÐ4ÓXÔYÙÑ 3Ø$ˆEÔØ"ˆEŒOà€Lr+   )7rˆ   Ú	functoolsr   Útypingr   r   r   r{   Útorch.nnr$   Útorch.nn.functionalÚ
functionalrn   r   Útorchvision.modelsr   Úinception_moduleÚtorchvision.models.inceptionr	   r
   Útransforms._presetsr   Ú_apir   r   r   Ú_metar   Ú_utilsr   r   Úutilsr   r   r   Ú__all__ÚBasicConv2dr   Ú
InceptionAr=   Ú
InceptionBrQ   Ú
InceptionCrU   Ú
InceptionDrY   Ú
InceptionEr]   ÚInceptionAuxrv   Ú
Inception3r   r   r9   r   r¦   r+   r*   ú<module>rÒ      su  ðÛ Ý ß 'Ñ 'ã Ý ß Ð Ý Ý <ß Oå 6ß 7Ñ 7Ý (ß Cß ?Ñ ?ò€ôJÐ-×9Ñ9ô Jô)Ð,×7Ñ7ô )ô)Ð,×7Ñ7ô )ô)Ð,×7Ñ7ô )ô)Ð,×7Ñ7ô )ô*Ð,×7Ñ7ô *ôDMÐ.×;Ñ;ô Mô)%Ð,×7Ñ7ô )%ôX# Kô #ñ8 Ð-Ô.Ùàñ	
ðô	ð UYØØò	Cà�eÐ9Ð;OÐOÑPÑQðCð ðCð ð	Cð
 ðCð òCó	ó /ñCr+   