Ë
    �…jRŠ  ã                   óÎ  — d dl mZ d dlZd dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ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e«      Z G d
„ d«      Z G d„ d«      Z G d„ d«      Z G d„ d«      Z G d„ d«      Z G d„ d«      Z G d„ d«      Z  G d„ d«      Z! G d„ de«      Z" G d„ de«      Z# G d„ de"«      Z$ G d „ d!e"«      Z% G d"„ d#e"«      Z& G d$„ d%e"«      Z' G d&„ d'e«      Z(y)(é    )Ú	getLoggerN)ÚDynamoOnnxHelper)ÚFusion)ÚAttentionOpTypeÚFusionOptions)Ú FusionBiasSkipLayerNormalizationÚFusionSkipLayerNormalization)ÚNumpyHelper)Ú
ModelProtoÚ	NodeProtoÚTensorProtoÚhelperÚnumpy_helper)Ú	OnnxModelc                   ó   — e Zd Zd„ Zy)ÚProcessGemmWFuncc                 ó.   — t        j                  |d«      S )N©é   r   )ÚnpÚ	transpose©ÚselfÚxs     úh/root/aria/tools/markitdown-venv/lib/python3.12/site-packages/onnxruntime/transformers/onnx_model_phi.pyÚ__call__zProcessGemmWFunc.__call__   s   € Ü�|‰|˜A˜vÓ&Ð&ó    N©Ú__name__Ú
__module__Ú__qualname__r   © r   r   r   r      s   „ ó'r   r   c                   ó   — e Zd Zd„ Zy)ÚProcessMatMulQFuncc                 ó^   — t        j                  t        j                  |dd«      d   d«      S )Né   r   r   ©r   r   Úsplitr   s     r   r   zProcessMatMulQFunc.__call__   ó%   € Ü�|‰|œBŸH™H Q¨¨1Ó-¨aÑ0°&Ó9Ð9r   Nr   r"   r   r   r$   r$      ó   „ ó:r   r$   c                   ó   — e Zd Zd„ Zy)ÚProcessMatMulKFuncc                 ó^   — t        j                  t        j                  |dd«      d   d«      S )Nr&   r   r   r   r'   r   s     r   r   zProcessMatMulKFunc.__call__   r)   r   Nr   r"   r   r   r,   r,      r*   r   r,   c                   ó   — e Zd Zd„ Zy)ÚProcessMatMulVFuncc                 ó^   — t        j                  t        j                  |dd«      d   d«      S )Nr&   r   é   r   r'   r   s     r   r   zProcessMatMulVFunc.__call__$   r)   r   Nr   r"   r   r   r/   r/   #   r*   r   r/   c                   ó   — e Zd Zd„ Zy)ÚProcessBiasQFuncc                 ó:   — t        j                  |dd«      d   }|S )Nr&   éÿÿÿÿr   ©r   r(   r   s     r   r   zProcessBiasQFunc.__call__)   ó   € Ü�H‰H�Q˜˜2Ó˜qÑ!ˆØˆr   Nr   r"   r   r   r3   r3   (   ó   „ ór   r3   c                   ó   — e Zd Zd„ Zy)ÚProcessBiasKFuncc                 ó:   — t        j                  |dd«      d   }|S )Nr&   r5   r   r6   r   s     r   r   zProcessBiasKFunc.__call__/   r7   r   Nr   r"   r   r   r:   r:   .   r8   r   r:   c                   ó   — e Zd Zd„ Zy)ÚProcessBiasVFuncc                 ó:   — t        j                  |dd«      d   }|S )Nr&   r5   r1   r6   r   s     r   r   zProcessBiasVFunc.__call__5   r7   r   Nr   r"   r   r   r=   r=   4   r8   r   r=   c                   ó   — e Zd Zd„ Zy)ÚProcessRotCacheFuncc                 ót   — t        |j                  «      dk(  sJ ‚|j                  d   dk(  r|d d …dd…f   S |S )Nr1   r   é    r   é   )ÚlenÚshaper   s     r   r   zProcessRotCacheFunc.__call__;   s?   € ä�1—7‘7‹|˜qÒ Ð Ð Ø�7‰7�1‰:˜ÒØ’Q˜˜"˜�W‘:ÐØˆr   Nr   r"   r   r   r@   r@   :   s   „ ór   r@   c                   óÆ  ‡ — e Zd Zdedee   fˆ fd„Zdefd„Zd„ Z	d„ Z
d„ Zd	„ Zdd
„Zd„ Zd„ Zd„ Zdee   dedee   fd„Zddee   dee   defd„Zddee   dee   defd„Zd dee   dee   defd„Zddee   dee   defd„Zddee   dee   defd„Zd!dee   dee   defd„Zd!dee   dee   defd„Zd!dee   dee   defd„Z	 	 	 	 d"dee   dee   defd„Zˆ xZS )#ÚFissionÚmodelÚnodes_to_findc                 ó(   •— t         ‰| �  |d|«       y )NÚDONOTUSE©ÚsuperÚ__init__)r   rH   rI   Ú	__class__s      €r   rN   zFission.__init__E   s   ø€ ô
 	‰Ñ˜ 
¨MÕ:r   Úattn_op_typec                 ó   — || _         y ©N)rP   )r   rP   s     r   Úset_attention_op_typezFission.set_attention_op_typeL   s
   € Ø(ˆÕr   c                 ó$   — |dz   t        |«      z   S )NÚ_)Ústr)r   Úlayer_idÚnames      r   Ú	get_unamezFission.get_unameO   s   € Ø�c‰zœC ›MÑ)Ð)r   c                 ó„   — |D ]-  }||k(  s#|j                  |«      s|j                  |«      sŒ+|c S  t        d|› d�«      ‚)NzEdge z
 not found)ÚendswithÚ
startswithÚ
ValueError)r   ÚedgesrX   Úedges       r   Úget_edge_by_namezFission.get_edge_by_nameR   sI   € Øò 	ˆDØ�tŠ|˜tŸ}™}¨TÔ2°d·o±oÀdÕ6KØ’ð	ô ˜5   jÐ1Ó2Ð2r   c                 ó:   — | j                  |j                  |«      S rR   )r`   Úinput©r   ÚnoderX   s      r   Úget_input_by_namezFission.get_input_by_nameX   s   € Ø×$Ñ$ T§Z¡Z°Ó6Ð6r   c                 ó:   — | j                  |j                  |«      S rR   )r`   Úoutputrc   s      r   Úget_output_by_namezFission.get_output_by_name[   s   € Ø×$Ñ$ T§[¡[°$Ó7Ð7r   c                 ó€  — | j                   j                  |«      }t        j                  |«      } ||«      }t	        j
                  |€|dz   n|t        j                  |j                  |j                  «       j                  «       d¬«      }| j                   j                  || j                  «       |j                  S )NÚ
_processedT©Ú	data_typeÚdimsÚvalsÚraw)rH   Úget_initializerr
   Úto_arrayr   Úmake_tensorr   ÚFLOATrE   ÚflattenÚtobytesÚadd_initializerÚthis_graph_namerX   )r   Úinitializer_nameÚfunctorÚcustom_nameÚiÚ
