Ë
    �…jV  ã                   óf   — d dl mZ d dl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)é    )Ú	getLoggerN)ÚFusion)ÚTensorProtoÚhelper)Ú	OnnxModelc                   ó0   ‡ — e Zd Zdefˆ fd„Zd„ Zd„ Zˆ xZS )ÚFusionReshapeÚmodelc                 ó6   •— t         ‰| �  |dd«       d| _        y )NÚReshapeF)ÚsuperÚ__init__Úprune_graph)Úselfr
   Ú	__class__s     €úh/root/aria/tools/markitdown-venv/lib/python3.12/site-packages/onnxruntime/transformers/fusion_reshape.pyr   zFusionReshape.__init__   s   ø€ Ü‰Ñ˜ 	¨9Ô5Ø!&ˆÕó    c                 ó@  — t        j                  |t         j                  ¬«      }| j                  j	                  dd«      }t        j                  dg |gt        j                  dt        j                  |j                  t        |«      d¬«      ¬«      }||j                  d<   | j                  j	                  d	d
«      |_        | j                  j                  |g«       | j                   j#                  |«       | j$                  | j&                  |j                  <   y )N)ÚdtypeÚConstantÚconstant_shapeÚconst_tensorT)ÚnameÚ	data_typeÚdimsÚvalsÚraw)ÚinputsÚoutputsÚvalueé   r   ÚReshape_Fuse)ÚnpÚasarrayÚint64r
   Úcreate_node_namer   Ú	make_nodeÚmake_tensorr   ÚINT64ÚshapeÚbytesÚinputr   Únodes_to_removeÚextendÚnodes_to_addÚappendÚthis_graph_nameÚnode_name_to_graph_name)r   r*   Úreshape_nodeÚconcat_nodeÚshape_valueÚconstant_shape_nameÚnew_nodes          r   Úreplace_reshape_nodez"FusionReshape.replace_reshape_node   sç   € Ü—j‘j ¬b¯h©hÔ7ˆØ"Ÿj™j×9Ñ9¸*ÐFVÓWÐÜ×#Ñ#ØØØ(Ð)Ü×$Ñ$Ø#Ü%×+Ñ+Ø ×&Ñ&Ü˜;Ó'Øôô	
ˆð !4ˆ×Ñ˜1ÑØ ŸJ™J×7Ñ7¸	À>ÓRˆÔØ×Ñ×#Ñ# [ MÔ2Ø×Ñ× Ñ  Ô*Ø6:×6JÑ6Jˆ×$Ñ$ X§]¡]Ò3r   c                 óÒ  — |j                   d   |vry ||j                   d      }|j                  dk7  s0t        |j                   «      dk  st        |j                   «      dkD  ry | j                  j	                  |g d¢g d¢|«      }|€y |\  }}}| j                  j	                  |g d¢g d¢|«      }	|	€y |	\  }
}}g }| j                  j                  |j                   d   «      }|dk(  r|j                  d«       | j                  j                  |j                   d   «      }|dk(  r|j                  d«       t        |«      d	k7  ry g }g }||g}t        |j                   «      dk(  rå| j                  j                  |j                   d	   «      €½| j                  j	                  |g d
¢g d¢|«      }|€%| j                  j	                  |g d¢g d¢|«      }|€y | j                  j	                  |g d
¢g d¢|«      }|€%| j                  j	                  |g d¢g d¢|«      }|€y |j                  |d   |d   g«       |j                  d«       nŽt        |j                   «      d	kD  rv| j                  j                  |j                   d	   «      }|€y t        |t        j                  «      r |j                  |j                  «       «       n|j                  |«       t        |j                   «      dk(  r�| j                  j                  |j                   d   «      €ud|v ry | j                  j	                  |g d¢g d¢|«      }|€%| j                  j	                  |g d¢g d¢|«      }|€y |j                  |d   g«       |j                  d«       nŽt        |j                   «      dkD  rv| j                  j                  |j                   d   «      }|€y t        |t        j                  «      r |j                  |j                  «       «       n|j                  |«       |j                   d   }d}|D ]  }|j                   d   |k7  sŒd}Œ |sy | j                  |||«       d| _        y )Nr!   ÚConcaté   é   )Ú	UnsqueezeÚGatherÚShape)r   r   r   )r!   r   r   r   é   )r=   ÚMulr>   r?   )r@   r   r   r   )r=   rA   ÚSqueezeÚSlicer?   )r@   r   r   r   r   )r@   r   r!   r   )r@   r   r!   r   r   éÿÿÿÿ)r=   ÚDivr>   r?   )r;   r   r   r   )r=   rE   rB   rC   r?   )r;   r   r   r   r   TF)r,   Úop_typeÚlenr
   Úmatch_parent_pathÚget_constant_valuer0   r.   Ú
