o
    g=                     @   s   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 d d	lmZ e eZG d
d de
ZG dd deZdS )    N)Optional)AttentionMask)FusionBartAttention)FusionOptions)FusionReshape)numpy_helper)	OnnxModel)BertOnnxModelc                       s*   e Zd Zdef fddZdd Z  ZS )FusionBartReshapemodelc                    s   t  | d S N)super__init__)selfr   	__class__ _/var/www/visachat/venv/lib/python3.10/site-packages/onnxruntime/transformers/onnx_model_bart.pyr      s   zFusionBartReshape.__init__c                 C   sN  |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 u r1d S |\}}}g }	| j|j d }
|
dkrJ|	d | j|g dg d|}|d u r| j|j d }| j|j d }| j|j d	 }|d u s|d u s|d u rd S t	|}t	|}t	|}t|dkst|dkst|dkrd S |d d
kr|d dkr|d dksd S |	
| |	
| |	
| | j|ddgddg|}| j|dgdg|}|d ur|}n	|d ur|}nd S |d
 }|j d }| |	|| d S |\}}}| j|j d }
|
dkr|	d | j|j d }| j|j d	 }|d u s9|d u r;d S t	|}t	|}t|dksSt|dkrUd S |d dkrc|d dksed S |	
| |	
| | j|g dg d|}|d u rd S |d
 }|j d }|j d |ks|j d |krd 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_1r   r   r   fuse   s   





$$












 zFusionBartReshape.fuse)__name__
__module____qualname__r   r   rB   __classcell__r   r   r   r   r
      s    r
   c                       sJ   e Zd Zd fdd	Zddee def fdd	Zd
d Zdd Z	  Z
S )BartOnnxModelhfc                    s>   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   rK   rJ   
model_implr   r   r   r   |   s   
zBartOnnxModel.__init__NFoptionsadd_dynamic_axesc                    s>   |d u rdn|j | j_ |d u rdn|j| j_t || d S NF)use_multi_head_attentionrL   !disable_multi_head_attention_biasr   optimize)r   rO   rP   r   r   r   rT      s   zBartOnnxModel.optimizec                 C   s   | j   d S r   )rL   applyr   r   r   r   fuse_attention   s   zBartOnnxModel.fuse_attentionc                 C   s   |    | j  d S r   )adjust_reshape_and_expandrM   rU   rV   r   r   r   
preprocess   s   zBartOnnxModel.preprocess)rH   rQ   )rC   rD   rE   r   r   r   boolrT   rW   rY   rF   r   r   r   r   rG   {   s
    rG   )loggingtypingr   fusion_attentionr   fusion_bart_attentionr   fusion_optionsr   fusion_reshaper   onnxr   
onnx_modelr   onnx_model_bertr	   	getLoggerrC   loggerr
   rG   r   r   r   r   <module>   s   
h