
    "
3j|[                     v    S SK r S SKrS SKJrJr  S SKJr  S SKJ	r	  \ R                  " \5      r " S S\5      rg)    N)AttentionMaskFusionAttention)helper)	OnnxModelc                   F   ^  \ rS rSrSrS\S\S\S\4U 4S jjrS r	S	r
U =r$ )
FusionBartAttention   z7
Fuse Bart Attention subgraph into one Attention node.
modelhidden_size	num_headsattention_maskc                 &   > [         TU ]  XX45        g )N)super__init__)selfr
   r   r   r   	__class__s        h/home/wildlama/miniconda3/lib/python3.13/site-packages/onnxruntime/transformers/fusion_bart_attention.pyr   FusionBartAttention.__init__   s     	YG    c                 (   U R                   R                  U/ SQ/ SQ5      nS nUc.  U R                   R                  U/ SQ/ SQ5      nUb
  US   nUSS  nUb	  Uu  nnn	n
nO[        R                  S5        g Ub@  UR                  S   UR
                  S   :X  a  UR                  S   nOiUR                  S   nOY/ nUR                   H2  nX;  a  M
  XS   R
                  S   :X  a  M!  UR                  U5        M4     [        U5      S:w  a  g US   n X<   nUR                  S;   a  U R                   R                  U5      S   nUR
                   HF  nU(       d  M  UU   nU Vs/ s H  nUR                  PM     nnUR                  S	5      S:  d  MD  Un  O   U R                   R                  5       R                   Vs1 s H  nUR                  iM     nnU R                   R                  5       R
                   Vs1 s H  nUR                  iM     nnU R                   R                  U/ S
Q/ SQ5      nU R                   R                  U/ SQ/ SQ5      nU R                   R                  U/ SQ/ SQ5      nSu  nn/ S S nnnUb  UnUu  nn nnUUR
                  S      n!U! H]  n"U"R                  S:X  d  M  U R                   R                  U"SS/SS/5      n#U#b  U#S   R                  S   nUU"R
                  S      n!  O   U! HJ  n"UU"R
                  S      n$U$ H'  n%U%R
                  S   U;   d  M  U%R
                  S   n  O   US:w  d  MJ    O   O}Ub)  UnUu  n&nn nnU&R                  S   nU&R
                  S   nOQUR                  S   U;   a  UR                  S   nO.Ub  UnUS   R                  S   nO[        R                  S5        g UU;   a  UOSnUU;   a  UOSnU R                   R                  USS	/SS/5      n'U R                   R                  U/ SQ/ SQ5      n(U R                   R                  U/ SQ/ SQ5      n)U R                   R                  U/ SQ/ SQ5      n*/ S n,n+U'b  U'u  n-n.U'n+O;U(b	  U(u  n-n,n.U(n+O/U)b	  U)u    n-n.U)n+O#U*b
  U*u    n-n,n.U*n+O[        R                  S5        g U R                   R                  U./ SQ/ S Q5      n/U R                   R                  U./ S!Q/ S Q5      n0U R                   R                  U./ S!Q/ S"Q5      n1/ n2U/b  U/n2U2u  n3n4n5n6n7O2U0b  U0n2U2u  n5n3n4n6n7O$U1b  U1n2U2u  n5n3n4n6n7O[        R                  S#5        g U R                   R                  U./ S$Q/ S%Q5      n8U R                   R                  U./ S&Q/ S'Q5      n9U R                   R                  U./ S(Q/ SQ5      n:U R                   R                  U./ S)Q/ S*Q5      n;U R                   R                  U./ S+Q/ S,Q5      n<Su  n=n>/ S S nAn@n?U8bJ  U8n?U?u  nBnCnAUUCR
                  S      nDUD H(  nEUER
                  S   U;   d  M  WER
                  S   n>  GO   GOU9b*  U9n?U?u  n-nFnBnCnAUFR                  S   n=UFR
                  S   n>GO\UU.R                  S      R                  S   U;   a'  UU.R                  S      /n?U?S   R                  S   n=GOU<b  U<n?U?u        n-nBnCn@nAGO U:b  U:n?U?u  n-nBnCnAUUAR
                  S      n!U! H]  n"U"R                  S:X  d  M  U R                   R                  U"SS/SS/5      nGUGb  WGS   R                  S   n=UU"R
                  S      n!  O   U! HJ  n"UU"R
                  S      n$U$ H'  n%U%R
                  S   U;   d  M  U%R
                  S   n>  O   U>S:w  d  MJ    O1   O.U;b  U;n?U?S   R                  S   n=O[        R                  S-5        g U=U;   a  U=OSn=U>U;   a  U>OSn>WAb  W@c  U R                   R                  UR                  S   5      nHUHR                  S   nIUHR                  nJS.nKU R                   R                  UK5      nLULc>  U R!                  WKWJWI/["        R$                  " S//UI-  [&        R(                  " UJ5      S09S19  U R                   R+                  S25      nM[&        R,                  " S2WKWAR
                  S   /WCR                  /UM5      n@[/        U=5      =(       a!    [/        U5      =(       a    WAS L =(       a    US L nNUN(       + =(       aD    U7R                  S   U:H  =(       a+    WAR                  S   U:H  =(       a    UR                  S   U:H  nOWN(       + =(       a^    U7R                  S   U:H  =(       aE    WAR                  S   UR                  S   :H  =(       a    WAR                  S   U7R                  S   :g  nPU+U(U*4;   nQUQ(       + nRWO=(       a    WRnSWO=(       a    WQnTWP=(       a    WRnUWT=(       a    [/        U=5      =(       a    [/        U5      nVWN=(       a    WRnWWQnX/ nYUX(       a  U R                   R                  U,S3/S/5      nZU R                   R                  U,/ S4Q/ S5Q5      n[U R                   R                  U,/ S6Q/ S7Q5      n\U R                   R                  U,S8S8/SS/5      n]U[b  W[nYO(W\b  W\nYO"W]b  W]nYOWZb  WZnYO[        R                  S95        g [        WY5      S:  d   eWS(       d  WT(       d  WU(       d  WV(       d  WW(       Ga  U	n^U R1                  U45      u  n_n`U_S::  d  W`S::  ae  U R2                  S:  aU  U R4                  S:  aE  [        R                  S:W_W`U R2                  U R4                  5        U R2                  n_U R4                  n`W_S::  d  W`S::  d	  W`W_-  S:w  a  [        R                  S;5        g S naWV(       d  WU(       d  WW(       a  U R6                  (       a{  U R9                  U7WU(       d  WV(       a  WAOU=WU(       d  WV(       a  UOUU6WU(       d  WV(       a  W@OS WU(       d  WV(       a  UOS W_W`W^R
                  S   WXWV(       a  U=OSWV(       a  UOSU>US<9OS naOEU R6                  nbS=U l        U R;                  S U7WAUU6W@UW_W`UW^R
                  S   WXU=UU>US>9naUbU l        Wac  [        R                  S?5        g U R<                  R                  Wa5        U R>                  U R@                  UaR                  '   U RB                  RE                  W^X/5        U RB                  RE                  U+5        WV(       d  WU(       d  WW(       Ga=  [        U25      S:  a#  U2S   R                  S	:X  a  U2RG                  5         [        U?5      S:  a#  U?S   R                  S	:X  a  U?RG                  5         [        U5      S:  a#  US   R                  S	:X  a  URG                  5         U RH                  (       a  [        U25      S:  a#  U2S   R                  S2:X  a  U2RG                  5         [        U?5      S:  a#  U?S   R                  S2:X  a  U?RG                  5         [        U5      S:  a#  US   R                  S2:X  a  URG                  5         U RB                  RE                  U25        U RB                  RE                  U?5        U RB                  RE                  U5        S@U l%        g g s  snf s  snf s  snf )AN)AddMatMulReshape	Transposer   )   r   r   r   r   )r   r   r   r   r   r   )r   Nr   r   r   r   r   r   z(fuse_attention: failed to match qkv path>   r   Clipr   )r   r   r   r   )r   r   r   N)Concatr   r   r   r   )r   r   r   r   N)r   r   r   r   )r   r   r   r   ) r   r   r   r   r   z&fuse_attention: failed to match v pathSoftmax)r    r   r   )r   r   r   )Wherer    r   )r      r   )r!   r    r   r   )r   r"   r   r   z'fuse_attention: failed to match qk path)r   r   Mulr   r   )r   r   r   r   r   )r#   r   r   r   r   )r   r   r   r   Nz&fuse_attention: failed to match q path)r   r   r   )r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r#   r   r   r   )r#   r   r   r   r   )r   r   r   r   r   )r#   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   Nz&fuse_attention: failed to match k path
empty_biasg        )dtype)dimsvalsr   r!   )SliceExpandr!   )r   r   r   )r(   	UnsqueezeGatherShaper   )r   r"   r   r   r   r(   z*fuse_attention: failed to match mask nodeszfuse_attention: reshape dims invalid (num_heads=%d, hidden_size=%d), falling back to user-specified num_heads=%d, hidden_size=%dz9fuse_attention: failed to detect num_heads or hidden_size)q_matmulk_matmulv_matmulq_addk_addv_addr   r   outputunidirectionalpast_kpast_v	present_k	present_vF)
mask_indexr-   r.   r/   r0   r1   r2   r   r   first_inputr3   causalr5   r6   r7   r8   z+fuse_attention: failed to create fused nodeT)&r
   match_parent_pathloggerdebuginputr3   appendlenop_typeget_childrencountgraphnameget_initializerr&   	data_typeadd_initializernparrayr   tensor_dtype_to_np_dtypecreate_node_name	make_nodeboolget_num_heads_and_hidden_sizer   r   use_multi_head_attentioncreate_multihead_attention_nodecreate_attention_nodenodes_to_addthis_graph_namenode_name_to_graph_namenodes_to_removeextendpop!disable_multi_head_attention_biasprune_graph)cr   normalize_nodeinput_name_to_nodesoutput_name_to_node	qkv_nodesadd_before_layernormqkv_nodes_with_residualadd_out
matmul_outreshape_qkvtranspose_qkv
matmul_qkv
root_inputother_inputsinput_skip_layernormr3   childrenchildchildren_typesnodegraph_input_namesgraph_output_namesv_nodes_past_or_presentv_nodes_with_pastv_nodes_past_only_oair6   r8   v_nodesadd_vmatmul_vtranspose_v	reshape_vstart_child_nodesstart_child_nodeconcat_v_nodesstart_grandchild_nodesstart_grandchild_nodeconcat_vqk_nodes_no_maskqk_nodes_with_maskqk_nodes_sdpa_no_maskqk_nodes_sdpa_with_maskqk_nodesadd_qk_	matmul_qk
q_nodes_hfq_nodes_oaiq_nodes_sdpaq_nodestranspose_q	reshape_qmul_qadd_qmatmul_qk_nodes_no_past_hfk_nodes_with_past_hfk_nodes_past_or_present_oaik_nodes_past_only_oaik_nodes_sdpar5   r7   k_nodesadd_kmatmul_ktranspose_k	reshape_ktranspose_k_nodestranspose_k_nodeconcat_kconcat_k_nodesadd_v_tensorbias_dimr%   empty_bias_nameempty_tensoradd_namethree_root_inputsone_root_inputtwo_root_inputshas_maskno_maskencoder_attentiondecoder_self_attentiondecoder_cross_attention decoder_self_attention_with_past!decoder_cross_attention_with_pastcausal_mask
mask_nodesmask_nodes_bartmask_nodes_whisper_hfmask_nodes_whisper_oai mask_nodes_whisper_oai_unit_testattention_last_noder   r   new_node%use_multi_head_attention_ground_truthsc                                                                                                      r   fuseFusionBartAttention.fuse   s   JJ00?
	  $&*jj&B&BJ%'#
 '2'>q'A$3AB7	   LLCD+#))!,q0AA177:
177:
L(..4q\0033##F+ / < A%%aJ	 -8 !!_4!ZZ44^DQGN$++F*62H9ABemmNB##H-2#
 , 48::3C3C3E3K3KL3K4TYY3KL48JJ4D4D4F4M4MN4MDdii4MN"&**">">5#

 !JJ88?

 !%

 < <<!

 #	#%tT".-G8?5[)UH !4ELLO D$5 #++x7%)ZZ%A%A("K0A&N
 &1!/!3!9!9!!<(;<L<S<STU<V(W% %6 %6 )<=M=T=TUV=W)X&-C),33A6:LL$9$@$@$C	 .D ? %6 *'GBI?X{Iuh^^A&F *Ia $55%%a(F".+GR[&&q)FLLAB!%66B!*.@!@Ib	::77
YPXDY\]_`[ab!ZZ99*Fbdmn !%

 < <ZIgir s"&**">">=|#
 t&'+LAy'H+#5 Avy)H".3OAq),H$0&=#Aq&).HLLBCZZ11<


 jj22<
 zz33<

 ! G?F<[)UE8$!G?F<UKE8%"G?F<UKE8LLAB!ZZ99.

  $zz;;E 

 '+jj&B&B5'
#
 !%

 < <C!
 zz33_'

 #	#%tT)(G18.[)X !4I4D4DQ4G H$5 #**1-1CC 0 7 7 :I %6 "-*G>E;Q+y(^^A&F *I !34::1=ARR*9??1+=>?GQZ%%a(F%"GDKAQ1ai(41G4;1QY !4HOOA4F G$5 #++x7%)ZZ%A%A("K0A&N
 &1!/!3!9!9!!<(;<L<S<STU<V(W% %6 %6 )<=M=T=TUV=W)X&-C),33A6:LL$9$@$@$C	 .D ? %6 #.+GR[&&q)FLLAB!%66B!*.@!@Ib	EM::55ekk!nEL#((+H **E*O::55oFL#$$#"3%("2&:Y:YZ_:`a	 %  zz2259H$$U_hooa>P,QT]TbTbScemnE LcT&\ch$>NcS[_cSc!! 0q!Z/0q!Z/0 q!Z/	 	 "! 7q!Z/7q!X^^A%667 q!X^^A%66	 	   24KLL,*6w!/!<H"1"=g+A+cd6l+cW[\bWc(,=,I') 
"jj::	O
 %)JJ$@$@,%!
 &*ZZ%A%A@&"
 04zz/K/K'"A0,
 %02
'33
1==
 ,,
IJz?Q&&& %&/0"-%)%G%G	%R"I{ Q+"28JtO_O_bcOcRNN$$ !NN	"..A~!1kI6MRS5SXYH/3JNo* 44! 88!)-DHhnt-DHhnt#'>Bbehl'>Bbehl"+$/299!<'2)Ivr)Ivr"+"+ 9 " % , 9=8U8U505-55#%%%' + *.55a8&!!''! 6 $ 1V-JK$$X.:>:N:ND((7  '')<m(XY  ''1 03JNow<!#(;(;x(GKKMw<!#(;(;x(GKKMw<!#(;(;x(GKKM997|a'GBK,?,?5,H7|a'GBK,?,?5,H7|a'GBK,?,?5,H  ''0  ''0  ''0  $DM 1_	 C
 MNs   '||
 |)r[   rQ   )__name__
__module____qualname____firstlineno____doc__r   intr   r   r   __static_attributes____classcell__)r   s   @r   r   r      sD    HH H 	H
 &H]$ ]$r   r   )loggingnumpyrJ   fusion_attentionr   r   onnxr   
onnx_modelr   	getLoggerr   r=   r    r   r   <module>r      s4   
   ;   			8	$k$/ k$r   