§
    1�Åj}Q  ã                  óì   — d dl mZ d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ ej        fdd„Zej        fdd„Zej        fdd„Zej        fdd„Zej        fdd„Z G d„ de¦  «        ZdS )é    )ÚannotationsN)ÚTensorProtoÚhelper)ÚBase)Úexpect)ÚAI_ONNX_PREVIEW_DOMAIN)Ú_compute_flex_attentionÚ
bias_valueÚfloatÚdtypeúTensorProto.DataTypeÚreturnúonnx.GraphProtoc                óü   — t          j        d|g d¢¦  «        }t          j        d|g d¢¦  «        }t          j        d|g | g¦  «        }t          j        dddgdg¦  «        }t          j        |gd|g|g|g¦  «        S )zqCreate a score_mod subgraph that adds a constant bias to the scores.

    score_mod(scores) -> scores + bias
    Úscores©ÚBÚHÚLÚSÚ
scores_outÚbiasÚAddÚscore_mod_bias©r   Úmake_tensor_value_infoÚmake_tensorÚ	make_nodeÚ
make_graph)r
   r   Úscore_inÚ	score_outÚbias_tensorÚadd_nodes         úZC:\Projects\Historical\venv\Lib\site-packages\onnx/backend/test/case/node/flexattention.pyÚ_make_score_mod_bias_graphr%      s™   € õ Ô,¨X°uÐ>RÐ>RÐ>RÑSÔS€HÝÔ-¨l¸EÐCWÐCWÐCWÑXÔX€IåÔ$ V¨U°B¸¸ÑEÔE€KÝÔ ¨°&Ð'9¸L¸>ÑJÔJ€HåÔØ	ˆ
ØØ	ˆ
Ø	ˆØ	ˆñô ð ó    Úscale_valuec                óü   — t          j        d|g d¢¦  «        }t          j        d|g d¢¦  «        }t          j        d|g | g¦  «        }t          j        dddgdg¦  «        }t          j        |gd|g|g|g¦  «        S )zdCreate a prob_mod subgraph that scales the probabilities.

    prob_mod(probs) -> probs * scale
    Úprobsr   Ú	probs_outÚscaleÚMulÚprob_mod_scaler   )r'   r   Úprob_inÚprob_outÚscale_tensorÚmul_nodes         r$   Ú_make_prob_mod_scale_graphr2   )   s™   € õ Ô+¨G°UÐ<PÐ<PÐ<PÑQÔQ€GÝÔ,¨[¸%ÐAUÐAUÐAUÑVÔV€HåÔ% g¨u°b¸;¸-ÑHÔH€LÝÔ ¨°Ð'9¸K¸=ÑIÔI€HåÔØ	ˆ
ØØ	ˆ	Ø	ˆ
Ø	ˆñô ð r&   c                ó0  — t          j        d| g d¢¦  «        }t          j        d| g d¢¦  «        }t          j        ddgdg¦  «        t          j        dddgdgd	¬
¦  «        t          j        dddgdgd	¬
¦  «        t          j        dg d¢dg¦  «        t          j        dddgdg¦  «        t          j        dg d¢dg¦  «        t          j        dddgdg¦  «        t          j        dddgdg¦  «        t          j        dg d¢dg¦  «        g	}t          j        dt          j        g d	g¦  «        t          j        dt          j        g dg¦  «        t          j        dt          j        g dg¦  «        t          j        dt          j        g dg¦  «        t          j        dt          j        d gg d!¢¦  «        t          j        dt          j        d gg d"¢¦  «        t          j        d#| g t          d$¦  «        g¦  «        g}t          j        |d%|g|g|¦  «        S )&a  Create a score_mod subgraph that applies causal masking.

    For each position, masks out future tokens by setting scores to -inf
    where k_idx > q_idx. This pattern is used in Qwen-3, Gemma-3, Llama-3, etc.

    score_mod(scores) -> Where(q_idx >= k_idx, scores, -inf)
    r   r   r   ÚShapeÚscores_shapeÚGatherÚidx_2ÚL_dimr   ©ÚaxisÚidx_3ÚS_dimÚRange©Úzeror8   ÚoneÚq_rangeÚReshapeÚq_shapeÚq_idx©r?   r<   r@   Úk_rangeÚk_shapeÚk_idxÚGreaterOrEqualÚmaskÚWhere)rJ   r   Úneg_infr?   r@   é   é   é   é   )rM   rM   éÿÿÿÿrM   )rM   rM   rM   rQ   rL   z-infÚscore_mod_causal_mask)r   r   r   r   r   ÚINT64r   r   ©r   r    r!   ÚnodesÚinitializerss        r$   Ú!_make_score_mod_causal_mask_graphrW   @   s   € õ Ô,¨X°uÐ>RÐ>RÐ>RÑSÔS€HÝÔ-¨l¸EÐCWÐCWÐCWÑXÔX€Iõ 	Ô˜ 8 *¨~Ð.>Ñ?Ô?ÝÔ˜ N°GÐ#<¸w¸iÈaÐPÑPÔPÝÔ˜ N°GÐ#<¸w¸iÈaÐPÑPÔPåÔ˜Ð":Ð":Ð":¸Y¸KÑHÔHÝÔ˜ Y°	Ð$:¸W¸IÑFÔFåÔ˜Ð":Ð":Ð":¸Y¸KÑHÔHÝÔ˜ Y°	Ð$:¸W¸IÑFÔFåÔÐ)¨G°WÐ+=À¸xÑHÔHåÔ˜Ð"?Ð"?Ð"?À,ÀÑPÔPð€Eõ$ 	Ô˜6¥;Ô#4°b¸1¸#Ñ>Ô>ÝÔ˜5¥+Ô"3°R¸!¸Ñ=Ô=ÝÔ˜7¥KÔ$5°r¸A¸3Ñ?Ô?ÝÔ˜7¥KÔ$5°r¸A¸3Ñ?Ô?ÝÔ˜9¥kÔ&7¸!¸¸m¸m¸mÑLÔLÝÔ˜9¥kÔ&7¸!¸¸m¸m¸mÑLÔLÝÔ˜9 e¨Rµ%¸±-´-°ÑAÔAð€Lõ ÔØØØ	ˆ
