
    hϐ                         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	J
r
  S SKJr  S SKJrJrJr  S SKJr  S SKJr  \ R*                  " \5      r " S	 S
\5      r " S S\5      r " S S\5      rg)    N)AttentionMaskFusionAttention)Fusion)"FusionSimplifiedLayerNormalization&FusionSkipSimplifiedLayerNormalization)NumpyHelper)	NodeProtoTensorProtohelper)	OnnxModel)BertOnnxModelc                     ^  \ rS rSrSrS\S\S\S\4U 4S jjrS\	S	-  S
\
S\
S\
S\S\S\	S\	S\	S	-  S\S\
S	-  4S jrS\	S\	S\	S\	S	-  S\	S	-  S\	S	-  S\	S	-  S\	S\	S	-  S\	S	-  S\S\S\
S	-  4S jrS rS rS rSrU =r$ )FusionT5Attention   z5
Fuse T5 Attention subgraph into one Attention node.
modelhidden_size	num_headsattention_maskc           	      :   > [         TU ]  UUUUSS/S9  SU l        g )NFSoftmax)use_multi_head_attentionsearch_op_types   )super__init__	static_kv)selfr   r   r   r   	__class__s        `/var/www/fran/franai/venv/lib/python3.13/site-packages/onnxruntime/transformers/onnx_model_t5.pyr   FusionT5Attention.__init__   s4     	%*&K 	 	
     
mask_indexNq_matmulk_matmulv_matmulinputoutput	attn_biasscalereturnc                 ~   US:  d   eUS:  a$  Xe-  S:w  a  [         R                  SU SU 35        gU R                  R                  UR                  S   5      nU R                  R                  UR                  S   5      nU R                  R                  UR                  S   5      nUb  Ub  Uc(  Uc  UOUc  UOUn[        UR                  S    S35        g[        R                  " U5      n[        R                  " U5      n[        R                  " U5      nUR                  UR                  :X  d   eUR                  S   nUR                  S   nUR                  S   nUUs=:X  a  U:X  d   e   eUS:  a"  UU:w  a  [         R                  SU SU S	35        [        R                  " UR                  SS 5      n[        R                  " UUU4SS
9nSU-  nU R                  R                  S5      n[        R                  " US-   [         R"                  UU/UR%                  5       SS9nU R                  R'                  UU R(                  5        UUS-   S/nU(       a  UR+                  U5        OUR+                  S5        U	(       a"  UR+                  S5        UR+                  U	5        U(       a+  US   S:X  a"  UR-                  5         U(       a  US   S:X  a  M"  [        R.                  " SUU/US9nSUl        UR2                  R5                  [        R6                  " SU5      /5        U
b1  UR2                  R5                  [        R6                  " SU
5      /5        U R8                  bD  UR2                  R5                  [        R6                  " S[;        U R8                  5      5      /5        U$ )a\  Create an Attention node.
Args:
    mask_index (str): mask input
    q_matmul (NodeProto): MatMul node in fully connection for Q
    k_matmul (NodeProto): MatMul node in fully connection for K
    v_matmul (NodeProto): MatMul node in fully connection for V
    num_heads (int): number of attention heads. If a model is pruned, it is the number of heads after pruning.
    hidden_size (int): hidden dimension. If a model is pruned, it is the hidden dimension after pruning.
    input (str): input name
    output (str): output name
Returns:
    Union[NodeProto, None]: the node created or None if failed.
r   input hidden size # is not a multiple of num of heads Nr   zl is not an initializer. Please set do_constant_folding=True in torch.onnx.export to unblock attention fusionzInput hidden size (z3) is not same as weight matrix dimension of q,k,v (z:). Please provide a correct input hidden size or pass in 0)axis   	Attention_qkv_weightTname	data_typedimsvalsraw inputsoutputsr3   com.microsoftr   r)   mask_filter_value)loggerdebugr   get_initializerr&   printr   to_arrayshapewarningnpprodstackcreate_node_namer   make_tensorr
   FLOATtobytesadd_initializerthis_graph_nameappendpop	make_nodedomain	attributeextendmake_attributer>   float)r   r"   r#   r$   r%   r   r   r&   r'   r(   r)   q_weightk_weightv_weightmatmulqwkwvw
qw_in_size
kw_in_size
vw_in_sizeqw_out_size
qkv_weightqkv_weight_dimattention_node_nameweightattention_inputsattention_nodes                               r   make_attention_node%FusionT5Attention.make_attention_node)   s   4 1}}? 7A=LL-k]:]^g]hij::--hnnQ.?@::--hnnQ.?@::--hnnQ.?@x/83C!)!1X8CSxYaF<<?# $g g !!(+!!(+!!(+ xx288###XXa[
XXa[
XXa[
Z5:55555?{j8NN%k]2efpeq rJ J
 ggbhhqrl+XXr2rl3
["jj99+F##$}4!''n-##%
 	

""64+?+?@ -/

 ##J/##B'##B'##I.#3B#72#=  " #3B#72#=  ))#H$	
 !0  '')>)>{I)V(WX$$++V-B-B7E-R,ST!!-$$++V-B-BCVX]^b^t^tXu-v,wxr!   querykeyvaluepast_key
past_valuepresent_keypresent_valuec                    US:  a  US:  a  U(       a  U(       a  U(       d   eX-  S:w  a  [         R                  SU SU 35        g U R                  R                  S5      nUUUS/nU(       a  UR	                  U5        OUR	                  S5        U(       a  UR	                  U5        OUR	                  S5        U(       a+  U(       d   eUR	                  U5        UR	                  U5        U(       a+  US   S:X  a"  UR                  5         U(       a  US   S:X  a  M"  U/nU	(       a+  U
(       d   eUR	                  U	5        UR	                  U
5        [        SU< SU< S	U< 35        [        R                  " SUUUS
9nSUl	        UR                  R                  [        R                  " SU5      /5        UR                  R                  [        R                  " SS5      /5        U R                  bD  UR                  R                  [        R                  " S[        U R                  5      5      /5        U R                  S5        U$ )Nr   r,   r-   MultiHeadAttentionr8   r9   zattention_inputs=z, attention_outputs=z, attention_node_name=r:   r=   r   r)         ?r>   )r?   r@   r   rI   rO   rP   rB   r   rQ   rR   rS   rT   rU   r>   rV   increase_counter)r   rj   rk   rl   r"   r(   rm   rn   r'   ro   rp   r   r   rd   rf   attention_outputsrg   s                    r   create_mha_node!FusionT5Attention.create_mha_node   s    1}qUsuLL#)LL-k]:]^g]hij"jj99:NO	
 ##J/##B'##I.##B':##H-##J/#3B#72#=  " #3B#72#= $H  =$$[1$$]3"!##8&7%99P<O;QRS)) #%$	
 !0  '')>)>{I)V(WX  '')>)>w)L(MN!!-$$++V-B-BCVX]^b^t^tXu-v,wx23r!   c                 X    U R                  XU5      (       a  g U R                  XU5        g N)fuse_t5_encoderfuse_t5_decoder)r   nodeinput_name_to_nodesoutput_name_to_nodes       r   fuseFusionT5Attention.fuse   s*    ;NOOT8KLr!   c                   ^  UR                   S:X  d   eU R                  R                  U/ SQ/ SQUS9nUc  gUu  pVnU R                  R                  U/ SQ/ SQU5      nUc  gUS   n	U R                  R                  U/ S	Q/ S
QU5      n
U
c  gU
u  pknU R                  R                  U/ SQ/ SQU5      nUc  gUu  pnnU R                  R                  U/ SQ/ SQU5      nUS L nUb  US   nOPU R                  R                  U/ SQ/ SQU5      nUc&  U R                  R                  U/ SQ/ SQU5      nUc  gUS   nU R                  R	                  U5      u  nnUc  gUS:w  a  [        U5      U l        U R                  R                  US   / SQ/ SQU5      m U R                  R                  US   / SQ/ SQU5      nT b  [        U 4S jU R                  R                  5       R                   5       5      (       aH  UbE  T S   R                  S   US   R                  S   :X  a  [        T S   R                  5      S:X  a  SnO+U R                  R                  US   R                  S   5      nS nU R                  R                  USS/SS/5      nUc(  U(       a!  U R                  R                  U/ SQ/ S
Q5      nUc  gUS   R                  S   nU R                  R                  U/ S	Q/ S
Q5      nUc  gUu    nnU R                  R                  U/ S	Q/ SQ5      nUc  gUu  nnnUR                  S   U	R                  S   :w  a  gU R                  U5      u  nnU R                  UUUUUUU	R                  S   UR                  S   USS 9
nUc  gU R                   R#                  U5        U R$                  U R&                  UR(                  '   U R*                  R#                  U5        S!U l        g!)"Nr   MatMul	TransposeReshaper   r   r   r   edgesr}   FConcat	UnsqueezeGatherShaper   r   r   r   r9   r   r   r   r   r   r   r   Addr   r   r   r   r   MulSubCastr   r   r   r   r   r   r   r   r   )r   Slicer   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      )ConstantOfShaper   r   r   r   r   r   r   r   r   )r   r   r   r   r   c              3   `   >#    U  H#  oR                   TS    R                  S   :H  v   M%     g7f)r9   r   N)r3   r&   ).0r&   mask_nodes_2s     r   	<genexpr>4FusionT5Attention.fuse_t5_encoder.<locals>.<genexpr>F  s*     bIaJJ,r"2"8"8";;Ias   +.r   r8   r   RelativePositionBias)r   r   r   rs   )r   r   r&   r'   r(   r)   T)op_typer   match_child_pathmatch_parent_pathget_constant_inputrV   r>   anygraphr&   lenr   process_maskr'   get_num_heads_and_hidden_sizerh   nodes_to_addrO   rN   node_name_to_graph_namer3   nodes_to_removeprune_graph)!r   softmax_noder}   r~   	qkv_nodes
matmul_qkv_reshape_qkvqkv_shape_nodesinput_shape_nodev_nodes	reshape_vmatmul_vqk_nodesadd_qk	matmul_qk
mask_nodesis_pattern_for_one_graph_inputmul_nodemul_valmask_nodes_3r"   res_pos_bias	rpb_nodesk_nodesmatmul_kq_nodes	reshape_qmatmul_qq_num_headsq_hidden_sizenew_noder   s!                                   @r   rz   !FusionT5Attention.fuse_t5_encoder   sY   ##y000JJ//.* 3	 0 
	 %."
{**666	
 "*2.**...	
 ?!(h :://(	
 '9ZZ11C	

 *4t);&!!!}H 55H"#	J !!ZZ99T)'	
 % !!}HZZ228<
