ó
    Eñib'  ã                   ó:  • S SK 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  S SKJrJrJr  / SQr " S S\R"                  R$                  R&                  5      r " S	 S
\\R(                  5      r " S S\\R*                  5      r " S S\\R,                  5      rg)é    )ÚClassVarÚLiteralN)Ú_FusedModule)Ú	_size_1_tÚ	_size_2_tÚ	_size_3_t)Ú_pairÚ_singleÚ_triple)ÚConv1dÚConv2dÚConv3dc                   ó
  • \ rS rSr% \\\R                  R                  R                        \
S'      SS\S\S\\S4   S\\S4   S	\\\S4   -  S
\\S4   S\S\\S4   S\S\S\S   SS4S jjrS r\SS j5       rS rSrg)Ú_ConvNdé   Ú_FLOAT_MODULENÚin_channelsÚout_channelsÚkernel_size.ÚstrideÚpaddingÚdilationÚ
transposedÚoutput_paddingÚgroupsÚbiasÚpadding_mode©ÚzerosÚreflectÚ	replicateÚcircularÚreturnc                 óä   • XÞS.n[         R                  R                  R                  R                  " U UUUUUUUUU	U
U40 UD6  U(       d  [        S5      eXÀl        UR                  US9U l        g )N)ÚdeviceÚdtypez'qconfig must be provided for QAT module)Úfactory_kwargs)	ÚnnÚmodulesÚconvr   Ú__init__ÚAssertionErrorÚqconfigÚweightÚweight_fake_quant)Úselfr   r   r   r   r   r   r   r   r   r   r   r-   r%   r&   r'   s                   ÚY/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/ao/nn/qat/modules/conv.pyr+   Ú_ConvNd.__init__   s   € ð" %+Ñ;ˆÜ
�
‰
�‰×Ñ×(Ò(ØØØØØØØØØØØØñ	
ð ò	
ö Ü Ð!JÓKÐKØŒØ!(§¡¸~ Ð!NˆÕó    c                 ól   • U R                  XR                  U R                  5      U R                  5      $ ©N©Ú_conv_forwardr/   r.   r   ©r0   Úinputs     r1   ÚforwardÚ_ConvNd.forward7   ó(   € Ø×!Ñ! %×)?Ñ)?ÀÇÁÓ)LÈdÏiÉiÓXÐXr3   c                 ó¨  • [        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R
                  (       d  [        S5      e[        [        U5      [        5      (       a  US   nUR
                  nU " UR                  UR                  UR                  UR                  UR                  UR                  UR                  UR                  SLUR                   US	9
nUR"                  Ul        UR                  Ul        U$ )
z•Create a qat module from a float module

Args:
   `mod`: a float module, either produced by torch.ao.quantization utilities
   or directly from user
zqat.z.from_float only works for z, got r-   z,Input float module must have qconfig definedz,Input float module must have a valid qconfigr   N)r   r   r   r   r   r   r-   )Útyper   r,   Ú__name__Úhasattrr-   Ú
issubclassr   r   r   r   r   r   r   r   r   r   r.   )ÚclsÚmodÚuse_precomputed_fake_quantr-   Úqat_convs        r1   Ú
from_floatÚ_ConvNd.from_float:   s  € ô �‹9˜C×-Ñ-Ò-Ü Ø�s—|‘|�nÐ$?Ø×$Ñ$×-Ñ-Ð.¨f´T¸#³Y×5GÑ5GÐ4HðJóð ô �s˜I×&Ñ&Ü Ð!OÓPÐPØ�{�{Ü Ð!OÓPÐPÜ”d˜3“i¤×.Ñ.Ø�a‘&ˆCØ—+‘+ˆÙØ�O‰OØ×ÑØ�O‰OØ—:‘:Ø—K‘KØ—\‘\Ø—:‘:Ø—‘ Ð%Ø×)Ñ)Øñ
ˆð Ÿ*™*ˆŒØŸ™ˆŒØˆr3   c                 ó,  • [        U 5      nUR                  U R                  U R                  U R                  U R
                  U R                  U R                  U R                  U R                  SLU R                  5	      n[        R                  R                  U R                  R                  5       5      Ul        U R                  b<  [        R                  R                  U R                  R                  5       5      Ul	        [!        U["        5      (       ay  U/n[%        US5      (       d  ['        UR(                   S35      eUR+                  5       nUR-                  U5        UR.                  " U6 nUR1                  U R2                  5        U$ U$ )zzThis works for both single qat conv, and the qat conv - relu modules
to convert the qat module to a floating point module
NÚ_FLOAT_RELU_MODULEz' must have _FLOAT_RELU_MODULE attribute)r>   Ú_FLOAT_CONV_MODULEr   r   r   r   r   r   r   r   r   Útorchr(   Ú	Parameterr.   ÚdetachrA   r   r@   r,   r?   rI   Úappendr   ÚtrainÚtraining)r0   rB   r*   r)   ÚreluÚfuseds         r1   Úto_floatÚ_ConvNd.to_float^   sA  € ô �4‹jˆØ×%Ñ%Ø×ÑØ×ÑØ×ÑØ�K‰KØ�L‰LØ�M‰MØ�K‰KØ�I‰I˜TÐ!Ø×Ñó

ˆô —h‘h×(Ñ(¨¯©×);Ñ);Ó)=Ó>ˆŒØ�9‰9Ñ ÜŸ™×*Ñ*¨4¯9©9×+;Ñ+;Ó+=Ó>ˆDŒIä�cœ<×(Ñ(Ø�fˆGÜ˜3Ð 4×5Ñ5Ü$Ø—|‘|�nÐ$KÐLóð ð ×)Ñ)Ó+ˆDØ�N‰N˜4Ô ð ×%Ò% wÐ/ˆEØ�K‰K˜Ÿ™Ô&ØˆLàˆKr3   )r-   r/   )NNN©F)r?   Ú
__module__Ú__qualname__Ú__firstlineno__r   r>   r(   r)   r*   r   Ú__annotations__ÚintÚtupleÚstrÚboolr   r+   r:   ÚstaticmethodrF   rS   Ú__static_attributes__© r3   r1   r   r      s  ‡ Ø˜D §¡§¡×!8Ñ!8Ñ9Ñ:Ó:ð ØØñ$Oàð$Oð ð$Oð ˜3 ˜8‘_ð	$Oð
 �c˜3�h‘ð$Oð �u˜S #˜X‘Ñ&ð$Oð ˜˜S˜‘/ð$Oð ð$Oð ˜c 3˜h™ð$Oð ð$Oð ð$Oð ÐIÑJð$Oð  
õ!$OòLYð ó!ó ð!õF"r3   r   c                   ó  ^ • \ rS rSr% Sr\R                  r\\	\R                        \
S'   \R                  r\\	\R                        \
S'            SS\S\S\S	\S
\\-  S\S\S\S\S   SS4U 4S jjjr\SU 4S jj5       rSrU =r$ )r   éƒ   a:  
A Conv1d module attached with FakeQuantize modules for weight,
used for quantization aware training.

We adopt the same interface as :class:`~torch.nn.Conv1d`

Similar to :class:`~torch.nn.Conv2d`, with FakeQuantize modules initialized to
default.

Attributes:
    weight_fake_quant: fake quant module for weight
r   rJ   Nr   r   r   r   r   r   r   r   r   r   r#   c                 óÒ   >• [        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	U
UUS9  g ©NFr   )r   r   r   r   r   r   r   r   r-   r%   r&   )r
   Ú
isinstancer\   Úsuperr+   ©r0   r   r   r   r   r   r   r   r   r   r-   r%   r&   Úkernel_size_Ústride_Úpadding_Ú	dilation_Ú	__class__s                    €r1   r+   ÚConv1d.__init__”   óz   ø€ ô ˜{Ó+ˆÜ˜&“/ˆÜ(¨´#×6Ñ6‘7¼GÀGÓ<LˆÜ˜HÓ%ˆ	Ü‰ÑØØØØØØØÜ" 1›:ØØØ%ØØØð 	ò 	
r3   c                 ó    >• [         TU ]  XUS9$ ©N)rD   ©rf   rF   ©rB   rC   rD   rl   s      €r1   rF   ÚConv1d.from_float¸   ó    ø€ ä‰wÑ!ØÐ1Kð "ð 
ð 	
r3   r`   ©	é   r   rv   rv   Tr   NNNrU   )r?   rV   rW   rX   Ú__doc__r(   r   r   r   r>   rY   rJ   rZ   r   r\   r]   r   r+   ÚclassmethodrF   r_   Ú__classcell__©rl   s   @r1   r   r   ƒ   sé   ø‡ ñð 02¯y©y€M�8˜D §¡™OÑ,Ó8Ø46·I±IÐ˜  b§i¡i¡Ñ1Ó=ð Ø#$ØØØØMTØØØñ"
àð"
ð ð"
ð ð	"
ð
 ð"
ð �y‘ð"
ð ð"
ð ð"
ð ð"
ð ÐIÑJð"
ð 
÷"
ð "
ðH ö
ó ö
r3   r   c                   ó   ^ • \ rS rSr% Sr\R                  r\\	\R                        \
S'   \R                  r\\	\R                        \
S'            SS\S\S\S	\S
\\-  S\S\S\S\S   SS4U 4S jjjrS r\SU 4S jj5       rSrU =r$ )r   é¿   a’  
A Conv2d module attached with FakeQuantize modules for weight,
used for quantization aware training.

We adopt the same interface as `torch.nn.Conv2d`, please see
https://pytorch.org/docs/stable/nn.html?highlight=conv2d#torch.nn.Conv2d
for documentation.

Similar to `torch.nn.Conv2d`, with FakeQuantize modules initialized to
default.

Attributes:
    weight_fake_quant: fake quant module for weight
r   rJ   Nr   r   r   r   r   r   r   r   r   r   r#   c                 óÒ   >• [        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	U
UUS9  g rd   )r	   re   r\   rf   r+   rg   s                    €r1   r+   ÚConv2d.__init__Ò   sx   ø€ ô ˜[Ó)ˆÜ˜“-ˆÜ(¨´#×6Ñ6‘7¼EÀ'»NˆÜ˜(“Oˆ	Ü‰ÑØØØØØØØÜ  ›8ØØØ%ØØØð 	ò 	
r3   c                 ól   • U R                  XR                  U R                  5      U R                  5      $ r5   r6   r8   s     r1   r:   ÚConv2d.forwardö   r<   r3   c                 ó    >• [         TU ]  XUS9$ rp   rq   rr   s      €r1   rF   ÚConv2d.from_floatù   rt   r3   r`   ru   rU   )r?   rV   rW   rX   rw   r(   r   r   r   r>   rY   rJ   rZ   r   r\   r]   r   r+   r:   rx   rF   r_   ry   rz   s   @r1   r   r   ¿   óï   ø‡ ñð 02¯y©y€M�8˜D §¡™OÑ,Ó8Ø46·I±IÐ˜  b§i¡i¡Ñ1Ó=ð Ø#$ØØØØMTØØØñ"
àð"
ð ð"
ð ð	"
ð
 ð"
ð �y‘ð"
ð ð"
ð ð"
ð ð"
ð ÐIÑJð"
ð 
÷"
ð "
òHYð ö
ó ö
r3   r   c                   ó   ^ • \ rS rSr% Sr\R                  r\\	\R                        \
S'   \R                  r\\	\R                        \
S'            SS\S\S\S	\S
\\-  S\S\S\S\S   SS4U 4S jjjrS r\SU 4S jj5       rSrU =r$ )r   é   a’  
A Conv3d module attached with FakeQuantize modules for weight,
used for quantization aware training.

We adopt the same interface as `torch.nn.Conv3d`, please see
https://pytorch.org/docs/stable/nn.html?highlight=conv3d#torch.nn.Conv3d
for documentation.

Similar to `torch.nn.Conv3d`, with FakeQuantize modules initialized to
default.

Attributes:
    weight_fake_quant: fake quant module for weight
r   rJ   Nr   r   r   r   r   r   r   r   r   r   r#   c                 óÒ   >• [        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	U
UUS9  g rd   )r   re   r\   rf   r+   rg   s                    €r1   r+   ÚConv3d.__init__  rn   r3   c                 ól   • U R                  XR                  U R                  5      U R                  5      $ r5   r6   r8   s     r1   r:   ÚConv3d.forward7  r<   r3   c                 ó    >• [         TU ]  XUS9$ rp   rq   rr   s      €r1   rF   ÚConv3d.from_float:  rt   r3   r`   ru   rU   )r?   rV   rW   rX   rw   r(   r   r   r   r>   rY   rJ   rZ   r   r\   r]   r   r+   r:   rx   rF   r_   ry   rz   s   @r1   r   r      rƒ   r3   r   )Útypingr   r   rK   Útorch.nnr(   Útorch.ao.nn.intrinsicr   Útorch.nn.common_typesr   r   r   Útorch.nn.modules.utilsr	   r
   r   Ú__all__r)   r*   r   r   r   r   r`   r3   r1   Ú<module>r’      sy   ðç $ã Ý Ý .ß AÑ Aß :Ñ :ò )€ôrˆb�j‰j�o‰o×%Ñ%ô rôj9
ˆW�b—i‘iô 9
ôx>
ˆW�b—i‘iô >
ôB>
ˆW�b—i‘iõ >
r3   