Ë
    cQêj…   ã                   óf   — d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	  ee
«      Z G d„ de«      Zy)	é    )Ú	getLogger)ÚFusion)ÚFusionUtils)Úhelper)Ú	OnnxModelc                   ó4   ‡ — e Zd Zdefˆ fd„Zdedefd„Zˆ xZS )ÚFusionQOrderedMatMulÚmodelc                 ó(   •— t         ‰| �  |dd«       y )NÚQOrderedMatMulÚMatMul)ÚsuperÚ__init__)Úselfr
   Ú	__class__s     €út/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/onnxruntime/transformers/fusion_qordered_matmul.pyr   zFusionQOrderedMatMul.__init__   s   ø€ Ü‰Ñ˜Ð 0°(Õ;ó    Úinput_name_to_nodesÚoutput_name_to_nodec           	      óÊ  — | j                   j                  ||«      }t        |«      dk7  s|d   j                  dk7  ry |d   }d}| j                   j	                  |j
                  d   «      €)| j                   j	                  |j
                  d   «      €y | j                   j	                  |j
                  d   «      €d}| j                   j                  ||«      }t        |«      dk7  ry |d   }d }	d }
|j                  dk(  rE|}	| j                   j                  |	|«      }t        |«      dk7  s|d   j                  dk7  ry |d   }
n|j                  dk(  r|}
ny t        j                  |
| j                   «      sy | j                   j                  |dgdgfg|«      \  }}}d }d }|dk  r>| j                   j                  |g d¢g d¢fg|«      \  }}}|dk  ry |d   }|d   }|d   }n|d   }t        j                  || j                   «      sy d }d	}| j                   j                  |g d
¢g d¢fg|«      \  }}}|dk  r2| j                   j                  |dgdgfg|«      \  }}}|dk  ry |d   }nd}|d   }| j                   j	                  |j
                  d   «      €y t        j                  || j                   d«      sy d }|	�1| j                   j                  |	dgdgfg|«      \  }}}|dk  ry |d   }|�!t        j                  || j                   «      sy ||g}|	�|j                  |	g«       |j                  |«       |j                  |
g«       | j                   j                  ||
j                  ||«      st        j                  d«       y |�7| j                   j                  ||j
                  d   |j
                  d   «       |�|j                  d   n|j
                  d   |j
                  d   |j
                  d   |j
                  d   |
j
                  d   |j
                  |   g}|	�<|j                  |j
                  d   «       |j                  |j
                  d   «       |r=| j                   j!                  |j
                  d   «      }t        j"                  |«       t%        j&                  d||
j                  d   g| j                   j)                  dd¬«      ¬«      }|j*                  j                  t%        j,                  dd«      g«       |j*                  j                  t%        j,                  dd«      g«       |j*                  j                  t%        j,                  dd«      g«       d|_        | j0                  j                  |«       | j2                  j                  |«       | j4                  | j6                  |j8                  <   y )Né   r   ÚAddÚQuantizeLinearÚDequantizeLinear)ÚReshapeÚ	Transposer   r   )r   r   r   r   é   T)r   r   r   r   )r   r   r   r   Fé   z0It is not safe to fuse QOrderedMatMul node. Skipr   )Úname_prefix)ÚinputsÚoutputsÚnameÚorder_AÚorder_BÚorder_Yzcom.microsoft)r
   Úget_childrenÚlenÚop_typeÚget_constant_valueÚinputr   Úcheck_qdq_node_for_fusionÚmatch_parent_pathsÚextendÚis_safe_to_fuse_nodesÚoutputÚloggerÚdebugÚreplace_node_inputÚappendÚget_initializerÚtranspose_2d_int8_tensorr   Ú	make_nodeÚcreate_node_nameÚ	attributeÚmake_attributeÚdomainÚnodes_to_removeÚnodes_to_addÚthis_graph_nameÚnode_name_to_graph_namer"   )r   Únoder   r   Úmatmul_childrenÚbias_add_nodeÚbias_add_node_indexÚbias_add_childrenÚbias_add_childÚresidual_add_nodeÚdownstream_quantize_nodeÚresidual_add_childrenÚfirst_path_idÚfirst_input_parent_nodesÚ_Úreshape_node_0Útranspose_node_0Údequantize_node_0Údequantize_node_1Úis_weight_transpose_requiredÚweight_path_idÚweight_nodesÚresidual_add_dequantize_nodeÚresidual_path_idÚresidual_input_parent_nodesÚsubgraph_nodesÚfused_node_inputsÚweight_tensorÚ
