
    Bvh                     f    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)FusionAttentionVae)FusionOptions)
ModelProto)UnetOnnxModelc                   H     e Zd Zd	dededef fdZd
dedz  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       Q/RAG/venv/lib/python3.12/site-packages/onnxruntime/transformers/onnx_model_vae.pyr   zVaeOnnxModel.__init__   s?    Q;!#3Q;YbKbfgKghh)M    N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'   __classcell__)r   s   @r   r	   r	      s7    Nj NS N3 N&1E &
r   r	   N)loggingr   fusion_attention_vaer   fusion_optionsr   onnxr   onnx_model_unetr   r(   r!   r	    r   r   <module>r3      s,     3 (  )	8	= r   