i_np_arrayÚprocessed_i_np_arrayÚ
new_tensors           r   Úprocess_initializerzFission.process_initializer^   s¢   € Ø�J‰J×&Ñ&Ð'7Ó8ˆÜ ×)Ñ)¨!Ó,ˆ
Ù& zÓ2ÐÜ×'Ñ'Ø/:Ð/BÐ˜|Ò+ÈÜ!×'Ñ'Ø%×+Ñ+Ø%×-Ñ-Ó/×7Ñ7Ó9Øô
ˆ
ð 	�
‰
×"Ñ" :¨t×/CÑ/CÔDØ�‰Ðr   c                 óÈ   — | j                   j                  «       j                  j                  «       }||_        t
        j                  |j                  j                  _	        y rR   )
rH   ÚgraphÚ
value_infoÚaddrX   r   rs   ÚtypeÚtensor_typeÚ	elem_type©r   rX   Únew_value_infos      r   Úadd_fp32_value_infozFission.add_fp32_value_infol   óE   € ØŸ™×)Ñ)Ó+×6Ñ6×:Ñ:Ó<ˆØ"ˆÔÜ4?×4EÑ4Eˆ×Ñ×'Ñ'Õ1r   c                 óÈ   — | j                   j                  «       j                  j                  «       }||_        t
        j                  |j                  j                  _	        y rR   )
rH   r�   r‚   rƒ   rX   r   ÚINT64r„   r…   r†   r‡   s      r   Úadd_int64_value_infozFission.add_int64_value_infoq   rŠ   r   c                 ó’  — | j                   j                  «       j                  D ]F  }|j                  |k(  sŒ| j                   j                  «       j                  j	                  |«        n t        j                  |t        j                  |¬«      }| j                   j                  «       j                  j                  |g«       y )N©r†   rE   )
rH   r�   r‚   rX   Úremover   Úmake_tensor_value_infor   rs   Úextend)r   rX   rE   r‚   rˆ   s        r   Úreplace_fp32_value_infozFission.replace_fp32_value_infov   s›   € ØŸ*™*×*Ñ*Ó,×7Ñ7ò 	ˆJØ�‰ $Ó&Ø—
‘
× Ñ Ó"×-Ñ-×4Ñ4°ZÔ@Ùð	ô  ×6Ñ6ØÜ!×'Ñ'Øô
ˆð
 	�
‰
×ÑÓ×%Ñ%×,Ñ,¨nÐ-=Õ>r   Úsubgraph_nodesrW   Úlayer_known_edges_namesc                 óh  — |D �],  }t        |j                  «      D ]M  \  }}|dk(  rŒ||vsŒ| j                  ||«      |j                  |<   | j                  |j                  |   «       ŒO t        |j                  «      D ]M  \  }}|dk(  rŒ||vsŒ| j                  ||«      |j                  |<   | j                  |j                  |   «       ŒO | j                  ||j
                  «      |_        | j                  j                  |«       | j                  | j                  |j
                  <   �Œ/ y )NÚ )
