o
    3Ih                     @   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)NumpyHelper)helper)	OnnxModelc                       s*   e Zd Zdef fddZdd Z  ZS )FusionBiasGelumodelc                    s.   |rt  |ddd d S t  |dd d S )NFastGeluzadd biasBiasGeluGelu)super__init__)selfr   is_fastgelu	__class__ h/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/onnxruntime/transformers/fusion_biasgelu.pyr      s   zFusionBiasGelu.__init__c              	   C   s:  |j }|dkr	dnd}t|jdkrd S | j|ddgdd g}|d u r&d S |\}}d }	d}
t|jD ]\}}| j|}|d u rBq3|}
t|}	 |	d u rPd S t|	j	dkrYd S ||g}| j
||jd g||sld S | j| tj||jd |j|
 g|j| j||d	 d
}d|_| j| | j| j|j< d S )Nr   r
   r	      AddMatMulr   	_AddBias_)inputsoutputsnamezcom.microsoft)op_typeleninputr   match_parent_path	enumerateget_initializerr   to_arrayshapeis_safe_to_fuse_nodesoutputnodes_to_removeextendr   	make_nodecreate_node_namedomainnodes_to_addappendthis_graph_namenode_name_to_graph_namer   )r   nodeinput_name_to_nodesoutput_name_to_nodegelu_op_typefuse_op_typenodesaddmatmulbias_weight
bias_indexir   initializersubgraph_nodes
fused_noder   r   r   fuse   sH   
zFusionBiasGelu.fuse)__name__
__module____qualname__r   r   r=   __classcell__r   r   r   r   r      s    r   N)loggingr   fusion_baser   fusion_utilsr   onnxr   
onnx_modelr   r>   loggerr   r   r   r   r   <module>   s   