Ë
    �…j  ã                   ó°   — d dl 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
 d dlmZ d dlmZ  e j                  e«      Z G d	„ d
e«      Z G d„ de«      Zy)é    N)ÚAttentionMask)ÚFusionBartAttention)ÚFusionOptions)ÚFusionReshape)Únumpy_helper)Ú	OnnxModel)ÚBertOnnxModelc                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚFusionBartReshapeÚmodelc                 ó$   •— t         ‰| �  |«       y ©N)ÚsuperÚ__init__)Úselfr   Ú	__class__s     €úi/root/aria/tools/markitdown-venv/lib/python3.12/site-packages/onnxruntime/transformers/onnx_model_bart.pyr   zFusionBartReshape.__init__   s   ø€ Ü‰Ñ˜Õó    c                 ó  — |j                   d   |vry ||j                   d      }|j                  dk7  st        |j                   «      dk7  ry | j                  j	                  |g d¢g d¢|«      }|€y |\  }}}g }	| j                  j                  |j                   d   «      }
|
dk(  r|	j                  d«       | j                  j	                  |g d¢g d¢|«      }|�€ª| j                  j                  |j                   d   «      }| j                  j                  |j                   d   «      }| j                  j                  |j                   d	   «      }|�|�|€y t        j                  |«      }t        j                  |«      }t        j                  |«      }t        |«      dk7  st        |«      dk7  st        |«      dk7  ry |d   d
k(  r|d   dkD  r|d   dkD  sy |	j                  |«       |	j                  |«       |	j                  |«       | j                  j	                  |ddgddg|«      }| j                  j	                  |dgdg|«      }|�|}n|�|}ny |d
   }|j                   d   }| j                  |	||«       y |\  }}}| j                  j                  |j                   d   «      }
|
dk(  r|	j                  d«       | j                  j                  |j                   d   «      }| j                  j                  |j                   d	   «      }|�|€y t        j                  |«      }t        j                  |«      }t        |«      dk7  st        |«      dk7  ry |d   dkD  r|d   dkD  sy |	j                  |«       |	j                  |«       | j                  j	                  |g d¢g d¢|«      }|€y |d
   }|j                   d   }|j                   d   |k7  s|j                   d   |k7  ry | j                  |	||«       y )Né   ÚConcaté   )Ú	UnsqueezeÚGatherÚShape)r   r   r   r   )r   r   r   é   é   éÿÿÿÿÚAddÚMatMul)ÚMulr   r    )r   r   r   )ÚinputÚop_typeÚlenr   Úmatch_parent_pathÚget_constant_valueÚappendÚget_initializerr   Úto_arrayÚextendÚreplace_reshape_node)r   Úreshape_nodeÚinput_name_to_nodesÚoutput_name_to_nodeÚconcat_nodeÚpath0Ú_Úgather_0Úshape_0ÚshapeÚgather_valueÚpath1Úinput_1_protoÚinput_2_protoÚinput_3_protoÚinput_1Úinput_2Úinput_3Úgemm_path_with_biasÚgemm_path_no_biasÚ	gemm_pathÚ