Ú	enumeraterb   rY   r‰   rg   rX   Únodes_to_addÚappendrw   Únode_name_to_graph_name)r   r”   rW   r•   Únew_noder{   rX   s          r   Úset_unique_name_and_add_nodesz%Fission.set_unique_name_and_add_nodes‚   s  € ð 'ó 	OˆHÜ$ X§^¡^Ó4ò @‘��4Ø˜2’:ØØÐ!8Ò8Ø(,¯©°xÀÓ(F�H—N‘N 1Ñ%Ø×,Ñ,¨X¯^©^¸AÑ->Õ?ð@ô % X§_¡_Ó5ò A‘��4Ø˜2’:ØØÐ!8Ò8Ø)-¯©¸À$Ó)G�H—O‘O AÑ&Ø×,Ñ,¨X¯_©_¸QÑ-?Õ@ðAð !ŸN™N¨8°X·]±]ÓCˆHŒMØ×Ñ×$Ñ$ XÔ.Ø:>×:NÑ:NˆD×(Ñ(¨¯©Ó7ñ	Or   ÚinputsÚoutputsÚprefixc                 ó‚   — t        |«      dk(  sJ ‚t        |«      dk(  sJ ‚t        j                  d|||dz   d¬«      }|gS )Nr&   r   ÚLayerNormalizationÚ_LayerNormalizationg   €µøä>)rž   rŸ   rX   Úepsilon©rD   r   Ú	make_node©r   rž   rŸ   r    rd   s        r   Ú	layernormzFission.layernorm–   sT   € Ü�6‹{˜aÒÐÐÜ�7‹|˜qÒ Ð Ð Ü×ÑØ ØØØÐ/Ñ/Ø)ô
ˆð ˆvˆr   c                 óâ   — t        |«      dk(  sJ ‚t        |«      dk(  sJ ‚t        j                  d|d   |d   g|dz   g|dz   ¬«      }t        j                  d|dz   |d   g||d	z   ¬«      }||gS )
Nr&   r   ÚMatMulr   Ú
matmul_out©rž   rŸ   rX   ÚAddr1   ÚBiasr¥   )r   rž   rŸ   r    Úmatmulrƒ   s         r   ÚgemmzFission.gemm¢   s˜   € Ü�6‹{˜aÒÐÐÜ�7‹|˜qÒ Ð Ð Ü×!Ñ!ØØ˜1‘I˜v a™yÐ)Ø˜lÑ*Ð+Ø˜(Ñ"ô	
ˆô ×ÑØØ˜\Ñ)¨6°!©9Ð5ØØ˜&‘ô	
ˆð ˜ˆ}Ðr   c           	      ó†   — t        |«      dk(  sJ ‚t        |«      dk(  sJ ‚t        j                  d|||dz   d||¬«      }|gS )Né   r   ÚRotaryEmbeddingúcom.microsoft)rž   rŸ   rX   ÚdomainÚrotary_embedding_dimÚ	num_headsr¥   )r   rž   rŸ   r    Úrot_dimr·   rd   s          r   ÚrotaryzFission.rotary³   sZ   € Ü�6‹{˜aÒÐÐÜ�7‹|˜qÒ Ð Ð Ü×ÑØØØØÐ+Ñ+Ø"Ø!(Øô
ˆð ˆvˆr   c                 ó‚   — t        |«      dk(  sJ ‚t        |«      dk(  sJ ‚t        j                  d|||dz   d¬«      }|gS )Nr   ÚFastGelur´   )rž   rŸ   rX   rµ   r¥   r§   s        r   ÚfastgeluzFission.fastgeluÁ   sS   € Ü�6‹{˜aÒÐÐÜ�7‹|˜qÒ Ð Ð Ü×ÑØØØØ˜*Ñ$Ø"ô
ˆð ˆvˆr   c                 ó€   — t        |«      dk(  sJ ‚t        |«      dk(  sJ ‚t        j                  d|||dz   ¬«      }|gS )Nr1   r   r­   r¬   r¥   r§   s        r   rƒ   zFission.addÍ   sO   € Ü�6‹{˜aÒÐÐÜ�7‹|˜qÒ Ð Ð Ü×ÑØØØØ˜%‘ô	
ˆð ˆvˆr   c           	      ó†   — t        |«      dk(  sJ ‚t        |«      dk(  sJ ‚t        j                  d|||dz   d|d¬«      }|gS )Né   r&   ÚMultiHeadAttentionr´   r   )rž   rŸ   rX   rµ   r·   Úunidirectionalr¥   ©r   rž   rŸ   r    r·   rd   s         r   ÚmhazFission.mhaØ   sZ   € Ü�6‹{˜aÒÐÐÜ�7‹|˜qÒ Ð Ð Ü×ÑØ ØØØÐ.Ñ.Ø"ØØô
ˆð ˆvˆr   c           	      ó†   — t        |«      dk(  sJ ‚t        |«      dk(  sJ ‚t        j                  d|||dz   d||¬«      }|gS )Né   r&   ÚGroupQueryAttentionr´   )rž   rŸ   rX   rµ   r·   Úkv_num_headsr¥   rÂ   s         r   ÚgqazFission.gqaæ   sZ   € Ü�6‹{˜aÒÐÐÜ�7‹|˜qÒ Ð Ð Ü×ÑØ!ØØØÐ/Ñ/Ø"ØØ"ô
ˆð ˆvˆr   c                 óŠ   — t        |«      dk(  sJ ‚t        |«      dk(  sJ ‚t        j                  d|||dz   d|ddd¬«	      }|gS )Né   r1   Ú	Attentionr´   r   rB   )rž   rŸ   rX   rµ   r·   rÁ   Ú	do_rotaryr¶   r¥   rÂ   s         r   Ú	attentionzFission.attentionô   s_   € Ü�6‹{˜aÒÐÐÜ�7‹|˜qÒ Ð Ð Ü×ÑØØØØ˜+Ñ%Ø"ØØØØ!#ô

ˆð ˆvˆr   c                 óŠ   — t        |«      dk(  sJ ‚t        |«      dk(  sJ ‚t        j                  d|||dz   d||||¬«	      }|gS )Né   r   ÚPagedAttentionzvllm.ort.ext)rž   rŸ   rX   rµ   r·   Únum_kv_headsÚ	head_sizeÚscaler¥   )r   rž   rŸ   r    r·   rÒ   rÓ   rd   s           r   Ú
paged_attnzFission.paged_attn  sb   € ô �6‹{˜aÒÐÐÜ�7‹|˜qÒ Ð Ð Ü×ÑØØØØÐ*Ñ*Ø!ØØ"ØØô

ˆð ˆvˆr   rR   )r—   )r—   rB   rB   )r—   rB   )r—   rB   éP   g   À%Ÿ¼?)r   r    r!   r   ÚlistrV   rN   r   rS   rY   r`   re   rh   r   r‰   r�   r“   r   Úintr�   r¨   r°   r¹   r¼   rƒ   rÃ   rÈ   rÍ   rÔ   Ú__classcell__©rO   s   @r   rG   rG   D   sÆ  ø„ ð;àð;ð ˜C‘yõ;ð)°/ó )ò*ò3ò7ò8óòFò
Fò

?ðOØ" 9™oðOØ9<ðOØW[Ð\_ÑW`óOñ(
  S¡	ð 
°D¸±Ið 
Àsó 
ñ˜4 ™9ð ¨t°C©yð À#ó ñ"˜T #™Yð °°c±ð ÀCó ñ
˜t C™yð 
°4¸±9ð 
Àcó 
ñ	˜$˜s™)ð 	¨d°3©ið 	Àó 	ñ˜$˜s™)ð ¨d°3©ið Àó ñ˜$˜s™)ð ¨d°3©ið Àó ñ  S¡	ð °D¸±Ið Àsó ð( ØØØ!ñà�S‘	ðð �c‘ðð ÷	r   rG   c                   óV   ‡ — e Zd Zdededefˆ fd„Zdefd„Zd„ Zde	fd	„Z
de	fd
„Zˆ xZS )ÚPhi2PreProcessorrH   r·   Úhidden_sizec                 ó\   •— t         ‰| �  |«       d| _        || _        || _        d| _        y )NrB   Úmodeling_phi_PhiModel_model_1)rM   rN   Únum_hidden_layersÚnum_attention_headsrÜ   Ú	func_name©r   rH   r·   rÜ   rO   s       €r   rN   zPhi2PreProcessor.__init__  s/   ø€ Ü‰Ñ˜ÔØ!#ˆÔØ#,ˆÔ Ø&ˆÔà8ˆ�r   Úreturnc                 óŽ  — i }d|d<   d|d<   d|d<   d|d<   t        d	| j                  d	«      D ]0  }d
|› �|d|› �<   d|› �|d|› �<   d|› �|d|› d�<   d|› �|d|› d�<   Œ2 | j                  j                  j                  D �cg c]  }|j
                  ‘Œ }}d|v rd|v rd|d<   d|d<   |S d|v rd|v sJ ‚d|d<   d|d<   |S c c}w )NÚlogitsÚ	lm_head_1Ú	input_idsÚl_input_ids_Ú
past_key_0Ú
key_statesÚpast_value_0Úvalue_statesr   Ú	past_key_Úkey_states_Úpast_value_Úvalue_states_Úpresent_key_Úmodel_layers_Ú_1Úpresent_value_Ú_1_1Úmodel_layers_0_1_1Úmodel_layers_0_1_2Úpresent_key_0Úpresent_value_0Úmodel_layers_0_1)Úrangerß   rH   r�   rg   rX   )r   Ú	edge_dictr{   ÚorŸ   s        r   Úget_phi2_edge_dictz#Phi2PreProcessor.get_phi2_edge_dict&  sB  € Øˆ	Ø!)ˆ	�+ÑØ$/ˆ	�.Ñ!Ø".ˆ	�,ÑØ$2ˆ	�.Ñ!Ü�q˜$×0Ñ0°!Ó4ò 	FˆAØ-6°q°c¨?ˆI˜ A 3Ð'Ñ(Ø/:¸1¸#Ð->ˆI˜ a SÐ)Ñ*Ø1=¸a¸SÐ/AˆI˜ a S¨Ð+Ñ,Ø3AÀ!ÀÐ1EˆI˜ a S¨Ð-Ò.ð		Fð $(§:¡:×#3Ñ#3×#:Ñ#:Ö;˜a�1—6“6Ð;ˆÐ;Ø 7Ñ*Ð/CÀwÑ/NØ.=ˆIÐ*Ñ+Ø.?ˆIÐ*Ñ+ð
 Ðð &¨Ñ0Ð5IÈWÑ5TÐTÐTØ,;ˆIÐ(Ñ)Ø.?ˆIÐ*Ñ+ØÐùò <s   ÂCc                 ó¼   — d}| j                   j                  j                  D ]7  }|j                  j	                  |«      }|dk7  sŒ$|j                  |d  |_        Œ9 y )NÚ)modeling_phi_PhiDecoderLayer_model_layersr5   )rH   r�   rd   Úop_typeÚfind)r   Úphi2_transformer_layer_namerd   Úindexs       r   Úsimplify_phi2_op_typez&Phi2PreProcessor.simplify_phi2_op_type<  sU   € Ø&QÐ#Ø—J‘J×$Ñ$×)Ñ)ò 	4ˆDØ—L‘L×%Ñ%Ð&AÓBˆEØ˜‹{Ø#Ÿ|™|¨E¨FÐ3�•ñ	4r   rP   c                 ó¨
  — |t         j                  k(  | _        |t         j                  k(  | _        | j
                  j                  }g }|j                  D �]A  }d|j                  v �r t        j                  |j                  | j                  st        j                  nt        j                  ddg¬«      }t        j                  dt        j                  dg¬«      }t        j                  dt        j                  ddg¬«      }t        j                  dt        j                  ddg¬«      }t        j                  d	t        j                  dg¬«      }	| j                  s|j                  |||g«      n|j                  |||	g«       | j                  ršd
