§
    kŠtj0 ã                   ó®   — d dl Z d dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
mZmZ d dlmZ  e j        e¦  «        Z G d„ de¦  «        Z G d„ d	e¦  «        ZdS )
é    N)ÚFusionAttention)ÚFusion)ÚFunctionProtoÚ	NodeProtoÚTensorProtoÚhelperÚnumpy_helper)Ú	OnnxModelc                   óš   ‡ — e Zd ZdZdededefˆ fd„Z	 	 	 	 	 	 	 dded	ed
ededededededededede	dz  dedz  fd„Z
d„ Zd„ Zd„ Zˆ xZS )ÚFusionRotaryAttentionze
    Fuse Attention subgraph with rotary positional embeddings into one MultiHeadAttention node.
    ÚmodelÚhidden_sizeÚ	num_headsc                 óX   •— t          ¦   «                              |||dg d¢¬¦  «         d S )NT)ÚSimplifiedLayerNormalizationÚ SkipSimplifiedLayerNormalizationÚLayerNormalizationÚSkipLayerNormalizationÚAdd)Úuse_multi_head_attentionÚsearch_op_types)ÚsuperÚ__init__)Úselfr   r   r   Ú	__class__s       €ún/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/onnxruntime/transformers/fusion_rotary_attention.pyr   zFusionRotaryAttention.__init__   sK   ø€ õ 	‰Œ×ÒØØØØ%)ðð ð ð 	ñ 	
ô 	
ð 	
ð 	
ð 	
ó    Ú NÚinputÚoutputÚq_rotaryÚk_rotaryÚv_matmulÚ	attn_maskÚadd_qkÚpast_kÚpast_vÚ	present_kÚ	present_vÚscaleÚreturnc                 ó6  — | j         dk    sJ ‚| j        dk    r?| j        | j         z  dk    r,t                               d| j        › d| j         › �¦  «         d S | j                             d¦  «        }|j        d         |j        d         |j        d         d||||	g}|g}|
r|r|                     |
|g¦  «         t          j	        d|||¬¦  «        }d|_
        |j                             t          j        d| j         ¦  «        g¦  «         |�.|j                             t          j        d	|¦  «        g¦  «         | j        �@|j                             t          j        d
t          | j        ¦  «        ¦  «        g¦  «         |                      d¦  «         |S )Nr   z)fuse_rotary_attention: input hidden size z# is not a multiple of num of heads ÚMultiHeadAttentionr   ©ÚinputsÚoutputsÚnameúcom.microsoftr   r*   Úmask_filter_value)r   r   ÚloggerÚdebugr   Úcreate_node_namer    Úextendr   Ú	make_nodeÚdomainÚ	attributeÚmake_attributer3   ÚfloatÚincrease_counter)r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   Úmha_node_nameÚ
mha_inputsÚmha_outputsÚmha_nodes                    r   Úcreate_mha_nodez%FusionRotaryAttention.create_mha_node)   sÔ  € ð Œ~ Ò!Ð!Ð!Ð!àÔ˜aÒÐ TÔ%5¸¼Ñ%FÈ1Ò$LÐ$LÝ�LŠLð B¸DÔ<Lð  Bð  BÐquÔqð  Bð  Bñô ð ð �4àœ
×3Ò3Ð4HÑIÔIˆàŒO˜AÔØŒO˜AÔØŒO˜AÔØØØØØð	
ˆ
ð �hˆØð 	7˜ð 	7Ø×Ò 	¨9Ð5Ñ6Ô6Ð6åÔ#Ø ØØØð	
ñ 
ô 
ˆð *ˆŒØÔ×!Ò!¥6Ô#8¸ÀdÄnÑ#UÔ#UÐ"VÑWÔWÐWØÐØÔ×%Ò%¥vÔ'<¸WÀeÑ'LÔ'LÐ&MÑNÔNÐNØÔ!Ð-ØÔ×%Ò%¥vÔ'<Ð=PÕRWÐX\ÔXnÑRoÔRoÑ'pÔ'pÐ&qÑrÔrÐrà×ÒÐ2Ñ3Ô3Ð3Øˆr   c	                 ór
  — | j                              |dgdg¦  «        }	| j                              |dgdg¦  «        }
