Ë
    ÝÍ:j¥d  ã                   óà   — d dl Z d dlmZ d dlZd dlZd dlZ	 d dlmZ ddl
mZ ddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZ  G d	„ d
«      Z G d„ d«      Zy# e	$ r dZY ŒNw xY w)é    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                   óB   — e Zd Zdeeef   fd„Zd	d„Zd„ Zd„ Z	d„ Z
d„ Zy)
ÚQuantizationParamsÚdatac                 óD  — i | _         |j                  «       D �]  \  }}t        |t        «      st	        dt        |«      › d|›d�«      ‚|dk7  rEt        |t        t        t        j                  t        f«      st	        dt        |«      › d|›d�«      ‚|dk(  r*t        |t        «      s|�t	        dt        |«      › d�«      ‚|dk(  rG|j                  t        j                  t        j                  fvrt        d|j                  › d|›�«      ‚|| j                   |<   �Œ y )	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       ú|/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/onnxruntime/quantization/base_quantizer.pyÚ__init__zQuantizationParams.__init__(   s  € ØˆŒ	Ø—J‘J“Ló 		‰DˆAˆqÜ˜a¤Ô%ÜÐ";¼DÀ»G¸9ÀGÈAÈ5ÐPQÐ RÓSÐSØ�FŠ{¤:¨a´#´s¼B¿J¹JÌÐ1NÔ#OÜÐ"SÔTXÐYZÓT[ÐS\Ð\cÐdeÐchÐhiÐ jÓkÐkØ�FŠ{¤:¨a´Ô#5¸!¸-ÜÐ"IÌ$ÈqË'ÈÐRSÐ TÓUÐUØ�GŠ| §¡´·
±
¼B¿J¹JÐ/GÑ GÜ Ð#XÐYZ×Y`ÑY`ÐXaÐahÐijÐhmÐ!nÓoÐoØˆD�I‰I�a‹Lñ		ó    Nc                 ó:   — | j                   j                  ||«      S ©N)r   Úget)r*   ÚkeyÚdefault_values      r-   r2   zQuantizationParams.get5   s   € Ø�y‰y�}‰}˜S -Ó0Ð0r/   c              #   ó8   K  — | j                   E d {  –—†  y 7 Œ­wr1   ©r   ©r*   s    r-   Ú__iter__zQuantizationParams.__iter__8   s   è ø€ Ø—9‘9×Òús   ‚’“c                 ó    — | j                   |   S r1   r6   )r*   r3   s     r-   Ú__getitem__zQuantizationParams.__getitem__;   s   € Ø�y‰y˜‰~Ðr/   c                 ó"   — || j                   |<   y r1   r6   )r*   r3   Úvalues      r-   Ú__setitem__zQuantizationParams.__setitem__>   s   € Øˆ�	‰	�#Šr/   c                 ó,   — t        | j                  «      S r1   )Úlenr   r7   s    r-   Ú__len__zQuantizationParams.__len__A   s   € Ü�4—9‘9‹~Ðr/   r1   )Ú__name__Ú
__module__Ú__qualname__Údictr   r   r.   r2   r8   r:   r=   r@   © r/   r-   r   r   '   s/   „ ð˜t C¨ H™~ó ó1òòòór/   r   c                   óŽ   — e Zd Z	 dd„Zdej
                  j                  defd„Zd„ Z	d„ Z
d„ Zd	„ Zd
„ Zdd„Zdd„Z	 	 dd„Zd„ Zy)ÚBaseQuantizerNc           	      óÎ  — t        |«      st        |«      }|j                  j                  D �ci c]  }|j                  |“Œ c}| _        | j
                  j                  |j                  j                  D �ci c]  }|j                  |“Œ c}«       | j
                  j                  |j                  j                  D �ci c]  }|j                  |“Œ c}«       t        |«      | _
        t        |«      | _        || _        || _        |
