ó
    Eñi‡F  ã                   ó<  • 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JrJrJrJr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   / SQr! " S S\5      r" " S S\5      r# " S S\5      r$S\%\\"\#4      S\&\'   S\\   S\(S\(S\S\$4S jr)S\SSS S!.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/S0S1.S\\\+\4      S\(S\(S\S\$4
S2 jj5       5       r/\" S3S+9\" S,S4 4S.9SS/S0S1.S\\\,\4      S\(S\(S\S\$4
S5 jj5       5       r0\" S6S+9\" S,S7 4S.9SS/S0S1.S\\\-\4      S\(S\(S\S\$4
S8 jj5       5       r1\" S9S+9\" S,S: 4S.9SS/S0S1.S\\\.\4      S\(S\(S\S\$4
S; jj5       5       r2g)<é    )Úpartial)ÚAnyÚOptionalÚUnionN)ÚTensor)Ú
BasicBlockÚ
BottleneckÚResNetÚResNet18_WeightsÚResNet50_WeightsÚResNeXt101_32X8D_WeightsÚResNeXt101_64X4D_Weightsé   )ÚImageClassificationé   )Úregister_modelÚWeightsÚWeightsEnum)Ú_IMAGENET_CATEGORIES)Ú_ovewrite_named_paramÚhandle_legacy_interfaceé   )Ú_fuse_modulesÚ_replace_reluÚquantize_model)	ÚQuantizableResNetÚResNet18_QuantizedWeightsÚResNet50_QuantizedWeightsÚ!ResNeXt101_32X8D_QuantizedWeightsÚ!ResNeXt101_64X4D_QuantizedWeightsÚresnet18Úresnet50Úresnext101_32x8dÚresnext101_64x4dc                   ó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$ )ÚQuantizableBasicBlocké%   ÚargsÚkwargsÚreturnNc                 ó€   >• [         TU ]  " U0 UD6  [        R                  R                  R                  5       U l        g ©N)ÚsuperÚ__init__ÚtorchÚnnÚ	quantizedÚFloatFunctionalÚadd_relu©Úselfr(   r)   Ú	__class__s      €Úc/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torchvision/models/quantization/resnet.pyr.   ÚQuantizableBasicBlock.__init__&   s/   ø€ Ü‰Ò˜$Ð) &Ò)ÜŸ™×*Ñ*×:Ñ:Ó<ˆ�ó    Úxc                 ó&  • UnU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU R
                  b  U R                  U5      nU R                  R                  X25      nU$ r,   )Úconv1Úbn1ÚreluÚconv2Úbn2Ú