Ø	ˆØñô ð r&   Ú	cap_valuec                óZ  — t          j        d|g d¢¦  «        }t          j        d|g d¢¦  «        }t          j        dddgdg¦  «        t          j        ddgdg¦  «        t          j        d	ddgdg¦  «        g}t          j        d|g | g¦  «        g}t          j        |d
|g|g|¦  «        S )z¢Create a score_mod subgraph that applies soft capping.

    Used in Gemma-2 to stabilize attention scores.

    score_mod(scores) -> tanh(scores / cap) * cap
    r   r   r   ÚDivÚcapÚscaledÚTanhÚtanh_outr,   Úscore_mod_soft_cap)r   r   r   r   r   )rX   r   r    r!   rU   rV   s         r$   Ú_make_score_mod_soft_cap_graphr`   q   sÔ   € õ Ô,¨X°uÐ>RÐ>RÐ>RÑSÔS€HÝÔ-¨l¸EÐCWÐCWÐCWÑXÔX€Iõ 	Ô˜ ¨5Ð 1°H°:Ñ>Ô>ÝÔ˜ ( ¨j¨\Ñ:Ô:ÝÔ˜ ¨UÐ 3°l°^ÑDÔDð€Eõ 	Ô˜5 %¨¨i¨[Ñ9Ô9ð€Lõ ÔØØØ	ˆ
Ø	ˆØñô ð r&   c                ó  — t          j        d| g d¢¦  «        }t          j        d| g d¢¦  «        }t          j        ddgdg¦  «        t          j        dddgdgd	¬
¦  «        t          j        dddgdgd	¬
¦  «        t          j        dg d¢dg¦  «        t          j        dddgdg¦  «        t          j        dg d¢dg¦  «        t          j        dddgdg¦  «        t          j        dddgdg¦  «        t          j        ddgdg| ¬¦  «        t          j        dddgdg¦  «        g
}t          j        dt          j        g d	g¦  «        t          j        dt          j        g dg¦  «        t          j        dt          j        g d g¦  «        t          j        dt          j        g d!g¦  «        t          j        dt          j        d gd"dg¦  «        t          j        dt          j        d gdd"g¦  «        g}t          j        |d#|g|g|¦  «        S )$a  Create a score_mod subgraph that adds relative positional bias.

    Adds (q_idx - k_idx) to the scores. This pattern captures the core idea
    of relative position embeddings used in various Transformer models.

    score_mod(scores) -> scores + Cast(q_idx - k_idx, dtype)
    r   r   r   r4   r5   r6   r7   r8   r   r9   r;   r<   r=   r>   rA   rB   rC   rD   rE   rF   rG   rH   ÚSubÚrel_posÚCastÚrel_pos_cast)Útor   r?   r@   rM   rN   rO   rQ   Úscore_mod_relative_positional)r   r   r   r   r   rS   r   rT   s        r$   Ú)_make_score_mod_relative_positional_graphrh   ‘   s  € õ Ô,¨X°uÐ>RÐ>RÐ>RÑSÔS€HÝÔ-¨l¸EÐCWÐCWÐCWÑXÔX€Iõ 	Ô˜ 8 *¨~Ð.>Ñ?Ô?ÝÔ˜ N°GÐ#<¸w¸iÈaÐPÑPÔPÝÔ˜ N°GÐ#<¸w¸iÈaÐPÑPÔPåÔ˜Ð":Ð":Ð":¸Y¸KÑHÔHÝÔ˜ Y°	Ð$:¸W¸IÑFÔFåÔ˜Ð":Ð":Ð":¸Y¸KÑHÔHÝÔ˜ Y°	Ð$:¸W¸IÑFÔFåÔ˜ ¨'Ð 2°Y°KÑ@Ô@åÔ˜ ) ¨~Ð.>À5ÐIÑIÔIÝÔ˜ ¨>Ð :¸\¸NÑKÔKð€Eõ& 	Ô˜6¥;Ô#4°b¸1¸#Ñ>Ô>ÝÔ˜5¥+Ô"3°R¸!¸Ñ=Ô=ÝÔ˜7¥KÔ$5°r¸A¸3Ñ?Ô?ÝÔ˜7¥KÔ$5°r¸A¸3Ñ?Ô?ÝÔ˜9¥kÔ&7¸!¸¸rÀ1¸gÑFÔFÝÔ˜9¥kÔ&7¸!¸¸qÀ"¸gÑFÔFð€Lõ ÔØØ'Ø	ˆ
Ø	ˆØñô ð r&   c                  ó  — e Zd Zedd„¦   «         Zedd„¦   «         Zedd„¦   «         Zedd„¦   «         Zedd„¦   «         Zedd„¦   «         Z	edd	„¦   «         Z
edd
„¦   «         Zedd„¦   «         Zedd„¦   «         Zedd„¦   «         ZdS )ÚFlexAttentionr   ÚNonec                 óˆ  — t          j        dg d¢dgt          ¬¦  «        } d\  }}}}d\  }}t          j                             ||||¦  «                             t          j        ¦  «        }t          j                             ||||¦  «                             t          j        ¦  «        }t          j                             ||||¦  «                             t          j        ¦  «        }	t          |||	¦  «        \  }
t          | |||	g|
gdt          j
        dd	¦  «        t          j
        t          d
¦  «        g¬¦  «         dS )z/Basic FlexAttention test with default settings.rj   ©ÚQÚKÚVÚY©ÚinputsÚoutputsÚdomain©rN   rP   é   é   ©é   rx   Útest_flexattentionÚ é   rM   ©rs   rt   ÚnameÚopset_importsN©r   r   r   ÚnpÚrandomÚrandÚastypeÚfloat32r	   r   Úmake_opsetid©Únoder   ÚHqr   ÚEr   ÚEvrn   ro   rp   rq   s              r$   Úexport_flexattentionz"FlexAttention.export_flexattentionÃ   s.  € õ ÔØØ"�?�?Ø�EÝ)ð	
ñ 
ô 
ˆð "‰ˆˆ2ˆq�!Ø‰ˆˆ2åŒI�NŠN˜1˜b ! QÑ'Ô'×.Ò.­r¬zÑ:Ô:ˆÝŒI�NŠN˜1˜b ! QÑ'Ô'×.Ò.­r¬zÑ:Ô:ˆÝŒI�NŠN˜1˜b ! RÑ(Ô(×/Ò/µ´
Ñ;Ô;ˆå& q¨!¨QÑ/Ô/‰ˆåØØ�q˜!�9Ø�CØ%åÔ# B¨Ñ+Ô+ÝÔ#Õ$:¸AÑ>Ô>ðð		
ñ 		
ô 		
ð 		
ð 		
ð 		
r&   c                 ó’  — d} t          j        dg d¢dg| t          ¬¦  «        }d\  }}}}d\  }}t          j                             ||||¦  «                             t          j        ¦  «        }t          j                             ||||¦  «                             t          j        ¦  «        }	t          j                             ||||¦  «                             t          j        ¦  «        }
t          ||	|
| ¬¦  «        \  }t          |||	|
g|gd	t          j
        d
d¦  «        t          j
        t          d¦  «        g¬¦  «         dS )z,FlexAttention with explicit scale attribute.gš™™™™™¹?rj   rm   rq   )rs   rt   r+   ru   rv   ry   )r+   Útest_flexattention_scaledr|   r}   rM   r~   Nr�   )r+   r‰   r   rŠ   r   r‹   r   rŒ   rn   ro   rp   rq   s               r$   Úexport_flexattention_scaledz)FlexAttention.export_flexattention_scaledá   s;  € ð ˆÝÔØØ"�?�?Ø�EØÝ)ð
ñ 
ô 
ˆð "‰ˆˆ2ˆq�!Ø‰ˆˆ2åŒI�NŠN˜1˜b ! QÑ'Ô'×.Ò.­r¬zÑ:Ô:ˆÝŒI�NŠN˜1˜b ! QÑ'Ô'×.Ò.­r¬zÑ:Ô:ˆÝŒI�NŠN˜1˜b ! RÑ(Ô(×/Ò/µ´
Ñ;Ô;ˆå& q¨!¨Q°eÐ<Ñ<Ô<‰ˆåØØ�q˜!�9Ø�CØ,åÔ# B¨Ñ+Ô+ÝÔ#Õ$:¸AÑ>Ô>ðð		
ñ 		
ô 		
ð 		
ð 		
ð 		
r&   c                 ó„  — t          j        dg d¢dgt          ¬¦  «        } d\  }}}}}}}t          j                             ||||¦  «                             t          j        ¦  «        }t          j                             ||||¦  «                             t          j        ¦  «        }	t          j                             ||||¦  «                             t          j        ¦  «        }
t          ||	|
¦  «        \  }t          | ||	|
g|gdt          j
        dd¦  «        t          j
        t          d	¦  «        g¬
¦  «         dS )z1FlexAttention with Grouped Query Attention (GQA).rj   rm   rq   rr   )rN   rw   rN   rP   rz   rx   rx   Útest_flexattention_gqar|   r}   rM   r~   Nr�   )r‰   r   rŠ   ÚHkvr   r   r‹   rŒ   rn   ro   rp   rq   s               r$   Úexport_flexattention_gqaz&FlexAttention.export_flexattention_gqa  s,  € õ ÔØØ"�?�?Ø�EÝ)ð	
ñ 
ô 
ˆð #8Ñˆˆ2ˆs�A�q˜!˜RåŒI�NŠN˜1˜b ! QÑ'Ô'×.Ò.­r¬zÑ:Ô:ˆÝŒI�NŠN˜1˜c 1 aÑ(Ô(×/Ò/µ´
Ñ;Ô;ˆÝŒI�NŠN˜1˜c 1 bÑ)Ô)×0Ò0µ´Ñ<Ô<ˆå& q¨!¨QÑ/Ô/‰ˆåØØ�q˜!�9Ø�CØ)åÔ# B¨Ñ+Ô+ÝÔ#Õ$:¸AÑ>Ô>ðð		
ñ 		
ô 		
ð 		
ð 		
ð 		
r&   c                 óˆ  — t          j        dg d¢dgt          ¬¦  «        } d\  }}}}d\  }}t          j                             ||||¦  «                             t          j        ¦  «        }t          j                             ||||¦  «                             t          j        ¦  «        }t          j                             ||||¦  «                             t          j        ¦  «        }	t          |||	¦  «        \  }
t          | |||	g|
gdt          j
        dd	¦  «        t          j
        t          d
¦  «        g¬¦  «         dS )z5FlexAttention with different head sizes for Q/K vs V.rj   rm   rq   rr   rv   )rz   é    Ú"test_flexattention_diff_head_sizesr|   r}   rM   r~   Nr�   rˆ   s              r$   Ú$export_flexattention_diff_head_sizesz2FlexAttention.export_flexattention_diff_head_sizes  s.  € õ ÔØØ"�?�?Ø�EÝ)ð	
ñ 
ô 
ˆð "‰ˆˆ2ˆq�!Ø‰ˆˆ2åŒI�NŠN˜1˜b ! QÑ'Ô'×.Ò.­r¬zÑ:Ô:ˆÝŒI�NŠN˜1˜b ! QÑ'Ô'×.Ò.­r¬zÑ:Ô:ˆÝŒI�NŠN˜1˜b ! RÑ(Ô(×/Ò/µ´
Ñ;Ô;ˆå& q¨!¨QÑ/Ô/‰ˆåØØ�q˜!�9Ø�CØ5åÔ# B¨Ñ+Ô+ÝÔ#Õ$:¸AÑ>Ô>ðð		
ñ 		
ô 		
ð 		
ð 		
ð 		
r&   c                 óT  — d} t          | t          j        ¦  «        }t          j        dg d¢dgt
          ¬¦  «        }t          j        d|¦  «        }|j                             |¦  «         d\  }}}}d\  }}	t          j
                             ||||¦  «                             t          j        ¦  «        }
t          j
                             ||||¦  «                             t          j        ¦  «        }t          j
                             ||||	¦  «                             t          j        ¦  «        }d	t          j        |¦  «        z  }t          j        d
|
|¦  «        |z  }|| z   }t          j        ||                     dd¬¦  «        z
  ¦  «        }||                     dd¬¦  «        z  }t          j        d||¦  «                             t          j        ¦  «        }t'          ||
||g|gdt          j        dd¦  «        t          j        t
          d¦  «        g¬¦  «         dS )z<FlexAttention with score_mod subgraph (adds bias to scores).ç      à?rj   rm   rq   rr   Ú	score_mod©rM   rN   rO   rP   ©rO   rP   ç      ð?úbhle,bhse->bhlsrQ   T©r:   Úkeepdimsúbhls,bhsv->bhlvÚtest_flexattention_score_modr|   r}   rM   r~   N)r%   r   ÚFLOATr   r   r   Úmake_attributeÚ	attributeÚappendr‚   rƒ   r„   r…   r†   ÚsqrtÚeinsumÚexpÚmaxÚsumr   r‡   )r
   Úscore_mod_graphr‰   Úscore_mod_attrr   rŠ   r   r‹   r   rŒ   rn   ro   rp   r+   r   r)   rq   s                    r$   Úexport_flexattention_score_modz,FlexAttention.export_flexattention_score_mod<  sñ  € ð ˆ
Ý4°ZÅÔARÑSÔSˆåÔØØ"�?�?Ø�EÝ)ð	
ñ 
ô 
ˆõ  Ô.¨{¸OÑLÔLˆØŒ×Ò˜nÑ-Ô-Ð-à ‰ˆˆ2ˆq�!Ø‰ˆˆ2åŒI�NŠN˜1˜b ! QÑ'Ô'×.Ò.­r¬zÑ:Ô:ˆÝŒI�NŠN˜1˜b ! QÑ'Ô'×.Ò.­r¬zÑ:Ô:ˆÝŒI�NŠN˜1˜b ! RÑ(Ô(×/Ò/µ´
Ñ;Ô;ˆà•b”g˜a‘j”jÑ ˆÝ”Ð,¨a°Ñ3Ô3°eÑ;ˆØ˜*Ñ$ˆÝ”�v §
¢
°¸T 
Ñ BÔ BÑBÑCÔCˆØ˜Ÿ	š	 r°D˜	Ñ9Ô9Ñ9ˆÝŒIÐ'¨°Ñ2Ô2×9Ò9½"¼*ÑEÔEˆåØØ�q˜!�9Ø�CØ/åÔ# B¨Ñ+Ô+ÝÔ#Õ$:¸AÑ>Ô>ðð		
ñ 		
ô 		
ð 		
ð 		
ð 		
r&   c                 óT  — d} t          | t          j        ¦  «        }t          j        dg d¢dgt
          ¬¦  «        }t          j        d|¦  «        }|j                             |¦  «         d\  }}}}d\  }}	t          j
                             ||||¦  «                             t          j        ¦  «        }
t          j
                             ||||¦  «                             t          j        ¦  «        }t          j
                             ||||	¦  «                             t          j        ¦  «        }d	t          j        |¦  «        z  }t          j        d
|
|¦  «        |z  }t          j        ||                     dd¬¦  «        z
  ¦  «        }||                     dd¬¦  «        z  }|| z  }t          j        d||¦  «                             t          j        ¦  «        }t'          ||
||g|gdt          j        dd¦  «        t          j        t
          d¦  «        g¬¦  «         dS )z<FlexAttention with prob_mod subgraph (scales probabilities).rš   rj   rm   rq   rr   Úprob_modrœ   r�   rž   rŸ   rQ   Tr    r¢   Útest_flexattention_prob_modr|   r}   rM   r~   N)r2   r   r¤   r   r   r   r¥   r¦   r§   r‚   rƒ   r„   r…   r†   r¨   r©   rª   r«   r¬   r   r‡   )r'   Úprob_mod_graphr‰   Úprob_mod_attrr   rŠ   r   r‹   r   rŒ   rn   ro   rp   r+   r   r)   rq   s                    r$   Úexport_flexattention_prob_modz+FlexAttention.export_flexattention_prob_mode  sñ  € ð ˆÝ3°KÅÔARÑSÔSˆåÔØØ"�?�?Ø�EÝ)ð	
ñ 
ô 
ˆõ Ô-¨j¸.ÑIÔIˆØŒ×Ò˜mÑ,Ô,Ð,à ‰ˆˆ2ˆq�!Ø‰ˆˆ2åŒI�NŠN˜1˜b ! QÑ'Ô'×.Ò.­r¬zÑ:Ô:ˆÝŒI�NŠN˜1˜b ! QÑ'Ô'×.Ò.­r¬zÑ:Ô:ˆÝŒI�NŠN˜1˜b ! RÑ(Ô(×/Ò/µ´
Ñ;Ô;ˆà•b”g˜a‘j”jÑ ˆÝ”Ð,¨a°Ñ3Ô3°eÑ;ˆÝ”�v §
¢
°¸T 
Ñ BÔ BÑBÑCÔCˆØ˜Ÿ	š	 r°D˜	Ñ9Ô9Ñ9ˆØ˜Ñ#ˆÝŒIÐ'¨°Ñ2Ô2×9Ò9½"¼*ÑEÔEˆåØØ�q˜!�9Ø�CØ.åÔ# B¨Ñ+Ô+ÝÔ#Õ$:¸AÑ>Ô>ðð		
ñ 		
ô 		
ð 		
ð 		
ð 		
r&   c                 óˆ  — t          j        dg d¢dgt          ¬¦  «        } d\  }}}}d\  }}t          j                             ||||¦  «                             t          j        ¦  «        }t          j                             ||||¦  «                             t          j        ¦  «        }t          j                             ||||¦  «                             t          j        ¦  «        }	t          |||	¦  «        \  }
t          | |||	g|
gdt          j
        dd	¦  «        t          j
        t          d
¦  «        g¬¦  «         dS )z"FlexAttention with float16 inputs.rj   rm   rq   rr   rv   ry   Útest_flexattention_fp16r|   r}   rM   r~   N)r   r   r   r‚   rƒ   r„   r…   Úfloat16r	   r   r‡   rˆ   s              r$   Úexport_flexattention_fp16z'FlexAttention.export_flexattention_fp16�  s.  € õ ÔØØ"�?�?Ø�EÝ)ð	
ñ 
ô 
ˆð "‰ˆˆ2ˆq�!Ø‰ˆˆ2åŒI�NŠN˜1˜b ! QÑ'Ô'×.Ò.­r¬zÑ:Ô:ˆÝŒI�NŠN˜1˜b ! QÑ'Ô'×.Ò.­r¬zÑ:Ô:ˆÝŒI�NŠN˜1˜b ! RÑ(Ô(×/Ò/µ´
Ñ;Ô;ˆå& q¨!¨QÑ/Ô/‰ˆåØØ�q˜!�9Ø�CØ*åÔ# B¨Ñ+Ô+ÝÔ#Õ$:¸AÑ>Ô>ðð		
ñ 		
ô 		
ð 		
ð 		
ð 		
r&   c                 óˆ  — t          j        dg d¢dgt          ¬¦  «        } d\  }}}}d\  }}t          j                             ||||¦  «                             t          j        ¦  «        }t          j                             ||||¦  «                             t          j        ¦  «        }t          j                             ||||¦  «                             t          j        ¦  «        }	t          |||	¦  «        \  }
t          | |||	g|
gdt          j
        dd	¦  «        t          j
        t          d
¦  «        g¬¦  «         dS )z+FlexAttention with double precision inputs.rj   rm   rq   rr   rv   ry   Útest_flexattention_doubler|   r}   rM   r~   N)r   r   r   r‚   rƒ   r„   r…   Úfloat64r	   r   r‡   rˆ   s              r$   Úexport_flexattention_doublez)FlexAttention.export_flexattention_double«  s.  € õ ÔØØ"�?�?Ø�EÝ)ð	
ñ 
ô 
ˆð "‰ˆˆ2ˆq�!Ø‰ˆˆ2åŒI�NŠN˜1˜b ! QÑ'Ô'×.Ò.­r¬zÑ:Ô:ˆÝŒI�NŠN˜1˜b ! QÑ'Ô'×.Ò.­r¬zÑ:Ô:ˆÝŒI�NŠN˜1˜b ! RÑ(Ô(×/Ò/µ´
Ñ;Ô;ˆå& q¨!¨QÑ/Ô/‰ˆåØØ�q˜!�9Ø�CØ,åÔ# B¨Ñ+Ô+ÝÔ#Õ$:¸AÑ>Ô>ðð		
ñ 		
ô 		
ð 		
ð 		
ð 		
r&   c                 ó:  — t          t          j        ¦  «        } t          j        dg d¢dgt
          ¬¦  «        }t          j        d| ¦  «        }|j                             |¦  «         d\  }}}}d\  }}t          j
                             ||||¦  «                             t          j        ¦  «        }	t          j
                             ||||¦  «                             t          j        ¦  «        }
t          j
                             ||||¦  «                             t          j        ¦  «        }dt          j        |¦  «        z  }t          j        d	|	|
¦  «        |z  }t          j        |¦  «                             d
d
|d
¦  «        }t          j        |¦  «                             d
d
d
|¦  «        }||k    }t          j        ||t          j         ¦  «        }t          j        ||                     dd¬¦  «        z
  ¦  «        }||                     dd¬¦  «        z  }t          j        d||¦  «                             t          j        ¦  «        }t/          ||	|
|g|gdt          j        dd¦  «        t          j        t
          d
¦  «        g¬¦  «         dS )zOFlexAttention with causal masking score_mod (Qwen-3, Gemma-3, Llama-3 pattern).rj   rm   rq   rr   r›   ©rM   rN   rP   rw   ©rP   rw   rž   rŸ   rM   rQ   Tr    r¢   Útest_flexattention_causal_maskr|   r}   r~   N)rW   r   r¤   r   r   r   r¥   r¦   r§   r‚   rƒ   r„   r…   r†   r¨   r©   ÚarangeÚreshapeÚwhereÚinfrª   r«   r¬   r   r‡   )r­   r‰   r®   r   rŠ   r   r‹   r   rŒ   rn   ro   rp   r+   r   rD   rH   rJ   r)   rq   s                      r$   Ú export_flexattention_causal_maskz.FlexAttention.export_flexattention_causal_maskÉ  sD  € õ <½KÔ<MÑNÔNˆåÔØØ"�?�?Ø�EÝ)ð	
ñ 
ô 
ˆõ  Ô.¨{¸OÑLÔLˆØŒ×Ò˜nÑ-Ô-Ð-à ‰ˆˆ2ˆq�!Ø‰ˆˆ2åŒI�NŠN˜1˜b ! QÑ'Ô'×.Ò.­r¬zÑ:Ô:ˆÝŒI�NŠN˜1˜b ! QÑ'Ô'×.Ò.­r¬zÑ:Ô:ˆÝŒI�NŠN˜1˜b ! RÑ(Ô(×/Ò/µ´
Ñ;Ô;ˆð •b”g˜a‘j”jÑ ˆÝ”Ð,¨a°Ñ3Ô3°eÑ;ˆå”	˜!‘”×$Ò$ Q¨¨1¨aÑ0Ô0ˆÝ”	˜!‘”×$Ò$ Q¨¨1¨aÑ0Ô0ˆØ˜Š~ˆÝ”˜$ ­¬¨Ñ0Ô0ˆÝ”�v §
¢
°¸T 
Ñ BÔ BÑBÑCÔCˆØ˜Ÿ	š	 r°D˜	Ñ9Ô9Ñ9ˆÝŒIÐ'¨°Ñ2Ô2×9Ò9½"¼*ÑEÔEˆåØØ�q˜!�9Ø�CØ1åÔ# B¨Ñ+Ô+ÝÔ#Õ$:¸AÑ>Ô>ðð		
ñ 		
ô 		
ð 		
ð 		
ð 		
r&   c                 ó~  — d} t          | t          j        ¦  «        }t          j        dg d¢dgt
          ¬¦  «        }t          j        d|¦  «        }|j                             |¦  «         d\  }}}}d\  }}	t          j
                             ||||¦  «                             t          j        ¦  «        }
t          j
                             ||||¦  «                             t          j        ¦  «        }t          j
                             ||||	¦  «                             t          j        ¦  «        }d	t          j        |¦  «        z  }t          j        d
|
|¦  «        |z  }t          j        || z  ¦  «        | z  }t          j        ||                     dd¬¦  «        z
  ¦  «        }||                     dd¬¦  «        z  }t          j        d||¦  «                             t          j        ¦  «        }t)          ||
||g|gdt          j        dd¦  «        t          j        t
          d¦  «        g¬¦  «         dS )z<FlexAttention with soft capping score_mod (Gemma-2 pattern).g      4@rj   rm   rq   rr   r›   r¿   rÀ   rž   rŸ   rQ   Tr    r¢   Útest_flexattention_soft_capr|   r}   rM   r~   N)r`   r   r¤   r   r   r   r¥   r¦   r§   r‚   rƒ   r„   r…   r†   r¨   r©   Útanhrª   r«   r¬   r   r‡   )rX   r­   r‰   r®   r   rŠ   r   r‹   r   rŒ   rn   ro   rp   r+   r   r)   rq   s                    r$   Úexport_flexattention_soft_capz+FlexAttention.export_flexattention_soft_capõ  s  € ð ˆ	Ý8¸ÅKÔDUÑVÔVˆåÔØØ"�?�?Ø�EÝ)ð	
