Ë
    ÄÓ^jb'  ã                   ó:  — 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ÚLiteralN)Ú_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
df   z  d	ee
df   d
edee
df   de
deded   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©ÚzerosÚreflectÚ	replicateÚcircularÚreturnc                 óâ   — ||dœ}t        j                  j                  j                  j                  | |||||||||	|
|fi |¤Ž |st        d«      ‚|| _        |j                  |¬«      | _        y )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                   úg/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/ao/nn/qat/modules/conv.pyr*   z_ConvNd.__init__   sƒ   € ð" %+°UÑ;ˆÜ
�
‰
�‰×Ñ×(Ñ(ØØØØØØØØØØØØñ	
ð ò	
ñ Ü Ð!JÓKÐKØˆŒØ!(§¡¸~ Ó!NˆÕó    c                 ón   — | j                  || j                  | j                  «      | j                  «      S ©N©Ú_conv_forwardr.   r-   r   ©r/   Úinputs     r0   Úforwardz_ConvNd.forward7   ó*   € Ø×!Ñ! %¨×)?Ñ)?ÀÇÁÓ)LÈdÏiÉiÓXÐXr1   c                 óŽ  — t        |«      | j                  urEt        d| j                  › d| j                  j                  › dt        |«      j                  › �«      ‚t	        |d«      st        d«      ‚|j
                  st        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 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        r0   Ú
from_floatz_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Ø—\‘\Ø—:‘:Ø—‘ Ð%Ø×)Ñ)Øô
ˆð Ÿ*™*ˆŒØŸ™ˆŒØˆr1   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"        «      rt|g}t%        |d«      st'        |j(                  › d�«      ‚|j+                  «       }|j-                  |«        |j.                  |Ž }|j1                  | j2                  «       |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_MODULEz' must have _FLOAT_RELU_MODULE attribute)r;   Ú_FLOAT_CONV_MODULEr   r   r   r   r   r   r   r   r   Útorchr'   Ú	Parameterr-   Údetachr>   r   r=   r+   r<   rE   Úappendr   ÚtrainÚtraining)r/   r?   r)   r(   ÚreluÚfuseds         r0   Ú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Ü$Ø—|‘|�nÐ$KÐLóð ð ×)Ñ)Ó+ˆDØ�N‰N˜4Ô ð &�C×%Ñ% wÐ/ˆEØ�K‰K˜Ÿ™Ô&ØˆLàˆKr1   )NNN©F)r<   Ú
__module__Ú__qualname__r   r;   r'   r(   r)   r   Ú__annotations__ÚintÚtupleÚstrÚboolr   r*   r8   ÚstaticmethodrC   rO   © r1   r0   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"r1   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z  d
edededed   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   rF   Nr   r   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
   Ú
isinstancerV   Úsuperr*   ©r/   r   r   r   r   r   r   r   r   r   r,   r$   r%   Úkernel_size_Ústride_Úpadding_Ú	dilation_Ú	__class__s                    €r0   r*   zConv1d.__init__”   ów   ø€ ô ˜{Ó+ˆÜ˜&“/ˆÜ(¨´#Ô6‘7¼GÀGÓ<LˆÜ˜HÓ%ˆ	Ü‰ÑØØØØØØØÜ" 1›:ØØØ%ØØØð 	õ 	
r1   c                 ó(   •— t         ‰| �  | ||¬«      S ©N)rA   ©r^   rC   ©r?   r@   rA   rd   s      €r0   rC   zConv1d.from_float¸   ó"   ø€ ä‰wÑ!Ø�Ð1Kð "ó 
ð 	
r1   ©	é   r   rl   rl   Tr   NNNrP   )r<   rQ   rR   Ú__doc__r'   r   r   r   r;   rS   rF   rT   r   rV   rW   r   r*   ÚclassmethodrC   Ú__classcell__©rd   s   @r0   r   r   ƒ   sä   ø… ñð 02¯y©y€M�8˜D §¡™OÑ,Ó8Ø46·I±IÐ˜  b§i¡i¡Ñ1Ó=ð Ø#$ØØØØMTØØØñ"
àð"
ð ð"
ð ð	"
ð
 ð"
ð �y‘ð"
ð ð"
ð ð"
ð ð"
ð ÐIÑJð"
ð 
õ"
ðH ô
ó ô
r1   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z  d
edededed   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   rF   Nr   r   r   r   r   r   r   r   r   r   r"   c                 óÎ   •— t        |«      }t        |«      }t        |t        «      r|n
t        |«      }t        |«      }t        ‰| �  ||||||dt        d«      |||	|
||¬«       y r\   )r	   r]   rV   r^   r*   r_   s                    €r0   r*   zConv2d.__init__Ò   su   ø€ ô ˜[Ó)ˆÜ˜“-ˆÜ(¨´#Ô6‘7¼EÀ'»NˆÜ˜(“Oˆ	Ü‰ÑØØØØØØØÜ  ›8ØØØ%ØØØð 	õ 	
r1   c                 ón   — | j                  || j                  | j                  «      | j                  «      S r3   r4   r6   s     r0   r8   zConv2d.forwardö   r9   r1   c                 ó(   •— t         ‰| �  | ||¬«      S rg   rh   ri   s      €r0   rC   zConv2d.from_floatù   rj   r1   rk   rP   )r<   rQ   rR   rm   r'   r   r   r   r;   rS   rF   rT   r   rV   rW   r   r*   r8   rn   rC   ro   rp   s   @r0   r   r   ¿   óê   ø… ñð 02¯y©y€M�8˜D §¡™OÑ,Ó8Ø46·I±IÐ˜  b§i¡i¡Ñ1Ó=ð Ø#$ØØØØMTØØØñ"
àð"
ð ð"
ð ð	"
ð
 ð"
ð �y‘ð"
ð ð"
ð ð"
ð ð"
ð ÐIÑJð"
ð 
õ"
òHYð ô
ó ô
r1   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z  d
edededed   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   rF   Nr   r   r   r   r   r   r   r   r   r   r"   c                 óÎ   •— t        |«      }t        |«      }t        |t        «      r|n
t        |«      }t        |«      }t        ‰| �  ||||||dt        d«      |||	|
||¬«       y r\   )r   r]   rV   r^   r*   r_   s                    €r0   r*   zConv3d.__init__  re   r1   c                 ón   — | j                  || j                  | j                  «      | j                  «      S r3   r4   r6   s     r0   r8   zConv3d.forward7  r9   r1   c                 ó(   •— t         ‰| �  | ||¬«      S rg   rh   ri   s      €r0   rC   zConv3d.from_float:  rj   r1   rk   rP   )r<   rQ   rR   rm   r'   r   r   r   r;   rS   rF   rT   r   rV   rW   r   r*   r8   rn   rC   ro   rp   s   @r0   r   r      ru   r1   r   )Útypingr   r   rG   Ú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   rY   r1   r0   ú<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õ >
r1   