isinstancer#   ÚndarrayÚtolistr8   r   )r   r3   Úinput_name_to_nodesÚoutput_name_to_noder4   Úpath0Úunsqueeze_0Úgather_0Úshape_0Úpath1Úunsqueeze_1Úgather_1Úshape_1r*   Úgather_valueÚpath2Úpath3Úshape_nodesÚconcat_valueÚ
root_inputÚsame_shape_inputÚ
shape_nodes                         r   ÚfusezFusionReshape.fuse*   s8  € Ø×Ñ˜aÑ Ð(;Ñ;Øà)¨,×*<Ñ*<¸QÑ*?Ñ@ˆØ×Ñ (Ò*¬c°+×2CÑ2CÓ.DÀqÒ.HÌCÐP[×PaÑPaÓLbÐefÒLfØà—
‘
×,Ñ,ØÚ,ÚØó	
ˆð ˆ=Øà+0Ñ(ˆ�h à—
‘
×,Ñ,ØÚ,ÚØó	
ˆð ˆ=ØØ+0Ñ(ˆ�h àˆØ—z‘z×4Ñ4°X·^±^ÀAÑ5FÓGˆØ˜1ÒØ�L‰L˜ŒOà—z‘z×4Ñ4°X·^±^ÀAÑ5FÓGˆØ˜1ÒØ�L‰L˜ŒOäˆu‹:˜Š?ØàˆØˆØ Ð(ˆÜˆ{× Ñ Ó! QÒ&¨4¯:©:×+HÑ+HÈ×IZÑIZÐ[\ÑI]Ó+^Ð+fØ—J‘J×0Ñ0ØÚ7ÚØ#ó	ˆEð ˆ}ØŸ
™
×4Ñ4ØÚEÚ#Ø'ó	�ð �=Øà—J‘J×0Ñ0ØÚ7ÚØ#ó	ˆEð ˆ}ØŸ
™
×4Ñ4ØÚEÚ#Ø'ó	�ð �=Øà×Ñ  b¡	¨5°©9Ð5Ô6Ø�L‰L˜ÕÜ�×"Ñ"Ó# aÒ'ØŸ:™:×8Ñ8¸×9JÑ9JÈ1Ñ9MÓNˆLØÐ#ØÜ˜,¬¯
©
Ô3Ø—‘˜\×0Ñ0Ó2Õ3à—‘˜\Ô*äˆ{× Ñ Ó! QÒ&¨4¯:©:×+HÑ+HÈ×IZÑIZÐ[\ÑI]Ó+^Ð+fØ�U‰{Øà—J‘J×0Ñ0ØÚ7ÚØ#ó	ˆEð ˆ}ØŸ
™
×4Ñ4ØÚEÚ#Ø'ó	�ð �=ØØ×Ñ  b¡	˜{Ô+Ø�L‰L˜ÕÜ�×"Ñ"Ó# aÒ'ØŸ:™:×8Ñ8¸×9JÑ9JÈ1Ñ9MÓNˆLØÐ#Øä˜,¬¯
©
Ô3Ø—‘˜\×0Ñ0Ó2Õ3à—‘˜\Ô*à!×'Ñ'¨Ñ*ˆ
ØÐØ%ò 	)ˆJØ×Ñ Ñ" jÓ0Ø#(Ñ ð	)ñ  Øà×!Ñ! %¨°{ÔCð  ˆÕr   )Ú__name__Ú
__module__Ú__qualname__r   r   r8   r_   Ú__classcell__)r   s   @r   r	   r	      s   ø„ ð'˜iõ 'òKö*C r   r	   )Úloggingr   Únumpyr#   Úfusion_baser   Úonnxr   r   Ú
onnx_modelr   r`   Úloggerr	   © r   r   ú<module>rk      s.   ðõ ã Ý ß $Ý  á	�8Ó	€ô] �Fõ ] r   