§
    kŠtj¦  ã                   ó°   — 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dS )é    Né   )ÚTENSOR_NAME_QUANT_SUFFIXÚQuantizedValueÚQuantizedValueTypeÚattribute_to_kwargÚfind_by_nameÚget_mul_nodeÚ	ms_domainé   )ÚQuantOperatorBase)Ú	QOpMatMul)ÚQDQOperatorBasec                 ó~   — d„ | j         D ¦   «         }|r)t          j                             |d         ¦  «        dk    S dS )Nc                 ó(   — g | ]}|j         d k    ¯|‘ŒS )ÚtransB©Úname©Ú.0Úattrs     úe/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/onnxruntime/quantization/operators/gemm.pyú
<listcomp>z#is_B_transposed.<locals>.<listcomp>   s$   € ÐVÐVÐV ÀÄ	ÈXÒ@UÐ@U˜Ð@UÐ@UÐ@Uó    r   F©Ú	attributeÚonnxÚhelperÚget_attribute_value)Ú	gemm_nodeÚtransB_attributes     r   Úis_B_transposedr!      sH   € ØVÐV¨Ô)<ÐVÑVÔVÐØð HÝŒ{×.Ò.Ð/?ÀÔ/BÑCÔCÀaÒGÐGàˆ5r   c                 óv   — d„ | j         D ¦   «         }|r%t          j                             |d         ¦  «        S dS )Nc                 ó(   — g | ]}|j         d k    ¯|‘ŒS ©Úbetar   r   s     r   r   zget_beta.<locals>.<listcomp>   ó$   € ÐRÐRÐR˜t¸d¼iÈ6Ò>QÐ>Q�dÐ>QÐ>QÐ>Qr   r   ç      ð?r   ©r   Úbeta_attributes     r   Úget_betar*      sA   € ØRÐR yÔ':ÐRÑRÔR€NØð BÝŒ{×.Ò.¨~¸aÔ/@ÑAÔAÐAàˆ3r   c                 óF   — d„ | j         D ¦   «         }|rd|d         _        dS )Nc                 ó(   — g | ]}|j         d k    ¯|‘ŒS r$   r   r   s     r   r   z$set_default_beta.<locals>.<listcomp>%   r&   r   r'   r   )r   Úfr(   s     r   Úset_default_betar.   $   s2   € ØRÐR yÔ':ÐRÑRÔR€NØð "Ø!ˆ�qÔÔàˆ3r   c                   ó(   ‡ — e Zd Zˆ fd„Zˆ fd„Zˆ xZS )ÚQLinearGemmc                 óL   •— t          ¦   «                              ||¦  «         d S ©N©ÚsuperÚ__init__©ÚselfÚonnx_quantizerÚ	onnx_nodeÚ	__class__s      €r   r5   zQLinearGemm.__init__-   ó#   ø€ Ý‰Œ×Ò˜¨Ñ3Ô3Ð3Ð3Ð3r   c           	      ó
  •— | j         }|j        dk    sJ ‚| j                             |j        d         ¦  «        \  }}}}}| j                             |j        d         ¦  «        rÎ| j                             ¦   «         rµ| j                             |dg¦  «        \  }}}}	| j         	                    |j        d         | j        j
        t          |¦  «        rdnd¦  «        }
