Ë
    g^(h%  ã                   ó:  — d dl 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 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j,                  «      Zy)é    )ÚClassVarÚUnionN)Ú_FusedModule)Ú	_size_1_tÚ	_size_2_tÚ	_size_3_t)Ú_pairÚ_singleÚ_triple)ÚConv1dÚConv2dÚConv3dc                   óú   — e Zd ZU eeej                  j                  j                        e	d<   	 	 	 dde
de
dee
df   dee
df   deeee
df   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)Ú_ConvNdÚ_FLOAT_MODULENÚ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                   úZ/var/www/skyplay_api_hub/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.forward6   ó*   € Ø×!Ñ! %¨×)?Ñ)?ÀÇÁÓ)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&   )Útyper   Ú__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_float9   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)r5   Ú_FLOAT_CONV_MODULEr   r   r   r   r   r   r   r   r   Útorchr"   Ú	Parameterr'   Údetachr8   r   r7   r?   Úappendr   ÚtrainÚtraining)r)   r9   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)r6   Ú
__module__Ú__qualname__r   r5   r"   r#   r$   r   Ú__annotations__ÚintÚtupler   ÚstrÚboolr%   r2   Ústaticmethodr=   rI   © r+   r*   r   r      s  … Ø˜D §¡§¡×!8Ñ!8Ñ9Ñ:Ó:ð ØØñ#Oàð#Oð ð#Oð ˜3 ˜8‘_ð	#Oð
 �c˜3�h‘ð#Oð �s˜E # s (™OÐ+Ñ,ð#Oð ˜˜S˜‘/ð#Oð ð#Oð ˜c 3˜h™ð#Oð ð#Oð ð#Oð ð#Oð  
ó!#OòJYð ò ó ð óDr+   r   c                   ó  ‡ — e Zd ZU dZej
                  Zeeej
                        e	d<   ej
                  Z
eeej
                        e	d<   	 	 	 	 	 	 	 	 	 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
    r   r@   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
   Ú
isinstancerP   Ú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;   ©rX   r=   ©r9   r:   r;   r^   s      €r*   r=   zConv1d.from_float°   ó"   ø€ ä‰wÑ!Ø�Ð1Kð "ó 
ð 	
r+   ©	é   r   rf   rf   TÚzerosNNNrJ   )r6   rK   rL   Ú__doc__r"   r   r   r   r5   rM   r@   rN   r   r   rP   rQ   r%   Úclassmethodr=   Ú__classcell__©r^   s   @r*   r   r   |   sã   ø… ñð 02¯y©y€M�8˜D §¡™OÑ,Ó8Ø46·I±IÐ˜  b§i¡i¡Ñ1Ó=ð Ø)*ØØØØ#ØØØñ"
àð"
ð ð"
ð ð	"
ð
 ð"
ð �s˜I�~Ñ&ð"
ð ð"
ð ð"
ð ð"
ð ð"
ð 
õ"
ðH ô
ó ô
r+   r   c                   ó  ‡ — e Zd ZU dZej
                  Zeeej
                        e	d<   ej
                  Z
eeej
                        e	d<   	 	 	 	 	 	 	 	 	 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
    r   r@   Nr   r   r   r   r   r   r   r   r   r   c                 óÎ   •— t        |«      }t        |«      }t        |t        «      r|n
t        |«      }t        |«      }t        ‰| �  ||||||dt        d«      |||	|
||¬«       y rV   )r	   rW   rP   rX   r%   rY   s                    €r*   r%   zConv2d.__init__É   su   ø€ ô ˜[Ó)ˆÜ˜“-ˆÜ(¨´#Ô6‘7¼EÀ'»NˆÜ˜(“Oˆ	Ü‰ÑØØØØØØØÜ  ›8ØØØ%ØØØð 	õ 	
r+   c                 ón   — | j                  || j                  | j                  «      | j                  «      S r-   r.   r0   s     r*   r2   zConv2d.forwardí   r3   r+   c                 ó(   •— t         ‰| �  | ||¬«      S ra   rb   rc   s      €r*   r=   zConv2d.from_floatð   rd   r+   re   rJ   )r6   rK   rL   rh   r"   r   r   r   r5   rM   r@   rN   r   r   rP   rQ   r%   r2   ri   r=   rj   rk   s   @r*   r   r   ·   óé   ø… ñð 02¯y©y€M�8˜D §¡™OÑ,Ó8Ø46·I±IÐ˜  b§i¡i¡Ñ1Ó=ð Ø)*ØØØØ#ØØØñ"
àð"
ð ð"
ð ð	"
ð
 ð"
ð �s˜I�~Ñ&ð"
ð ð"
ð ð"
ð ð"
ð ð"
ð 
õ"
òHYð ô
ó ô
r+   r   c                   ó  ‡ — e Zd ZU dZej
                  Zeeej
                        e	d<   ej
                  Z
eeej
                        e	d<   	 	 	 	 	 	 	 	 	 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
    r   r@   Nr   r   r   r   r   r   r   r   r   r   c                 óÎ   •— t        |«      }t        |«      }t        |t        «      r|n
t        |«      }t        |«      }t        ‰| �  ||||||dt        d«      |||	|
||¬«       y rV   )r   rW   rP   rX   r%   rY   s                    €r*   r%   zConv3d.__init__	  r_   r+   c                 ón   — | j                  || j                  | j                  «      | j                  «      S r-   r.   r0   s     r*   r2   zConv3d.forward-  r3   r+   c                 ó(   •— t         ‰| �  | ||¬«      S ra   rb   rc   s      €r*   r=   zConv3d.from_float0  rd   r+   re   rJ   )r6   rK   rL   rh   r"   r   r   r   r5   rM   r@   rN   r   r   rP   rQ   r%   r2   ri   r=   rj   rk   s   @r*   r   r   ÷   rp   r+   r   )Útypingr   r   rA   Ú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   rS   r+   r*   ú<module>r{      sy   ðç "ã Ý Ý .ß AÑ Aß :Ñ :ò )€ôkˆb�j‰j�o‰o×%Ñ%ô kô\8
ˆW�b—i‘iô 8
ôv=
ˆW�b—i‘iô =
ô@=
ˆW�b—i‘iõ =
r+   