o
    ;ήc	                     @   sN   d dl mZ d dlmZmZ d dlmZ d dlmZ ee	Z
G dd dZdS )    )	getLogger)ListUnion)
GraphProto)	OnnxModelc                
   @   s>   e Zd Z	d
dededeeee f defddZdd	 ZdS )FusionNmodelfused_op_typesearch_op_typesdescriptionc                 C   sd   t |tr|gn|| _|| _|r| d| dn|| _|| _g | _g | _d| _i | _	d | _
d| _d S )N()Fr   )
isinstancestrr
   r	   r   r   nodes_to_removenodes_to_addprune_graphnode_name_to_graph_namethis_graph_namefused_count)selfr   r	   r
   r    r   K/tmp/pip-target-vg8gfxp4/lib/python/onnxruntime/transformers/fusion_base.py__init__   s   
zFusion.__init__c                 C   s  t d| j d | j }| j }| jD ]$}| j|D ]}| j|}|d u r/t	d|j
| _| ||| qqdd | jD }t| j|| j}|dkr^t d| j d|  | j| j | j| j| j | jrx| j  d S | js~| jr| j  d S d S )	Nzstart z
 fusion...zCan not find node in any graphsc                 S   s   g | ]}|j qS r   )op_type).0noder   r   r   
<listcomp>0   s    z Fusion.apply.<locals>.<listcomp>r   zFused z count: )loggerdebugr   r   input_name_to_nodesoutput_name_to_noder
   get_nodes_by_op_typeget_graph_by_node	Exceptionnamer   fuser   maxr   countr	   inforemove_nodesr   	add_nodesr   r   update_graph)r   r    r!   search_op_typer   graphop_listr(   r   r   r   apply"   s,   


zFusion.apply)N)	__name__
__module____qualname__r   r   r   r   r   r0   r   r   r   r   r      s    
r   N)loggingr   typingr   r   onnxr   
onnx_modelr   r1   r   r   r   r   r   r   <module>   s   