8#include <nanobind/eigen/dense.h>
9#include <nanobind/eigen/sparse.h>
10#include <nanobind/nanobind.h>
11#include <nanobind/stl/array.h>
12#include <nanobind/stl/complex.h>
13#include <nanobind/stl/vector.h>
15namespace nb = nanobind;
16using namespace nb::literals;
20static void declare_transformation(nb::module_ &m, std::string
const &type_name) {
21 std::string pyclass_name =
"Transformation" + type_name;
22 nb::class_<Transformation<T>> pyclass(m, pyclass_name.c_str());
23 pyclass.def(nb::init<>())
28static void declare_sorting(nb::module_ &m) {
29 nb::class_<Sorting> pyclass(m,
"Sorting");
30 pyclass.def(nb::init<>())
31 .def_rw(
"matrix", &Sorting::matrix)
32 .def_rw(
"transformation_type", &Sorting::transformation_type);
35static void declare_indices_of_blocks(nb::module_ &m) {
36 nb::class_<IndicesOfBlock> pyclass(m,
"IndicesOfBlock");
37 pyclass.def(nb::init<size_t, size_t>(),
"start"_a,
"end"_a)
38 .def_rw(
"start", &IndicesOfBlock::start)
39 .def_rw(
"end", &IndicesOfBlock::end);
42static void declare_indices_of_blocks_creator(nb::module_ &m) {
43 nb::class_<IndicesOfBlocksCreator> pyclass(m,
"IndicesOfBlocksCreator");
47static void declare_transformation_builder_interface(nb::module_ &m, std::string
const &type_name) {
48 std::string pyclass_name =
"TransformationBuilderInterface" + type_name;
50 nb::class_<TransformationBuilderInterface<T>> pyclass(m, pyclass_name.c_str());
51 pyclass.def(
"get_rotator",
52 nb::overload_cast<
const std::array<real_t, 3> &,
const std::array<real_t, 3> &>(
57 declare_transformation<double>(m,
"Real");
58 declare_transformation<std::complex<double>>(m,
"Complex");
60 declare_indices_of_blocks(m);
61 declare_indices_of_blocks_creator(m);
62 declare_transformation_builder_interface<double>(m,
"Real");
63 declare_transformation_builder_interface<std::complex<double>>(m,
"Complex");