
     Ng=                         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 j        e          Z G d
 de
          Z G d de          ZdS )    N)Optional)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     d/var/www/html/ai-engine/env/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
,,,,,II	
 
 =F!&Hgz44X^A5FGG1LLOOO
,,,,,II	
 
 = J66{7H7KLLM J66{7H7KLLM J66{7H7KLLM$(=AV"+M::G"+M::G"+M::G7||q  CLLA$5$5W9J9JAJ"$$aGAJNNLL!!!LL!!!LL!!!"&*">">uh/!Q9L# # !%
 < <\H:XYWZ\o p p"./		".-		"2J#)!,J%%e\;GGGGG%*"Q':889JKKLq  Q J66{7H7KLLM J66{7H7KLLM$(="+M::G"+M::G7||q  CLLA$5$5AJNNwqzA~~LL!!!LL!!!
44666			CV I  "2J#)!,J}Q:--q1AZ1O1O%%e\;GGGGGr   )__name__
__module____qualname__r	   r   rE   __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                   N     e Zd Zd
 fd	Zddee         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   rQ   rP   
model_implr   s        r   r   zBartOnnxModel.__init__|   sd    	;777+D11 3D$:JDN\`\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_attentionrR   !disable_multi_head_attention_biasr   optimize)r   rU   rV   r   s      r   r[   zBartOnnxModel.optimize   sV    BI/W^Ww6_EE'*S 	? 	"233333r   c                 8    | j                                          d S r   )rR   applyr   s    r   fuse_attentionzBartOnnxModel.fuse_attention   s    ##%%%%%r   c                 `    |                                   | j                                         d S r   )adjust_reshape_and_expandrS   r]   r^   s    r   
preprocesszBartOnnxModel.preprocess   s/    &&(((+1133333r   )rM   rX   )rF   rG   rH   r   r   r   boolr[   r_   rb   rI   rJ   s   @r   rL   rL   {   s        F F F F F F4 4 7 4RV 4 4 4 4 4 4& & &4 4 4 4 4 4 4r   rL   )loggingtypingr   fusion_attentionr   fusion_bart_attentionr   fusion_optionsr   fusion_reshaper   onnxr   
onnx_modelr	   onnx_model_bertr
   	getLoggerrF   loggerr   rL    r   r   <module>rp      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 4M 4 4 4 4 4r   