
    fPi                         d dl 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)Fusion)FusionSkipLayerNormalization)helper)	OnnxModelc                   4     e Zd Zdef fdZdedefdZ xZS )"FusionSimplifiedLayerNormalizationmodelc                 N    t                                          |dd           d S )NSimplifiedLayerNormalizationMulsuper__init__selfr	   	__class__s     /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/onnxruntime/transformers/fusion_simplified_layernorm.pyr   z+FusionSimplifiedLayerNormalization.__init__   s&     >FFFFF    input_name_to_nodesoutput_name_to_nodec           	      8   |j         dk    rd S d }g }| j                            |g dg d||          }|r(|\  }}}}	}
| j                            |d          sd S |}neg }| j                            |g dg d||          }||\  }}}}	}
|}n3g }| j                            |g dg d	||          }|
|\  }}}	}
|}nd S | j                            |
d
|          }|	|j         dvrd S |j         dk    r"| j                            |d          dk    rd S n!|j         dk    sJ |d
         |d         k    rd S |j        d
         }||j        vrd S | j                            |	          \  }}||d
k    s|dk    rt          	                    d|            d S | j        
                    |
d          }|sd S | j        
                    |
d          }|s=t          |
j                  dk    r%| j                            |
j        d                   }|rt          |          dk    rd S | j                            |           | j                            |           | j                            |           t!          j        d||j        d|d
         z
           g|j        d
         g| j                            dd                    }|j                            t!          j        dt-          |                    g           |j                            t!          j        d|d
                   g           |j                            t!          j        dd          g           | j                            |           | j        | j        |j        <   d S )Nr   )r   DivSqrtAdd
ReduceMean)N   r   r   N)r   return_indiceg      ?)r   
Reciprocalr   r   r   )Nr   r   r   N)r   r   r   r   )Nr   r   Nr   )Powr   r   g       @r   g-C6?zepsilon value is not expected: keepdimsaxesr   RMSNorm)name_prefix)inputsoutputsnameepsilonaxis
stash_type)op_typer	   match_parent_pathhas_constant_input
get_parentfind_constant_inputinputget_constant_inputloggerwarningget_node_attributelenget_constant_valuenodes_to_removeextendappendr   	make_nodeoutputcreate_node_name	attributemake_attributefloatnodes_to_addthis_graph_namenode_name_to_graph_namer&   )r   noder   r   sim_ln_nodesr   mul_nodediv_node
_sqrt_nodeadd_nodereduce_mean_nodenode_parent_reciprocal_nodereduce_mean_parent
root_input_ir'   r    r!   normalize_nodes                       r   fusez'FusionSimplifiedLayerNormalization.fuse   sO   <5  F, z33777!!! 3' 4 
 
  8	IUFHh
H6F:003?? "KK  M:77BBB%%%$7+ 8  L 'UaR*JBR& !##z;;888&&&(;"/  <      +GSDHj(4D"*KKF!Z223CQH[\\%);)C>)Y)YF%..z--.@#FF!KK L &-6666!!$(:1(==='-a0
[...Fj33H==G?gllg.>.>NNFWFFGGGF :001A:NN 	F z,,-=vFF 	L#.45599:001A1G1JKKD 	s4yyA~~F##L111##$6777##D))))*
1}Q/?+? @A[^$,,-KYb,cc	
 
 
 	 '')>y%PW..)Y)Y(Z[[[ '')>vtAw)O)O(PQQQ '')>|Q)O)O(PQQQ  000<@<P$^%8999r   )__name__
__module____qualname__r   r   dictrO   __classcell__r   s   @r   r   r      s        Gi G G G G G GNQd NQ NQ NQ NQ NQ NQ NQ NQ NQr   r   c                   .     e Zd Zdef fdZ fdZ xZS )&FusionSkipSimplifiedLayerNormalizationr	   c                 N    t                                          |dd           d S )N SkipSimplifiedLayerNormalizationr   r   r   s     r   r   z/FusionSkipSimplifiedLayerNormalization.__init__   s'     BDbcccccr   c                 N    t                                          |||           d S )N)r   rO   )r   rB   r   r   r   s       r   rO   z+FusionSkipSimplifiedLayerNormalization.fuse   s%    T.0CDDDDDr   )rP   rQ   rR   r   r   rO   rT   rU   s   @r   rW   rW      sm        di d d d d d dE E E E E E E E Er   rW   )loggingfusion_baser   fusion_skiplayernormr   onnxr   
onnx_modelr   	getLoggerrP   r1   r   rW    r   r   <module>rb      s           = = = = = =                  		8	$	$RQ RQ RQ RQ RQ RQ RQ RQjE E E E E-I E E E E Er   