U
    T?h                     @   sr   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
 e eZG dd deZG d	d
 d
eZdS )    N)Dict)Fusion)FusionSkipLayerNormalization)helper)	OnnxModelc                       s2   e Zd Zed fddZeedddZ  ZS )"FusionSimplifiedLayerNormalizationmodelc                    s   t  |dd d S )NSimplifiedLayerNormalizationMulsuper__init__selfr	   	__class__ f/var/www/html/venv/lib/python3.8/site-packages/onnxruntime/transformers/fusion_simplified_layernorm.pyr      s    z+FusionSimplifiedLayerNormalization.__init__)input_name_to_nodesoutput_name_to_nodec                 C   s  |j dkrd S d }| j|dddddddgdddddddg}| j|ddddddd	gdddddddg}| j|dddddddgdddddddg}| j|ddddddgddddddg}| j|dddddddgdddddddg}	d
\}
}|d k	r|}|d }
|d }n|d k	r2|}|d }
|d }n~|d k	rR|}|d }
|d }n^|d k	r|}|d }
|d }|jd | j krd S n$|	d k	r|	}|d }
|d }nd S |||fkrdnd}||k}| j|ddkrd S |jd }||d jd krd S | j|
\}}|d ks6|dks6|dkrJtd|  d S | j	
|sb|d d n| | j	| tjd||j| g|jd g| jjdddd}|j
tdt|g |j
tddg |j
tddg | j| | j| j|j< d S )Nr   DivZSqrtAddZ
ReduceMeanPow   r   ZGather)NN   g       @g-C6?zepsilon value is not expected: r
   Z	LayerNorm)Zname_prefix)inputsoutputsnameepsilonZaxisZ
stash_type)Zop_typer	   Zmatch_parent_pathinputZget_graphs_input_namesZfind_constant_inputZget_constant_inputloggerwarningZnodes_to_removeextendappendr   Z	make_nodeoutputZcreate_node_name	attributeZmake_attributefloatZnodes_to_addZthis_graph_nameZnode_name_to_graph_namer    )r   noder   r   Zsim_ln_nodesZsim_ln_nodes_1Zsim_ln_nodes_2Zsim_ln_nodes_3Zsim_ln_nodes_4Zsim_ln_nodes_5add_nodeZpow_nodeZlayernorm_weight_indexZstarts_with_graph_inputZ
root_inputiZ
add_weightZnormalize_noder   r   r   fuse   s    











z'FusionSimplifiedLayerNormalization.fuse)__name__
__module____qualname__r   r   r   r-   __classcell__r   r   r   r   r      s   r   c                       s.   e Zd Zed fddZ fddZ  ZS )&FusionSkipSimplifiedLayerNormalizationr   c                    s   t  |dd d S )NZ SkipSimplifiedLayerNormalizationr
   r   r   r   r   r   r      s    z/FusionSkipSimplifiedLayerNormalization.__init__c                    s   t  ||| d S )N)r   r-   )r   r*   r   r   r   r   r   r-      s    z+FusionSkipSimplifiedLayerNormalization.fuse)r.   r/   r0   r   r   r-   r1   r   r   r   r   r2      s   r2   )loggingtypingr   Zfusion_baser   Zfusion_skiplayernormr   Zonnxr   Z
onnx_modelr   	getLoggerr.   r#   r   r2   r   r   r   r   <module>   s   
 