
    h2d                         S SK r S SKJr  S SKrS SKrS SKr S SKJr  SSK
Jr  SSKJr  SSKJrJrJrJrJrJrJrJrJrJrJrJrJr  SSKJr   " S	 S
5      r " S S5      rg! \	 a    Sr NOf = f)    N)Any)to_array_extended   )
TensorData)	ONNXModel)DEQUANT_OP_NAMEONNX_TYPE_TO_NP_TYPEQUANT_OP_NAMETENSOR_NAME_QUANT_SUFFIXfind_by_nameget_opset_versionmodel_has_infer_metadatanormalize_axispack_bytes_to_4bitquantize_dataquantize_nparray&save_and_reload_model_with_shape_infertensor_proto_to_array)TensorQuantOverridesHelperc                   N    \ rS rSrS\\\4   4S jrSS jrS r	S r
S rS	 rS
rg)QuantizationParams'   datac                 t   0 U l         UR                  5        GH  u  p#[        U[        5      (       d  [	        S[        U5       SU< S35      eUS:w  aK  [        U[        [        [        R                  [        45      (       d  [	        S[        U5       SU< S35      eUS:X  a0  [        U[        5      (       d  Ub  [	        S[        U5       S35      eUS:X  aJ  UR                  [        R                  [        R                  4;  a  [        SUR                   SU< 35      eX0R                   U'   GM     g )	NzKeys must be strings not z for k=.axisz1Values must be numpy arrays, int, float, str not z'Axis value must be an int or None, not scalez5scale must a float32 or float16 numpy element but is )r   items
isinstancestr	TypeErrortypeintnpndarrayfloatdtypefloat32float16
ValueError)selfr   kvs       a/var/www/fran/franai/venv/lib/python3.13/site-packages/onnxruntime/quantization/base_quantizer.py__init__QuantizationParams.__init__(   s   	JJLDAa%%";DG9GA5PQ RSSF{:a#sBJJ1N#O#O"STXYZT[S\\cdechhi jkkF{:a#5#5!-"I$q'RS TUUG|

BJJ/G G #XYZY`Y`Xaahijhm!nooIIaL !    Nc                 8    U R                   R                  X5      $ N)r   get)r+   keydefault_values      r.   r4   QuantizationParams.get5   s    yy}}S00r1   c              #   8   #    U R                    S h  vN   g  N7fr3   r   r+   s    r.   __iter__QuantizationParams.__iter__8   s     99s   c                      U R                   U   $ r3   r9   )r+   r5   s     r.   __getitem__QuantizationParams.__getitem__;   s    yy~r1   c                      X R                   U'   g r3   r9   )r+   r5   values      r.   __setitem__QuantizationParams.__setitem__>   s    		#r1   c                 ,    [        U R                  5      $ r3   )lenr   r:   s    r.   __len__QuantizationParams.__len__A   s    499~r1   r9   r3   )__name__
__module____qualname____firstlineno__dictr    r   r/   r4   r;   r>   rB   rF   __static_attributes__ r1   r.   r   r   '   s/    tCH~ 1r1   r   c                       \ rS rSr SS jrS\R                  R                  S\4S j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g)BaseQuantizerE   Nc           	         [        U5      (       d  [        U5      nUR                  R                   Vs0 s H  oR                  U_M     snU l        U R
                  R                  UR                  R                   Vs0 s H  oR                  U_M     sn5        U R
                  R                  UR                  R                   Vs0 s H  oR                  U_M     sn5        [        U5      U l
        [        U5      U l        X l        X0l        U
(       a  U
O0 U l        SU R                  ;   =(       a    U R                  S   U l        S U l        SU R                  ;   =(       a    U R                  S   U l        U R                  R'                  SS 5      U l        U R                  R'                  SS5      U l        U R                  R'                  S5      U l        [/        USU5      U l        [/        USU5      U l         Ub\  [5        S UR7                  5        5       5      (       a7  [9        S	UR7                  5        Vs1 s H  n[;        U5      iM     sn S
35      eX`l        Xpl        Xl         Xl!        [E        U R                  R'                  S0 5      5      U l#        U R                  RI                  5        Vs0 s H  oR                  U_M     snU l%        U RF                  RM                  U RJ                  U R
                  RO                  5       U5      u  nnU(       d  [Q        U5      eU RF                  RS                  5       U l*        g s  snf s  snf s  snf s  snf s  snf )NEnableSubgraphForceQuantizeNoInputCheckWeightSymmetricActivationSymmetricFMinimumRealRangetensor_typec              3   L   #    U  H  n[        U[        5      (       + v   M     g 7fr3   )r   r   ).0ts     r.   	<genexpr>)BaseQuantizer.__init__.<locals>.<genexpr>{   s     ,kTjqAz1J-J-JTjs   "$z(tensors_range contains unexpected types z, not TensorData.TensorQuantOverrides)+r   r   graph
value_infonamevalue_infosupdateoutputinputr   modelr   opset_versionper_channelreduce_rangeextra_optionsenable_subgraph_quantizationparentforce_quantize_no_input_checkr4   _is_weight_symmetricis_activation_symmetricmin_real_rangegetattractivation_qTypeweight_qTypeanyvaluesr!   r"   tensors_rangenodes_to_quantizenodes_to_excludeop_types_to_quantizer   tensor_quant_overridesinitializerinitializersis_validkeysr*   get_quant_typestensor_quant_override_qtypes)r+   rf   rh   ri   rs   rr   rv   rw   rx   ry   rj   viotitr-   initzeroverrides_validoverrides_errs                     r.   r/   BaseQuantizer.__init__F   s    (..:5AE27++2H2HI2HBGGRK2HIu{{7I7I J7I"7I JKu{{7H7H I7H"7H IJu%
.u5&(.;] 2 22[t7I7IJZ7[ 	) '4+=+==q$BTBTUpBq 	* 261C1C1G1GHY[_1`!'+'9'9'='=>SUZ'[$"00445GH '(8-IY Z#L-N
	 $,kTaThThTj,k)k)k:mNbNbNd<eNdT!WNd<e:ggxy  +!2 0$8! 'AASASAWAWXnprAs&t#BF**BXBXBZ[BZw\\72BZ[)-)D)D)M)Mt//4468H*
& ]++,0,G,G,W,W,Y)s J J IL =f \s   M?M	MM"
M'weight_quant_typereturnc                    U R                   b  U R                   $ U[        R                  R                  [        R                  R                  [        R                  R
                  [        R                  R                  4;   $ r3   )rn   onnxTensorProtoINT4INT8INT16FLOAT8E4M3FN)r+   r   s     r.   is_weight_symmetric!BaseQuantizer.is_weight_symmetric   sh    $$0,,, !!!!""))	%
 
 	
r1   c                     [         er3   )NotImplementedErrorr:   s    r.   quantize_modelBaseQuantizer.quantize_model   s    !!r1   c                 P    [        XR                  R                  5       5      nUS L$ r3   )r   rf   r{   )r+   
input_namer{   s      r.   is_input_a_initializer$BaseQuantizer.is_input_a_initializer   s$    ":zz/E/E/GH$&&r1   c                     U R                   $ r3   )rh   r:   s    r.   is_per_channelBaseQuantizer.is_per_channel   s    r1   c                 D   [        XR                  R                  5       5      nUbA  UR                  [        R
                  R                  [        R
                  R                  4;   $ U R                  (       a  U R                  c  gU R                  R                  U5      $ )NF)r   rf   r{   	data_typer   r   FLOATFLOAT16rk   rl   is_valid_quantize_weight)r+   weight_nameweights      r.   r   &BaseQuantizer.is_valid_quantize_weight   sw    k::+A+A+CD##(8(8(>(>@P@P@X@X'YYY11t{{7J{{33K@@r1   c                 B   U R                   b4  [        U R                   5      S:w  a  UR                  U R                   ;  a  gUR                  U R                  ;  a  gUR                  [
        [        4;   a  gU R                  b  UR                  U R                  ;   a  gg)Nr   FT)rw   rE   ra   op_typery   r   r
   rx   )r+   nodes     r.   should_quantize_node"BaseQuantizer.should_quantize_node   s    "".D**+q0		!7!77<<t888<<O];;  ,d>S>S1Sr1   c                 
   [        XR                  R                  5       5      n[        U5      nU[        -   nU R
                  [        R                  R                  :X  Ga0  [        R                  " U5      nUR                  [        R                  :X  a  [        R                  R                  n	ORUR                  [        R                  :X  a  [        R                  R                  n	O[!        SUR                   S35      eUR#                  [        R                  5      n
[        R$                  " S/U
R                  S9nUR'                  S5      n[        R(                  R+                  X5      nU R                  R-                  U/5        SnGOX#-  U-  n[        R                  " U[        R.                  S9[        R                  " U[        R.                  S9-  n
U
R1                  5       n
[        R.                  " [        R2                  " [        R4                  5      R6                  5      n[        R.                  " [        R2                  " [        R4                  5      R8                  5      n[        R:                  " X:  5      (       d  [        R:                  " U
U:  5      (       a  [<        R>                  " SU S35        [        R@                  " XU5      R#                  [        R4                  5      n
[        R                  " U
[        R4                  S9R'                  URB                  5      n[        R(                  R+                  UU5      nU R                  R-                  U/5        [        R                  " XR                  S9R'                  S5      nS	nU R
                  n	US
-   n[        R(                  R+                  UU5      nU R                  R-                  U/5        U R
                  [        R                  R                  :X  a  U R
                  nO[        R                  RD                  nUS-   nU R
                  [        R                  R                  :X  a/  [        RF                  RI                  UU R
                  S/S/5      nOURJ                  S:  a]  [        RL                  " URN                  [        R4                  S9R'                  S5      n[        R(                  R+                  UU5      nO#[        RF                  RI                  UU/ S/5      nU R                  R-                  U/5        UUUUUU	4$ )zM
Quantized the bias. Zero Point == 0 and Scale == Input_Scale * Weight_Scale
zEOnly float16 or float32 are supported with float 8 but bias dtype is r   r   r'   CastzQuantized bias `z<` exceeds the range of a int32. The bias scale is too small.DequantizeLinear_scale_zero_point        r   )(r   rf   r{   r   r   rs   r   r   r   r$   asarrayr'   r)   r   r(   r   r!   astypearrayreshapenumpy_helper
from_arrayinitializer_extendfloat64roundiinfoint32minmaxrt   loggingwarningclipdimsINT32helpermake_tensorsizezerosshape)r+   	bias_nameinput_scaleweight_scalebetabias_initializer	bias_dataquantized_bias_namer   
node_qtypequantized_data
bias_scalebias_scale_datapacked_bias_initializer	node_type	int32_min	int32_maxbias_np_dataquantized_bias_scale_namepacked_bias_scale_initializerrX   quantized_bias_zp_namepacked_bias_zp_initializerbias_zp_datas                           r.   quantize_bias_static_impl'BaseQuantizer.quantize_bias_static_impl   s    (	::3I3I3KL)*:;	'*BB  0 0 = ==::i(DzzRZZ'!--55
rzz)!--33
"ghlhrhrgsst uvv![[4N1#^-A-ABJ(004O&*&7&7&B&B>&g#JJ))+B*CDI %3d:J  ZZ	DrzzR\dfdndnGooN+113N 

288BHH#5#9#9:I

288BHH#5#9#9:Ivvn011RVVNY<V5W5W&yk1mn  WW^	JQQRTRZRZ[N ::nBHHEMMN^NcNcdL&*&7&7&B&B<Qd&e#JJ))+B*CD !jj??KSSTVWO*I**J %8($B!(,(9(9(D(D_Vo(p%

%%'D&EF  0 0 = ==++K**00K!4}!D 0 0 = ==)-)@)@AWY]YjYjmnloruqv)w&__q 88J$4$4BHHEMMbQL)-):):)E)ElTj)k&)-)@)@AWYdfhkljm)n&

%%'A&BC  %"
 	
r1   c                 r   UR                   [        -   nUR                   S-   nUR                   S-   n[        U5      nU R                  R	                  UR                   0 S9n	SU	;   a  U	S   R
                  nSU	;   Ga  SU	;   Ga  [        R                  " U	S   [        U   S9n
[        R                  " U	S   5      n[        X(R                  5       X5      n[        U
[        R                  5      (       d   S[        U
5       35       eU
R                  [        R                  :w  a  U
R                  [        R                   :w  d   S	U
R                   35       e[        U[        R                  5      (       d   S[        U5       35       eGO[X R"                  :X  a  U R%                  U5      OU R&                  n[)        UR                  5       UU	R+                  S
U5      U	R+                  SU R,                  =(       a    U5      U R.                  U	R+                  S5      U	R+                  S5      S9u  pn[        U
[        R                  5      (       d   S[        U
5       35       eU
R                  [        R                  :w  a  U
R                  [        R                   :w  d   S	U
R                   35       e[        U[        R                  5      (       d   S[        U5       35       eUR0                  n[2        R4                  R7                  X~/ UR9                  S5      R;                  5       5      n[2        R4                  R7                  Xb/ U
R9                  S5      R;                  5       5      nU R<                  R?                  UU/5        U(       Gd  U R"                  [2        R@                  RB                  :X  Ga0  [2        R@                  " 5       nU R"                  Ul        URD                  RG                  URD                  5        UUl         UR                  5       RI                  5       RK                  5       Ul&        [N        b  [O        U5      nURP                  URP                  :w  d"  URK                  5       URK                  5       :w  a]  [S        SURP                   SURK                  5       SS  SURK                  5       SS  SURP                   S[U        U5      SS  S35      eGO,U[2        R@                  RV                  [2        R@                  RX                  4;   a  UR                  [        RZ                  [        R\                  4;  a  [S        SU S35      e[_        [a        URK                  5       5      5      n[2        R4                  R7                  XRURD                  USS9nOj[        Rb                  " U[2        R4                  Re                  U5      S9R9                  URD                  5      n[2        Rf                  Ri                  X5      nU R<                  R?                  U/5        XVU4$ )aj  
:param weight: TensorProto initializer
:param qType: type to quantize to
:param keep_float_weight: Whether to quantize the weight. In some cases, we only want to qunatize scale and zero point.
                          If keep_float_weight is False, quantize the weight, or don't quantize the weight.
:return: quantized weight name, zero point name, scale name
r   r   default_val
quant_typer   
zero_pointr   Unexpected type Unexpected dtype 	symmetricri   rminrmaxri   rp   rmin_overridermax_override)r   NzThe initializer of shape z! could not be created, expecting 
   z, got z and shape=z
raw=   r   Quantized weights for . must be 8-bit before packing as 4-bit values.Traw)5ra   r   r   rz   get_per_tensor_overridesrX   r$   r   r	   r   flattenr   r%   r"   r'   r(   r)   rs   r   ro   r   r4   ri   rp   r   r   r   r   r   tolistrf   r   r   r   r   extendcopytobytesraw_datar   r   RuntimeErrorr    r   UINT4int8uint8bytesr   r   tensor_dtype_to_np_dtyper   r   )r+   r   qTyperi   keep_float_weightq_weight_namezp_name
scale_nameweight_dataquant_overridesr   r   q_weight_datar   scale_dtypescale_initializerzero_initializerq_weight_initializercheckpacked_datas                       r.   quantize_initializer_impl'BaseQuantizer.quantize_initializer_impl  sG    &>>++-[[8+
 ,F355NNv{{hjNk?*#L1==Eo%,/*I/,"?G[\aGbcJHH_W56E,U4G4G4I5]Mj"**55\9I$zJZI[7\\5##rzz1j6F6F"**6T #J$4$4#56T eRZZ00R4DT%[M2RR0 <ADUDU;U007[_[w[wI/<##%##K;,00ARARAcWcd#22-11&9-11&90,J} j"**55\9I$zJZI[7\\5##rzz1j6F6F"**6T #J$4$4#56T eRZZ00R4DT%[M2RR0&& KK33JRQVQ^Q^_dQeQlQlQno;;2272zGYGYZ_G`GgGgGij

%%'8:J&KL   D$4$4$A$AA'+'7'7'9$151B1B$.$))00=,9$)0=0E0E0G0L0L0N0V0V0X$-$0 ..BCE{{k&7&775==?mNcNcNe;e*78I8I7JJk,446s;<F5==?SVTVCWBXXcdjdpdpcq$S)=%>t%D$EQH 
 4++00$2B2B2H2HII &&rww.AA&0?mn  $$6}7L7L7N$OP (,{{'>'>}U[U`U`bmsw'>'x$ "

=@d@dej@k l t tKK! (,'8'8'C'CM'a$JJ))+?*@Az11r1   c                    [        XR                  R                  5       5      nUc  [        SU5      e[	        U5      n[        UR                  5      n[        X85      u  pU	(       d  [        SU SU SU 35      eU
nUR                  U   nU R                  R                  USU0/S9n[        U5      nUS:w  a  X:w  a  [        SU S	U S
35      e[        US   S   U5      u  pU(       a  X:w  a  [        SU SU SUS   S    S35      eSUS   ;   a  US   S   R                  nUS   R                  SU R                  U5      5      nUS   R                  SU R                  =(       a    U5      n/ n/ n/ n[        UR                  5      n[        U5      nSUU'   [        U5       GH  nUR!                  UU5      nUU:  a  UOSnUU   nSU;   GaC  SU;   Ga<  ["        R$                  " US   [&        U   S9n["        R$                  " US   5      n[)        UUR+                  5       UU5      n[-        U["        R.                  5      (       d   S[1        U5       35       eUR2                  ["        R4                  :w  a  UR2                  ["        R6                  :w  d   SUR2                   35       e[-        U["        R.                  5      (       d   S[1        U5       35       e[-        U["        R.                  5      (       d   S[1        U5       35       eGO/[9        UR+                  5       UUUU R:                  UR                  S5      UR                  S5      S9u  nnn[-        U["        R.                  5      (       d   S[1        U5       35       eUR2                  ["        R4                  :w  a  UR2                  ["        R6                  :w  d   SUR2                   35       e[-        U["        R.                  5      (       d   S[1        U5       35       e[-        U["        R.                  5      (       d   S[1        U5       35       eUR=                  U5        UR=                  U5        UR=                  ["        R>                  " U5      RA                  U5      5        GM     ["        RB                  " UU5      nU[D        -   nUS-   nUS-   n URF                  U   /n![H        RJ                  RM                  U URN                  U!["        RP                  " U5      RS                  5       5      n"[H        RJ                  RM                  UUU!["        RP                  " U5      RS                  5       5      n#U R                  RU                  U"U#/5        U(       Gd\  U[H        RV                  RX                  [H        RV                  RZ                  4;   a  UR2                  ["        R\                  ["        R^                  4;  a  [a        SU S35      e[c        [e        URg                  5       5      5      n$[H        RJ                  RM                  UUUU$SS 9n%U R                  RU                  U%/5        O["        R>                  " U[H        RJ                  Ri                  U5      S9RA                  URF                  5      n[H        Rj                  Rm                  UU5      n%U R                  RU                  U%/5        UUU 4$ )!Nz{} is not an initializerzWeight z# has a per-channel axis with value z  that is out-of-bounds for rank r   r   r   z.Per-channel tensor quantization overrides for z must have either 1 or z& elements in the list of dictionaries.r   z"Tensor quantization overrides for z& specify an unexpected axis. Expected z
, but got r   r   r   ri   r   r   r   r   r   r   r   r   r   r   r   r   Tr   )7r   rf   r{   r*   r   rE   r   r   rz   get_per_channel_overridesrX   r4   r   ri   listrangetaker$   r   r	   r   r   r   r%   r"   r'   r(   r)   r   rp   appendr   r   concatenater   r   r   r   r   r   hstackr   r   r   r   r   r   r   r   r   r   r   r   r   r   )&r+   r   rs   channel_axisri   r  r{   weightsweights_rankis_axis_valid	axis_normchannel_countquant_overrides_for_channelsnum_channel_overridesis_axis_override_validaxis_overrider   zero_point_list
scale_listquantized_per_channel_data_listweights_shapereshape_dimsiper_channel_datachannel_override_indexchannel_quant_overridesr   r   quantized_per_channel_dataquantized_weightsr  r  r  zero_scale_shaper
  r  r  r  s&                                         r.    quantize_weight_per_channel_impl.BaseQuantizer.quantize_weight_per_channel_impln  s    #;

0F0F0HI7EE'47==)#1,#M +&I, X**69 
 !l3'+'B'B'\'\v|&<%= (] (
$ !$$@ A A%*?*P@ N,o-SU 
 1??[\]?^_e?fht0u-%)F4[M B(>4PQR4STZ4[3\\]_  7::7:<HTTL0377TE]E]^jEkl	3A6::>4K\K\Kmamn
*,'W]]+M*%&\"}%A&||A|<*+.C*CQ"&BCY&Z#11lF]6]XX&=l&KSghtSuv
!8!AB-= "2":":"<eZ.* "*bjj99`=MdS]N^M_;``9!''2::5*:J:Jbjj:X '
(8(8'9:X "%44V8He6VV4!"<bjjII &t,F'G&HII
 AN$,,. !-#'#6#6"9"="=f"E"9"="=f"EA=
E#= "*bjj99`=MdS]N^M_;``9!''2::5*:J:Jbjj:X '
(8(8'9:X "%44V8He6VV4!"<bjjII &t,F'G&HII "":.e$+222::>X3Y3a3abn3opU &Z NN+JLY#&>>- 8+
 (,,\:; KK33--/?:AVA]A]A_
  ;;22\#3RYY5O5V5V5X
 	

%%'8:J&KL  0 0 5 5t7G7G7M7MNN$**277BHH2EE&0?mn  $$67H7P7P7R$ST (,{{'>'>!<QU (? ($ 

--/C.DE$&JJ%++>>|L% '+**+ " (,'8'8'C'CDUWd'e$

--/C.DEgz11r1   c                    U R                   c  g U R                  R                  5        GH  nUR                  S;   Ga  U R	                  U5      (       d  M-  [        U R                  R                  5       UR                  S      5      S:w  a  Mf  UR                  S   U R                   ;  d  UR                  S   U R                   ;  a  M  U R                   UR                  S      n[        U[        5      (       d)  [        S[        U5       SUR                  S   < S35      eX R                   UR                  S   '   GM  UR                  S:X  d  GM-  U R	                  U5      (       d  GMF  [        [        R                  " S5      [        R                  " S	5      S
9U R                   UR                  S   '   GM     g )N)ClipRelur   r   r   z for r   Softmaxr         ?)lowesthighest)rv   rf   nodesr   r   rE   input_name_to_nodesre   rd   r   r   r!   r"   r$   r(   )r+   r   tds      r.   adjust_tensor_ranges"BaseQuantizer.adjust_tensor_ranges  s\   %JJ$$&D||//0066tzz557

1FG1L::a=(:(::dkk!nTXTfTf>f''A7!"j11#&6tBxjdkkRSnEWWX$YZZ46""4::a=1*00665?rzzRU`b`j`jkn`o5p""4;;q>2# 'r1   )rn   rr   rk   rj   rm   r|   ro   rp   rf   rx   rw   ry   rg   rl   rh   ri   r   rz   rv   rb   rs   r3   )r5  )FF)TF)rH   rI   rJ   rK   r/   r   r   DataTypeboolr   r   r   r   r   r   r   r  r/  r;  rM   rN   r1   r.   rP   rP   E   sl     HZT
T5E5E5N5N 
SW 
"' A&R
hY2@ L2\qr1   rP   ) r   typingr   numpyr$   r   onnx.numpy_helperonnx.reference.op_runr   ImportError	calibrater   
onnx_modelr   quant_utilsr   r	   r
   r   r   r   r   r   r   r   r   r   r   rz   r   r   rP   rN   r1   r.   <module>rG     so        7
 " !    ? <Lq Lqm  s   A# #A.-A.