Ë
    �…j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y)
é    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                 ó2   •— t         ‰| �  |||dg d¢¬«       y )NT)ÚSimplifiedLayerNormalizationÚ SkipSimplifiedLayerNormalizationÚLayerNormalizationÚSkipLayerNormalizationÚAdd)Úuse_multi_head_attentionÚsearch_op_types)ÚsuperÚ__init__)Úselfr   r   r   Ú	__class__s       €úq/root/aria/tools/markitdown-venv/lib/python3.12/site-packages/onnxruntime/transformers/fusion_rotary_attention.pyr   zFusionRotaryAttention.__init__   s(   ø€ ô 	‰ÑØØØØ%)òð 	õ 	
ó    NÚinputÚoutputÚq_rotaryÚk_rotaryÚv_matmulÚ	attn_maskÚadd_qkÚpast_kÚpast_vÚ	present_kÚ	present_vÚscaleÚreturnc                 ó‚  — | j                   dkD  sJ ‚| j                  dkD  rL| j                  | j                   z  dk7  r0t        j                  d| j                  › d| j                   › �«       y | j                  j                  d«      }|j                  d   |j                  d   |j                  d   d||||	g}|g}|
r|r|j                  |
|g«       t        j                  d|||¬«      }d|_
        |j                  j                  t        j                  d| j                   «      g«       |�0|j                  j                  t        j                  d	|«      g«       | j                  �C|j                  j                  t        j                  d
t        | j                  «      «      g«       | j                  d«       |S )Nr   z)fuse_rotary_attention: input hidden size z# is not a multiple of num of heads ÚMultiHeadAttentionÚ ©Ú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Ñ%5¸¿¹Ñ%FÈ1Ò$LÜ�L‰LØ;¸D×<LÑ<LÐ;MÐMpÐqu×qÑqð  qAð  Bôð àŸ
™
×3Ñ3Ð4HÓIˆà�O‰O˜AÑØ�O‰O˜AÑØ�O‰O˜AÑØØØØØð	
ˆ
ð �hˆÙ™Ø×Ñ 	¨9Ð5Ô6ä×#Ñ#Ø ØØØô	
ˆð *ˆŒØ×Ñ×!Ñ!¤6×#8Ñ#8¸ÀdÇnÁnÓ#UÐ"VÔWØÐØ×Ñ×%Ñ%¤v×'<Ñ'<¸WÀeÓ'LÐ&MÔNØ×!Ñ!Ð-Ø×Ñ×%Ñ%¤v×'<Ñ'<Ð=PÔRWÐX\×XnÑXnÓRoÓ'pÐ&qÔrà×ÑÐ2Ô3Øˆr   c	                 óÒ
  — | j                   j                  |dgdg«      }	| j                   j                  |dgdg«      }