|j                  v s�ŒOt        j                  |j                  j                  d
d«      |j                   j"                  j$                  dd| j&                  d| j(                  | j&                  z  g¬«      }
|j                  |
g«       �ŒÙ| j                  rÈd
|j                  v rTt        j                  |j                  |j                   j"                  j$                  g d¢¬«      }
|j                  |
g«       d|j                  v s�ŒWt        j                  |j                  |j                   j"                  j$                  g d¢¬«      }
|j                  |
g«       �Œ­d
|j                  v sd|j                  v s�ŒËt        j                  |j                  |j                   j"                  j$                  d| j&                  d| j(                  | j&                  z  g¬«      }
|j                  |
g«       �ŒD |j+                  d«       |j                  j                  |«       g }t-        |j.                  «      D �]F  \  }}|dk(  r|j                  |g«       Œ| j                  r˜d|j                  v sŒ:t        j                  |j                  j                  dd«      |j                   j"                  j$                  dd| j&                  d| j(                  | j&                  z  g¬«      }
|j                  |
g«       ŒÃ| j                  rŒÐt        j                  |j                  |j                   j"                  j$                  d| j&                  d| j(                  | j&                  z  g¬«      }
|j                  |
g«       �ŒI |j+                  d«       |j.                  j                  |«       y )Nrç   Ú
batch_sizeÚseq_lenr�   Ústepr   Úposition_idsÚattention_maskÚinput_metadataÚpast_keyÚpastr1   Úpast_seq_len)Ú
num_blocksr·   Úhead_size_xÚ
block_sizeÚblock_xÚ
past_value)r  r·   rÒ   r  rb   r   Úpresent_keyÚpresentÚtotal_seq_lenrg   )r   rË   Úuse_attnrÐ   Úuse_vllmrH   r�   rb   rX   r   r‘   r   ÚINT32rŒ   r’   Úreplacer„   r…   r†   rà   rÜ   Ú
ClearFieldr˜   rg   )r   rP   r�   Ú
new_inputsÚviÚvi_iidÚvi_stepÚvi_pidÚvi_maskÚvi_metaÚvi_cacheÚnew_outputsr{   s                r   Úprocess_graph_ioz!Phi2PreProcessor.process_graph_ioC  sj  € Ø$¬×(AÑ(AÑAˆŒØ$¬×(FÑ(FÑFˆŒØ—
‘
× Ñ ˆØˆ
Ø—+‘+ó N	2ˆBØ˜bŸg™gÒ%Ü×6Ñ6Ø—G‘GØ7;·}²}œk×/Ò/Ì+×J[ÑJ[Ø'¨Ð3ô�ô
 !×7Ñ7ØÜ)×/Ñ/Ø˜#ô�ô
  ×6Ñ6Ø"Ü)×/Ñ/Ø'¨Ð3ô�ô
 !×7Ñ7Ø$Ü)×/Ñ/Ø'¨Ð3ô�ô
 !×7Ñ7Ø$Ü)×/Ñ/Ø˜#ô�ð  Ÿ=š=ð ×%Ñ% v¨w¸Ð&@ÔAà#×*Ñ*¨F°F¸GÐ+DÓEøà�}Š}Ø §¡Ó(Ü%×<Ñ<ØŸ™Ÿ™¨
°FÓ;Ø"$§'¡'×"5Ñ"5×"?Ñ"?àØ(Ø ×4Ñ4Ø*Ø ×,Ñ,°×0HÑ0HÑHðô
 �Hð ×%Ñ% x jÖ1Ø—’Ø §¡Ñ(Ü%×<Ñ<ØŸ™Ø"$§'¡'×"5Ñ"5×"?Ñ"?Úaô �Hð
 ×%Ñ% x jÔ1Ø 2§7¡7Ó*Ü%×<Ñ<ØŸ™Ø"$§'¡'×"5Ñ"5×"?Ñ"?òô	 �Hð ×%Ñ% x jÖ1à §¡Ñ(¨L¸B¿G¹GÓ,CÜ%×<Ñ<ØŸ™Ø"$§'¡'×"5Ñ"5×"?Ñ"?à(Ø ×4Ñ4Ø*Ø ×,Ñ,°×0HÑ0HÑHð	ô	 �Hð ×%Ñ% x jÖ1ð]N	2ð` 	×Ñ˜Ô!Ø�‰×Ñ˜:Ô&àˆÜ˜uŸ|™|Ó,ó 	3‰EˆAˆrØ�AŠvØ×"Ñ" B 4Õ(à—=’=Ø$¨¯©Ò/Ü#)×#@Ñ#@ØŸG™GŸO™O¨M¸9ÓEØ&(§g¡g×&9Ñ&9×&CÑ&Cà !Ø ,Ø $× 8Ñ 8Ø /Ø $× 0Ñ 0°D×4LÑ4LÑ Lð#ô
$˜ð $×*Ñ*¨H¨:Õ6Ø—]’]Øä%×<Ñ<ØŸ™Ø"$§'¡'×"5Ñ"5×"?Ñ"?à(Ø ×4Ñ4Ø+Ø ×,Ñ,°×0HÑ0HÑHð	ô	 �Hð  ×&Ñ&¨ zÖ2ð?	3ðB 	×Ñ˜Ô"Ø�‰×Ñ˜KÕ(r   c                 ó´  — d }| j                   j                  D ]5  }|j                  j                  | j                  «      sŒ)|j                  } n |€J ‚| j                  |«       | j                  | j                  «       «       | j                  «        | j                  «        |t        j                  k(  r| j                  «        | j                  |«       y rR   )rH   Ú	functionsrX   r[   rá   Úunroll_functionÚupdate_edgesrþ   r  Úremove_dropout_layerr   rÐ   Úremove_lm_head_layerr&  )r   rP   Úfunction_nameÚfuncs       r   Úpreprocess_onnxz Phi2PreProcessor.preprocess_onnxÀ  sµ   € ØˆØ—J‘J×(Ñ(ò 	ˆDØ�y‰y×!Ñ! $§.¡.Õ1Ø $§	¡	�Ùð	ð Ð(Ð(Ð(Ø×Ñ˜]Ô+Ø×Ñ˜$×1Ñ1Ó3Ô4Ø×"Ñ"Ô$Ø×!Ñ!Ô#Øœ?×9Ñ9Ò9Ø×%Ñ%Ô'Ø×Ñ˜lÕ+r   )r   r    r!   r   r×   rN   Údictrþ   r  r   r&  r/  rØ   rÙ   s   @r   rÛ   rÛ     sI   ø„ ð9˜jð 9°Sð 9Àsõ 9ð Dó ò,4ð{)¨_ó {)ðz,¨O÷ ,r   rÛ   c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚFissionTransformerEmbeddingPhirH   c                 ó(   •— t         ‰| �  |dg«       y )NÚ6torch_nn_modules_sparse_Embedding_model_embed_tokens_1rL   ©r   rH   rO   s     €r   rN   z'FissionTransformerEmbeddingPhi.__init__Ñ  s   ø€ ô 	‰Ñ˜Ð!YÐ ZÕ[r   c                 óº  — t         j                  d|j                  «       t        |j                  «      dk(  sJ ‚t        |j
                  «      dk(  sJ ‚|j                  d   }|j
                  d   }| j                  |d«      }|||g}t        j                  d||g|gd¬«      g}| j                  |d|«       | j                  j                  |«       d	| _        y )
NúOptimizing %s...r1   r   r   zembed_tokens.weightÚGatherÚEmbedding_Gatherr¬   T)ÚloggerÚinforX   rD   rb   rg   re   r   r¦   r�   Únodes_to_removerš   Úprune_graph)	r   rd   Úinput_name_to_nodesÚoutput_name_to_noderb   rg   Ú	embeddingr•   r”   s	            r   Úfusez#FissionTransformerEmbeddingPhi.fuse×  s×   € Ü�‰Ð&¨¯	©	Ô2ä�4—:‘:‹ !Ò#Ð#Ð#Ü�4—;‘;Ó 1Ò$Ð$Ð$à—
‘
˜1‘ˆØ—‘˜Q‘ˆà×*Ñ*¨4Ð1FÓGˆ	à#(¨&°)Ð"<Ðô ×ÑØØ! 5Ð)Ø˜Ø'ô	ð
ˆð 	×*Ñ*¨>¸1Ð>UÔVØ×Ñ×#Ñ# DÔ)ØˆÕr   ©r   r    r!   r   rN   rA  rØ   rÙ   s   @r   r2  r2  Ð  s   ø„ ð\àõ\ö r   r2  c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚFissionTransformerLayerNormPhirH   c                 ó(   •— t         ‰| �  |dg«       y )NÚ@torch_nn_modules_normalization_LayerNorm_model_final_layernorm_1rL   r5  s     €r   rN   z'FissionTransformerLayerNormPhi.__init__ó  s   ø€ ô 	‰Ñ˜Ð!cÐ dÕer   c                 óF  — t         j                  d|j                  «       t        |j                  «      dk(  sJ ‚t        |j
                  «      dk(  sJ ‚|j                  d   }|j
                  d   }| j                  |d«      }| j                  |d«      }||||g}g }	|	j                  | j                  |||g|gd«      «       | j                  |	d|«       | j                  |g d	¢«       | j                  |g d	¢«       | j                  j                  |«       d
| _        y )Nr7  r&   r   r   zfinal_layernorm.weightzfinal_layernorm.biasÚFinaléc   ©r  r  rÜ   T)r:  r;  rX   rD   rb   rg   re   r’   r¨   r�   r“   r<  rš   r=  )
r   rd   r>  r?  rb   rg   Ú	ln_weightÚln_biasr•   r”   s
             r   rA  z#FissionTransformerLayerNormPhi.fuseù  s  € Ü�‰Ð&¨¯	©	Ô2ä�4—:‘:‹ !Ò#Ð#Ð#Ü�4—;‘;Ó 1Ò$Ð$Ð$à—
‘
˜1‘ˆØ—‘˜Q‘ˆà×*Ñ*¨4Ð1IÓJˆ	Ø×(Ñ(¨Ð/EÓFˆà#(¨&°)¸WÐ"EÐàˆØ×Ñ˜dŸn™n¨e°YÀÐ-HÈ6È(ÐT[Ó\Ô]à×*Ñ*¨>¸2Ð?VÔWà×$Ñ$ UÒ,TÔUØ×$Ñ$ VÒ-UÔVà×Ñ×#Ñ# DÔ)ØˆÕr   rB  rÙ   s   @r   rD  rD  ò  s   ø„ ðfàõfö r   rD  c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )Ú!FissionTransformerCausalLMHeadPhirH   c                 ó(   •— t         ‰| �  |dg«       y )NÚ(torch_nn_modules_linear_Linear_lm_head_1rL   r5  s     €r   rN   z*FissionTransformerCausalLMHeadPhi.__init__  s   ø€ ô 	‰Ñ˜Ð!KÐ LÕMr   c                 óv  — t         j                  d|j                  «       t        |j                  «      dk(  sJ ‚t        |j
                  «      dk(  sJ ‚|j                  d   }|j
                  d   }| j                  | j                  |d«      t        «       «      }| j                  |d«      }||||g}g }	|	j                  | j                  |||g|gd«      «       | j                  |	d	|«       | j                  |g d
¢«       | j                  |g d¢«       | j                  j                  |«       d| _        y )Nr7  rÊ   r   r1   r   zlm_head.weightzlm_head.biasÚLMHead_rI  rJ  )r  r  i È  T)r:  r;  rX   rD   rb   rg   r   re   r   r’   r°   r�   r“   r<  rš   r=  )
r   rd   r>  r?  rb   rg   Ú	fc_weightÚfc_biasr•   r”   s
             r   rA  z&FissionTransformerCausalLMHeadPhi.fuse  s  € Ü�‰Ð&¨¯	©	Ô2ä�4—:‘:‹ !Ò#Ð#Ð#Ü�4—;‘;Ó 1Ò$Ð$Ð$à—
‘
˜1‘ˆØ—‘˜Q‘ˆà×,Ñ,¨T×-CÑ-CÀDÐJZÓ-[Ô]mÓ]oÓpˆ	Ø×(Ñ(¨¨~Ó>ˆà#(¨&°)¸WÐ"EÐàˆØ×Ñ˜dŸi™i¨°	¸7Ð(CÀfÀXÈyÓYÔZà×*Ñ*¨>¸2Ð?VÔWà×$Ñ$ UÒ,TÔUØ×$Ñ$ VÒ-MÔNà×Ñ×#Ñ# DÔ)ØˆÕr   rB  rÙ   s   @r   rN  rN    s   ø„ ðNàõNö r   rN  c                   ó@   ‡ — e Zd Zdedefˆ fd„Zd„ Zd„ Zd„ Zd„ Z	ˆ xZ
S )ÚFissionTransformerBlockPhirH   r·   c                 ó¶   •— || _         d}i | _        g }t        |«      D ](  }d|› d�}|j                  |«       || j                  |<   Œ* t        ‰| �  ||«       y )NrB   Ú*modeling_phi_PhiDecoderLayer_model_layers_ró   )r·   Úfunc_to_layer_idrû   rš   rM   rN   )r   rH   r·   Úmax_num_layersrI   Úlayerrá   rO   s          €r   rN   z#FissionTransformerBlockPhi.__init__5  so   ø€ ð
 #ˆŒØˆØ "ˆÔØˆÜ˜>Ó*ò 	5ˆEØDÀUÀGÈ2ÐNˆIØ× Ñ  Ô+Ø/4ˆD×!Ñ! )Ò,ð	5ô
 	‰Ñ˜ Õ.r   c                 ó4   — | j                   |j                     S rR   )rY  r  )r   rd   s     r   Úget_layer_idz'FissionTransformerBlockPhi.get_layer_idE  s   € Ø×$Ñ$ T§\¡\Ñ2Ð2r   c                 óØ  — t        j                  ddgdgdt        j                  ¬«      t        j                  dddgdgd	¬
«      t        j                  dddgdgd¬
«      t        j                  ddgdgdt        j                  ¬«      t        j                  ddgdgd¬
«      t        j                  dddgdgdd¬«      t        j                  ddgdgdt        j                  ¬«      g}|S )NÚCastr  Ú
mask_int64ÚCast_gqa_aux_0)rž   rŸ   rX   ÚtoÚ	ReduceSumÚoneÚmask_row_sumsÚReduceSum_gqa_auxr¬   ÚSubÚseqlens_k_int64ÚSub_gqa_auxÚ	seqlens_kÚCast_gqa_aux_1ÚShapeÚ
mask_shapeÚShape_gqa_aux_0r8  Útotal_seq_len_int64ÚGather_gqa_aux_0r   )rž   rŸ   rX   ÚaxisÚtotal_sequence_lengthÚCast_gqa_aux_2)r   r¦   r   rŒ   r  )r   Úgqa_aux_nodess     r   Úget_gqa_aux_nodesz,FissionTransformerBlockPhi.get_gqa_aux_nodesH  s  € ä×ÑØØ(Ð)Ø%˜Ø%Ü×$Ñ$ôô ×ÑØØ$ eÐ,Ø(Ð)Ø(ô	ô ×ÑØØ'¨Ð/Ø*Ð+Ø"ô	ô ×ÑØØ)Ð*Ø$˜Ø%Ü×$Ñ$ôô ×Ñ˜W¨l¨^ÀlÀ^ÐZkÔlÜ×ÑØØ$ eÐ,Ø.Ð/Ø'Øôô ×ÑØØ-Ð.Ø0Ð1Ø%Ü×$Ñ$ôðG*
ˆðV Ðr   c	                 ón  — | j                   j                  |«      }	| j                   j                  |«      }
| j                   j                  |«      }t        j                  t	        j
                  |	«      d«      }t        j                  t	        j
                  |
«      d«      }t        j                  t	        j
                  |«      d«      }t        j                  |||fd¬«      }| j                   j                  |«      }| j                   j                  |«      }| j                   j                  |«      }t	        j
                  |«      }t	        j
                  |«      }t	        j
                  |«      }t        j                  |||fd¬«      }|j                  d   }t        j                  |t        j                  ||dz  g|j                  «       j                  «       d¬«      }| j                   j                  || j                  «       t        j                  |t        j                  |dz  g|j                  «       j                  «       d¬«      }| j                   j                  || j                  «       | j!                  |j"                  «       | j!                  |j"                  «       ||fS )Nr   r   )rq  r   r&   Trk   )rH   rp   r   r   r
   rq   ÚstackrE   r   rr   r   rs   rt   ru   rv   rw   r‰   rX   )r   Úq_wÚk_wÚv_wÚq_bÚk_bÚv_bÚweight_nameÚ	bias_nameÚq_weightÚk_weightÚv_weightÚqwÚkwÚvwÚ
qkv_weightÚq_biasÚk_biasÚv_biasÚqbÚkbÚvbÚqkv_biasrÜ   ÚweightÚbiass                             r   Úpack_qkv_gemmz(FissionTransformerBlockPhi.pack_qkv_gemmv  s  € Ø—:‘:×-Ñ-¨cÓ2ˆØ—:‘:×-Ñ-¨cÓ2ˆØ—:‘:×-Ñ-¨cÓ2ˆÜ�\‰\œ+×.Ñ.¨xÓ8¸&ÓAˆÜ�\‰\œ+×.Ñ.¨xÓ8¸&ÓAˆÜ�\‰\œ+×.Ñ.¨xÓ8¸&ÓAˆÜ—X‘X˜r 2 r˜l°Ô3ˆ
à—‘×+Ñ+¨CÓ0ˆØ—‘×+Ñ+¨CÓ0ˆØ—‘×+Ñ+¨CÓ0ˆÜ×!Ñ! &Ó)ˆÜ×!Ñ! &Ó)ˆÜ×!Ñ! &Ó)ˆÜ—8‘8˜R  R˜L¨qÔ1ˆà ×&Ñ& qÑ)ˆä×#Ñ#ØÜ!×'Ñ'Ø˜{¨Q™Ð/Ø×#Ñ#Ó%×-Ñ-Ó/Øô
ˆð 	�
‰
×"Ñ" 6¨4×+?Ñ+?Ô@ä×!Ñ!ØÜ!×'Ñ'Ø ‘/Ð"Ø×!Ñ!Ó#×+Ñ+Ó-Øô
ˆð 	�
‰
×"Ñ" 4¨×)=Ñ)=Ô>à× Ñ  §¡Ô-Ø× Ñ  §¡Ô+à˜IÐ%Ð%r   c                 óŒ  — t         j                  d|j                  «       t         j                  d| j                  › �«       | j	                  |«      }|j
                  d   }| j                  |d«      }| j                  |d«      }|j                  d   }| j                  |d«      }	| j                  |d«      }
| j                  |d	«      }| j                  |d
«      }d\  }}}}}}d\  }}d\  }}| j                  t        j                  k7  �r	| j                  | j                  |d«      t        «       «      }| j                  | j                  |d«      t        «       «      }| j                  | j                  |d«      t        «       «      }| j                  |d«      }| j                  |d«      }| j                  |d«      }| j                  | j                  |d«      t        «       «      }| j                  | j                  |d«      t        «       «      }n›| j                  | j                  |d«      | j                  |d«      | j                  |d«      | j                  |d«      | j                  |d«      | j                  |d«      | j                  |d«      | j                  |d«      «      \  }}| j                  | j                  |d«      t        «       «      }| j                  |d«      }| j                  | j                  |d«      t        «       «      }| j                  | j                  |d«      t        «       «      }| j                  |d«      }| j                  |d«      }g }|j!                  |||g«       |j!                  ||	|
g«       |j!                  ||g«       | j                  t        j                  k7  r|j!                  ||||||||g«       n|j!                  ||g«       |j!                  ||||||g«       |j!                  g d¢«       g }|j!                  | j#                  |||gdg«      «       |j!                  | j%                  d||gd gd!«      «       |j!                  | j%                  d||gd"gd#«      «       |j!                  | j'                  d"gd$g«      «       |j!                  | j%                  d$||gd%gd&«      «       |j!                  | j)                  d d%gd'gd(«      «       |j!                  | j)                  |d'g|gd)«      «       | j                  t        j                  k7  �rg|j!                  | j%                  d||gd*gd+«      «       |j!                  | j%                  d||gd,gd-«      «       |j!                  | j%                  d||gd.gd/«      «       | j                  t        j*                  k(  rd0nd1}|j!                  | j-                  d*|||gd2gd+«      «       |j!                  | j-                  d,|||gd3gd-«      «       | j                  t        j.                  k(  r.|j!                  | j1                  d2d3d.d4d5d4||gd|	|
g«      «       �n€| j                  t        j2                  k(  rØ|j!                  | j5                  d2d3d.||d6d7gd|	|
g«      «       |dk(  �r2| j7                  «       } | D ]@  }!| j8                  j;                  |!«       | j<                  | j>                  |!j                  <   ŒB | j@                  jC                  tE        jF                  tI        jJ                  d8gd9¬:«      d;¬<«      | j<                  «       n‹| j                  t        j*                  k(  rn|j!                  | jM                  d2d3d.||d=gdg«      «       nEd>|› �}"d?|› �}#|j!                  |"|#g«       |j!                  | jO                  d||d5|"gd|#g«      «       | jQ                  |||«       | jS                  |g d@¢«       | jS                  |g d@¢«       | jT                  j;                  |«       dA| _+        y )BNr7  zAttentionOpType: r   r  r  r5   r  Úpresent_valuezinput_layernorm.weightzinput_layernorm.bias)NNNNNN)NNzself_attn.q_proj.weightzself_attn.k_proj.weightzself_attn.v_proj.weightzself_attn.q_proj.biaszself_attn.k_proj.biaszself_attn.v_proj.biaszrotary_emb.cos_cachedzrotary_emb.sin_cachedÚattn_qkv_weightÚattn_qkv_biaszself_attn.dense.weightzself_attn.dense.biaszmlp.fc1.weightzmlp.fc2.weightzmlp.fc1.biaszmlp.fc2.bias)r  r	  rj  rr  r  r
  Úln_outÚattn_outÚattn_add_outÚOutProj_Úfc1_outÚFC1_Úgelu_outÚfc2_outÚFC2_Úresidual_1_outÚ
Residual_1Ú
Residual_2ÚqueryÚQ_ÚkeyÚK_ÚvalueÚV_r
  r	  Ú	query_rotÚkey_rotr—   r  rj  rr  r   Úint64)Údtyperd  )rX   r  Úpast_Úpresent_rJ  T),r:  r;  rX   rP   r]  rb   re   rg   rh   r   rË   r   r   r@   r�  rY   r’   r¨   r°   r¼   rƒ   rÐ   r¹   rÀ   rÃ   rÆ   rÈ   ru  r™   rš   rw   r›   rH   rv   r   Ú
from_arrayr   ÚarrayrÔ   rÍ   r�   r“   r<  r=  )$r   rd   r>  r?  rW   Úi_hidden_statesÚi_key_cacheÚi_value_cacheÚo_hidden_statesÚo_key_cacheÚo_value_cacherK  rL  Úattn_q_weightÚattn_q_biasÚattn_k_weightÚattn_k_biasÚattn_v_weightÚattn_v_biasr“  r”  Ú	cos_cacheÚ	sin_cacheÚattn_out_weightÚattn_out_biasÚmlp_fc1_weightÚmlp_fc2_weightÚmlp_fc1_biasÚmlp_fc2_biasr•   r”   Úpos_ids_namert  rœ   Ú	past_nameÚpresent_names$                                       r   rA  zFissionTransformerBlockPhi.fuse   sH  € ô 	�‰Ð&¨¯	©	Ô2ä�‰Ð'¨×(9Ñ(9Ð':Ð;Ô<à×$Ñ$ TÓ*ˆàŸ*™* Q™-ˆØ×,Ñ,¨T°:Ó>ˆØ×.Ñ.¨t°\ÓBˆàŸ+™+ b™/ˆØ×-Ñ-¨d°MÓBˆØ×/Ñ/°°oÓFˆà×*Ñ*¨4Ð1IÓJˆ	Ø×(Ñ(¨Ð/EÓFˆð^
ÑZˆ�{ M°;ÀÈ{ð *4Ñ&ˆ˜Ø)Ñˆ	�9à×Ñ¤× 9Ñ 9Ó9Ø ×4Ñ4Ø×&Ñ& tÐ-FÓGÔIYÓI[óˆMð !×4Ñ4Ø×&Ñ& tÐ-FÓGÔIYÓI[óˆMð !×4Ñ4Ø×&Ñ& tÐ-FÓGÔIYÓI[óˆMð ×0Ñ0°Ð7NÓOˆKØ×0Ñ0°Ð7NÓOˆKØ×0Ñ0°Ð7NÓOˆKà×0Ñ0Ø×&Ñ& tÐ-DÓEÔGZÓG\óˆIð ×0Ñ0Ø×&Ñ& tÐ-DÓEÔGZÓG\ó‰Ið .2×-?Ñ-?Ø×&Ñ& tÐ-FÓGØ×&Ñ& tÐ-FÓGØ×&Ñ& tÐ-FÓGØ×&Ñ& tÐ-DÓEØ×&Ñ& tÐ-DÓEØ×&Ñ& tÐ-DÓEØ—‘˜xÐ):Ó;Ø—‘˜x¨Ó9ó	.Ñ*ˆO˜]ð ×2Ñ2Ø×"Ñ" 4Ð)AÓBÔDTÓDVó
ˆð ×.Ñ.¨tÐ5KÓLˆà×1Ñ1°$×2HÑ2HÈÐO_Ó2`ÔbrÓbtÓuˆØ×1Ñ1°$×2HÑ2HÈÐO_Ó2`ÔbrÓbtÓuˆØ×-Ñ-¨d°NÓCˆØ×-Ñ-¨d°NÓCˆà"$ÐØ×&Ñ&¨¸ÀmÐ'TÔUØ×&Ñ&¨¸ÀmÐ'TÔUØ×&Ñ&¨	°7Ð';Ô<Ø×Ñ¤× 9Ñ 9Ò9Ø#×*Ñ*à!ØØ!ØØ!ØØØð	õð $×*Ñ*¨O¸]Ð+KÔLØ×&Ñ&Ø˜m¨^¸\È>Ð[gÐhô	
ð 	 ×&Ñ&Únô	
ð ˆØ×Ñ˜dŸn™n¨o¸yÈ'Ð-RÐU]ÐT^Ó_Ô`Ø×Ñ˜dŸi™i¨°_ÀmÐ(TÐWeÐVfÐhrÓsÔtØ×Ñ˜dŸi™i¨°>À<Ð(PÐS\ÐR]Ð_eÓfÔgØ×Ñ˜dŸm™m¨Y¨K¸*¸ÓFÔGØ×Ñ˜dŸi™i¨°^À\Ð(RÐU^ÐT_ÐagÓhÔiØ×Ñ˜dŸh™h¨¸	Ð'BÐEUÐDVÐXdÓeÔfØ×Ñ˜dŸh™h¨Ð9IÐ'JÈ_ÐL]Ð_kÓlÔmØ×Ñ¤× 9Ñ 9Ó9Ø×!Ñ! $§)¡)¨X°}ÀkÐ,RÐU\ÐT]Ð_cÓ"dÔeØ×!Ñ! $§)¡)¨X°}ÀkÐ,RÐUZÐT[Ð]aÓ"bÔcØ×!Ñ! $§)¡)¨X°}ÀkÐ,RÐU\ÐT]Ð_cÓ"dÔeà-1×->Ñ->Ä/×B`ÑB`Ò-`™>ÐflˆLØ×!Ñ! $§+¡+¨w¸ÀiÐQZÐ.[Ð^iÐ]jÐlpÓ"qÔrØ×!Ñ! $§+¡+¨u°lÀIÈyÐ.YÐ\eÐ[fÐhlÓ"mÔnØ× Ñ ¤O×$FÑ$FÒFØ×%Ñ%Ø—H‘HØ$ i°¸"Ð>NÐPRÐT_ÐanÐoØ# [°-Ð@óöð ×"Ñ"¤o×&IÑ&IÒIØ×%Ñ%Ø—H‘Hà'Ø%Ø#Ø'Ø)Ø'Ø3ðð $ [°-Ð@óôð ˜q“=Ø$(×$:Ñ$:Ó$<�MØ$1ò [˜Ø×)Ñ)×0Ñ0°Ô:ØFJ×FZÑFZ˜×4Ñ4°X·]±]ÒCð[ð —J‘J×.Ñ.Ü$×/Ñ/´·±¸!¸ÀGÔ0LÐSXÔYÐ[_×[oÑ[oõð ×"Ñ"¤o×&DÑ&DÒDØ×%Ñ%Ø—O‘OØ$ i°¸+À}ÐVfÐgØ#˜óõð   ˜zÐ*ˆIØ% h ZÐ0ˆLØ#×*Ñ*¨I°|Ð+DÔEØ×!Ñ!Ø—‘Ø˜°Ð?OÐQZÐ[Ð^hÐjvÐ]wóôð 	×*Ñ*¨>¸8ÐE\Ô]à×$Ñ$ _Ò6^Ô_Ø×$Ñ$ _Ò6^Ô_à×Ñ×#Ñ# DÔ)ØˆÕr   )r   r    r!   r   r×   rN   r]  ru  r�  rA  rØ   rÙ   s   @r   rV  rV  4  s1   ø„ ð/àð/ð õ/ò 3ò,ò\(&öTk r   rV  c                   óV   ‡ — e Zd Zdededefˆ fd„Zddedz  defˆ fd„Zd	„ Z	dd
„Z
ˆ xZS )ÚPhiOnnxModelrH   r·   rÜ   c                 óÞ   •— t         ‰| �  |«       t        | j                  ||«      | _        t        | |«      | _        t        | «      | _        t        | «      | _
        t        | «      | _        y rR   )rM   rN   rÛ   rH   Úphi2_preprocessorrV  Úfission_transformer_blockrN  Úfission_causal_lm_headrD  Úfission_transformer_layernormr2  Úfission_transformer_embeddingrâ   s       €r   rN   zPhiOnnxModel.__init__O  s[   ø€ Ü‰Ñ˜ÔÜ!1°$·*±*¸iÈÓ!UˆÔÜ)CÀDÈ)Ó)TˆÔ&Ü&GÈÓ&MˆÔ#Ü-KÈDÓ-QˆÔ*Ü-KÈDÓ-QˆÕ*r   NÚoptionsÚadd_dynamic_axesc                 ó&  •— |€J ‚|j                   }| j                  j                  |«       | j                  j	                  |«       | j                  j                  «        | j                  j                  «        | j                  j                  «        | j                  j                  «        t        ‰| �)  «        t        | «      | _        t        | «      | _        | j                  j                  «        | j                  j                  «        y rR   )Úattention_op_typerÊ  rS   rÉ  r/  ÚapplyrÌ  rË  rÍ  rM   r=  r	   Úfuse_slnr   Úfuse_bias_sln)r   rÎ  rÏ  rP   rO   s       €r   ÚoptimizezPhiOnnxModel.optimizeW  sÒ   ø€ ØÐ"Ð"Ð"Ø×0Ñ0ˆà×&Ñ&×<Ñ<¸\ÔJà×Ñ×.Ñ.¨|Ô<à×&Ñ&×,Ñ,Ô.Ø×*Ñ*×0Ñ0Ô2Ø×#Ñ#×)Ñ)Ô+Ø×*Ñ*×0Ñ0Ô2ä‰ÑÔô 5°TÓ:ˆŒÜ=¸dÓCˆÔØ�‰×ÑÔØ×Ñ× Ñ Õ"r   c                 óŽ   — i }g d¢}|D ]!  }| j                  |«      }t        |«      ||<   Œ# t        j                  d|› �«       |S )z8
        Returns node count of fused operators.
        )	rË   rÀ   rÆ   rÐ   ÚGeluÚBiasGelur»   r¢   ÚSkipLayerNormalizationzOptimized operators: )Úget_nodes_by_op_typerD   r:  r;  )r   Úop_countÚopsÚopÚnodess        r   Úget_fused_operator_statisticsz*PhiOnnxModel.get_fused_operator_statisticsl  sY   € ð ˆò

