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)Optional)FusionAttentionVae)FusionOptions)
ModelProto)UnetOnnxModelc                       sH   e Zd Zddededef fddZddee 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__ ^/var/www/visachat/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   r$   __classcell__r   r   r   r   r      s    r   N)loggingr   typingr   fusion_attention_vaer   fusion_optionsr   onnxr   onnx_model_unetr   r%   r   r   r   r   r   r   <module>   s   