U
    yh`                  x   @   s  d dl T d dlmZ d dlmZ d dlT d dlT d dlT d dlT d dlT d dlT d dl	T d dl
T d dlT d dlmZ d dlmZ d dlmZ d dlmZ dd	lmZmZmZmZmZ dd
lmZ ddlZeeef Zde_ dddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~ddddddgxZ!dd3 Z"G dd deZ#dS )   )*)fuse_modules)fuse_modules_qat)_move_exported_model_to_eval)_move_exported_model_to_train) _allow_exported_model_train_eval)generate_numeric_debug_handle    )UnionListCallableTupleOptional)TensorNztorch.ao.quantizationZDeQuantStubZFakeQuantizeFakeQuantizeBaseZFixedQParamsFakeQuantizeZFixedQParamsObserverZFusedMovingAvgObsFakeQuantizeZHistogramObserverZMatchAllNodeZMinMaxObserverZMovingAverageMinMaxObserverZ%MovingAveragePerChannelMinMaxObserverZNoopObserverObserverBaseObserverOrFakeQuantizePatternZPerChannelMinMaxObserverZPlaceholderObserverZQConfigZ
QConfigAnyZQConfigDynamicZQConfigMappingZ	QuantStubZ	QuantTypeZQuantWrapperZRecordingObserverZReuseInputObserverZUniformQuantizationObserverBaseZadd_quant_dequantconvertZconvert_dynamic_jitZconvert_jitZ'default_affine_fixed_qparams_fake_quantZ%default_affine_fixed_qparams_observerZdefault_debug_observerZdefault_dynamic_fake_quantZdefault_dynamic_quant_observerZdefault_embedding_fake_quantZ!default_embedding_fake_quant_4bitdefault_eval_fnZdefault_fake_quantZ+default_fixed_qparams_range_0to1_fake_quantZ)default_fixed_qparams_range_0to1_observerZ.default_fixed_qparams_range_neg1to1_fake_quantZ,default_fixed_qparams_range_neg1to1_observerZdefault_float_qparams_observerZ#default_float_qparams_observer_4bitZdefault_fused_act_fake_quantZ'default_fused_per_channel_wt_fake_quantZdefault_fused_wt_fake_quantZdefault_histogram_fake_quantZdefault_histogram_observerZdefault_observerZ%default_per_channel_weight_fake_quantZ#default_per_channel_weight_observerZdefault_placeholder_observerZdefault_reuse_input_observerZ*default_symmetric_fixed_qparams_fake_quantZ(default_symmetric_fixed_qparams_observerZdefault_weight_fake_quantZdefault_weight_observerZdisable_fake_quantZdisable_observerZenable_fake_quantZenable_observerZfuse_conv_bnZfuse_conv_bn_jitZfuse_conv_bn_reluZfuse_convtranspose_bnZfuse_linear_bnr   r   Z4fused_per_channel_wt_fake_quant_range_neg_127_to_127Z(fused_wt_fake_quant_range_neg_127_to_127Zget_combined_dictZ&get_default_compare_output_module_listZget_default_custom_config_dictZ)get_default_dynamic_quant_module_mappingsZ0get_default_dynamic_sparse_quant_module_mappingsZ0get_default_float_to_quantized_operator_mappingsZget_default_qat_module_mappingsZget_default_qat_qconfigZget_default_qat_qconfig_dictZget_default_qat_qconfig_mappingZget_default_qconfigZget_default_qconfig_dictZget_default_qconfig_mappingZ$get_default_qconfig_propagation_listZ(get_default_static_quant_module_mappingsZ2get_default_static_quant_reference_module_mappingsZ/get_default_static_sparse_quant_module_mappingsZget_dynamic_quant_module_classZ!get_embedding_qat_module_mappingsZ*get_embedding_static_quant_module_mappingsZget_fuser_methodZget_fuser_method_newZget_observer_state_dictZget_quantized_operatorZget_static_quant_module_classZload_observer_state_dictmove_exported_model_to_evalmove_exported_model_to_trainallow_exported_model_train_evalZno_observer_setZ0per_channel_weight_observer_range_neg_127_to_127prepareZprepare_dynamic_jitZprepare_jitZprepare_qatZpropagate_qconfig_Zqconfig_equalsquantizeZquantize_dynamicZquantize_dynamic_jitquantize_jitZquantize_qatZscript_qconfigZscript_qconfig_dictZswap_moduleZ$weight_observer_range_neg_127_to_127r   c                 C   s   |D ]\}}| | qdS )zDefine the default evaluation function.

    Default evaluation function takes a torch.utils.data.Dataset or a list of
    input Tensors and run the model on the dataset
    N )modelZ
calib_datadatatargetr   r   P/var/www/html/venv/lib/python3.8/site-packages/torch/ao/quantization/__init__.pyr      s    c                	       sz   e Zd ZdZdejee eee ge	e
e
f f ee ee eej ee d fddZe
e
dddZd	d
 Z  ZS )_DerivedObserverOrFakeQuantizezuThis observer is used to describe an observer whose quantization parameters
    are derived from other observers
    N)dtype
obs_or_fqsderive_qparams_fn	quant_min	quant_maxqschemech_axisc           	         s\   t  | || _|| _|| _|| _|| _|| _ddlm	} || jrX| jd k	sXt
dd S )Nr   )is_per_channelz6Must provide a valid ch_axis if qscheme is per channel)super__init__r#   r$   r%   r&   r'   r(   utilsr)   AssertionError)	selfr"   r#   r$   r%   r&   r'   r(   r)   	__class__r   r    r+      s    

z'_DerivedObserverOrFakeQuantize.__init__)xreturnc                 C   s   |S Nr   )r.   r1   r   r   r    forward   s    z&_DerivedObserverOrFakeQuantize.forwardc                 C   s   |  | jS r3   )r$   r#   )r.   r   r   r    calculate_qparams   s    z0_DerivedObserverOrFakeQuantize.calculate_qparams)NNNN)__name__
__module____qualname____doc__torchr"   r   r   r   r   r   r   intr'   r+   r4   r5   __classcell__r   r   r/   r    r!      s    	    r!   )$Zfake_quantizer   r   Zfuser_method_mappingsZobserverZqconfigZqconfig_mappingZ
quant_typeZquantization_mappingsr   r   ZstubsZpt2e.export_utilsr   r   r   r   r   r   Z"pt2e.generate_numeric_debug_handler   typingr
   r   r   r   r   r:   r   r   r   r   r7   __all__r   r!   r   r   r   r    <module>   s  {	