r|
ni | _        d| j                  v xr | j                  d   | _        d | _        d| j                  v xr | j                  d   | _        | j                  j'                  dd «      | _        | j                  j'                  dd«      | _        | j                  j'                  dd«      | _        | j                  j'                  d«      | _        t1        |d|«      | _        t1        |d|«      | _        	 |�Tt7        d	„ |j9                  «       D «       «      r4t;        d
|j9                  «       D �ch c]  }t=        |«      ’Œ c}› d�«      ‚|| _        || _         || _!        |	| _"        tG        | j                  j'                  di «      «      | _$        | j                  jK                  «       D �ci c]  }|j                  |“Œ c}| _&        | jH                  jO                  | jL                  | j
                  jQ                  «       |«      \  }}|stS        |«      ‚| jH                  jU                  «       | _+        y c c}w c c}w c c}w c c}w c c}w )NÚEnableSubgraphÚForceQuantizeNoInputCheckÚWeightSymmetricÚActivationSymmetricFÚActivationRestrictedAsymmetricÚMinimumRealRangeÚtensor_typec              3   ó>   K  — | ]  }t        |t        «       –— Œ y ­wr1   )r   r   )Ú.0Úts     r-   ú	<genexpr>z)BaseQuantizer.__init__.<locals>.<genexpr>|   s   è ø€ Ò,kÈq´¸A¼zÓ1JÔ-JÑ,kùs   ‚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_checkr2   Ú_is_weight_symmetricÚis_activation_symmetricÚ#is_activation_restricted_asymmetricÚ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*   r\   r^   r_   rj   ri   rm   rn   ro   rp   r`   ÚviÚotÚitr,   ÚinitzerÚoverrides_validÚoverrides_errs                     r-   r.   zBaseQuantizer.__init__F   s   € ô (¨Ô.Ü:¸5ÓAˆEØ27·+±+×2HÑ2HÖI¨B˜BŸG™G R™KÒIˆÔØ×Ñ×Ñ°u·{±{×7IÑ7IÖ J° §¡¨"¡Ò JÔKØ×Ñ×Ñ°u·{±{×7HÑ7HÖ I° §¡¨"¡Ò IÔJä˜uÓ%ˆŒ
Ü.¨uÓ5ˆÔØ&ˆÔØ(ˆÔá.;™]ÀˆÔà × 2Ñ 2Ð2Ò[°t×7IÑ7IÐJZÑ7[ð 	Ô)ð ˆŒà'¨4×+=Ñ+=Ð=ÒqÀ$×BTÑBTÐUpÑBqð 	Ô*ð 26×1CÑ1C×1GÑ1GÐHYÐ[_Ó1`ˆÔ!Ø'+×'9Ñ'9×'=Ñ'=Ð>SÐUZÓ'[ˆÔ$Ø37×3EÑ3E×3IÑ3IÐJjÐlqÓ3rˆÔ0Ø"×0Ñ0×4Ñ4Ð5GÓHˆÔä 'Ð(8¸-ÐIYÓ ZˆÔÜ# L°-ÀÓNˆÔð
	ð Ð$¬Ñ,kÐTa×ThÑThÓTjÔ,kÔ)kÜØ:Èm×NbÑNbÓNdÖ<eÈ¼TÀ!½WÒ<eÐ:gÐgxÐyóð ð +ˆÔØ!2ˆÔØ 0ˆÔØ$8ˆÔ!ô 'AÀ×ASÑAS×AWÑAWÐXnÐprÓAsÓ&tˆÔ#àBFÇ*Á*×BXÑBXÓBZÖ[°w˜WŸ\™\¨7Ñ2Ò[ˆÔØ)-×)DÑ)D×)MÑ)MØ×Ñ˜t×/Ñ/×4Ñ4Ó6Ð8Hó*
Ñ&ˆ˜ñ Ü˜]Ó+Ð+à,0×,GÑ,G×,WÑ,WÓ,YˆÕ)ùòu JùÚ JùÚ IùòN =fùò \s   ¯MÁ8MÃ MÉM
ËM"Úweight_quant_typeÚreturnc                 ó  — | j                   �| j                   S |t        j                  j                  t        j                  j                  t        j                  j
                  t        j                  j                  fv S r1   )rd   ÚonnxÚTensorProtoÚINT4ÚINT8ÚINT16ÚFLOAT8E4M3FN)r*   r~   s     r-   Úis_weight_symmetricz!BaseQuantizer.is_weight_symmetric‘   sh   € Ø×$Ñ$Ð0Ø×,Ñ,Ð,Ø Ü×Ñ×!Ñ!Ü×Ñ×!Ñ!Ü×Ñ×"Ñ"Ü×Ñ×)Ñ)ð	%
