Ë
    ÝÍ:j¦  ã                   ó¢   — d dl Z d dlZd dlZddlmZmZmZmZm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZ d„ Zd	„ Zd
„ Z G d„ de«      Z G d„ de«      Zy)é    Né   )ÚTENSOR_NAME_QUANT_SUFFIXÚQuantizedValueÚQuantizedValueTypeÚattribute_to_kwargÚfind_by_nameÚget_mul_nodeÚ	ms_domainé   )ÚQuantOperatorBase)Ú	QOpMatMul)ÚQDQOperatorBasec                 ó®   — | j                   D �cg c]  }|j                  dk(  sŒ|‘Œ }}|r%t        j                  j	                  |d   «      dkD  S yc c}w )NÚtransBr   F©Ú	attributeÚnameÚonnxÚhelperÚget_attribute_value)Ú	gemm_nodeÚattrÚtransB_attributes      ú|/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/onnxruntime/quantization/operators/gemm.pyÚis_B_transposedr      sS   € Ø)2×)<Ñ)<ÖV ÀÇ	Á	ÈXÓ@UšÐVÐÐVÙÜ�{‰{×.Ñ.Ð/?ÀÑ/BÓCÀaÑGÐGàùò	 Ws
   �A¤Ac                 ó¨   — | j                   D �cg c]  }|j                  dk(  sŒ|‘Œ }}|r"t        j                  j	                  |d   «      S yc c}w )NÚbetar   ç      ð?r   ©r   r   Úbeta_attributes      r   Úget_betar!      sL   € Ø'0×':Ñ':ÖR˜t¸d¿i¹iÈ6Ó>Q’dÐR€NÐRÙÜ�{‰{×.Ñ.¨~¸aÑ/@ÓAÐAàùò	 Ss
   �A¤Ac                 óx   — | j                   D �cg c]  }|j                  dk(  sŒ|‘Œ }}|r
d|d   _        yc c}w )Nr   r   r   )r   r   Úfr   s      r   Úset_default_betar$   $   s?   € Ø'0×':Ñ':ÖR˜t¸d¿i¹iÈ6Ó>Q’dÐR€NÐRÙØ!ˆ�qÑÔàùò	 Ss   �7¤7c                   ó(   ‡ — e Zd Zˆ fd„Zˆ fd„Zˆ xZS )ÚQLinearGemmc                 ó&   •— t         ‰| �  ||«       y ©N©ÚsuperÚ__init__©ÚselfÚonnx_quantizerÚ	onnx_nodeÚ	__class__s      €r   r+   zQLinearGemm.__init__-   ó   ø€ Ü‰Ñ˜¨Õ3ó    c           	      ó&  •— | j                   }|j                  dk(  sJ ‚| j                  j                  |j                  d   «      \  }}}}}| j                  j                  |j                  d   «      rÄ| j                  j                  «       rª| j                  j                  |dg«      \  }}}}	| j                  j                  |j                  d   | j                  j                  t        |«      rdnd«      }
|j                  |
d   «       |j                  |
d   «       |j                  |
d   «       nž| j                  j                  |dg«      \  }}}}	| j                  j                  |dg| j                  j                  ¬«      \  }}}}|j                  |«       |j                  |«       |j                  |«       |	j                  |«       |r|€t         ‰| �E  «       S d}t%        |j                  «      dk(  rŽ| j                  j                  |j                  d   «      st         ‰| �E  «       S | j                  j'                  |j                  d   |j                  d   |j                  d   t)        | j                   «      «      }|j                  d   t*        z   }|j,                  r|j,                  dz   nd}i }|j.                  D ],  }|j,                  d	k7  sŒ|j1                  t3        |«      «       Œ. t4        |d
<   g }t7        d«      D ]  }|j                  ||   ||   ||   g«       Œ! |j                  |||g«       t9        j:                  j<                  d||g|fi |¤Ž}|	j                  |«       t?        |j                  d   |||t@        jB                  |j                  | j                  j                  ¬«      }|| j                  jD                  |j                  d   <   | j                  xjF                  |	z  c_#        y )NÚGemmr   r   r   )Úreduce_rangeÚ é   Ú_quantr   ÚdomainÚQGemm)Ú	node_typeÚ
node_qtype)$ÚnodeÚop_typeÚ	quantizerÚ_get_quantization_paramsÚoutputÚis_input_a_initializerÚinputÚis_per_channelÚquantize_activationÚquantize_weight_per_channelÚweight_qTyper   ÚappendÚquantize_weightr5   Úextendr*   ÚquantizeÚlenÚquantize_bias_staticr!   r   r   r   Úupdater   r
   Úranger   r   Ú	make_noder   r   ÚInputÚquantized_value_mapÚ	new_nodes)r-   r=   Ú
