|
1 | 1 | #include "pch.hpp" |
2 | 2 |
|
3 | 3 | template <typename T> |
4 | | -void define_eah_scale(py::module &m, const std::string &name) |
| 4 | +void define_eah_scale(nb::module_ &m, const std::string &name) |
5 | 5 | { |
6 | 6 | using namespace logger::eah; |
| 7 | + using BaseScale = Scale<T>; |
7 | 8 |
|
8 | | - py::class_<Scale<T>, std::shared_ptr<Scale<T>>>(m, name.c_str()) |
9 | | - .def_property_readonly("min", &Scale<T>::min) |
10 | | - .def_property_readonly("max", &Scale<T>::max) |
11 | | - .def_property_readonly("size", &Scale<T>::size) |
12 | | - .def_property_readonly("length", &Scale<T>::length) |
13 | | - .def("index", &Scale<T>::index) |
14 | | - .def("bounds", &Scale<T>::bounds) |
15 | | - .def("__repr__", [name](const Scale<T> &s) { |
| 9 | + nb::class_<BaseScale>(m, name.c_str()) |
| 10 | + .def_prop_ro("min", &BaseScale::min) |
| 11 | + .def_prop_ro("max", &BaseScale::max) |
| 12 | + .def_prop_ro("size", &BaseScale::size) |
| 13 | + .def_prop_ro("length", &BaseScale::length) |
| 14 | + .def("index", &BaseScale::index) |
| 15 | + .def("bounds", &BaseScale::bounds) |
| 16 | + .def("__repr__", [name](const BaseScale &s) { |
16 | 17 | return fmt::format("<{} (({}, {}), {})>", name, s.min(), s.max(), s.size()); |
17 | 18 | }); |
18 | 19 |
|
19 | | - py::class_<LinearScale<T>, Scale<T>, std::shared_ptr<LinearScale<T>>>(m, ("Linear" + name).c_str()) |
20 | | - .def(py::init<T, T, size_t>()) |
| 20 | + nb::class_<LinearScale<T>, BaseScale>(m, ("Linear" + name).c_str()) |
| 21 | + .def(nb::init<T, T, size_t>()) |
21 | 22 | .def("step", &LinearScale<T>::step); |
22 | | - py::class_<Log2Scale<T>, Scale<T>, std::shared_ptr<Log2Scale<T>>>(m, ("Log2" + name).c_str()) |
23 | | - .def(py::init<T, T, size_t>()); |
24 | 23 |
|
25 | | - py::class_<Log10Scale<T>, Scale<T>, std::shared_ptr<Log10Scale<T>>>(m, ("Log10" + name).c_str()) |
26 | | - .def(py::init<T, T, size_t>()); |
| 24 | + nb::class_<Log2Scale<T>, BaseScale>(m, ("Log2" + name).c_str()) |
| 25 | + .def(nb::init<T, T, size_t>()); |
| 26 | + |
| 27 | + nb::class_<Log10Scale<T>, BaseScale>(m, ("Log10" + name).c_str()) |
| 28 | + .def(nb::init<T, T, size_t>()); |
27 | 29 | } |
28 | | -void define_eah(py::module &m) |
| 30 | +void define_eah(nb::module_ &m) |
29 | 31 | { |
30 | 32 | using namespace logger; |
31 | 33 | auto eah = m.def_submodule("eah"); |
32 | 34 | define_eah_scale<double>(eah, "RealScale"); |
33 | 35 | define_eah_scale<size_t>(eah, "IntegerScale"); |
34 | 36 |
|
35 | | - py::class_<EAH, Logger, std::shared_ptr<EAH>>(m, "EAH", "Emperical Attainment Histogram Logger") |
36 | | - .def(py::init<double, double, size_t, size_t, size_t, size_t>(), py::arg("error_min"), py::arg("error_max"), |
37 | | - py::arg("error_buckets"), py::arg("evals_min"), py::arg("evals_max"), py::arg("evals_buckets")) |
38 | | - .def(py::init<eah::LinearScale<double> &, eah::LinearScale<size_t> &>(), py::arg("error_scale"), |
39 | | - py::arg("eval_scale")) |
40 | | - .def(py::init<eah::Log2Scale<double> &, eah::Log2Scale<size_t> &>(), py::arg("error_scale"), |
41 | | - py::arg("eval_scale")) |
42 | | - .def(py::init<eah::Log10Scale<double> &, eah::Log10Scale<size_t> &>(), py::arg("error_scale"), |
43 | | - py::arg("eval_scale")) |
| 37 | + nb::class_<EAH, Logger>(m, "EAH", "Emperical Attainment Histogram Logger") |
| 38 | + .def(nb::init<double, double, size_t, size_t, size_t, size_t>(), nb::arg("error_min"), nb::arg("error_max"), |
| 39 | + nb::arg("error_buckets"), nb::arg("evals_min"), nb::arg("evals_max"), nb::arg("evals_buckets")) |
| 40 | + .def(nb::init<eah::LinearScale<double> &, eah::LinearScale<size_t> &>(), nb::arg("error_scale"), |
| 41 | + nb::arg("eval_scale")) |
| 42 | + .def(nb::init<eah::Log2Scale<double> &, eah::Log2Scale<size_t> &>(), nb::arg("error_scale"), |
| 43 | + nb::arg("eval_scale")) |
| 44 | + .def(nb::init<eah::Log10Scale<double> &, eah::Log10Scale<size_t> &>(), nb::arg("error_scale"), |
| 45 | + nb::arg("eval_scale")) |
44 | 46 | .def("at", &logger::EAH::at) |
45 | | - .def_property_readonly("data", &logger::EAH::data) |
46 | | - .def_property_readonly("size", &logger::EAH::size) |
47 | | - .def_property_readonly("error_range", &logger::EAH::error_range, py::return_value_policy::reference) |
48 | | - .def_property_readonly("eval_range", &logger::EAH::eval_range, py::return_value_policy::reference) |
| 47 | + .def_prop_ro("data", &logger::EAH::data) |
| 48 | + .def_prop_ro("size", &logger::EAH::size) |
| 49 | + .def_prop_ro("error_range", &logger::EAH::error_range, nb::rv_policy::reference) |
| 50 | + .def_prop_ro("eval_range", &logger::EAH::eval_range, nb::rv_policy::reference) |
49 | 51 | .def("__repr__", [](const logger::EAH &l) { return fmt::format("<EAH {}>", l.size()); }); |
50 | 52 | } |
51 | 53 |
|
52 | | -void define_eaf(py::module &m) |
| 54 | +void define_eaf(nb::module_ &m) |
53 | 55 | { |
54 | 56 | using namespace logger; |
55 | 57 |
|
56 | 58 | auto eaf = m.def_submodule("eaf"); |
57 | | - py::class_<eaf::Point, std::shared_ptr<eaf::Point>>(eaf, "Point") |
58 | | - .def(py::init<double, size_t>()) |
| 59 | + nb::class_<eaf::Point>(eaf, "Point") |
| 60 | + .def(nb::init<double, size_t>()) |
59 | 61 | .def("__repr__", [](const eaf::Point &p) { return fmt::format("<Point {} {}>", p.qual, p.time); }); |
60 | 62 |
|
61 | | - py::class_<eaf::RunPoint, eaf::Point, std::shared_ptr<eaf::RunPoint>>(eaf, "RunPoint") |
62 | | - .def(py::init<double, size_t, size_t>()) |
| 63 | + nb::class_<eaf::RunPoint, eaf::Point>(eaf, "RunPoint") |
| 64 | + .def(nb::init<double, size_t, size_t>()) |
63 | 65 | .def("__repr__", |
64 | 66 | [](const eaf::RunPoint &p) { return fmt::format("<RunPoint {} {} {}>", p.qual, p.time, p.run); }); |
65 | 67 |
|
66 | | - py::class_<EAF, Logger, std::shared_ptr<EAF>>(m, "EAF", "Emperical Attainment Function Logger") |
67 | | - .def(py::init<>()) |
68 | | - .def_property_readonly("data", py::overload_cast<>(&EAF::data, py::const_)) |
| 68 | + nb::class_<EAF, Logger>(m, "EAF", "Emperical Attainment Function Logger") |
| 69 | + .def(nb::init<>()) |
| 70 | + .def_prop_ro("data", nb::overload_cast<>(&EAF::data, nb::const_)) |
69 | 71 | .def("at", [](EAF &f, std::string suite_name, int pb, int dim, int inst, size_t run) { |
70 | 72 | const auto cursor = EAF::Cursor(suite_name, pb, dim, inst, run); |
71 | 73 | return f.data(cursor); |
|
0 commit comments