|
10 | 10 |
|
11 | 11 | #include "Configuration.hpp" |
12 | 12 |
|
13 | | -#include <pybind11/pybind11.h> |
14 | | -#include <pybind11/stl.h> // NOLINT(misc-include-cleaner) |
| 13 | +#include <nanobind/nanobind.h> |
| 14 | +#include <nanobind/stl/string.h> // NOLINT(misc-include-cleaner) |
15 | 15 |
|
16 | 16 | namespace ec { |
17 | 17 |
|
18 | | -namespace py = pybind11; |
19 | | -using namespace pybind11::literals; |
| 18 | +namespace nb = nanobind; |
| 19 | +using namespace nb::literals; |
20 | 20 |
|
21 | 21 | // NOLINTNEXTLINE(misc-use-internal-linkage) |
22 | | -void registerConfiguration(const py::module& mod) { |
| 22 | +void registerConfiguration(const nb::module_& m) { |
23 | 23 | // Class definitions |
24 | | - auto configuration = py::class_<Configuration>(mod, "Configuration"); |
| 24 | + auto configuration = nb::class_<Configuration>(m, "Configuration"); |
25 | 25 | auto execution = |
26 | | - py::class_<Configuration::Execution>(configuration, "Execution"); |
| 26 | + nb::class_<Configuration::Execution>(configuration, "Execution"); |
27 | 27 | auto optimizations = |
28 | | - py::class_<Configuration::Optimizations>(configuration, "Optimizations"); |
| 28 | + nb::class_<Configuration::Optimizations>(configuration, "Optimizations"); |
29 | 29 | auto application = |
30 | | - py::class_<Configuration::Application>(configuration, "Application"); |
| 30 | + nb::class_<Configuration::Application>(configuration, "Application"); |
31 | 31 | auto functionality = |
32 | | - py::class_<Configuration::Functionality>(configuration, "Functionality"); |
| 32 | + nb::class_<Configuration::Functionality>(configuration, "Functionality"); |
33 | 33 | auto simulation = |
34 | | - py::class_<Configuration::Simulation>(configuration, "Simulation"); |
| 34 | + nb::class_<Configuration::Simulation>(configuration, "Simulation"); |
35 | 35 | auto parameterized = |
36 | | - py::class_<Configuration::Parameterized>(configuration, "Parameterized"); |
| 36 | + nb::class_<Configuration::Parameterized>(configuration, "Parameterized"); |
37 | 37 |
|
38 | 38 | // Configuration |
39 | | - configuration.def(py::init<>()) |
40 | | - .def_readwrite("execution", &Configuration::execution) |
41 | | - .def_readwrite("optimizations", &Configuration::optimizations) |
42 | | - .def_readwrite("application", &Configuration::application) |
43 | | - .def_readwrite("functionality", &Configuration::functionality) |
44 | | - .def_readwrite("simulation", &Configuration::simulation) |
45 | | - .def_readwrite("parameterized", &Configuration::parameterized) |
46 | | - .def("json", &Configuration::json) |
| 39 | + configuration.def(nb::init<>()) |
| 40 | + .def_rw("execution", &Configuration::execution) |
| 41 | + .def_rw("optimizations", &Configuration::optimizations) |
| 42 | + .def_rw("application", &Configuration::application) |
| 43 | + .def_rw("functionality", &Configuration::functionality) |
| 44 | + .def_rw("simulation", &Configuration::simulation) |
| 45 | + .def_rw("parameterized", &Configuration::parameterized) |
| 46 | + .def("json", |
| 47 | + [](const Configuration& config) { |
| 48 | + const nb::module_ json = nb::module_::import_("json"); |
| 49 | + const nb::object loads = json.attr("loads"); |
| 50 | + return loads(config.json().dump()); |
| 51 | + }) |
47 | 52 | .def("__repr__", &Configuration::toString); |
48 | 53 |
|
49 | 54 | // execution options |
50 | | - execution.def(py::init<>()) |
51 | | - .def_readwrite("parallel", &Configuration::Execution::parallel) |
52 | | - .def_readwrite("nthreads", &Configuration::Execution::nthreads) |
53 | | - .def_readwrite("timeout", &Configuration::Execution::timeout) |
54 | | - .def_readwrite("run_construction_checker", |
55 | | - &Configuration::Execution::runConstructionChecker) |
56 | | - .def_readwrite("run_simulation_checker", |
57 | | - &Configuration::Execution::runSimulationChecker) |
58 | | - .def_readwrite("run_alternating_checker", |
59 | | - &Configuration::Execution::runAlternatingChecker) |
60 | | - .def_readwrite("run_zx_checker", &Configuration::Execution::runZXChecker) |
61 | | - .def_readwrite("numerical_tolerance", |
62 | | - &Configuration::Execution::numericalTolerance) |
63 | | - .def_readwrite("set_all_ancillae_garbage", |
64 | | - &Configuration::Execution::setAllAncillaeGarbage); |
| 55 | + execution.def(nb::init<>()) |
| 56 | + .def_rw("parallel", &Configuration::Execution::parallel) |
| 57 | + .def_rw("nthreads", &Configuration::Execution::nthreads) |
| 58 | + .def_rw("timeout", &Configuration::Execution::timeout) |
| 59 | + .def_rw("run_construction_checker", |
| 60 | + &Configuration::Execution::runConstructionChecker) |
| 61 | + .def_rw("run_simulation_checker", |
| 62 | + &Configuration::Execution::runSimulationChecker) |
| 63 | + .def_rw("run_alternating_checker", |
| 64 | + &Configuration::Execution::runAlternatingChecker) |
| 65 | + .def_rw("run_zx_checker", &Configuration::Execution::runZXChecker) |
| 66 | + .def_rw("numerical_tolerance", |
| 67 | + &Configuration::Execution::numericalTolerance) |
| 68 | + .def_rw("set_all_ancillae_garbage", |
| 69 | + &Configuration::Execution::setAllAncillaeGarbage); |
65 | 70 |
|
66 | 71 | // optimization options |
67 | | - optimizations.def(py::init<>()) |
68 | | - .def_readwrite("fuse_single_qubit_gates", |
69 | | - &Configuration::Optimizations::fuseSingleQubitGates) |
70 | | - .def_readwrite("reconstruct_swaps", |
71 | | - &Configuration::Optimizations::reconstructSWAPs) |
72 | | - .def_readwrite( |
73 | | - "remove_diagonal_gates_before_measure", |
74 | | - &Configuration::Optimizations::removeDiagonalGatesBeforeMeasure) |
75 | | - .def_readwrite("transform_dynamic_circuit", |
76 | | - &Configuration::Optimizations::transformDynamicCircuit) |
77 | | - .def_readwrite("reorder_operations", |
78 | | - &Configuration::Optimizations::reorderOperations) |
79 | | - .def_readwrite( |
80 | | - "backpropagate_output_permutation", |
81 | | - &Configuration::Optimizations::backpropagateOutputPermutation) |
82 | | - .def_readwrite("elide_permutations", |
83 | | - &Configuration::Optimizations::elidePermutations); |
| 72 | + optimizations.def(nb::init<>()) |
| 73 | + .def_rw("fuse_single_qubit_gates", |
| 74 | + &Configuration::Optimizations::fuseSingleQubitGates) |
| 75 | + .def_rw("reconstruct_swaps", |
| 76 | + &Configuration::Optimizations::reconstructSWAPs) |
| 77 | + .def_rw("remove_diagonal_gates_before_measure", |
| 78 | + &Configuration::Optimizations::removeDiagonalGatesBeforeMeasure) |
| 79 | + .def_rw("transform_dynamic_circuit", |
| 80 | + &Configuration::Optimizations::transformDynamicCircuit) |
| 81 | + .def_rw("reorder_operations", |
| 82 | + &Configuration::Optimizations::reorderOperations) |
| 83 | + .def_rw("backpropagate_output_permutation", |
| 84 | + &Configuration::Optimizations::backpropagateOutputPermutation) |
| 85 | + .def_rw("elide_permutations", |
| 86 | + &Configuration::Optimizations::elidePermutations); |
84 | 87 |
|
85 | 88 | // application options |
86 | | - application.def(py::init<>()) |
87 | | - .def_readwrite("construction_scheme", |
88 | | - &Configuration::Application::constructionScheme) |
89 | | - .def_readwrite("simulation_scheme", |
90 | | - &Configuration::Application::simulationScheme) |
91 | | - .def_readwrite("alternating_scheme", |
92 | | - &Configuration::Application::alternatingScheme) |
93 | | - .def_readwrite("profile", &Configuration::Application::profile); |
| 89 | + application.def(nb::init<>()) |
| 90 | + .def_rw("construction_scheme", |
| 91 | + &Configuration::Application::constructionScheme) |
| 92 | + .def_rw("simulation_scheme", |
| 93 | + &Configuration::Application::simulationScheme) |
| 94 | + .def_rw("alternating_scheme", |
| 95 | + &Configuration::Application::alternatingScheme) |
| 96 | + .def_rw("profile", &Configuration::Application::profile); |
94 | 97 |
|
95 | 98 | // functionality options |
96 | | - functionality.def(py::init<>()) |
97 | | - .def_readwrite("trace_threshold", |
98 | | - &Configuration::Functionality::traceThreshold) |
99 | | - .def_readwrite("check_partial_equivalence", |
100 | | - &Configuration::Functionality::checkPartialEquivalence); |
| 99 | + functionality.def(nb::init<>()) |
| 100 | + .def_rw("trace_threshold", &Configuration::Functionality::traceThreshold) |
| 101 | + .def_rw("check_partial_equivalence", |
| 102 | + &Configuration::Functionality::checkPartialEquivalence); |
101 | 103 |
|
102 | 104 | // simulation options |
103 | | - simulation.def(py::init<>()) |
104 | | - .def_readwrite("fidelity_threshold", |
105 | | - &Configuration::Simulation::fidelityThreshold) |
106 | | - .def_readwrite("max_sims", &Configuration::Simulation::maxSims) |
107 | | - .def_readwrite("state_type", &Configuration::Simulation::stateType) |
108 | | - .def_readwrite("seed", &Configuration::Simulation::seed); |
| 105 | + simulation.def(nb::init<>()) |
| 106 | + .def_rw("fidelity_threshold", |
| 107 | + &Configuration::Simulation::fidelityThreshold) |
| 108 | + .def_rw("max_sims", &Configuration::Simulation::maxSims) |
| 109 | + .def_rw("state_type", &Configuration::Simulation::stateType) |
| 110 | + .def_rw("seed", &Configuration::Simulation::seed); |
109 | 111 |
|
110 | 112 | // parameterized options |
111 | | - parameterized.def(py::init<>()) |
112 | | - .def_readwrite("parameterized_tolerance", |
113 | | - &Configuration::Parameterized::parameterizedTol) |
114 | | - .def_readwrite("additional_instantiations", |
115 | | - &Configuration::Parameterized::nAdditionalInstantiations); |
| 113 | + parameterized.def(nb::init<>()) |
| 114 | + .def_rw("parameterized_tolerance", |
| 115 | + &Configuration::Parameterized::parameterizedTol) |
| 116 | + .def_rw("additional_instantiations", |
| 117 | + &Configuration::Parameterized::nAdditionalInstantiations); |
116 | 118 | } |
117 | 119 |
|
118 | 120 | } // namespace ec |
0 commit comments