o
    ¢Äia  ã                   @   sN   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„ deƒZ	dS )	é    N)Úonnx_pbé   )Úattribute_to_kwargÚ	ms_domainé   )ÚQuantOperatorBasec                       s0   e Zd Z‡ fdd„Zdd„ Z‡ fdd„Z‡  ZS )ÚEmbedLayerNormalizationQuantc                    s   t ƒ  ||¡ d S ©N)ÚsuperÚ__init__)ÚselfZonnx_quantizerZ	onnx_node©Ú	__class__© úl/home/kim/smarthome/.venv/lib/python3.10/site-packages/onnxruntime/quantization/operators/embed_layernorm.pyr      s   z%EmbedLayerNormalizationQuant.__init__c                 C   s   | j  | j¡S r	   )Ú	quantizerZshould_quantize_nodeÚnode)r   r   r   r   Úshould_quantize   s   z,EmbedLayerNormalizationQuant.should_quantizec                    s   | j }|jdks
J ‚t|jƒdkr t d|j› d¡ tƒ  ¡ S 	 | j	 
|g d¢¡\}}}}|d u r7tƒ  ¡ S |js<dn|jd }	 g }| |jd g¡ | |jd	 g¡ | |d g¡ | |d	 g¡ | |d g¡ | |d
 g¡ | |d g¡ | t|jƒdkrŒ|jd ndg¡ | |d g¡ | |d	 g¡ | |d g¡ | |d
 g¡ | |d g¡ | |d g¡ | |d	 g¡ | |d g¡ | |d
 g¡ | |d g¡ i }|jD ]	}	| t|	ƒ¡ qåt|d< tjjd||j|fi |¤Ž}
| |
¡ | j	 j|7  _d S )NZEmbedLayerNormalizationr   zQuantization is not applied to z since it has 3 outputs)r   é   é   é   é   Ú Z_quantr   r   r   r   é   ÚdomainZQEmbedLayerNormalization)r   Zop_typeÚlenÚoutputÚloggingÚinfoÚnamer
   Úquantizer   Zquantize_activationÚextendÚinputÚ	attributeÚupdater   r   ÚonnxÚhelperZ	make_nodeÚappendZ	new_nodes)r   r   Zquantized_input_namesZzero_point_namesZscale_namesÚnodesZqembed_layer_norm_nameZinputsÚkwargsr#   Zqembed_layer_norm_noder   r   r   r       sb   
û
$
üû
z%EmbedLayerNormalizationQuant.quantize)Ú__name__Ú
__module__Ú__qualname__r   r   r    Ú__classcell__r   r   r   r   r      s    r   )
r   r%   r   Z
onnx_protoZquant_utilsr   r   Zbase_operatorr   r   r   r   r   r   Ú<module>   s    