|	�|
€y|	d   |
d   }}| j                   j                  |g d¢g d¢«      }| j                   j                  |g d¢g d¢«      }| j                   j                  |g d¢g d¢«      }| j                   j                  |g d¢g d¢«      }|�|�|�|€y|\  }}}|\  }}}|j                  d   |k7  s|j                  d   |k7  ry|d   j                  |j                  k7  s|d   j                  |j                  k7  ry| j                   j                  |dgdg«      }| j                   j                  |dgdg«      }|�|€y|d   |d   }}| j                   j                  |g d	¢g d
¢«      }| j                   j                  |g d¢g d¢«      }| j                   j                  |g d¢g d¢«      }| j                   j                  |g d¢g d¢«      }|�|�|�|€y|d   j                  |j                  k7  sT|d   j                  |j                  k7  s8|d   j                  |j                  k7  s|d   j                  |j                  k7  ry| j                   j                  |dgdg«      }|€y|d   }| j                   j                  |g d	¢g d
¢«      } | j                   j                  |g d¢g d¢«      }!| �|!€y| d   j                  |j                  k7  s|!d   j                  |j                  k7  ry| j                   j                  |dgdg«      }"|"€y|"d   }#| j                   j                  |#g d	¢g d
¢«      }$| j                   j                  |#g d¢g d¢«      }%|$�|%€y|$d   j                  |j                  k7  s|%d   j                  |j                  k7  ry|$d   }&| d   }'|d   }(|j                  d   })|&j                  d   |)k7  s$|'j                  d   |)k7  s|(j                  d   |)k7  ry| j                   j                  |g d¢g d¢«      }*| j                   j                  |g d¢g d¢«      }+|*�|*\  }},}-n|+�|+\  }}},}-ny|-j                  d   dvry| j                   j                  |,g d¢g d¢«      }.| j                   j                  |-g d¢g d¢«      }/| j                   j                  |-dgdg«      }0|.�|/�|0€y|.d   j                  |/d   j                  k7  s|.d   j                  |/d   j                  k7  ry|/d   j                  d   |0d   j                  d   k7  ryy)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™J×8Ñ8¸ÈÈ
ÐUVÐTWÓXÐØ ŸJ™J×8Ñ8¸ÈÈ
ÐUVÐTWÓXÐØÐ$Ð(9Ð(AØØ%6°qÑ%9Ð;LÈQÑ;O�lˆà#Ÿz™z×;Ñ;¸LÒJjÒluÓvÐØ#Ÿz™z×;Ñ;¸LÒJjÒluÓvÐØ#Ÿz™z×;Ñ;¸LÒJjÒluÓvÐØ#Ÿz™z×;Ñ;¸LÒJjÒluÓvÐà Ð(Ø#Ð+Ø#Ð+Ø#Ð+àà3Ñˆˆ8�WØ3Ñˆˆ8�Wð �=‰=˜Ñ˜zÒ)¨W¯]©]¸1Ñ-=ÀÒ-KØð   Ñ"×'Ñ'¨8¯=©=Ò8Ð<PÐQRÑ<S×<XÑ<XÐ\d×\iÑ\iÒ<iØð Ÿ*™*×6Ñ6°{ÀXÀJÐQRÐPSÓTˆØŸ*™*×6Ñ6°{ÀXÀJÐQRÐPSÓTˆØÐ" oÐ&=ØØ!0°Ñ!3°_ÀQÑ5G�Jˆ
à!ŸZ™Z×9Ñ9ØÒ?Âó
Ðð "ŸZ™Z×9Ñ9ØÒ?Âó
Ðð "ŸZ™Z×9Ñ9¸*ÒFfÒhqÓrÐØ!ŸZ™Z×9Ñ9¸*ÒFfÒhqÓrÐàÐ&Ø!Ð)Ø!Ð)Ø!Ð)àð ˜qÑ!×&Ñ&¨(¯-©-Ò7Ø! !Ñ$×)Ñ)¨X¯]©]Ò:Ø! !Ñ$×)Ñ)¨X¯]©]Ò:Ø! !Ñ$×)Ñ)¨X¯]©]Ò:àð Ÿ*™*×6Ñ6°{ÀXÀJÐQRÐPSÓTˆØÐ"ØØ$ QÑ'ˆ
à!ŸZ™Z×9Ñ9ØÒ?Âó
Ðð "ŸZ™Z×9Ñ9ØÒ?Âó
Ðð Ð%Ð);Ð)CØð ˜aÑ ×%Ñ%¨¯©Ò6Ð:LÈQÑ:O×:TÑ:TÐX`×XeÑXeÒ:eØð Ÿ*™*×6Ñ6°{ÀXÀJÐQRÐPSÓTˆØÐ"ØØ$ QÑ'ˆ
à!ŸZ™Z×9Ñ9ØÒ?Âó
Ðð "ŸZ™Z×9Ñ9¸*ÒFfÒhqÓrÐØÐ%Ð);Ð)CØð ˜aÑ ×%Ñ%¨¯©Ò6Ð:LÈQÑ:O×:TÑ:TÐX`×XeÑXeÒ:eØð # 1Ñ%ˆØ" 1Ñ%ˆØ" 1Ñ%ˆØ—‘ qÑ)ˆØ�;‰;�q‰>˜\Ò)¨U¯[©[¸©^¸|Ò-KÈuÏ{É{Ð[\É~ÐamÒOmØð  Ÿ:™:×7Ñ7¸Ò@\Ò^gÓhÐØŸ:™:×7Ñ7¸Ò@dÒfrÓsÐØÐ'Ø(8Ñ%ˆAˆz™:ØÐ)Ø+;Ñ(ˆAˆq�*™jàà×Ñ˜AÑÐ&EÑEØàŸ*™*×6Ñ6ØÒ?Âó
ˆð !ŸJ™J×8Ñ8ØÒ?Âó
Ðð !ŸJ™J×8Ñ8¸ÀkÀ]ÐUVÐTWÓXÐØÐ"Ð&7Ð&?ÐCTÐC\Øð ˜1Ñ×"Ñ"Ð&7¸Ñ&:×&?Ñ&?Ò?À?ÐSTÑCU×CZÑCZÐ^oÐpqÑ^r×^wÑ^wÒCwØð ˜QÑ×%Ñ% aÑ(Ð,=¸aÑ,@×,FÑ,FÀqÑ,IÒIØàr   c                 ó,  — | j                   j                  |dgdg«      }|€y|d   }| j                   j                  |g d¢g d¢«      }| j                   j                  |g d¢g d¢«      }	|�|	€y|\  }
}}|	\  }
}}|j                  d   |k7  s|j                  d   |k7  ry| j                   j                  |dgdg«      }|€y|d   }| j                   j                  |g d¢g d¢«      }| j                   j                  |g d¢g d¢«      }|�|€y|d   j                  |j                  k7  s|d   j                  |j                  k7  ry| j                   j                  |dgdg«      }|€y|d   }| j                   j                  |g d¢g d¢«      }| j                   j                  |g d¢g d¢«      }|�|€y|d   j                  |j                  k7  s|d   j                  |j                  k7  ry| j                   j                  |dgdg«      }|€y|d   }| j                   j                  |g d¢g d¢«      }| j                   j                  |g d¢g d¢«      }|�|€y|d   j                  |j                  k7  s|d   j                  |j                  k7  ryy)	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ý   s¿  € ð Ÿ*™*×6Ñ6°{ÀXÀJÐQRÐPSÓTˆØÐ"ØØ$ QÑ'ˆ
à!ŸZ™Z×9Ñ9¸*ÒFfÒhqÓrÐØ!ŸZ™Z×9Ñ9¸*ÒFfÒhqÓrÐØÐ%Ð);Ð)CØà1Ñˆˆ8�WØ1Ñˆˆ8�Wð �=‰=˜Ñ˜zÒ)¨W¯]©]¸1Ñ-=ÀÒ-KØð Ÿ
™
×4Ñ4°YÀÀ
ÈQÈCÓPˆØÐ ØØ  Ñ#ˆàŸ:™:×7Ñ7¸ÒBbÒdmÓnÐØŸ:™:×7Ñ7¸ÒBbÒdmÓnÐØÐ#Ð'7Ð'?Øð ˜AÑ×#Ñ# x§}¡}Ò4Ð8HÈÑ8K×8PÑ8PÐT\×TaÑTaÒ8aØð Ÿ
™
×4Ñ4°YÀÀ
ÈQÈCÓPˆØÐ ØØ  Ñ#ˆàŸ:™:×7Ñ7¸ÒBbÒdmÓnÐØŸ:™:×7Ñ7¸ÒBbÒdmÓnÐØÐ#Ð'7Ð'?Øð ˜AÑ×#Ñ# x§}¡}Ò4Ð8HÈÑ8K×8PÑ8PÐT\×TaÑTaÒ8aØð Ÿ
™
×4Ñ4°YÀÀ
ÈQÈCÓPˆØÐ ØØ  Ñ#ˆàŸ:™:×7Ñ7¸ÒBbÒdmÓnÐØŸ:™:×7Ñ7¸ÒBbÒdmÓnÐØÐ#Ð'7Ð'?Øð ˜AÑ×#Ñ# x§}¡}Ò4Ð8HÈÑ8K×8PÑ8PÐT\×TaÑTaÒ8aØàr   c                 ó|  ‡ — |j                   dvry d }‰ j                  j                  |g d¢g d¢«      }‰ j                  j                  |g d¢g d¢«      }‰ j                  j                  |g d¢g d¢«      }|�|\  }}	}}
}|}n/|�
|\  }}}}|}n#|�|\  }}}}}|}nt        j	                  d«       y d\  }}}d }d }‰ j                  j                  |g d	¢g d
¢«      }‰ j                  j                  |g d¢g d¢«      }‰ j                  j                  |g d¢g d¢«      }‰ j                  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                  j                  |g d ¢g d!¢«      }|�x|\  }}}}}}|}‰ j                  j                  |d"d#gd$d%g«      }|€t        j	                  d&«       y |d$   j                  d$   }|d'   j                  d$   }|j                  d$   }nÅ|�(|\  }}}}|}|j                  d$   }|j                  d$   }n›|�|\  }}}|}|j                  d$   }n�|�<t        |«      d(k(  r.|d$   d)d  \  }}}}|}|j                  d$   }|j                  d$   }nC|�+|\  }}}}}|}|}|j                  d$   }|j                  d$   }nt        j	                  d*«       y ‰ j                  j                  |g d+¢g d,¢«      }d-\  }} |�|\  }}}} nt        j	                  d.«       y d/\  }!}"‰ j                  j                  |g d0¢g d¢«      }#‰ j                  j                  |g d1¢g d¢«      }$‰ j                  j                  |g d2¢g d3¢«      }%‰ j                  j                  |g d4¢g d5¢«      }&‰ j                  j                  |g d6¢g d7¢«      }'‰ j                  j                  |g d8¢g d3¢«      }(‰ j                  j                  |g d9¢g d:¢«      })|#�|#\  }}*}+|*j                  d$   }!nÅ|$�|$\  }}}*}+|*j                  d$   }!n¬|%�"‰ j                  |%d$   j                  d$   «      }"nˆ|&�"‰ j                  |&d$   j                  d$   «      }"nd|'�|'d$   j                  d$   }"nO|(�|(d$   j                  d$   }"n:|)�"‰ j                  |)d$   j                  d$   «      }"nt        j	                  d;«       y d/\  },}-d }.d }/d }0‰ j                  j                  | g d<¢g d
¢«      }1‰ j                  j                  | g d=¢g d¢«      }2‰ j                  j                  | g d>¢g d?¢«      }3‰ j                  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                  j                  | g dO¢g dP¢«      }5|1�~|1\  }6}}7}}8}9|1}.‰ j                  j                  |7d"d#gd$d%g«      }:|:€t        j	                  dQ«       y |:d$   j                  d$   },|:d'   j                  d$   };|7j                  d$   }-||;k(  sÖJ ‚|2�|2\  }}8}}<}9|2}.|8j                  d$   }-n¸|3�*|3\  }}7}8}}<}9|3}.|7j                  d$   },|7j                  d$   }-nŒ|4�Et        |4«      d(k(  r7|4d$   dRd  \  }<}9|4d$   dSdT \  }7}8|4}.|7j                  d$   },|7j                  d$   }-nE|5�-|5\	  }}7}0}8}/}}<}}9|5}.|7j                  d$   },|7j                  d$   }-nt        j	                  dU«       y d }=d }>d }?‰ j                  j                  | g dV¢g d,¢«      }@‰ j                  j                  | g dW¢g d,¢«      }A‰ j                  j                  | g dX¢g dY¢«      }B|@�
@\  }C}}D}E|@}=n1A�
A\  }D}}F}E|A}=n%B�B\  }?}D}>}}F}}E|B}=nt        j	                  dZ«       y Ej                  d$   |9j                  d$   k7  r5|9j                  d$   |j                  d$   k7  rt        j	                  d[«       y d\}G||k(  rK‰ j                  	
C6|Ej                  d$   «      st        j	                  d]«       y |	j                  d$   }GnÏ|||fv rÉ‰ j                  F<Ej                  d$   «      st        j	                  d]«       y |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                  j                  da«      }I|Id^z   }Jt        j                  da|0j                  d$   g|Jg|I¬b«      }K|Kj                   j#                  t        j$                  dcg dd¢«      g«       ‰ j                  j                  da«      }L|Ld^z   }Mt        j                  da|?j                  d$   g|Mg|L¬b«      }N|Nj                   j#                  t        j$                  dcg dd¢«      g«        H<«      }O|O€t        j	                  de«       y ‰ j                  j                  dfdg¬h«      }Pt        j                  dfKj                  d$   Oj                  d$   g|Pd^z   g|P¬b«      }Q‰ j                  j                  dfdi¬h«      }Rt        j                  dfNj                  d$   |Oj                  d$   g|Rd^z   g|R¬b«      }S|Q}8|S}D‰ j&                  j)                  |O«       ‰ j&                  j)                  |K«       ‰ j&                  j)                  |N«       ‰ j&                  j)                  |Q«       ‰ j&                  j)                  |S«       ‰ j*                  ‰ j,                  |Oj                  <   ‰ j*                  ‰ j,                  |Kj                  <   ‰ j*                  ‰ j,                  |Nj                  <   ‰ j*                  ‰ j,                  |Qj                  <   ‰ j*                  ‰ j,                  |Sj                  <   ‰ j/                  Ej                  d$   GD|8||!|"|,||-|«      }T|T€t        j	                  dj«       y ‰ j&                  j)                  T«       ‰ j*                  ‰ j,                  |Tj                  <   ‰ j0                  j#                  |d_d  «       ||k7  r&‰ j0                  j#                  |€|d d' n|d dR «       n"|d$   d'   g}U|D ]  }V‰ j3                  |VU«       Œ ‰ j0                  j#                  |«       |.|1k(  r ‰ j0                  j#                  |.d dR «       �nN|.|2k(  r[‰ j0                  j)                  |.d$   «       ‰ j0                  j)                  |.d%   «       ‰ j0                  j)                  |.dk   «       nî|.|3k(  ry‰ j0                  j)                  |.d$   «       ‰ j0                  j)                  |.d_   «       ‰ j0                  j)                  |.dk   «       ‰ j0                  j)                  |.dl   «       np|.|5k(  r=‰ j0                  j)                  |.d$   «       ‰ j0                  j)                  |.d_   «       n.|.|4k(  r)|.d$   d'   |.d$   d)   g}U|.D ]  }V‰ j3                  |VU«       Œ |=@k(  r&‰ j0                  j#                  |=d dR «       dm‰ _        y |=Ak(  r<‰ j0                  j)                  |=d_   «       ‰ j0                  j)                  |=d%   «       dm‰ _        y )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                 ó.  •— ‰
j                   j                  | dd«      }|€t        j                  d«       y‰
j                   j	                  |j
                  d   «      }‰