|	�|
€dS |	d         |
d         }}| j                              |g d¢g d¢¦  «        }| j                              |g d¢g d¢¦  «        }| j                              |g d¢g d¢¦  «        }| j                              |g d¢g d¢¦  «        }|�|�|�|€dS |\  }}}|\  }}}|j        d         |k    s|j        d         |k    rdS |d         j        |j        k    s|d         j        |j        k    rdS | j                              |dgdg¦  «        }| j                              |dgdg¦  «        }|�|€dS |d         |d         }}| j                              |g d	¢g d
¢¦  «        }| j                              |g d¢g d¢¦  «        }| j                              |g d¢g d¢¦  «        }| j                              |g d¢g d¢¦  «        }|�|�|�|€dS |d         j        |j        k    sB|d         j        |j        k    s,|d         j        |j        k    s|d         j        |j        k    rdS | j                              |dgdg¦  «        }|€dS |d         }| j                              |g d	¢g d
¢¦  «        } | j                              |g d¢g d¢¦  «        }!| �|!€dS | d         j        |j        k    s|!d         j        |j        k    rdS | j                              |dgdg¦  «        }"|"€dS |"d         }#| j                              |#g d	¢g d
¢¦  «        }$| j                              |#g d¢g d¢¦  «        }%|$�|%€dS |$d         j        |j        k    s|%d         j        |j        k    rdS |$d         }&| d         }'|d         }(|j        d         })|&j        d         |)k    s"|'j        d         |)k    s|(j        d         |)k    rdS | j                              |g d¢g d¢¦  «        }*| j                              |g d¢g d¢¦  «        }+|*�|*\  }},}-n|+�|+\  }}},}-ndS |-j        d         dvrdS | j                              |,g d¢g d¢¦  «        }.| j                              |-g d¢g d¢¦  «        }/| j                              |-dgdg¦  «        }0|.�|/�|0€dS |.d         j        |/d         j        k    s|.d         j        |/d         j        k    rdS |/d         j        d         |0d         j        d         k    rdS dS )NÚConcaté   Fr   ©Ú	UnsqueezeÚGatherÚShape©r   r   r   ©rE   r   r   )é   r   r   )rG   ÚMulrH   rI   ©r   r   r   r   )rG   r   rH   rI   ©rE   r   r   r   rL   )rL   r   r   r   ©rD   ÚSlicerQ   ©ÚCastrD   rQ   rQ   >   r$   Úattention_mask)rL   r   rE   r   rG   T)r   Úmatch_parent_pathr   r1   r    )1r   Úreshape_qkv_2Úreshape_qkv_1Úreshape_q_2Úreshape_k_2Úreshape_v_2Úreshape_v_1r%   Ú
root_inputÚconcat_qkv_2_pathÚconcat_qkv_1_pathÚconcat_qkv_2Úconcat_qkv_1Úreshape_qkv_2_path_1Úreshape_qkv_2_path_2Úreshape_qkv_1_path_1Úreshape_qkv_1_path_2Ú_Úgather_1Úshape_1Úgather_2Úshape_2Úconcat_v_2_pathÚconcat_v_1_pathÚ
concat_v_2Ú
concat_v_1Úreshape_v_2_path_1Úreshape_v_2_path_2Úreshape_v_1_path_1Úreshape_v_1_path_2Úconcat_k_2_pathÚ
concat_k_2Úreshape_k_2_path_1Úreshape_k_2_path_2Úconcat_q_2_pathÚ
concat_q_2Úreshape_q_2_path_1Úreshape_q_2_path_2Úmul_qÚmul_kÚmul_vÚgather_1_outÚattn_mask_path_1Úattn_mask_path_2Ú
slice_qk_2Ú
slice_qk_1Úslice_qk_2_pathÚslice_qk_1_path_1Úslice_qk_1_path_2s1                                                    r   Ú&check_runtime_shape_paths_for_functionz<FusionRotaryAttention.check_runtime_shape_paths_for_functiona   s½  € ð !œJ×8Ò8¸ÈÈ
ÐUVÐTWÑXÔXÐØ œJ×8Ò8¸ÈÈ
ÐUVÐTWÑXÔXÐØÐ$Ð(9Ð(AØ�5Ø%6°qÔ%9Ð;LÈQÔ;O�lˆà#œz×;Ò;¸LÐJjÐJjÐJjÐluÐluÐluÑvÔvÐØ#œz×;Ò;¸LÐJjÐJjÐJjÐluÐluÐluÑvÔvÐØ#œz×;Ò;¸LÐJjÐJjÐJjÐluÐluÐluÑvÔvÐØ#œz×;Ò;¸LÐJjÐJjÐJjÐluÐluÐluÑvÔvÐà Ð(Ø#Ð+Ø#Ð+Ø#Ð+à�5à3Ñˆˆ8�WØ3Ñˆˆ8�Wð Œ=˜Ô˜zÒ)Ð)¨W¬]¸1Ô-=ÀÒ-KÐ-KØ�5ð   Ô"Ô'¨8¬=Ò8Ð8Ð<PÐQRÔ<SÔ<XÐ\dÔ\iÒ<iÐ<iØ�5ð œ*×6Ò6°{ÀXÀJÐQRÐPSÑTÔTˆØœ*×6Ò6°{ÀXÀJÐQRÐPSÑTÔTˆØÐ" oÐ&=Ø�5Ø!0°Ô!3°_ÀQÔ5G�Jˆ
à!œZ×9Ò9ØÐ?Ð?Ð?ÀÀÀñ
ô 
Ðð "œZ×9Ò9ØÐ?Ð?Ð?ÀÀÀñ
ô 
Ðð "œZ×9Ò9¸*ÐFfÐFfÐFfÐhqÐhqÐhqÑrÔrÐØ!œZ×9Ò9¸*ÐFfÐFfÐFfÐhqÐhqÐhqÑrÔrÐàÐ&Ø!Ð)Ø!Ð)Ø!Ð)à�5ð ˜qÔ!Ô&¨(¬-Ò7Ð7Ø! !Ô$Ô)¨X¬]Ò:Ð:Ø! !Ô$Ô)¨X¬]Ò:Ð:Ø! !Ô$Ô)¨X¬]Ò:Ð:à�5ð œ*×6Ò6°{ÀXÀJÐQRÐPSÑTÔTˆØÐ"Ø�5Ø$ QÔ'ˆ
à!œZ×9Ò9ØÐ?Ð?Ð?ÀÀÀñ
ô 
Ðð "œZ×9Ò9ØÐ?Ð?Ð?ÀÀÀñ
ô 
Ðð Ð%Ð);Ð)CØ�5ð ˜aÔ Ô%¨¬Ò6Ð6Ð:LÈQÔ:OÔ:TÐX`ÔXeÒ:eÐ:eØ�5ð œ*×6Ò6°{ÀXÀJÐQRÐPSÑTÔTˆØÐ"Ø�5Ø$ QÔ'ˆ
à!œZ×9Ò9ØÐ?Ð?Ð?ÀÀÀñ
ô 
Ðð "œZ×9Ò9¸*ÐFfÐFfÐFfÐhqÐhqÐhqÑrÔrÐØÐ%Ð);Ð)CØ�5ð ˜aÔ Ô%¨¬Ò6Ð6Ð:LÈQÔ:OÔ:TÐX`ÔXeÒ:eÐ:eØ�5ð # 1Ô%ˆØ" 1Ô%ˆØ" 1Ô%ˆØ” qÔ)ˆØŒ;�qŒ>˜\Ò)Ð)¨U¬[¸¬^¸|Ò-KÐ-KÈuÌ{Ð[\Ì~ÐamÒOmÐOmØ�5ð  œ:×7Ò7¸Ð@\Ð@\Ð@\Ð^gÐ^gÐ^gÑhÔhÐØœ:×7Ò7¸Ð@dÐ@dÐ@dÐfrÐfrÐfrÑsÔsÐØÐ'Ø(8Ñ%ˆAˆz˜:˜:ØÐ)Ø+;Ñ(ˆAˆq�*˜j˜jà�5àÔ˜AÔÐ&EÐEÐEØ�5àœ*×6Ò6ØÐ?Ð?Ð?ÀÀÀñ
ô 
ˆð !œJ×8Ò8ØÐ?Ð?Ð?ÀÀÀñ
ô 
Ðð !œJ×8Ò8¸ÀkÀ]ÐUVÐTWÑXÔXÐØÐ"Ð&7Ð&?ÐCTÐC\Ø�5ð ˜1ÔÔ"Ð&7¸Ô&:Ô&?Ò?Ð?À?ÐSTÔCUÔCZÐ^oÐpqÔ^rÔ^wÒCwÐCwØ�5ð ˜QÔÔ% aÔ(Ð,=¸aÔ,@Ô,FÀqÔ,IÒIÐIØ�5àˆtr   c                 óú  — | j                              |dgdg¦  «        }|€dS |d         }| j                              |g d¢g d¢¦  «        }| j                              |g d¢g d¢¦  «        }	|�|	€dS |\  }
}}|	\  }
}}|j        d         |k    s|j        d         |k    rdS | j                              |dgdg¦  «        }|€dS |d         }| j                              |g d¢g d¢¦  «        }| j                              |g d¢g d¢¦  «        }|�|€dS |d         j        |j        k    s|d         j        |j        k    rdS | j                              |dgdg¦  «        }|€dS |d         }| j                              |g d¢g d¢¦  «        }| j                              |g d¢g d¢¦  «        }|�|€dS |d         j        |j        k    s|d         j        |j        k    rdS | j                              |dgdg¦  «        }|€dS |d         }| j                              |g d¢g d¢¦  «        }| j                              |g d¢g d¢¦  «        }|�|€dS |d         j        |j        k    s|d         j        |j        k    rdS dS )	NrD   rE   Fr   rF   rJ   rK   T)r   rU   r   r1   )r   Úreshape_qkvÚ	reshape_qÚ	reshape_kÚ	reshape_vr\   Úconcat_qkv_pathÚ
concat_qkvÚreshape_qkv_path_1Úreshape_qkv_path_2re   rf   rg   rh   ri   Úconcat_v_pathÚconcat_vÚreshape_v_path_1Úreshape_v_path_2Úconcat_k_pathÚconcat_kÚreshape_k_path_1Úreshape_k_path_2Úconcat_q_pathÚconcat_qÚreshape_q_path_1Úreshape_q_path_2s                              r   Ú#check_runtime_shape_paths_for_nodesz9FusionRotaryAttention.check_runtime_shape_paths_for_nodesý   s8  € ð œ*×6Ò6°{ÀXÀJÐQRÐPSÑTÔTˆØÐ"Ø�5Ø$ QÔ'ˆ
à!œZ×9Ò9¸*ÐFfÐFfÐFfÐhqÐhqÐhqÑrÔrÐØ!œZ×9Ò9¸*ÐFfÐFfÐFfÐhqÐhqÐhqÑrÔrÐØÐ%Ð);Ð)CØ�5à1Ñˆˆ8�WØ1Ñˆˆ8�Wð Œ=˜Ô˜zÒ)Ð)¨W¬]¸1Ô-=ÀÒ-KÐ-KØ�5ð œ
×4Ò4°YÀÀ
ÈQÈCÑPÔPˆØÐ Ø�5Ø  Ô#ˆàœ:×7Ò7¸ÐBbÐBbÐBbÐdmÐdmÐdmÑnÔnÐØœ:×7Ò7¸ÐBbÐBbÐBbÐdmÐdmÐdmÑnÔnÐØÐ#Ð'7Ð'?Ø�5ð ˜AÔÔ# x¤}Ò4Ð4Ð8HÈÔ8KÔ8PÐT\ÔTaÒ8aÐ8aØ�5ð œ
×4Ò4°YÀÀ
ÈQÈCÑPÔPˆØÐ Ø�5Ø  Ô#ˆàœ:×7Ò7¸ÐBbÐBbÐBbÐdmÐdmÐdmÑnÔnÐØœ:×7Ò7¸ÐBbÐBbÐBbÐdmÐdmÐdmÑnÔnÐØÐ#Ð'7Ð'?Ø�5ð ˜AÔÔ# x¤}Ò4Ð4Ð8HÈÔ8KÔ8PÐT\ÔTaÒ8aÐ8aØ�5ð œ
×4Ò4°YÀÀ
ÈQÈCÑPÔPˆØÐ Ø�5Ø  Ô#ˆàœ:×7Ò7¸ÐBbÐBbÐBbÐdmÐdmÐdmÑnÔnÐØœ:×7Ò7¸ÐBbÐBbÐBbÐdmÐdmÐdmÑnÔnÐØÐ#Ð'7Ð'?Ø�5ð ˜AÔÔ# x¤}Ò4Ð4Ð8HÈÔ8KÔ8PÐT\ÔTaÒ8aÐ8aØ�5àˆtr   c                 óp  ‡ — |j         dvrd S d }‰ j                             |g d¢g d¢¦  «        }‰ j                             |g d¢g d¢¦  «        }‰ j                             |g d¢g d¢¦  «        }|�|\  }}	}}
}|}n5|�
|\  }}}}|}n)|�|\  }}}}}|}nt                               d¦  «         d S d\  }}}d }d }‰ j                             |g d	¢g d
¢¦  «        }‰ j                             |g d¢g d¢¦  «        }‰ j                             |g d¢g d¢¦  «        }‰ j                             |g d¢g d¢fg d¢g d¢fg d¢g d¢fg d¢g d¢fg d¢g d¢fg d¢g d¢fg d¢g d¢fg d¢g d¢fg d¢g d¢fg	d ¬¦  «        \  }}}‰ j                             |g d ¢g d!¢¦  «        }|�}|\  }}}}}}|}‰ j                             |d"d#gd$d%g¦  «        }|€t                               d&¦  «         d S |d$         j        d$         }|d'         j        d$         }|j        d$         }nÊ|�$|\  }}}}|}|j        d$         }|j        d$         }n¤|�|\  }}}|}|j        d$         }nŒ|�Et          |¦  «        d(k    r2|d$         d)d …         \  }}}}|}|j        d$         }|j        d$         }nE|�'|\  }}}}}|}|}|j        d$         }|j        d$         }nt                               d*¦  «         d S ‰ j                             |g d+¢g d,¢¦  «        }d-\  }} |�|\  }}}} nt                               d.¦  «         d S d/\  }!}"‰ j                             |g d0¢g d¢¦  «        }#‰ j                             |g d1¢g d¢¦  «        }$‰ j                             |g d2¢g d3¢¦  «        }%‰ j                             |g d4¢g d5¢¦  «        }&‰ j                             |g d6¢g d7¢¦  «        }'‰ j                             |g d8¢g d3¢¦  «        }(‰ j                             |g d9¢g d:¢¦  «        })|#�|#\  }}*}+|*j        d$         }!nÚ|$�|$\  }}}*}+|*j        d$         }!nÃ|%�'‰  	                    |%d$         j        d$         ¦  «        }"nš|&�'‰  	                    |&d$         j        d$         ¦  «        }"nq|'�|'d$         j        d$         }"n[|(�|(d$         j        d$         }"nE|)�'‰  	                    |)d$         j        d$         ¦  «        }"nt                               d;¦  «         d S d/\  },}-d }.d }/d }0‰ j                             | g d<¢g d
¢¦  «        }1‰ j                             | g d=¢g d¢¦  «        }2‰ j                             | g d>¢g d?¢¦  «        }3‰ j                             | g d@¢g d:¢fg dA¢g dB¢fg dC¢g dD¢fg dE¢g dF¢fg dG¢g dH¢fg dI¢g dJ¢fg dK¢g dL¢fg dI¢g dM¢fg dI¢g dN¢fg	d ¬¦  «        \  }}4}‰ j                             | g dO¢g dP¢¦  «        }5|1�…|1\  }6}}7}}8}9|1}.‰ j                             |7d"d#gd$d%g¦  «        }:|:€t                               dQ¦  «         d S |:d$         j        d$         },|:d'         j        d$         };|7j        d$         }-||;k    sJ ‚ná|2�|2\  }}8}}<}9|2}.|8j        d$         }-nÇ|3�&|3\  }}7}8}}<}9|3}.|7j        d$         },|7j        d$         }-nŸ|4�Vt          |4¦  «        d(k    rC|4d$         dRd …         \  }<}9|4d$         dSdT…         \  }7}8|4}.|7j        d$         },|7j        d$         }-nG|5�)|5\	  }}7}0}8}/}}<}}9|5}.|7j        d$         },|7j        d$         }-nt                               dU¦  «         d S d }=d }>d }?‰ j                             | g dV¢g d,¢¦  «        }@‰ j                             | g dW¢g d,¢¦  «        }A‰ j                             | g dX¢g dY¢¦  «        }B|@�
|@\  }C}}D}E|@}=n7|A�
|A\  }D}}F}E|A}=n+|B�|B\  }?}D}>}}F}}E|B}=nt                               dZ¦  «         d S |Ej        d$         |9j        d$         k    r8|9j        d$         |j        d$         k    rt                               d[¦  «         d S d\}G||k    rQ‰  
                    |	|