downsampler3   ©r5   r:   ÚidentityÚouts       r7   ÚforwardÚQuantizableBasicBlock.forward*   sy   € Øˆà�j‰j˜‹mˆØ�h‰h�s‹mˆØ�i‰i˜‹nˆà�j‰j˜‹oˆØ�h‰h�s‹mˆà�?‰?Ñ&Ø—‘ qÓ)ˆHà�m‰m×$Ñ$ SÓ3ˆàˆ
r9   Úis_qatc                 ó|   • [        U / SQSS//USS9  U R                  (       a  [        U R                  SS/USS9  g g )N©r<   r=   r>   r?   r@   T©ÚinplaceÚ0Ú1©r   rA   ©r5   rG   s     r7   Ú
fuse_modelÚ QuantizableBasicBlock.fuse_model;   s>   € Ü�dÒ5¸ÀÐ7GÐHÈ&ÐZ^Ò_Ø�?�?Ü˜$Ÿ/™/¨C°¨:°vÀtÓLð r9   )r3   r,   ©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r.   r   rE   r   ÚboolrP   Ú__static_attributes__Ú__classcell__©r6   s   @r7   r&   r&   %   sP   ø† ð=˜cð =¨Sð =°T÷ =ð˜ð  Fô ñ"M ¨$¡ð M¸4÷ Mó Mr9   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$ )ÚQuantizableBottleneckéA   r(   r)   r*   Nc                 óÐ   >• [         TU ]  " U0 UD6  [        R                  R	                  5       U l        [        R                  " SS9U l        [        R                  " SS9U l        g )NFrJ   )	r-   r.   r0   r1   r2   Úskip_add_reluÚReLUÚrelu1Úrelu2r4   s      €r7   r.   ÚQuantizableBottleneck.__init__B   sJ   ø€ Ü‰Ò˜$Ð) &Ò)ÜŸ\™\×9Ñ9Ó;ˆÔÜ—W’W UÑ+ˆŒ
Ü—W’W UÑ+ˆ�
r9   r:   c                 óŒ  • UnU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  b  U R                  U5      nU R                  R                  X25      nU$ r,   )r<   r=   ra   r?   r@   rb   Úconv3Úbn3rA   r_   r3   rB   s       r7   rE   ÚQuantizableBottleneck.forwardH   s¢   € ØˆØ�j‰j˜‹mˆØ�h‰h�s‹mˆØ�j‰j˜‹oˆØ�j‰j˜‹oˆØ�h‰h�s‹mˆØ�j‰j˜‹oˆà�j‰j˜‹oˆØ�h‰h�s‹mˆà�?‰?Ñ&Ø—‘ qÓ)ˆHØ× Ñ ×)Ñ)¨#Ó8ˆàˆ
r9   rG   c                 ó‚   • [        U / SQ/ SQSS//USS9  U R                  (       a  [        U R                  SS/USS9  g g )	N)r<   r=   ra   )r?   r@   rb   re   rf   TrJ   rL   rM   rN   rO   s     r7   rP   Ú QuantizableBottleneck.fuse_modelZ   sH   € ÜØÒ,Ò.GÈ'ÐSXÐIYÐZÐ\bÐlpò	
ð �?�?Ü˜$Ÿ/™/¨C°¨:°vÀtÓLð r9   )ra   rb   r_   r,   rR   rZ   s   @r7   r\   r\   A   sP   ø† ð,˜cð ,¨Sð ,°T÷ ,ð˜ð  Fô ñ$M ¨$¡ð M¸4÷ Mó Mr9   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   éb   r(   r)   r*   Nc                 óÚ   >• [         TU ]  " U0 UD6  [        R                  R                  R                  5       U l        [        R                  R                  R                  5       U l        g r,   )	r-   r.   r/   ÚaoÚquantizationÚ	QuantStubÚquantÚDeQuantStubÚdequantr4   s      €r7   r.   ÚQuantizableResNet.__init__c   sI   ø€ Ü‰Ò˜$Ð) &Ò)ä—X‘X×*Ñ*×4Ñ4Ó6ˆŒ
Ü—x‘x×,Ñ,×8Ñ8Ó:ˆ�r9   r:   c                 ól   • U R                  U5      nU R                  U5      nU R                  U5      nU$ r,   )rp   Ú_forward_implrr   )r5   r:   s     r7   rE   ÚQuantizableResNet.forwardi   s3   € Ø�J‰J�q‹Mˆð ×Ñ˜qÓ!ˆØ�L‰L˜‹OˆØˆr9   rG   c                 ó¼   • [        U / SQUSS9  U R                  5        H:  n[        U5      [        L d  [        U5      [        L d  M)  UR                  U5        M<     g)zûFuse conv/bn/relu modules in resnet models

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
rI   TrJ   N)r   ÚmodulesÚtyper\   r&   rP   )r5   rG   Úms      r7   rP   ÚQuantizableResNet.fuse_modelr   sH   € ô 	�dÒ4°fÀdÒKØ—‘–ˆAÜ�A‹wÔ/Ò/´4¸³7Ô>SÔ3SØ—‘˜VÖ$ò  r9   )rr   rp   r,   rR   rZ   s   @r7   r   r   b   sL   ø† ð;˜cð ;¨Sð ;°T÷ ;ð˜ð  Fô ñ
% ¨$¡ð 
%¸4÷ 
%ó 
%r9   r   ÚblockÚlayersÚ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0 UD6n[        U5        U(       a  [        Xv5        Ub  UR                  UR                  USS95        U$ )NÚnum_classesÚ
categoriesÚbackendÚfbgemmT)r   Ú
check_hash)	r   ÚlenÚmetaÚpopr   r   r   Úload_state_dictÚget_state_dict)r|   r}   r~   r   r€   r)   r„   Úmodels           r7   Ú_resnetr�      s¡   € ð ÑÜ˜f m´S¸¿¹ÀlÑ9SÓ5TÔUØ˜Ÿ™Ó$Ü! &¨)°W·\±\À)Ñ5LÔMØ�j‰j˜ HÓ-€Gä˜eÑ6¨vÑ6€EÜ�%ÔÞÜ�uÔ&àÑØ×Ñ˜g×4Ñ4¸hÐSWÐ4ÐXÔYà€Lr9   )r   r   r…   zdhttps://github.com/pytorch/vision/tree/main/references/classification#post-training-quantized-modelsz’
        These weights were produced by doing Post Training Quantization (eager mode) on top of the unquantized
        weights listed below.
    )Úmin_sizerƒ   r„   ÚrecipeÚ_docsc                   ód   • \ rS rSr\" S\" \SS90 \ES\R                  SSSS	.0S