ð 
ð 	
r/   c                 ó   — t         ‚r1   )ÚNotImplementedErrorr7   s    r-   Úquantize_modelzBaseQuantizer.quantize_model›   s   € Ü!Ð!r/   c                 óR   — t        || j                  j                  «       «      }|d uS r1   )r   r\   rr   )r*   Ú
input_namerr   s      r-   Úis_input_a_initializerz$BaseQuantizer.is_input_a_initializerž   s&   € Ü" :¨t¯z©z×/EÑ/EÓ/GÓHˆØ $Ð&Ð&r/   c                 ó   — | j                   S r1   )r^   r7   s    r-   Úis_per_channelzBaseQuantizer.is_per_channel¢   s   € Ø×ÑÐr/   c                 ó6  — t        || j                  j                  «       «      }|�@|j                  t        j
                  j                  t        j
                  j                  fv S | j                  r| j                  €y| j                  j                  |«      S )NF)r   r\   rr   Ú	data_typer�   r‚   ÚFLOATÚFLOAT16ra   rb   Úis_valid_quantize_weight)r*   Úweight_nameÚweights      r-   r”   z&BaseQuantizer.is_valid_quantize_weight¥   sy   € Ü˜k¨4¯:©:×+AÑ+AÓ+CÓDˆØÐØ×#Ñ#¬×(8Ñ(8×(>Ñ(>Ä×@PÑ@P×@XÑ@XÐ'YÐYÐYØ×1Ò1°t·{±{Ð7JØØ�{‰{×3Ñ3°KÓ@Ð@r/   c                 ó,  — | j                   �1t        | j                   «      dk7  r|j                  | j                   vry|j                  | j                  vry|j                  t
        t        fv ry| j                  �|j                  | j                  v ryy)Nr   FT)rn   r?   rW   Úop_typerp   r   r
   ro   )r*   Únodes     r-   Úshould_quantize_nodez"BaseQuantizer.should_quantize_node­   s‚   € à×"Ñ"Ð.Ü�D×*Ñ*Ó+¨qÒ0Ø—	‘	 ×!7Ñ!7Ñ7àà�<‰<˜t×8Ñ8Ñ8Øà�<‰<œO¬]Ð;Ñ;Øà× Ñ Ð,°·±¸d×>SÑ>SÑ1SØàr/   c                 ó�
  — t        || j                  j                  «       «      }t        |«      }|t        z   }| j
                  t        j                  j                  k(  �r0t        j                  |«      }|j                  t        j                  k(  rt        j                  j                  }	nQ|j                  t        j                  k(  rt        j                  j                  }	nt!        d|j                  › d�«      ‚|j#                  t        j                  «      }
t        j$                  dg|
j                  ¬«      }|j'                  d«      }t        j(                  j+                  |
|«      }| j                  j-                  |g«       d}�n||z  |z  }t        j                  |t        j.                  ¬«      t        j                  |t        j.                  ¬«      z  }
|
j1                  «       }
t        j.                  t        j2                  t        j4                  «      j6                  «      }t        j.                  t        j2                  t        j4                  «      j8                  «      }t        j:                  |
|k  «      st        j:                  |
|kD  «      rt=        j>                  d|› d�«       t        j@                  |
||«      j#                  t        j4                  «      }
t        j                  |
t        j4                  ¬«      j'                  |jB                  «      }t        j(                  j+                  ||«      }| j                  j-                  |g«       t        j                  ||j                  ¬«      j'                  d«      }d	}| j
                  }	|d
z   }t        j(                  j+                  ||«      }| j                  j-                  |g«       | j
                  t        j                  j                  k(  r| j
                  }nt        j                  jD                  }|dz   }| j
                  t        j                  j                  k(  r/t        jF                  jI                  || j
                  dgdg«      }n‘|jJ                  dkD  r_t        jL                  |jN                  t        j4                  ¬«      j'                  d«      }t        j(                  j+                  ||«      }n#t        jF                  jI                  ||g dg«      }| j                  j-                  |g«       ||||||	fS )z]
        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   r\   rr   r   r   rj   r�   r‚   r†   r#   Úasarrayr&   r(   r“   r'   r’   r    ÚastypeÚarrayÚreshapeÚnumpy_helperÚ