ñ 
ô 
ˆõ  Ô.¨{¸OÑLÔLˆØŒ×Ò˜nÑ-Ô-Ð-à ‰ˆˆ2ˆq�!Ø‰ˆˆ2åŒI�NŠN˜1˜b ! QÑ'Ô'×.Ò.­r¬zÑ:Ô:ˆÝŒI�NŠN˜1˜b ! QÑ'Ô'×.Ò.­r¬zÑ:Ô:ˆÝŒI�NŠN˜1˜b ! RÑ(Ô(×/Ò/µ´
Ñ;Ô;ˆð •b”g˜a‘j”jÑ ˆÝ”Ð,¨a°Ñ3Ô3°eÑ;ˆÝ”˜ )Ñ+Ñ,Ô,¨yÑ8ˆÝ”�v §
¢
°¸T 
Ñ BÔ BÑBÑCÔCˆØ˜Ÿ	š	 r°D˜	Ñ9Ô9Ñ9ˆÝŒIÐ'¨°Ñ2Ô2×9Ò9½"¼*ÑEÔEˆåØØ�q˜!�9Ø�CØ.åÔ# B¨Ñ+Ô+ÝÔ#Õ$:¸AÑ>Ô>ðð		
ñ 		
ô 		
ð 		
ð 		
ð 		
r&   c                 ó2  — t          t          j        ¦  «        } t          j        dg d¢dgt
          ¬¦  «        }t          j        d| ¦  «        }|j                             |¦  «         d\  }}}}d\  }}t          j
                             ||||¦  «                             t          j        ¦  «        }	t          j
                             ||||¦  «                             t          j        ¦  «        }