ˆð ò 	&ˆBØ×-Ñ-¨bÓ1ˆEÜ˜u›:ˆH�RŠLð	&ô 	�‰Ð+¨H¨:Ð6Ô7Øˆr   c                 ó¢  ‡— ‰€| j                  «       Šdt        fˆfd„} |d«       |d«      z    |d«      z    |d«      z   } |d«       |d«      z    |d	«      z   } |d
«       |d«      z   }|dkD  xr ||k(  xr ||k\  }|dk(  rt        j                  d«       |dk(  rt        j                  d«       |dk(  rt        j	                  d«       |S )zA
        Returns True when the model is fully optimized.
        Úop_namec                 ó.   •— ‰j                  | «      xs dS )Nr   )Úget)rá  Úfused_op_counts    €r   rÛ  z1PhiOnnxModel.is_fully_optimized.<locals>.op_countŠ  s   ø€ Ø!×%Ñ% gÓ.Ò3°!Ð3r   rË   rÀ   rÆ   rÐ   r×  rØ  r»   r¢   rÙ  r   zLayer Normalization not fusedzGelu (or FastGelu) not fusedz+Attention (or MultiHeadAttention) not fused)rß  rV   r:  ÚdebugÚwarning)r   rä  rÛ  rÍ   ÚgeluÚ
