
     Ti                        S SK Jr  S SKJr  S SKrS SKJs  Jr  S SK	J
r
Jr  \\\R                  4   r " S S\R                  5      r\R#                  5       r\R&                  " \/5      r\R*                  " \5      rg)    )annotations)UnionN)_basicspatternc                  B   ^  \ rS rSrU 4S jrS r  SS jrS rSrU =r	$ )OnnxGroupQueryAttention   c                "   > [         TU ]  SSS9  g )NONNXGQAF)remove_nodes)super__init__)self	__class__s    d/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/onnxscript/rewriter/rules/fusion/_gqa.pyr    OnnxGroupQueryAttention.__init__   s    7    c           
        UR                  XSSS9nUR                  US5      nUR                  U[        R                  5      n	UR                  U	[        R                  S/S9n
UR                  XdSS9nUR                  US5      nUR                  U[        R                  5      nUR                  U[        R                  S/S9nUR                  UU
U[        R                  " SSS	9S
/S9nXU4$ )N)axis   present_key_BHStD)_outputspresent_value_BHStDmaskT)can_match_noneattention_BHSDh)Concat	UnsqueezeExpandr   	ANY_VALUEReshape	AttentionVar)r   op
query_BHSD
key_BHkvSDvalue_BHkvSDpast_key_BHkvSpDpast_value_BHkvSpDpresent_key_BHkvStDpresent_key_BHkv1StDpresent_key_BHkvGStDr   present_value_BHkvStDpresent_value_BHkv1StDpresent_value_BHkvGStDr   r   s                   r   r   OnnxGroupQueryAttention.pattern   s    !ii(82iN!||,?C!yy)=w?P?PQJJ '"3"3?R>S ' 
 !#		*<QS	 T!#.CQ!G!#+A7CTCT!U jj"G$5$5AV@W ) 
 ,,KKt4'( ' 
 5JJJr   c	                f   0 n
[         R                  " X/ SQ5        [         R                  " X/ SQ5        [         R                  " X/ SQ5        [         R                  " X/ SQ5        [         R                  " X/ SQ5        [         R                  " X/ SQ5        [         R                  " X/ SQ5        g)N)BHSD)r3   Hkvr5   r6   )r3   r7   Pr6   )r3   r4   zS+Pr6   T)_fusion_utilscheck_shape)r   contextr&   r'   r(   r)   r*   r   r   _bindingss              r   checkOnnxGroupQueryAttention.check9   s     $&!!(8LM!!(8NO!!(:PQ!!(>TU!!(@VW 	!!(?UV!!(AWXr   c	                r    UR                  5       n
U
R                  nUR                  " UUUUUU40 UDSS0D6$ )Nr      )producer
attributesr#   )r   r%   r&   r'   r(   r)   r*   r   r   r<   original_attention_nodeoriginal_attrss               r   rewriteOnnxGroupQueryAttention.rewriteT   sU     #2":":"<0;;||	
 	
 	
 		
r    )r;   z_basics.MatchContext)
__name__
__module____qualname____firstlineno__r   r   r>   rF   __static_attributes____classcell__)r   s   @r   r   r      s&    8$KL%6
 
r   r   )
__future__r   typingr   onnx_irir!onnxscript.rewriter._fusion_utilsrewriterr9   onnxscript.rewriterr   r   intSymbolicDimDimRewriteRuleClassBaser   rule_basic_gqa_ruleRewriteRuleSet	gqa_rulesapply_fusion_rulesfuse_gqarH   r   r   <module>r`      st    #   9 9 0C \
g:: \
~ *..0""O#45	++I6r   