ó
    Eñi°  ã                   ó¢  • S SK r S SKJr  S SKJrJrJr  S SKrS SKJ	r	  S SK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Jr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\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)(é    N)Úpartial)ÚAnyÚOptionalÚUnion)ÚTensor)Ú
functionalé   )ÚImageClassificationé   )Úregister_modelÚWeightsÚWeightsEnum)Ú_IMAGENET_CATEGORIES)Ú_ovewrite_named_paramÚhandle_legacy_interface)ÚBasicConv2dÚ	GoogLeNetÚGoogLeNet_WeightsÚGoogLeNetOutputsÚ	InceptionÚInceptionAuxé   )Ú_fuse_modulesÚ_replace_reluÚquantize_model)ÚQuantizableGoogLeNetÚGoogLeNet_QuantizedWeightsÚ	googlenetc                   ó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$ )ÚQuantizableBasicConv2dé   ÚargsÚkwargsÚreturnNc                 óZ   >• [         TU ]  " U0 UD6  [        R                  " 5       U l        g ©N)ÚsuperÚ__init__ÚnnÚReLUÚrelu©Úselfr"   r#   Ú	__class__s      €Úf/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torchvision/models/quantization/googlenet.pyr(   ÚQuantizableBasicConv2d.__init__   s"   ø€ Ü‰Ò˜$Ð) &Ò)Ü—G’G“Iˆ�	ó    Úxc                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ r&   ©ÚconvÚbnr+   ©r-   r2   s     r/   ÚforwardÚQuantizableBasicConv2d.forward   s.   € Ø�I‰I�a‹LˆØ�G‰G�A‹JˆØ�I‰I�a‹LˆØˆr1   Úis_qatc                 ó    • [        U / SQUSS9  g )Nr4   T)Úinplace)r   )r-   r:   s     r/   Ú
fuse_modelÚ!QuantizableBasicConv2d.fuse_model$   s   € Ü�dÒ2°FÀDÓIr1   ©r+   r&   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r(   r   r8   r   Úboolr=   Ú__static_attributes__Ú__classcell__©r.   s   @r/   r    r       sP   ø† ð˜cð ¨Sð °T÷ ð˜ð  Fô ñJ ¨$¡ð J¸4÷ Jó Jr1   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	$ )
ÚQuantizableInceptioné(   r"   r#   r$   Nc                 óx   >• [         TU ]  " US[        0UD6  [        R                  R                  5       U l        g ©NÚ
conv_block)r'   r(   r    r)   Ú	quantizedÚFloatFunctionalÚcatr,   s      €r/   r(   ÚQuantizableInception.__init__)   s/   ø€ Ü‰Ò˜$ÐLÔ+AÐLÀVÒLÜ—<‘<×/Ñ/Ó1ˆ�r1   r2   c                 ó\   • U R                  U5      nU R                  R                  US5      $ )Nr   )Ú_forwardrP   )r-   r2   Úoutputss      r/   r8   ÚQuantizableInception.forward-   s%   € Ø—-‘- Ó"ˆØ�x‰x�|‰|˜G QÓ'Ð'r1   )rP   ©
r@   rA   rB   rC   r   r(   r   r8   rE   rF   rG   s   @r/   rI   rI   (   s5   ø† ð2˜cð 2¨Sð 2°T÷ 2ð(˜ð ( F÷ (ò (r1   rI   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	$ )
ÚQuantizableInceptionAuxé2   r"   r#   r$   Nc                 óf   >• [         TU ]  " US[        0UD6  [        R                  " 5       U l        g rL   )r'   r(   r    r)   r*   r+   r,   s      €r/   r(   Ú QuantizableInceptionAux.__init__4   s(   ø€ Ü‰Ò˜$ÐLÔ+AÐLÀVÒLÜ—G’G“Iˆ�	r1   r2   c                 ó  • [         R                  " US5      nU R                  U5      n[        R                  " US5      nU R                  U R                  U5      5      nU R                  U5      nU R                  U5      nU$ )N)é   r]   r   )	ÚFÚadaptive_avg_pool2dr5   ÚtorchÚflattenr+   Úfc1ÚdropoutÚfc2r7   s     r/   r8   ÚQuantizableInceptionAux.forward8   sh   € ä×!Ò! ! VÓ,ˆà�I‰I�a‹Lˆä�MŠM˜!˜QÓˆà�I‰I�d—h‘h˜q“kÓ"ˆà�L‰L˜‹Oˆà�H‰H�Q‹Kˆð ˆr1   r?   rV   rG   s   @r/   rX   rX   2   s5   ø† ð˜cð ¨Sð °T÷ ð˜ð  F÷ ò r1   rX   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   éJ   r"   r#   r$   Nc                 óü   >• [         TU ]  " US[        [        [        /0UD6  [
        R                  R                  R                  5       U l	        [
        R                  R                  R                  5       U l        g )NÚblocks)r'   r(   r    rI   rX   r`   ÚaoÚquantizationÚ	QuantStubÚquantÚDeQuantStubÚdequantr,   s      €r/   r(   ÚQuantizableGoogLeNet.__init__L   sb   ø€ Ü‰ÒØð	
Ü1Ô3GÔI`Ðað	
Øekò	
ô —X‘X×*Ñ*×4Ñ4Ó6ˆŒ
Ü—x‘x×,Ñ,×8Ñ8Ó:ˆ�r1   r2   c                 óŠ  • U R                  U5      nU R                  U5      nU R                  U5      u  pnU R                  U5      nU R                  =(       a    U R
                  n[        R                  R                  5       (       a)  U(       d  [        R                  " S5        [        XU5      $ U R                  XU5      $ )NzCScripted QuantizableGoogleNet always returns GoogleNetOutputs Tuple)Ú_transform_inputrm   rS   ro   ÚtrainingÚ
aux_logitsr`   ÚjitÚis_scriptingÚwarningsÚwarnr   Úeager_outputs)r-   r2   Úaux1Úaux2Úaux_defineds        r/   r8   ÚQuantizableGoogLeNet.forwardS   s“   € Ø×!Ñ! !Ó$ˆØ�J‰J�q‹MˆØŸ™ aÓ(‰ˆ�Ø�L‰L˜‹OˆØ—m‘m×7¨¯©ˆÜ�9‰9×!Ñ!×#Ñ#ÞÜ—’ÐcÔdÜ# A¨TÓ2Ð2à×%Ñ% a¨tÓ4Ð4r1   r:   c                 ó|   • U R                  5        H(  n[        U5      [        L d  M  UR                  U5        M*     g)zýFuse conv/bn/relu modules in googlenet 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    r=   )r-   r:   Úms      r/   r=   ÚQuantizableGoogLeNet.fuse_model`   s-   € ð —‘–ˆAÜ�A‹wÔ0Ô0Ø—‘˜VÖ$ò  r1   )ro   rm   r&   )r@   rA   rB   rC   r   r(   r   r   r8   r   rD   r=   rE   rF   rG   s   @r/   r   r   J   sM   ø† ð;˜cð ;¨Sð ;°T÷ ;ð5˜ð 5Ð$4ô 5ñ
% ¨$¡ð 
%¸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   ém   zKhttps://download.pytorch.org/models/quantized/googlenet_fbgemm-c81f6644.pthéà   )Ú	crop_sizeiˆe )é   r‡   Úfbgemmzdhttps://github.com/pytorch/vision/tree/main/references/classification#post-training-quantized-modelszImageNet-1Kg¾Ÿ/ÝtQ@g`åÐ"ÛYV@)zacc@1zacc@5g+‡ÙÎ÷÷?g#Ûù~j<)@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Úmeta© N)r@   rA   rB   rC   r   r   r
   r   r   ÚIMAGENET1K_V1ÚIMAGENET1K_FBGEMM_V1ÚDEFAULTrE   r–   r1   r/   r   r   m   s_   † Ù"ØYÙÐ.¸#Ñ>à!Ø Ø.ØØ|Ø,×:Ñ:àØ#Ø#ñ ðð Ø ðñ
ñÐð0 #ƒGr1   r   Úquantized_googlenet)ÚnameÚ
pretrainedc                 óp   • U R                  SS5      (       a  [        R                  $ [        R                  $ )NÚquantizeF)Úgetr   r˜   r   r—   )r#   s    r/   Ú<lambda>r    �   s1   € à�z‰z˜* e×,Ñ,ô '×;Ñ;ð 1ä"×0Ñ0ð1r1   )ÚweightsTF)r¡   Úprogressrž   r¡   r¢   rž   r#   r$   c                 óˆ  • U(       a  [         O[        R                  U 5      n UR                  SS5      nU bz  SU;  a  [	        USS5        [	        USS5        [	        USS5        [	        US[        U R                  S   5      5        S	U R                  ;   a  [	        US	U R                  S	   5        UR                  S	S
5      n[        S0 UD6n[        U5        U(       a  [        Xe5        U bS  UR                  U R                  USS95        U(       d  SUl        SUl        SUl        U$ [         R"                  " S5        U$ )a\  GoogLeNet (Inception v1) model architecture from `Going Deeper with Convolutions <http://arxiv.org/abs/1409.4842>`__.

.. 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.GoogLeNet_QuantizedWeights` or :class:`~torchvision.models.GoogLeNet_Weights`, optional): The
        pretrained weights for the model. See
        :class:`~torchvision.models.quantization.GoogLeNet_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.QuantizableGoogLeNet``
        base class. Please refer to the `source code
        <https://github.com/pytorch/vision/blob/main/torchvision/models/quantization/googlenet.py>`_
        for more details about this class.

.. autoclass:: torchvision.models.quantization.GoogLeNet_QuantizedWeights
    :members:

.. autoclass:: torchvision.models.GoogLeNet_Weights
    :members:
    :noindex:
rt   FNÚtransform_inputTÚinit_weightsÚnum_classesr‹   rŒ   rˆ   )r¢   Ú
check_hashz`auxiliary heads in the pretrained googlenet model are NOT pretrained, so make sure to train themr–   )r   r   ÚverifyrŸ   r   Úlenr•   Úpopr   r   r   Úload_state_dictÚget_state_dictrt   rz   r{   rw   rx   )r¡   r¢   rž   r#   Úoriginal_aux_logitsrŒ   Úmodels          r/   r   r   ‰   s(  € ö\ .6Õ)Ô;L×TÑTÐU\Ó]€Gà Ÿ*™* \°5Ó9ÐØÑØ FÓ*Ü! &Ð*;¸TÔBÜ˜f l°DÔ9Ü˜f n°eÔ<Ü˜f m´S¸¿¹ÀlÑ9SÓ5TÔUØ˜Ÿ™Ó$Ü! &¨)°W·\±\À)Ñ5LÔMØ�j‰j˜ HÓ-€Gä Ñ* 6Ñ*€EÜ�%ÔÞÜ�uÔ&àÑØ×Ñ˜g×4Ñ4¸hÐSWÐ4ÐXÔYÞ"Ø$ˆEÔØˆEŒJØˆEŒJð €Lô	 �MŠMØrôð €Lr1   )*rw   Ú	functoolsr   Útypingr   r   r   r`   Útorch.nnr)   r   r   r^   Útransforms._presetsr
   Ú_apir   r   r   Ú_metar   Ú_utilsr   r   r   r   r   r   r   r   r   Úutilsr   r   r   Ú__all__r    rI   rX   r   r   rD   r–   r1   r/   Ú<module>r¸      s  ðÛ Ý ß 'Ñ 'ã Ý Ý Ý $å 6ß 7Ñ 7Ý (ß Cß l× lß ?Ñ ?ò€ôJ˜[ô Jô(˜9ô (ô˜lô ô0 %˜9ô  %ôF# ô #ñ8 Ð*Ñ+Ùàñ	
ðñ	ð OSØØò	@à�eÐ6Ð8IÐIÑJÑKð@ð ð@ð ð	@ð
 ð@ð ô@ó	ó ,ñ@r1   