45static std::optional<PyLinalgContractionDimensions>
52 if (mlirAttributeIsNull(dims.
batch) && mlirAttributeIsNull(dims.
m) &&
53 mlirAttributeIsNull(dims.
n) && mlirAttributeIsNull(dims.
k)) {
59static std::optional<PyLinalgConvolutionDimensions>
66 if (mlirAttributeIsNull(dims.
batch) &&
71 mlirAttributeIsNull(dims.
depth) && mlirAttributeIsNull(dims.
strides) &&
81 "fill_builtin_region",
86 "Fill the region for `op`, which is assumed to be a builtin named Linalg "
94 "Checks if the given operation is a Linalg contraction operation.",
97 nb::class_<PyLinalgContractionDimensions>(m,
"ContractionDimensions")
110 "Infers contraction dimensions (batch/m/n/k) for a Linalg contraction "
115 "infer_contraction_dimensions_from_maps",
116 [](std::vector<PyAffineMap> indexingMaps)
117 -> std::optional<PyLinalgContractionDimensions> {
118 if (indexingMaps.empty())
121 std::vector<MlirAffineMap> indexingMaps_(indexingMaps.size());
122 std::copy(indexingMaps.begin(), indexingMaps.end(),
123 indexingMaps_.begin());
126 indexingMaps_.size());
129 if (mlirAttributeIsNull(dims.
batch) && mlirAttributeIsNull(dims.
m) &&
130 mlirAttributeIsNull(dims.
n) && mlirAttributeIsNull(dims.
k)) {
135 "Infers contraction dimensions (batch/m/n/k) from a list of affine "
137 nb::arg(
"indexing_maps"));
140 "isa_convolution_op",
144 "Checks if the given operation is a Linalg convolution operation.",
147 nb::class_<PyLinalgConvolutionDimensions>(m,
"ConvolutionDimensions")
151 .def_prop_ro(
"output_image",
153 return self.outputImage;
155 .def_prop_ro(
"output_channel",
157 return self.outputChannel;
159 .def_prop_ro(
"filter_loop",
161 return self.filterLoop;
163 .def_prop_ro(
"input_channel",
165 return self.inputChannel;
170 .def_prop_ro(
"strides",
175 return self.dilations;
179 "Infers convolution dimensions", nb::arg(
"op"));
186 if (mlirAttributeIsNull(attr))
190 "Returns the indexing_maps attribute for a linalg op.");
198 m.doc() =
"MLIR Linalg dialect.";
NB_MODULE(_mlirDialectsLinalg, m)
PyMlirContextRef & getContext()
Accesses the context reference.
Base class for PyOperation and PyOpView which exposes the primary, user visible methods for manipulat...
virtual PyOperation & getOperation()=0
Each must provide access to the raw Operation.
MLIR_CAPI_EXPORTED MlirLinalgConvolutionDimensions mlirLinalgInferConvolutionDimensions(MlirOperation op)
MLIR_CAPI_EXPORTED void mlirLinalgFillBuiltinNamedOpRegion(MlirOperation mlirOp)
Apply the special region builder for the builtin named Linalg op.
MLIR_CAPI_EXPORTED MlirLinalgContractionDimensions mlirLinalgInferContractionDimensionsFromMaps(const MlirAffineMap *indexingMaps, size_t numMaps)
MLIR_CAPI_EXPORTED bool mlirLinalgIsAContractionOp(MlirOperation op)
MLIR_CAPI_EXPORTED MlirAttribute mlirLinalgGetIndexingMapsAttribute(MlirOperation op)
MLIR_CAPI_EXPORTED bool mlirLinalgIsAConvolutionOp(MlirOperation op)
MLIR_CAPI_EXPORTED MlirLinalgContractionDimensions mlirLinalgInferContractionDimensions(MlirOperation op)
static void populateDialectLinalgSubmodule(nb::module_ m)
static std::optional< PyLinalgContractionDimensions > InferContractionDimensions(PyOperationBase &op)
static std::optional< PyLinalgConvolutionDimensions > InferConvolutionDimensions(PyOperationBase &op)
Include the generated interface declarations.
MlirAttribute outputChannel
MlirAttribute outputImage
MlirAttribute inputChannel
PyLinalgContractionDimensions(const MlirLinalgContractionDimensions &dims)
PyLinalgConvolutionDimensions(const MlirLinalgConvolutionDimensions &dims)