layer_normÚ
is_perfects    `     r   Úis_fully_optimizedzPhiOnnxModel.is_fully_optimizedƒ  sö   ø€ ð Ð!Ø!×?Ñ?ÓAˆNð	4œcõ 	4ñ �[Ó!ÙÐ+Ó,ñ-áÐ,Ó-ñ.ñ Ð'Ó(ñ)ð 	ñ ˜Ó¡(¨:Ó"6Ñ6¹À*Ó9MÑMˆÙÐ2Ó3±hÐ?WÓ6XÑXˆ
à !‘mÒZ¨)°tÑ*;ÒZÀ*ÐPYÑBYˆ
à˜Š?Ü�L‰LÐ8Ô9à�1Š9Ü�L‰LÐ7Ô8à˜Š>Ü�N‰NÐHÔIàÐr   )NFrR   )r   r    r!   r   r×   rN   r   ÚboolrÕ  rß  rê  rØ   rÙ   s   @r   rÇ  rÇ  N  sC   ø„ ðR˜jð R°Sð RÀsõ Rñ# °Ñ 4ð #Ètõ #ò*÷.r   rÇ  ))Úloggingr   Únumpyr   Údynamo_onnx_helperr   Úfusion_baser   Úfusion_optionsr   r   Úfusion_skiplayernormr   r	   Úfusion_utilsr
   Úonnxr   r   r   r   r   Ú
onnx_modelr   r   r:  r   r$   r,   r/   r3   r:   r=   r@   rG   rÛ   r2  rD  rN  rV  rÇ  r"   r   r   ú<module>rõ     sâ   ðõ ã Ý /Ý ß 9ß _Ý $ß IÕ IÝ  á	�8Ó	€÷'ñ '÷
:ñ :÷
:ñ :÷
:ñ :÷
ñ ÷ñ ÷ñ ÷ñ ôVˆfô Vôrp,Ð'ô p,ôf  Wô  ôD  Wô  ôB ¨ô  ôBW  ô W ôtS�9õ Sr   