Ë
    P/æjy%  ã                   óŽ  — d dl mZmZmZ d dlZd dlmZ d dlmZ d dl	m
Z
mZmZ d dlmZmZmZ g d¢Z edej$                  j&                  j(                  ¬«      Z G d	„ d
ej$                  j&                  j(                  «      Z G d„ deej,                  «      Z G d„ deej.                  «      Z G d„ deej0                  «      Zy)é    )ÚTupleÚTypeVarÚUnionN)Ú_FusedModule)Ú	_size_1_tÚ	_size_2_tÚ	_size_3_t)Ú_pairÚ_singleÚ_triple)ÚConv1dÚConv2dÚConv3dÚMOD)Úboundc                   ó    — e Zd ZeZ	 	 	 ddededeedf   deedf   deedf   deedf   d	ed
eedf   dedededdfd„Z	d„ Z
edd„«       Zd„ Zy)Ú_ConvNdNÚin_channelsÚout_channelsÚkernel_size.ÚstrideÚpaddingÚdilationÚ
transposedÚoutput_paddingÚgroupsÚbiasÚpadding_modeÚreturnc                 óÚ   — ||dœ}t        j                  j                  j                  j                  | |||||||||	|
|fi |¤Ž |sJ d«       ‚|| _        |j                  |¬«      | _        y )N)ÚdeviceÚdtypez'qconfig must be provided for QAT module)Úfactory_kwargs)ÚnnÚmodulesÚconvr   Ú__init__ÚqconfigÚweightÚweight_fake_quant)Úselfr   r   r   r   r   r   r   r   r   r   r   r(   r!   r"   r#   s                   ú_/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/ao/nn/qat/modules/conv.pyr'   z_ConvNd.__init__   s‚   € ð" %+°UÑ;ˆÜ
�
‰
�‰×Ñ×(Ñ(ØØØØØØØØØØØØñ	
ð ò	
ñ ÐAÐAÓAˆwØˆŒØ!(§¡¸~ Ó!NˆÕó    c                 ón   — | j                  || j                  | j                  «      | j                  «      S ©N©Ú_conv_forwardr*   r)   r   ©r+   Úinputs     r,   Úforwardz_ConvNd.forward8   ó*   € Ø×!Ñ! %¨×)?Ñ)?ÀÇÁÓ)LÈdÏiÉiÓXÐXr-   c                 óR  — t        |«      | j                  k(  s.J d| j                  z   dz   | j                  j                  z   «       ‚t        |d«      sJ d«       ‚|j                  sJ d«       ‚t        t        |«      t        «      r|d   }|j                  } | |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  du|j                  |¬«
      }|j                   |_        |j                  |_        |S )	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 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(   )ÚtypeÚ_FLOAT_MODULEÚ__name__Úhasattrr(   Ú
issubclassr   r   r   r   r   r   r   r   r   r   r)   )ÚclsÚmodÚuse_precomputed_fake_quantr(   Úqat_convs        r,   Ú
from_floatz_ConvNd.from_float;   s  € ô �C‹y˜C×-Ñ-Ò-ð 	
ØØ�l‰lñà+ñ,ð ×Ñ×(Ñ(ñ)ó	
Ð-ô �s˜IÔ&ÐVÐ(VÓVÐ&Ø�{Š{ÐJÐJÓJˆ{Ü”d˜3“i¤Ô.Ø�a‘&ˆCØ—+‘+ˆÙØ�O‰OØ×ÑØ�O‰OØ—:‘:Ø—K‘KØ—\‘\Ø—:‘:Ø—‘ Ð%Ø×)Ñ)Øô
ˆð Ÿ*™*ˆŒØŸ™ˆŒØˆr-   c                 óê  — t        | «      }|j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  du| j                  «	      }t        j                  j                  | j                  j                  «       «      |_        | j                  �<t        j                  j                  | j                  j                  «       «      |_	        t!        |t"        «      r^|g}t%        |d«      sJ ‚|j'                  «       }|j)                  |«        |j*                  |Ž }|j-                  | j.                  «       |S |S )zŠThis 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_MODULE)r7   Ú_FLOAT_CONV_MODULEr   r   r   r   r   r   r   r   r   Útorchr$   Ú	Parameterr)   Údetachr;   r   r:   rB   Úappendr8   ÚtrainÚtraining)r+   r<   r&   r%   ÚreluÚfuseds         r,   Úto_floatz_ConvNd.to_float^   s#  € ô �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Ð5Ø×)Ñ)Ó+ˆDØ�N‰N˜4Ô Ø%�C×%Ñ% wÐ/ˆEØ�K‰K˜Ÿ™Ô&ØˆLàˆKr-   )NNN©F)r9   Ú
__module__Ú__qualname__r   r8   Úintr   ÚboolÚstrr'   r4   Ústaticmethodr@   rL   © r-   r,   r   r      sã   „ Ø€Mð ØØñ#Oàð#Oð ð#Oð ˜3 ˜8‘_ð	#Oð
 �c˜3�h‘ð#Oð �s˜C�x‘ð#Oð ˜˜S˜‘/ð#Oð ð#Oð ˜c 3˜h™ð#Oð ð#Oð ð#Oð ð#Oð  
ó!#OòJYð ò ó ð óDr-   r   c                   ó°   ‡ — e Zd ZdZej
                  Zej
                  Z	 	 	 	 	 	 	 	 	 ddedede	de	de
ee	f   de	d	ed
ededdfˆ fd„Zedˆ fd„	«       Zˆ xZS )r   aZ  
    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
    Nr   r   r   r   r   r   r   r   r   r   c                 óÎ   •— t        |«      }t        |«      }t        |t        «      r|n