|C|6||||Ej        d$         ¦  «        st                               d]¦  «         d S |	j        d$         }Gn¿|||fv r¹‰                      ||F|<||Ej        d$         ¦  «        st                               d]¦  «         d S |j        d$         }G|>r|>j        d$         n|Ej        d$         |Dj        d$<   |/r|/j        d$         n|9j        d$         |8j        d$<   |?€|8j        d^z   |8j        d$<   ||k    r
|d_d …         }ˆ fd`„}H|?�rž|0�r›‰ j                             da¦  «        }I|Id^z   }Jt          j        da|0j        d$         g|Jg|I¬b¦  «        }K|Kj                             t          j        dcg dd¢¦  «        g¦  «         ‰ j                             da¦  «        }L|Ld^z   }Mt          j        da|?j        d$         g|Mg|L¬b¦  «        }N|Nj                             t          j        dcg dd¢¦  «        g¦  «          |H|<¦  «        }O|O€t                               de¦  «         d S ‰ j                             dfdg¬h¦  «        }Pt          j        df|Kj        d$         |Oj        d$         g|Pd^z   g|P¬b¦  «        }Q‰ j                             dfdi¬h¦  «        }Rt          j        df|Nj        d$         |Oj        d$         g|Rd^z   g|R¬b¦  «        }S|Q}8|S}D‰ j                             |O¦  «         ‰ j                             |K¦  «         ‰ j                             |N¦  «         ‰ j                             |Q¦  «         ‰ j                             |S¦  «         ‰ j        ‰ j        |Oj        <   ‰ j        ‰ j        |Kj        <   ‰ j        ‰ j        |Nj        <   ‰ j        ‰ j        |Qj        <   ‰ j        ‰ j        |Sj        <   ‰                      |Ej        d$         |G|D|8||!|"|,||-|¦  «        }T|T€t                               dj¦  «         d S ‰ j                             |T¦  «         ‰ j        ‰ j        |Tj        <   ‰ j                             |d_d …         ¦  «         ||k    r/‰ j                             |€
|d d'…         n	|d dR…         ¦  «         n*|d$         d'         g}U|D ]}V‰                      |V|U¦  «         Œ‰ j                             |¦  «         |.|1k    r$‰ j                             |.d dR…         ¦  «         �ns|.|2k    rb‰ j                             |.d$         ¦  «         ‰ j                             |.d%         ¦  «         ‰ j                             |.dk         ¦  «         �n|.|3k    r�‰ j                             |.d$         ¦  «         ‰ j                             |.d_         ¦  «         ‰ j                             |.dk         ¦  «         ‰ j                             |.dl         ¦  «         n„|.|5k    rA‰ j                             |.d$         ¦  «         ‰ j                             |.d_         ¦  «         n=|.|4k    r7|.d$         d'         |.d$         d)         g}U|.D ]}V‰                      |V|U¦  «         Œ|=|@k    r#‰ j                             |=d dR…         ¦  «         nF|=|Ak    r@‰ j                             |=d_         ¦  «         ‰ j                             |=d%         ¦  «         dm‰ _        d S )nN>   r   r   r   )ÚMatMulÚReshapeÚ	Transposerž   r�   ©rE   r   r   r   r   )r�   rž   rŸ   r�   rO   )Ú	AllReducer�   rž   rŸ   r�   z0fuse_rotary_attention: failed to match qkv nodes)r   r   r   )rž   rŸ   rD   rŸ   rž   r�   )rE   r   r   rE   r   r   )rD   rŸ   rž   r�   )rE   rE   r   r   )rŸ   rž   r�   rK   )rž   ÚExpandrG   rD   rŸ   rž   r�   )rE   r   r   r   rE   r   r   )rž   r¢   ÚWhereÚEqualrž   rD   rG   rH   rI   rD   rŸ   rž   r�   )rE   r   rE   r   r   r   r   r   r   r   rE   r   r   )rž   r¢   r£   r¤   rM   ÚConstantOfShaperI   rž   rD   rG   rH   rI   rD   rŸ   rž   r�   )rE   r   rE   r   rE   r   r   r   r   rE   r   r   r   rE   r   r   )rž   r¢   r£   r¥   rI   rž   rD   rG   rH   rI   rD   rŸ   rž   r�   )rE   r   rE   rE   r   r   r   é   r   r   r   rE   r   r   )rž   r¢   r£   rž   rD   rG   rH   rI   rD   rŸ   rž   r�   )rE   r   rE   rL   r   é   r   r   r   rE   r   r   )	rž   rD   rG   rH   rI   rD   rŸ   rž   r�   )	rE   rE   r   r   r   r   rE   r   r   )
rž   rD   rG   rM   rH   rI   rD   rŸ   rž   r�   )
rE   rE   rE   r   r   r   r   rE   r   r   )	rE   rE   rL   r   r   r   rE   r   r   )	rE   rE   r¦   r   r   r   rE   r   r   ©Úoutput_name_to_node)rD   rŸ   rž   r   r�   )rE   rE   r   r   rE   rQ   rG   r   rL   zDfuse_rotary_attention: failed to match past/present concat in v pathéÿÿÿÿé	   éüÿÿÿz-fuse_rotary_attention: failed to match v path)ÚSoftmaxr   ÚDivr�   rN   ©NNz/fuse_rotary_attention: failed to match qk nodes)r   r   rP   rR   )r   r£   ÚSubrS   r¢   rG   rG   )rE   r   rL   rE   r   r   r   )r£   r°   rS   r¢   rG   rG   )rE   rL   rE   r   r   r   )r¢   r   r£   r°   rS   r¢   rG   rG   )rE   r   r   rL   rE   r   r   r   )r¢   r£   r°   rS   r¢   rG   rG   )	r£   rS   r£   rS   r°   rS   r¢   rG   rG   )	rE   r   r   r   r   rE   r   r   r   z;fuse_rotary_attention: failed to match attention mask nodes)rž   rŸ   rD   rŸ   ÚRotaryEmbeddingr�   )rŸ   r±   rŸ   rž   r�   )rŸ   rD   r±   rŸ   rž   r�   )rE   r   rE   r   r   r   )	rŸ   rž   r¢   rG   rD   r±   rŸ   rž   r�   )rŸ   rž   r¢   r£   r¤   rž   rD   rG   rH   rI   rD   r±   rŸ   rž   r�   )rE   r   r   rE   r   r   r   r   r   r   r   rE   r   r   r   )rŸ   rž   r¢   r£   r¤   rM   r¥   rI   rž   rD   rG   rH   rI   rD   r±   rŸ   rž   r�   )rE   r   r   rE   r   rE   r   r   r   r   rE   r   r   r   rE   r   r   r   )rŸ   rž   r¢   r£   r¥   rI   rž   rD   rG   rH   rI   rD   r±   rŸ   rž   r�   )rE   r   r   rE   rE   r   r   r   r¦   r   r   r   rE   r   r   r   )rŸ   rž   r¢   r£   rž   rD   rG   rH   rI   rD   r±   rŸ   rž   r�   )rE   r   r   rE   rL   r   r§   r   r   r   rE   r   r   r   )rŸ   rž   rD   rG   rH   rI   rD   r±   rŸ   rž   r�   )rE   r   rE   r   r   r   r   rE   r   r   r   )rŸ   rž   rD   rG   rM   rH   rI   rD   r±   rŸ   rž   r�   )rE   r   rE   rE   r   r   r   r   rE   r   r   r   )rE   r   rE   rL   r   r   r   rE   r   r   r   )rE   r   rE   r¦   r   r   r   rE   r   r   r   )	rŸ   rD   rD   r±   rQ   rŸ   rž   r   r�   )	rE   r   rE   r   r   r   r   r   rE   zDfuse_rotary_attention: failed to match past/present concat in k pathéþÿÿÿéûÿÿÿéýÿÿÿz.fuse_rotary_attention: failed to match k nodes)rž   rŸ   r±   r�   )r±   rŸ   rž   r�   )rD   r±   rQ   rŸ   rž   r   r�   )r   r   r   r   r   r   rE   z.fuse_rotary_attention: failed to match q nodeszKfuse_rotary_attention: failed to find the same root_input for q, k, v pathsr   z;fuse_rotary_attention: failed to verify runtime shape pathsÚ	_output_0rE   c                 ó0  •— ‰
j                              | dd¦  «        }|€t                               d¦  «         dS ‰
j                              |j        d         ¦  «        }‰
j                              |j        d         ¦  «        }|�|€t                               d¦  «         dS |d         }|d         }||z  }‰
j                              d	d
¬¦  «        }‰
j                              |¦  «        €&‰
                     |t          j
        dg|gd¬¦  «         ‰
j                              dd¬¦  «        }t          j        d|j        d         |j        d         |g|dz   g|¬¦  «        }	|	j                             t          j        dd¦  «        g¦  «         |	S )zþDetect num_heads and hidden_size for ONNX model from phi-2
            Args:
                reshape_q (NodeProto): reshape node for q
            Returns:
                hidden_size_concat_node(NodeProto): Concat node to be used by reshape
            rD   rE   NzEfuse_rotary_attention: failed to trace the concat node from reshape_qrL   r¦   zMfuse_rotary_attention: failed to get constant nodes of num_heads or head_sizer   ÚInitializerr   ©Úname_prefixF)r1   Ú	data_typeÚdimsÚvalsÚrawÚhidden_size_concatÚoutput_0r.   Úaxis)r   Úmatch_parentr4   r5   Úget_constant_valuer   r6   Úget_initializerÚadd_initializerr   ÚINT64r   r8   r:   r7   r;   )rˆ   ÚconcatÚnum_head_constant_nodeÚhead_size_constant_nodeÚnum_head_valueÚhead_size_valuer   Úhidden_size_initilizerÚhidden_size_reshape_node_nameÚhidden_size_concat_noder   s             €r   Úcreate_hidden_size_concat_nodezBFusionRotaryAttention.fuse.<locals>.create_hidden_size_concat_node¦  s²  ø€ ð ”Z×,Ò,¨Y¸À!ÑDÔDˆFàˆ~Ý—’ÐdÑeÔeÐeØ�tð &*¤Z×%BÒ%BÀ6Ä<ÐPQÄ?Ñ%SÔ%SÐ"Ø&*¤j×&CÒ&CÀFÄLÐQRÄOÑ&TÔ&TÐ#à%Ð-Ð1HÐ1PÝ—’ÐlÑmÔmÐmØ�tà3°AÔ6ˆNØ5°aÔ8ˆOà(¨?Ñ:ˆKà%)¤Z×%@Ò%@ÀÐ\iÐ%@Ñ%jÔ%jÐ"ØŒz×)Ò)Ð*@ÑAÔAÐIØ×$Ò$Ø/Ý)Ô/Ø˜Ø%˜Øð %ñ ô ð ð -1¬J×,GÒ,GÈÐ^rÐ,GÑ,sÔ,sÐ)å&,Ô&6Øà”L ”OØ”L ”OØ*ðð
 7¸ÑCÐDØ2ð	'ñ 	'ô 	'Ð#ð $Ô-×4Ò4µfÔ6KÈFÐTUÑ6VÔ6VÐ5WÑXÔXÐXà*Ð*r   rŸ   r.   Úperm)r   rL   rE   r¦   z?fuse_rotary_attention: failed to create hidden_size_concat_noderž   Úconcat_k_halfr¸   Úconcat_q_halfzSfuse_rotary_attention: failed to create multi-head attention with rotary embeddingsr¦   r§   T)Úop_typer   rU   r4   r5   Úmatch_parent_paths_allr   r    ÚlenÚreshape_add_qkr…   r›   r1   r6   r   r8   r:   r7   r;   Únodes_to_addÚappendÚthis_graph_nameÚnode_name_to_graph_namerB   Únodes_to_removeÚ&add_nodes_to_remove_with_nodes_to_keepÚprune_graph)Wr   Únormalize_nodeÚinput_name_to_nodesr©   Ú	qkv_nodesÚqkv_nodes_1Úqkv_nodes_2Úqkv_nodes_3re   rV   rW   Ú
matmul_qkvr‡   r'   r)   Úpast_seq_lenÚv_nodesÚadd_vÚ	v_nodes_1Ú	v_nodes_2Ú	v_nodes_3Ú	v_nodes_4Ú	v_nodes_5rZ   r�   r[   Úmatmul_vr�   Útranspose_vrŠ   Úqk_nodesr%   Ú	matmul_qkr$   Ú
add_qk_strÚattn_mask_nodes_1Úattn_mask_nodes_2Úattn_mask_nodes_3Úattn_mask_nodes_4Úattn_mask_nodes_5Úattn_mask_nodes_6Úattn_mask_nodes_7Úslice_mask_1Úslice_mask_2r&   r(   Úk_nodesÚslice_krÐ   Ú	k_nodes_1Ú	k_nodes_2Ú	k_nodes_3Ú	k_nodes_4Ú	k_nodes_5rY   r”   Úrotary_kÚmatmul_kr“   Úshared_past_seq_lenr‰   Úq_nodesÚslice_qrÑ   Ú	q_nodes_1Ú	q_nodes_2Ú	q_nodes_3rX   Úrotary_qÚmatmul_qrˆ   Úroot_outputrÎ   Úk_transpose_node_nameÚk_tranpose_output_nameÚk_transpose_nodeÚq_transpose_node_nameÚq_tranpose_output_nameÚq_transpose_noderÍ   Úconcat_k_reshape_node_nameÚconcat_k_reshape_nodeÚconcat_q_reshape_node_nameÚconcat_q_reshape_nodeÚnew_nodeÚnodes_to_keepÚ	temp_pathsW   `                                                                                      r   ÚfusezFusionRotaryAttention.fuseF  sF  ø€ ØÔ!Ð)nÐnÐnØˆFð
 ˆ	Ø”j×2Ò2ØØCÐCÐCØˆOˆOñ