SS.ES9r
\
rSrg)r   é¤   zJhttps://download.pytorch.org/models/quantized/resnet18_fbgemm_16fa66dd.pthéà   ©Ú	crop_sizei(^² úImageNet-1KgV-²�_Q@gœÄ °r8V@©zacc@1zacc@5g /Ý$ý?g`åÐ"Ûy&@©Ú
num_paramsÚunquantizedÚ_metricsÚ_opsÚ
_file_size©ÚurlÚ
transformsrˆ   © N)rS   rT   rU   rV   r   r   r   Ú_COMMON_METAr   ÚIMAGENET1K_V1ÚIMAGENET1K_FBGEMM_V1ÚDEFAULTrX   r¡   r9   r7   r   r   ¤   s[   † Ù"ØXÙÐ.¸#Ñ>ð
Øð
à"Ø+×9Ñ9àØ#Ø#ñ ðð Ø ò
ñÐð" #ƒGr9   r   c                   ó²   • \ rS rSr\" S\" \SS90 \ES\R                  SSSS	.0S
SS.ES9r
\" S\" \SSS90 \ES\R                  SSSS	.0S
SS.ES9r\rSrg)r   é¹   zJhttps://download.pytorch.org/models/quantized/resnet50_fbgemm_bf931d71.pthr“   r”   i(ø…r–   g{®GáúR@gj¼t“4W@r—   gB`åÐ"[@gü©ñÒMÂ8@r˜   rž   zJhttps://download.pytorch.org/models/quantized/resnet50_fbgemm-23753f79.pthéè   ©r•   Úresize_sizeg5^ºIT@gX9´Èv¾W@g‡ÙÎ÷ó8@r¡   N)rS   rT   rU   rV   r   r   r   r¢   r   r£   r¤   ÚIMAGENET1K_V2ÚIMAGENET1K_FBGEMM_V2r¥   rX   r¡   r9   r7   r   r   ¹   s±   † Ù"ØXÙÐ.¸#Ñ>ð
Øð
à"Ø+×9Ñ9àØ#Ø#ñ ðð Ø ò
ñÐñ" #ØXÙÐ.¸#È3ÑOð
Øð
à"Ø+×9Ñ9àØ#Ø#ñ ðð Ø ò
ñÐð" #ƒGr9   r   c                   ó²   • \ rS rSr\" S\" \SS90 \ES\R                  SSSS	.0S
SS.ES9r
\" S\" \SSS90 \ES\R                  SSSS	.0S
SS.ES9r\rSrg)r   éß   zQhttps://download.pytorch.org/models/quantized/resnext101_32x8_fbgemm_09835ccf.pthr“   r”   i(ÙJr–   gÉv¾Ÿ¿S@g…ëQ¸žW@r—   gD‹lçûi0@gV-‚U@r˜   rž   zQhttps://download.pytorch.org/models/quantized/resnext101_32x8_fbgemm-ee16d00c.pthr¨   r©   gÛù~j¼¤T@gœÄ °rX@gáz®G©U@r¡   N)rS   rT   rU   rV   r   r   r   r¢   r   r£   r¤   r«   r¬   r¥   rX   r¡   r9   r7   r   r   ß   s±   † Ù"Ø_ÙÐ.¸#Ñ>ð
Øð
à"Ø3×AÑAàØ#Ø#ñ ðð Ø ò
ñÐñ" #Ø_ÙÐ.¸#È3ÑOð
Øð
à"Ø3×AÑAàØ#Ø#ñ ðð Ø ò
ñÐð" #ƒGr9   r   c                   óh   • \ rS rSr\" S\" \SSS90 \ESS\R                  SS	S
S.0SSS.ES9r
\
rSrg)r    i  zRhttps://download.pytorch.org/models/quantized/resnext101_64x4d_fbgemm-605a1cb3.pthr“   r¨   r©   i(mùz+https://github.com/pytorch/vision/pull/5935r–   g¶óýÔx¹T@g¾Ÿ/ÝX@r—   gìQ¸…ë.@gÝ$�•cT@)r™   r�   rš   r›   rœ   r�   rž   r¡   N)rS   rT   rU   rV   r   r   r   r¢   r   r£   r¤   r¥   rX   r¡   r9   r7   r    r      s`   † Ù"Ø`ÙÐ.¸#È3ÑOð
Øð
à"ØCØ3×AÑAàØ#Ø#ñ ðð Ø ò
ñÐð$ #ƒGr9   r    Úquantized_resnet18)ÚnameÚ
pretrainedc                 óp   • U R                  SS5      (       a  [        R                  $ [        R                  $ ©Nr€   F)Úgetr   r¤   r   r£   ©r)   s    r7   Ú<lambda>r·     ó1   € à�z‰z˜* e×,Ñ,ô &×:Ñ:ð 0ä!×/Ñ/ð0r9   )r~   TF)r~   r   r€   c                 óp   • U(       a  [         O[        R                  U 5      n [        [        / SQXU40 UD6$ )aC  ResNet-18 model from
`Deep Residual Learning for Image Recognition <https://arxiv.org/abs/1512.03385>`_

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

.. autoclass:: torchvision.models.quantization.ResNet18_QuantizedWeights
    :members:

.. autoclass:: torchvision.models.ResNet18_Weights
    :members:
    :noindex:
)r   r   r   r   )r   r   Úverifyr�   r&   ©r~   r   r€   r)   s       r7   r!   r!     ó4   € ö^ -5Õ(Ô:J×RÑRÐSZÓ[€GäÔ(ª,¸È8Ñ^ÐW]Ñ^Ð^r9   Úquantized_resnet50c                 óp   • U R                  SS5      (       a  [        R                  $ [        R                  $ r´   )rµ   r   r¤   r   r£   r¶   s    r7   r·   r·   S  r¸   r9   c                 óp   • U(       a  [         O[        R                  U 5      n [        [        / SQXU40 UD6$ )aC  ResNet-50 model from
`Deep Residual Learning for Image Recognition <https://arxiv.org/abs/1512.03385>`_

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

.. autoclass:: torchvision.models.quantization.ResNet50_QuantizedWeights
    :members:

.. autoclass:: torchvision.models.ResNet50_Weights
    :members:
    :noindex:
)r   é   é   r   )r   r   rº   r�   r\   r»   s       r7   r"   r"   O  r¼   r9   Úquantized_resnext101_32x8dc                 óp   • U R                  SS5      (       a  [        R                  $ [        R                  $ r´   )rµ   r   r¤   r   r£   r¶   s    r7   r·   r·   ‡  ó1   € à�z‰z˜* e×,Ñ,ô .×BÑBð 8ä)×7Ñ7ð8r9   c                 ó¤   • U(       a  [         O[        R                  U 5      n [        USS5        [        USS5        [	        [
        / SQXU40 UD6$ )a�  ResNeXt-101 32x8d model from
`Aggregated Residual Transformation for Deep Neural Networks <https://arxiv.org/abs/1611.05431>`_

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

.. autoclass:: torchvision.models.quantization.ResNeXt101_32X8D_QuantizedWeights
    :members:

.. autoclass:: torchvision.models.ResNeXt101_32X8D_Weights
    :members:
    :noindex:
Úgroupsé    Úwidth_per_groupé   ©r   rÀ   é   r   )r   r   rº   r   r�   r\   r»   s       r7   r#   r#   ƒ  óM   € ö^ 5=Õ0ÔBZ×bÑbÐcjÓk€Gä˜& (¨BÔ/Ü˜&Ð"3°QÔ7ÜÔ(ª-¸ÈHÑ_ÐX^Ñ_Ð_r9   Úquantized_resnext101_64x4dc                 óp   • U R                  SS5      (       a  [        R                  $ [        R                  $ r´   )rµ   r    r¤   r   r£   r¶   s    r7   r·   r·   ½  rÄ   r9   c                 ó¤   • U(       a  [         O[        R                  U 5      n [        USS5        [        USS5        [	        [
        / SQXU40 UD6$ )a�  ResNeXt-101 64x4d model from
`Aggregated Residual Transformation for Deep Neural Networks <https://arxiv.org/abs/1611.05431>`_

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

.. autoclass:: torchvision.models.quantization.ResNeXt101_64X4D_QuantizedWeights
    :members:

.. autoclass:: torchvision.models.ResNeXt101_64X4D_Weights
    :members:
    :noindex:
rÆ   é@   rÈ   rÀ   rÊ   )r    r   rº   r   r�   r\   r»   s       r7   r$   r$   ¹  rÌ   r9   )3Ú	functoolsr   Útypingr   r   r   r/   Útorch.nnr0   r   Útorchvision.models.resnetr   r	   r
   r   r   r   r   Útransforms._presetsr   Ú_apir   r   r   Ú_metar   Ú_utilsr   r   Úutilsr   r   r   Ú__all__r&   r\   r   ry   ÚlistÚintrW   r�   r¢   r   r   r   r    r!   r"   r#   r$   r¡   r9   r7   Ú<module>rÝ      sA  ðÝ ß 'Ñ 'ã Ý Ý ÷÷ ñ õ 7ß 7Ñ 7Ý (ß Cß ?Ñ ?ò
€ôM˜Jô Mô8M˜Jô MôB%˜ô %ð:Ø�Ð+Ð-BÐBÑCÑDðà�‰Iðð �kÑ"ðð ð	ð
 ðð ðð ôð4 Ø&ØØtðñ	€ô# ô #ô*## ô ##ôL##¨ô ##ôL#¨ô #ñ, Ð)Ñ*Ùàñ	
ðñ	ð MQØØò	&_à�eÐ5Ð7GÐGÑHÑIð&_ð ð&_ð ð	&_ð
 ð&_ð ô&_ó	ó +ð&_ñR Ð)Ñ*Ùàñ	
ðñ	ð MQØØò	&_à�eÐ5Ð7GÐGÑHÑIð&_ð ð&_ð ð	&_ð
 ð&_ð ô&_ó	ó +ð&_ñR Ð1Ñ2Ùàñ	
ðñ	ð ]aØØò	(`à�eÐ=Ð?WÐWÑXÑYð(`ð ð(`ð ð	(`ð
 ð(`ð ô(`ó	ó 3ð(`ñV Ð1Ñ2Ùàñ	
ðñ	ð ]aØØò	(`à�eÐ=Ð?WÐWÑXÑYð(`ð ð(`ð ð	(`ð
 ð(`ð ô(`ó	ó 3ñ(`r9   