from_arrayÚinitializer_extendÚfloat64ÚroundÚiinfoÚint32ÚminÚmaxrk   Ú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_initializerrO   Úquantized_bias_zp_nameÚpacked_bias_zp_initializerÚbias_zp_datas                           r-   Úquantize_bias_static_implz'BaseQuantizer.quantize_bias_static_implÀ   s  € ô (¨	°4·:±:×3IÑ3IÓ3KÓLÐÜ)Ð*:Ó;ˆ	Ø'Ô*BÑBÐð ×Ñ¤× 0Ñ 0× =Ñ =Ó=Ü—:‘:˜iÓ(ˆDØ�z‰zœRŸZ™ZÒ'Ü!×-Ñ-×5Ñ5‘
Ø—‘œrŸz™zÒ)Ü!×-Ñ-×3Ñ3‘
äÐ"gÐhl×hrÑhrÐgsÐstÐ uÓvÐvØ!Ÿ[™[¬¯©Ó4ˆNÜŸ™ 1 #¨^×-AÑ-AÔBˆJØ(×0Ñ0°Ó4ˆOÜ&*×&7Ñ&7×&BÑ&BÀ>ÐSfÓ&gÐ#Ø�J‰J×)Ñ)Ð+BÐ*CÔDØŠIð % |Ñ3°dÑ:ˆJô  ŸZ™Z¨	¼¿¹ÔDÄrÇzÁzÐR\Ôdf×dnÑdnÔGoÑoˆNØ+×1Ñ1Ó3ˆNô Ÿ
™
¤2§8¡8¬B¯H©HÓ#5×#9Ñ#9Ó:ˆIÜŸ
™
¤2§8¡8¬B¯H©HÓ#5×#9Ñ#9Ó:ˆIÜ�v‰v�n yÑ0Ô1´R·V±V¸NÈYÑ<VÔ5WÜ—‘Ø& y kÐ1mÐnôô  ŸW™W ^°YÀ	ÓJ×QÑQÔRT×RZÑRZÓ[ˆNô Ÿ:™: n¼B¿H¹HÔE×MÑMÐN^×NcÑNcÓdˆLÜ&*×&7Ñ&7×&BÑ&BÀ<ÐQdÓ&eÐ#Ø�J‰J×)Ñ)Ð+BÐ*CÔDô !Ÿj™j¨¸9¿?¹?ÔK×SÑSÐTVÓWˆOØ*ˆIØ×*Ñ*ˆJð %8¸(Ñ$BÐ!Ü(,×(9Ñ(9×(DÑ(DÀ_ÐVoÓ(pÐ%Ø�
‰
×%Ñ%Ð'DÐ&EÔFð ×Ñ¤× 0Ñ 0× =Ñ =Ò=Ø×+Ñ+‰Kä×*Ñ*×0Ñ0ˆKà!4°}Ñ!DÐØ×Ñ¤× 0Ñ 0× =Ñ =Ò=Ü)-¯©×)@Ñ)@ÐAWÐY]×YjÑYjÐmnÐloÐruÐqvÓ)wÑ&Ø�_‰_˜qÒ ÜŸ8™8 J×$4Ñ$4¼B¿H¹HÔE×MÑMÈbÓQˆLÜ)-×):Ñ):×)EÑ)EÀlÐTjÓ)kÑ&ä)-¯©×)@Ñ)@ÐAWÐYdÐfhÐklÐjmÓ)nÐ&Ø�
‰
×%Ñ%Ð'AÐ&BÔCð  Ø%Ø"ØØØð
ð 	
r/   c                 ó4  — |j                   t        z   }|j                   dz   }|j                   dz   }t        |«      }| j                  j	                  |j                   i ¬«      }	d|	v r|	d   j
                  }d|	v �rd|	v rþt        j                  |	d   t        |   ¬«      }