ô 
ˆð
 ”j×2Ò2ØØ8Ð8Ð8ØˆLˆLñ
ô 
ˆð
 ”j×2Ò2ØØEÐEÐEØˆOˆOñ
ô 
ˆð
 Ð"Ø=HÑ:ˆAˆ}˜a °
Ø#ˆIˆIØÐ$Ø,7Ñ)ˆAˆ{˜A˜zØ#ˆIˆIØÐ$Ø/:Ñ,ˆAˆq�+˜q *Ø#ˆIˆIå�LŠLÐKÑLÔLÐLØˆFð +5Ñ'ˆ�	˜<ØˆØˆØ”J×0Ò0ØØPÐPÐPØÐÐñ
ô 
ˆ	ð
 ”J×0Ò0ØØ8Ð8Ð8ØˆLˆLñ
ô 
ˆ	ð
 ”J×0Ò0ØØ.Ð.Ð.ØˆIˆIñ
ô 
ˆ	ð
 œ*×;Ò;Øð cÐbÐbØ)Ð)Ð)ðð
ð ð ð <Ð;Ð;ð!ð&ð ð ð$ EÐDÐDð'ð,ð ð ð  ?Ð>Ð>ð#ð(ð ð ð 9Ð8Ð8ðð$ vÐuÐuØ/Ð/Ð/ðð
ð ð ð 3Ð2Ð2ðð  vÐuÐuØ/Ð/Ð/ðð
 vÐuÐuØ/Ð/Ð/ððOkðX !%ð] <ñ o
ô o
‰ˆˆ9�að` ”J×0Ò0ØØ?Ð?Ð?ØˆOˆOñ
ô 
ˆ	ð
 Ð ØAJÑ>ˆK˜˜H a¨°hØˆGà œJ×8Ò8ØØ˜+Ð&Ø�A�ñô ˆMð
 Ð$Ý—’ÐcÑdÔdÐdØ�à" 1Ô%Ô+¨AÔ.ˆFØ(¨Ô,Ô2°1Ô5ˆLØ œ¨Ô*ˆIˆIØÐ"Ø9BÑ6ˆH�k 9¨hØˆGØ”^ AÔ&ˆFØ œ¨Ô*ˆIˆIØÐ"Ø/8Ñ,ˆK˜ HØˆGØ#Ô*¨1Ô-ˆIˆIØÐ"¥s¨9¡~¤~¸Ò':Ð':Ø9BÀ1¼ÀbÀcÀcÔ9JÑ6ˆH�k 9¨hØˆGØ”^ AÔ&ˆFØ œ¨Ô*ˆIˆIØÐ"Ø@IÑ=ˆH�k 9¨e°XØˆHØˆGØ”^ AÔ&ˆFØ œ¨Ô*ˆIˆIå�LŠLÐHÑIÔIÐIØˆFà”:×/Ò/ØØ/Ð/Ð/ØˆLˆLñ
ô 
ˆð
 'Ñˆ�	ØÐØ&.Ñ#ˆAˆv�q˜)˜)å�LŠLÐJÑKÔKÐKØˆFð !'Ñˆ	�:Ø œJ×8Ò8ØØ(Ð(Ð(ØˆIˆIñ
ô 
Ðð
 !œJ×8Ò8ØØ0Ð0Ð0ØˆLˆLñ
ô 
Ðð
 !œJ×8Ò8ØØOÐOÐOØ!Ð!Ð!ñ
ô 
Ðð
 !œJ×8Ò8ØØHÐHÐHØÐÐñ
ô 
Ðð
 !œJ×8Ò8ØØYÐYÐYØ$Ð$Ð$ñ
ô 
Ðð
 !œJ×8Ò8ØØRÐRÐRØ!Ð!Ð!ñ
ô 
Ðð
 !œJ×8Ò8ØØaÐaÐaØ'Ð'Ð'ñ
ô 
Ðð
 Ð(Ø,=Ñ)ˆAˆ|˜\Ø$Ô+¨AÔ.ˆIˆIØÐ*Ø/@Ñ,ˆAˆq�, Ø$Ô+¨AÔ.ˆIˆIØÐ*à×,Ò,Ð->¸qÔ-AÔ-HÈÔ-KÑLÔLˆJˆJØÐ*à×,Ò,Ð->¸qÔ-AÔ-HÈÔ-KÑLÔLˆJˆJØÐ*à*¨1Ô-Ô4°QÔ7ˆJˆJØÐ*à*¨1Ô-Ô4°QÔ7ˆJˆJØÐ*à×,Ò,Ð->¸qÔ-AÔ-HÈÔ-KÑLÔLˆJˆJå�LŠLÐVÑWÔWÐWØˆFð
 #Ñˆ�	ØˆØˆØˆØ”J×0Ò0ØØXÐXÐXØÐÐñ
ô 
ˆ	ð
 ”J×0Ò0ØØNÐNÐNØˆOˆOñ
ô 
ˆ	ð
 ”J×0Ò0ØØXÐXÐXØÐÐñ
ô 
ˆ	ð
 œ*×;Ò;Øð
ð 
ð 
ð 0Ð/Ð/ððð ð ð" BÐAÐAð%ð*ð ð ð( KÐJÐJð+ð0ð ð ð$ EÐDÐDð'ð,ð ð ð  ?Ð>Ð>ð#ð(ð ð ð 6Ð5Ð5ðð"ð ð ð 9Ð8Ð8ðð$ð ð ð 6Ð5Ð5ðð"ð ð ð 6Ð5Ð5ððgcðH !%ðM <ñ g
ô g
‰ˆˆ9�aðP ”J×0Ò0ØØrÐrÐrØ'Ð'Ð'ñ
ô 
ˆ	ð
 Ð Ø>GÑ;ˆK˜˜H a¨°8ØˆGà œJ×8Ò8ØØ˜+Ð&Ø�A�ñô ˆMð
 Ð$Ý—’ÐcÑdÔdÐdØ�à" 1Ô%Ô+¨AÔ.ˆFØ"/°Ô"3Ô"9¸!Ô"<ÐØ œ¨Ô*ˆIàÐ#6Ò6Ð6Ð6Ð6Ð6ØÐ"Ø2;Ñ/ˆAˆx˜˜I xØˆGØ œ¨Ô*ˆIˆIØÐ"Ø<EÑ9ˆAˆx˜ 1 i°ØˆGØ”^ AÔ&ˆFØ œ¨Ô*ˆIˆIØÐ"¥s¨9¡~¤~¸Ò':Ð':Ø"+¨A¤,¨r¨s¨sÔ"3ÑˆI�xØ!*¨1¤¨b°¨eÔ!4ÑˆH�hØˆGØ”^ AÔ&ˆFØ œ¨Ô*ˆIˆIØÐ"ØW`ÑTˆAˆx˜¨°'¸1¸iÈÈHØˆGØ”^ AÔ&ˆFØ œ¨Ô*ˆIˆIå�LŠLÐIÑJÔJÐJØˆFð
 ˆØˆØˆØ”J×0Ò0ØØAÐAÐAØˆLˆLñ
ô 
ˆ	ð
 ”J×0Ò0ØØAÐAÐAØˆLˆLñ
