Program Listing for File tridiagonalization.hpp
↰ Return to documentation for file (include/nanoeigenpy/decompositions/tridiagonalization.hpp
)
#pragma once
#include "nanoeigenpy/fwd.hpp"
#include <Eigen/Eigenvalues>
namespace nanoeigenpy {
namespace nb = nanobind;
using namespace nb::literals;
template <typename _MatrixType>
void exposeTridiagonalization(nb::module_ m, const char *name) {
using MatrixType = _MatrixType;
using Solver = Eigen::Tridiagonalization<MatrixType>;
if (check_registration_alias<Solver>(m)) {
return;
}
nb::class_<Solver>(m, name, "Tridiagonalization")
.def(nb::init<Eigen::DenseIndex>(), "size"_a,
"Default constructor with memory preallocation.")
.def(nb::init<const MatrixType &>(), "matrix"_a,
"Constructor; computes tridiagonal decomposition of given matrix.")
.def(
"compute",
[](Solver &c, const MatrixType &matrix) -> Solver & {
return c.compute(matrix);
},
"matrix"_a, "Computes tridiagonal decomposition of given matrix.",
nb::rv_policy::reference)
.def("householderCoefficients", &Solver::householderCoefficients,
"Returns the Householder coefficients.")
.def("packedMatrix", &Solver::packedMatrix,
"Returns the internal representation of the decomposition.",
nb::rv_policy::reference_internal)
.def(
"matrixQ", [](const Solver &c) -> MatrixType { return c.matrixQ(); },
"Returns the unitary matrix Q in the decomposition.")
.def(
"matrixT", [](const Solver &c) -> MatrixType { return c.matrixT(); },
"Returns an expression of the tridiagonal matrix T in the "
"decomposition.")
.def("diagonal", &Solver::diagonal,
"Returns the diagonal of the tridiagonal matrix T in the "
"decomposition.")
.def("subDiagonal", &Solver::subDiagonal,
"Returns the subdiagonal of the tridiagonal matrix T in the "
"decomposition.")
.def(IdVisitor());
}
} // namespace nanoeigenpy