o
    )wi                     @   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__ d/home/ubuntu/sommelier/.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   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.
        )	Attention	GroupNormSkipGroupNormNhwcConvzOptimized operators:)get_nodes_by_op_typelenloggerinfo)r   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   fusion_attention_vaer   fusion_optionsr   onnxr   onnx_model_unetr   r$   r   r   r   r   r   r   <module>   s   