U
    U?ha  ã                   @   sL   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__© úd/var/www/html/venv/lib/python3.8/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t‚t|jƒdkr@t d|j› d¡ tƒ  	¡ S | j
 |dddddg¡\}}}}|d krrtƒ  	¡ 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|Ž}
| |
¡ | j
 j|7  _d S )NZEmbedLayerNormalizationr   zQuantization is not applied to z since it has 3 outputsé   é   é   é   Ú Z_quantr   r   é   ÚdomainZQEmbedLayerNormalization)r   Zop_typeÚAssertionErrorÚ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_namesZnodesZqembed_layer_norm_nameÚinputsÚkwargsr$   Zqembed_layer_norm_noder   r   r   r!      s^    
û
&
üû
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
   