ô 
ˆ	ð
 ”J×0Ò0ØØ[Ð[Ð[Ø!Ð!Ð!ñ
ô 
ˆ	ð
 Ð Ø1:Ñ.ˆK˜˜H hØˆGˆGØÐ"Ø/8Ñ,ˆH�a˜ HØˆGˆGØÐ"ØJSÑGˆM˜8 W¨a°¸A¸xØˆGˆGå�LŠLÐIÑJÔJÐJØˆFàŒ>˜!Ô ¤¨qÔ 1Ò1Ð1°h´nÀQÔ6GÈ8Ì>ÐZ[ÔK\Ò6\Ð6\Ý�LŠLÐfÑgÔgÐgØˆFàˆØ˜Ò#Ð#Ø×>Ò>ØØØØØØØØ”˜qÔ!ñ	ô 	ð õ —’ÐZÑ[Ô[Ð[Ø�Ø'Ô.¨qÔ1ˆKˆKà˜;¨Ð4Ð4Ð4Ø×;Ò;ØØØØØ”˜qÔ!ñô ð õ —’ÐZÑ[Ô[Ð[Ø�Ø%Ô,¨QÔ/ˆKð
 6=Ð T ¤¨qÔ 1Ð 1À(Ä/ÐRSÔBTˆHŒN˜1ÑØ5<Ð T ¤¨qÔ 1Ð 1À(Ä/ÐRSÔBTˆHŒN˜1Ñð Ð$Ø%-¤]°[Ñ%@�” Ñ"à˜KÒ'Ð'Ø% a b bœM�	ð2	+ð 2	+ð 2	+ð 2	+ð 2	+ðj ñ =	\˜]ñ =	\à$(¤J×$?Ò$?ÀÑ$LÔ$LÐ!Ø%:¸[Ñ%HÐ"Ý%Ô/ØØ%Ô,¨QÔ/Ð0Ø/Ð0Ø*ð	 ñ  ô  Ðð Ô&×-Ò-­vÔ/DÀVÈ\È\È\Ñ/ZÔ/ZÐ.[Ñ\Ô\Ð\ð %)¤J×$?Ò$?ÀÑ$LÔ$LÐ!Ø%:¸[Ñ%HÐ"Ý%Ô/ØØ%Ô,¨QÔ/Ð0Ø/Ð0Ø*ð	 ñ  ô  Ðð Ô&×-Ò-­vÔ/DÀVÈ\È\È\Ñ/ZÔ/ZÐ.[Ñ\Ô\Ð\à&DÐ&DÀYÑ&OÔ&OÐ#Ø&Ð.Ý—’Ð^Ñ_Ô_Ð_Ø�ð *.¬×)DÒ)DÀYÐ\kÐ)DÑ)lÔ)lÐ&Ý$*Ô$4ØØ(Ô/°Ô2Ð4KÔ4RÐSTÔ4UÐVØ3°kÑAÐBØ/ð	%ñ %ô %Ð!ð *.¬×)DÒ)DÀYÐ\kÐ)DÑ)lÔ)lÐ&Ý$*Ô$4ØØ(Ô/°Ô2Ð4KÔ4RÐSTÔ4UÐVØ3°kÑAÐBØ/ð	%ñ %ô %Ð!ð -ˆHØ,ˆHàÔ×$Ò$Ð%<Ñ=Ô=Ð=ØÔ×$Ò$Ð%5Ñ6Ô6Ð6ØÔ×$Ò$Ð%5Ñ6Ô6Ð6ØÔ×$Ò$Ð%:Ñ;Ô;Ð;ØÔ×$Ò$Ð%:Ñ;Ô;Ð;àIMÔI]ˆDÔ(Ð)@Ô)EÑFØBFÔBVˆDÔ(Ð)9Ô)>Ñ?ØBFÔBVˆDÔ(Ð)9Ô)>Ñ?ØGKÔG[ˆDÔ(Ð)>Ô)CÑDØGKÔG[ˆDÔ(Ð)>Ô)CÑDà×'Ò'ØŒN˜1ÔØØØØØØØØØØñ
ô 
ˆð ÐÝ�LŠLÐnÑoÔoÐoØˆFàÔ× Ò  Ñ*Ô*Ð*Ø6:Ô6JˆÔ$ X¤]Ñ3àÔ×#Ò# I¨a¨b¨b¤MÑ2Ô2Ð2à�iÒÐØÔ ×'Ò'¸¸¨°°°¬¨È7ÐSVÐTVÐSVÌ<ÑXÔXÐXÐXà$ QœZ¨œ^Ð,ˆMØ$ð Vð V�	Ø×;Ò;¸IÀ}ÑUÔUÐUÐUàÔ×#Ò# HÑ-Ô-Ð-à�iÒÐØÔ ×'Ò'¨°°°¬Ñ5Ô5Ð5Ñ5Ø˜	Ò!Ð!ØÔ ×'Ò'¨°¬
Ñ3Ô3Ð3ØÔ ×'Ò'¨°¬
Ñ3Ô3Ð3ØÔ ×'Ò'¨°¬
Ñ3Ô3Ð3Ñ3Ø˜	Ò!Ð!ØÔ ×'Ò'¨°¬
Ñ3Ô3Ð3ØÔ ×'Ò'¨°¬
Ñ3Ô3Ð3ØÔ ×'Ò'¨°¬
Ñ3Ô3Ð3ØÔ ×'Ò'¨°¬
Ñ3Ô3Ð3Ð3Ø˜	Ò!Ð!ØÔ ×'Ò'¨°¬
Ñ3Ô3Ð3ØÔ ×'Ò'¨°¬
Ñ3Ô3Ð3Ð3Ø˜	Ò!Ð!Ø$ QœZ¨œ^¨W°Q¬Z¸¬^Ð<ˆMØ$ð Vð V�	Ø×;Ò;¸IÀ}ÑUÔUÐUÐUà�iÒÐØÔ ×'Ò'¨°°°¬Ñ5Ô5Ð5Ð5Ø˜	Ò!Ð!ØÔ ×'Ò'¨°¬
Ñ3Ô3Ð3ØÔ ×'Ò'¨°¬
Ñ3Ô3Ð3ØˆÔÐÐr   )r   r   r   r   r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   Úintr   Ústrr   r<   rB   r…   r›   r  Ú__classcell__©r   s   @r   r   r      sY  ø€ € € € € ðð ð
àð
ð ð
ð ð	
ð 
ð 
ð 
ð 
ð 
ð6 ØØØØØØ"ð6ð 6àð6ð ð6ð ð	6ð
 ð6ð ð6ð ð6ð ð6ð ð6ð ð6ð ð6ð ð6ð �t‰|ð6ð 
�TÑ	ð6ð 6ð 6ð 6ðpZð Zð ZðxGð Gð GðRK ð K ð K ð K ð K ð K ð K r   r   c            
       óh   ‡ — e Zd Zdefˆ fd„Zdedefd„Zdefd„Zde	d	e	d
e	de	de	f
d„Z
d„ Zd„ Zˆ xZS )ÚFusionRotaryEmbeddingsr   c                 ó†   •— d| _         t          ¦   «                              || j         | j         | j         dz   dg¦  «         d S )Nr±   z.1r   )Ú	base_namer   r   )r   r   r   s     €r   r   zFusionRotaryEmbeddings.__init__U  s@   ø€ Ø*ˆŒÝ‰Œ×Ò˜ ¤°´ÀÄÐRVÑAVÐX]Ð0^Ñ_Ô_Ð_Ð_Ð_r   Úrot_emb_nodeÚfunctionc                 óì  ‡— g g }}|j         D ]“}|j        dk    r†|j        g k    r{|j        d         |j        v rg|                     |¦  «         t          |j        ¦  «                             |j        d         ¦  «        }|                     |j        |         ¦  «         Œ”g }|D ]g}|j        d         j        }	| j	         
                    d¦  «        |	_        | j	                             |	¦  «         |                     |	j        ¦  «         Œht          ||d¬¦  «        D ]T\  Š}
t          t          ˆfd„| j	        j	        j        j         ¦  «        ¦  «        }|D ]}t!          j        |‰|
¦  «         ŒŒU|S )NÚConstantr   F)Ústrictc                 ó   •— ‰| j         v S ©N)r   )ÚentryÚextra_outputs    €r   ú<lambda>z?FusionRotaryEmbeddings.reassign_extra_outputs.<locals>.<lambda>o  s   ø€ ¸ÈÌÐ8S€ r   )ÚnoderÒ   r   r    r×   ÚlistÚindexr:   Útr   r6   r1   rÄ   ÚzipÚfilterÚgraphr
   Úreplace_node_input)r   r&  r'  Úextra_constantsÚextra_outputsÚfn_nodeÚoutput_indexÚextra_initializersÚextra_constantÚconstant_tensorprotoÚextra_initializerÚnodes_to_updateÚnode_to_updater.  s                @r   Úreassign_extra_outputsz-FusionRotaryEmbeddings.reassign_extra_outputs\  s¨  ø€ à)+¨R˜ˆØ”}ð 	Hð 	HˆGØŒ *Ò,Ð,°´À"Ò1DÐ1DÈÌÐXYÔIZÐ^fÔ^mÐImÐImØ×&Ò& wÑ/Ô/Ð/Ý# H¤OÑ4Ô4×:Ò:¸7¼>È!Ô;LÑMÔM�Ø×$Ò$ \Ô%8¸Ô%FÑGÔGÐGøð  ÐØ-ð 	Að 	AˆNØ#1Ô#;¸AÔ#>Ô#@Ð Ø(,¬
×(CÒ(CÀJÑ(OÔ(OÐ Ô%ØŒJ×&Ò&Ð';Ñ<Ô<Ð<Ø×%Ò%Ð&:Ô&?Ñ@Ô@Ð@Ð@õ 03°=ÐBTÐ]bÐ/cÑ/cÔ/cð 	^ð 	^Ñ+ˆLÐ+Ý"¥6Ð*SÐ*SÐ*SÐ*SÐUYÔU_ÔUeÔUkÔUpÑ#qÔ#qÑrÔrˆOØ"1ð ^ð ^�ÝÔ,¨^¸\ÐK\Ñ]Ô]Ð]Ð]ð^ð Ðr   r0  c                 óÄ  ‡‡— | j                              | j        ¦  «        }| j                              ‰ddgddg¦  «        }|�|\  }}nt                               d¦  «         d S |j        d         ‰j        d         g}t          t          ˆfd„| j         j         j
        j        ¦  «        ¦  «        }t          t          ˆfd„| j         j         j
        j        ¦  «        ¦  «        }d\  }	}
t          |¦  «        dk    �rÚt          |¦  «        dk    �rÆ| j                              |	¦  «        �€«| j                              |
¦  «        �€�t          j        |d         j        d         j        ¦  «                             ¦   «         }t          j        |d         j        d         j        ¦  «                             ¦   «         }t'          j        |	t*          j        t          |j        ¦  «        |                     ¦   «                              ¦   «         ¬	¦  «        }| j                              || j        ¦  «         t'          j        |
t*          j        t          |j        ¦  «        |                     ¦   «                              ¦   «         ¬	¦  «        }| j                              || j        ¦  «         | j                             |d         |d         g¦  «         |                     |	|
g¦  «         ‰j        }t          |¦  «        dk    r•t          t          ˆfd
„| j         j         j        ¦  «        ¦  «        }t          |¦  «        dk    sJ ‚|                      ‰|d         ¦  «        Št          t          ˆfd„|¦  «        ¦  «        }t          |¦  «        dk    sJ ‚t'          j         | j        |||d¬¦  «        }d|_!        | j         "                    |¦  «         |S )Nrž   r�   r   z.fuse_rotary_embeddings: failed to match MatMulrE   c                 ó<   •— | j         d         ‰j        d         k    S )Nr   rL   ©r    r   ©Úconstantr0  s    €r   r/  zOFusionRotaryEmbeddings.create_rotary_embeddings_from_function.<locals>.<lambda>‰  ó   ø€ °h´oÀaÔ6HÈDÌJÐWXÌMÒ6Y€ r   c                 ó<   •— | j         d         ‰j        d         k    S )Nr   r¦   rE  rF  s    €r   r/  zOFusionRotaryEmbeddings.create_rotary_embeddings_from_function.<locals>.<lambda>Š  rH  r   ©Ú	cos_cacheÚ	sin_cache©r1   rº   r»   r¼   c                 ó$   •— | j         ‰j        k    S r,  )r1   rÒ   )Úfnr0  s    €r   r/  zOFusionRotaryEmbeddings.create_rotary_embeddings_from_function.<locals>.<lambda>¬  s   ø€ ¨"¬'°T´\Ò*A€ r   c                 ó   •— | ‰vS r,  © )Úoutput_namer9  s    €r   r/  zOFusionRotaryEmbeddings.create_rotary_embeddings_from_function.<locals>.<lambda>¯  s   ø€ ÀÐTaÐAa€ r   ©r/   r0   r1   Úinterleavedr2   )#r   r6   r%  rU   r4   r5   r    r   r1  r5  r6  r0  rÔ   rÃ   r	   Úto_arrayr:   r3  Úsqueezer   Úmake_tensorr   ÚFLOATÚshapeÚflattenÚtolistrÄ   rØ   rÚ   r7   Ú	functionsrB  r8   r9   r×   )r   r0  Úrotary_emb_node_nameÚmatmul_pathÚreshape_nodeÚmatmul_nodeÚrotary_emb_inputsÚcos_cache_nodeÚsin_cache_nodeÚcos_cache_nameÚsin_cache_namerK  rL  Úcos_cache_tensorÚsin_cache_tensorÚrotary_emb_outputsÚfuncÚrotary_emb_noder9  s    `                @r   Ú&create_rotary_embeddings_from_functionz=FusionRotaryEmbeddings.create_rotary_embeddings_from_functionu  s­  øø€ Ø#œz×:Ò:¸4¼>ÑJÔJÐà”j×2Ò2ØØ˜Ð!Ø�ˆFñ
ô 
ˆð
 Ð"Ø(3Ñ%ˆL˜+˜+å�LŠLÐIÑJÔJÐJØˆFð Ô˜qÔ!ØŒJ�qŒMð
