
    Bvh                         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y)
    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                 (    t         |   |dd       y )NSimplifiedLayerNormalizationMulsuper__init__selfr	   	__class__s     ^/RAG/venv/lib/python3.12/site-packages/onnxruntime/transformers/fusion_simplified_layernorm.pyr   z+FusionSimplifiedLayerNormalization.__init__   s     >F    input_name_to_nodesoutput_name_to_nodec           	      j   |j                   dk7  ry d }g }| j                  j                  |g dg d||      }|r(|\  }}}}	}
| j                  j                  |d      sy |}nfg }| j                  j                  |g dg d||      }||\  }}}}	}
|}n3g }| j                  j                  |g dg d	||      }|
|\  }}}	}
|}ny | j                  j	                  |
d
|      }||j                   dvry |j                   dk(  r | j                  j                  |d      dk7  ry |j                   dk(  sJ |d
   |d   k7  ry |j                  d
   }||j                  vry | j                  j                  |	      \  }}|
|d
k  s|dkD  rt        j                  d|        y | j                  j                  |
d      }|sy | j                  j                  |
d      }|s@t        |
j                        dkD  r(| j                  j                  |
j                  d         }|rt        |      dk7  ry | j                  j                  |       | j                  j                  |       | j                  j                  |       t!        j"                  d||j                  d|d
   z
     g|j$                  d
   g| j                  j'                  dd            }|j(                  j                  t!        j*                  dt-        |            g       |j(                  j                  t!        j*                  d|d
         g       |j(                  j                  t!        j*                  dd      g       | j.                  j                  |       | j0                  | j2                  |j4                  <   y )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   s   <<5 , zz337! 3' 4 
 IUFHh
H6F::003?"K  M::77B%$7+ 8 L 'UaR*JBR& !##zz;;8&(;"/  <    +GSDHj(4D"*K!ZZ223CQH[\%);)C)C>)Y%%.zz--.@#F!K%--666!!$(:1(=='--a0
[...jj33H=G?glg.>NN<WIFG ::001A:N zz,,-=vF#.4459::001A1G1G1JKDs4yA~##L1##$67##D)))*

1}Q/?+? @A[[^$,,-KYb,c	
 	  '')>)>y%PW.)Y(Z[  '')>)>vtAw)O(PQ  '')>)>|Q)O(PQ  0<@<P<P$$^%8%89r   )__name__
__module____qualname__r   r   dictrO   __classcell__r   s   @r   r   r      s*    Gi GNQd 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                 (    t         |   |dd       y )N SkipSimplifiedLayerNormalizationr   r   r   s     r   r   z/FusionSkipSimplifiedLayerNormalization.__init__   s     BDbcr   c                 (    t         |   |||       y )N)r   rO   )r   rB   r   r   r   s       r   rO   z+FusionSkipSimplifiedLayerNormalization.fuse   s    T.0CDr   )rP   rQ   rR   r   r   rO   rT   rU   s   @r   rW   rW      s    di dE Er   rW   )loggingfusion_baser   fusion_skiplayernormr   onnxr   
onnx_modelr   	getLoggerrP   r1   r   rW    r   r   <module>rb      sF      =   			8	$RQ RQjE-I Er   