18 using namespace nb::literals;
26 m.doc() =
"MLIR Python Native Extension";
28 nb::class_<PyGlobals>(m,
"_Globals")
29 .def_prop_rw(
"dialect_search_modules",
30 &PyGlobals::getDialectSearchPrefixes,
31 &PyGlobals::setDialectSearchPrefixes)
32 .def(
"append_dialect_search_prefix", &PyGlobals::addDialectSearchPrefix,
35 "_check_dialect_module_loaded",
36 [](
PyGlobals &
self,
const std::string &dialectNamespace) {
37 return self.loadDialectModule(dialectNamespace);
39 "dialect_namespace"_a)
40 .def(
"_register_dialect_impl", &PyGlobals::registerDialectImpl,
41 "dialect_namespace"_a,
"dialect_class"_a,
42 "Testing hook for directly registering a dialect")
43 .def(
"_register_operation_impl", &PyGlobals::registerOperationImpl,
44 "operation_name"_a,
"operation_class"_a, nb::kw_only(),
46 "Testing hook for directly registering an operation")
47 .def(
"loc_tracebacks_enabled",
49 return self.getTracebackLoc().locTracebacksEnabled();
51 .def(
"set_loc_tracebacks_enabled",
53 self.getTracebackLoc().setLocTracebacksEnabled(enabled);
55 .def(
"loc_tracebacks_frame_limit",
57 return self.getTracebackLoc().locTracebackFramesLimit();
59 .def(
"set_loc_tracebacks_frame_limit",
60 [](
PyGlobals &
self, std::optional<int> n) {
61 self.getTracebackLoc().setLocTracebackFramesLimit(
62 n.value_or(PyGlobals::TracebackLoc::kMaxFrames));
64 .def(
"register_traceback_file_inclusion",
65 [](
PyGlobals &
self,
const std::string &filename) {
66 self.getTracebackLoc().registerTracebackFileInclusion(filename);
68 .def(
"register_traceback_file_exclusion",
69 [](
PyGlobals &
self,
const std::string &filename) {
70 self.getTracebackLoc().registerTracebackFileExclusion(filename);
76 m.attr(
"globals") = nb::cast(
new PyGlobals, nb::rv_policy::take_ownership);
81 [](nb::type_object pyClass) {
82 std::string dialectNamespace =
83 nanobind::cast<std::string>(pyClass.attr(
"DIALECT_NAMESPACE"));
88 "Class decorator for registering a custom Dialect wrapper");
91 [](
const nb::type_object &dialectClass,
bool replace) -> nb::object {
92 return nb::cpp_function(
94 replace](nb::type_object opClass) -> nb::type_object {
95 std::string operationName =
96 nanobind::cast<std::string>(opClass.attr(
"OPERATION_NAME"));
100 nb::object opClassName = opClass.attr(
"__name__");
101 dialectClass.attr(opClassName) = opClass;
105 "dialect_class"_a, nb::kw_only(),
"replace"_a =
false,
106 "Produce a class decorator for registering an Operation class as part of "
110 [](MlirTypeID mlirTypeID,
bool replace) -> nb::object {
111 return nb::cpp_function([mlirTypeID, replace](
112 nb::callable typeCaster) -> nb::object {
113 PyGlobals::get().registerTypeCaster(mlirTypeID, typeCaster, replace);
117 "typeid"_a, nb::kw_only(),
"replace"_a =
false,
118 "Register a type caster for casting MLIR types to custom user types.");
121 [](MlirTypeID mlirTypeID,
bool replace) -> nb::object {
122 return nb::cpp_function(
123 [mlirTypeID, replace](nb::callable valueCaster) -> nb::object {
129 "typeid"_a, nb::kw_only(),
"replace"_a =
false,
130 "Register a value caster for casting MLIR values to custom user values.");
133 auto irModule = m.def_submodule(
"ir",
"MLIR IR Bindings");
140 auto rewriteModule = m.def_submodule(
"rewrite",
"MLIR Rewrite Bindings");
144 auto passManagerModule =
145 m.def_submodule(
"passmanager",
"MLIR Pass Management Bindings");
#define MLIR_PYTHON_CAPI_VALUE_CASTER_REGISTER_ATTR
Attribute on main C extension module (_mlir) that corresponds to the value caster registration bindin...
#define MLIR_PYTHON_CAPI_TYPE_CASTER_REGISTER_ATTR
Attribute on main C extension module (_mlir) that corresponds to the type caster registration binding...
Globals that are always accessible once the extension has been initialized.
void populateIRAttributes(nanobind::module_ &m)
void populateIRInterfaces(nb::module_ &m)
void populatePassManagerSubmodule(nanobind::module_ &m)
void populateIRAffine(nanobind::module_ &m)
void populateRewriteSubmodule(nanobind::module_ &m)
void populateIRTypes(nanobind::module_ &m)
void populateIRCore(nanobind::module_ &m)
Include the generated interface declarations.
auto get(MLIRContext *context, Ts &&...params)
Helper method that injects context only if needed, this helps unify some of the attribute constructio...