§
    kŠtj  ã                   óº   — 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dS )é    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                 óJ   •— t          ¦   «                              |¦  «         d S ©N)ÚsuperÚ__init__)Úselfr   Ú	__class__s     €úf/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/onnxruntime/transformers/onnx_model_bart.pyr   zFusionBartReshape.__init__   s!   ø€ Ý‰Œ×Ò˜ÑÔÐÐÐó    c                 ó’  — |j         d         |vrd S ||j         d                  }|j        dk    st          |j         ¦  «        dk    rd S | j                             |g d¢g d¢|¦  «        }|€d S |\  }}}g }	| j                             |j         d         ¦  «        }
|
dk    r|	                     d¦  «         | j                             |g d¢g d¢|¦  «        }|�€Í| j                             |j         d         ¦  «        }| j                             |j         d         ¦  «        }| j                             |j         d	         ¦  «        }|�|�|€d S t          j	        |¦  «        }t          j	        |¦  «        }t          j	        |¦  «        }t          |¦  «        dk    s&t          |¦  «        dk    st          |¦  «        dk    rd S |d         d
k    r|d         dk    r|d         dk    sd S |	 
                    |¦  «         |	 
                    |¦  «         |	 
                    |¦  «         | j                             |ddgddg|¦  «        }| j                             |dgdg|¦  «        }|�|}n|�|}nd S |d
         }|j         d         }|                      |	||¦  «         d S |\  }}}| j                             |j         d         ¦  «        }
