From ef8922a758dc9bc83714e4d54c72bb2135b9d561 Mon Sep 17 00:00:00 2001 From: "Jonathan M. Waldrop" Date: Fri, 19 Jun 2026 12:58:35 -0500 Subject: [PATCH] centralize most python stuff --- src/python/hardware/hardware.hpp | 6 ++--- src/python/hardware/ram/ram.cpp | 11 ++++----- src/python/logging/logger.cpp | 16 ++++++------ src/python/logging/logger_factory.cpp | 6 ++--- src/python/logging/logging.hpp | 8 +++--- src/python/module.cpp | 2 +- src/python/pyparallelzone.hpp | 35 +++++++++++++++++++++++++++ src/python/runtime/resource_set.cpp | 12 ++++----- src/python/runtime/runtime.hpp | 8 +++--- src/python/runtime/runtime_view.cpp | 14 +++++------ 10 files changed, 75 insertions(+), 43 deletions(-) create mode 100644 src/python/pyparallelzone.hpp diff --git a/src/python/hardware/hardware.hpp b/src/python/hardware/hardware.hpp index 8dfac82e..5b72b8c8 100644 --- a/src/python/hardware/hardware.hpp +++ b/src/python/hardware/hardware.hpp @@ -15,13 +15,13 @@ */ #pragma once -#include +#include "../pyparallelzone.hpp" namespace parallelzone::hardware { -void export_ram(pybind11::module_& m); +void export_ram(python_module_type& m); -inline void export_hardware(pybind11::module_& m) { +inline void export_hardware(python_module_type& m) { auto mhardware = m.def_submodule("hardware"); export_ram(mhardware); } diff --git a/src/python/hardware/ram/ram.cpp b/src/python/hardware/ram/ram.cpp index bee47190..c543782e 100644 --- a/src/python/hardware/ram/ram.cpp +++ b/src/python/hardware/ram/ram.cpp @@ -16,19 +16,18 @@ #include "../hardware.hpp" #include -#include namespace parallelzone::hardware { -void export_ram(pybind11::module_& m) { +void export_ram(python_module_type& m) { using hardware::RAM; - pybind11::class_(m, "RAM") - .def(pybind11::init<>()) + python_class_type(m, "RAM") + .def(py::init<>()) .def("total_space", &RAM::total_space) .def("empty", &RAM::empty) - .def(pybind11::self == pybind11::self) - .def(pybind11::self != pybind11::self); + .def(py::self == py::self) + .def(py::self != py::self); } } // namespace parallelzone::hardware diff --git a/src/python/logging/logger.cpp b/src/python/logging/logger.cpp index 2a7c466c..de74a932 100644 --- a/src/python/logging/logger.cpp +++ b/src/python/logging/logger.cpp @@ -16,19 +16,18 @@ #include "logging.hpp" #include -#include namespace parallelzone { -void export_logger(pybind11::module_& m) { +void export_logger(python_module_type& m) { using const_string_reference = Logger::const_string_reference; using severity = Logger::severity; using log0 = Logger& (Logger::*)(const_string_reference); using log1 = Logger& (Logger::*)(severity, const_string_reference); - pybind11::class_ logger(m, "Logger"); - logger.def(pybind11::init<>()) + python_class_type logger(m, "Logger"); + logger.def(py::init<>()) .def("set_severity", &Logger::set_severity) .def("trace", &Logger::trace) .def("debug", &Logger::debug) @@ -38,16 +37,17 @@ void export_logger(pybind11::module_& m) { .def("critical", &Logger::critical) .def("log", static_cast(&Logger::log)) .def("log", static_cast(&Logger::log)) - .def(pybind11::self == pybind11::self) - .def(pybind11::self != pybind11::self); + .def(py::self == py::self) + .def(py::self != py::self); - pybind11::enum_(logger, "severity") + python_enum_type(logger, "severity", "enum.Enum") .value("trace", severity::trace) .value("debug", severity::debug) .value("info", severity::info) .value("warn", severity::warn) .value("error", severity::error) - .value("critical", severity::critical); + .value("critical", severity::critical) + .finalize(); } } // namespace parallelzone diff --git a/src/python/logging/logger_factory.cpp b/src/python/logging/logger_factory.cpp index e51d8cd8..9dcb8977 100644 --- a/src/python/logging/logger_factory.cpp +++ b/src/python/logging/logger_factory.cpp @@ -19,9 +19,9 @@ namespace parallelzone { -void export_logger_factory(pybind11::module_& m) { - pybind11::class_(m, "LoggerFactory") - .def(pybind11::init<>()) +void export_logger_factory(python_module_type& m) { + python_class_type(m, "LoggerFactory") + .def(py::init<>()) .def("default_global_logger", &LoggerFactory::default_global_logger); } diff --git a/src/python/logging/logging.hpp b/src/python/logging/logging.hpp index e80dd416..1ea45b5a 100644 --- a/src/python/logging/logging.hpp +++ b/src/python/logging/logging.hpp @@ -15,14 +15,14 @@ */ #pragma once -#include +#include "../pyparallelzone.hpp" namespace parallelzone { -void export_logger_factory(pybind11::module_& m); -void export_logger(pybind11::module_& m); +void export_logger_factory(python_module_type& m); +void export_logger(python_module_type& m); -inline void export_logging(pybind11::module_& m) { +inline void export_logging(python_module_type& m) { export_logger_factory(m); export_logger(m); } diff --git a/src/python/module.cpp b/src/python/module.cpp index 1c7c8334..37ee3560 100644 --- a/src/python/module.cpp +++ b/src/python/module.cpp @@ -16,8 +16,8 @@ #include "hardware/hardware.hpp" #include "logging/logging.hpp" +#include "pyparallelzone.hpp" #include "runtime/runtime.hpp" -#include namespace parallelzone { diff --git a/src/python/pyparallelzone.hpp b/src/python/pyparallelzone.hpp new file mode 100644 index 00000000..dcc91436 --- /dev/null +++ b/src/python/pyparallelzone.hpp @@ -0,0 +1,35 @@ +/* + * Copyright 2023 NWChemEx-Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once +#include +#include +#include +#include + +namespace parallelzone { + +namespace py = pybind11; + +using python_module_type = py::module_; + +template +using python_class_type = py::class_; + +template +using python_enum_type = py::native_enum; + +} // namespace parallelzone diff --git a/src/python/runtime/resource_set.cpp b/src/python/runtime/resource_set.cpp index a1726c3b..abb75897 100644 --- a/src/python/runtime/resource_set.cpp +++ b/src/python/runtime/resource_set.cpp @@ -16,13 +16,12 @@ #include "runtime.hpp" #include -#include namespace parallelzone::runtime { -void export_resource_set(pybind11::module_& m) { - pybind11::class_(m, "ResourceSet") - .def(pybind11::init<>()) +void export_resource_set(python_module_type& m) { + python_class_type(m, "ResourceSet") + .def(py::init<>()) .def("mpi_rank", &ResourceSet::mpi_rank) .def("is_mine", &ResourceSet::is_mine) .def("has_ram", &ResourceSet::has_ram) @@ -30,7 +29,8 @@ void export_resource_set(pybind11::module_& m) { .def("logger", &ResourceSet::logger) .def("null", &ResourceSet::null) .def("empty", &ResourceSet::empty) - .def(pybind11::self == pybind11::self) - .def(pybind11::self != pybind11::self); + .def(py::self == py::self) + .def(py::self != py::self); } + } // namespace parallelzone::runtime diff --git a/src/python/runtime/runtime.hpp b/src/python/runtime/runtime.hpp index 3ace2fa6..5672e186 100644 --- a/src/python/runtime/runtime.hpp +++ b/src/python/runtime/runtime.hpp @@ -15,14 +15,14 @@ */ #pragma once -#include +#include "../pyparallelzone.hpp" namespace parallelzone::runtime { -void export_runtime_view(pybind11::module_& m); -void export_resource_set(pybind11::module_& m); +void export_runtime_view(python_module_type& m); +void export_resource_set(python_module_type& m); -inline void export_runtime(pybind11::module_& m) { +inline void export_runtime(python_module_type& m) { auto mruntime = m.def_submodule("runtime"); export_runtime_view(mruntime); export_resource_set(mruntime); diff --git a/src/python/runtime/runtime_view.cpp b/src/python/runtime/runtime_view.cpp index e2892405..fb317237 100644 --- a/src/python/runtime/runtime_view.cpp +++ b/src/python/runtime/runtime_view.cpp @@ -16,14 +16,12 @@ #include "runtime.hpp" #include -#include -#include namespace parallelzone::runtime { -void export_runtime_view(pybind11::module_& m) { - pybind11::class_(m, "RuntimeView") - .def(pybind11::init<>()) +void export_runtime_view(python_module_type& m) { + python_class_type(m, "RuntimeView") + .def(py::init<>()) .def("size", &RuntimeView::size) .def("null", &RuntimeView::null) .def("did_i_start_mpi", &RuntimeView::did_i_start_mpi) @@ -32,9 +30,9 @@ void export_runtime_view(pybind11::module_& m) { .def("my_resource_set", &RuntimeView::my_resource_set) .def("count", &RuntimeView::count) .def("logger", &RuntimeView::logger, - pybind11::return_value_policy::reference_internal) + py::return_value_policy::reference_internal) .def("stack_callback", &RuntimeView::stack_callback) - .def(pybind11::self == pybind11::self) - .def(pybind11::self != pybind11::self); + .def(py::self == py::self) + .def(py::self != py::self); } } // namespace parallelzone::runtime