top_matmulÚ
root_inputÚgather_1Úshape_1s                            r   ÚfusezFusionBartReshape.fuse   sê  € Ø×Ñ˜aÑ Ð(;Ñ;Øà)¨,×*<Ñ*<¸QÑ*?Ñ@ˆØ×Ñ (Ò*¬c°+×2CÑ2CÓ.DÈÒ.IØà—
‘
×,Ñ,ØÚ,ÚØó	
ˆð ˆ=Øà!&ÑˆˆH�gàˆØ—z‘z×4Ñ4°X·^±^ÀAÑ5FÓGˆØ˜1ÒØ�L‰L˜ŒOà—
‘
×,Ñ,ØÚ,ÚØó	
ˆð ‰=Ø ŸJ™J×6Ñ6°{×7HÑ7HÈÑ7KÓLˆMØ ŸJ™J×6Ñ6°{×7HÑ7HÈÑ7KÓLˆMØ ŸJ™J×6Ñ6°{×7HÑ7HÈÑ7KÓLˆMØÐ$¨Ð(=ÀÐAVØä"×+Ñ+¨MÓ:ˆGÜ"×+Ñ+¨MÓ:ˆGÜ"×+Ñ+¨MÓ:ˆGÜ�7‹|˜qÒ ¤C¨£L°AÒ$5¼¸W»ÈÒ9JØà˜A‘J "Ò$¨°©°aª¸GÀA¹JÈºNØà�L‰L˜Ô!Ø�L‰L˜Ô!Ø�L‰L˜Ô!Ø"&§*¡*×">Ñ">Ø˜u hÐ/°!°Q°Ð9Ló#Ðð !%§
¡
× <Ñ <¸\ÈHÈ:ÐXYÐWZÐ\oÓ pÐØ"Ð.Ø/‘	Ø"Ð.Ø-‘	àà" 2™ˆJØ#×)Ñ)¨!Ñ,ˆJà×%Ñ% e¨\¸;ÕGà%*Ñ"ˆQ�˜'àŸ:™:×8Ñ8¸¿¹ÈÑ9JÓKˆLØ˜qÒ Ø—‘˜Q”à ŸJ™J×6Ñ6°{×7HÑ7HÈÑ7KÓLˆMØ ŸJ™J×6Ñ6°{×7HÑ7HÈÑ7KÓLˆMØÐ$¨Ð(=Øä"×+Ñ+¨MÓ:ˆGÜ"×+Ñ+¨MÓ:ˆGÜ�7‹|˜qÒ ¤C¨£L°AÒ$5Øà˜A‘J ’N w¨q¡z°A¢~Øà�L‰L˜Ô!Ø�L‰L˜Ô!ØŸ
™
×4Ñ4ØÒ6º	ÐCVóˆIð Ð Øà" 2™ˆJØ#×)Ñ)¨!Ñ,ˆJØ�}‰}˜QÑ :Ò-°·±¸qÑ1AÀZÒ1OØà×%Ñ% e¨\¸;ÕGr   )Ú__name__Ú
__module__Ú__qualname__r   r   rD   Ú__classcell__©r   s   @r   r   r      s   ø„ ð ˜iõ  öaHr   r   c                   óH   ‡ — e Zd Zdˆ fd„	Zd	dedz  defˆ fd„Zd„ Zd„ Zˆ xZ	S )
ÚBartOnnxModelc                 óÊ   •— t         ‰| �  |||«       t        | «      | _        t	        | | j
                  | j                  | j                  «      | _        t        | «      | _	        y r   )
r   r   r   Úattention_maskr   Úhidden_sizeÚ	num_headsÚattention_fusionr   Úbart_reshape_fusion_preprocess)r   r   rO   rN   Ú
model_implr   s        €r   r   zBartOnnxModel.__init__{   sR   ø€ Ü‰Ñ˜ 	¨;Ô7Ü+¨DÓ1ˆÔÜ 3°D¸$×:JÑ:JÈDÏNÉNÐ\`×\oÑ\oÓ pˆÔÜ.?ÀÓ.EˆÕ+r   NÚoptionsÚadd_dynamic_axesc                 ó¢   •— |€dn|j                   | j                  _         |€dn|j                  | j                  _        t        ‰| �  ||«       y ©NF)Úuse_multi_head_attentionrP   Ú!disable_multi_head_attention_biasr   Úoptimize)r   rS   rT   r   s      €r   rY   zBartOnnxModel.optimize�   sM   ø€ ØBIÀ/¹ÐW^×WwÑWwˆ×ÑÔ6à�_‰E¨'×*SÑ*Sð 	×ÑÔ?ô 	‰Ñ˜Ð"2Õ3r   c                 ó8   — | j                   j                  «        y r   )rP   Úapply©r   s    r   Úfuse_attentionzBartOnnxModel.fuse_attentionˆ   s   € Ø×Ñ×#Ñ#Õ%r   c                 óX   — | j                  «        | j                  j                  «        y r   )Úadjust_reshape_and_expandrQ   r[   r\   s    r   Ú
preprocesszBartOnnxModel.preprocess‹   s    € Ø×&Ñ&Ô(Ø×+Ñ+×1Ñ1Õ3r   )ÚhfrV   )
rE   rF   rG   r   r   ÚboolrY   r]   r`   rH   rI   s   @r   rK   rK   z   s+   ø„ õFñ4 °Ñ 4ð 4Ètõ 4ò&ö4r   rK   )ÚloggingÚfusion_attentionr   Úfusion_bart_attentionr   Úfusion_optionsr   Úfusion_reshaper   Úonnxr   Ú
onnx_modelr   Úonnx_model_bertr	   Ú	getLoggerrE   Úloggerr   rK   © r   r   ú<module>rn      sN   ðó
 å *Ý 5Ý (Ý (Ý Ý  Ý )à	ˆ×	Ñ	˜8Ó	$€ôeH˜ô eHôP4�Mõ 4r   