
    g                     r    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	 d dl
mZ  ee      Z G d de      Zy	)
    )	getLogger)Dict)Fusion)ndarray)helper)	OnnxModelc                   4     e Zd Zdef fdZdedefdZ xZS )FusionBiasAddmodelc                 (    t         |   |dd       y )NBiasAddAdd)super__init__)selfr   	__class__s     ]/var/www/openai/venv/lib/python3.12/site-packages/onnxruntime/transformers/fusion_bias_add.pyr   zFusionBiasAdd.__init__   s    	51    input_name_to_nodesoutput_name_to_nodec                    | j                   j                  |g dg d|      }|y|d   }|d   }|j                  d   |j                  vry| j                   j	                  |      \  }}t        |t              r|t        |t              sy|j                  dk7  ry| j                  j                  ||g       | j                   j                  d      }	t        j                  d|j                  d|z
     |j                  |   |j                  d   g|j                  d   g|	      }
d	|
_        | j                  j!                  |
       | j"                  | j$                  |	<   y)
zD
        Fuse Add bias and Add skip connection into BiasAdd
        )r   MatMulBiasSplitGelur   SkipLayerNormalization)r   Nr   r   r   Nr      r   )inputsoutputsnamezcom.microsoft)r   match_parent_pathinputoutputget_constant_input
isinstanceintr   ndimnodes_to_removeextendcreate_node_namer   	make_nodedomainnodes_to_addappendthis_graph_namenode_name_to_graph_name)r   add_noder   r   nodes	bias_nodeskip_layer_norm
bias_index
bias_value	node_name
fused_nodes              r   fusezFusionBiasAdd.fuse   sT   
 

,,R	
 =!H	) >>!O$:$::!%!>!>y!I
J:s+1GZXbdkMl??a##Xy$9:JJ//	:	%%OOA
N3Y__Z5PRZR`R`abRcd__Q'(	

 ,
  ,262F2F$$Y/r   )__name__
__module____qualname__r   r   r   r8   __classcell__)r   s   @r   r
   r
      s%    2i 2&G$ &GT &Gr   r
   N)loggingr   typingr   fusion_baser   numpyr   onnxr   
onnx_modelr   r9   loggerr
    r   r   <module>rE      s1   
       	8	*GF *Gr   