o
    ;ήc                     @   s,   d dl mZ G dd dZG dd dZdS )    )ArgumentParserc                   @   s   e Zd ZdZdZdZdZdS )AttentionMaskFormatr            N)__name__
__module____qualname__MaskIndexEndMaskIndexEndAndStartAttentionMaskNoMask r   r   N/tmp/pip-target-vg8gfxp4/lib/python/onnxruntime/transformers/fusion_options.pyr      s
    r   c                   @   sH   e Zd ZdZdd ZdddZdd Zed	d
 Zede	fddZ
dS )FusionOptionsz'Options of fusion in graph optimizationc                 C   sZ   d| _ d| _d| _d| _d| _d| _d| _d| _d| _d| _	t
j| _|dkr+d| _d S d S )NTFgpt2)enable_geluenable_layer_normenable_attentionenable_skip_layer_normenable_embed_layer_normenable_bias_skip_layer_normenable_bias_geluenable_gelu_approximationenable_qordered_matmulenable_shape_inferencer   r   attention_mask_format)self
model_typer   r   r   __init__   s   
zFusionOptions.__init__Tc                 C   s   |rt j| _d S t j| _d S N)r   r   r   r
   )r   use_raw_maskr   r   r   use_raw_attention_mask$   s   z$FusionOptions.use_raw_attention_maskc                 C   s   t j| _d S r    )r   r   r   )r   r   r   r   disable_attention_mask*   s   z$FusionOptions.disable_attention_maskc                 C   s   t | j}| jrd|_| jrd|_| jrd|_| jrd|_	| j
r#d|_| jr)d|_| jr/d|_| jr5d|_| jr;d|_| jrC|d | jrJ|  |S )NFT)r   r   disable_gelur   disable_layer_normr   disable_attentionr   disable_skip_layer_normr   disable_embed_layer_normr   disable_bias_skip_layer_normr   disable_bias_gelur   r   disable_shape_inferencer   use_mask_indexr"   no_attention_maskr#   )argsoptionsr   r   r   parse-   s0   

zFusionOptions.parseparserc                 C   sN  | j ddddd | jdd | j ddddd | jdd	 | j d
dddd | jdd | j ddddd | jdd | j ddddd | jdd | j ddddd | jdd | j ddddd | jdd | j ddddd | jdd | j ddddd | jdd | j dddd d | jdd! | j d"ddd#d | jdd$ d S )%Nz--disable_attentionF
store_truezdisable Attention fusion)requiredactionhelp)r&   z--disable_skip_layer_normz%disable SkipLayerNormalization fusion)r'   z--disable_embed_layer_normz&disable EmbedLayerNormalization fusion)r(   z--disable_bias_skip_layer_normz2disable Add Bias and SkipLayerNormalization fusion)r)   z--disable_bias_geluz)disable Add Bias and Gelu/FastGelu fusion)r*   z--disable_layer_normz!disable LayerNormalization fusion)r%   z--disable_geluzdisable Gelu fusion)r$   z--enable_gelu_approximationz+enable Gelu/BiasGelu to FastGelu conversion)r   z--disable_shape_inferencez disable symbolic shape inference)r+   z--use_mask_indexzBuse mask index instead of raw attention mask in attention operator)r,   z--no_attention_maskz1no attention mask. Only works for model_type=bert)r-   )add_argumentset_defaults)r1   r   r   r   add_argumentsH   s   zFusionOptions.add_argumentsN)T)r   r   r	   __doc__r   r"   r#   staticmethodr0   r   r8   r   r   r   r   r      s    

r   N)argparser   r   r   r   r   r   r   <module>   s   