
    h                      f    S SK Jr  S SKJr  S SKJr  S SKJr  S SKJ	r	  \" \
5      r " S S\5      rg)	    )	getLogger)Fusion)FusionUtils)helper)	OnnxModelc                   B   ^  \ rS rSrS\4U 4S jjrS\S\4S jrSrU =r	$ )FusionQOrderedMatMul   modelc                 (   > [         TU ]  USS5        g )NQOrderedMatMulMatMul)super__init__)selfr   	__class__s     i/var/www/fran/franai/venv/lib/python3.13/site-packages/onnxruntime/transformers/fusion_qordered_matmul.pyr   FusionQOrderedMatMul.__init__   s     0(;    input_name_to_nodesoutput_name_to_nodec           
      (   U R                   R                  X5      n[        U5      S:w  d  US   R                  S:w  a  g US   nSnU R                   R	                  UR
                  S   5      c*  U R                   R	                  UR
                  S   5      c  g U R                   R	                  UR
                  S   5      c  SnU R                   R                  XR5      n[        U5      S:w  a  g US   nS n	S n
UR                  S:X  aF  Un	U R                   R                  X5      n[        U5      S:w  d  US   R                  S:w  a  g US   n
OUR                  S:X  a  Un
Og [        R                  " XR                   5      (       d  g U R                   R                  US/S/4/U5      u  pnS nS nUS:  a>  U R                   R                  U/ SQ/ SQ4/U5      u  pnUS:  a  g US   nUS   nUS   nOUS   n[        R                  " UU R                   5      (       d  g S nS	nU R                   R                  U/ S
Q/ SQ4/U5      u  nnnUS:  a3  U R                   R                  US/S/4/U5      u  nnnUS:  a  g US   nOSnUS   nU R                   R	                  UR
                  S   5      c  g [        R                  " UU R                   S5      (       d  g S nU	b2  U R                   R                  U	S/S/4/U5      u  nnnUS:  a  g US   nUb'  [        R                  " UU R                   5      (       d  g X/nU	b  UR                  U	/5        UR                  U5        UR                  U
/5        U R                   R                  UU
R                  X#5      (       d  [        R                  S5        g Ub7  U R                   R                  UUR
                  S   UR
                  S   5        Ub  UR                  S   OUR
                  S   UR
                  S   UR
                  S   UR
                  S   U
R
                  S   UR
                  U   /nU	b<  UR                  UR
                  S   5        UR                  UR
                  S   5        U(       a>  U R                   R!                  UR
                  S   5      n[        R"                  " U5        [$        R&                  " SUU
R                  S   /U R                   R)                  SSS9S9nUR*                  R                  [$        R,                  " SS5      /5        UR*                  R                  [$        R,                  " SS5      /5        UR*                  R                  [$        R,                  " SS5      /5        SUl        U R0                  R                  U5        U R2                  R                  U5        U R4                  U R6                  UR8                  '   g )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   fuseFusionQOrderedMatMul.fuse   s>   **11$L 1$(:(B(Be(K'*  JJ))-*=*=a*@AI

--m.A.A!.DEM::(()<)<Q)?@H"# JJ33MW !Q&*1- !#' !!U* .$(JJ$;$;<M$c!()Q.2G2J2R2RVf2f'<Q'?$##'77'5$  445MzzZZ 6:ZZ5R5R!"QC()6
2 19=9V9VPR^_`#:6MQ q 5a8N7: 8 ; 8 ; 445F

SS !'+$*.***G*GUWcde+
'a A.2jj.K.K%&,-#/+NL! ! ,Q+0( ,Q ::(():)@)@)CDL 445F

TYZZ (,$(?Czz?\?\!()A3/ $@<91  !#+Fq+I( (3K<a<a($**=
 =
  .(!!#4"56l+789zz//4;;=P
 
 LLKL 'JJ))*:<L<R<RST<UWhWnWnopWqr )7(BN!!!$HYH_H_`aHb##A&##A&##A&$**1- 34
 ($$%A%G%G%JK$$%A%G%G%JK ( JJ667H7N7Nq7QRM00?%%$-44Q78,,-=K[,\	

 	##V%:%:9a%H$IJ##V%:%:9a%H$IJ##V%:%:9a%H$IJ+
##N3  ,8<8L8L$$Z__5r    )
__name__
__module____qualname____firstlineno__r   r   dictr[   __static_attributes____classcell__)r   s   @r   r	   r	      s/    <i <DMd DM DM DMr   r	   N)loggingr   fusion_baser   fusion_utilsr   onnxr   
onnx_modelr   r^   r2   r	   r]   r   r   <module>rj      s0      $   	8	HM6 HMr   