eigenpy 3.12.0
Bindings between Numpy and Eigen using Boost.Python
Loading...
Searching...
No Matches
GeneralizedSelfAdjointEigenSolver.hpp
1/*
2 * Copyright 2025 INRIA
3 */
4
5#ifndef __eigenpy_decompositions_generalized_self_adjoint_eigen_solver_hpp__
6#define __eigenpy_decompositions_generalized_self_adjoint_eigen_solver_hpp__
7
8#include <Eigen/Core>
9#include <Eigen/Eigenvalues>
10
11#include "eigenpy/eigen-to-python.hpp"
12#include "eigenpy/eigenpy.hpp"
13#include "eigenpy/utils/scalar-name.hpp"
14#include "eigenpy/decompositions/SelfAdjointEigenSolver.hpp"
15
16namespace eigenpy {
17
18template <typename _MatrixType>
20 : public boost::python::def_visitor<
21 GeneralizedSelfAdjointEigenSolverVisitor<_MatrixType>> {
22 typedef _MatrixType MatrixType;
23 typedef typename MatrixType::Scalar Scalar;
24 typedef Eigen::GeneralizedSelfAdjointEigenSolver<MatrixType> Solver;
25
26 template <class PyClass>
27 void visit(PyClass& cl) const {
28 cl.def(bp::init<>("Default constructor"))
29 .def(bp::init<Eigen::DenseIndex>(
30 bp::arg("size"), "Default constructor with memory preallocation. "))
31 .def(bp::init<MatrixType, MatrixType, bp::optional<int>>(
32 bp::args("matA", "matB", "options"),
33 "Constructor: Computes generalized eigendecomposition of given "
34 "matrix pencil. "))
35
36 .def("compute",
37 &GeneralizedSelfAdjointEigenSolverVisitor::compute_proxy<
38 MatrixType>,
39 bp::args("self", "A", "B"),
40 "Computes generalized eigendecomposition of given matrix pencil. ",
41 bp::return_self<>())
42 .def("compute",
43 (Solver &
44 (Solver::*)(const MatrixType& A, const MatrixType& B, int)) &
45 Solver::compute,
46 bp::args("self", "A", "B", "options"),
47 "Computes generalized eigendecomposition of given matrix pencil.",
48 bp::return_self<>());
49 }
50
51 static void expose() {
52 static const std::string classname =
53 "GeneralizedSelfAdjointEigenSolver" + scalar_name<Scalar>::shortname();
54 expose(classname);
55 }
56
57 static void expose(const std::string& name) {
58 bp::class_<Solver, bp::bases<Eigen::SelfAdjointEigenSolver<MatrixType>>>(
59 name.c_str(), bp::no_init)
61 .def(IdVisitor<Solver>());
62 }
63
64 private:
65 template <typename MatrixType>
66 static Solver& compute_proxy(Solver& self, const MatrixType& A,
67 const MatrixType& B) {
68 return self.compute(A, B);
69 }
70};
71
72} // namespace eigenpy
73
74#endif // ifndef
75 // __eigenpy_decompositions_generalized_self_adjoint_eigen_solver_hpp__
void expose()
Call the expose function of a given type T.
Definition expose.hpp:23
Add the Python method id to retrieving a unique id for a given object exposed with Boost....
Definition id.hpp:18