
    g                     r    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e      Zy	)
    )	getLogger)Optional)FusionAttentionVae)FusionOptions)
ModelProto)UnetOnnxModelc                   H     e Zd Zddededef fdZd	dee   fdZd Z	 xZ
S )
VaeOnnxModelmodel	num_headshidden_sizec                 \    |dk(  r|dk(  s|dkD  r||z  dk(  sJ t         |   |||       y )Nr   )r   r   )super__init__)selfr   r   r   	__class__s       \/var/www/openai/venv/lib/python3.12/site-packages/onnxruntime/transformers/onnx_model_vae.pyr   zVaeOnnxModel.__init__   s?    Q;!#3Q;YbKbfgKghh)M    optionsc                 f    t        | | j                  | j                        }|j                          y N)r   r   r   apply)r   r   self_attention_fusions      r   fuse_multi_head_attentionz&VaeOnnxModel.fuse_multi_head_attention   s'     249I9I4>> Z##%r   c                     i }g d}|D ]!  }| j                  |      }t        |      ||<   # t        j                  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nodess        r   get_fused_operator_statisticsz*VaeOnnxModel.get_fused_operator_statistics   sT     
 B--b1Eu:HRL  	*8*56r   )r   r   r   )__name__
__module____qualname__r   intr   r   r   r   r(   __classcell__)r   s   @r   r
   r
      s7    Nj NS N3 N&-1H &
r   r
   N)loggingr   typingr   fusion_attention_vaer   fusion_optionsr   onnxr   onnx_model_unetr   r)   r"   r
    r   r   <module>r5      s/      3 (  )	8	= r   