
    ёi$                         S SK r S SKrSSKJrJr  SSKJr  / SQrS r	S r
S	 rS
 rS rS rSS jrSS jrSS jrS rS rS rS r " S S5      rg)    N   )IrNodeOperator   )SUPPORT_QUANTIZATION_OP_DICT)conv2d_transposemulmatmul	matmul_v2c                    [        U [        [        45      (       d   S5       e/ n[        U [        5      (       a  U R                  5       OU R                  nU[
        ;  a  / $ [
        U   S   nU HM  nU R                  U5      n[        U[        5      (       a  UR                  U5        M<  UR                  U5        MO     U$ )zx
Get the input var names of the op.
Args:
    op(IrNode, Operator): the input op.
Returns:
    input_var_names or None.
*The input op should be IrNode or Operator.r   )

isinstancer   r   nametyper   inputlistextendappendop	var_namesop_name	name_listr   var_names         `/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/static/quantization/utils.py_get_op_input_var_namesr      s     b68,-- 4- I%b&11bggirwwG22	,W5a8I88D>h%%X&X&      c                    [        U [        [        45      (       d   S5       e/ n[        U [        5      (       a  U R                  5       OU R                  nU[
        ;  a  / $ [
        U   S   nU HM  nU R                  U5      n[        U[        5      (       a  UR                  U5        M<  UR                  U5        MO     U$ ) r   r   )
r   r   r   r   r   r   outputr   r   r   r   s         r   _get_op_output_var_namesr!   8   s    b68,-- 4- I%b&11bggirwwG22	,W5a8I99T?h%%X&X&  r   c                 J   [        U [        [        45      (       d   S5       e[        U [        5      (       a  U R                  5       OU R                  nU[
        ;  a  gSn[
        U   S    H2  nU R                  U5      n[        U5       H  u  pgXq:X  d  M  XF4nM     M4     U$ )z6Get the input name and index of the var_name in the opr   Nr   )r   r   r   r   r   r   r   	enumerate)r   input_var_namer   resargnamer   indexr   s           r   _get_input_name_indexr(   L   s    b68,-- 4- &b&11bggirwwG22
C/8;HHW%	$Y/KE%& 0 <
 Jr   c                 N   [        U [        [        45      (       d   S5       e[        U [        5      (       a  U R                  5       OU R                  nU[
        ;  a  g[
        U   S   nSnU H2  nU R                  U5      n[        U5       H  u  pxX:X  d  M  XW4nM     M4     U$ )z7Get the output name and index of the var_name in the opr   Nr   )r   r   r   r   r   r   r    r#   )	r   output_var_namer   r   r%   r   r   r'   vals	            r   _get_output_name_indexr,   ^   s    b68,-- 4- &b&11bggirwwG22,W5a8I
C99T?#H-JE%m . 
 Jr   c                     U R                  U5      nUc   SU-   S-   5       e[        R                  " UR                  5       5      nUR                  S:X  a  UR                  S5      $ U$ )z 
Load variable value from scope
zCannot find z
 in scope. r   )find_varnparray
get_tensorshapereshape)scoper   var_nodetensors       r   load_variable_datar8   q   sd     ~~h'HI(!:\!IIXXh))+,F||r~~a  r   c                     [        U[        R                  5      (       d   S5       eU R                  U5      nUb"  UR	                  5       nUR                  X15        gg)z7
Set the value of var node by name, if the node exits,
z(The type of value should be numpy array.N)r   r0   ndarrayr/   r2   set)r5   placer   np_valuer6   r7   s         r   set_variable_datar>   ~   sZ     h

++ 2+ ~~h'H$$&

8# r   c                    S nSUS-
  -  S-
  n[        U[        5      (       a  [        U5      S:X  a  US   n[        U[        5      (       Ga!  US;   d   S5       e[        U5       GH  u  pxUS:X  a  SnUS:X  ad  U(       aB  [        R
                  " X   U-  U-  5      X'   [        R                  " X   U* S-
  U5      X'   M]  U" X   U5      X'   X   U-  U-  X'   Mx  U(       aV  [        R
                  " U S S 2U4   U-  U-  5      U S S 2U4'   [        R                  " U S S 2U4   U* S-
  U5      U S S 2U4'   M  U" U S S 2U4   U5      U S S 2U4'   U S S 2U4   U-  U-  U S S 2U4'   GM     U $ US:X  a  SOUnU(       a8  [        R
                  " X-  U-  5      n [        R                  " X* S-
  U5      n U $ U" X5      n X-  U-  n U $ )Nc                 $    XX:  '   U* X U* :  '   U $ Nr.   )xscales     r   _clipquant_tensor.<locals>._clip   s    !)uf*r   r   r   )r   r   $quant_axis should be 0 or 1 for now.        :0yE>)r   r   lenr#   r0   roundclip)	rB   rC   
quant_axisweight_bitsonnx_formatrD   bntiss	            r   quant_tensorrS      s   
 q!Q
&C%3u:?a%Z'O)OO'e$DACxQ88AD1HsN3AD7714#37AD q>AD4!8c>AD hhqAw{S'89AadG gga1gtax=AadG#AadGQ/AadG1gkC/AadG! %2 H %S)A4!8S)A H aA	CAHr   c                    US;   d   S5       eSUS-
  -  S-
  n[        U[        5      (       aH  [        U5       H7  u  pVUS:X  a  SnUS:X  a  X   U-  U-  X'   M!  U S S 2U4   U-  U-  U S S 2U4'   M9     U $ US:X  a  SOUnX-  U-  n U $ )N)r   r   rG   r   rH   rI   r   )r   r   r#   )rB   rC   rM   rN   rP   rQ   rR   s          r   dequant_tensorrU      s    G!GGq!Q
&C%e$DACxQtax#~AqD'A++!Q$ % H %IOHr   c                    SnSUS-
  -  S-
  nUR                  5       n[        U[        5      (       Ga  US:X  a  [        U5       H  u  pXx   U	-  U-  Xx'   M     X-
  n
U
R	                  U
R
                  S   S5      R                  S5      nU R	                  U R
                  S   S5      R                  S5      nUR	                  UR
                  S   S5      R                  S5      nXU-   -  nGOf[        U5       H  u  pUSS2U4   U	-  U-  USS2U4'   M     X-
  n
[        R                  " [        U
R
                  S   5       Vs/ s H  oSS2U4   R                  5       PM     sn5      n[        R                  " [        U R
                  S   5       Vs/ s H  oSS2U4   R                  5       PM     sn5      n[        R                  " [        UR
                  S   5       Vs/ s H  oSS2U4   R                  5       PM     sn5      nXU-   -  nO=X-  U-  nX-
  R                  5       nU R                  5       UR                  5       U-   -  nUR                  S:X  a@  [        R                  " XR
                  5      n[        R                  " XR
                  5      nX-   U-  n[        XrX45      nU$ s  snf s  snf s  snf )z
Bias correction for weight
rI   r   r   rF   N)copyr   r   r#   r4   r3   meanstdr0   r1   rangendimresizerS   )rB   x_quantscale_vrM   rN   epsrP   	x_dequantrQ   rR   
quant_bias	mean_biasstd_orig	std_quantstd_biasquantized_param_vs                   r   bias_correction_wrg      s|    Cq!Q
&CI'4  ?!'*(|a/#5	 +J"**:+;+;A+>CHHLIyyR044R8H!)))//!*<bAEEbIIs?3H!'*")!Q$-!"3c"9	!Q$ +J27
8H8H8K2LM2LQAqD!&&(2LMI xxaggaj8I J8I11a48I JKH05iooa6H0IJ0I11a4$$&0IJI  s?3H%+	]((*	557immo34~~99Xww/IIi1	&(2I$J ' N JJs   	 J< K+ Kc           	          [         R                  " U S:  [         R                  " U 5      S[         R                  " U 5      -   -  SS[         R                  " U * 5      -   -  5      nU$ )Nr   r   )r0   whereexp)rB   sigs     r   stable_sigmoidrl      sI    
((1q5"&&)q266!9}5qAr
N7K
LCJr   c                 $   [         R                  " U R                  5       UR                  5       5      [         R                  R	                  U R                  5       5      [         R                  R	                  UR                  5       5      -  -  nU$ rA   )r0   innerflattenlinalgnorm)orig_tensor
qdq_tensorcos_sims      r   calculate_quant_cos_errorru      sg    hh{**,j.@.@.BC
		{**,-
))..++-
.	/G Nr   c                 &   U R                  5       nUR                   H  nUR                  S:X  d  M  UR                  S5      R                  nU R                  U5      n/ nUR                  R                  5        H:  u  pgUR                  (       d  M  UR                  U5        UR                  U5        M<     U H  nUR                  U5        M     UR                  UR                  S5      5        UR                  R                  SU5        M     g )Nwhile	sub_blockX)global_blockopsr   attridblockvarsitemspersistable_clone_variabler   _remove_varr   r   desc	set_input)programrz   _op	_block_id_blockpersistables_name_vars           r   $move_persistable_var_to_global_blockr      s    '')L88w-00I]]9-FL%{{002### 006 ''.  3 &""5) &		#/HHsL1  r   c                 ,    X-
  S-  R                  5       $ )N   )rX   )gtpreds     r   l2_lossr     s    Y1""$$r   c                   4    \ rS rSrSS jrS	S jrS rS rSrg)
tqdmi  c                 6    Xl         X l        X0l        SU l        g )Nr   )total
bar_formatncolsn)selfr   r   r   s       r   __init__tqdm.__init__  s    
$
r   c                    U =R                   U-  sl         S[        U R                   U R                  -  U R                  -  5      -  nSU R                  [	        U5      -
  -  nU R
                  R                  S5      S   n[        R                  R                  SU SU SU SU R                    SU R                   3
5        [        R                  R                  5         g )	N= |r   z=>z| /)r   rK   r   r   rJ   r   splitsysstderrwriteflush)r   r   abprefixs        r   updatetqdm.update  s    !%$**,

:;;4::A&'&&s+A.

2fXQqcA3b$**FG

r   c                     U $ rA   r.   )r   s    r   	__enter__tqdm.__enter__!  s    r   c                 B    [         R                  R                  S5        g )N
)r   r   r   )r   exc_typeexc_valexc_tbs       r   __exit__tqdm.__exit__$  s    

r   )r   r   r   r   N)zLoading|{bar}P   )r   )	__name__
__module____qualname____firstlineno__r   r   r   r   __static_attributes__r.   r   r   r   r     s    r   r   )r      F)r   r   )r   )r   numpyr0   base.frameworkr   r   quant_configr   _channelwise_quant_axis1_opsr   r!   r(   r,   r8   r>   rS   rU   rg   rl   ru   r   r   r   r.   r   r   <module>r      sh      . 6  4($&

$%P"(V
2$% r   