U
    T?h                     @   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                       sD   e Zd Zdeeed fddZdee d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(t t j|||d d S )Nr   )r
   r   )AssertionErrorsuper__init__)selfr	   r
   r   	__class__ Y/var/www/html/venv/lib/python3.8/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   sD   i }ddddg}|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_countZopsopZnodesr   r   r   get_fused_operator_statistics   s    
z*VaeOnnxModel.get_fused_operator_statistics)r   r   )N)__name__
__module____qualname__r   intr   r   r   r   r   __classcell__r   r   r   r   r      s   r   N)loggingr   typingr   Zfusion_attention_vaer   Zfusion_optionsr   Zonnxr   Zonnx_model_unetr   r   r   r   r   r   r   r   <module>   s   