t        j                  |	d   «      }t        ||j                  «       ||
«      }t        |
t        j                  «      sJ dt        |
«      › �«       ‚|
j                  t        j                  k7  r|
j                  t        j                   k7  sJ d	|
j                  › �«       ‚t        |t        j                  «      �saJ dt        |«      › �«       ‚|| j"                  k(  r| j%                  |«      n| j&                  }t)        |j                  «       ||	j+                  d
|«      |	j+                  d| j,                  xr |«      | j.                  |	j+                  d«      |	j+                  d«      ¬«      \  }
}}t        |
t        j                  «      sJ dt        |
«      › �«       ‚|
j                  t        j                  k7  r|
j                  t        j                   k7  sJ d	|
j                  › �«       ‚t        |t        j                  «      sJ dt        |«      › �«       ‚|j0                  }t2        j4                  j7                  ||g |j9                  d«      j;                  «       «      }t2        j4                  j7                  ||g |
j9                  d«      j;                  «       «      }| j<                  j?                  ||g«       |�sŸ| j"                  t2        j@                  jB                  k(  �r,t3        j@                  «       }| j"                  |_        |jD                  jG                  |jD                  «       ||_         |j                  «       jI                  «       jK                  «       |_&        tN        ��ÒtO        |«      }|jP                  |jP                  k7  s"|jK                  «       |jK                  «       k7  �rŒtS        d|jP                  › d|jK                  «       dd › d|jK                  «       dd › d|jP                  › dtU        |«      dd › d�«      ‚|t2        j@                  jV                  t2        j@                  jX                  fv rŒ|j                  t        jZ                  t        j\                  fvrtS        d|› d�«      ‚t_        ta        |jK                  «       «      «      }t2        j4                  j7                  |||jD                  |d¬«      }nmt        jb                  |t2        j4                  je                  |«      ¬«      j9                  |jD                  «      }t2        jf                  ji                  ||«      }| j<                  j?                  |g«       |||fS )aš  
        :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 Ú	symmetricr_   ÚrminÚrmax©r_   rg   Ú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)5rW   r   r   rq   Úget_per_tensor_overridesrO   r#   r¥   r	   r   Úflattenr   r$   r!   r&   r'   r(   rj   r‡   re   r   r2   r_   rg   r‘   r�   rµ   r¶   r¦   Útolistr\   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–   ÚqTyper_   Ú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_implz'BaseQuantizer.quantize_initializer_impl  sN  € ð Ÿ™Ô&>Ñ>ˆØ—+‘+ Ñ-ˆØ—[‘[ 8Ñ+ˆ