j                   j	                  |j
                  d   «      }|�|€t        j                  d«       y|d   }|d   }||z  }‰
j                   j                  d	d
¬«      }‰
j                   j                  |«      €&‰
j                  |t        j                  dg|gd¬«       ‰
j                   j                  dd¬«      }t        j                  d|j
                  d   |j
                  d   |g|dz   g|¬«      }	|	j                  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‘Z×,Ñ,¨Y¸À!ÓDˆFàˆ~Ü—‘ÐdÔeØð &*§Z¡Z×%BÑ%BÀ6Ç<Á<ÐPQÁ?Ó%SÐ"Ø&*§j¡j×&CÑ&CÀFÇLÁLÐQRÁOÓ&TÐ#à%Ð-Ð1HÐ1PÜ—‘ÐlÔmØà3°AÑ6ˆNØ5°aÑ8ˆOà(¨?Ñ:ˆKà%)§Z¡Z×%@Ñ%@ÀÐ\iÐ%@Ó%jÐ"Ø�z‰z×)Ñ)Ð*@ÓAÐIØ×$Ñ$Ø/Ü)×/Ñ/Ø˜Ø%˜Øð %ô ð -1¯J©J×,GÑ,GÈÐ^rÐ,GÓ,sÐ)ä&,×&6Ñ&6Øà—L‘L ‘OØ—L‘L ‘OØ*ðð
 7¸ÑCÐDØ2ô	'Ð#ð $×-Ñ-×4Ñ4´f×6KÑ6KÈFÐTUÓ6VÐ5WÔ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  sß  ø€ Ø×!Ñ!Ð)nÑnØð
 ˆ	Ø—j‘j×2Ñ2ØÚCÚó
ˆð
 —j‘j×2Ñ2ØÚ8Úó
ˆð
 —j‘j×2Ñ2ØÚEÚó
ˆð
 Ð"Ø=HÑ:ˆAˆ}˜a °
Ø#‰IØÐ$Ø,7Ñ)ˆAˆ{˜A˜zØ#‰IØÐ$Ø/:Ñ,ˆAˆq�+˜q *Ø#‰Iä�L‰LÐKÔLØð +5Ñ'ˆ�	˜<ØˆØˆØ—J‘J×0Ñ0ØÚPÚó
ˆ	ð
 —J‘J×0Ñ0ØÚ8Úó
ˆ	ð
 —J‘J×0Ñ0ØÚ.Úó
ˆ	ð
 Ÿ*™*×;Ñ;Øò cÚ)ðò
ò <ð!ò&ò$ Eð'ò,ò  ?ð#ò(ò 9ðò$ vÚ/ðò
ò 3ðò  vÚ/ðò
 vÚ/ððOkðX !%ð] <ó o