|                     |
d         ¦  «         |                     |
d         ¦  «         |                     |
d         ¦  «         n¢| j                             |dg¦  «        \  }}}}	| j                             |dg| j        j        ¬¦  «        \  }}}}|                     |¦  «         |                     |¦  «         |                     |¦  «         |	                     |¦  «         |r|€ t!          ¦   «                              ¦   «         S d}t%          |j        ¦  «        dk    r•| j                             |j        d         ¦  «        s t!          ¦   «                              ¦   «         S | 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	k    r"|                     t3          |¦  «        ¦  «         Œ0t4          |d
<   g }t7          d¦  «        D ],}|                     ||         ||         ||         g¦  «         Œ-|                     |||g¦  «         t9          j        j        d||g|fi |¤Ž}|	                     |¦  «         t?          |j        d         |||t@          j!        |j        | j        j
        ¬¦  «        }|| j        j"        |j        d         <   | j        xj#        |	z  c_#        d S )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_weightr>   Úextendr4   ÚquantizeÚlenÚquantize_bias_staticr*   r   r   r   Úupdater   r
   Úranger   r   Ú	make_noder   r   ÚInputÚquantized_value_mapÚ	new_nodes)r7   rF   Ú
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_outputr:   s                           €r   rT   zQLinearGemm.quantize0   s  ø€ ØŒyˆØŒ|˜vÒ%Ð%Ð%Ð%ð ŒN×3Ò3°D´KÀ´NÑCÔCñ	
ØØØØØð Œ>×0Ò0°´¸A´Ñ?Ô?ð !	'ÀDÄN×DaÒDaÑDcÔDcð !	'ð ”×2Ò2°4¸!¸Ñ=Ô=ñØ%Ø ØØà!%¤×!KÒ!KØ”
˜1”Ø”Ô+Ý$ TÑ*Ô*Ð1��°ñ"ô "Ðð
 "×(Ò(Ð);¸AÔ)>Ñ?Ô?Ð?Ø×#Ò#Ð$6°qÔ$9Ñ:Ô:Ð:Ø×ÒÐ1°!Ô4Ñ5Ô5Ð5Ð5ð ”×2Ò2°4¸!¸Ñ=Ô=ñØ%Ø ØØð ”×.Ò.¨t°a°SÀtÄ~ÔGbÐ.ÑcÔcñØ,Ø'Ø"Øà!×(Ò(Ð)EÑFÔFÐFØ×#Ò#Ð$;Ñ<Ô<Ð<Ø×ÒÐ1Ñ2Ô2Ð2Ø�LŠL˜Ñ&Ô&Ð&àð 	&Ð2Ð:Ý‘7”7×#Ò#Ñ%Ô%Ð%à ÐÝˆtŒz‰?Œ?˜aÒÐØ”>×8Ò8¸¼ÀA¼ÑGÔGð *Ý‘w”w×'Ò'Ñ)Ô)Ð)ð #'¤.×"EÒ"EØ”
˜1”˜tœz¨!œ}¨d¬j¸¬m½XÀdÄiÑ=PÔ=Pñ#ô #Ðð ”{ 1”~Õ(@Ñ@ˆØ-1¬YÐ>�T”Y Ñ)Ð)¸Bˆ
àˆØœð 	=ð 	=ˆIØŒ~ Ò'Ð'Ø—’Õ0°Ñ;Ô;Ñ<Ô<Ð<øÝ$ˆˆxÑð ˆÝ�q‘”ð 	að 	aˆAØ×ÒÐ!6°qÔ!9¸;Àq¼>ÐK[Ð\]ÔK^Ð _Ñ`Ô`Ð`Ð`à×ÒÐ0Ð2CÀ^ÐTÑUÔUÐUå”[Ô*¨7°LÀ<À.ÐR\ÐgÐgÐ`fÐgÐgˆ
Ø�Š�ZÑ Ô Ð õ "ØŒK˜ŒNØØØÝÔ$Ø”lØ”~Ô2ð
ñ 
ô 
ˆð >FˆŒÔ*¨4¬;°q¬>Ñ:àŒÐ Ô  EÑ)Ð Ô Ð Ð r   ©Ú__name__Ú
__module__Ú__qualname__r5   rT   Ú__classcell__©r:   s   @r   r0   r0   ,   sZ   ø€ € € € € ð4ð 4ð 4ð 4ð 4ð\*ð \*ð \*ð \*ð \*ð \*ð \*ð \*ð \*r   r0   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚQDQGemmc                 óL   •— t          ¦   «                              ||¦  «         d S r2   r3   r6   s      €r   r5   zQDQGemm.__init__�   r;   r   c           	      ó|  — | j         }|j        dk    sJ ‚| j                             |j        d         ¦  «         | j        s%| j                             |j        d         ¦  «         | j                             |j        d         t          |¦  «        rdnd¬¦  «        \  }}|r'| j         	                    |j        d         |¦  «         n%| j         
                    |j        d         ¦  «         t          |j        ¦  «        dk    rµ| j                             |j        d         ¦  «        rl| j                             |j        |j        d         |j        d         |j        d         t          | j         ¦  «        ¦  «         t!          | j         ¦  «         d S t#          j        d| j         j        › d�¦  «         d S d S )	Nr=   r   r   )Údefault_axisr@   r   zBias of Gemm node 'zC' is not constant. Please exclude this node for better performance.)rF   rG   rH   Úquantize_activation_tensorrL   Údisable_qdq_for_node_outputrJ   Úis_tensor_per_channelr!   Ú"quantize_weight_tensor_per_channelÚquantize_weight_tensorrU   rK   Úquantize_bias_tensorr   r*   r.   ÚloggingÚwarning)r7   rF   Úis_weight_per_channelÚweight_axiss       r   rT   zQDQGemm.quantize“   s­  € ØŒyˆØŒ|˜vÒ%Ð%Ð%Ð%àŒ×1Ò1°$´*¸Q´-Ñ@Ô@Ð@ØÔ/ð 	FØŒN×5Ò5°d´kÀ!´nÑEÔEÐEà-1¬^×-QÒ-QØŒJ�qŒM­_¸TÑ-BÔ-BÐ(I¨¨Èð .Rñ .
ô .
Ñ*Ð˜{ð !ð 	AØŒN×=Ò=¸d¼jÈ¼mÈ[ÑYÔYÐYÐYàŒN×1Ò1°$´*¸Q´-Ñ@Ô@Ð@åˆtŒz‰?Œ?˜aÒÐØŒ~×4Ò4°T´ZÀ´]ÑCÔCð Ø”×3Ò3Ø”I˜tœz¨!œ}¨d¬j¸¬m¸T¼ZÈ¼]ÍHÐUYÔU^ÑL_ÔL_ñô ð õ ! ¤Ñ+Ô+Ð+Ð+Ð+å”Ø}¨$¬)¬.Ð}Ð}Ð}ñô ð ð ð ð  Ðr   rr   rw   s   @r   ry   ry   �   sG   ø€ € € € € ð4ð 4ð 4ð 4ð 4ðð ð ð ð ð ð r   ry   )rƒ   ÚnumpyÚnpr   Úquant_utilsr   r   r   r   r   r	   r
   Úbase_operatorr   Úmatmulr   Úqdq_base_operatorr   r!   r*   r.   r0   ry   © r   r   ú<module>rŽ      sI  ðØ €€€à Ð Ð Ð Ø €€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð -Ð ,Ð ,Ð ,Ð ,Ð ,Ø Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .ðð ð ðð ð ðð ð ð`*ð `*ð `*ð `*ð `*�)ñ `*ô `*ð `*ðFð ð ð ð ˆoñ ô ð ð ð r   