
    ga                     T    d dl Z d dlZd dlmZ ddlmZmZ ddlmZ 	  G d de      Z	y)	    N)onnx_pb   )attribute_to_kwarg	ms_domain   )QuantOperatorBasec                   .     e Zd Z fdZd Z fdZ xZS )EmbedLayerNormalizationQuantc                 &    t         |   ||       y N)super__init__)selfonnx_quantizer	onnx_node	__class__s      g/var/www/openai/venv/lib/python3.12/site-packages/onnxruntime/quantization/operators/embed_layernorm.pyr   z%EmbedLayerNormalizationQuant.__init__   s    3    c                 L    | j                   j                  | j                        S r   )	quantizershould_quantize_nodenode)r   s    r   should_quantizez,EmbedLayerNormalizationQuant.should_quantize   s    ~~22499==r   c                    | j                   }|j                  dk(  sJ t        |j                        dkD  r1t	        j
                  d|j                   d       t        | !         S 	 | j                  j                  |g d      \  }}}}|t        | !         S |j                  sdn|j                  dz   }	 g }|j                  |j                  d   g       |j                  |j                  d	   g       |j                  |d   g       |j                  |d	   g       |j                  |d   g       |j                  |d
   g       |j                  |d   g       |j                  t        |j                        dkD  r|j                  d   ndg       |j                  |d   g       |j                  |d	   g       |j                  |d   g       |j                  |d
   g       |j                  |d   g       |j                  |d   g       |j                  |d	   g       |j                  |d   g       |j                  |d
   g       |j                  |d   g       i }|j                  D ]  }	|j                  t        |	              t         |d<   t#        j$                  j&                  d||j                  |fi |}
|j)                  |
       | j                  xj*                  |z  c_        y )NEmbedLayerNormalizationr   zQuantization is not applied to z since it has 3 outputs)r                _quantr   r   r   r      domainQEmbedLayerNormalization)r   op_typelenoutputlogginginfonamer   quantizer   quantize_activationextendinput	attributeupdater   r   onnxhelper	make_nodeappend	new_nodes)r   r   quantized_input_nameszero_point_namesscale_namesnodesqembed_layer_norm_nameinputskwargsr/   qembed_layer_norm_noder   s              r   r+   z%EmbedLayerNormalizationQuant.quantize   s   yy||8888t{{aLL:499+E\]^7#%%
	  NN..t_E	
! (7#%%+/99$))h:N	* tzz!}o&tzz!}o&,Q/01,Q/01,Q/01,Q/01,Q/01DJJ!(;tzz!}DE 	{1~&'{1~&'{1~&'{1~&'{1~&' 	'*+,'*+,'*+,'*+,'*+,IMM,Y78 ($x!%!6!6&KK"	"

 "
 	+,  E) r   )__name__
__module____qualname__r   r   r+   __classcell__)r   s   @r   r
   r
      s    4>a* a*r   r
   )
r(   r1   r   
onnx_protoquant_utilsr   r   base_operatorr   r
    r   r   <module>rF      s(      & 7 ,h*#4 h*r   