‰ˆˆ9�að` —J‘J×0Ñ0ØÚ?Úó
ˆ	ð
 Ð ØAJÑ>ˆK˜˜H a¨°hØˆGà ŸJ™J×8Ñ8ØØ˜+Ð&Ø�A�óˆMð
 Ð$Ü—‘ÐcÔdØà" 1Ñ%×+Ñ+¨AÑ.ˆFØ(¨Ñ,×2Ñ2°1Ñ5ˆLØ Ÿ™¨Ñ*‰IØÐ"Ø9BÑ6ˆH�k 9¨hØˆGØ—^‘^ AÑ&ˆFØ Ÿ™¨Ñ*‰IØÐ"Ø/8Ñ,ˆK˜ HØˆGØ#×*Ñ*¨1Ñ-‰IØÐ"¤s¨9£~¸Ò':Ø9BÀ1¹ÀbÀcÐ9JÑ6ˆH�k 9¨hØˆGØ—^‘^ AÑ&ˆFØ Ÿ™¨Ñ*‰IØÐ"Ø@IÑ=ˆH�k 9¨e°XØˆHØˆGØ—^‘^ AÑ&ˆFØ Ÿ™¨Ñ*‰Iä�L‰LÐHÔIØà—:‘:×/Ñ/ØÚ/Úó
ˆð
 'Ñˆ�	ØÐØ&.Ñ#ˆAˆv�q™)ä�L‰LÐJÔKØð !'Ñˆ	�:Ø ŸJ™J×8Ñ8ØÚ(Úó
Ðð
 !ŸJ™J×8Ñ8ØÚ0Úó
Ðð
 !ŸJ™J×8Ñ8ØÚOÚ!ó
Ðð
 !ŸJ™J×8Ñ8ØÚHÚó
Ðð
 !ŸJ™J×8Ñ8ØÚYÚ$ó
Ðð
 !ŸJ™J×8Ñ8ØÚRÚ!ó
Ðð
 !ŸJ™J×8Ñ8ØÚaÚ'ó
Ðð
 Ð(Ø,=Ñ)ˆAˆ|˜\Ø$×+Ñ+¨AÑ.‰IØÐ*Ø/@Ñ,ˆAˆq�, Ø$×+Ñ+¨AÑ.‰IØÐ*à×,Ñ,Ð->¸qÑ-A×-HÑ-HÈÑ-KÓL‰JØÐ*à×,Ñ,Ð->¸qÑ-A×-HÑ-HÈÑ-KÓL‰JØÐ*à*¨1Ñ-×4Ñ4°QÑ7‰JØÐ*à*¨1Ñ-×4Ñ4°QÑ7‰JØÐ*à×,Ñ,Ð->¸qÑ-A×-HÑ-HÈÑ-KÓL‰Jä�L‰LÐVÔWØð
 #Ñˆ�	ØˆØˆØˆØ—J‘J×0Ñ0ØÚXÚó
ˆ	ð
 —J‘J×0Ñ0ØÚNÚó
ˆ	ð
 —J‘J×0Ñ0ØÚXÚó
ˆ	ð
 Ÿ*™*×;Ñ;Øò
ò 0ðòò" Bð%ò*ò( Kð+ò0ò$ Eð'ò,ò  ?ð#ò(ò 6ðò"ò 9ðò$ò 6ðò"ò 6ððgcðH !%ðM <ó g
‰ˆˆ9�aðP —J‘J×0Ñ0ØÚrÚ'ó
ˆ	ð
 Ð Ø>GÑ;ˆK˜˜H a¨°8ØˆGà ŸJ™J×8Ñ8ØØ˜+Ð&Ø�A�óˆMð
 Ð$Ü—‘ÐcÔdØà" 1Ñ%×+Ñ+¨AÑ.ˆFØ"/°Ñ"3×"9Ñ"9¸!Ñ"<ÐØ Ÿ™¨Ñ*ˆIàÐ#6Ò6Ð6Ð6ØÐ"Ø2;Ñ/ˆAˆx˜˜I xØˆGØ Ÿ™¨Ñ*‰IØÐ"Ø<EÑ9ˆAˆx˜ 1 i°ØˆGØ—^‘^ AÑ&ˆFØ Ÿ™¨Ñ*‰IØÐ"¤s¨9£~¸Ò':Ø"+¨A¡,¨r¨sÐ"3ÑˆI�xØ!*¨1¡¨b°Ð!4ÑˆH�hØˆGØ—^‘^ AÑ&ˆFØ Ÿ™¨Ñ*‰IØÐ"ØW`ÑTˆAˆx˜¨°'¸1¸iÈÈHØˆGØ—^‘^ AÑ&ˆFØ Ÿ™¨Ñ*‰Iä�L‰LÐIÔJØð
 ˆØˆØˆØ—J‘J×0Ñ0ØÚAÚó
ˆ	ð
 —J‘J×0Ñ0ØÚAÚó
