#include <quantization_details.hpp>
class QuantizationDetails
{
public:
// fields
const size_t levels;
const std::vector<float> inputLowValues;
const std::vector<float> inputHighValues;
const std::vector<float> outputLowValues;
const std::vector<float> outputHighValues;
// construction
QuantizationDetails();
QuantizationDetails(const QuantizationDetails& quantizationDetails);
QuantizationDetails(
const size_t levels,
const std::vector<float>& inputLowValues,
const std::vector<float>& inputHighValues,
const std::vector<float>& outputLowValues,
const std::vector<float>& outputHighValues
);
// methods
bool hasNegativeOutput() const;
float maxOutput(const size_t channel) const;
float maxInput(const size_t channel) const;
float getInputLowValue(const size_t channel) const;
float getInputHighValue(const size_t channel) const;
float getOutputLowValue(const size_t channel) const;
float getOutputHighValue(const size_t channel) const;
bool empty() const;
static bool outputLayoutIsSupported(
std::shared_ptr<opset1::FakeQuantize> quantize,
bool isConvertExpected = false
);
static void getInputIntervals(
std::shared_ptr<opset1::FakeQuantize> quantize,
std::vector<float>& inputLowValues,
std::vector<float>& inputHighValues
);
static void getOutputIntervals(
std::shared_ptr<opset1::FakeQuantize> quantize,
std::vector<float>& outputLowValues,
std::vector<float>& outputHighValues
);
static QuantizationDetails getDetails(std::shared_ptr<opset1::FakeQuantize>);
static bool isSupportedLevel(const size_t level);
};