fused_nodes                                r   ÚfusezFusionQOrderedMatMul.fuse   sA  € ØŸ*™*×1Ñ1°$Ð8KÓLˆô ˆÓ 1Ò$¨¸Ñ(:×(BÑ(BÀeÒ(KØà'¨Ñ*ˆð  Ðà�J‰J×)Ñ)¨-×*=Ñ*=¸aÑ*@ÓAÐIØ—
‘
×-Ñ-¨m×.AÑ.AÀ!Ñ.DÓEÐMàà�:‰:×(Ñ(¨×)<Ñ)<¸QÑ)?Ó@ÐHØ"#Ðà ŸJ™J×3Ñ3°MÐCVÓWÐäÐ Ó! QÒ&Øà*¨1Ñ-ˆð !Ðà#'Ð à×!Ñ! UÒ*Ø .Ðà$(§J¡J×$;Ñ$;Ð<MÐObÓ$cÐ!äÐ(Ó)¨QÒ.Ð2GÈÑ2J×2RÑ2RÐVfÒ2fØà'<¸QÑ'?Ñ$à×#Ñ#Ð'7Ò7Ø'5Ñ$ð ô ×4Ñ4Ð5MÈtÏzÉzÔZØð 6:·Z±Z×5RÑ5RØØ!Ð" Q CÐ(Ð)Øó6
Ñ2ˆÐ/°ð ˆØÐØ˜1ÒØ9=¿¹×9VÑ9VØÚPÒR^Ð_Ð`Ø#ó:Ñ6ˆMÐ3°Qð ˜qÒ Øà5°aÑ8ˆNØ7¸Ñ:ÐØ 8¸Ñ ;Ñà 8¸Ñ ;Ðô ×4Ñ4Ð5FÈÏ
É
ÔSØð !ÐØ'+Ð$à*.¯*©*×*GÑ*GØÚUÒWcÐdÐeØó+
Ñ'ˆ˜ að ˜AÒØ.2¯j©j×.KÑ.KØØ%Ð&¨¨Ð,Ð-Ø#ó/Ñ+ˆN˜L¨!ð  Ò!Øà ,¨Q¡Ñà+0Ð(Ø ,¨Q¡Ðð �:‰:×(Ñ(Ð):×)@Ñ)@ÀÑ)CÓDÐLØô ×4Ñ4Ð5FÈÏ
É
ÐTYÔZØð (,Ð$àÐ(Ø?C¿z¹z×?\Ñ?\Ø!à(Ð)¨A¨3Ð/ðð $ó@Ñ<ÐÐ9¸1ð   !Ò#Øà+FÀqÑ+IÐ(ð (Ð3¼K×<aÑ<aØ(¨$¯*©*ô=
ð ð  Ð.ˆàÐ(Ø×!Ñ!Ð#4Ð"5Ô6à×Ñ˜lÔ+Ø×ÑÐ7Ð8Ô9à�z‰z×/Ñ/ØÐ4×;Ñ;Ð=PÐReô
ô �L‰LÐKÔLØð Ð'Ø�J‰J×)Ñ)Ð*:Ð<L×<RÑ<RÐSTÑ<UÐWh×WnÑWnÐopÑWqÔrð )7Ð(BˆN×!Ñ! !Ò$ÐHY×H_ÑH_Ð`aÑHbØ×#Ñ# AÑ&Ø×#Ñ# AÑ&Ø×#Ñ# AÑ&Ø$×*Ñ*¨1Ñ-Ø×ÑÐ 3Ñ4ð
Ðð Ð(Ø×$Ñ$Ð%A×%GÑ%GÈÑ%JÔKØ×$Ñ$Ð%A×%GÑ%GÈÑ%JÔKñ (Ø ŸJ™J×6Ñ6Ð7H×7NÑ7NÈqÑ7QÓRˆMÜ×0Ñ0°Ô?ä×%Ñ%ØØ$Ø-×4Ñ4°QÑ7Ð8Ø—‘×,Ñ,Ð-=ÐK[Ð,Ó\ô	
ˆ
ð 	×Ñ×#Ñ#¤V×%:Ñ%:¸9ÀaÓ%HÐ$IÔJØ×Ñ×#Ñ#¤V×%:Ñ%:¸9ÀaÓ%HÐ$IÔJØ×Ñ×#Ñ#¤V×%:Ñ%:¸9ÀaÓ%HÐ$IÔJà+ˆ
Ôà×Ñ×#Ñ# NÔ3Ø×Ñ× Ñ  Ô,Ø8<×8LÑ8Lˆ×$Ñ$ Z§_¡_Ò5r   )Ú__name__Ú
__module__Ú__qualname__r   r   ÚdictrY   Ú__classcell__)r   s   @r   r	   r	      s(   ø„ ð<˜iõ <ðDM¨dð DMÈ÷ DMr   r	   N)Úloggingr   Úfusion_baser   Úfusion_utilsr   Úonnxr   Ú
onnx_modelr   rZ   r0   r	   © r   r   ú<module>re      s0   ðõ å Ý $Ý Ý  á	�8Ó	€ôHM˜6õ HMr   