
    h                     Z    S SK Jr  S SKJr  S SKJr  S SKJr  \" \5      r	 " S S\5      r
g)    )	getLogger)Fusion)helper)	OnnxModelc                   B   ^  \ rS rSrS\4U 4S jjrS\S\4S jrSrU =r	$ )FusionBiasSplitGelu   modelc                 (   > [         TU ]  USS5        g )NBiasSplitGeluGelu)super__init__)selfr
   	__class__s     g/var/www/fran/franai/venv/lib/python3.13/site-packages/onnxruntime/transformers/fusion_biassplitgelu.pyr   FusionBiasSplitGelu.__init__   s    8    input_name_to_nodesoutput_name_to_nodec                 T   UR                   S   U;  a  gX!R                   S      n[        U5      S:w  d  US   R                  S:w  a  gUS   nU R                  R	                  USSU5      nUc  gU R                  R                  USSS9S	:w  a  gUR                  S   nU R                  R                  U/ S
Q/ SQU5      nUc"  U R                  R                  U/ SQ/ SQU5      nUb  US   R                  S   U:w  a  gU R                  R                  USS/SS/U5      n	U	b	  U	S   U;  a  gU R                  R	                  USSU5      n
U
c  gU
R                  S   UR                  S   :w  a  g/ UQU	S   PUPUPU
PUPnUR                   S   nU R                  R                  X/X#5      (       d  [        R                  S5        gUS   nU R                  R                  U5      u  p[        U[        5      (       d  gU R                  R                  U5        U R                  R!                  SSS9n["        R$                  " SUR                  SU-
     UR                  U   /U/US9nSUl        U R(                  R+                  U5        U R,                  U R.                  U'   g)aT  
[root] --->Add -------------------->  Slice ---------------> Mul -->
           |                            ^                    ^
           |                            |                    |
           +----------------------------+---Slice --> Gelu---+
           |                            |     ^
           |                            |-----|
           |                            |     |
           |                           Mul   Mul
           |                            ^     ^
           v                            |     |
          Shape ---> Gather --> Add --> Div --+
r   N   MulSlicegMbP?)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   fuseFusionBiasSplitGelu.fuse   s    A&99&'7'7':;x=A!!4!4!=!! JJ33IwK^_$::))*;Ru)MQRR&,,Q/
 JJ884	
 $ $

 < <!?"#	! $(9"(=(C(CA(F*(T**667H5RW.[\^_Z`buv #q'9AR'R::22>7AObc# ""1%):)@)@)CC

A
 
 	

 
 
 )//2zz//-/B
 
 KK\]$R(!ZZ::8D
*c**##N3JJ//_/]	%%NN1z>2HNN:4NO$%	

 ,
  ,262F2F$$Y/r    )
__name__
__module____qualname____firstlineno__r   r   dictrM   __static_attributes____classcell__)r   s   @r   r   r      s/    9i 9\G4 \Gd \G \Gr   r   N)loggingr   fusion_baser   onnxr   
onnx_modelr   rP   r0   r   rO   r   r   <module>r[      s-   
     	8	`G& `Gr   