U
    T?h                     @   sd   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 deZd	S )
    )	getLogger)Dict)Fusion)ndarray)helper)	OnnxModelc                       s2   e Zd Zed fddZeedddZ  ZS )FusionBiasAdd)modelc                    s   t  |dd d S )NBiasAddAdd)super__init__)selfr	   	__class__ Z/var/www/html/venv/lib/python3.8/site-packages/onnxruntime/transformers/fusion_bias_add.pyr      s    zFusionBiasAdd.__init__)input_name_to_nodesoutput_name_to_nodec              	   C   s  | j |dddddgdddddg|}|dkr2dS |d }|d }|jd |jkrVdS | j |\}}t|tr|dk	rt|tsdS |jdkrdS | j	
||g | j d	}	tjd	|jd|  |j| |jd g|jd g|	d
}
d|
_| j|
 | j| j|	< dS )zD
        Fuse Add bias and Add skip connection into BiasAdd
        r   ZMatMulZBiasSplitGeluZSkipLayerNormalizationr   N   r
   )inputsoutputsnamezcom.microsoft)r	   Zmatch_parent_pathinputoutputZget_constant_input
isinstanceintr   ndimZnodes_to_removeextendZcreate_node_namer   Z	make_nodedomainZnodes_to_addappendZthis_graph_nameZnode_name_to_graph_name)r   add_noder   r   ZnodesZ	bias_nodeZskip_layer_normZ
bias_indexZ
bias_valueZ	node_nameZ
fused_noder   r   r   fuse   s8    

zFusionBiasAdd.fuse)__name__
__module____qualname__r   r   r   r#   __classcell__r   r   r   r   r      s   r   N)loggingr   typingr   Zfusion_baser   numpyr   Zonnxr   Z
onnx_modelr   r$   loggerr   r   r   r   r   <module>   s   