|
dk    r|	                     d¦  «         | j                             |j         d         ¦  «        }| j                             |j         d	         ¦  «        }|�|€d S t          j	        |¦  «        }t          j	        |¦  «        }t          |¦  «        dk    st          |¦  «        dk    rd S |d         dk    r|d         dk    sd S |	 
                    |¦  «         |	 
                    |¦  «         | j                             |g d¢g d¢|¦  «        }|€d S |d
         }|j         d         }|j         d         |k    s|j         d         |k    rd S |                      |	||¦  «         d S )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Ô Ð(;Ð;Ð;ØˆFà)¨,Ô*<¸QÔ*?Ô@ˆØÔ (Ò*Ð*­c°+Ô2CÑ.DÔ.DÈÒ.IÐ.IØˆFà”
×,Ò,ØØ,Ð,Ð,ØˆIˆIØñ	
ô 
ˆð ˆ=ØˆFà!&ÑˆˆH�gàˆØ”z×4Ò4°X´^ÀAÔ5FÑGÔGˆØ˜1ÒÐØ�LŠL˜‰OŒOˆOà”
×,Ò,ØØ,Ð,Ð,ØˆIˆIØñ	
ô 
ˆð ‰=Ø œJ×6Ò6°{Ô7HÈÔ7KÑLÔLˆMØ œJ×6Ò6°{Ô7HÈÔ7KÑLÔLˆMØ œJ×6Ò6°{Ô7HÈÔ7KÑLÔLˆMØÐ$¨Ð(=ÀÐAVØ�å"Ô+¨MÑ:Ô:ˆGÝ"Ô+¨MÑ:Ô:ˆGÝ"Ô+¨MÑ:Ô:ˆGÝ�7‰|Œ|˜qÒ Ð ¥C¨¡L¤L°AÒ$5Ð$5½¸W¹¼ÈÒ9JÐ9JØ�à˜A”J "Ò$Ð$¨°¬°aª¨¸GÀA¼JÈºN¸NØ�à�LŠL˜Ñ!Ô!Ð!Ø�LŠL˜Ñ!Ô!Ð!Ø�LŠL˜Ñ!Ô!Ð!Ø"&¤*×">Ò">Ø˜u hÐ/°!°Q°Ð9Lñ#ô #Ðð !%¤
× <Ò <¸\ÈHÈ:ÐXYÐWZÐ\oÑ pÔ pÐØ"Ð.Ø/�	�	Ø"Ð.Ø-�	�	à�à" 2œˆJØ#Ô)¨!Ô,ˆJà×%Ò% e¨\¸;ÑGÔGÐGÐGÐGà%*Ñ"ˆQ�˜'àœ:×8Ò8¸¼ÈÔ9JÑKÔKˆLØ˜qÒ Ð Ø—’˜Q‘”�à œJ×6Ò6°{Ô7HÈÔ7KÑLÔLˆMØ œJ×6Ò6°{Ô7HÈÔ7KÑLÔLˆMØÐ$¨Ð(=Ø�å"Ô+¨MÑ:Ô:ˆGÝ"Ô+¨MÑ:Ô:ˆGÝ�7‰|Œ|˜qÒ Ð ¥C¨¡L¤L°AÒ$5Ð$5Ø�à˜A”J ’N�N w¨q¤z°A¢~ ~Ø�à�LŠL˜Ñ!Ô!Ð!Ø�LŠL˜Ñ!Ô!Ð!Øœ
×4Ò4ØÐ6Ð6Ð6¸	¸	¸	ÐCVñô ˆIð Ð Ø�à" 2œˆJØ#Ô)¨!Ô,ˆJØŒ}˜QÔ :Ò-Ð-°´¸qÔ1AÀZÒ1OÐ1OØ�à×%Ò% e¨\¸;ÑGÔGÐGÐGÐGr   )Ú__name__Ú
__module__Ú__qualname__r   r   rD   Ú__classcell__©r   s   @r   r   r      sa   ø€ € € € € ð ˜ið  ð  ð  ð  ð  ð  ðaHð aHð aHð aHð aHð aHð 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 )ÚBartOnnxModelÚhfc                 óê   •— t          ¦   «                              |||¦  «         t          | ¦  «        | _        t	          | | j        | j        | j        ¦  «        | _        t          | ¦  «        | _	        d S r   )
r   r   r   Úattention_maskr   Úhidden_sizeÚ	num_headsÚattention_fusionr   Úbart_reshape_fusion_preprocess)r   r   rP   rO   Ú
model_implr   s        €r   r   zBartOnnxModel.__init__{   sd   ø€ Ý‰Œ×Ò˜ 	¨;Ñ7Ô7Ð7Ý+¨DÑ1Ô1ˆÔÝ 3°D¸$Ô:JÈDÌNÐ\`Ô\oÑ pÔ pˆÔÝ.?ÀÑ.EÔ.EˆÔ+Ð+Ð+r   NFÚoptionsÚadd_dynamic_axesc                 ó    •— |€dn|j         | j        _         |€dn|j        | j        _        t          ¦   «                              ||¦  «         d S ©NF)Úuse_multi_head_attentionrQ   Ú!disable_multi_head_attention_biasr   Úoptimize)r   rT   rU   r   s      €r   rZ   zBartOnnxModel.optimize�   sV   ø€ ØBIÀ/¸¸ÐW^ÔWwˆÔÔ6à�_ˆEˆE¨'Ô*Sð 	ÔÔ?õ 	‰Œ×Ò˜Ð"2Ñ3Ô3Ð3Ð3Ð3r   c                 ó8   — | j                              ¦   «          d S r   )rQ   Úapply©r   s    r   Úfuse_attentionzBartOnnxModel.fuse_attentionˆ   s   € ØÔ×#Ò#Ñ%Ô%Ð%Ð%Ð%r   c                 ó`   — |                       ¦   «          | j                             ¦   «          d S r   )Úadjust_reshape_and_expandrR   r\   r]   s    r   Ú
preprocesszBartOnnxModel.preprocess‹   s/   € Ø×&Ò&Ñ(Ô(Ð(ØÔ+×1Ò1Ñ3Ô3Ð3Ð3Ð3r   )rL   rW   )
rE   rF   rG   r   r   ÚboolrZ   r^   ra   rH   rI   s   @r   rK   rK   z   s—   ø€ € € € € ðFð Fð Fð Fð Fð Fð4ð 4 °Ñ 4ð 4Ètð 4ð 4ð 4ð 4ð 4ð 4ð&ð &ð &ð4ð 4ð 4ð 4ð 4ð 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      s  ðð
 €€€à *Ð *Ð *Ð *Ð *Ð *Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø (Ð (Ð (Ð (Ð (Ð (Ø (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø )Ð )Ð )Ð )Ð )Ð )à	ˆÔ	˜8Ñ	$Ô	$€ðeHð eHð eHð eHð eH˜ñ eHô eHð eHðP4ð 4ð 4ð 4ð 4�Mñ 4ô 4ð 4ð 4ð 4r   