ˆ	ð
 —J‘J×0Ñ0ØÚ[Ú!ó
ˆ	ð
 Ð Ø1:Ñ.ˆK˜˜H hØ‰GØÐ"Ø/8Ñ,ˆH�a˜ HØ‰GØÐ"ØJSÑGˆM˜8 W¨a°¸A¸xØ‰Gä�L‰LÐIÔJØà�>‰>˜!Ñ §¡¨qÑ 1Ò1°h·n±nÀQÑ6GÈ8Ï>É>ÐZ[ÑK\Ò6\Ü�L‰LÐfÔgØàˆØ˜Ò#Ø×>Ñ>ØØØØØØØØ—‘˜qÑ!ô	ô —‘ÐZÔ[ØØ'×.Ñ.¨qÑ1‰Kà˜;¨Ð4Ñ4Ø×;Ñ;ØØØØØ—‘˜qÑ!ôô —‘ÐZÔ[ØØ%×,Ñ,¨QÑ/ˆKñ
 6= §¡¨qÒ 1À(Ç/Á/ÐRSÑBTˆH�N‰N˜1ÑÙ5< §¡¨qÒ 1À(Ç/Á/ÐRSÑBTˆH�N‰N˜1Ñð Ð$Ø%-§]¡]°[Ñ%@�—‘ Ñ"à˜KÒ'Ø% a b˜M�	ô2	+òj š]à$(§J¡J×$?Ñ$?ÀÓ$LÐ!Ø%:¸[Ñ%HÐ"Ü%×/Ñ/ØØ%×,Ñ,¨QÑ/Ð0Ø/Ð0Ø*ô	 Ðð ×&Ñ&×-Ñ-¬v×/DÑ/DÀVÊ\Ó/ZÐ.[Ô\ð %)§J¡J×$?Ñ$?ÀÓ$LÐ!Ø%:¸[Ñ%HÐ"Ü%×/Ñ/ØØ%×,Ñ,¨QÑ/Ð0Ø/Ð0Ø*ô	 Ðð ×&Ñ&×-Ñ-¬v×/DÑ/DÀVÊ\Ó/ZÐ.[Ô\á&DÀYÓ&OÐ#Ø&Ð.Ü—‘Ð^Ô_Øð *.¯©×)DÑ)DÀYÐ\kÐ)DÓ)lÐ&Ü$*×$4Ñ$4ØØ(×/Ñ/°Ñ2Ð4K×4RÑ4RÐSTÑ4UÐVØ3°kÑAÐBØ/ô	%Ð!ð *.¯©×)DÑ)DÀYÐ\kÐ)DÓ)lÐ&Ü$*×$4Ñ$4ØØ(×/Ñ/°Ñ2Ð4K×4RÑ4RÐSTÑ4UÐVØ3°kÑAÐBØ/ô	%Ð!ð -ˆHØ,ˆHà×Ñ×$Ñ$Ð%<Ô=Ø×Ñ×$Ñ$Ð%5Ô6Ø×Ñ×$Ñ$Ð%5Ô6Ø×Ñ×$Ñ$Ð%:Ô;Ø×Ñ×$Ñ$Ð%:Ô;àIM×I]ÑI]ˆD×(Ñ(Ð)@×)EÑ)EÑFØBF×BVÑBVˆD×(Ñ(Ð)9×)>Ñ)>Ñ?ØBF×BVÑBVˆD×(Ñ(Ð)9×)>Ñ)>Ñ?ØGK×G[ÑG[ˆD×(Ñ(Ð)>×)CÑ)CÑDØGK×G[ÑG[ˆD×(Ñ(Ð)>×)CÑ)CÑDà×'Ñ'Ø�N‰N˜1ÑØØØØØØØØØØó
ˆð ÐÜ�L‰LÐnÔoØà×Ñ× Ñ  Ô*Ø6:×6JÑ6Jˆ×$Ñ$ X§]¡]Ñ3à×Ñ×#Ñ# I¨a¨b MÔ2à�iÒØ× Ñ ×'Ñ'¸¸¨°°©È7ÐSVÐTVÈ<ÕXà$ Q™Z¨™^Ð,ˆMØ$ò V�	Ø×;Ñ;¸IÀ}ÕUðVð 	×Ñ×#Ñ# HÔ-à�iÒØ× Ñ ×'Ñ'¨°°¨Ö5Ø˜	Ò!Ø× Ñ ×'Ñ'¨°©
Ô3Ø× Ñ ×'Ñ'¨°©
Ô3Ø× Ñ ×'Ñ'¨°©
Õ3Ø˜	Ò!Ø× Ñ ×'Ñ'¨°©
Ô3Ø× Ñ ×'Ñ'¨°©
Ô3Ø× Ñ ×'Ñ'¨°©
Ô3Ø× Ñ ×'Ñ'¨°©
Õ3Ø˜	Ò!Ø× Ñ ×'Ñ'¨°©
Ô3Ø× Ñ ×'Ñ'¨°©
Õ3Ø˜	Ò!Ø$ Q™Z¨™^¨W°Q©Z¸©^Ð<ˆMØ$ò V�	Ø×;Ñ;¸IÀ}ÕUðVð �iÒØ× Ñ ×'Ñ'¨°°¨Ô5ð  ˆÕð ˜	Ò!Ø× Ñ ×'Ñ'¨°©
Ô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      sã   ø„ ñð
àð
ð ð
ð õ	
ð6 ØØØØØØ"ñ6àð6ð ð6ð ð	6ð
 ð6ð ð6ð ð6ð ð6ð ð6ð ð6ð ð6ð ð6ð �t‰|ð6ð 
�TÑ	ó6òpZòxGöR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«       y )Nr±   z.1r   )Ú	base_namer   r   )r   r   r   s     €r   r   zFusionRotaryEmbeddings.__init__U  s5   ø€ Ø*ˆŒÜ‰Ñ˜ §¡°·±ÀÇÁÐRVÑAVÐX]Ð0^Õ_r   Úrot_emb_nodeÚfunctionc                 óB  ‡— g g }}|j                   D ]ž  }|j                  dk(  sŒ|j                  g k(  sŒ#|j                  d   |j                  v sŒ?|j	                  |«       t        |j                  «      j                  |j                  d   «      }|j	                  |j                  |   «       Œ  g }|D ]q  }|j                  d   j                  }	| j                  j                  d«      |	_        | j                  j                  |	«       |j	                  |	j                  «       Œs t        ||d¬«      D ]c  \  Š}
t        t        ˆfd„| j                  j                  j                  j                   «      «      }|D ]  }t!        j"                  |‰|
«       Œ Œe |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ˆGØ�‰ *Ó,°·±À"Ó1DÈÏÉÐXYÑIZÐ^f×^mÑ^mÒImØ×&Ñ& wÔ/Ü# H§O¡OÓ4×:Ñ:¸7¿>¹>È!Ñ;LÓM�Ø×$Ñ$ \×%8Ñ%8¸Ñ%FÕGð		Hð  ÐØ-ò 	AˆNØ#1×#;Ñ#;¸AÑ#>×#@Ñ#@Ð Ø(,¯
©
×(CÑ(CÀJÓ(OÐ Ô%Ø�J‰J×&Ñ&Ð';Ô<Ø×%Ñ%Ð&:×&?Ñ&?Õ@ð		Aô 03°=ÐBTÐ]bÔ/cò 	^Ñ+ˆLÐ+Ü"¤6Ó*SÐUY×U_ÑU_×UeÑUe×UkÑUk×UpÑUpÓ#qÓrˆOØ"1ò ^�Ü×,Ñ,¨^¸\ÐK\Õ]ñ^ð	^ð
 Ðr   r0  c                 óÚ  ‡‡— | j                   j                  | j                  «      }| j                   j                  ‰ddgddg«      }|�|\  }}nt        j                  d«       y |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                  |	«      �€±| j                   j                  |
