Ë
    ÝÍ:j  ã                   óZ   — d dl mZ d dlmZ d dlmZ d dlmZ  ee«      Z	 G d„ de«      Z
y)é    )Ú	getLogger)ÚFusion)Úhelper)Ú	OnnxModelc                   ó4   ‡ — e Zd Zdefˆ fd„Zdedefd„Zˆ xZS )ÚFusionBiasSplitGeluÚmodelc                 ó(   •— t         ‰| �  |dd«       y )NÚBiasSplitGeluÚGelu)ÚsuperÚ__init__)Úselfr	   Ú	__class__s     €ú‚/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/onnxruntime/transformers/fusion_biassplitgelu.pyr   zFusionBiasSplitGelu.__init__   s   ø€ Ü‰Ñ˜ °Õ8ó    Úinput_name_to_nodesÚoutput_name_to_nodec                 ó<  — |j                   d   |vry||j                   d      }t        |«      dk7  s|d   j                  dk7  ry|d   }| j                  j	                  |dd|«      }|€y| j                  j                  |dd¬«      d	k7  ry|j                  d   }| j                  j                  |g d
¢g d¢|«      }|€"| j                  j                  |g d¢g d¢|«      }|�|d   j                  d   |k7  ry| j                  j                  |ddgddg|«      }	|	�|	d   |vry| j                  j	                  |dd|«      }
|
€y|
j                  d   |j                  d   k7  ryg |¢|	d   ‘|‘|‘|
‘|‘}|j                   d   }| j                  j                  ||g||«      st        j                  d«       y|d   }| j                  j                  |«      \  }}t        |t        «      sy| j                  j                  |«       | j                  j!                  dd¬«      }t#        j$                  d|j                  d|z
     |j                  |   g|g|¬«      }d|_        | j(                  j+                  |«       | j,                  | j.                  |<   y)a´  
        [root] --->Add -------------------->  Slice ---------------> Mul -->
                   |                            ^                    ^
                   |                            |                    |
                   +----------------------------+---Slice --> Gelu---+
                   |                            |     ^
                   |                            |-----|
                   |                            |     |
                   |                           Mul   Mul
                   |                            ^     ^
                   v                            |     |
                  Shape ---> Gather --> Add --> Div --+
        r   Né   ÚMulÚSliceéÿÿÿÿgü©ñÒMbP?)Údeltaé   )ÚDivÚAddÚGatherÚShaper   )r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   éþÿÿÿr   é   zBSkip fuse BiasSplitGelu since it is not safe to fuse the subgraph.r   )Úname_prefix)ÚinputsÚoutputsÚnamezcom.microsoft)ÚoutputÚlenÚop_typer	   Úmatch_parentÚfind_constant_inputÚinputÚmatch_parent_pathÚis_safe_to_fuse_nodesÚloggerÚinfoÚget_constant_inputÚ
isinstanceÚintÚnodes_to_removeÚextendÚcreate_node_namer   Ú	make_nodeÚdomainÚnodes_to_addÚappendÚthis_graph_nameÚnode_name_to_graph_name)r   Ú	gelu_noder   r   ÚchildrenÚmul_after_geluÚslice_before_geluÚ
add_outputÚstart_index_nodesÚend_index_nodesÚslice_before_mulÚsubgraph_nodesÚsubgraph_outputÚadd_nodeÚ
bias_indexÚ_valueÚ	node_nameÚ
fused_nodes                     r   ÚfusezFusionBiasSplitGelu.fuse   sú  € ð ×Ñ˜AÑÐ&9Ñ9ØØ& y×'7Ñ'7¸Ñ':Ñ;ˆÜˆx‹=˜AÒ ¨!¡×!4Ñ!4¸Ò!=ØØ! !™ˆà ŸJ™J×3Ñ3°I¸wÈÐK^Ó_ÐØÐ$Øà�:‰:×)Ñ)Ð*;¸RÀuÐ)ÓMÐQRÒRØà&×,Ñ,¨QÑ/ˆ
à ŸJ™J×8Ñ8ØÚ4ÚØó	
Ðð Ð$Ø $§
¡
× <Ñ <Ø!Ú?Ú"Ø#ó	!Ðð Ð$Ð(9¸"Ñ(=×(CÑ(CÀAÑ(FÈ*Ò(TØàŸ*™*×6Ñ6Ð7HÈ5ÐRWÈ.Ð[\Ð^_ÐZ`ÐbuÓvˆð Ð# °qÑ'9ÐARÑ'RààŸ:™:×2Ñ2°>À7ÈAÐObÓcÐØÐ#Øð ×"Ñ" 1Ñ%Ð):×)@Ñ)@ÀÑ)CÒCàð
Øð
à˜AÑð
ð ð
ð ð	
ð
 ð
ð ð
ˆð )×/Ñ/°Ñ2ˆØ�z‰z×/Ñ/Ø˜_Ð-Ð/BÐDWô
ô �K‰KÐ\Ô]Øà$ RÑ(ˆØ!ŸZ™Z×:Ñ:¸8ÓDÑˆ
�FÜ˜*¤cÔ*ØØ×Ñ×#Ñ# NÔ3Ø—J‘J×/Ñ/°È_Ð/Ó]ˆ	Ü×%Ñ%ØØ—N‘N 1 z¡>Ñ2°H·N±NÀ:Ñ4NÐOØ$Ð%Øô	
ˆ
ð ,ˆ
ÔØ×Ñ× Ñ  Ô,Ø26×2FÑ2Fˆ×$Ñ$ YÒ/r   )Ú__name__Ú
__module__Ú__qualname__r   r   ÚdictrK   Ú__classcell__)r   s   @r   r   r      s(   ø„ ð9˜iõ 9ð\G°4ð \GÈd÷ \Gr   r   N)Úloggingr   Úfusion_baser   Úonnxr   Ú
onnx_modelr   rL   r.   r   © r   r   ú<module>rV      s-   ðõ
 å Ý Ý  á	�8Ó	€ô`G˜&õ `Gr   