
    g                         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 j                  e      Z G d de      Z G d	 d
e      Zy)    N)Dict)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     i/var/www/openai/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                   dk7  ry d }| j                  j                  |g dg d      }| j                  j                  |g dg d      }| j                  j                  |g dg d      }| j                  j                  |g dg d      }| j                  j                  |g dg d      }	d	\  }
}||}|d
   }
|d   }nf||}|d
   }
|d   }nW||}|d
   }
|d   }nH|6|}|d
   }
|d   }|j                  d   | j                  j	                         vry |	|	}|d
   }
|d   }ny |||fv rdnd}||k(  }| j                  j                  |d      dk7  ry |j                  d   }||d   j                  d   k7  ry | j                  j                  |
      \  }}|
|dk  s|dkD  rt        j                  d|        y | j                  j                  |s|d d n|       | j                  j                  |       t        j                  d||j                  |   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                  |       | j(                  | j*                  |j,                  <   y )Nr   )r   DivSqrtAdd
ReduceMeanPowr   )   r   r   r   r   r   r   )r   r   r   r   r   r   Gather)r   r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   r   )NN   r   r   g       @g-C6?zepsilon value is not expected: r   	LayerNorm)name_prefix)inputsoutputsnameepsilonaxis
stash_type)op_typer
   match_parent_pathinputget_graphs_input_namesfind_constant_inputget_constant_inputloggerwarning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_nodessim_ln_nodes_1sim_ln_nodes_2sim_ln_nodes_3sim_ln_nodes_4sim_ln_nodes_5add_nodepow_nodelayernorm_weight_indexstarts_with_graph_input
root_inputi
add_weightnormalize_nodes                     r   fusez'FusionSimplifiedLayerNormalization.fuse   sB   <<5   55E!
 55H!
 55E!
 55>
 55E!
 ((%)L#AH#B'H')L#AH#B'H')L#AH#B'H')L#AH#B'H~~a 

(I(I(KK')L#AH#B'H&2~~6V&V\]".."@::))(C8A=^^A&
a..q11

55h?:qJ4GNN<ZLIJ##=TL"$5Zfg##D)))*

+A BC[[^$,,-KYd,e	
 	  '')>)>y%PZJ[)\(]^  '')>)>vr)J(KL  '')>)>|Q)O(PQ  0<@<P<P$$^%8%89r   )__name__
__module____qualname__r   r   r   rN   __classcell__r   s   @r   r	   r	      s*    Gi GGQd GQ G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   rN   )r   r?   r   r   r   s       r   rN   z+FusionSkipSimplifiedLayerNormalization.fuse   s    T.0CDr   )rO   rP   rQ   r   r   rN   rR   rS   s   @r   rU   rU      s    di dE Er   rU   )loggingtypingr   fusion_baser   fusion_skiplayernormr   onnxr   
onnx_modelr   	getLoggerrO   r1   r	   rU    r   r   <module>ra      sI       =   			8	$KQ KQ\E-I Er   