
    hJ                     l    S SK r SSKJrJrJrJrJr  SSKJr  SSK	J
r
   " S S\5      r " S	 S
\
5      rg)    N   )TENSOR_NAME_QUANT_SUFFIXQuantizedValueQuantizedValueTypeattribute_to_kwarg	ms_domain   )QuantOperatorBase)QDQOperatorBasec                   @   ^  \ rS rSrU 4S jrU 4S jrU 4S jrSrU =r$ )QLinearActivation   c                 $   > [         TU ]  X5        g Nsuper__init__selfonnx_quantizer	onnx_node	__class__s      g/var/www/fran/franai/venv/lib/python3.13/site-packages/onnxruntime/quantization/operators/activation.pyr   QLinearActivation.__init__	       3    c                   > U R                   nUR                  S:X  d  UR                  S:X  d   eUR                  S   U R                  R                  ;  d  U R                  R
                  (       a  [        TU ]  5       $ U R                  R                  UR                  S      nX R                  R                  UR                  S   '   g )NReluClipr   )	nodeop_typeinput	quantizerquantized_value_mapis_activation_symmetricr   quantizeoutput)r   r    quantized_valuer   s      r   QuantizeClipRelu"QLinearActivation.QuantizeClipRelu   s    yy||v%)??? ::a= B BBdnnFlFl7#%%..<<TZZ]K=L**4;;q>:r   c                   > U R                   nUR                  S:X  d  UR                  S:X  a  U R                  5         g SnUR                  S:H  =(       a8    X R                  R                  ;   =(       a    U R                  R                  U   nU(       a  SOS nU(       a  SOS nU R                  R                  UR                  S   XE5      u  nnnn	n	U R                  R                  US/5      u  n
nnnU(       a  U
c  [        TU ]%  5       $ UR                  S   [        -   nSnUR                  (       a  UR                  S-   n0 nUR                   H  nUR                  [        U5      5        M     [        US	'   U
S   US   US   UU/n[         R"                  R$                  " S
UR                  -   UU/U40 UD6n['        UR                  S   UUU[(        R*                  5      nUU R                  R,                  UR                  S   '   UR/                  U5        U R                  =R0                  U-  sl        g )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kwargsr5   qlinear_activation_inputsqlinear_activation_nodeq_outputr   s                        r   r&   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____firstlineno__r   r)   r&   __static_attributes____classcell__r   s   @r   r   r      s    4ME* E*r   r   c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )QDQRemovableActivationb   c                 $   > [         TU ]  X5        g r   r   r   s      r   r   QDQRemovableActivation.__init__c   r   r   c                 j   U R                   nU R                  R                  UR                  S   5      (       d  g U R                  R                  (       d|  U R                  R
                  (       da  U R                  R                  UR                  S   UR                  S   5      (       a&  U R                  R                  U R                   5        O(U R                  R                  UR                  S   5        U R                  (       d)  U R                  R                  UR                  S   5        g g )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&   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   rP   )rQ   rR   rS   rT   r   r&   rU   rV   rW   s   @r   rY   rY   b   s    4F Fr   rY   )r7   quant_utilsr   r   r   r   r   base_operatorr
   qdq_base_operatorr   r   rY   rP   r   r   <module>rh      s2     u u , .W*) W*tF_ Fr   