data_foundÚoutput_scale_nameÚoutput_zp_nameÚ_Úquantized_input_namesÚzero_point_namesÚscale_namesÚnodesÚquant_weight_tupleÚquantized_input_names_weightÚzero_point_names_weightÚscale_names_weightÚnodes_weightÚquantized_bias_nameÚqgemm_outputÚ
qgemm_nameÚkwargsr   Úqgemm_inputsÚiÚ
qgemm_nodeÚq_outputr0   s                           €r   rK   zQLinearGemm.quantize0   s±  ø€ Ø�y‰yˆØ�|‰|˜vÒ%Ð%Ð%ð �N‰N×3Ñ3°D·K±KÀ±NÓCñ	
ØØØØØð �>‰>×0Ñ0°·±¸A±Ô?ÀDÇNÁN×DaÑDaÔDcð —‘×2Ñ2°4¸!¸Ó=ñØ%Ø ØØà!%§¡×!KÑ!KØ—
‘
˜1‘Ø—‘×+Ñ+Ü$ TÔ*‘°ó"Ðð
 "×(Ñ(Ð);¸AÑ)>Ô?Ø×#Ñ#Ð$6°qÑ$9Ô:Ø×ÑÐ1°!Ñ4Õ5ð —‘×2Ñ2°4¸!¸Ó=ñØ%Ø ØØð —‘×.Ñ.¨t°a°SÀtÇ~Á~×GbÑGbÐ.ÓcñØ,Ø'Ø"Øà!×(Ñ(Ð)EÔFØ×#Ñ#Ð$;Ô<Ø×ÑÐ1Ô2Ø�L‰L˜Ô&áÐ2Ð:Ü‘7Ñ#Ó%Ð%à ÐÜˆt�z‰z‹?˜aÒØ—>‘>×8Ñ8¸¿¹ÀA¹ÔGÜ‘wÑ'Ó)Ð)ð #'§.¡.×"EÑ"EØ—
‘
˜1‘˜tŸz™z¨!™}¨d¯j©j¸©m¼XÀdÇiÁiÓ=Pó#Ðð —{‘{ 1‘~Ô(@Ñ@ˆØ-1¯YªY�T—Y‘Y Ò)¸Bˆ
àˆØŸ™ò 	=ˆIØ�~‰~ Ó'Ø—‘Ô0°Ó;Õ<ð	=ô %ˆˆxÑð ˆÜ�q“ò 	aˆAØ×ÑÐ!6°qÑ!9¸;Àq¹>ÐK[Ð\]ÑK^Ð _Õ`ð	að 	×ÑÐ0Ð2CÀ^ÐTÔUä—[‘[×*Ñ*¨7°LÀ<À.ÐR\ÑgÐ`fÑgˆ
Ø�‰�ZÔ ô "Ø�K‰K˜‰NØØØÜ×$Ñ$Ø—l‘lØ—~‘~×2Ñ2ô
ˆð >Fˆ�‰×*Ñ*¨4¯;©;°q©>Ñ:à�‰× Ò  EÑ)Ö r2   ©Ú__name__Ú
__module__Ú__qualname__r+   rK   Ú__classcell__©r0   s   @r   r&   r&   ,   s   ø„ ô4÷\*ð \*r2   r&   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚQDQGemmc                 ó&   •— t         ‰| �  ||«       y r(   r)   r,   s      €r   r+   zQDQGemm.__init__�   r1   r2   c           	      óà  — | j                   }|j                  dk(  sJ ‚| j                  j                  |j                  d   «       | j
                  s(| j                  j                  |j                  d   «       | j                  j                  |j                  d   t        |«      rdnd¬«      \  }}|r*| j                  j                  |j                  d   |«       n(| j                  j                  |j                  d   «       t        |j                  «      dk(  rÏ| j                  j                  |j                  d   «      ry| j                  j                  |j                  |j                  d   |j                  d   |j                  d   t        | j                   «      «       t!        | j                   «       y t#        j$                  d| j                   j                  › d�«       y y )	Nr4   r   r   )Údefault_axisr7   r   zBias of Gemm node 'zC' is not constant. Please exclude this node for better performance.)r=   r>   r?   Úquantize_activation_tensorrC   Údisable_qdq_for_node_outputrA   Úis_tensor_per_channelr   Ú"quantize_weight_tensor_per_channelÚquantize_weight_tensorrL   rB   Úquantize_bias_tensorr   r!   r$   ÚloggingÚwarning)r-   r=   Úis_weight_per_channelÚweight_axiss       r   rK   zQDQGemm.quantize“   so  € Ø�y‰yˆØ�|‰|˜vÒ%Ð%Ð%à�‰×1Ñ1°$·*±*¸Q±-Ô@Ø×/Ò/Ø�N‰N×5Ñ5°d·k±kÀ!±nÔEà-1¯^©^×-QÑ-QØ�J‰J�q‰M¬_¸TÔ-B©Èð .Ró .
Ñ*Ð˜{ñ !Ø�N‰N×=Ñ=¸d¿j¹jÈ¹mÈ[ÕYà�N‰N×1Ñ1°$·*±*¸Q±-Ô@äˆt�z‰z‹?˜aÒØ�~‰~×4Ñ4°T·Z±ZÀ±]ÔCØ—‘×3Ñ3Ø—I‘I˜tŸz™z¨!™}¨d¯j©j¸©m¸T¿Z¹ZÈ¹]ÌHÐUY×U^ÑU^ÓL_ôô ! §¡Õ+ä—‘Ø)¨$¯)©)¯.©.Ð)9Ð9|Ð}õð  r2   ri   rn   s   @r   rp   rp   �   s   ø„ ô4ör2   rp   )rz   ÚnumpyÚnpr   Úquant_utilsr   r   r   r   r   r	   r
   Úbase_operatorr   Úmatmulr   Úqdq_base_operatorr   r   r!   r$   r&   rp   © r2   r   ú<module>r…      sR   ðÛ ã Û ÷÷ ñ õ -Ý Ý .òòòô`*�)ô `*ôFˆoõ r2   