«      �€•t        j                  |d   j                   d   j"                  «      j%                  «       }t        j                  |d   j                   d   j"                  «      j%                  «       }t'        j(                  |	t*        j,                  t        |j.                  «      |j1                  «       j3                  «       ¬	«      }| j                   j5                  || j6                  «       t'        j(                  |
t*        j,                  t        |j.                  «      |j1                  «       j3                  «       ¬	«      }| j                   j5                  || j6                  «       | j8                  j;                  |d   |d   g«       |j;                  |	|
g«       ‰j                  }t        |«      dkD  rƒt        t        ˆfd
„| j                   j                   j<                  «      «      }t        |«      dk(  sJ ‚| j?                  ‰|d   «      Št        t        ˆfd„|«      «      }t        |«      dk(  sJ ‚t'        j@                  | j                  |||d¬«      }d|_!        | j8                  jE                  |«       |S )Nrž   r�   r   z.fuse_rotary_embeddings: failed to match MatMulrE   c                 óB   •— | j                   d   ‰j                  d   k(  S )Nr   rL   ©r   r   ©Úconstantr0  s    €r   r/  zOFusionRotaryEmbeddings.create_rotary_embeddings_from_function.<locals>.<lambda>‰  ó   ø€ °h·o±oÀaÑ6HÈDÏJÉJÐWXÉMÑ6Y€ r   c                 óB   •— | 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                 ó6   •— | 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  sH  ù€ Ø#Ÿz™z×:Ñ:¸4¿>¹>ÓJÐà—j‘j×2Ñ2ØØ˜Ð!Ø�ˆFó
ˆð
 Ð"Ø(3Ñ%ˆL™+ä�L‰LÐIÔJØð ×Ñ˜qÑ!Ø�J‰J�q‰Mð
Ðô œfÓ%YÐ[_×[eÑ[e×[kÑ[k×[qÑ[q×[vÑ[vÓwÓxˆÜœfÓ%YÐ[_×[eÑ[e×[kÑ[k×[qÑ[q×[vÑ[vÓwÓxˆØ)AÑ&ˆ˜ô �Ó 1Ó$Ü�NÓ# qÓ(Ø—
‘
×*Ñ*¨>Ó:ÑBØ—
‘
×*Ñ*¨>Ó:ÑBä$×-Ñ-¨n¸QÑ.?×.IÑ.IÈ!Ñ.L×.NÑ.NÓO×WÑWÓYˆIÜ$×-Ñ-¨n¸QÑ.?×.IÑ.IÈ!Ñ.L×.NÑ.NÓO×WÑWÓYˆIä%×1Ñ1Ø#Ü%×+Ñ+Ü˜)Ÿ/™/Ó*Ø×&Ñ&Ó(×/Ñ/Ó1ô	 Ðð �J‰J×&Ñ&Ð'7¸×9MÑ9MÔNÜ%×1Ñ1Ø#Ü%×+Ñ+Ü˜)Ÿ/™/Ó*Ø×&Ñ&Ó(×/Ñ/Ó1ô	 Ðð �J‰J×&Ñ&Ð'7¸×9MÑ9MÔNà× Ñ ×'Ñ'¨¸Ñ):¸NÈ1Ñ<MÐ(NÔOà× Ñ  .°.Ð!AÔBà!Ÿ[™[ÐÜÐ!Ó" QÒ&äœÓAÀ4Ç:Á:×CSÑCS×C]ÑC]Ó^Ó_ˆDÜ�t“9 ’>Ð!�>Ø ×7Ñ7¸¸dÀ1¹gÓFˆMÜ!%¤fÓ-aÐcuÓ&vÓ!wÐÜÐ)Ó*¨aÒ/Ð/Ð/ä ×*Ñ*Ø�N‰NØ$Ø&Ø%Øô
ˆð "1ˆÔà×Ñ×#Ñ# LÔ1àÐr   r\   Úposition_idsÚ	cos_sliceÚ	sin_slicer   c                 óê  ‡‡— | j                   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                  |	«      �€Ü| j                   j                  |
«      �€Àt        j                  |d   j                  d   j                  «      j                  «       }t        j                  |d   j                  d   j                  «      j                  «       }|j                  d   }|d d …d |dz  …f   }|d d …d |dz  …f   }t        j                   |	t"        j$                  t        |j                  «      |j'                  «       j)                  «       ¬«      }| j                   j+                  || j,                  «       t        j                   |
t"        j$                  t        |j                  «      |j'                  «       j)                  «       ¬«      }| j                   j+                  || j,                  «       | j.                  j1                  |d   |d   g«       t        j2                  | 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±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™z×:Ñ:¸4¿>¹>ÓJÐô œfÓ%UÐW[×WaÑWa×WgÑWg×WmÑWm×WrÑWrÓsÓtˆÜœfÓ%UÐW[×WaÑWa×WgÑWg×WmÑWm×WrÑWrÓsÓtˆØ)AÑ&ˆ˜ô �Ó 1Ó$Ü�NÓ# qÓ(Ø—
‘
×*Ñ*¨>Ó:ÑBØ—
‘
×*Ñ*¨>Ó:ÑBä$×-Ñ-¨n¸QÑ.?×.IÑ.IÈ!Ñ.L×.NÑ.NÓO×WÑWÓYˆIÜ$×-Ñ-¨n¸QÑ.?×.IÑ.IÈ!Ñ.L×.NÑ.NÓO×WÑWÓYˆIð "Ÿ™¨Ñ*ˆIØ!¢!Ð%7¨	°Q©Ð%7Ð"7Ñ8ˆIØ!¢!Ð%7¨	°Q©Ð%7Ð"7Ñ8ˆIä%×1Ñ1Ø#Ü%×+Ñ+Ü˜)Ÿ/™/Ó*Ø×&Ñ&Ó(×/Ñ/Ó1ô	 Ðð �J‰J×&Ñ&Ð'7¸×9MÑ9MÔNÜ%×1Ñ1Ø#Ü%×+Ñ+Ü˜)Ÿ/™/Ó*Ø×&Ñ&Ó(×/Ñ/Ó1ô	 Ðð �J‰J×&Ñ&Ð'7¸×9MÑ9MÔNà× Ñ ×'Ñ'¨¸Ñ):¸NÈ1Ñ<MÐ(NÔOä ×*Ñ*Ø�N‰NØ ¨n¸nÐMØ�HØ%Øô
ˆð "1ˆÔØÐr   c                 ó>  — |d   }| j                   j                  |dd¬«      }|�?|j                  dk(  r0| j                   j                  |dd¬«      }|�|j                  dk(  rŒ0|�|j                  dk(  r|j                  d   }nt        j                  d«       y	|j                  d   }| j                   j                  |dd¬«      }|�_|j                  d
v rQ|j                  dk(  rdnd}|j                  |   }| j                   j                  ||d¬«      }|�|j                  d
v rŒQ|�|j                  d   n|}| j                   j                  |«      }	|	€‘| j                   j                   j                  j                  D ]N  }
|
j                  dk(  sŒ||
j                  v sŒ"t        j                  |
j                  d   j                  «      } n, t        j                  d«       y	t        j                  |	«      }|j                  «       }d}|D ]‡  }|j                  dk(  sŒ||d   k7  sŒ| j                   j                  |j                  d   «      }|�t!        |«      }n5| j                   j                  |j                  d   «      }|�t!        |«      } n d}d}| j                   j                  |«      � | j                   j                  |«      �|||fS d}t#        j$                  |t"        j&                  ¬«      j)                  dd«      }||j+                  t"        j&                  «      z  }t#        j,                  |«      |z  }t#        j.                  |«      |z  }t        j0                  |j+                  t"        j&                  «      |¬«      }| j                   j3                  || j4                  «       t        j0                  |j+                  t"        j&                  «      |¬«      }| j                   j3                  || j4                  «       |||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ˆØÐ" x×'7Ñ'7¸6Ò'AØ—z‘z×,Ñ,¨X°qÈdÐ,ÓSˆHð Ð" x×'7Ñ'7¸6Ó'AàÐ H×$4Ñ$4¸Ò$CØ#Ÿ>™>¨!Ñ,‰Lä�L‰LÐaÔbØ#ð
 *×/Ñ/°Ñ2ÐØŸ
™
×-Ñ-¨k¸1ÐRVÐ-ÓWˆØÐ'¨M×,AÑ,AÐEmÑ,mØ+×3Ñ3°wÒ>™ÀAˆJØ"/×"5Ñ"5°jÑ"AÐØ ŸJ™J×1Ñ1°-ÀÐaeÐ1ÓfˆMð Ð'¨M×,AÑ,AÐEmÒ,mð
 4AÐ3L˜×,Ñ,¨QÒ/ÐReˆØŸ*™*×4Ñ4°]ÓCˆàÐ"à"Ÿj™j×.Ñ.×4Ñ4×9Ñ9ò (�
Ø×%Ñ%¨Ó3¸È×IZÑIZÒ8ZÜ$0×$9Ñ$9¸*×:NÑ:NÈqÑ:Q×:SÑ:SÓ$T�MÙð(ô
 —‘ÐhÔiØ'ä(×1Ñ1°/ÓBˆMà#×+Ñ+Ó-ˆð ˆØ!ò 
	ˆIØ× Ñ  EÓ)¨i¸8ÀA¹;Ó.Fà $§
¡
× =Ñ =¸i¿o¹oÈaÑ>PÓ Q�Ø Ð,Ü$)¨-Ó$8‘Mà$(§J¡J×$AÑ$AÀ)Ç/Á/ÐRSÑBTÓ$U�MØ$Ð0Ü(-¨mÓ(<˜Ùð
	ð %ˆØ$ˆð �J‰J×&Ñ& ~Ó6ÐBØ—
‘
×*Ñ*¨>Ó:ÐFà! >°<Ð?Ð?ð ˆÜ—I‘I˜k´·±Ô<×DÑDÀRÈÓKˆ	Ø˜K×.Ñ.¬r¯z©zÓ:Ñ:ˆÜŸ™ ›¨Ñ6ˆÜŸ™ ›¨Ñ6ˆä'×2Ñ2°>×3HÑ3HÌÏÉÓ3TÐ[iÔjÐØ�
‰
×"Ñ"Ð#3°T×5IÑ5IÔJä'×2Ñ2°>×3HÑ3HÌÏÉÓ3TÐ[iÔjÐØ�
‰
×"Ñ"Ð#3°T×5IÑ5IÔJà˜~¨|Ð;Ð;r   c                 óN  ‡1— | j                   |j                  vr|j                  dk7  ry d Š1|j                  dk7  �rt        |j                  «      dvs|j                  d   dvrt        j                  d«       y | j                  |«      Š1‰1€t        j                  d«       y | j                  j                  |«       t        t        ˆ1fd„| j                  j                  j                  j                  «      «      }t        |«      dk(  sJ ‚| j                  j                  j                  j                  j                  |d   «       �
np| j                  j                  |g d	¢g d
¢«      }| j                  j                  |g d¢g d
¢«      }|xs |}| j                  j                  |g d¢g d¢«      }| j                  j                  |g d¢g d¢«      }	| j                  j                  |g d¢g d¢«      }
| j                  j                  |g d¢g d¢«      }|xs
 |	xs |
