#pragma once #include #include #include namespace c10 { /** * QScheme is an enum that specifies the type of quantization. This has a one * to one correspondence with Quantizer * Please refer to ATen/quantized/Quantizer.h to see the Quantizers classes. * Keep this file in sync with torch/nn/_qscheme.py */ enum class QScheme : uint8_t { PER_TENSOR_AFFINE = 0, PER_CHANNEL_AFFINE = 1, PER_TENSOR_SYMMETRIC = 2, PER_CHANNEL_SYMMETRIC = 3, PER_CHANNEL_AFFINE_FLOAT_QPARAMS = 4, COMPILE_TIME_NUM_QSCHEMES = 5, }; constexpr auto kPerTensorAffine = QScheme::PER_TENSOR_AFFINE; constexpr auto kPerChannelAffine = QScheme::PER_CHANNEL_AFFINE; constexpr auto kPerTensorSymmetric = QScheme::PER_TENSOR_SYMMETRIC; constexpr auto kPerChannelSymmetric = QScheme::PER_CHANNEL_SYMMETRIC; constexpr auto kPerChannelAffineFloatQParams = QScheme::PER_CHANNEL_AFFINE_FLOAT_QPARAMS; constexpr int COMPILE_TIME_NUM_QSCHEMES = static_cast(QScheme::COMPILE_TIME_NUM_QSCHEMES); inline std::string toString(QScheme qscheme) { switch (qscheme) { case kPerTensorAffine: return "per_tensor_affine"; case kPerChannelAffine: return "per_channel_affine"; case kPerTensorSymmetric: return "per_tensor_symmetric"; case kPerChannelSymmetric: return "per_channel_symmetric"; case kPerChannelAffineFloatQParams: return "per_channel_affine_float_qparams"; default: TORCH_CHECK(false, "Unrecognized qscheme: ", static_cast(qscheme)); } } } // namespace c10