o
    Zh                     @   s
  d dl mZmZmZ d dlZd dlmZ ddlT ddlmZmZ ddl	T ddl
T ddlmZmZmZmZmZmZ ddlmZmZ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 ee e!f Z"d	e"_#eeeefD ]Z$d	e$_#qmg d
Z%dd Z&G dd de Z'dS )    )CallableOptionalUnionN)Tensor   )*)fuse_modulesfuse_modules_qat)compare_results
CUSTOM_KEYextract_results_from_loggersgenerate_numeric_debug_handleNUMERIC_DEBUG_HANDLE_KEY"prepare_for_propagation_comparison) _allow_exported_model_train_eval_move_exported_model_to_eval_move_exported_model_to_trainztorch.ao.quantization)Z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   r   r   r   r   r
   ZAffineQuantizedObserverBaseZGranularityZMappingTypeZPerAxisZPerBlockZPerGroupZPerRowZ	PerTensorZPerTokenZTorchAODTypeZZeroPointDomainZget_block_sizec                 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   M/var/www/auris/lib/python3.10/site-packages/torch/ao/quantization/__init__.pyr      s   
r   c                       s   e Zd ZdZ				ddejdee deee ge	e
e
f f dee dee deej d	ee f fd
dZde
de
f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r,| jd us.J dd S 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,   )	selfr%   r&   r'   r(   r)   r*   r+   r,   	__class__r   r#   r.      s   
z'_DerivedObserverOrFakeQuantize.__init__xreturnc                 C   s   |S Nr   )r0   r3   r   r   r#   forward   s   z&_DerivedObserverOrFakeQuantize.forwardc                 C   s   |  | jS r5   )r'   r&   )r0   r   r   r#   calculate_qparams   s   z0_DerivedObserverOrFakeQuantize.calculate_qparams)NNNN)__name__
__module____qualname____doc__torchr%   listr   r   tupler   r   intr*   r.   r6   r7   __classcell__r   r   r1   r#   r$      s2    	
r$   )(typingr   r   r   r<   r   Zfake_quantizer   r	   Zfuser_method_mappingsZobserverZpt2e._numeric_debuggerr
   r   r   r   r   r   Zpt2e.export_utilsr   r   r   r   r   r   ZqconfigZqconfig_mappingZ
quant_typeZquantization_mappingsr   r   Zstubsr   r   r   r9   Z_f__all__r   r$   r   r   r   r#   <module>   s8     