xs |}|�|€t        j                  d«       y | j                  j                  |g d¢g d¢«      }| j                  j                  |g d¢g d¢«      }|xs |}| j                  j                  |g d¢g d¢«      }| j                  j                  |g d¢g d¢«      }| j                  j                  |g d¢g d¢«      }| j                  j                  |g d¢g d¢«      }|xs
 |xs |xs |}|�|€t        j                  d«       y |d   j                   |d   j                   k7  s]|d   j                   |d   j                   k7  s>|d   j                   |d   j                   k7  s|d   j                   |d   j                   k7  rt        j                  d «       y | j                  j                  |d!d"gddg«      }| j                  j                  |d!d#gddg«      }|xs |}|€t        j                  d$«       y d%\  }}}| j                  j                  |g d&¢g d'¢«      }| j                  j                  |g d(¢g d)¢«      }| j                  j                  |g d*¢g d+¢«      }| j                  j                  |g d,¢g d-¢«      }| j                  j                  |g d.¢g d/¢«      }|€!| j                  j                  |g d0¢g d1¢«      }|�|}|d2   j                  d   }n„|�|}|d3   j                  d   }nm|�'|}|d2   j                  d   }|d4   j                  d   }nD|�'|}|d3   j                  d   }|d4   j                  d   }n|�|}nt        j                  d5«       y d6\  } }!| j                  j                  |g d&¢g d7¢«      }"| j                  j                  |g d(¢g d8¢«      }#| j                  j                  |g d*¢g d9¢«      }$| j                  j                  |g d,¢g d:¢«      }%| j                  j                  |g d;¢g d<¢«      }&|&€!| j                  j                  |g d=¢g d>¢«      }&|"�|"} | d2   j                  d   }!n„|#�|#} | d3   j                  d   }!nm|$�'|$} | d2   j                  d   }!| d4   j                  d   }nD|%�'|%} | d3   j                  d   }!| d4   j                  d   }n|&�|&} nt        j                  d?«       y ||k(  xr | |&k(  }'d@\  }(})|'rg|d   }*| d   }+|*j                   |+j                   k7  rt        j                  dA«       y | j#                  | «      \  }!}}|!�€t        j                  dB«       y |dCk(  r�| j                  j                  |d4   dDgdg«      },| j                  j                  | d4   dDgdg«      }-|,�!|-�|,d   j                   |-d   j                   k7  rt        j                  dE«       y |-d   j                  d   }ng },g }-||k(  r| |"k(  s