7?f%*7^D" zz33rNI	
 zz33rNI	
 $bIYIYI[IaIabbb(R &&q)\"-=-C-CA-FFLO))*a/J,,99*R.:N:Nq:QRJJJ00*+F
	
 !?

448I
  }++A.**...

 ? 1h **...

 ?!(9h >>! 0 6 6q 99%)%G%G	%R"]++!%"((+%%a(" , 
   *6:6J6J$$X]]3##K0r!   c                 @   UR                   S:X  d   eU R                  R                  U/ SQ/ SQUS9nUc  g Uu  pVnU R                  R                  U/ SQ/ SQ5      nUc  g US   n	S n
S nS nU R                  R                  U/ SQ/ S	Q5      nUc  U R                  R                  U/ S
Q/ SQ5      nUbZ  Uu  pnUR                  S   n
UR
                  S   nSU;  a  g UR                  S   U	R                  S   :w  a  SU l        O{SU l        OsUR                  S   nX;   a  g SU;  a  g SU l        OOUu  nnnnUR                  S   nX;   a  g SU;  a  g UR
                  S   nSU;  a  g UR                  S   n
SU l        U R                  R                  U/ SQ/ SQ5      nUc  g Uu  nnnS nS nU R                  S:X  a  U R                  R                  U/ SQ/ SQ5      nUb  US   nO*U R                  R                  U/ SQ/ SQ5      nUc  g US   nU R                  R                  U5      u  nnUS:w  a  UU l        U R                  R                  US   R                  S   5      nOZU R                  R                  USS/SS/4SS/SS/4/U5      u  n  nUS:  a  [        R                  S5        g UR                  S   nS nS nS nU R                  S:X  a  U R                  R                  U/ S
Q/ SQ5      nUbv  Uu  n n!nU!R                  S   nUU!R
                  S      n"U" H<  n#U R                  R                  U#R
                  S   5      n$U$c  M0  U$R                  n  O   Uc  g SU;  a  g GOU R                  R                  US/S/5      nUc  g US   n U R                  S   nUU;   a  g S U;  a  g GOU R                  R                  U/ S!Q/ S"Q4/ S#Q/ S$Q4/U5      u  n%nnS n&S n"Ub  US   US%   n!n'U!R                  S   nU%S:X  a"  UU'R                  S      n&U&R                  S   nOU'R                  S   nUU;   a  g S&U;  a  g U%S:X  aU  UU'R
                  S      n"U" H<  n#U R                  R                  U#R
                  S   5      n$U$c  M0  U$R                  n  O   OU'R
                  S   nUc  g S'U;  a  g OU R                  R                  U/ S
Q/ SQ5      nUc  g Uu  nn!nU!R                  S   nUU!R
                  S      n"U" H<  n#U R                  R                  U#R
                  S   5      n$U$c  M0  U$R                  n  O   Uc  g S'U;  a  g U R                  R                  U/ S
Q/ SQ5      n(U(c  g U(u  n)n*n+U+R                  S   U	R                  S   :w  a  g U R!                  U*5      u  n,n-U R                  S:X  a  Ub  UnUn
S nS nU(       a  U
(       a  U,S:  a  U-S:  d  g U R#                  U+R
                  S   UU
UUUUUR
                  S   UUU,U-S(9n.U.(       a  U R$                  R'                  U.5        U R(                  U R*                  U.R                  '   U(       d  U(       a  UU4 Hx  n/U/(       a   U R                  R                  U/5      (       d  [-        S)U/< S*35          g U/U;   d   eU/S+-   UU/   R
                  S'   U R                  R/                  U/U/S+-   5        Mz     U R0                  R'                  U5        S,U l        g g )-Nr   r   r   r   r   r   r9   )r   r   r   r   )r   r   r   r   r   r   r   rp   r   past_value_crosspast_value_selfpresent_value_selfr   r   r   r   r   r   r   r   r   r   r   zGSkip MultiHeadAttention fusion since attention bias pattern not matchedpresent_key_crossr   past_key_cross)r   r   r   r   )r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   past_key_selfpresent_key_self)rj   rk   rl   r"   r(   rm   rn   r'   ro   rp   r   r   zgraph_output=z does not exist in graph output_copyF)r   r   r   r   r&   r'   r   r   r>   r   r   match_parent_pathsr?   r@   find_graph_outputr3   r   rv   r   rO   rN   r   rB   replace_input_of_all_nodesr   r   )0r   r   r}   r~   r   r   _transpose_qkvr   r   r   rl   rn   rp   r   transpose_vr   r   concat_vr   r   r   r   r"   r   r   r   r   matched_path_indexrk   rm   ro   r   transpose_k	reshape_kpresent_key_transpose_nodespresent_key_transpose_nodepresent_key_candidateidxpast_key_transpose_nodeconcat_kr   transpose_qr   r   r   r   r   graph_outputs0                                                   r   r{   !FusionT5Attention.fuse_t5_decoder  s   ##y000JJ//.* 3	 0 
	 2;/
K**666

 "*2.
**..8

 ?jj222G
 "3:0!* + 2 21 5"-7>>!$(8(>(>q(AA%&DN%&DN'--a0
4%Z7!"(/%HaA!*J0 
2$OOA.M#=8OOA&EDN:://(

 '69
>>Q55G"J
 %%a=!ZZ99T)

 %%a=66x@JAw& )0&,,99*R.:N:Nq:QRJ'+zz'D'DW%1v.34q!f= $($1 "A%fg!<<?L>>Qjj222G
 ",3)Yooa(.A)BRBRSTBU.V+2M.,0JJ,H,HIcIjIjklIm,n),8&;&@&@	 3N
 &&k9 : **66 MC
 ?%aj&,,Q/22#83 4 #jj;;A<PNP_` $OC! '+#*.'"&-aj'"+)ooa(!8.A(..QRBS.T+6<<Q?H'~~a0H22"(2!82EhooVWFX2Y/6Q204

0L0LMgMnMnopMq0r-0<*?*D*DK!	 7R #+//!"4K&%[8 9 **666
 ?")9aooa(.A)BRBRSTBU.V+2M.,0JJ,H,HIcIjIjklIm,n),8&;&@&@	 3N
 &%[8**...

 ?+2(Y>>! 0 6 6q 99%)%G%G	%R"]>>Q8#7CEHJ+/ma6G''//!$!"!%%a(#'!% ( 
 $$X.:>:N:ND((7 m%0-$@L(TZZ-I-I,-W-W/NOP'+>>>>BNQXBX'5<<Q?JJ99,W^H^_ %A   ''4$D r!   )r>   r   r   )__name__
__module____qualname____firstlineno____doc__r   intr   r   strr	   rV   rh   rv   r   rz   r{   __static_attributes____classcell__r   s   @r   r   r      s     	
 &"o$Jo o 	o
 o o o o o :o o 
T	obDD D 	D
 $JD :D *D $JD D 4ZD TzD D D 
T	DLMiVI% I%r!   r   c                   6   ^  \ rS rSrS\4U 4S jjrS rSrU =r$ )FusionRelativePositionBiasBlocki  r   c                 *   > [         TU ]  USS/5        g )Nr   r   )r   r   )r   r   r   s     r   r   (FusionRelativePositionBiasBlock.__init__  s     6Dr!   c                    U R                   R                  U/ SQ/ SQU5      nUc&  U R                   R                  U/ SQ/ SQU5      nUc  g US   nUS   nUS   nUS   nXR                  ;   a  g U R                   R                  U/ S	Q/ S
QU5      n	U	c  g U R                   R                  U	S   R                  S   5      n
U	S   nU R                   R                  U/ SQ/ SQU5      nSnUc(  U R                   R                  U/ SQ/ SQU5      nSnUc  g US   n[        [        R                  " [        R                  " U
5      SU(       a  SOS-  -  5      5      nUS:w  a  [        R                  SU S35        U R                   R                  SSU(       a  SOS-   S9nU R                   R                  UR                  S   5      nUc  g [        R                  " U5      n[        R                  " U5      n[         R"                  " US-   [$        R&                  [        R(                  " U5      S   [        R(                  " U5      S   /UR+                  5       SS9nU R                   R-                  UU R.                  5        UR0                  UR                  S   UR                  S   /nUS -   nUUR                  S'   [         R2                  " SUU/US!9nS"Ul        UR6                  R9                  [         R:                  " S#U5      /5        UR6                  R9                  [         R:                  " S$U5      /5        U R.                  U R<                  UR0                  '   U R>                  RA                  U5        SU l!        g )%N)r   r   r   r   r   r   Where)r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r      r9   r   r/   )	Minr   r   r   r   r   DivLogr   )	r   r   r   r   r   r   r   r   r   r   )r   Negr   r   r   r   r   Range)r   r   r   r   r   r   r   r   F)r   Absr   r   r  r   T          zmax_distance is z], which is different from the default value 128. Please double check the model configuration.r   RelPosBias_encoderdecodername_prefixr   _bias_table_weightr2   _rel_pos_biasr:   r=   max_distanceis_bidirectional)"r   r   r   get_constant_valuer&   r   rF   roundexpr?   rE   rI   rA   r   rC   	transposer   rJ   r
   rK   rD   rL   rM   rN   r3   rQ   rR   rS   rT   rU   r   r   rO   r   )r   r|   r}   r~   compute_bias_nodesgatherwhereslice	unsqueezecompute_buckets_nodeslog_maxdivrange_nodesr  
range_noder  	node_nametable_weight_itable_weighttable_weight_t
bias_tabler;   bias_outputrpb_nodes                           r   r   $FusionRelativePositionBiasBlock.fuse  sq   !ZZ99P!	
 %!%!=!=[(#	" ")#A&"2&"1%&q)	 ,,, $

 < <Z'	!
 !( **//0Eb0I0O0OPQ0RS#B'jj22[$	
 !**66A?TgK  $" _
 288BFF7OrCSaYZ7[$\]^3NN"<. 1? ?
 JJ//"N^dm0n 0 
	 33FLLOD!"++N;l3''11!''((<(+RXXl-CA-FG'')

 	

"":t/C/CDP //:#3#3A#6
8H8H8KL  /1$A##" M	
 *!!6#8#8#V"WX!!6#8#89KM]#^"_`6:6J6J$$X]]3  *r!   )r   )	r   r   r   r   r   r   r   r   r   r   s   @r   r   r     s    Ei ER  R r!   r   c                   l   ^  \ rS rSrSS\S\4U 4S jjjrS rS rSS jrS r	S	 r
S
 rS rS rSrU =r$ )T5OnnxModeli6  r   r   c                   > [         TU ]  XU5        [        U 5      U l        [	        U R
                  R                  R                  5      S:X  a!  SSKJ	n  UR                  U R                  l        [        X R                  U R                  U R                  5      U l        [!        U 5      U l        [%        U 5      U l        [)        U 5      U l        g )Nr   r   )AttentionMaskFormat)r   r   r   r   r   r   r   r&   fusion_optionsr*  NoMaskmask_formatr   r   r   attention_fusionr   layer_norm_fusionr   skip_layer_norm_fusionr   
rpb_fusion)r   r   r   r   r*  r   s        r   r   T5OnnxModel.__init__7  s    ;7+D1 tzz%%&!+:.A.H.HD+ 1$8H8H$..Z^ZmZm n!CD!I&LT&R#9$?r!   c                 8    U R                   R                  5         g ry   )r.  applyr   s    r   fuse_attentionT5OnnxModel.fuse_attentionF  s    ##%r!   c                 8    U R                   R                  5         g ry   )r/  r4  r5  s    r   fuse_layer_normT5OnnxModel.fuse_layer_normI  s    $$&r!   c                 8    U R                   R                  5         g ry   )r0  r4  )r   shape_infers     r   fuse_skip_layer_norm T5OnnxModel.fuse_skip_layer_normL  s    ##))+r!   c                    U R                  5        GHh  nUR                  S:X  d  M  U R                  U/ SQ/ SQ5      nUGb8  U R                  R                  R
                   Vs/ s H  o3R                  PM     nnUS   R
                  S   U;   a  U R                  SSS9n[        R                  " SUS   R
                  S   /US	-   /US
9n[        R                  " S[        R                  S/S/S9nU R                  U5        [        R                  " SUS	-   S/US-   /U R                  SSS9SS9nU R                  U5        U R                  U5        US-   UR
                  S'   US-   UR
                  S'     g    g s  snf )Nr   )
r   r   r   r   r   r   r   r   SimplifiedLayerNormalizationr   )
r   r   r   r   r   r   r   r   r   r   r9   r   r   Added_Shape_r  _Outputr:   Constant_Index_1)r3   r4   r5   r6   r   _Output_Gather_1Added_Gather_r   )r;   r<   r3   r.   r   )nodesr   r   r   r   r&   r3   rI   r   rQ   rJ   r
   INT64rM   add_node)	r   r|   rF  r&   graph_input_namesr  
shape_node	indices_1r  s	            r   adjust_rel_pos_bis_length_input+T5OnnxModel.adjust_rel_pos_bis_length_inputO  s    JJLD||55.. 3" $AEAQAQAWAW(XAWAW%(XRyq)->>$($9$9'~$9$^	%+%5%5#$)"IOOA$6#7%.%:$;!*	&
 %+$6$6!3&1&7&7"#"#	%	 ,,Y7!'!1!1$$-	$9;M#N%.1C%C$D!%!6!6x_!6!]!"" j1f-(14F(F

1(14F(F

1g !( )Ys   $E?c                 n   / nU R                  5        H  nUR                  S:X  d  M  U R                  U/ SQ/ SQ5      nUc  M1  U R                  US/S/5      nUc  MK  US   nUR                  S   UR                  S'   UR	                  U5        UR                  U5        U R                  U5        M     g )Nr   )r   r   r   r   r   LessOrEqualTiler   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   rF  r   r   r'   rT   rO   remove_nodesr   r   r|   extended_mask_nodesr   r%  s         r   !remove_extended_mask_decoder_init-T5OnnxModel.remove_extended_mask_decoder_init  s    JJLD||u$&*&<&< 6'#" '. 224:P9QTUSVW	$$Q<%)[[^"&&':;&&t,!!/2? !r!   c                 r   / nU R                  5        H  nUR                  S:X  d  M  U R                  U/ SQ/ SQ5      nUc  M1  U R                  USS/SS/5      nUc  MM  US   nUR                  S   UR                  S'   UR	                  U5        UR                  U5        U R                  U5        M     g )Nr   )r   r   r   r   r   r   rO  rP  r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rQ  rS  s         r   remove_extended_mask_decoder(T5OnnxModel.remove_extended_mask_decoder  s    JJLD||u$&*&<&< 9!'#$ '. 224'CY9Z]^`a\bc	$$Q<%)[[^"&&':;&&t,!!/2A !r!   c                 X    U R                  5         U R                  R                  5         g ry   )adjust_reshape_and_expandr1  r4  r5  s    r   
preprocessT5OnnxModel.preprocess  s    &&(r!   c                     U R                  5         U R                  5         U R                  5         U R                  5         g ry   )rU  rX  rL  r   r5  s    r   postprocessT5OnnxModel.postprocess  s2    ..0))+,,.r!   )r.  r   r/  r1  r0  r   )T)r   r   r   r   r   r   r6  r9  r=  rL  rU  rX  r\  r_  r   r   r   s   @r   r(  r(  6  sO    @ @s @ @&',6r!3F"3H  r!   r(  )loggingnumpyrF   fusion_attentionr   r   fusion_baser   fusion_simplified_layernormr   r   fusion_utilsr   onnxr	   r
   r   
onnx_modelr   onnx_model_bertr   	getLoggerr   r?   r   r   r(   r!   r   <module>rl     sa   
   ;  r $ / /   )			8	$G
% G
%TV f V rc- cr!   