+
    9i                         ^ RI t ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RI	H
t
 ^ RIHt ] P                  ! ]4      t ! R R	]4      tR# )
    N)FusionLayerNormalization)FusionMultiHeadAttentionMMDitFusionOptions)is_installed)
ModelProto)BertOnnxModelc                      a a ] tR t^t oRV3R lV 3R llltR tR tR tRV3R lR lltRV3R lR	 llt	R
 t
RtVtV ;t# )MmditOnnxModelc                ,   < V ^8  d   QhRS[ RS[RS[/# )   model	num_headshidden_size)r   int)format__classdict__s   "g/var/www/html/photoedit/myenv/lib/python3.14/site-packages/onnxruntime/transformers/onnx_model_mmdit.py__annotate__MmditOnnxModel.__annotate__   s'     	N 	Nj 	NS 	N3 	N    c                r   < V^ 8X  d   V^ 8X  g   V^ 8  d   W2,          ^ 8X  g   Q h\         SV `  WVR7       R# )aC  Initialize Multimodal Diffusion Transformer (MMDiT) ONNX Model.

Args:
    model (ModelProto): the ONNX model
    num_heads (int, optional): number of attention heads. Defaults to 0 (detect the parameter automatically).
    hidden_size (int, optional): hidden dimension. Defaults to 0 (detect the parameter automatically).
)r   r   N)super__init__)selfr   r   r   	__class__s   &&&&r   r   MmditOnnxModel.__init__   s<     Q;!#3Q;KbfgKghhMr   c                F    V P                  4        V P                  4        R # N)prune_graphremove_unused_constant)r   s   &r   postprocessMmditOnnxModel.postprocess   s    ##%r   c                x    R p\         P                  R4       \        W'       * R R7      pVP                  4        R# )TzwThe optimized model requires LayerNormalization with broadcast support. Please use onnxruntime-gpu>=1.21 for inference.)check_constant_and_dimensionforceN)loggerwarningr   apply)r   layernorm_support_broadcastfusions   &  r   fuse_layer_normMmditOnnxModel.fuse_layer_norm"   s9    &*#>	
 */NVZ
 	r   c                <    \        V 4      pVP                  4        R # r   )r   r)   )r   r+   s   & r   fuse_multi_head_attention(MmditOnnxModel.fuse_multi_head_attention-   s    .t4r   c                4   < V ^8  d   QhRS[ R,          RS[/# )r   optionsNadd_dynamic_axes)r   bool)r   r   s   "r   r   r   1   s      * * 4 *t *r   c                Z   V'       d   Q h\        R 4      '       dU   ^ RIp^ RIHp V! 4       ;_uu_ 4        ^pVP                  \	        V4      ^ RR7      pV P                  W4       RRR4       R# \        P                  R4       V P                  VR4       R#   + '       g   i     R# ; i)tqdmN)logging_redirect_tqdmr+   )initialdescz<tqdm is not installed. Run optimization without progress bar)r   r6   tqdm.contrib.loggingr7   range	_optimizer'   info)r   r2   r3   r6   r7   stepsprogress_bars   &&&    r   optimizeMmditOnnxModel.optimize1   s    ###B&((#yyuqxyPw5 )(
 KKVWNN7D) )((s   1BB*	c                .   < V ^8  d   QhRS[ R,          /# )r   r2   Nr   )r   r   s   "r   r   r   @   s     B B!5 Br   c                   Ve#   VP                   '       g   V P                  4        V P                  P                  4        V'       d   VP	                  ^4       Ve   VP
                  '       d!   V P                  4        V P                  4        V'       d   VP	                  ^4       Ve   VP                  '       d   V P                  4        V'       d   VP	                  ^4       Ve   VP                  '       d   V P                  4        V'       d   VP	                  ^4       V P                  4        V'       d   VP	                  ^4       \        P                  RV P                  4        24       R # )Nzopset version: )enable_shape_inferencedisable_shape_inferenceutilsremove_useless_cast_nodesupdateenable_layer_normr,   fuse_simplified_layer_normenable_gelu	fuse_geluenable_attentionr/   r"   r'   r=   get_opset_version)r   r2   r?   s   &&&r   r<   MmditOnnxModel._optimize@   s   )G)G)G((* 	

,,."O 9 9 9  "++-"O 3 3 3NN"O 8 8 8**,""od&<&<&>%?@Ar   c                    / p. ROpV F!  pV P                  V4      p\        V4      W&   K#  	  \        P                  RV 24       V# )z(
Returns node count of fused operators.
zOptimized operators:)FastGeluMultiHeadAttentionLayerNormalizationSimplifiedLayerNormalization)get_nodes_by_op_typelenr'   r=   )r   op_countopsopnodess   &    r   get_fused_operator_statistics,MmditOnnxModel.get_fused_operator_statistics_   sR     
 B--b1Eu:HL  	*8*56r    )r   r   )NF)NN)__name__
__module____qualname____firstlineno__r   r"   r,   r/   r@   r<   r[   __static_attributes____classdictcell____classcell__)r   r   s   @@r   r   r      s@     	N 	N&	* *B B> r   r   )loggingfusion_layernormr   fusion_mha_mmditr   fusion_optionsr   import_utilsr   onnxr   onnx_model_bertr	   	getLoggerr^   r'   r   r]   r   r   <module>rm      s:     5 : ( %  )			8	$^] ^r   