o
    i                     @   sX   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)Fusion)ndarray)helper)	OnnxModelc                       s4   e Zd Zdef fddZdedefddZ  ZS )FusionBiasAddmodelc                    s   t  |dd d S )NBiasAddAdd)super__init__)selfr   	__class__ b/home/kim/smarthome/.venv/lib/python3.10/site-packages/onnxruntime/transformers/fusion_bias_add.pyr      s   zFusionBiasAdd.__init__input_name_to_nodesoutput_name_to_nodec                 C   s   | j |g dg d|}|du rdS |d }|d }|jd |jvr%dS | j |\}}t|tr;|dur;t|ts=dS |jdkrDd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
   MatMulZBiasSplitGelur   ZSkipLayerNormalization)r   Nr   r   r   Nr      r	   )ZinputsZ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   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   dictr"   __classcell__r   r   r   r   r      s    r   N)loggingr   Zfusion_baser   numpyr   Zonnxr   Z
onnx_modelr   r#   loggerr   r   r   r   r   <module>   s   