Ë
    �…j	  ã                   ój   — d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	m
Z
  ee«      Z G d„ de«      Zy)	é    )Ú	getLogger)ÚFusion)ÚFusionUtils)ÚhelperÚnumpy_helper)Ú	OnnxModelc                   óH   ‡ — e Zd ZdZddefˆ fd„Zd	dedee   fd„Z	d„ Z
ˆ xZS )
ÚFusionNhwcConvzConvert Conv to NhwcConvÚmodelc                 óZ   •— t         ‰| �  |ddgd«       || _        t        |«      | _        y )NÚNhwcConvÚConv)ÚsuperÚ__init__Úupdate_weightr   Úfusion_utils)Úselfr   r   Ú	__class__s      €új/root/aria/tools/markitdown-venv/lib/python3.12/site-packages/onnxruntime/transformers/fusion_nhwc_conv.pyr   zFusionNhwcConv.__init__   s-   ø€ Ü‰Ñ˜ 
¨V¨H°jÔAØ*ˆÔÜ'¨Ó.ˆÕó    Ú
input_nameÚpermc                 óì   — | j                   j                  d«      }|€|dz   dz   |z   }t        j                  d|g|g|¬«      }|j                  j                  t        j                  d|«      g«       |S )z&Append a Transpose node after an inputÚ	TransposeÚ_outú-©ÚinputsÚoutputsÚnamer   )r   Úcreate_node_namer   Ú	make_nodeÚ	attributeÚextendÚmake_attribute)r   r   r   Úoutput_nameÚ	node_nameÚtranspose_nodes         r   Úcreate_transpose_nodez$FusionNhwcConv.create_transpose_node   sw   € à—J‘J×/Ñ/°Ó<ˆ	àÐØ# fÑ,¨sÑ2°ZÑ?ˆKä×)Ñ)¨+¸z¸lÐU`ÐTaÐhqÔrˆØ× Ñ ×'Ñ'¬×)>Ñ)>¸vÀtÓ)LÐ(MÔNàÐr   c                 ó”  — | j                  |j                  d   g d¢«      }|j                  d   }| j                  j	                  d«      }| j                  j                  |j                  d   «      }|€y t        j                  |«      }t        |j                  «      dk7  ry | j                  j                  |«      }	|	�|j                  |	k(  s7| j                  j                  ||j                  |¬«      }
|
j                  d   }| j                  rN|j                  dddd«      }|d	z   }| j!                  ||j                  t#        |j                  «      |¬
«       d }n0| j                  |j                  d   g d¢«      }|j                  d   }|dz   dz   |j                  d   z   }t%        j&                  d||g|j                  dd  ¢|g|dz   |j(                  z   ¬«      }|j*                  j-                  |j*                  «       d|_        | j                  |j                  d   g d¢|j                  d   «      }| j0                  j3                  |«       |||g}|r|j3                  |«       |D ]%  }| j4                  | j6                  |j(                  <   Œ' | j8                  j-                  |«       | j;                  d«       y )Nr   )r   é   é   é   r   r-   é   )r   Úto_typeÚoutput_name_to_noder+   r,   Ú_weight_NHWC)r    Ú	data_typeÚdimsÚvalsr   r   r   zcom.microsoft)r   r,   r-   r+   )r)   ÚinputÚoutputr   r!   Úget_initializerr   Úto_arrayÚlenÚshapeÚ	get_dtyper2   r   Úadd_cast_noder   Ú	transposeÚadd_initializerÚlistr   r"   r    r#   r$   ÚdomainÚnodes_to_removeÚappendÚthis_graph_nameÚnode_name_to_graph_nameÚnodes_to_addÚincrease_counter)r   ÚconvÚinput_name_to_nodesr0   Úinput_transpose_nodeÚnhwc_conv_inputr'   Úweight_tensorÚweightÚdtypeÚ	cast_nodeÚweight_nameÚweight_transpose_nodeÚnhwc_output_nameÚ	nhwc_convÚoutput_transpose_noderE   Únodes                     r   ÚfusezFusionNhwcConv.fuse$   s¨  € à#×9Ñ9¸$¿*¹*ÀQ¹-ÊÓVÐà.×5Ñ5°aÑ8ˆð —J‘J×/Ñ/°
Ó;ˆ	ð Ÿ
™
×2Ñ2°4·:±:¸a±=ÓAˆØÐ ØÜ×&Ñ& }Ó5ˆÜˆv�|‰|Ó Ò!Øà—
‘
×$Ñ$ _Ó5ˆØÐ! m×&=Ñ&=ÀÒ&FØ×)Ñ)×7Ñ7Ø*Ø%×/Ñ/Ø$7ð 8ó ˆIð
 (×.Ñ.¨qÑ1ˆOà×Òà×%Ñ% a¨¨A¨qÓ1ˆFà# nÑ4ˆKØ× Ñ Ø Ø'×1Ñ1Ü˜&Ÿ,™,Ó'Øð	 !ô ð %)Ñ!à$(×$>Ñ$>¸t¿z¹zÈ!¹}ÊlÓ$[Ð!Ø/×6Ñ6°qÑ9ˆKà$ vÑ-°Ñ3°d·k±kÀ!±nÑDÐÜ×$Ñ$ØØ# [ÐB°4·:±:¸a¸b°>ÐBØ%Ð&Ø˜S‘ 4§9¡9Ñ,ô	
ˆ	ð 	×Ñ×"Ñ" 4§>¡>Ô2Ø*ˆ	Ôà $× :Ñ :¸9×;KÑ;KÈAÑ;NÒP\Ð^b×^iÑ^iÐjkÑ^lÓ mÐà×Ñ×#Ñ# DÔ)à,¨iÐ9NÐOˆÙ Ø×ÑÐ 5Ô6Ø ò 	KˆDØ6:×6JÑ6JˆD×(Ñ(¨¯©Ò3ð	Kà×Ñ× Ñ  Ô.à×Ñ˜jÕ)r   )F)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ústrr?   Úintr)   rU   Ú__classcell__)r   s   @r   r
   r
      s.   ø„ Ù"ñ/˜iõ /ñ

°ð 
¸4À¹9ó 
ö?*r   r
   N)Úloggingr   Úfusion_baser   r   r   Úonnxr   r   Ú
onnx_modelr   rV   Úloggerr
   © r   r   ú<module>rc      s.   ðõ å Ý $ß %Ý  á	�8Ó	€ôS*�Võ S*r   