t        |«      }t        |«      }t        ‰| �  ||||||dt        d«      |||	|
||¬«       y ©NFr   )r   r   r   r   r   r   r   r   r(   r!   r"   )r   Ú
isinstancerR   Úsuperr'   ©r+   r   r   r   r   r   r   r   r   r   r(   r!   r"   Úkernel_size_Ústride_Úpadding_Ú	dilation_Ú	__class__s                    €r,   r'   zConv1d.__init__Ž   ów   ø€ ô ˜{Ó+ˆÜ˜&“/ˆÜ(¨´#Ô6‘7¼GÀGÓ<LˆÜ˜HÓ%ˆ	Ü‰ÑØØØØØØØÜ" 1›:ØØØ%ØØØð 	õ 	
r-   c                 ó(   •— t         ‰| �  | ||¬«      S ©N)r>   ©rY   r@   ©r<   r=   r>   r_   s      €r,   r@   zConv1d.from_float²   ó"   ø€ ä‰wÑ!Ø�Ð1Kð "ó 
ð 	
r-   ©	é   r   rg   rg   TÚzerosNNNrM   )r9   rN   rO   Ú__doc__r$   r   r8   rC   rP   r   r   rR   rQ   r'   Úclassmethodr@   Ú__classcell__©r_   s   @r,   r   r   ~   s¿   ø„ ñð —I‘I€MØŸ™Ðð Ø)*ØØØØ#ØØØñ"
àð"
ð ð"
ð ð	"
ð
 ð"
ð �s˜I�~Ñ&ð"
ð ð"
ð ð"
ð ð"
ð ð"
ð 
õ"
ðH ô
ó ô
r-   r   c                   ó¶   ‡ — e Zd ZdZej
                  Zej
                  Z	 	 	 	 	 	 	 	 	 ddedede	de	de
ee	f   de	d	ed
ededdfˆ fd„Zd„ Zedˆ fd„	«       Zˆ xZS )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
    Nr   r   r   r   r   r   r   r   r   r   c                 óÎ   •— t        |«      }t        |«      }t        |t        «      r|n
t        |«      }t        |«      }t        ‰| �  ||||||dt        d«      |||	|
||¬«       y rW   )r
   rX   rR   rY   r'   rZ   s                    €r,   r'   zConv2d.__init__Ë   su   ø€ ô ˜[Ó)ˆÜ˜“-ˆÜ(¨´#Ô6‘7¼EÀ'»NˆÜ˜(“Oˆ	Ü‰ÑØØØØØØØÜ  ›8ØØØ%ØØØð 	õ 	
r-   c                 ón   — | j                  || j                  | j                  «      | j                  «      S r/   r0   r2   s     r,   r4   zConv2d.forwardï   r5   r-   c                 ó(   •— t         ‰| �  | ||¬«      S rb   rc   rd   s      €r,   r@   zConv2d.from_floatò   re   r-   rf   rM   )r9   rN   rO   ri   r$   r   r8   rC   rP   r   r   rR   rQ   r'   r4   rj   r@   rk   rl   s   @r,   r   r   ¹   óÅ   ø„ ñð —I‘I€MØŸ™Ðð Ø)*ØØØØ#ØØØñ"
àð"
ð ð"
ð ð	"
ð
 ð"
ð �s˜I�~Ñ&ð"
ð ð"
ð ð"
ð ð"
ð ð"
ð 
õ"
òHYð ô
ó ô
r-   r   c                   ó¶   ‡ — e Zd ZdZej
                  Zej
                  Z	 	 	 	 	 	 	 	 	 ddedede	de	de
ee	f   de	d	ed
ededdfˆ fd„Zd„ Zedˆ fd„	«       Zˆ xZS )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
    Nr   r   r   r   r   r   r   r   r   r   c                 óÎ   •— t        |«      }t        |«      }t        |t        «      r|n
t        |«      }t        |«      }t        ‰| �  ||||||dt        d«      |||	|
||¬«       y rW   )r   rX   rR   rY   r'   rZ   s                    €r,   r'   zConv3d.__init__  r`   r-   c                 ón   — | j                  || j                  | j                  «      | j                  «      S r/   r0   r2   s     r,   r4   zConv3d.forward/  r5   r-   c                 ó(   •— t         ‰| �  | ||¬«      S rb   rc   rd   s      €r,   r@   zConv3d.from_float2  re   r-   rf   rM   )r9   rN   rO   ri   r$   r   r8   rC   rP   r	   r   rR   rQ   r'   r4   rj   r@   rk   rl   s   @r,   r   r   ù   rq   r-   r   )Útypingr   r   r   rD   Ú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   rT   r-   r,   ú<module>r|      s–   ðç (Ñ (ã Ý Ý .ß AÑ Aß :Ñ :ò )€áˆe˜2Ÿ:™:Ÿ?™?×2Ñ2Ô3€ôkˆb�j‰j�o‰o×%Ñ%ô kô\8
ˆW�b—i‘iô 8
ôv=
ˆW�b—i‘iô =
ô@=
ˆW�b—i‘iõ =
r-   