13 #include <pybind11/cast.h>
14 #include <pybind11/detail/common.h>
15 #include <pybind11/pybind11.h>
30 quantizedType.def_staticmethod(
31 "default_minimum_for_integer",
32 [](
bool isSigned,
unsigned integralWidth) {
36 "Default minimum value for the integer with the specified signedness and "
38 py::arg(
"is_signed"), py::arg(
"integral_width"));
39 quantizedType.def_staticmethod(
40 "default_maximum_for_integer",
41 [](
bool isSigned,
unsigned integralWidth) {
45 "Default maximum value for the integer with the specified signedness and "
47 py::arg(
"is_signed"), py::arg(
"integral_width"));
48 quantizedType.def_property_readonly(
51 "Type expressed by this quantized type.");
52 quantizedType.def_property_readonly(
54 "Flags of this quantized type (named accessors should be preferred to "
56 quantizedType.def_property_readonly(
59 "Signedness of this quantized type.");
60 quantizedType.def_property_readonly(
63 "Storage type backing this quantized type.");
64 quantizedType.def_property_readonly(
67 "The minimum value held by the storage type of this quantized type.");
68 quantizedType.def_property_readonly(
71 "The maximum value held by the storage type of this quantized type.");
72 quantizedType.def_property_readonly(
73 "storage_type_integral_width",
77 "The bitwidth of the storage type of this quantized type.");
79 "is_compatible_expressed_type",
80 [](MlirType type, MlirType candidate) {
83 "Checks whether the candidate type can be expressed by this quantized "
85 py::arg(
"candidate"));
86 quantizedType.def_property_readonly(
87 "quantized_element_type",
91 "Element type of this quantized type expressed as quantized type.");
93 "cast_from_storage_type",
94 [](MlirType type, MlirType candidate) {
99 throw py::type_error(
"Invalid cast.");
101 "Casts from a type based on the storage type of this quantized type to a "
102 "corresponding type based on the quantized type. Raises TypeError if the "
103 "cast is not valid.",
104 py::arg(
"candidate"));
105 quantizedType.def_staticmethod(
106 "cast_to_storage_type",
111 throw py::type_error(
"Invalid cast.");
113 "Casts from a type based on a quantized type to a corresponding type "
114 "based on the storage type of this quantized type. Raises TypeError if "
115 "the cast is not valid.",
118 "cast_from_expressed_type",
119 [](MlirType type, MlirType candidate) {
120 MlirType castResult =
124 throw py::type_error(
"Invalid cast.");
126 "Casts from a type based on the expressed type of this quantized type to "
127 "a corresponding type based on the quantized type. Raises TypeError if "
128 "the cast is not valid.",
129 py::arg(
"candidate"));
130 quantizedType.def_staticmethod(
131 "cast_to_expressed_type",
136 throw py::type_error(
"Invalid cast.");
138 "Casts from a type based on a quantized type to a corresponding type "
139 "based on the expressed type of this quantized type. Raises TypeError if "
140 "the cast is not valid.",
143 "cast_expressed_to_storage_type",
144 [](MlirType type, MlirType candidate) {
145 MlirType castResult =
149 throw py::type_error(
"Invalid cast.");
151 "Casts from a type based on the expressed type of this quantized type to "
152 "a corresponding type based on the storage type. Raises TypeError if the "
153 "cast is not valid.",
154 py::arg(
"candidate"));
156 quantizedType.get_class().attr(
"FLAG_SIGNED") =
163 auto anyQuantizedType =
165 quantizedType.get_class());
166 anyQuantizedType.def_classmethod(
168 [](py::object cls,
unsigned flags, MlirType storageType,
169 MlirType expressedType, int64_t storageTypeMin,
170 int64_t storageTypeMax) {
172 storageTypeMin, storageTypeMax));
174 "Gets an instance of AnyQuantizedType in the same context as the "
175 "provided storage type.",
176 py::arg(
"cls"), py::arg(
"flags"), py::arg(
"storage_type"),
177 py::arg(
"expressed_type"), py::arg(
"storage_type_min"),
178 py::arg(
"storage_type_max"));
186 quantizedType.get_class());
187 uniformQuantizedType.def_classmethod(
189 [](py::object cls,
unsigned flags, MlirType storageType,
190 MlirType expressedType,
double scale, int64_t zeroPoint,
191 int64_t storageTypeMin, int64_t storageTypeMax) {
193 expressedType, scale, zeroPoint,
194 storageTypeMin, storageTypeMax));
196 "Gets an instance of UniformQuantizedType in the same context as the "
197 "provided storage type.",
198 py::arg(
"cls"), py::arg(
"flags"), py::arg(
"storage_type"),
199 py::arg(
"expressed_type"), py::arg(
"scale"), py::arg(
"zero_point"),
200 py::arg(
"storage_type_min"), py::arg(
"storage_type_max"));
201 uniformQuantizedType.def_property_readonly(
204 "The scale designates the difference between the real values "
205 "corresponding to consecutive quantized values differing by 1.");
206 uniformQuantizedType.def_property_readonly(
209 "The storage value corresponding to the real value 0 in the affine "
211 uniformQuantizedType.def_property_readonly(
214 "Fixed point values are real numbers divided by a scale.");
221 quantizedType.get_class());
222 uniformQuantizedPerAxisType.def_classmethod(
224 [](py::object cls,
unsigned flags, MlirType storageType,
225 MlirType expressedType, std::vector<double> scales,
226 std::vector<int64_t> zeroPoints, int32_t quantizedDimension,
227 int64_t storageTypeMin, int64_t storageTypeMax) {
228 if (scales.size() != zeroPoints.size())
229 throw py::value_error(
230 "Mismatching number of scales and zero points.");
231 auto nDims =
static_cast<intptr_t
>(scales.size());
233 flags, storageType, expressedType, nDims, scales.data(),
234 zeroPoints.data(), quantizedDimension, storageTypeMin,
237 "Gets an instance of UniformQuantizedPerAxisType in the same context as "
238 "the provided storage type.",
239 py::arg(
"cls"), py::arg(
"flags"), py::arg(
"storage_type"),
240 py::arg(
"expressed_type"), py::arg(
"scales"), py::arg(
"zero_points"),
241 py::arg(
"quantized_dimension"), py::arg(
"storage_type_min"),
242 py::arg(
"storage_type_max"));
243 uniformQuantizedPerAxisType.def_property_readonly(
247 std::vector<double> scales;
248 scales.reserve(nDim);
249 for (intptr_t i = 0; i < nDim; ++i) {
251 scales.push_back(scale);
254 "The scales designate the difference between the real values "
255 "corresponding to consecutive quantized values differing by 1. The ith "
256 "scale corresponds to the ith slice in the quantized_dimension.");
257 uniformQuantizedPerAxisType.def_property_readonly(
261 std::vector<int64_t> zeroPoints;
262 zeroPoints.reserve(nDim);
263 for (intptr_t i = 0; i < nDim; ++i) {
266 zeroPoints.push_back(zeroPoint);
269 "the storage values corresponding to the real value 0 in the affine "
270 "equation. The ith zero point corresponds to the ith slice in the "
271 "quantized_dimension.");
272 uniformQuantizedPerAxisType.def_property_readonly(
273 "quantized_dimension",
277 "Specifies the dimension of the shape that the scales and zero points "
279 uniformQuantizedPerAxisType.def_property_readonly(
284 "Fixed point values are real numbers divided by a scale.");
292 quantizedType.get_class());
293 calibratedQuantizedType.def_classmethod(
295 [](py::object cls, MlirType expressedType,
double min,
double max) {
298 "Gets an instance of CalibratedQuantizedType in the same context as the "
299 "provided expressed type.",
300 py::arg(
"cls"), py::arg(
"expressed_type"), py::arg(
"min"),
302 calibratedQuantizedType.def_property_readonly(
"min", [](MlirType type) {
305 calibratedQuantizedType.def_property_readonly(
"max", [](MlirType type) {
311 m.doc() =
"MLIR Quantization dialect";
PYBIND11_MODULE(_mlirDialectsQuant, m)
static void populateDialectQuantSubmodule(const py::module &m)
static Value max(ImplicitLocOpBuilder &builder, Value value, Value bound)
static Value min(ImplicitLocOpBuilder &builder, Value value, Value bound)
Creates a custom subclass of mlir.ir.Type, implementing a casting constructor and type checking metho...
MLIR_CAPI_EXPORTED intptr_t mlirUniformQuantizedPerAxisTypeGetNumDims(MlirType type)
Returns the number of axes in the given quantized per-axis type.
MLIR_CAPI_EXPORTED bool mlirTypeIsACalibratedQuantizedType(MlirType type)
Returns true if the given type is a CalibratedQuantizedType.
MLIR_CAPI_EXPORTED int64_t mlirQuantizedTypeGetDefaultMaximumForInteger(bool isSigned, unsigned integralWidth)
Returns the maximum possible value stored by a quantized type.
MLIR_CAPI_EXPORTED bool mlirUniformQuantizedTypeIsFixedPoint(MlirType type)
Returns true if the given uniform quantized type is fixed-point.
MLIR_CAPI_EXPORTED int64_t mlirQuantizedTypeGetStorageTypeMin(MlirType type)
Returns the minimum value that the storage type of the given quantized type can take.
MLIR_CAPI_EXPORTED bool mlirTypeIsAUniformQuantizedType(MlirType type)
Returns true if the given type is a UniformQuantizedType.
MLIR_CAPI_EXPORTED bool mlirTypeIsAQuantizedType(MlirType type)
Returns true if the given type is a quantization dialect type.
MLIR_CAPI_EXPORTED double mlirUniformQuantizedPerAxisTypeGetScale(MlirType type, intptr_t pos)
Returns pos-th scale of the given quantized per-axis type.
MLIR_CAPI_EXPORTED int64_t mlirUniformQuantizedTypeGetZeroPoint(MlirType type)
Returns the zero point of the given uniform quantized type.
MLIR_CAPI_EXPORTED bool mlirUniformQuantizedPerAxisTypeIsFixedPoint(MlirType type)
Returns true if the given uniform quantized per-axis type is fixed-point.
MLIR_CAPI_EXPORTED int64_t mlirQuantizedTypeGetStorageTypeMax(MlirType type)
Returns the maximum value that the storage type of the given quantized type can take.
MLIR_CAPI_EXPORTED double mlirCalibratedQuantizedTypeGetMax(MlirType type)
Returns the max value of the given calibrated quantized type.
MLIR_CAPI_EXPORTED MlirType mlirCalibratedQuantizedTypeGet(MlirType expressedType, double min, double max)
Creates an instance of CalibratedQuantizedType with the given parameters in the same context as expre...
MLIR_CAPI_EXPORTED bool mlirQuantizedTypeIsSigned(MlirType type)
Returns true if the given type is signed, false otherwise.
MLIR_CAPI_EXPORTED int64_t mlirUniformQuantizedPerAxisTypeGetZeroPoint(MlirType type, intptr_t pos)
Returns pos-th zero point of the given quantized per-axis type.
MLIR_CAPI_EXPORTED int32_t mlirUniformQuantizedPerAxisTypeGetQuantizedDimension(MlirType type)
Returns the index of the quantized dimension in the given quantized per-axis type.
MLIR_CAPI_EXPORTED MlirType mlirQuantizedTypeCastToExpressedType(MlirType type)
Casts from a type based on a quantized type to a corresponding typed based on the expressed type.
MLIR_CAPI_EXPORTED MlirType mlirQuantizedTypeGetExpressedType(MlirType type)
Gets the original type approximated by the given quantized type.
MLIR_CAPI_EXPORTED unsigned mlirQuantizedTypeGetStorageTypeIntegralWidth(MlirType type)
Returns the integral bitwidth that the storage type of the given quantized type can represent exactly...
MLIR_CAPI_EXPORTED MlirType mlirAnyQuantizedTypeGet(unsigned flags, MlirType storageType, MlirType expressedType, int64_t storageTypeMin, int64_t storageTypeMax)
Creates an instance of AnyQuantizedType with the given parameters in the same context as storageType ...
MLIR_CAPI_EXPORTED MlirType mlirQuantizedTypeCastToStorageType(MlirType type)
Casts from a type based on a quantized type to a corresponding typed based on the storage type.
MLIR_CAPI_EXPORTED MlirType mlirQuantizedTypeGetStorageType(MlirType type)
Returns the underlying type used to store the values.
MLIR_CAPI_EXPORTED MlirType mlirQuantizedTypeCastFromExpressedType(MlirType type, MlirType candidate)
Casts from a type based on the expressed type of the given type to a corresponding type based on the ...
MLIR_CAPI_EXPORTED bool mlirTypeIsAUniformQuantizedPerAxisType(MlirType type)
Returns true if the given type is a UniformQuantizedPerAxisType.
MLIR_CAPI_EXPORTED MlirType mlirQuantizedTypeGetQuantizedElementType(MlirType type)
Returns the element type of the given quantized type as another quantized type.
MLIR_CAPI_EXPORTED bool mlirTypeIsAAnyQuantizedType(MlirType type)
Returns true if the given type is an AnyQuantizedType.
MLIR_CAPI_EXPORTED MlirType mlirQuantizedTypeCastExpressedToStorageType(MlirType type, MlirType candidate)
Casts from a type based on the expressed type of the given quantized type to equivalent type based on...
MLIR_CAPI_EXPORTED MlirType mlirQuantizedTypeCastFromStorageType(MlirType type, MlirType candidate)
Casts from a type based on the storage type of the given type to a corresponding type based on the gi...
MLIR_CAPI_EXPORTED unsigned mlirQuantizedTypeGetSignedFlag(void)
Returns the bit flag used to indicate signedness of a quantized type.
MLIR_CAPI_EXPORTED int64_t mlirQuantizedTypeGetDefaultMinimumForInteger(bool isSigned, unsigned integralWidth)
Returns the minimum possible value stored by a quantized type.
MLIR_CAPI_EXPORTED double mlirCalibratedQuantizedTypeGetMin(MlirType type)
Returns the min value of the given calibrated quantized type.
MLIR_CAPI_EXPORTED unsigned mlirQuantizedTypeGetFlags(MlirType type)
Gets the flags associated with the given quantized type.
MLIR_CAPI_EXPORTED MlirType mlirUniformQuantizedPerAxisTypeGet(unsigned flags, MlirType storageType, MlirType expressedType, intptr_t nDims, double *scales, int64_t *zeroPoints, int32_t quantizedDimension, int64_t storageTypeMin, int64_t storageTypeMax)
Creates an instance of UniformQuantizedPerAxisType with the given parameters in the same context as s...
MLIR_CAPI_EXPORTED bool mlirQuantizedTypeIsCompatibleExpressedType(MlirType type, MlirType candidate)
Returns true if the candidate type is compatible with the given quantized type.
MLIR_CAPI_EXPORTED double mlirUniformQuantizedTypeGetScale(MlirType type)
Returns the scale of the given uniform quantized type.
MLIR_CAPI_EXPORTED MlirType mlirUniformQuantizedTypeGet(unsigned flags, MlirType storageType, MlirType expressedType, double scale, int64_t zeroPoint, int64_t storageTypeMin, int64_t storageTypeMax)
Creates an instance of UniformQuantizedType with the given parameters in the same context as storageT...
static bool mlirTypeIsNull(MlirType type)
Checks whether a type is null.
The OpAsmOpInterface, see OpAsmInterface.td for more details.
Include the generated interface declarations.