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)FusionAttentionVae)FusionOptions)
ModelProto)UnetOnnxModelc                       sH   e Zd Zddededef fddZddedB fd	d
Zdd Z  Z	S )VaeOnnxModelr   model	num_headshidden_sizec                    s>   |dkr|dks|dkr|| dksJ t  j|||d d S )Nr   )r	   r
   )super__init__)selfr   r	   r
   	__class__ a/home/kim/smarthome/.venv/lib/python3.10/site-packages/onnxruntime/transformers/onnx_model_vae.pyr      s   (zVaeOnnxModel.__init__Noptionsc                 C   s   t | | j| j}|  d S N)r   r
   r	   apply)r   r   Zself_attention_fusionr   r   r   fuse_multi_head_attention   s   z&VaeOnnxModel.fuse_multi_head_attentionc                 C   s@   i }g d}|D ]}|  |}t|||< qtd|  |S )z8
        Returns node count of fused operators.
        )Z	AttentionZ	GroupNormZSkipGroupNormZNhwcConvzOptimized operators:)Zget_nodes_by_op_typelenloggerinfo)r   Zop_countopsopnodesr   r   r   get_fused_operator_statistics   s   
z*VaeOnnxModel.get_fused_operator_statistics)r   r   r   )
__name__
__module____qualname__r   intr   r   r   r   __classcell__r   r   r   r   r      s    r   N)loggingr   Zfusion_attention_vaer   Zfusion_optionsr   Zonnxr   Zonnx_model_unetr   r   r   r   r   r   r   r   <module>   s   