||k(  rZ| |$k(  rU|dF   j                   | dF   j                   k7  s |d   j                   | d   j                   k7  �rt        j                  dG«       y ||k(  r| |#k(  s
||k(  rÙ| |%k(  rÔ|d   j                   | d   j                   k7  rt        j                  dH«       y | j                  j                  |d   dIdJgddg«      }(| j                  j                  |d   g dK¢g dL¢«      })|(�?|)�=| j                  j%                  |(d   j                  d   «      �|)d   j                  d"k7  r+t        j                  dM«       y t        j                  dN«       | j'                  |d   j(                  d   ||!||j(                  d   «      Š1‰1€t        j                  d«       y | j+                  |g«       | j+                  |d d «       | j+                  |d d «       | j+                  |d d «       | j+                  |d d «       | j+                  |d d «       |'rít-        |«      D ]h  \  }.}/|/j                  dOv sŒ|/|d   k7  sŒ| j+                  |d |. D �0cg c],  }0t        | j                  j/                  |0«      «      dk  sŒ+|0‘Œ. c}0«        n t-        | «      D ]h  \  }.}/|/j                  dPv sŒ|/| d   k7  sŒ| j+                  | d |. D �0cg c],  }0t        | j                  j/                  |0«      «      dk  sŒ+|0‘Œ. c}0«        nŸ n�| j+                  |«       | j+                  | «       | j+                  ,d d «       | j+                  -d d «       |(�;t        | j                  j/                  |(d   «      «      dk(  r| j+                  |(«       |)�| j+                  |)d d «       | j1                  | j                   «       | j2                  | j4                  ‰1j                   <   | j6                  j                  ‰1«       dQ| _        y c c}0w c c}0w )RNr   >   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                 ó<   •— | j                   ‰j                  d   k(  S rq  )r1   r   )r0  rj  s    €r   r/  z-FusionRotaryEmbeddings.fuse.<locals>.<lambda>w  s   ø€  D§I¡I°×1GÑ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ž  )rM   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Ú	enumerateÚget_childrenr=   rØ   rÙ   rÖ   rÜ   )2r   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�  Únrj  s2                                                    @r   r  zFusionRotaryEmbeddings.fuseX  s”  ø€ à�>‰> §¡Ñ-°$·,±,À%Ò2GØð ˆØ�<‰<˜5Ó ä�4—:‘:‹ fÑ,°·
±
¸1±ð Fñ 1ô —‘ÐkÔlØà"×IÑIÈ$ÓOˆOØÐ&Ü—‘Ð\Ô]Øð × Ñ ×'Ñ'¨Ô-ô #ÜÓJÈDÏJÉJ×L\ÑL\×LbÑLb×LmÑLmÓnóˆOô �Ó'¨1Ò,Ð,Ð,Ø�J‰J×Ñ×"Ñ"×-Ñ-×4Ñ4°_ÀQÑ5GÖHð( '+§j¡j×&BÑ&BØÚ>Úó'Ð#ð '+§j¡j×&BÑ&BØÚ:Úó'Ð#ð %<Ò$VÐ?VÐ!à&*§j¡j×&BÑ&BØÚeÚ+ó'Ð#ð '+§j¡j×&BÑ&BØÚaÚ+ó'Ð#ð '+§j¡j×&BÑ&BØÚuÚ1ó'Ð#ð '+§j¡j×&BÑ&BØÚmÚ.ó'Ð#ð (ÒxÐ+BÒxÐF]ÒxÐaxð "ð %Ð,Ð0EÐ0MÜ—‘ÐXÔYØà&*§j¡j×&BÑ&BØÚ7Úó'Ð#ð '+§j¡j×&BÑ&BØÚ3Úó'Ð#ð %<Ò$VÐ?VÐ!à&*§j¡j×&BÑ&BØÚ^Ú(ó'Ð#ð '+§j¡j×&BÑ&BØÚZÚ(ó'Ð#ð '+§j¡j×&BÑ&BØÚnÚ.ó'Ð#ð '+§j¡j×&BÑ&BØÚfÚ+ó'Ð#ð (ÒxÐ+BÒxÐF]ÒxÐaxð "ð %Ð,Ð0EÐ0MÜ—‘ÐXÔYØð & bÑ)×.Ñ.Ð2GÈÑ2K×2PÑ2PÒPØ(¨Ñ,×1Ñ1Ð5JÈ2Ñ5N×5SÑ5SÒSØ(¨Ñ,×1Ñ1Ð5JÈ2Ñ5N×5SÑ5SÒSØ(¨Ñ,×1Ñ1Ð5JÈ2Ñ5N×5SÑ5SÒSä—‘ÐbÔcØð —z‘z×3Ñ3ØØ˜Ð$Ø�A�óˆHð —z‘z×3Ñ3ØØ˜Ð Ø�A�óˆHð Ò) ˆFàˆ~Ü—‘ÐWÔXØð 1=Ñ-ˆH�i ØŸ™×5Ñ5ØÚmÚ+óˆJð
 Ÿ™×5Ñ5ØÚaÚ(óˆJð
 Ÿ™×5Ñ5ØÚWÚ%óˆJð
 Ÿ™×5Ñ5ØÚKÚ"óˆJð Ÿ™×5Ñ5ØÚSÚ%óˆJð
 Ð!Ø!ŸZ™Z×9Ñ9ØÚ_Ú,ó�
ð
 Ð%Ø%�Ø$ R™L×.Ñ.¨qÑ1‘	ØÐ'Ø%�Ø$ R™L×.Ñ.¨qÑ1‘	ØÐ'Ø%�Ø$ R™L×.Ñ.¨qÑ1�	Ø'¨™{×0Ñ0°Ñ3‘ØÐ'Ø%�Ø$ R™L×.Ñ.¨qÑ1�	Ø'¨™{×0Ñ0°Ñ3‘ØÐ'Ø%‘ä—‘Ð]Ô^Øð #+ÑˆH�iØŸ™×5Ñ5ØÚmÚ+óˆJð
 Ÿ™×5Ñ5ØÚaÚ(óˆJð
 Ÿ™×5Ñ5ØÚWÚ%óˆJð
 Ÿ™×5Ñ5ØÚKÚ"óˆJð Ÿ™×5Ñ5ØÚSÚ%óˆJð
 Ð!Ø!ŸZ™Z×9Ñ9ØÚ_Ú,ó�
ð
 Ð%Ø%�Ø$ R™L×.Ñ.¨qÑ1‘	ØÐ'Ø%�Ø$ R™L×.Ñ.¨qÑ1‘	ØÐ'Ø%�Ø$ R™L×.Ñ.¨qÑ1�	Ø'¨™{×0Ñ0°Ñ3‘ØÐ'Ø%�Ø$ R™L×.Ñ.¨qÑ1�	Ø'¨™{×0Ñ0°Ñ3‘ØÐ'Ø%‘ä—‘Ð]Ô^Øð '¨*Ñ4ÒO¸ÀZÑ9OˆOØ3=Ñ0ÐÐ0áà% b™\�
Ø% b™\�
Ø—?‘? j§o¡oÒ5Ü—L‘LÐ!mÔnØð 6:×5cÑ5cÐdlÓ5mÑ2�	˜9 lØÑ$Ü—L‘LÐ!nÔoØð   2Ò%Ø15·±×1MÑ1MØ  ™Ø"˜Ø˜ó2Ð.ð
 26·±×1MÑ1MØ  ™Ø"˜Ø˜ó2Ð.ð 3Ð:Ø5Ð=Ø5°aÑ8×=Ñ=ÐA[Ð\]ÑA^×AcÑAcÒcäŸ™Ð%nÔoØØ#=¸aÑ#@×#FÑ#FÀqÑ#I‘Là13Ð.Ø13Ð.à 
Ò*¨x¸:Ò/EØ 
Ò*¨x¸:Ò/Eà ‘|×(Ñ(¨H°R©L×,=Ñ,=Ò=ÀÈ"Á×ARÑARÐV^Ð_aÑVb×VgÑVgÓAgÜŸ™ð Côð Ø *Ò,°¸ZÒ1GØ 
Ò*¨x¸:Ò/Eà ‘|×(Ñ(¨H°R©L×,=Ñ,=Ò=ÜŸ™Øpôð à(,¯
©
×(DÑ(DØ  ™Ø! 7Ð+Ø˜A˜ó)Ð%ð )-¯
©
×(DÑ(DØ  ™Ú8Ú!ó)Ð%ð *Ð1Ø,Ð4ØŸ:™:×6Ñ6Ð7HÈÑ7L×7RÑ7RÐSTÑ7UÓVÐ^Ø,¨RÑ0×8Ñ8¸KÒGäŸ™Ð%rÔsØä—L‘LÐ!]Ô^à"×FÑFØ% bÑ)×0Ñ0°Ñ3ØØØØ—‘˜A‘óˆOð Ð&Ü—‘Ð\Ô]Øð ×$Ñ$ d VÔ,Ø×$Ñ$Ð%:¸3¸BÐ%?Ô@Ø×$Ñ$Ð%:¸3¸BÐ%?Ô@Ø×$Ñ$Ð%:¸3¸BÐ%?Ô@Ø×$Ñ$Ð%:¸3¸BÐ%?Ô@Ø×$Ñ$ V¨C¨R [Ô1áô %.¨hÓ$7ò ‘L�A�yØ ×(Ñ(¨NÒ:¸yÈHÐUVÉKÓ?WØ×0Ñ0¸XÀbÀq¸\Ö1r¸ÌSÐQU×Q[ÑQ[×QhÑQhÐijÓQkÓMlÐpqÓMq²!Ò1rÔsÙðô %.¨hÓ$7ò ‘L�A�yØ ×(Ñ(¨NÒ:¸yÈHÐUVÉKÓ?WØ×0Ñ0¸XÀbÀq¸\Ö1r¸ÌSÐQU×Q[ÑQ[×QhÑQhÐijÓQkÓMlÐpqÓMq²!Ò1rÔsÙñð
 ×(Ñ(¨Ô2Ø×(Ñ(¨Ô2Ø×(Ñ(Ð)CÀCÀRÐ)HÔIØ×(Ñ(Ð)CÀCÀRÐ)HÔIà$Ð0´S¸¿¹×9PÑ9PÐQbÐcdÑQeÓ9fÓ5gÐklÒ5lð ×,Ñ,Ð->Ô?Ø$Ð0Ø×,Ñ,Ð->¸sÀÐ-CÔDà×Ñ˜dŸn™nÔ-Ø=A×=QÑ=Qˆ×$Ñ$ _×%9Ñ%9Ñ:Ø×Ñ× Ñ  Ô1ØˆÕùò- 2sùò 2ss   é-,p
êp
ë#,p"
ìp"
)r  r  r  r
   r   r   r   rB  rk  r  rv  r”  r  r   r!  s   @r   r#  r#  T  sv   ø„ ð`˜iõ `ð°9ð Èó ð2H¸9ó HðT6àð6ð ð6ð ð	6ð
 ð6ð ó6òp_<öB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Õ     sK   ðó
 ã Ý ,Ý ß LÕ LÝ  à	ˆ×	Ñ	˜8Ó	$€ôA ˜Oô A ôH"h
 ˜Võ h
 r   