diff --git a/mlir/lib/Bindings/Python/IRCore.cpp b/mlir/lib/Bindings/Python/IRCore.cpp index b06937bc285e2..48a65278cc3e6 100644 --- a/mlir/lib/Bindings/Python/IRCore.cpp +++ b/mlir/lib/Bindings/Python/IRCore.cpp @@ -2768,6 +2768,24 @@ void mlir::python::populateIRCore(py::module &m) { return PyOpAttributeMap( self.getOperation().getRef()); }) + .def_property_readonly( + "context", + [](PyOperationBase &self) { + PyOperation &concreteOperation = self.getOperation(); + concreteOperation.checkValid(); + return concreteOperation.getContext().getObject(); + }, + "Context that owns the Operation") + .def_property_readonly("name", + [](PyOperationBase &self) { + auto &concreteOperation = self.getOperation(); + concreteOperation.checkValid(); + MlirOperation operation = + concreteOperation.get(); + MlirStringRef name = mlirIdentifierStr( + mlirOperationGetName(operation)); + return py::str(name.data, name.length); + }) .def_property_readonly("operands", [](PyOperationBase &self) { return PyOpOperandList( @@ -2813,6 +2831,14 @@ void mlir::python::populateIRCore(py::module &m) { }, "Returns the source location the operation was defined or derived " "from.") + .def_property_readonly("parent", + [](PyOperationBase &self) -> py::object { + auto parent = + self.getOperation().getParentOperation(); + if (parent) + return parent->getObject(); + return py::none(); + }) .def( "__str__", [](PyOperationBase &self) { @@ -2855,6 +2881,12 @@ void mlir::python::populateIRCore(py::module &m) { .def("move_before", &PyOperationBase::moveBefore, py::arg("other"), "Puts self immediately before the other operation in its parent " "block.") + .def( + "clone", + [](PyOperationBase &self, py::object ip) { + return self.getOperation().clone(ip); + }, + py::arg("ip") = py::none()) .def( "detach_from_parent", [](PyOperationBase &self) { @@ -2866,7 +2898,8 @@ void mlir::python::populateIRCore(py::module &m) { operation.detachFromParent(); return operation.createOpView(); }, - "Detaches the operation from its parent block."); + "Detaches the operation from its parent block.") + .def("erase", [](PyOperationBase &self) { self.getOperation().erase(); }); py::class_(m, "Operation", py::module_local()) .def_static("create", &PyOperation::create, py::arg("name"), @@ -2887,45 +2920,17 @@ void mlir::python::populateIRCore(py::module &m) { py::arg("context") = py::none(), "Parses an operation. Supports both text assembly format and binary " "bytecode format.") - .def_property_readonly("parent", - [](PyOperation &self) -> py::object { - auto parent = self.getParentOperation(); - if (parent) - return parent->getObject(); - return py::none(); - }) - .def("erase", &PyOperation::erase) - .def("clone", &PyOperation::clone, py::arg("ip") = py::none()) .def_property_readonly(MLIR_PYTHON_CAPI_PTR_ATTR, &PyOperation::getCapsule) .def(MLIR_PYTHON_CAPI_FACTORY_ATTR, &PyOperation::createFromCapsule) - .def_property_readonly("name", - [](PyOperation &self) { - self.checkValid(); - MlirOperation operation = self.get(); - MlirStringRef name = mlirIdentifierStr( - mlirOperationGetName(operation)); - return py::str(name.data, name.length); - }) - .def_property_readonly( - "context", - [](PyOperation &self) { - self.checkValid(); - return self.getContext().getObject(); - }, - "Context that owns the Operation") + .def_property_readonly("operation", [](py::object self) { return self; }) .def_property_readonly("opview", &PyOperation::createOpView); auto opViewClass = py::class_(m, "OpView", py::module_local()) .def(py::init(), py::arg("operation")) .def_property_readonly("operation", &PyOpView::getOperationObject) - .def_property_readonly( - "context", - [](PyOpView &self) { - return self.getOperation().getContext().getObject(); - }, - "Context that owns the Operation") + .def_property_readonly("opview", [](py::object self) { return self; }) .def("__str__", [](PyOpView &self) { return py::str(self.getOperationObject()); }); diff --git a/mlir/python/mlir/_mlir_libs/_mlir/ir.pyi b/mlir/python/mlir/_mlir_libs/_mlir/ir.pyi index 23f4687d0394d..e8f4440d216ee 100644 --- a/mlir/python/mlir/_mlir_libs/_mlir/ir.pyi +++ b/mlir/python/mlir/_mlir_libs/_mlir/ir.pyi @@ -43,11 +43,13 @@ __all__ = [ "DenseElementsAttr", "DenseFPElementsAttr", "DenseIntElementsAttr", + "DenseResourceElementsAttr", "Dialect", "DialectDescriptor", "Dialects", "Diagnostic", "DiagnosticHandler", + "DiagnosticInfo", "DiagnosticSeverity", "DictAttr", "Float8E4M3FNType", @@ -74,6 +76,7 @@ __all__ = [ "Location", "MemRefType", "Module", + "MLIRError", "NamedAttribute", "NoneType", "OpaqueType", @@ -123,10 +126,16 @@ class _OperationBase: @property def attributes(self) -> OpAttributeMap: ... @property + def context(self) -> Context: ... + @property def location(self) -> Location: ... @property + def name(self) -> str: ... + @property def operands(self) -> OpOperandList: ... @property + @property + def parent(self) -> Optional[_OperationBase]: ... def regions(self) -> RegionSequence: ... @property def result(self) -> OpResult: ... @@ -530,6 +539,10 @@ class DenseIntElementsAttr(DenseElementsAttr): @property def type(self) -> Type: ... +class DenseResourceElementsAttr(Attribute): + @staticmethod + def get_from_buffer(array: Any, name: str, type: Type, alignment: Optional[int] = None, is_mutable: bool = False, context: Optional[Context] = None) -> None: ... + class Dialect: def __init__(self, descriptor: DialectDescriptor) -> None: ... @property @@ -563,6 +576,17 @@ class DiagnosticHandler: def __enter__(self) -> DiagnosticHandler: ... def __exit__(self, arg0: object, arg1: object, arg2: object) -> None: ... +class DiagnosticInfo: + def __init__(self, diag: Diagnostic) -> None: ... + @property + def severity(self) -> "DiagnosticSeverity": ... + @property + def location(self) -> "Location": ... + @property + def message(self) -> str: ... + @property + def notes(self) -> Sequence["DiagnosticInfo"]: ... + class DiagnosticSeverity: ERROR: DiagnosticSeverity WARNING: DiagnosticSeverity @@ -871,6 +895,9 @@ class Module: @property def operation(self) -> Operation: ... +class MLIRError(Exception): + def __init__(self, message: str, error_diagnostics: List[DiagnosticInfo]) -> None: ... + class NamedAttribute: @property def attr(self) -> Attribute: ... @@ -950,9 +977,9 @@ class OpView(_OperationBase): loc: Optional[Location] = None, ip: Optional[InsertionPoint] = None) -> _TOperation: ... @property - def context(self) -> Context: ... - @property def operation(self) -> Operation: ... + @property + def opview(self) -> "OpView": ... class Operation(_OperationBase): def _CAPICreate(self) -> object: ... @@ -968,13 +995,9 @@ class Operation(_OperationBase): @property def _CAPIPtr(self) -> object: ... @property - def context(self) -> Context: ... - @property - def name(self) -> str: ... + def operation(self) -> "Operation": ... @property def opview(self) -> OpView: ... - @property - def parent(self) -> Optional[_OperationBase]: ... class OperationIterator: def __iter__(self) -> OperationIterator: ... diff --git a/mlir/python/mlir/_mlir_libs/_mlir/passmanager.pyi b/mlir/python/mlir/_mlir_libs/_mlir/passmanager.pyi index 44d22255e3110..c072d5e0fb86f 100644 --- a/mlir/python/mlir/_mlir_libs/_mlir/passmanager.pyi +++ b/mlir/python/mlir/_mlir_libs/_mlir/passmanager.pyi @@ -20,6 +20,6 @@ class PassManager: def enable_verifier(self, enable: bool) -> None: ... @staticmethod def parse(pipeline: str, context: Optional[_ir.Context] = None) -> PassManager: ... - def run(self, module: _ir.Module) -> None: ... + def run(self, module: _ir._OperationBase) -> None: ... @property def _CAPIPtr(self) -> object: ...