Ðõ �fÐ%YÐ%YÐ%YÐ%YÐ[_Ô[eÔ[kÔ[qÔ[vÑwÔwÑxÔxˆÝ�fÐ%YÐ%YÐ%YÐ%YÐ[_Ô[eÔ[kÔ[qÔ[vÑwÔwÑxÔxˆØ)AÑ&ˆ˜õ �ÑÔ 1Ò$Ñ$Ý�NÑ#Ô# qÒ(Ñ(Ø”
×*Ò*¨>Ñ:Ô:ÑBØ”
×*Ò*¨>Ñ:Ô:ÑBå$Ô-¨n¸QÔ.?Ô.IÈ!Ô.LÔ.NÑOÔO×WÒWÑYÔYˆIÝ$Ô-¨n¸QÔ.?Ô.IÈ!Ô.LÔ.NÑOÔO×WÒWÑYÔYˆIå%Ô1Ø#Ý%Ô+Ý˜)œ/Ñ*Ô*Ø×&Ò&Ñ(Ô(×/Ò/Ñ1Ô1ð	 ñ  ô  Ðð ŒJ×&Ò&Ð'7¸Ô9MÑNÔNÐNÝ%Ô1Ø#Ý%Ô+Ý˜)œ/Ñ*Ô*Ø×&Ò&Ñ(Ô(×/Ò/Ñ1Ô1ð	 ñ  ô  Ðð ŒJ×&Ò&Ð'7¸Ô9MÑNÔNÐNàÔ ×'Ò'¨¸Ô):¸NÈ1Ô<MÐ(NÑOÔOÐOà× Ò  .°.Ð!AÑBÔBÐBà!œ[ÐÝÐ!Ñ"Ô" QÒ&Ð&å�ÐAÐAÐAÐAÀ4Ä:ÔCSÔC]Ñ^Ô^Ñ_Ô_ˆDÝ�t‘9”9 ’>�>�>�>Ø ×7Ò7¸¸dÀ1¼gÑFÔFˆMÝ!%¥fÐ-aÐ-aÐ-aÐ-aÐcuÑ&vÔ&vÑ!wÔ!wÐÝÐ)Ñ*Ô*¨aÒ/Ð/Ð/Ð/å Ô*ØŒNØ$Ø&Ø%Øð
ñ 
ô 
ˆð "1ˆÔàÔ×#Ò# LÑ1Ô1Ð1àÐr   r\   Úposition_idsÚ	cos_sliceÚ	sin_slicer    c                 ó°  ‡‡— | j                              | j        ¦  «        }t          t	          ˆfd„| j         j         j        j        ¦  «        ¦  «        }t          t	          ˆfd„| j         j         j        j        ¦  «        ¦  «        }d\  }	}
t          |¦  «        dk    �r	t          |¦  «        dk    �rõ| j                              |	¦  «        �€Ú| j                              |
¦  «        �€¿t          j
        |d         j        d         j        ¦  «                             ¦   «         }t          j
        |d         j        d         j        ¦  «                             ¦   «         }|j        d         }|d d …d |dz  …f         }|d d …d |dz  …f         }t          j        |	t"          j        t          |j        ¦  «        |                     ¦   «                              ¦   «         ¬¦  «        }| j                              || j        ¦  «         t          j        |
t"          j        t          |j        ¦  «        |                     ¦   «                              ¦   «         ¬¦  «        }| j                              || j        ¦  «         | j                             |d         |d         g¦  «         t          j        | j        |||	|
g|g|d¬¦  «        }d	|_        |S )
Nc                 ó&   •— | j         d         ‰k    S ©Nr   ©r    )rG  rm  s    €r   r/  zLFusionRotaryEmbeddings.create_rotary_embeddings_from_nodes.<locals>.<lambda>Ê  ó   ø€ °h´oÀaÔ6HÈIÒ6U€ r   c                 ó&   •— | j         d         ‰k    S rq  rr  )rG  rn  s    €r   r/  zLFusionRotaryEmbeddings.create_rotary_embeddings_from_nodes.<locals>.<lambda>Ë  rs  r   rJ  rE   r   rL   rM  rS  r2   )r   r6   r%  r1  r5  r6  r0  rÔ   rÃ   r	   rU  r:   r3  rV  rY  r   rW  r   rX  rZ  r[  rÄ   rØ   rÚ   r7   r8   r9   )r   r\   rl  rm  rn  r    r]  rb  rc  rd  re  rK  rL  Ú	head_sizerf  rg  rj  s      ``            r   Ú#create_rotary_embeddings_from_nodesz:FusionRotaryEmbeddings.create_rotary_embeddings_from_nodes¿  s±  øø€ ð  $œz×:Ò:¸4¼>ÑJÔJÐõ �fÐ%UÐ%UÐ%UÐ%UÐW[ÔWaÔWgÔWmÔWrÑsÔsÑtÔtˆÝ�fÐ%UÐ%UÐ%UÐ%UÐW[ÔWaÔWgÔWmÔWrÑsÔsÑtÔtˆØ)AÑ&ˆ˜õ �ÑÔ 1Ò$Ñ$Ý�NÑ#Ô# qÒ(Ñ(Ø”
×*Ò*¨>Ñ:Ô:ÑBØ”
×*Ò*¨>Ñ:Ô:ÑBå$Ô-¨n¸QÔ.?Ô.IÈ!Ô.LÔ.NÑOÔO×WÒWÑYÔYˆIÝ$Ô-¨n¸QÔ.?Ô.IÈ!Ô.LÔ.NÑOÔO×WÒWÑYÔYˆIð "œ¨Ô*ˆIØ! ! ! !Ð%7¨	°Q©Ð%7Ð"7Ô8ˆIØ! ! ! !Ð%7¨	°Q©Ð%7Ð"7Ô8ˆIå%Ô1Ø#Ý%Ô+Ý˜)œ/Ñ*Ô*Ø×&Ò&Ñ(Ô(×/Ò/Ñ1Ô1ð	 ñ  ô  Ðð ŒJ×&Ò&Ð'7¸Ô9MÑNÔNÐNÝ%Ô1Ø#Ý%Ô+Ý˜)œ/Ñ*Ô*Ø×&Ò&Ñ(Ô(×/Ò/Ñ1Ô1ð	 ñ  ô  Ðð ŒJ×&Ò&Ð'7¸Ô9MÑNÔNÐNàÔ ×'Ò'¨¸Ô):¸NÈ1Ô<MÐ(NÑOÔOÐOå Ô*ØŒNØ ¨n¸nÐMØ�HØ%Øð
ñ 
ô 
ˆð "1ˆÔØÐr   c                 óš  — |d         }| j                              |dd¬¦  «        }|�5|j        dk    r*| j                              |dd¬¦  «        }|�|j        dk    °*|�|j        dk    r|j        d         }nt                               d¦  «         d	S |j        d         }| j                              |dd¬¦  «        }|�M|j        d
v rD|j        dk    rdnd}|j        |         }| j                              ||d¬¦  «        }|�	|j        d
v °D|�|j        d         n|}| j                              |¦  «        }	|	€p| j         j         j        j	        D ]<}
|
j        dk    r/||
j        v r&t          j        |
j        d         j        ¦  «        } nŒ=t                               d¦  «         d	S nt          j        |	¦  «        }|                     ¦   «         }d}|D ]ˆ}|j        dk    r{||d         k    ro| j                              |j        d         ¦  «        }|�t!          |¦  «        }n6| j                              |j        d         ¦  «        }|�t!          |¦  «        } nŒ‰d}d}| j                              |¦  «        �| j                              |¦  «        �|||fS d}t#          j        |t"          j        ¬¦  «                             dd¦  «        }||                     t"          j        ¦  «        z  }t#          j        |¦  «        |z  }t#          j        |¦  «        |z  }t          j        |                     t"          j        ¦  «        |¬¦  «        }| j                              || j        ¦  «         t          j        |                     t"          j        ¦  «        |¬¦  «        }| j                              || j        ¦  «         |||fS )a]  Generate cos/sin caches from on-the-fly RoPE computation (e.g. Qwen3).

        In on-the-fly RoPE, cos and sin are computed from inv_freq at runtime:
            freqs = inv_freq_expanded @ position_ids_expanded  # MatMul
            emb = concat(freqs, freqs)                         # Concat
            cos = emb.cos() * attention_scaling                # Cos, Mul
            sin = emb.sin() * attention_scaling                # Sin, Mul

        This method extracts inv_freq, computes cos/sin caches as initializers,
        and returns (cos_cache_name, sin_cache_name, position_ids_name).
        rª   rE   Nr¨   rS   r   rG   zFfuse_rotary_embeddings: failed to find position_ids in on-the-fly RoPE)NNN)rS   r¢   r£   rG   r£   r)  zIfuse_rotary_embeddings: failed to find inv_freq tensor in on-the-fly RoPEg      ð?rM   rK  rL  i   )Údtype)r1   )r   Ú
