pairinteraction
A Rydberg Interaction Calculator
DiagonalizerInterface.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/sparse.h>
9#include <nanobind/nanobind.h>
10#include <nanobind/stl/complex.h>
11#include <nanobind/stl/optional.h>
12
13namespace nb = nanobind;
14using namespace pairinteraction;
15
16template <typename T>
17static void declare_diagonalizer_interface(nb::module_ &m, std::string const &type_name) {
18 std::string pylass_name = "DiagonalizerInterface" + type_name;
20 nb::class_<DiagonalizerInterface<T>> pyclass(m, pylass_name.c_str());
21 pyclass
22 .def("eigh",
23 nb::overload_cast<const Eigen::SparseMatrix<T, Eigen::RowMajor> &, double>(
25 .def("eigh",
26 nb::overload_cast<const Eigen::SparseMatrix<T, Eigen::RowMajor> &,
27 std::optional<real_t>, std::optional<real_t>, double>(
28 &DiagonalizerInterface<T>::eigh, nb::const_));
29}
30
31template <typename T>
32static void declare_eigen_system_h(nb::module_ &m, std::string const &type_name) {
33 std::string pylass_name = "EigenSystemH" + type_name;
34 nb::class_<EigenSystemH<T>> pyclass(m, pylass_name.c_str());
35 pyclass.def_rw("eigenvectors", &EigenSystemH<T>::eigenvectors)
36 .def_rw("eigenvalues", &EigenSystemH<T>::eigenvalues);
37}
38
39void bind_diagonalizer_interface(nb::module_ &m) {
40 declare_diagonalizer_interface<double>(m, "Real");
41 declare_diagonalizer_interface<std::complex<double>>(m, "Complex");
42 declare_eigen_system_h<double>(m, "Real");
43 declare_eigen_system_h<std::complex<double>>(m, "Complex");
44}
void bind_diagonalizer_interface(nb::module_ &m)
typename traits::NumTraits< Scalar >::real_t real_t