
    ёi                     B    S r SSKJr  SSKJr  SSKJr   " S S\5      rg	)
z
Layers used for QAT.
    )
functional   )Layer   )ConvertibleQuantedLayerc                   L   ^  \ rS rSrSrS\4U 4S jjrS rS rS r	S r
S	rU =r$ )
QuantedConv2D   z
The computational logic of QuantizedConv2D is the same as Conv2D.
The only difference is that its inputs are all fake quantized.
layerc                 F  > [         TU ]  5         UR                  U l        UR                  U l        UR                  U l        UR
                  U l        U R
                  S:w  a  UR                  U l        UR                  U l        UR                  U l        UR                  U l	        UR                  U l
        S U l        S U l        UR                  b   UR                  R                  U5      U l        UR                  b!  UR                  R                  U5      U l        g g )Nzeros)super__init___groups_stride_padding_padding_mode _reversed_padding_repeated_twice	_dilation_data_formatweightbiasweight_quanteractivation_quanter	_instance
activation)selfr   q_config	__class__s      X/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/nn/quant/qat/conv.pyr   QuantedConv2D.__init__   s     }}}}"00(66 1 !..llJJ	""&??&"*//";";E"BD*&.&9&9&C&CE&JD# +    c                     UnU R                   nU R                  b  U R                  U5      nU R                  b  U R                  U R                   5      nU R                  X#5      $ )N)r   r   r   _conv_forward)r   inputquant_inputquant_weights       r    forwardQuantedConv2D.forward6   s]    {{"".11%8K*..t{{;L!!+<<r"   c                 H   U R                   S:w  a<  [        R                  " UU R                  U R                   U R                  S9nSU l        [        R                  " UUU R                  U R
                  U R                  U R                  U R                  U R                  S9$ )Nr   )modedata_formatr   )r   paddingstridedilationgroupsr,   )r   Fpadr   r   r   conv2dr   r   r   r   )r   inputsweightss      r    r$   QuantedConv2D._conv_forward?   s    (UU55'' --	F DMxxMM<<^^<<))	
 		
r"   c                     S/$ )N)r   r    r   s    r    weights_to_quanters!QuantedConv2D.weights_to_quantersT   s    ,--r"   c                     S/$ )Nr   r8   r9   s    r    activation_quanters!QuantedConv2D.activation_quantersW   s    $%%r"   )r   r   r   r   r   r   r   r   r   r   r   )__name__
__module____qualname____firstlineno____doc__r   r   r(   r$   r:   r=   __static_attributes____classcell__)r   s   @r    r	   r	      s/    
Ke K0=
*.& &r"   r	   N)	rC   	paddle.nnr   r1   layer.layersr   formatr   r	   r8   r"   r    <module>rI      s$    & ! ,@&+ @&r"   