get_parentrÒ   r   r4   r5   r    rÃ   r6  r0  r	   rU  r:   r3  rZ  rÂ   r<   ÚnpÚarangeÚfloat32ÚreshapeÚastypeÚcosÚsinÚ
from_arrayrÄ   rØ   )r   Úcos_pathr`  Úpos_noderl  Úinv_freq_input_nameÚinv_freq_nodeÚ
parent_idxÚinv_freq_nameÚinv_freq_tensorÚ
graph_nodeÚinv_freq_dataÚinv_freq_1dÚscaling_valueÚ	path_nodeÚscaling_constrd  re  Úmax_seq_lenÚ	positionsÚfreqsÚcos_cache_dataÚsin_cache_datarf  rg  s                            r   Ú)create_cos_sin_cache_from_on_the_fly_ropez@FusionRotaryEmbeddings.create_cos_sin_cache_from_on_the_fly_rope÷  sê  € ð ˜r”lˆð ”:×(Ò(¨°aÈTÐ(ÑRÔRˆØÐ" xÔ'7¸6Ò'AÐ'AØ”z×,Ò,¨X°qÈdÐ,ÑSÔSˆHð Ð" xÔ'7¸6Ò'AÐ'AàÐ HÔ$4¸Ò$CÐ$CØ#œ>¨!Ô,ˆLˆLå�LŠLÐaÑbÔbÐbØ#Ð#ð
 *Ô/°Ô2ÐØœ
×-Ò-¨k¸1ÐRVÐ-ÑWÔWˆØÐ'¨MÔ,AÐEmÐ,mÐ,mØ+Ô3°wÒ>Ð>˜˜ÀAˆJØ"/Ô"5°jÔ"AÐØ œJ×1Ò1°-ÀÐaeÐ1ÑfÔfˆMð Ð'¨MÔ,AÐEmÐ,mÐ,mð
 4AÐ3L˜Ô,¨QÔ/Ð/ÐReˆØœ*×4Ò4°]ÑCÔCˆàÐ"à"œjÔ.Ô4Ô9ð (ð (�
ØÔ%¨Ò3Ð3¸ÈÔIZÐ8ZÐ8ZÝ$0Ô$9¸*Ô:NÈqÔ:QÔ:SÑ$TÔ$T�MØ�Eøå—’ÐhÑiÔiÐiØ'Ð'ð õ
 )Ô1°/ÑBÔBˆMà#×+Ò+Ñ-Ô-ˆð ˆØ!ð 
	ð 
	ˆIØÔ  EÒ)Ð)¨i¸8ÀA¼;Ò.FÐ.Fà $¤
× =Ò =¸i¼oÈaÔ>PÑ QÔ Q�Ø Ð,Ý$)¨-Ñ$8Ô$8�M�Mà$(¤J×$AÒ$AÀ)Ä/ÐRSÔBTÑ$UÔ$U�MØ$Ð0Ý(-¨mÑ(<Ô(<˜Ø�øà$ˆØ$ˆð ŒJ×&Ò& ~Ñ6Ô6ÐBØ”
×*Ò*¨>Ñ:Ô:ÐFà! >°<Ð?Ð?ð ˆÝ”I˜kµ´Ð<Ñ<Ô<×DÒDÀRÈÑKÔKˆ	Ø˜K×.Ò.­r¬zÑ:Ô:Ñ:ˆÝœ ™œ¨Ñ6ˆÝœ ™œ¨Ñ6ˆå'Ô2°>×3HÒ3HÍÌÑ3TÔ3TÐ[iÐjÑjÔjÐØŒ
×"Ò"Ð#3°TÔ5IÑJÔJÐJå'Ô2°>×3HÒ3HÍÌÑ3TÔ3TÐ[iÐjÑjÔjÐØŒ
×"Ò"Ð#3°TÔ5IÑJÔJÐJà˜~¨|Ð;Ð;r   c                 óŠ  ‡ ‡0— ‰ j         |j        vr|j        dk    rd S d Š0|j        dk    �rt          |j        ¦  «        dvs|j        d         dvrt                               d¦  «         d S ‰                      |¦  «        Š0‰0€t                               d¦  «         d S ‰ j                             |¦  «         t          t          ˆ0fd„‰ j        j        j        j        ¦  «        ¦  «        }t          |¦  «        dk    sJ ‚‰ j        j        j        j                             |d         ¦  «         �
nÀ‰ j                             |g d	¢g d
¢¦  «        }‰ j                             |g d¢g d
¢¦  «        }|p|}‰ j                             |g d¢g d¢¦  «        }‰ j                             |g d¢g d¢¦  «        }	‰ j                             |g d¢g d¢¦  «        }
‰ j                             |g d¢g d¢¦  «        }|p|	p|
p|}|�|€t                               d¦  «         d S ‰ j                             |g d¢g d¢¦  «        }‰ j                             |g d¢g d¢¦  «        }|p|}‰ j                             |g d¢g d¢¦  «        }‰ j                             |g d¢g d¢¦  «        }‰ j                             |g d¢g d¢¦  «        }‰ j                             |g d¢g d¢¦  «        }|p|p|p|}|�|€t                               d¦  «         d S |d         j        |d         j        k    sT|d         j        |d         j        k    s8|d         j        |d         j        k    s|d         j        |d         j        k    rt                               d ¦  «         d S ‰ j                             |d!d"gddg¦  «        }‰ j                             |d!d#gddg¦  «        }|p|}|€t                               d$¦  «         d S d%\  }}}‰ j                             |g d&¢g d'¢¦  «        }‰ j                             |g d(¢g d)¢¦  «        }‰ j                             |g d*¢g d+¢¦  «        }‰ j                             |g d,¢g d-¢¦  «        }‰ j                             |g d.¢g d/¢¦  «        }|€ ‰ j                             |g d0¢g d1¢¦  «        }|�|}|d2         j        d         }n�|�|}|d3         j        d         }nw|�)|}|d2         j        d         }|d4         j        d         }nL|�)|}|d3         j        d         }|d4         j        d         }n!|�|}nt                               d5¦  «         d S d6\  } }!‰ j                             |g d&¢g d7¢¦  «        }"‰ j                             |g d(¢g d8¢¦  «        }#‰ j                             |g d*¢g d9¢¦  «        }$‰ j                             |g d,¢g d:¢¦  «        }%‰ j                             |g d;¢g d<¢¦  «        }&|&€ ‰ j                             |g d=¢g d>¢¦  «        }&|"�|"} | d2         j        d         }!n�|#�|#} | d3         j        d         }!nw|$�)|$} | d2         j        d         }!| d4         j        d         }nL|%�)|%} | d3         j        d         }!| d4         j        d         }n!|&�|&} nt                               d?¦  «         d S ||k    o| |&k    }'d@\  }(})|'ru|d         }*| d         }+|*j        |+j        k    rt                               dA¦  «         d S ‰                      | ¦  «        \  }!}}|!€t                               dB¦  «         d S �n#|dCk    r˜‰ j                             |d4         dDgdg¦  «        },‰ j                             | d4         dDgdg¦  «        }-|,�|-�|,d         j        |-d         j        k    rt                               dE¦  «         d S |-d         j        d         }ng },g }-||k    r| |"k    s||k    r\| |$k    rV|dF         j        | dF         j        k    s|d         j        | d         j        k    rt                               dG¦  «         d S �n||k    r| |#k    s||k    rç| |%k    rá|d         j        | d         j        k    rt                               dH¦  «         d S ‰ j                             |d         dIdJgddg¦  «        }(‰ j                             |d         g dK¢g dL¢¦  «        })|(�>|)�<‰ j                             |(d         j        d         ¦  «        �|)d         j        d"k    rt                               dM¦  «         d S nt                               dN¦  «         ‰                      |d         j        d         ||!||j        d         ¦  «        Š0‰0€t                               d¦  «         d S ‰                      |g¦  «         ‰                      |d d…         ¦  «         ‰                      |d d…         ¦  «         ‰                      |d d…         ¦  «         ‰                      |d d…         ¦  «         ‰                      |d d…         ¦  «         |'r«t-          |¦  «        D ]E\  }.}/|/j        dOv r7|/|d         k    r+‰                      ˆ fdP„|d |.…         D ¦   «         ¦  «          nŒFt-          | ¦  «        D ]E\  }.}/|/j        dQv r7|/| d         k    r+‰                      ˆ fdR„| d |.…         D ¦   «         ¦  «          nŒFnË‰                      |¦  «         ‰                      | ¦  «         ‰                      |,d d…         ¦  «         ‰                      |-d d…         ¦  «         |(�Ft          ‰ j                             |(d         ¦  «        ¦  «        dk    r‰                      |(¦  «         |)�‰                      |)d d…         ¦  «         ‰                      ‰ j         ¦  «         ‰ j        ‰ j        ‰0j        <   ‰ j                             ‰0¦  «         dS‰ _        d S )TNr   >   r§   é   rE   >   ÚposÚpos_idÚpos_idsÚposition_idrl  zLfuse_rotary_embeddings: failed to verify inputs for RotaryEmbedding functionz=fuse_rotary_embeddings: failed to create RotaryEmbedding nodec                 ó0   •— | j         ‰j        d         k    S rq  )r1   r    )r0  rj  s    €r   r/  z-FusionRotaryEmbeddings.fuse.<locals>.<lambda>w  s   ø€  D¤I°Ô1GÈÔ1JÒ$J€ r   r   )rM   rD   ÚNegrQ   rŸ   r    )rM   rD   rœ  rQ   rQ   )	rM   rD   rœ  rQ   rG   r®   rH   rI   rŸ   )	rE   r   r   r   rE   r   r   r   r   )	rM   rD   rœ  rQ   rG   r®   rH   rI   rQ   )rM   rD   rœ  rQ   rG   rS   rS   r®   rH   rI   rŸ   )rE   r   r   r   rE   r   r   r   r   r   r   )
rM   rD   rœ  rQ   rG   rS   r®   rH   rI   rŸ   )
rE   r   r   r   rE   r   r   r   r   r   z9fuse_rotary_embeddings: failed to match x2 in rotate_half)rM   rD   rQ   rŸ   )rE   r   rE   r   )rM   rD   rQ   rQ   )rM   rD   rQ   rG   r®   rH   rI   rŸ   )rE   r   rE   rL   r   r   r   r   )rM   rD   rQ   rG   r®   rH   rI   rQ   )
rM   rD   rQ   rG   rS   rS   r®   rH   rI   rŸ   )
rE   r   rE   rL   r   r   r   r   r   r   )	rM   rD   rQ   rG   rS   r®   rH   rI   rŸ   )	rE   r   rE   rL   r   r   r   r   r   z9fuse_rotary_embeddings: failed to match x1 in rotate_halfrª   zCfuse_rotary_embeddings: failed to match common input in rotate_halfrM   rŸ   rQ   z8fuse_rotary_embeddings: failed to match x in rotate_half)Nr   r   )	rM   rG   rH   ÚSqueezer�  rQ   rG   rH   rI   )	rE   rE   r   r   r   r   rL   r   r   )rM   rG   rH   r�  r�  rQ   rG   r   )rE   rE   r   r   r   r   rL   r   )rM   rG   rH   rQ   rG   rH   rI   )rE   rE   r   r   rL   r   r   )rM   rG   rH   rQ   rG   r   )rE   rE   r   r   rL   r   )rM   rG   rM   ÚSinrD   rŸ   r�   )rE   rE   r   r   r   r   r   )rM   rG   rS   rM   rž  rD   rŸ   r�   )rE   rE   r   r   r   r   r   r   r¬   r´   rL   z>fuse_rotary_embeddings: failed to match sin path in apply_rope)Nr   )	r   rE   r   r   r   r   rL   r   r   )r   rE   r   r   r   r   rL   r   )r   rE   r   r   rL   r   r   )r   rE   r   r   rL   r   )rM   rG   rM   ÚCosrD   rŸ   r�   )r   rE   r   r   r   r   r   )rM   rG   rS   rM   rŸ  rD   rŸ   r�   )r   rE   r   r   r   r   r   r   z>fuse_rotary_embeddings: failed to match cos path in apply_roper¯   zJfuse_rotary_embeddings: sin and cos MatMul nodes differ in on-the-fly RoPEzKfuse_rotary_embeddings: failed to create cos/sin cache from on-the-fly RoPEr   rž   zGfuse_rotary_embeddings: failed to match position ids path in apply_roper²   zdfuse_rotary_embeddings: failed to match common Gather node and Shape node in sin cache and cos cachezRfuse_rotary_embeddings: failed to match common Add node in sin cache and cos cacherH   rI   )rH   rI   rŸ   rJ   zKfuse_rotary_embeddings: failed to match past_seq_len and curr_seq_len pathsz:fuse_rotary_embeddings: failed to match common cache paths)rM   rž  c                 ój   •— g | ]/}t          ‰j                             |¦  «        ¦  «        d k    ¯-|‘Œ0S ©rE   ©rÔ   r   Úget_children©Ú.0Únr   s     €r   ú
<listcomp>z/FusionRotaryEmbeddings.fuse.<locals>.<listcomp>æ  ó?   ø€ Ð1rÐ1rÐ1r¸ÍSÐQUÔQ[×QhÒQhÐijÑQkÔQkÑMlÔMlÐpqÒMqÐMq°!ÐMqÐMqÐMqr   )rM   rŸ  c                 ój   •— g | ]/}t          ‰j                             |¦  «        ¦  «        d k    ¯-|‘Œ0S r¡  r¢  r¤  s     €r   r§  z/FusionRotaryEmbeddings.fuse.<locals>.<listcomp>ê  r¨  r   T)r%  rÒ   rÔ   r   r4   r5   rk  rÚ   r×   r1  r5  r   r6  Ú
value_infoÚremoverU   r1   r”  Úfind_graph_inputrv  r    Úadd_nodes_to_removeÚ	enumerater£  r=   rØ   rÙ   rÖ   rÜ   )1r   r0  rÞ   r©   Úold_shape_inferÚrotate_half_x2_path_1_1Úrotate_half_x2_path_1_2Úrotate_half_x2_path_1Úrotate_half_x2_path_2_1Úrotate_half_x2_path_2_2Úrotate_half_x2_path_2_3Úrotate_half_x2_path_2_4Úrotate_half_x2_path_2Úrotate_half_x1_path_1_1Úrotate_half_x1_path_1_2Úrotate_half_x1_path_1Úrotate_half_x1_path_2_1Úrotate_half_x1_path_2_2Úrotate_half_x1_path_2_3Úrotate_half_x1_path_2_4Úrotate_half_x1_path_2Úx_path_1Úx_path_2Úx_pathÚsin_pathrL  rl  Ú
sin_path_1Ú
sin_path_2Ú
sin_path_3Ú
sin_path_4Ú
sin_path_5r‚  rK  Ú
cos_path_1Ú
cos_path_2Ú
cos_path_3Ú
cos_path_4Ú
cos_path_5Úon_the_fly_ropeÚpast_seq_len_pathÚcurr_seq_len_pathÚ
sin_matmulÚ
cos_matmulÚposition_ids_from_sin_pathÚposition_ids_from_cos_pathÚir�  rj  s1   `                                               @r   r  zFusionRotaryEmbeddings.fuseX  s  øø€ àŒ> ¤Ð-Ð-°$´,À%Ò2GÐ2GØˆFð ˆØŒ<˜5Ò Ñ å�4”:‰Œ fÐ,Ð,°´
¸1´ð Fð 1ð 1õ —’ÐkÑlÔlÐlØ�à"×IÒIÈ$ÑOÔOˆOØÐ&Ý—’Ð\Ñ]Ô]Ð]Ø�ð Ô ×'Ò'¨Ñ-Ô-Ð-õ #ÝÐJÐJÐJÐJÈDÌJÔL\ÔLbÔLmÑnÔnñô ˆOõ �Ñ'Ô'¨1Ò,Ð,Ð,Ð,ØŒJÔÔ"Ô-×4Ò4°_ÀQÔ5GÑHÔHÐHÑHð( '+¤j×&BÒ&BØØ>Ð>Ð>Ø��ñ'ô 'Ð#ð '+¤j×&BÒ&BØØ:Ð:Ð:Ø��ñ'ô 'Ð#ð %<Ð$VÐ?VÐ!à&*¤j×&BÒ&BØØeÐeÐeØ+Ð+Ð+ñ'ô 'Ð#ð '+¤j×&BÒ&BØØaÐaÐaØ+Ð+Ð+ñ'ô 'Ð#ð '+¤j×&BÒ&BØØuÐuÐuØ1Ð1Ð1ñ'ô 'Ð#ð '+¤j×&BÒ&BØØmÐmÐmØ.Ð.Ð.ñ'ô 'Ð#ð (ÐxÐ+BÐxÐF]ÐxÐaxð "ð %Ð,Ð0EÐ0MÝ—’ÐXÑYÔYÐYØ�à&*¤j×&BÒ&BØØ7Ð7Ð7Ø��ñ'ô 'Ð#ð '+¤j×&BÒ&BØØ3Ð3Ð3Ø��ñ'ô 'Ð#ð %<Ð$VÐ?VÐ!à&*¤j×&BÒ&BØØ^Ð^Ð^Ø(Ð(Ð(ñ'ô 'Ð#ð '+¤j×&BÒ&BØØZÐZÐZØ(Ð(Ð(ñ'ô 'Ð#ð '+¤j×&BÒ&BØØnÐnÐnØ.Ð.Ð.ñ'ô 'Ð#ð '+¤j×&BÒ&BØØfÐfÐfØ+Ð+Ð+ñ'ô 'Ð#ð (ÐxÐ+BÐxÐF]ÐxÐaxð "ð %Ð,Ð0EÐ0MÝ—’ÐXÑYÔYÐYØ�ð & bÔ)Ô.Ð2GÈÔ2KÔ2PÒPÐPØ(¨Ô,Ô1Ð5JÈ2Ô5NÔ5SÒSÐSØ(¨Ô,Ô1Ð5JÈ2Ô5NÔ5SÒSÐSØ(¨Ô,Ô1Ð5JÈ2Ô5NÔ5SÒSÐSå—’ÐbÑcÔcÐcØ�ð ”z×3Ò3ØØ˜Ð$Ø�A�ñô ˆHð ”z×3Ò3ØØ˜Ð Ø�A�ñô ˆHð Ð) ˆFàˆ~Ý—’ÐWÑXÔXÐXØ�ð 1=Ñ-ˆH�i Øœ×5Ò5ØØmÐmÐmØ+Ð+Ð+ñô ˆJð
 œ×5Ò5ØØaÐaÐaØ(Ð(Ð(ñô ˆJð
 œ×5Ò5ØØWÐWÐWØ%Ð%Ð%ñô ˆJð
 œ×5Ò5ØØKÐKÐKØ"Ð"Ð"ñô ˆJð œ×5Ò5ØØSÐSÐSØ%Ð%Ð%ñô ˆJð
 Ð!Ø!œZ×9Ò9ØØ_Ð_Ð_Ø,Ð,Ð,ñô �
ð
 Ð%Ø%�Ø$ RœLÔ.¨qÔ1�	�	ØÐ'Ø%�Ø$ RœLÔ.¨qÔ1�	�	ØÐ'Ø%�Ø$ RœLÔ.¨qÔ1�	Ø'¨œ{Ô0°Ô3��ØÐ'Ø%�Ø$ RœLÔ.¨qÔ1�	Ø'¨œ{Ô0°Ô3��ØÐ'Ø%��å—’Ð]Ñ^Ô^Ð^Ø�ð #+ÑˆH�iØœ×5Ò5ØØmÐmÐmØ+Ð+Ð+ñô ˆJð
 œ×5Ò5ØØaÐaÐaØ(Ð(Ð(ñô ˆJð
 œ×5Ò5ØØWÐWÐWØ%Ð%Ð%ñô ˆJð
 œ×5Ò5ØØKÐKÐKØ"Ð"Ð"ñô ˆJð œ×5Ò5ØØSÐSÐSØ%Ð%Ð%ñô ˆJð
 Ð!Ø!œZ×9Ò9ØØ_Ð_Ð_Ø,Ð,Ð,ñô �
ð
 Ð%Ø%�Ø$ RœLÔ.¨qÔ1�	�	ØÐ'Ø%�Ø$ RœLÔ.¨qÔ1�	�	ØÐ'Ø%�Ø$ RœLÔ.¨qÔ1�	Ø'¨œ{Ô0°Ô3��ØÐ'Ø%�Ø$ RœLÔ.¨qÔ1�	Ø'¨œ{Ô0°Ô3��ØÐ'Ø%��å—’Ð]Ñ^Ô^Ð^Ø�ð '¨*Ò4ÐO¸ÀZÒ9OˆOØ3=Ñ0ÐÐ0àð N_à% bœ\�
Ø% bœ\�
Ø”? j¤oÒ5Ð5Ý—L’LÐ!mÑnÔnÐnØ�Fð 6:×5cÒ5cÐdlÑ5mÔ5mÑ2�	˜9 lØÐ$Ý—L’LÐ!nÑoÔoÐoØ�Fñ %ð
   2Ò%Ð%Ø15´×1MÒ1MØ  œØ"˜Ø˜ñ2ô 2Ð.ð
 26´×1MÒ1MØ  œØ"˜Ø˜ñ2ô 2Ð.ð 3Ð:Ø5Ð=Ø5°aÔ8Ô=ÐA[Ð\]ÔA^ÔAcÒcÐcåŸšÐ%nÑoÔoÐoØ˜Ø#=¸aÔ#@Ô#FÀqÔ#I�L�Là13Ð.Ø13Ð.à 
Ò*Ð*¨x¸:Ò/EÐ/EØ 
Ò*Ð*¨x¸:Ò/EÐ/Eà ”|Ô(¨H°R¬LÔ,=Ò=Ð=ÀÈ"ÄÔARÐV^Ð_aÔVbÔVgÒAgÐAgÝŸšð Cñô ð ð ˜ñ	 Bhð
  *Ò,Ð,°¸ZÒ1GÐ1GØ 
Ò*Ð*¨x¸:Ò/EÐ/Eà ”|Ô(¨H°R¬LÔ,=Ò=Ð=ÝŸšØpñô ð ð ˜à(,¬
×(DÒ(DØ  œØ! 7Ð+Ø˜A˜ñ)ô )Ð%ð )-¬
×(DÒ(DØ  œØ8Ð8Ð8Ø!˜	˜	ñ)ô )Ð%ð *Ð1Ø,Ð4Øœ:×6Ò6Ð7HÈÔ7LÔ7RÐSTÔ7UÑVÔVÐ^Ø,¨RÔ0Ô8¸KÒGÐGåŸšÐ%rÑsÔsÐsØ˜ð Hõ
 —L’LÐ!]Ñ^Ô^Ð^à"×FÒFØ% bÔ)Ô0°Ô3ØØØØ”˜A”ñô ˆOð Ð&Ý—’Ð\Ñ]Ô]Ð]Ø�ð ×$Ò$ d VÑ,Ô,Ð,Ø×$Ò$Ð%:¸3¸B¸3Ô%?Ñ@Ô@Ð@Ø×$Ò$Ð%:¸3¸B¸3Ô%?Ñ@Ô@Ð@Ø×$Ò$Ð%:¸3¸B¸3Ô%?Ñ@Ô@Ð@Ø×$Ò$Ð%:¸3¸B¸3Ô%?Ñ@Ô@Ð@Ø×$Ò$ V¨C¨R¨C¤[Ñ1Ô1Ð1àð Eõ %.¨hÑ$7Ô$7ð ð ‘L�A�yØ Ô(¨NÐ:Ð:¸yÈHÐUVÌKÒ?WÐ?WØ×0Ò0Ð1rÐ1rÐ1rÐ1r¸XÀbÀqÀb¼\Ð1rÑ1rÔ1rÑsÔsÐsØ˜øÝ$-¨hÑ$7Ô$7ð ð ‘L�A�yØ Ô(¨NÐ:Ð:¸yÈHÐUVÌKÒ?WÐ?WØ×0Ò0Ð1rÐ1rÐ1rÐ1r¸XÀbÀqÀb¼\Ð1rÑ1rÔ1rÑsÔsÐsØ˜øøà×(Ò(¨Ñ2Ô2Ð2Ø×(Ò(¨Ñ2Ô2Ð2Ø×(Ò(Ð)CÀCÀRÀCÔ)HÑIÔIÐIØ×(Ò(Ð)CÀCÀRÀCÔ)HÑIÔIÐIà$Ð0µS¸¼×9PÒ9PÐQbÐcdÔQeÑ9fÔ9fÑ5gÔ5gÐklÒ5lÐ5lð ×,Ò,Ð->Ñ?Ô?Ð?Ø$Ð0Ø×,Ò,Ð->¸sÀ¸sÔ-CÑDÔDÐDà×Ò˜dœnÑ-Ô-Ð-Ø=AÔ=QˆÔ$ _Ô%9Ñ:ØÔ× Ò  Ñ1Ô1Ð1ØˆÔÐÐr   )r  r  r  r
   r   r   r   rB  rk  r  rv  r”  r  r   r!  s   @r   r#  r#  T  sü   ø€ € € € € ð`˜ið `ð `ð `ð `ð `ð `ð°9ð Èð ð ð ð ð2H¸9ð Hð Hð Hð HðT6àð6ð ð6ð ð	6ð
 ð6ð ð6ð 6ð 6ð 6ðp_<ð _<ð _<ðBd ð d ð d ð d ð d ð d ð d r   r#  )ÚloggingÚnumpyrz  Úfusion_attentionr   Úfusion_baser   Úonnxr   r   r   r   r	   Ú
onnx_modelr
   Ú	getLoggerr  r4   r   r#  rQ  r   r   ú<module>rÝ     sÿ   ðð
 €€€à Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø Ð Ð Ð Ð Ð Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ  Ð  Ð  Ð  Ð  Ð  à	ˆÔ	˜8Ñ	$Ô	$€ðA ð A ð A ð A ð A ˜Oñ A ô A ð A ðH"h
 ð h
 ð h
 ð h
 ð h
 ˜Vñ h
 ô h
 ð h
 ð h
 ð h
 r   