
     Ng5                     t    d dl m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dS )	    )	getLogger)Dict)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                 N    t                                          |dd           d S )NBiasSplitGeluGelu)super__init__)selfr
   	__class__s     i/var/www/html/ai-engine/env/lib/python3.11/site-packages/onnxruntime/transformers/fusion_biassplitgelu.pyr   zFusionBiasSplitGelu.__init__   s%    88888    input_name_to_nodesoutput_name_to_nodec                 H   |j         d         |vrdS ||j         d                  }t          |          dk    s|d         j        dk    rdS |d         }| j                            |dd|          }|dS | j                            |dd          d	k    rdS |j        d         }| j                            |g d
g d|          }|!| j                            |g dg d|          }||d         j        d         |k    rdS | j                            |ddgddg|          }	|	
|	d         |vrdS | j                            |dd|          }
|
dS |
j        d         |j        d         k    rdS g ||	d         |||
|}|j         d         }| j                            ||g||          st          
                    d           dS |d         }| j                            |          \  }}t          |t                    sdS | j                            |           | j                            dd          }t#          j        d|j        d|z
           |j        |         g|g|          }d|_        | j                            |           | j        | j        |<   dS )a  
        [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   fusezFusionBiasSplitGelu.fuse   sN    A&999F&y'7':;x==A!!4!=!=F!! J33IwK^__$F:))*;Ru)MMQRRRF&,Q/
 J88444OO	
 
 $ $
 < <!???"""#	! ! $(9"(=(CA(F*(T(TF*667H5RW.[\^_Z`buvv #q'9AR'R'RF:22>7AObcc#F "1%):)@)CCCF

A
 
 	

 
 
 )/2z//_-/BDW
 
 	 KK\]]]F$R(!Z::8DD
F*c** 	F##N333J//_/]]	%N1z>2HN:4NO$%	
 
 

 ,
  ,,,262F$Y///r   )__name__
__module____qualname__r   r   r   rL   __classcell__)r   s   @r   r	   r	      sz        9i 9 9 9 9 9 9\G4 \Gd \G \G \G \G \G \G \G \Gr   r	   N)loggingr   typingr   fusion_baser   onnxr   
onnx_modelr   rM   r/   r	    r   r   <module>rW      s   
                                    	8		`G `G `G `G `G& `G `G `G `G `Gr   