
    gJ                     l    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y)    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                 &    t         |   ||       y Nsuper__init__selfonnx_quantizer	onnx_node	__class__s      b/var/www/openai/venv/lib/python3.12/site-packages/onnxruntime/quantization/operators/activation.pyr   zQLinearActivation.__init__	       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   <   y )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    yy||v%)??? ::a= B BBdnnFlFl7#%%..<<TZZ]K=L**4;;q>:r   c                 <   | j                   }|j                  dk(  s|j                  dk(  r| j                          y d}|j                  dk(  xr3 || j                  j                  v xr | j                  j                  |   }|rdnd }|rdnd }| j                  j                  |j                  d   ||      \  }}}}	}	| j                  j                  |dg      \  }
}}}|r|
t        | %         S |j                  d   t        z   }d}|j                  r|j                  dz   }i }|j                  D ]  }|j                  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/                  |       | j                  xj0                  |z  c_        y )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   s+   yy<<6!T\\V%;!!#4LLI% C$(D(DDC,,-AB 	
 "4I	/T NN33DKKNI}]	
 NN..taS9	
!2:7#%%$(KKN5M$M!"$99&*ii(&:#IMM,Y78 ($x "!$NQ%
! #'++"7"7$%&'#	#

 #
 "KKN%$$
 >F**4;;q>:,-  E) r   )__name__
__module____qualname__r   r'   r$   __classcell__r   s   @r   r   r      s    4ME* E*r   r   c                   $     e Zd Z fdZd Z xZS )QDQRemovableActivationc                 &    t         |   ||       y r   r   r   s      r   r   zQDQRemovableActivation.__init__c   r   r   c                 8   | j                   }| j                  j                  |j                  d         sy | j                  j                  sr| j                  j
                  s\| j                  j                  |j                  d   |j                  d         r&| j                  j                  | j                          n(| j                  j                  |j                  d          | j                  s)| j                  j                  |j                  d          y y )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    yy ~~11$**Q-@ 66NNAA<<TZZ]DKKXYN[NN&&tyy1NN55djjmD//NN55dkk!nE 0r   )rL   rM   rN   r   r$   rO   rP   s   @r   rR   rR   b   s    4Fr   rR   )r4   quant_utilsr   r   r   r   r   base_operatorr
   qdq_base_operatorr   r   rR    r   r   <module>r_      s2     u u , .W*) W*tF_ Fr   