ó
    Eñi[«  ã                   óž  • S r SSKJrJrJr  SSKrSSKJs  Js  J	r
  SSKJs  Js  J	s  Jr  SSKJr  SSKJs  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
QrSS1r S\!\"   S\!\"   4S jr# " S S\5      r$ " S S\$5      r% " S S\$5      r& " S S\$5      r' " S S\$5      r( " S S\(5      r) " S S\(5      r* " S S\(5      r+g) zQuantized convolution modules.é    )ÚClassVarÚLiteralÚOptionalN)Úops)Ú	_size_1_t)Ú_pairÚ_singleÚ_triple)Úfuse_conv_bn_weightsé   )Ú_quantize_weightÚWeightedQuantizedModule)ÚConv1dÚConv2dÚConv3dÚConvTranspose1dÚConvTranspose2dÚConvTranspose3dÚzerosÚreflectÚpaddingÚreturnc                 ó–   ^ ^^• / n[        T 5      m[        T5       H)  mUR                  UUU 4S j[        S5       5       5        M+     U$ )Nc              3   ó:   >#   • U  H  nTTT-
  S -
     v •  M     g7f)r   N© )Ú.0Ú_ÚNÚidxr   s     €€€Ú_/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/ao/nn/quantized/modules/conv.pyÚ	<genexpr>Ú*_reverse_repeat_padding.<locals>.<genexpr>#   s   øé € Ð/WÊhÈ°¸¸C¹À!¹Ö0DÊhùs   ƒé   )ÚlenÚrangeÚextend)r   Ú _reversed_padding_repeated_twicer   r   s   ` @@r    Ú_reverse_repeat_paddingr(      s?   ú€ Ø24Ð$ÜˆG‹€AÜ�QŽxˆØ(×/Ñ/Ö/WÌeÐTUÌhÓ/WÖWñ à+Ð+ó    c                   ó6  ^ • \ rS rSr        SS jr   S SU 4S jjjrS rS rS rS r	U 4S jr
\R                  R                  S	 5       rU 4S
 jr\R                  R                  S 5       rS rS r\SS j5       r\SS j5       r\S 5       rSrU =r$ )Ú_ConvNdé'   c                 ó   • [         e©N©ÚNotImplementedError)ÚselfÚin_channelsÚout_channelsÚkernel_sizeÚstrider   ÚdilationÚgroupsÚbiasÚpadding_modeÚdeviceÚdtypes               r    Ú__init__Ú_ConvNd.__init__(   s
   € ô "Ð!r)   c           
      ó‚  >• XÍS.n[         TU ]  5         US::  a  [        SU 35      eX-  S:w  a  [        S5      eX)-  S:w  a  [        S5      eXl        X l        X0l        X@l        XPl        X`l        Xpl	        X€l
        X�l        U[        ;  a  [        SU S35      eX°l        U R                  (       a  XU R                  -  /nOX!U R                  -  /n[        R                  " U[!        U5      -   4SS[        R"                  S	.UR%                  5        VVs0 s H  u  nnUS
:w  d  M  UU_M     snnD6nU
(       aT  [        R&                  " U4S
[        R(                  0UR%                  5        VVs0 s H  u  nnUS
:w  d  M  UU_M     snnD6OS nU R+                  UU5        SU l        SU l        g s  snnf s  snnf )N©r:   r;   r   z)out_channels must be greater than 0, got z'in_channels must be divisible by groupsz(out_channels must be divisible by groupsz'padding_mode' z* is not supported by quantized convolutionr   )ÚscaleÚ
zero_pointr;   r;   g      ð?)Úsuperr<   Ú
ValueErrorr2   r3   r4   r5   r   r6   Ú
transposedÚoutput_paddingr7   Ú_SUPPORTED_PADDINGr9   ÚtorchÚ_empty_affine_quantizedÚlistÚqint8Úitemsr   ÚfloatÚset_weight_biasr@   rA   )r1   r2   r3   r4   r5   r   r6   rD   rE   r7   r8   r9   r:   r;   Úfactory_kwargsÚweight_shapeÚkÚvÚqweightÚ
bias_floatÚ	__class__s                       €r    Ú_initÚ_ConvNd._init9   sÕ  ø€ ð  %+Ñ;ˆÜ‰ÑÔà˜1ÓÜÐHÈÈÐWÓXÐXØÑ 1Ó$ÜÐFÓGÐGØÑ  AÓ%ÜÐGÓHÐHØ&ÔØ(ÔØ&ÔØŒØŒØ ŒØ$ŒØ,ÔØŒØÔ1Ó1ÜØ! , Ð/YÐZóð ð )Ôà�?�?Ø'¸¿¹Ñ)DÐE‰Là(¸¿¹Ñ*DÐEˆLÜ×/Ò/Øœ4 Ó,Ñ,ð
àØÜ—+‘+ñ	
ð
 !/× 4Ñ 4Ô 6ÔGÒ 6™˜˜1¸!¸w¹,‹tˆq�!ŠtÑ 6ÒGñ
ˆö ô �KŠKØñä—k‘kðð %3×$8Ñ$8Ô$:ÔKÒ$:™D˜A˜q¸aÀ7¹l“4�1�a’4Ñ$:ÒKòð ð 	ð 	×Ñ˜W jÔ1ØˆŒ
Øˆ�ùó Hùó Ls   ÄF5Ä*F5Å4F;ÆF;c                 ó   • [         er.   r/   )r1   rR   rS   s      r    rM   Ú_ConvNd.set_weight_biasz   ó   € Ü!Ð!r)   c                 ó   • [         er.   r/   ©r1   s    r    r8   Ú_ConvNd.bias}   rY   r)   c                 ó   • [         er.   r/   r[   s    r    Ú_weight_biasÚ_ConvNd._weight_bias€   rY   r)   c                 ó–  • SnU R                   S[        U R                   5      -  :w  a  US-  nU R                  S[        U R                  5      -  :w  a  US-  nU R                  S[        U R                  5      -  :w  a  US-  nU R                  S:w  a  US-  nU R                  5       c  US	-  nUR                  " S
0 U R                  D6$ )Nzq{in_channels}, {out_channels}, kernel_size={kernel_size}, stride={stride}, scale={scale}, zero_point={zero_point})r   z, padding={padding})r   z, dilation={dilation}z!, output_padding={output_padding}r   z, groups={groups}z, bias=Falser   )r   r$   r6   rE   r7   r8   ÚformatÚ__dict__)r1   Úss     r    Ú
extra_reprÚ_ConvNd.extra_reprƒ   sÅ   € ðHð 	
ð �<‰<˜4¤# d§l¡lÓ"3Ñ3Ó3ØÐ&Ñ&ˆAØ�=‰=˜D¤3 t§}¡}Ó#5Ñ5Ó5ØÐ(Ñ(ˆAØ×Ñ $¬¨T×-@Ñ-@Ó)AÑ"AÓAØÐ4Ñ4ˆAØ�;‰;˜!ÓØÐ$Ñ$ˆAØ�9‰9‹;ÑØ�ÑˆAØ�xŠxÑ(˜$Ÿ-™-Ñ(Ð(r)   c                 óú   >• [         TU ]  XU5        U R                  5       u  pEXAUS-   '   XQUS-   '   [        R                  " U R
                  5      XS-   '   [        R                  " U R                  5      XS-   '   g )NÚweightr8   r@   rA   )rB   Ú_save_to_state_dictr^   rG   Útensorr@   rA   )r1   ÚdestinationÚprefixÚ	keep_varsÚwÚbrT   s         €r    rh   Ú_ConvNd._save_to_state_dict    so   ø€ Ü‰Ñ# K¸ÔCØ×"Ñ"Ó$‰ˆØ)*�F˜XÑ%Ñ&Ø'(�F˜V‘OÑ$Ü(-¯ª°T·Z±ZÓ(@ˆ˜WÑ$Ñ%Ü-2¯\ª\¸$¿/¹/Ó-Jˆ˜\Ñ)Ò*r)   c                 óL  • U R                  5       u  pU R                  U R                  U R                  U R                  U R
                  U R                  U R                  U R                  U R                  U R                  UUU R                  U R                  U R                  4$ r.   )r^   r2   r3   r4   r5   r   r6   rD   rE   r7   r9   r@   rA   Útraining©r1   rm   rn   s      r    Ú__getstate__Ú_ConvNd.__getstate__¨   s‡   € à×"Ñ"Ó$‰ˆà×ÑØ×ÑØ×ÑØ�K‰KØ�L‰LØ�M‰MØ�O‰OØ×ÑØ�K‰KØ×ÑØØØ�J‰JØ�O‰OØ�M‰Mð
ð 	
r)   c           	      ó\  >• U R                  XS-      XS-      5        UR                  US-   5        UR                  US-   5        [        XS-      5      U l        UR                  US-   5        [	        XS-      5      U l        UR                  US-   5        [        TU ]  UUUSUUU5        g )Nrg   r8   r@   rA   F)rM   ÚpoprL   r@   ÚintrA   rB   Ú_load_from_state_dict)	r1   Ú
state_dictrk   Úlocal_metadataÚstrictÚmissing_keysÚunexpected_keysÚ
error_msgsrT   s	           €r    rx   Ú_ConvNd._load_from_state_dictÀ   s²   ø€ ð 	×Ñ˜Z°Ñ(9Ñ:¸JÐPVÁÑ<WÔXØ�‰�v Ñ(Ô)Ø�‰�v ‘Ô'Ü˜:¨wÑ&6Ñ7Ó8ˆŒ
Ø�‰�v Ñ'Ô(Ü˜j°,Ñ)>Ñ?Ó@ˆŒØ�‰�v Ñ,Ô-Ü‰Ñ%ØØØØØØØõ	
r)   c                 ó8  • US   U l         US   U l        US   U l        US   U l        US   U l        US   U l        US   U l        US   U l        US	   U l        US
   U l	        U R                  US   US   5        US   U l        US   U l        US   U l        g )Nr   r   r#   é   é   é   é   é   é   é	   é
   é   é   é   é   )r2   r3   r4   r5   r   r6   rD   rE   r7   r9   rM   r@   rA   rq   )r1   Ústates     r    Ú__setstate__Ú_ConvNd.__setstate__Û   s®   € à  ™8ˆÔØ! !™HˆÔØ  ™8ˆÔØ˜A‘hˆŒØ˜Q‘xˆŒØ˜a™ˆŒØ ™(ˆŒØ# A™hˆÔØ˜A‘hˆŒØ! !™HˆÔØ×Ñ˜U 2™Y¨¨b©	Ô2Ø˜2‘YˆŒ
Ø ™)ˆŒØ˜b™	ˆ�r)   c                 óà   • [        U 5      R                  [        U 5      5      n[        R                  R                  R                  U5        U R                  5       nUR                  U5        U$ r.   )ÚtypeÚ__new__rG   ÚnnÚModuler<   rs   rŽ   )r1   ÚmemoÚnew_instancer�   s       r    Ú__deepcopy__Ú_ConvNd.__deepcopy__ì   sR   € Ü˜D“z×)Ñ)¬$¨t«*Ó5ˆÜ�‰�‰× Ñ  Ô.Ø×!Ñ!Ó#ˆØ×!Ñ! %Ô(ØÐr)   c                 ó$   • U R                  0 5      $ r.   )r—   r[   s    r    Ú__copy__Ú_ConvNd.__copy__ó   s   € Ø× Ñ  Ó$Ð$r)   c                 óÐ  • Uc  UR                   R                  5       nU" UR                  5        UR                  [        R                  :w  a  [        SUR                   35      e[        UR                  R                  5       U5      nU " UR                  UR                  UR                  UR                  UR                  UR                  UR                  UR                  SLUR                   5	      nUR#                  XAR                  5        Ub  UR                  [        R                  :X  a  U$ UR%                  5       u  pg[        U5      Ul        [)        U5      Ul        U$ )z&Creates a qconv object and returns it.Nú0Weight observer must have a dtype of qint8, got )Úqconfigrg   r;   rG   rJ   ÚAssertionErrorr   rL   r2   r3   r4   r5   r   r6   r7   r8   r9   rM   Úcalculate_qparamsr@   rw   rA   )ÚclsÚmodÚactivation_post_processÚweight_post_processrR   ÚqconvÚ	act_scaleÚact_zps           r    Ú	get_qconvÚ_ConvNd.get_qconvö   s'  € ð Ñ&Ø"%§+¡+×"4Ñ"4Ó"6ÐÙ˜CŸJ™JÔ'Ø×$Ñ$¬¯©Ó3Ü ØBÐCV×C\ÑC\ÐB]Ð^óð ô # 3§:¡:×#3Ñ#3Ó#5Ð7JÓKˆáØ�O‰OØ×ÑØ�O‰OØ�J‰JØ�K‰KØ�L‰LØ�J‰JØ�H‰H˜DÐ Ø×Ñó

ˆð 	×Ñ˜g§x¡xÔ0à#Ñ+Ø&×,Ñ,´·±Ó;àˆLà 7× IÑ IÓ KÑˆIÜ 	Ó*ˆEŒKÜ" 6›{ˆEÔØˆLr)   c           
      óÜ  • [        US5      (       aã  [        U5      U R                  L a–  [        UR                  UR
                  UR                  R                  UR                  R                  UR                  R                  UR                  R                  UR                  R
                  5      u  Ul        Ul        [        US5      (       d  [        S5      eUR                  nUR                  nOç[        U5      U R                  LaE  [        SU R                   SU R                  R                   S[        U5      R                   35      e[        US5      (       d  [        S5      e[        US5      (       d  S OUR                  n[        U5      U R                  U R                   U R"                  4;   a  US	   nUR$                  R	                  5       nU R'                  XU5      $ )
NÚweight_fake_quantr£   z,Input QAT module must have observer attachedznnq.ú.from_float only works for z
 but got: rž   ú-Input float module must have qconfig defined.r   )Úhasattrr‘   Ú_NNIQAT_CONV_BN_MODULEr   rg   r8   ÚbnÚrunning_meanÚrunning_varÚepsrŸ   r«   r£   Ú_FLOAT_MODULEÚ__name__Ú_NNI_CONV_RELU_MODULEÚ_NNI_CONV_ADD_MODULEÚ_NNI_CONV_ADD_RELU_MODULErž   r¨   )r¡   r¢   Úuse_precomputed_fake_quantr¤   r£   s        r    Ú
from_floatÚ_ConvNd.from_float  s¦  € ä�3Ð+×,Ñ,ô �C‹y˜C×6Ñ6Ò6Ü';Ø—J‘JØ—H‘HØ—F‘F×'Ñ'Ø—F‘F×&Ñ&Ø—F‘F—J‘JØ—F‘F—M‘MØ—F‘F—K‘Kó(Ñ$�”
˜CœHô ˜3Ð 9×:Ñ:Ü$Ð%SÓTÐTØ"%×"7Ñ"7ÐØ&)×&AÑ&AÑ#ä�C‹y × 1Ñ 1Ò1Ü$Ø˜3Ÿ<™<˜.Ð(CØ×(Ñ(×1Ñ1Ð2°*¼TÀ#»Y×=OÑ=OÐ<PðRóð ô ˜3 	×*Ñ*Ü$Ð%TÓUÐUô ˜sÐ$=×>Ñ>ñ à×0Ñ0ð $ô
 �C‹yØ×)Ñ)Ø×(Ñ(Ø×-Ñ-ðó ð
 ˜!‘f�Ø"%§+¡+×"4Ñ"4Ó"6ÐØ�}‰}˜SÐ;NÓOÐOr)   c                 óÄ  • U " UR                   UR                  UR                  UR                  UR                  UR
                  UR                  UR                  SLUR                  UR                  R                  UR                  R                  S9nUR                  5       nUR                  XQR                  5        [        U5      Ul        [!        U5      Ul        U$ )aY  Create a (fbgemm/qnnpack) quantized module from a reference quantized module
Args:
    ref_qconv (Module): a reference quantized  module, either produced by torch.ao.quantization
                        utilities or provided by the user
    output_scale (float): scale for output Tensor
    output_zero_point (int): zero point for output Tensor
Nr?   )r2   r3   r4   r5   r   r6   r7   r8   r9   rg   r:   r;   Úget_quantized_weightrM   rL   r@   rw   rA   )r¡   Ú	ref_qconvÚoutput_scaleÚoutput_zero_pointr¥   rR   s         r    Úfrom_referenceÚ_ConvNd.from_referenceB  sÁ   € ñ Ø×!Ñ!Ø×"Ñ"Ø×!Ñ!Ø×ÑØ×ÑØ×ÑØ×ÑØ�N‰N $Ð&Ø×"Ñ"Ø×#Ñ#×*Ñ*Ø×"Ñ"×(Ñ(ñ
ˆð ×0Ñ0Ó2ˆØ×Ñ˜g§~¡~Ô6Ü˜LÓ)ˆŒÜÐ0Ó1ˆÔØˆr)   )r6   r7   r2   r4   r3   rE   r   r9   r@   r5   rq   rD   rA   ©r   r   r   r   Tr   NN)r   NN)r   Nr.   ©F)rµ   Ú
__module__Ú__qualname__Ú__firstlineno__r<   rU   rM   r8   r^   rd   rh   rG   ÚjitÚexportrs   rx   rŽ   r—   rš   Úclassmethodr¨   Ústaticmethodrº   rÁ   Ú__static_attributes__Ú__classcell__©rT   s   @r    r+   r+   '   sç   ø† ð ØØØØØØØô"ð: ØØð?ð 
÷?ð ?òB"ò"ò"ò)õ:Kð ‡Y�Y×Ññ
ó ð
õ.
ð6 ‡Y�Y×Ññ"ó ð"ò ò%ð ó ó ð ðD ó&Pó ð&PðP ñó ör)   r+   c                   ó   ^ • \ rS rSr% Sr\R                  r\\	\R                        \
S'   \R                  r\\\	\R                           \
S'   \R"                  r\\\	\R                           \
S'   Sr\\\	\R                           \
S'   Sr\\\	\R                           \
S'           SS	\S
\S\S\S\S\S\S\S\S   4U 4S jjjrS rS\R8                  S\\R8                     SS4S jrS rS rS r S r!\"S S j5       r#Sr$U =r%$ )!r   i_  a  Applies a 1D convolution over a quantized input signal composed of
several quantized input planes.

For details on input arguments, parameters, and implementation see
:class:`~torch.nn.Conv1d`.

.. note::
    Only `zeros` is supported for the :attr:`padding_mode` argument.

.. note::
    Only `torch.quint8` is supported for the input data type.


Attributes:
    weight (Tensor):     packed tensor derived from the learnable weight
                         parameter.
    scale (Tensor):      scalar for the output scale
    zero_point (Tensor): scalar for the output zero point

See :class:`~torch.nn.Conv1d` for other attributes.

Examples::

    >>> # xdoctest: +REQUIRES(env:TORCH_DOCTEST_QENGINE)
    >>> m = nn.quantized.Conv1d(16, 33, 3, stride=2)
    >>> input = torch.randn(20, 16, 100)
    >>> # quantize input to quint8
    >>> # xdoctest: +SKIP
    >>> q_input = torch.quantize_per_tensor(input, scale=1.0, zero_point=0,
    ...                                     dtype=torch.quint8)
    >>> output = m(q_input)

r´   r¯   r¶   Nr·   r¸   r2   r3   r4   r5   r   r6   r7   r8   r9   )r   r   Ú	replicateÚcircularc                 óÜ   >• X«S.n[        U5      n[        U5      n[        U[        5      (       a  UO
[        U5      n[        U5      n[        TU ]  " UUUUUUS[        S5      UUU	40 UD6  g ©Nr?   Fr   )r	   Ú
isinstanceÚstrrB   rU   ©r1   r2   r3   r4   r5   r   r6   r7   r8   r9   r:   r;   rN   rT   s                €r    r<   ÚConv1d.__init__ˆ  s   ø€ ð %+Ñ;ˆÜ˜kÓ*ˆÜ˜“ˆä'¨´×5Ñ5‘'¼7À7Ó;KˆÜ˜8Ó$ˆô 	‰ŠØØØØØØØÜ�A‹JØØØñ	
ð ó	
r)   c                 ó   • g)NÚQuantizedConv1dr   r[   s    r    Ú	_get_nameÚConv1d._get_name®  ó   € Ø r)   rm   rn   r   c                 óŒ  • U R                   S:X  a[  [        R                  R                  R	                  XU R
                  U R                  U R                  U R                  5      U l	        g [        R                  R                  R	                  XU R
                  [        S5      U R                  U R                  5      U l	        g ©Nr   r   )r9   rG   r   Ú	quantizedÚconv1d_prepackr5   r   r6   r7   Ú_packed_paramsr   rr   s      r    rM   ÚConv1d.set_weight_bias±  ó‚   € Ø×Ñ Ó'Ü"'§)¡)×"5Ñ"5×"DÑ"DØ�d—k‘k 4§<¡<°·±ÀÇÁó#ˆDÕô #(§)¡)×"5Ñ"5×"DÑ"DØ�d—k‘k¤5¨£8¨T¯]©]¸D¿K¹Kó#ˆDÕr)   c                 ór   • [         R                  R                  R                  U R                  5      u  pX4$ r.   )rG   r   rß   Úconv1d_unpackrá   rr   s      r    r^   ÚConv1d._weight_bias»  ó+   € Ü�y‰y×"Ñ"×0Ñ0°×1DÑ1DÓE‰ˆØˆtˆr)   c                 ó(   • U R                  5       S   $ ©Nr   ©r^   r[   s    r    rg   ÚConv1d.weight¿  ó   € Ø× Ñ Ó" 1Ñ%Ð%r)   c                 ó(   • U R                  5       S   $ ©Nr   rê   r[   s    r    r8   ÚConv1d.biasÂ  rì   r)   c                 óV  • [        UR                  5      S:w  a  [        S5      eU R                  S:w  a7  [	        U R
                  S S 5      n[        R                  " XU R                  S9n[        R                  R                  XR                  U R                  U R                  5      $ )Nr�   ú Input shape must be `(N, C, L)`!r   r   ©Úmode)r$   ÚshaperC   r9   r(   r   ÚFÚpadr   rß   Úconv1drá   r@   rA   ©r1   Úinputr'   s      r    ÚforwardÚConv1d.forwardÅ  sŽ   € ô ˆu�{‰{Ó˜qÓ ÜÐ?Ó@Ð@Ø×Ñ Ó'ä/FÀtÇ|Á|ÐTVÐUVÐGWÓ/XÐ,Ü—E’EØ¸d×>OÑ>OñˆEô �}‰}×#Ñ#Ø×&Ñ&¨¯
©
°D·O±Oó
ð 	
r)   c                 ó*   • [         R                  XUS9$ ©zºCreates a quantized module from a float module or qparams_dict.

Args:
    mod (Module): a float module, either produced by torch.ao.quantization
      utilities or provided by the user
)r¹   ©r+   rº   ©r¡   r¢   r¹   s      r    rº   ÚConv1d.from_floatÔ  ó"   € ô ×!Ñ!ØÐ1Kð "ð 
ð 	
r)   ©rá   rÃ   rÄ   )&rµ   rÅ   rÆ   rÇ   Ú__doc__r“   r   r´   r   r‘   Ú__annotations__ÚnniqatÚConvBn1dr¯   r   r”   ÚnniÚ
ConvReLU1dr¶   r·   r¸   rw   r   Úboolr   r<   rÚ   rG   ÚTensorrM   r^   rg   r8   rú   rÊ   rº   rÌ   rÍ   rÎ   s   @r    r   r   _  sy  ø‡ ñ ðD 02¯y©y€M�8˜D §¡™OÑ,Ó8ØBHÇ/Á/Ð˜H X¨d°2·9±9©oÑ%>Ñ?ÓQØADÇÁÐ˜8 H¨T°"·)±)©_Ñ$=Ñ>ÓOØ@DÐ˜( 8¨D°·±©OÑ#<Ñ=ÓDØEIÐ˜x¨°°b·i±i±Ñ(AÑBÓIð ØØØØØMTØØñ$
àð$
ð ð$
ð ð	$
ð
 ð$
ð ð$
ð ð$
ð ð$
ð ð$
ð ÐIÑJ÷$
ð $
òL!ð §¡ð °(¸5¿<¹<Ñ2Hð ÈTô òò&ò&ò
ð ó	
ó ö	
r)   r   c                   ó  ^ • \ rS rSr% Sr\R                  r\\	\R                        \
S'   \R                  r\\\	\R                           \
S'   \R"                  r\\\	\R                           \
S'   \R&                  r\\	\R&                        \
S'   \R*                  r\\	\R*                        \
S'           SU 4S	 jjrS
 rS\R4                  S\\R4                     SS4S jrS rS rS rS r\ SS j5       r!Sr"U =r#$ )r   iá  aI  Applies a 2D convolution over a quantized input signal composed of
several quantized input planes.

For details on input arguments, parameters, and implementation see
:class:`~torch.nn.Conv2d`.

.. note::
    Only `zeros` is supported for the :attr:`padding_mode` argument.

.. note::
    Only `torch.quint8` is supported for the input data type.


Attributes:
    weight (Tensor):     packed tensor derived from the learnable weight
                         parameter.
    scale (Tensor):      scalar for the output scale
    zero_point (Tensor): scalar for the output zero point

See :class:`~torch.nn.Conv2d` for other attributes.

Examples::

    >>> # xdoctest: +REQUIRES(env:TORCH_DOCTEST_QENGINE)
    >>> # With square kernels and equal stride
    >>> m = nn.quantized.Conv2d(16, 33, 3, stride=2)
    >>> # non-square kernels and unequal stride and with padding
    >>> m = nn.quantized.Conv2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2))
    >>> # non-square kernels and unequal stride and with padding and dilation
    >>> m = nn.quantized.Conv2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2), dilation=(3, 1))
    >>> input = torch.randn(20, 16, 50, 100)
    >>> # quantize input to quint8
    >>> # xdoctest: +SKIP
    >>> q_input = torch.quantize_per_tensor(input, scale=1.0, zero_point=0, dtype=torch.quint8)
    >>> output = m(q_input)

r´   r¯   r¶   r·   r¸   Nc                 ó®   >• X«S.n[        U5      n[        U5      n[        U5      n[        U5      n[        TU ]  " UUUUUUS[        S5      UUU	40 UD6  g rÓ   )r   rB   rU   rÖ   s                €r    r<   ÚConv2d.__init__  so   ø€ ð %+Ñ;ˆÜ˜KÓ(ˆÜ�v“ˆÜ˜“.ˆÜ˜“?ˆô 	‰ŠØØØØØØØÜ�!‹HØØØñ	
ð ó	
r)   c                 ó   • g)NÚQuantizedConv2dr   r[   s    r    rÚ   ÚConv2d._get_name2  rÜ   r)   rm   rn   r   c                 óŒ  • U R                   S:X  a[  [        R                  R                  R	                  XU R
                  U R                  U R                  U R                  5      U l	        g [        R                  R                  R	                  XU R
                  [        S5      U R                  U R                  5      U l	        g rÞ   )r9   rG   r   rß   Úconv2d_prepackr5   r   r6   r7   rá   r   rr   s      r    rM   ÚConv2d.set_weight_bias5  rã   r)   c                 ó6   • U R                   R                  5       $ r.   ©rá   Úunpackr[   s    r    r^   ÚConv2d._weight_bias?  ó   € Ø×"Ñ"×)Ñ)Ó+Ð+r)   c                 ó(   • U R                  5       S   $ ré   rê   r[   s    r    rg   ÚConv2d.weightB  rì   r)   c                 ó(   • U R                  5       S   $ rî   rê   r[   s    r    r8   ÚConv2d.biasE  rì   r)   c                 óP  • [        UR                  5      S:w  a  [        S5      eU R                  S:w  a4  [	        U R
                  5      n[        R                  " XU R                  S9n[        R                  R                  XR                  U R                  U R                  5      $ )Nr‚   ú#Input shape must be `(N, C, H, W)`!r   rò   )r$   rô   rC   r9   r(   r   rõ   rö   r   rß   Úconv2drá   r@   rA   rø   s      r    rú   ÚConv2d.forwardH  s…   € ô ˆu�{‰{Ó˜qÓ ÜÐBÓCÐCØ×Ñ Ó'Ü/FÀtÇ|Á|Ó/TÐ,Ü—E’EØ¸d×>OÑ>OñˆEô �}‰}×#Ñ#Ø×&Ñ&¨¯
©
°D·O±Oó
ð 	
r)   c                 ó*   • [         R                  XUS9$ rý   rþ   rÿ   s      r    rº   ÚConv2d.from_floatV  r  r)   r  rÃ   rÄ   )$rµ   rÅ   rÆ   rÇ   r  r“   r   r´   r   r‘   r  r  ÚConvBn2dr¯   r   r”   r  Ú
ConvReLU2dr¶   Ú	ConvAdd2dr·   ÚConvAddReLU2dr¸   r<   rÚ   rG   r
  rM   r^   rg   r8   rú   rÊ   rº   rÌ   rÍ   rÎ   s   @r    r   r   á  s  ø‡ ñ$ðL 02¯y©y€M�8˜D §¡™OÑ,Ó8ØBHÇ/Á/Ð˜H X¨d°2·9±9©oÑ%>Ñ?ÓQØADÇÁÐ˜8 H¨T°"·)±)©_Ñ$=Ñ>ÓOØ:=¿-¹-Ð˜( 4¨¯©Ñ#6Ñ7ÓGØCF×CTÑCTÐ˜x¨¨S×->Ñ->Ñ(?Ñ@ÓTð ØØØØØØØ÷"
òH!ð §¡ð °(¸5¿<¹<Ñ2Hð ÈTô ò,ò&ò&ò
ð ó	
ó ö	
r)   r   c                   óò  ^ • \ rS rSr% Sr\R                  r\\	\R                        \
S'   \R                  r\\\	\R                           \
S'   \R"                  r\\\	\R                           \
S'   Sr\\\	\R                           \
S'   Sr\\\	\R                           \
S'           SU 4S	 jjrS
 rS\R0                  S\\R0                     SS4S jrS rS rS rS r\SS j5       rSr U =r!$ )r   ic  aa  Applies a 3D convolution over a quantized input signal composed of
several quantized input planes.

For details on input arguments, parameters, and implementation see
:class:`~torch.nn.Conv3d`.

.. note::
    Only `zeros` is supported for the :attr:`padding_mode` argument.

.. note::
    Only `torch.quint8` is supported for the input data type.


Attributes:
    weight (Tensor):     packed tensor derived from the learnable weight
                         parameter.
    scale (Tensor):      scalar for the output scale
    zero_point (Tensor): scalar for the output zero point

See :class:`~torch.nn.Conv3d` for other attributes.

Examples::

    >>> # xdoctest: +REQUIRES(env:TORCH_DOCTEST_QENGINE)
    >>> # With square kernels and equal stride
    >>> m = nn.quantized.Conv3d(16, 33, 3, stride=2)
    >>> # non-square kernels and unequal stride and with padding
    >>> m = nn.quantized.Conv3d(16, 33, (3, 5, 5), stride=(1, 2, 2), padding=(1, 2, 2))
    >>> # non-square kernels and unequal stride and with padding and dilation
    >>> m = nn.quantized.Conv3d(16, 33, (3, 5, 5), stride=(1, 2, 2), padding=(1, 2, 2), dilation=(1, 2, 2))
    >>> input = torch.randn(20, 16, 56, 56, 56)
    >>> # quantize input to quint8
    >>> # xdoctest: +SKIP
    >>> q_input = torch.quantize_per_tensor(input, scale=1.0, zero_point=0, dtype=torch.quint8)
    >>> output = m(q_input)

r´   r¯   r¶   Nr·   r¸   c                 óÐ   >• U	S:X  a  [        S5      eX«S.n[        U5      n[        U5      n[        U5      n[        U5      n[        TU ]  " UUUUUUS[        S5      UUU	40 UD6  g )Nr   z*Conv3d does not support reflection paddingr?   Fr   )rŸ   r
   rB   rU   rÖ   s                €r    r<   ÚConv3d.__init__�  s…   ø€ ð ˜9Ó$Ü Ð!MÓNÐNØ$*Ñ;ˆÜ˜kÓ*ˆÜ˜“ˆÜ˜'Ó"ˆÜ˜8Ó$ˆô 	‰ŠØØØØØØØÜ�A‹JØØØñ	
ð ó	
r)   c                 ó   • g)NÚQuantizedConv3dr   r[   s    r    rÚ   ÚConv3d._get_name¶  rÜ   r)   rm   rn   r   c                 óŒ  • U R                   S:X  a[  [        R                  R                  R	                  XU R
                  U R                  U R                  U R                  5      U l	        g [        R                  R                  R	                  XU R
                  [        S5      U R                  U R                  5      U l	        g rÞ   )r9   rG   r   rß   Úconv3d_prepackr5   r   r6   r7   rá   r
   rr   s      r    rM   ÚConv3d.set_weight_bias¹  s‚   € Ø×Ñ Ó'Ü"'§)¡)×"5Ñ"5×"DÑ"DØ�d—k‘k 4§<¡<°·±ÀÇÁó#ˆDÕô #(§)¡)×"5Ñ"5×"DÑ"DØ�d—k‘k¤7¨1£:¨t¯}©}¸d¿k¹kó#ˆDÕr)   c                 ó6   • U R                   R                  5       $ r.   r  r[   s    r    r^   ÚConv3d._weight_biasÃ  r  r)   c                 ó(   • U R                  5       S   $ ré   rê   r[   s    r    rg   ÚConv3d.weightÆ  rì   r)   c                 ó(   • U R                  5       S   $ rî   rê   r[   s    r    r8   ÚConv3d.biasÉ  rì   r)   c                 óP  • [        UR                  5      S:w  a  [        S5      eU R                  S:w  a4  [	        U R
                  5      n[        R                  " XU R                  S9n[        R                  R                  XR                  U R                  U R                  5      $ )Nrƒ   z&Input shape must be `(N, C, D, H, W)`!r   rò   )r$   rô   rC   r9   r(   r   rõ   rö   r   rß   Úconv3drá   r@   rA   rø   s      r    rú   ÚConv3d.forwardÌ  s…   € ô ˆu�{‰{Ó˜qÓ ÜÐEÓFÐFØ×Ñ Ó'Ü/FÀtÇ|Á|Ó/TÐ,Ü—E’EØ¸d×>OÑ>OñˆEô �}‰}×#Ñ#Ø×&Ñ&¨¯
©
°D·O±Oó
ð 	
r)   c                 ó*   • [         R                  XUS9$ rý   rþ   rÿ   s      r    rº   ÚConv3d.from_floatÚ  r  r)   r  rÃ   rÄ   )"rµ   rÅ   rÆ   rÇ   r  r“   r   r´   r   r‘   r  r  ÚConvBn3dr¯   r   r”   r  Ú
ConvReLU3dr¶   r·   r¸   r<   rÚ   rG   r
  rM   r^   rg   r8   rú   rÊ   rº   rÌ   rÍ   rÎ   s   @r    r   r   c  s  ø‡ ñ$ðL 02¯y©y€M�8˜D §¡™OÑ,Ó8ØBHÇ/Á/Ð˜H X¨d°2·9±9©oÑ%>Ñ?ÓQØADÇÁÐ˜8 H¨T°"·)±)©_Ñ$=Ñ>ÓOØ@DÐ˜( 8¨D°·±©OÑ#<Ñ=ÓDØEIÐ˜x¨°°b·i±i±Ñ(AÑBÓIð ØØØØØØØ÷$
òL!ð §¡ð °(¸5¿<¹<Ñ2Hð ÈTô ò,ò&ò&ò
ð ó	
ó ö	
r)   r   c            	       óÚ   ^ • \ rS rSr% \\\R                  R                  R                        \
S'     SU 4S jjrS\\   S\\   S\\   S\\   4S jr\SS	 j5       r\S
 5       rSrU =r$ )Ú_ConvTransposeNdiê  r´   c                 ó”   >• US:w  a"  [        SU R                  R                   35      eXÍS.n[        TU ]  " UUUUUUUUU	U
U40 UD6  g )Nr   z+Only "zeros" padding mode is supported for r?   )rC   rT   rµ   rB   rU   )r1   r2   r3   r4   r5   r   r6   rD   rE   r7   r8   r9   r:   r;   rN   rT   s                  €r    r<   Ú_ConvTransposeNd.__init__í  sr   ø€ ð  ˜7Ó"ÜØ=¸d¿n¹n×>UÑ>UÐ=VÐWóð ð %+Ñ;ˆô 	‰ŠØØØØØØØØØØØñ	
ð ó	
r)   r4   r6   r   r   c                 óÖ   • [         R                  R                  [        [           / 5      n[        [        U5      5       H%  nX%   X   S-
  -  X5   -
  nUR                  U5        M'     U$ rî   )rG   rÈ   ÚannotaterI   rw   r%   r$   Úappend)r1   r4   r6   r   ÚresÚkdxrö   s          r    Ú_input_paddingÚ_ConvTransposeNd._input_padding  s_   € ô �i‰i× Ñ ¤¤c¡¨BÓ/ˆÜœ˜[Ó)Ö*ˆCØ‘- ;Ñ#3°aÑ#7Ñ8¸7¹<ÑGˆCØ�J‰J�sŽOñ +ð ˆ
r)   c                 óô  • SU R                   -   S-   U R                  R                   -   n[        U5      U R                  La  [        U5      e[	        US5      (       d  [        S5      eUR
                  R                  5       nU" UR                  5        UR                  [        R                  :w  a  [        SUR                   35      e[        UR                  R                  5       U5      nU " UR                  UR                  UR                  UR                  UR                   UR"                  UR$                  UR&                  SLUR(                  UR*                  5
      nUR-                  XQR&                  5        [	        US5      (       a(  UR.                  R                  [        R                  :X  a  U$ UR.                  R1                  5       u  px[        U5      Ul        [5        U5      Ul        U$ )z¹Creates a quantized module from a float module or qparams_dict.
Args:
    mod (Module): a float module, either produced by torch.ao.quantization
      utilities or provided by the user
z nnq.r¬   rž   r­   r�   Nr£   )rµ   r´   r‘   rŸ   r®   rž   rg   r;   rG   rJ   r   rL   r2   r3   r4   r5   r   rE   r7   r8   r6   r9   rM   r£   r    r@   rw   rA   )	r¡   r¢   r¹   Úmsgr¤   rR   r¥   r¦   r§   s	            r    rº   Ú_ConvTransposeNd.from_float  sª  € ð Ø�l‰lñà+ñ,ð ×Ñ×(Ñ(ñ)ð 	ô �‹9˜C×-Ñ-Ò-Ü  Ó%Ð%Ü�s˜I×&Ñ&Ü Ð!PÓQÐQØ!Ÿk™k×0Ñ0Ó2ÐÙ˜CŸJ™JÔ'Ø×$Ñ$¬¯©Ó3Ü ØBÐCV×C\ÑC\ÐB]Ð^óð ô # 3§:¡:×#3Ñ#3Ó#5Ð7JÓKˆñ Ø�O‰OØ×ÑØ�O‰OØ�J‰JØ�K‰KØ×ÑØ�J‰JØ�H‰H˜DÐ Ø�L‰LØ×Ñó
ˆð 	×Ñ˜g§x¡xÔ0ä˜Ð6×7Ñ7Ø×*Ñ*×0Ñ0´E·K±KÓ?àˆLà #× ;Ñ ;× MÑ MÓ OÑˆIÜ 	Ó*ˆEŒKÜ" 6›{ˆEÔØˆLr)   c                 óÚ  • U " UR                   UR                  UR                  UR                  UR                  UR
                  UR                  UR                  SLUR                  UR                  UR                  R                  UR                  R                  S9nUR                  5       nUR                  XQR                  5        [        U5      Ul        [#        U5      Ul        U$ )a[  Create a (fbgemm/qnnpack) quantized module from a reference quantized module
Args:
    ref_qconvt (Module): a reference quantized  module, either produced by torch.ao.quantization
                         utilities or provided by the user
    output_scale (float): scale for output Tensor
    output_zero_point (int): zero point for output Tensor
Nr?   )r2   r3   r4   r5   r   rE   r7   r8   r6   r9   rg   r:   r;   r½   rM   rL   r@   rw   rA   )r¡   Ú
ref_qconvtr¿   rÀ   r¥   rR   s         r    rÁ   Ú_ConvTransposeNd.from_referenceO  sÊ   € ñ Ø×"Ñ"Ø×#Ñ#Ø×"Ñ"Ø×ÑØ×ÑØ×%Ñ%Ø×ÑØ�O‰O 4Ð'Ø×ÑØ×#Ñ#Ø×$Ñ$×+Ñ+Ø×#Ñ#×)Ñ)ñ
ˆð ×1Ñ1Ó3ˆØ×Ñ˜g§¡Ô7Ü˜LÓ)ˆŒÜÐ0Ó1ˆÔØˆr)   r   )NNrÄ   )rµ   rÅ   rÆ   rÇ   r   r‘   r“   ÚmodulesÚconvr+   r  r<   rI   rw   rF  rÊ   rº   rË   rÁ   rÌ   rÍ   rÎ   s   @r    r>  r>  ê  s�   ø‡ Ø˜D §¡§¡×!8Ñ!8Ñ9Ñ:Ó:ð Ø÷$
ðLØ ™9ðØ04°S±	ðØDHÈÁIðà	ˆc‰ôð ó0ó ð0ðd ñó ör)   r>  c                   óø   ^ • \ rS rSr% Sr\R                  r\\	\R                        \
S'            SU 4S jjrS rS\R                  S\\R                     S	S4S
 jrS rS rS rS r\S 5       rSrU =r$ )r   im  a?  Applies a 1D transposed convolution operator over an input image
composed of several input planes.
For details on input arguments, parameters, and implementation see
:class:`~torch.nn.ConvTranspose1d`.

.. note:: Currently only the QNNPACK engine is implemented.
    Please, set the `torch.backends.quantized.engine = 'qnnpack'`

For special notes, please, see :class:`~torch.ao.nn.quantized.Conv1d`

Attributes:
    weight (Tensor):     packed tensor derived from the learnable weight
                         parameter.
    scale (Tensor):      scalar for the output scale
    zero_point (Tensor): scalar for the output zero point
See :class:`~torch.nn.ConvTranspose2d` for other attributes.

Examples::

    >>> # xdoctest: +REQUIRES(env:TORCH_DOCTEST_QENGINE)
    >>> torch.backends.quantized.engine = 'qnnpack'
    >>> from torch.ao.nn import quantized as nnq
    >>> # With square kernels and equal stride
    >>> m = nnq.ConvTranspose1d(16, 33, 3, stride=2)
    >>> # non-square kernels and unequal stride and with padding
    >>> m = nnq.ConvTranspose1d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2))
    >>> input = torch.randn(20, 16, 50)
    >>> q_input = torch.quantize_per_tensor(input, scale=1.0, zero_point=0, dtype=torch.quint8)
    >>> output = m(q_input)
    >>> # exact output size can be also specified as an argument
    >>> input = torch.randn(1, 16, 12)
    >>> q_input = torch.quantize_per_tensor(input, scale=1.0, zero_point=0, dtype=torch.quint8)
    >>> downsample = nnq.Conv1d(16, 16, 3, stride=2, padding=1)
    >>> upsample = nnq.ConvTranspose1d(16, 16, 3, stride=2, padding=1)
    >>> h = downsample(q_input)
    >>> h.size()
    torch.Size([1, 16, 6])
    >>> # xdoctest: +SKIP("FIXME: output_size is not a parameter)
    >>> output = upsample(h, output_size=input.size())
    >>> output.size()
    torch.Size([1, 16, 12])
r´   Nc                 ó²   >• X¼S.n[        U5      n[        U5      n[        U5      n[        U	5      n	[        U5      n[        TU ]  " UUUUUU	SUUUU
40 UD6  g ©Nr?   T)r	   rB   r<   ©r1   r2   r3   r4   r5   r   rE   r7   r8   r6   r9   r:   r;   rN   rT   s                 €r    r<   ÚConvTranspose1d.__init__›  óv   ø€ ð %+Ñ;ˆÜ˜kÓ*ˆÜ˜“ˆÜ˜'Ó"ˆÜ˜8Ó$ˆÜ  Ó0ˆä‰ÒØØØØØØØØØØØñ	
ð ó	
r)   c                 ó   • g)NÚQuantizedConvTranspose1dr   r[   s    r    rÚ   ÚConvTranspose1d._get_nameÀ  ó   € Ø)r)   rm   rn   r   c           	      óÐ   • [         R                  R                  R                  UUU R                  U R
                  U R                  U R                  U R                  5      U l	        g r.   )
rG   r   rß   Úconv_transpose1d_prepackr5   r   rE   r6   r7   rá   rr   s      r    rM   ÚConvTranspose1d.set_weight_biasÃ  óJ   € Ü#Ÿi™i×1Ñ1×JÑJØØØ�K‰KØ�L‰LØ×ÑØ�M‰MØ�K‰Kó
ˆÕr)   c                 ór   • [         R                  R                  R                  U R                  5      u  pX4$ r.   )rG   r   rß   Úconv_transpose1d_unpackrá   rr   s      r    r^   ÚConvTranspose1d._weight_biasÎ  s+   € Ü�y‰y×"Ñ"×:Ñ:¸4×;NÑ;NÓO‰ˆØˆtˆr)   c                 ó*   • U R                  5       u  pU$ r.   rê   ©r1   rm   r   s      r    rg   ÚConvTranspose1d.weightÒ  ó   € Ø×"Ñ"Ó$‰ˆØˆr)   c                 ó*   • U R                  5       u  pU$ r.   rê   ©r1   r   rn   s      r    r8   ÚConvTranspose1d.biasÖ  rd  r)   c                 óÜ   • [        UR                  5      S:w  a  [        S5      e[        R                  R
                  R                  XR                  U R                  U R                  5      $ )Nr�   rñ   )
r$   rô   rC   rG   r   rß   Úconv_transpose1drá   r@   rA   ©r1   rù   s     r    rú   ÚConvTranspose1d.forwardÚ  sS   € ô ˆu�{‰{Ó˜qÓ ÜÐ?Ó@Ð@Ü�y‰y×"Ñ"×3Ñ3Ø×&Ñ&¨¯
©
°D·O±Oó
ð 	
r)   c                 ó.   • [         R                  XX#5      $ r.   ©r>  rÁ   ©r¡   rL  r¿   rÀ   s       r    rÁ   ÚConvTranspose1d.from_referenceã  ó   € ä×.Ñ.Ø˜\ó
ð 	
r)   r  ©	r   r   r   r   Tr   r   NN)rµ   rÅ   rÆ   rÇ   r  r“   r   r´   r   r‘   r  r<   rÚ   rG   r
  r   rM   r^   rg   r8   rú   rÊ   rÁ   rÌ   rÍ   rÎ   s   @r    r   r   m  ó¢   ø‡ ñ)ðV 9;×8JÑ8J€M�8˜D ×!3Ñ!3Ñ4Ñ5ÓJð ØØØØØØØØ÷#
òJ*ð	
 §¡ð 	
°(¸5¿<¹<Ñ2Hð 	
ÈTô 	
òòòò
ð ñ
ó ö
r)   r   c                   óø   ^ • \ rS rSr% Sr\R                  r\\	\R                        \
S'            SU 4S jjrS rS\R                  S\\R                     S	S4S
 jrS rS rS rS r\S 5       rSrU =r$ )r   iê  aò  Applies a 2D transposed convolution operator over an input image
composed of several input planes.
For details on input arguments, parameters, and implementation see
:class:`~torch.nn.ConvTranspose2d`.

For special notes, please, see :class:`~torch.ao.nn.quantized.Conv2d`

Attributes:
    weight (Tensor):     packed tensor derived from the learnable weight
                         parameter.
    scale (Tensor):      scalar for the output scale
    zero_point (Tensor): scalar for the output zero point
See :class:`~torch.nn.ConvTranspose2d` for other attributes.

Examples::

    >>> # xdoctest: +REQUIRES(env:TORCH_DOCTEST_QENGINE)
    >>> # QNNPACK or FBGEMM as backend
    >>> torch.backends.quantized.engine = 'qnnpack'
    >>> # With square kernels and equal stride
    >>> import torch.ao.nn.quantized as nnq
    >>> m = nnq.ConvTranspose2d(16, 33, 3, stride=2)
    >>> # non-square kernels and unequal stride and with padding
    >>> m = nnq.ConvTranspose2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2))
    >>> input = torch.randn(20, 16, 50, 100)
    >>> q_input = torch.quantize_per_tensor(input, scale=1.0, zero_point=0, dtype=torch.quint8)
    >>> output = m(q_input)
    >>> # exact output size can be also specified as an argument
    >>> input = torch.randn(1, 16, 12, 12)
    >>> q_input = torch.quantize_per_tensor(input, scale=1.0, zero_point=0, dtype=torch.quint8)
    >>> downsample = nnq.Conv2d(16, 16, 3, stride=2, padding=1)
    >>> upsample = nnq.ConvTranspose2d(16, 16, 3, stride=2, padding=1)
    >>> h = downsample(q_input)
    >>> h.size()
    torch.Size([1, 16, 6, 6])
    >>> # xdoctest: +SKIP("FIXME: output_size is not a parameter)
    >>> output = upsample(h, output_size=input.size())
    >>> output.size()
    torch.Size([1, 16, 12, 12])
r´   Nc                 ó²   >• X¼S.n[        U5      n[        U5      n[        U5      n[        U	5      n	[        U5      n[        TU ]  " UUUUUU	SUUUU
40 UD6  g rR  )r   rB   r<   rS  s                 €r    r<   ÚConvTranspose2d.__init__  st   ø€ ð %+Ñ;ˆÜ˜KÓ(ˆÜ�v“ˆÜ˜“.ˆÜ˜“?ˆÜ˜~Ó.ˆä‰ÒØØØØØØØØØØØñ	
ð ó	
r)   c                 ó   • g)NÚQuantizedConvTranspose2dr   r[   s    r    rÚ   ÚConvTranspose2d._get_name;  rY  r)   rm   rn   r   c           	      óÐ   • [         R                  R                  R                  UUU R                  U R
                  U R                  U R                  U R                  5      U l	        g r.   )
rG   r   rß   Úconv_transpose2d_prepackr5   r   rE   r6   r7   rá   rr   s      r    rM   ÚConvTranspose2d.set_weight_bias>  r]  r)   c                 ór   • [         R                  R                  R                  U R                  5      u  pX4$ r.   )rG   r   rß   Úconv2d_unpackrá   rr   s      r    r^   ÚConvTranspose2d._weight_biasI  rç   r)   c                 ó*   • U R                  5       u  pU$ r.   rê   rb  s      r    rg   ÚConvTranspose2d.weightM  rd  r)   c                 ó*   • U R                  5       u  pU$ r.   rê   rf  s      r    r8   ÚConvTranspose2d.biasQ  rd  r)   c                 óÈ   • [        UR                  5      S:w  a  [        S5      e[        R                  R                  XR                  U R                  U R                  5      $ )Nr‚   r  )	r$   rô   rC   r   rß   Úconv_transpose2drá   r@   rA   rj  s     r    rú   ÚConvTranspose2d.forwardU  sM   € ô ˆu�{‰{Ó˜qÓ ÜÐBÓCÐCÜ�}‰}×-Ñ-Ø×&Ñ&¨¯
©
°D·O±Oó
ð 	
r)   c                 ó.   • [         R                  XX#5      $ r.   rm  rn  s       r    rÁ   ÚConvTranspose2d.from_reference^  rp  r)   r  rq  )rµ   rÅ   rÆ   rÇ   r  r“   r   r´   r   r‘   r  r<   rÚ   rG   r
  r   rM   r^   rg   r8   rú   rÊ   rÁ   rÌ   rÍ   rÎ   s   @r    r   r   ê  s¢   ø‡ ñ'ðR 9;×8JÑ8J€M�8˜D ×!3Ñ!3Ñ4Ñ5ÓJð ØØØØØØØØ÷#
òJ*ð	
 §¡ð 	
°(¸5¿<¹<Ñ2Hð 	
ÈTô 	
òòòò
ð ñ
ó ö
r)   r   c                   óø   ^ • \ rS rSr% Sr\R                  r\\	\R                        \
S'            SU 4S jjrS rS\R                  S\\R                     S	S4S
 jrS rS rS rS r\S 5       rSrU =r$ )r   ie  ac  Applies a 3D transposed convolution operator over an input image
composed of several input planes.
For details on input arguments, parameters, and implementation see
:class:`~torch.nn.ConvTranspose3d`.

.. note:: Currently only the FBGEMM engine is implemented.
    Please, set the `torch.backends.quantized.engine = 'fbgemm'`

For special notes, please, see :class:`~torch.ao.nn.quantized.Conv3d`

Attributes:
    weight (Tensor):     packed tensor derived from the learnable weight
                         parameter.
    scale (Tensor):      scalar for the output scale
    zero_point (Tensor): scalar for the output zero point
See :class:`~torch.nn.ConvTranspose3d` for other attributes.

Examples::

    >>> # xdoctest: +REQUIRES(env:TORCH_DOCTEST_QENGINE)
    >>> torch.backends.quantized.engine = 'fbgemm'
    >>> from torch.ao.nn import quantized as nnq
    >>> # With cubic kernels and equal stride
    >>> m = nnq.ConvTranspose3d(16, 33, 3, stride=2)
    >>> # non-cubic kernels and unequal stride and with padding
    >>> m = nnq.ConvTranspose3d(16, 33, (3, 3, 5), stride=(2, 1, 1), padding=(4, 2, 2))
    >>> input = torch.randn(20, 16, 50, 100, 100)
    >>> q_input = torch.quantize_per_tensor(input, scale=1.0, zero_point=0, dtype=torch.quint8)
    >>> output = m(q_input)
    >>> # exact output size can be also specified as an argument
    >>> input = torch.randn(1, 16, 12, 12, 12)
    >>> q_input = torch.quantize_per_tensor(input, scale=1.0, zero_point=0, dtype=torch.quint8)
    >>> downsample = nnq.Conv3d(16, 16, 3, stride=2, padding=1)
    >>> upsample = nnq.ConvTranspose3d(16, 16, 3, stride=2, padding=1)
    >>> h = downsample(q_input)
    >>> h.size()
    torch.Size([1, 16, 6, 6, 6])
    >>> # xdoctest: +SKIP("FIXME: output_size is not a parameter)
    >>> output = upsample(h, output_size=input.size())
    >>> output.size()
    torch.Size([1, 16, 12, 12, 12])
r´   Nc                 ó²   >• X¼S.n[        U5      n[        U5      n[        U5      n[        U	5      n	[        U5      n[        TU ]  " UUUUUU	SUUUU
40 UD6  g rR  )r
   rB   r<   rS  s                 €r    r<   ÚConvTranspose3d.__init__“  rU  r)   c                 ó   • g)NÚQuantizedConvTranspose3dr   r[   s    r    rÚ   ÚConvTranspose3d._get_name¸  rY  r)   rm   rn   r   c           	      óÐ   • [         R                  R                  R                  UUU R                  U R
                  U R                  U R                  U R                  5      U l	        g r.   )
rG   r   rß   Úconv_transpose3d_prepackr5   r   rE   r6   r7   rá   rr   s      r    rM   ÚConvTranspose3d.set_weight_bias»  r]  r)   c                 ór   • [         R                  R                  R                  U R                  5      u  pX4$ r.   )rG   r   rß   Úconv3d_unpackrá   rr   s      r    r^   ÚConvTranspose3d._weight_biasÆ  rç   r)   c                 ó*   • U R                  5       u  pU$ r.   rê   rb  s      r    rg   ÚConvTranspose3d.weightÊ  rd  r)   c                 ó*   • U R                  5       u  pU$ r.   rê   rf  s      r    r8   ÚConvTranspose3d.biasÎ  rd  r)   c                 óÈ   • [        UR                  5      S:w  a  [        S5      e[        R                  R                  XR                  U R                  U R                  5      $ )Nrƒ   z&Input shape must be `(N, C, T, H, W)`!)	r$   rô   rC   r   rß   Úconv_transpose3drá   r@   rA   rj  s     r    rú   ÚConvTranspose3d.forwardÒ  sM   € ô ˆu�{‰{Ó˜qÓ ÜÐEÓFÐFÜ�}‰}×-Ñ-Ø×&Ñ&¨¯
©
°D·O±Oó
ð 	
r)   c                 ó.   • [         R                  XX#5      $ r.   rm  rn  s       r    rÁ   ÚConvTranspose3d.from_referenceÛ  rp  r)   r  rq  )rµ   rÅ   rÆ   rÇ   r  r“   r   r´   r   r‘   r  r<   rÚ   rG   r
  r   rM   r^   rg   r8   rú   rÊ   rÁ   rÌ   rÍ   rÎ   s   @r    r   r   e  rr  r)   r   ),r  Útypingr   r   r   rG   Útorch.ao.nn.intrinsicÚaor“   Ú	intrinsicr  Útorch.ao.nn.intrinsic.qatÚqatr  Útorch.nnÚtorch.nn.functionalÚ
functionalrõ   Ú
torch._opsr   Útorch.nn.common_typesr   Útorch.nn.modules.utilsr   r	   r
   Útorch.nn.utilsr   Úutilsr   r   Ú__all__rF   rI   rw   r(   r+   r   r   r   r>  r   r   r   r   r)   r    Ú<module>r¬     sâ   ðá %ç .Ñ .ã ß #Ó #ß *Ö *Ý ß Ð Ý Ý +ß :Ñ :Ý /ç <ò€ð ˜yÐ)Ð ð, T¨#¡Yð ,°4¸±9ô ,ôuÐ%ô uôp	
ˆWô 
ôD
ˆWô 
ôDA
ˆWô A
ôN@�wô @ôFz
Ð&ô z
ôzx
Ð&ô x
ôvz
Ð&õ z
r)   