
     NgJ                     z    d dl Z ddlmZmZmZmZmZ ddlmZ ddl	m
Z
  G d de          Z G d	 d
e
          ZdS )    N   )TENSOR_NAME_QUANT_SUFFIXQuantizedValueQuantizedValueTypeattribute_to_kwarg	ms_domain   )QuantOperatorBase)QDQOperatorBasec                   2     e Zd Z fdZ fdZ fdZ xZS )QLinearActivationc                 L    t                                          ||           d S Nsuper__init__selfonnx_quantizer	onnx_node	__class__s      i/var/www/html/ai-engine/env/lib/python3.11/site-packages/onnxruntime/quantization/operators/activation.pyr   zQLinearActivation.__init__	   #    33333    c                 >   | j         }|j        dk    s|j        dk    sJ |j        d         | j        j        vs| j        j        r t                                                      S | j        j        |j        d                  }|| j        j        |j        d         <   d S )NReluClipr   )	nodeop_typeinput	quantizerquantized_value_mapis_activation_symmetricr   quantizeoutput)r   r   quantized_valuer   s      r   QuantizeClipReluz"QLinearActivation.QuantizeClipRelu   s    y|v%%)?)?)?)? :a= BBBdnFlB77##%%%.<TZ]K=L*4;q>:::r   c                    | j         }|j        dk    s|j        dk    r|                                  d S d}|j        dk    o|| j        j        v o| j        j        |         }|rdnd }|rdnd }| j                            |j        d         ||          \  }}}}	}	| j                            |dg          \  }
}}}|r|
 t                      	                                S |j        d         t          z   }d}|j        r
|j        dz   }i }|j        D ]$}|                    t          |                     %t          |d	<   |
d         |d         |d         ||g}t!          j        j        d
|j        z   ||g|fi |}t'          |j        d         |||t(          j                  }|| j        j        |j        d         <   |                    |           | j        xj        |z  c_        d S )Nr   r   zextra.Sigmoid.nnapiSigmoidg      p?r    _quantdomainQLinear)r   r   r'   r!   extra_options_get_quantization_paramsr%   quantize_activationr   r$   r   name	attributeupdater   r   onnxhelper	make_noder   r   Inputr"   append	new_nodes)r   r   nnapi_sigmoid_optionsigmoid_nnapi_mode	use_scaleuse_zeropoint
data_foundoutput_scale_nameoutput_zp_name_quantized_input_nameszero_point_namesscale_namesnodesqlinear_activation_outputqlinear_activation_namekwargsr2   qlinear_activation_inputsqlinear_activation_nodeq_outputr   s                        r   r$   zQLinearActivation.quantize   sU   y<6!!T\V%;%;!!###F4LI% C$(DDC,-AB 	
 "4=II	/9T N33DKNI}]]	
 N..taS99	
! 	&2:77##%%%$(KN5M$M!"$9 	;&*i(&:# 	9 	9IMM,Y778888$x "!$NQ%
! #'+"7$%&'#	#
 #

 #
 #
 "KN%$
 
 >F*4;q>:,---  E)    r   )__name__
__module____qualname__r   r'   r$   __classcell__r   s   @r   r   r      sx        4 4 4 4 4M M M M ME* E* E* E* E* E* E* E* E*r   r   c                   $     e Zd Z fdZd Z xZS )QDQRemovableActivationc                 L    t                                          ||           d S r   r   r   s      r   r   zQDQRemovableActivation.__init__c   r   r   c                    | j         }| j                            |j        d                   sd S | j        j        s]| j        j        sQ| j                            |j        d         |j        d                   r | j                            | j                    n%| j        	                    |j        d                    | j
        s'| j        	                    |j        d                    d S d S )Nr   )r   r!   is_tensor_quantizedr    r#   qdq_keep_removable_activationstry_replacing_upstream_outputr%   remove_nodequantize_activation_tensordisable_qdq_for_node_output)r   r   s     r   r$   zQDQRemovableActivation.quantizef   s    y ~11$*Q-@@ 	F 6	ENA	E <<TZ]DKXYN[[	E
 N&&ty1111N55djmDDD/ 	FN55dk!nEEEEE	F 	Fr   )rL   rM   rN   r   r$   rO   rP   s   @r   rR   rR   b   sN        4 4 4 4 4F F F F F F Fr   rR   )r4   quant_utilsr   r   r   r   r   base_operatorr
   qdq_base_operatorr   r   rR    r   r   <module>r_      s     u u u u u u u u u u u u u u , , , , , , . . . . . .W* W* W* W* W*) W* W* W*tF F F F F_ F F F F Fr   