pairinteraction
A Rydberg Interaction Calculator
TransformationBuilderInterface.py.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2024 Pairinteraction Developers
2// SPDX-License-Identifier: LGPL-3.0-or-later
3
5
7
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>
14
15namespace nb = nanobind;
16using namespace nb::literals;
17using namespace pairinteraction;
18
19template <typename T>
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<>())
24 .def_rw("matrix", &Transformation<T>::matrix)
25 .def_rw("transformation_type", &Transformation<T>::transformation_type);
26}
27
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);
33}
34
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);
40}
41
42static void declare_indices_of_blocks_creator(nb::module_ &m) {
43 nb::class_<IndicesOfBlocksCreator> pyclass(m, "IndicesOfBlocksCreator");
44}
45
46template <typename T>
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> &>(
54}
55
57 declare_transformation<double>(m, "Real");
58 declare_transformation<std::complex<double>>(m, "Complex");
59 declare_sorting(m);
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");
64}
void bind_transformation_builder_interface(nb::module_ &m)
typename traits::NumTraits< Scalar >::real_t real_t