t          j
                             ||||¦  «                             t          j        ¦  «        }dt          j        |¦  «        z  }t          j        d	|	|
¦  «        |z  }t          j        |¦  «                             d
d¦  «        }t          j        |¦  «                             dd
¦  «        }||z
                       t          j        ¦  «        }||z   }t          j        ||                     d
d¬¦  «        z
  ¦  «        }||                     d
d¬¦  «        z  }t          j        d||¦  «                             t          j        ¦  «        }t+          ||	|
|g|gdt          j        dd¦  «        t          j        t
          d¦  «        g¬¦  «         dS )z6FlexAttention with relative positional bias score_mod.rj   rm   rq   rr   r›   r¿   rÀ   rž   rŸ   rQ   rM   Tr    r¢   Ú&test_flexattention_relative_positionalr|   r}   r~   N)rh   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Œ   rn   ro   rp   r+   r   rD   rH   rc   r)   rq   s                      r$   Ú(export_flexattention_relative_positionalz6FlexAttention.export_flexattention_relative_positional  s@  € õ DÅKÔDUÑVÔVˆåÔØØ"�?�?Ø�EÝ)ð	
ñ 
ô 
ˆõ  Ô.¨{¸OÑLÔLˆØŒ×Ò˜nÑ-Ô-Ð-à ‰ˆˆ2ˆq�!Ø‰ˆˆ2åŒI�NŠN˜1˜b ! QÑ'Ô'×.Ò.­r¬zÑ:Ô:ˆÝŒI�NŠN˜1˜b ! QÑ'Ô'×.Ò.­r¬zÑ:Ô:ˆÝŒI�NŠN˜1˜b ! RÑ(Ô(×/Ò/µ´
Ñ;Ô;ˆð •b”g˜a‘j”jÑ ˆÝ”Ð,¨a°Ñ3Ô3°eÑ;ˆÝ”	˜!‘”×$Ò$ R¨Ñ+Ô+ˆÝ”	˜!‘”×$Ò$ Q¨Ñ+Ô+ˆØ˜5‘=×(Ò(­¬Ñ4Ô4ˆØ˜'Ñ!ˆÝ”�v §
¢
°¸T 
Ñ BÔ BÑBÑCÔCˆØ˜Ÿ	š	 r°D˜	Ñ9Ô9Ñ9ˆÝŒIÐ'¨°Ñ2Ô2×9Ò9½"¼*ÑEÔEˆåØØ�q˜!�9Ø�CØ9åÔ# B¨Ñ+Ô+ÝÔ#Õ$:¸AÑ>Ô>ðð		
ñ 		
ô 		
ð 		
ð 		
ð 		
r&   N)r   rk   )Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr�   r�   r”   r˜   r¯   rµ   r¹   r½   rÆ   rÊ   rÍ   © r&   r$   rj   rj   Â   sv  € € € € € Øð
ð 
ð 
ñ „\ð
ð: ð
ð 
ð 
ñ „\ð
ð> ð
ð 
ð 
ñ „\ð
ð8 ð
ð 
ð 
ñ „\ð
ð: ð&
ð &
ð &
ñ „\ð&
ðP ð%
ð %
ð %
ñ „\ð%
ðN ð
ð 
ð 
ñ „\ð
ð: ð
ð 
ð 
ñ „\ð
ð: ð)
ð )
ð )
ñ „\ð)
ðV ð&
ð &
ð &
ñ „\ð&
ðP ð(
ð (
ð (
ñ „\ð(
ð (
ð (
r&   rj   )r
   r   r   r   r   r   )r'   r   r   r   r   r   )r   r   r   r   )rX   r   r   r   r   r   )Ú
__future__r   Únumpyr‚   Úonnxr   r   Úonnx.backend.test.case.baser   Úonnx.backend.test.case.noder   Ú	onnx.defsr   Ú3onnx.reference.ops.aionnx_preview.op_flex_attentionr	   r¤   r%   r2   rW   r`   rh   rj   rÒ   r&   r$   ú<module>rÚ      s€  ðð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð à €€€Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø .Ð .Ð .Ð .Ð .Ð .Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ðð ð ð ð ð ð #.Ô"3ðð ð ð ð ð2 #.Ô"3ðð ð ð ð ð0 #.Ô"3ð.ð .ð .ð .ð .ðf #.Ô"3ðð ð ð ð ðB #.Ô"3ð.ð .ð .ð .ð .ðbE
ð E
ð E
ð E
ð E
�Dñ E
ô E
ð E
ð E
ð E
r&   