ô ,¨FÓ3ˆØ×5Ñ5×NÑNÈvÏ{É{ÐhjÐNÓkˆØ˜?Ñ*Ø# LÑ1×=Ñ=ˆEà�oÒ%¨,¸/Ñ*IÜŸ™ /°,Ñ"?ÔG[Ð\aÑGbÔcˆJÜ—H‘H˜_¨WÑ5Ó6ˆEÜ,¨U°K×4GÑ4GÓ4IÈ5ÐR\Ó]ˆMÜ˜j¬"¯*©*Ô5Ð\Ð9IÌ$ÈzÓJZÐI[Ð7\Ó\Ð5Ø×#Ñ#¤r§z¡zÒ1°j×6FÑ6FÌ"Ï*É*Ò6Tð Ø# J×$4Ñ$4Ð#5Ð6óÐTô ˜e¤R§Z¡ZÕ0ÐRÐ4DÄTÈ%Ã[ÀMÐ2RÓRÐ0ð <AÀD×DUÑDUÒ;U˜×0Ñ0°Ô7Ð[_×[wÑ[wˆIÜ/<Ø×#Ñ#Ó%ØØ×#Ñ# K°Ó;Ø,×0Ñ0°À×ARÑARÒAcÐWcÓdØ#×2Ñ2Ø-×1Ñ1°&Ó9Ø-×1Ñ1°&Ó9ô0Ñ,ˆJ˜˜}ô ˜j¬"¯*©*Ô5Ð\Ð9IÌ$ÈzÓJZÐI[Ð7\Ó\Ð5Ø×#Ñ#¤r§z¡zÒ1°j×6FÑ6FÌ"Ï*É*Ò6Tð Ø# J×$4Ñ$4Ð#5Ð6óÐTô ˜e¤R§Z¡ZÔ0ÐRÐ4DÄTÈ%Ã[ÀMÐ2RÓRÐ0à×&Ñ&ˆÜ ŸK™K×3Ñ3°JÀÈRÐQV×Q^ÑQ^Ð_dÓQe×QlÑQlÓQnÓoÐÜŸ;™;×2Ñ2°7¸EÀ2Àz×GYÑGYÐZ_ÓG`×GgÑGgÓGiÓjÐØ�
‰
×%Ñ%Ð'8Ð:JÐ&KÔLâ Ø× Ñ ¤D×$4Ñ$4×$AÑ$AÓAÜ'+×'7Ñ'7Ó'9Ð$Ø15×1BÑ1BÐ$Ô.Ø$×)Ñ)×0Ñ0°·±Ô=Ø,9Ð$Ô)à0=×0EÑ0EÓ0G×0LÑ0LÓ0N×0VÑ0VÓ0XÐ$Ô-Ü$Ñ0ô .Ð.BÓC�EØ—{‘{ k×&7Ñ&7Ò7¸5¿=¹=»?Èm×NcÑNcÓNeÓ;eÜ*Ø7¸×8IÑ8IÐ7JÐJkØ,×4Ñ4Ó6°s¸Ð;Ð<¸FÀ5Ç=Á=Ã?ÐSVÐTVÐCWÐBXÐXcÐdj×dpÑdpÐcqØ$¤SÐ)=Ó%>¸tÀÐ%DÐ$EÀQðHóð ð
 œ4×+Ñ+×0Ñ0´$×2BÑ2B×2HÑ2HÐIÑIØ ×&Ñ&¬r¯w©w¼¿¹Ð.AÑAÜ&Ø0°°Ð?mÐnóð ô $Ô$6°}×7LÑ7LÓ7NÓ$OÓP�ô (,§{¡{×'>Ñ'>¸}ÈeÐU[×U`ÑU`ÐbmÐswÐ'>Ó'xÑ$ä "§
¡
¨=ÄÇÁ×@dÑ@dÐejÓ@kÔ l× tÑ tØ—K‘Kó!�ô (,×'8Ñ'8×'CÑ'CÀMÐS`Ó'aÐ$Ø�J‰J×)Ñ)Ð+?Ð*@ÔAà˜g zÐ1Ð1r/   c                 ót  — t        || j                  j                  «       «      }|€t        d|«      ‚t	        |«      }t        |j                  «      }t        ||«      \  }	}
|	st        d|› d|› d|› �«      ‚|
}|j                  |   }| j                  j                  |d|ig¬«      }t        |«      }|dk7  r||k7  rt        d|› d	|› d
�«      ‚t        |d   d   |«      \  }}|r||k7  rt        d|› d|› d|d   d   › d�«      ‚d|d   v r|d   d   j                  }|d   j                  d| j                  |«      «      }|d   j                  d| j                  xr |«      }g }g }g }t        |j                  «      }t        |«      }d||<   t        |«      D �]Î  }|j!                  ||«      }||k  r|nd}||   }d|v �r0d|v �r+t#        j$                  |d   t&        |   ¬«      }t#        j$                  |d   «      }t)        ||j+                  «       ||«      }t-        |t"        j.                  «      sJ dt1        |«      › �«       ‚|j2                  t"        j4                  k7  r|j2                  t"        j6                  k7  sJ d|j2                  › �«       ‚t-        |t"        j.                  «      sJ dt1        |«      › �«       ‚t-        |t"        j.                  «      �s4J dt1        |«      › �«       ‚t9        |j+                  «       |||| j:                  |j                  d«      |j                  d«      ¬«      \  }}}t-        |t"        j.                  «      sJ dt1        |«      › �«       ‚|j2                  t"        j4                  k7  r|j2                  t"        j6                  k7  sJ d|j2                  › �«       ‚t-        |t"        j.                  «      sJ dt1        |«      › �«       ‚t-        |t"        j.                  «      sJ dt1        |«      › �«       ‚|j=                  |«       |j=                  |«       |j=                  t#        j>                  |«      jA                  |«      «       �ŒÑ t#        jB                  ||«      }|tD        z   }|dz   }|dz   } |jF                  |   g}!tH        jJ                  jM                  | |jN                  |!t#        jP                  |«      jS                  «       «      }"tH        jJ                  jM                  |||!t#        jP                  |«      jS                  «       «      }#| j                  jU                  |"|#g«       |�s]|tH        jV                  jX                  tH        jV                  jZ                  fv rž|j2                  t"        j\                  t"        j^                  fvrta        d|› d�«      ‚tc        te        |jg                  «       «      «      }$tH        jJ                  jM                  ||||$d¬ «      }%| j                  jU                  |%g«       n‰t#        j>                  |tH        jJ                  ji                  |«      ¬«      jA                  |jF                  «      }tH        jj                  jm                  ||«      }%| j                  jU                  |%g«       ||| fS )!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×   r_   r   rÔ   rœ   rÕ   rÖ   rØ   rÙ   rÚ   r¡   r    rß   rà   Trá   )7r   r\   rr   r)   r   r?   r¹   r   rq   Úget_per_channel_overridesrO   r2   r‡   r_   ÚlistÚrangeÚtaker#   r¥   r	   r   rä   r   r$   r!   r&   r'   r(   r   rg   Úappendr£   r¦   Úconcatenater   r³   r�   rµ   r¶   r‘   Úhstackrå   r©   r‚   rƒ   rë   rì   rí   rê   rî   r   rè   rï   r§   r¨   )&r*   r•   rj   Úchannel_axisr_   rñ   rr   Ú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_implz.BaseQuantizer.quantize_weight_per_channel_implo  sÇ  € ô # ;°·
±
×0FÑ0FÓ0HÓIˆØÐÜÐ7¸ÓEÐEä'¨Ó4ˆÜ˜7Ÿ=™=Ó)ˆÜ#1°,ÀÓ#MÑ ˆ�yÙÜØ˜+˜Ð&IÈ,Èð X*Ø*6¨ð9óð ð
 !ˆØŸ™ lÑ3ˆØ'+×'BÑ'B×'\Ñ'\Ø v¨|Ð&<Ð%=ð (]ó (
Ð$ô !$Ð$@Ó AÐØ  AÒ%Ð*?À=Ò*PÜØ@ÀÀð NØ,˜oÐ-SðUóð ô
 1?Ð?[Ð\]Ñ?^Ð_eÑ?fÐhtÓ0uÑ-Ð Ù%¨¸,Ò)FÜØ4°[°Mð BØ(˜>¨Ð4PÐQRÑ4SÐTZÑ4[Ð3\Ð\]ð_óð ð Ð7¸Ñ:Ñ:Ø7¸Ñ:¸<ÑH×TÑTˆLà0°Ñ3×7Ñ7¸ÀT×E]ÑE]Ð^jÓEkÓlˆ	Ø3°AÑ6×:Ñ:¸>È4×K\ÑK\ÒKmÐamÓnˆØˆØˆ
Ø*,Ð'Ü˜WŸ]™]Ó+ˆÜ˜MÓ*ˆØ%&ˆ�\Ñ"Ü�}Ó%ó *	qˆAØ&Ÿ|™|¨A¨|Ó<ÐØ*+Ð.CÒ*C¡QÈÐ"Ø&BÐCYÑ&ZÐ#àÐ1Ò1°lÐF]Ò6]ÜŸX™XÐ&=¸lÑ&KÔSgÐhtÑSuÔv�
ÜŸ™Ð!8¸Ñ!AÓB�Ü-=Ø Ð"2×":Ñ":Ó"<¸eÀZó.Ð*ô " *¬b¯j©jÔ9Ð`Ð=MÌdÐS]ÓN^ÐM_Ð;`Ó`Ð9Ø!×'Ñ'¬2¯:©:Ò5¸*×:JÑ:JÌbÏjÉjÒ:Xð Ø'¨
×(8Ñ(8Ð'9Ð:óÐXô " %¬¯©Ô4ÐVÐ8HÌÈeËÈÐ6VÓVÐ4Ü!Ð"<¼b¿j¹jÕIð Ø&¤tÐ,FÓ'GÐ&HÐIóÐIô
 ANØ$×,Ñ,Ó.Ø ØØ!-Ø#'×#6Ñ#6Ø"9×"=Ñ"=¸fÓ"EØ"9×"=Ñ"=¸fÓ"EôAÑ=�
˜EÐ#=ô " *¬b¯j©jÔ9Ð`Ð=MÌdÐS]ÓN^ÐM_Ð;`Ó`Ð9Ø!×'Ñ'¬2¯:©:Ò5¸*×:JÑ:JÌbÏjÉjÒ:Xð Ø'¨
×(8Ñ(8Ð'9Ð:óÐXô " %¬¯©Ô4ÐVÐ8HÌÈeËÈÐ6VÓVÐ4Ü!Ð"<¼b¿j¹jÔIð Ø&¤tÐ,FÓ'GÐ&HÐIóÐIð ×"Ñ" :Ô.Ø×Ñ˜eÔ$Ø+×2Ñ2´2·:±:Ð>XÓ3Y×3aÑ3aÐbnÓ3oÖpðU*	qôZ ŸN™NÐ+JÈLÓYÐØ#Ô&>Ñ>ˆØ Ñ-ˆØ  8Ñ+ˆ
ð (×,Ñ,¨\Ñ:Ð;ÐÜ ŸK™K×3Ñ3Ø˜×-Ñ-Ð/?ÄÇÁÈ:ÓAV×A]ÑA]ÓA_ó
Ðô  Ÿ;™;×2Ñ2Ø�\Ð#3´R·Y±Y¸Ó5O×5VÑ5VÓ5Xó
Ðð 	�
‰
×%Ñ%Ð'8Ð:JÐ&KÔLâ Ø¤× 0Ñ 0× 5Ñ 5´t×7GÑ7G×7MÑ7MÐNÑNØ$×*Ñ*´2·7±7¼B¿H¹HÐ2EÑEÜ&Ø0°°Ð?mÐnóð ô $Ô$6Ð7H×7PÑ7PÓ7RÓ$SÓT�ô (,§{¡{×'>Ñ'>Ø! <°ÀÐQUð (?ó (Ð$ð —
‘
×-Ñ-Ð/CÐ.DÕEä$&§J¡JØ%ÜŸ+™+×>Ñ>¸|ÓLô%÷ ‘'˜+×*Ñ*Ó+ð "ô (,×'8Ñ'8×'CÑ'CÐDUÐWdÓ'eÐ$Ø—
‘
×-Ñ-Ð/CÐ.DÔEà˜g zÐ1Ð1r/   c                 óB  — | j                   €y | j                  j                  «       D �]t  }|j                  dv rò| j	                  |«      sŒ$t        | j                  j                  «       |j                  d      «      dk7  rŒ[|j                  d   | j                   vs|j                  d   | j                   vrŒ’| j                   |j                  d      }t        |t        «      s(t        dt        |«      › d|j                  d   ›d�«      ‚|| j                   |j                  d   <   �Œ|j                  dk(  s�Œ| j	                  |«      s�Œ(t        t        j                  d«      t        j                  d	«      ¬
«      | j                   |j                  d   <   �Œw y )N)ÚClipÚRelur   r   rÕ   z for r   ÚSoftmaxr¢   ç      ð?)ÚlowestÚhighest)rm   r\   Únodesr˜   rš   r?   Úinput_name_to_nodesr[   rZ   r   r   r    r!   r#   r'   )r*   r™   Útds      r-   Úadjust_tensor_rangesz"BaseQuantizer.adjust_tensor_rangesý  s\  € Ø×ÑÐ%Øà—J‘J×$Ñ$Ó&ó 	qˆDà�|‰|Ð/Ñ/Ø×0Ñ0°Ô6ØÜ�t—z‘z×5Ñ5Ó7¸¿
¹
À1¹ÑFÓGÈ1ÒLØØ—:‘:˜a‘=¨×(:Ñ(:Ñ:¸d¿k¹kÈ!¹nÐTX×TfÑTfÑ>fØØ×'Ñ'¨¯©°A©Ñ7�Ü! "¤jÔ1Ü#Ð&6´t¸B³x°jÀÀdÇkÁkÐRSÁnÐEWÐWXÐ$YÓZÐZØ46�×"Ñ" 4§:¡:¨a¡=Ó1à—‘ Ô*Ø×0Ñ0°Ô6ÙÜ5?ÄrÇzÁzÐRUÃÔ`b×`jÑ`jÐknÓ`oÔ5p�×"Ñ" 4§;¡;¨q¡>Ó2ñ#	qr/   r1   )r"  )FF)TF)rA   rB   rC   r.   r�   r‚   ÚDataTypeÚboolr‡   rŠ   r�   r�   r”   rš   rÏ   rþ   r  r(  rE   r/   r-   rG   rG   E   sl   „ ð óIZðV
°T×5EÑ5E×5NÑ5Nð 
ÐSWó 
ò"ò'ò òAòó&R
óhY2ð@ ØóL2ó\qr/   rG   ) 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   rq   r   r   rG   rE   r/   r-   ú<module>r3     so   ðó Ý ã Û Û ðÝ7õ
 "Ý !÷÷ ÷ õ õ ?÷ñ ÷<Mqò Mqøðm ò àÒðús   ˜A# Á#A-Á,A-