o
    g                     @   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                       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__ _/var/www/visachat/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   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_noder   r   r   fuse   s8   

zFusionBiasAdd.fuse)__name__
__module____qualname__r   r   r   r5   __classcell__r   r   r   r   r      s    r   N)loggingr   typingr   fusion_baser   numpyr   onnxr   
onnx_modelr   r6   loggerr   r   r   r   r   <module>   s   