eigenpy 3.12.0
Bindings between Numpy and Eigen using Boost.Python
Loading...
Searching...
No Matches
ComplexEigenSolver.hpp
1/*
2 * Copyright 2025 INRIA
3 */
4
5#ifndef __eigenpy_decompositions_complex_eigen_solver_hpp__
6#define __eigenpy_decompositions_complex_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
15namespace eigenpy {
16
17template <typename _MatrixType>
18struct ComplexEigenSolverVisitor : public boost::python::def_visitor<
19 ComplexEigenSolverVisitor<_MatrixType>> {
20 typedef _MatrixType MatrixType;
21 typedef typename MatrixType::Scalar Scalar;
22 typedef Eigen::ComplexEigenSolver<MatrixType> Solver;
23
24 template <class PyClass>
25 void visit(PyClass& cl) const {
26 cl.def(bp::init<>("Default constructor"))
27 .def(bp::init<Eigen::DenseIndex>(
28 bp::arg("size"), "Default constructor with memory preallocation"))
29 .def(bp::init<MatrixType, bp::optional<bool>>(
30 bp::args("matrix", "compute_eigen_vectors"),
31 "Computes eigendecomposition of given matrix"))
32
33 .def("eigenvalues", &Solver::eigenvalues, bp::arg("self"),
34 "Returns the eigenvalues of given matrix.",
35 bp::return_internal_reference<>())
36 .def("eigenvectors", &Solver::eigenvectors, bp::arg("self"),
37 "Returns the eigenvectors of given matrix.",
38 bp::return_internal_reference<>())
39
40 .def("compute", &ComplexEigenSolverVisitor::compute_proxy<MatrixType>,
41 bp::args("self", "matrix"),
42 "Computes the eigendecomposition of given matrix.",
43 bp::return_self<>())
44 .def("compute",
45 (Solver &
46 (Solver::*)(const Eigen::EigenBase<MatrixType>& matrix, bool)) &
47 Solver::compute,
48 bp::args("self", "matrix", "compute_eigen_vectors"),
49 "Computes the eigendecomposition of given matrix.",
50 bp::return_self<>())
51
52 .def("info", &Solver::info, bp::arg("self"),
53 "NumericalIssue if the input contains INF or NaN values or "
54 "overflow occured. Returns Success otherwise.")
55
56 .def("getMaxIterations", &Solver::getMaxIterations, bp::arg("self"),
57 "Returns the maximum number of iterations.")
58 .def("setMaxIterations", &Solver::setMaxIterations,
59 bp::args("self", "max_iter"),
60 "Sets the maximum number of iterations allowed.",
61 bp::return_self<>());
62 }
63
64 static void expose() {
65 static const std::string classname =
66 "ComplexEigenSolver" + scalar_name<Scalar>::shortname();
67 expose(classname);
68 }
69
70 static void expose(const std::string& name) {
71 bp::class_<Solver>(name.c_str(), bp::no_init)
73 .def(IdVisitor<Solver>());
74 }
75
76 private:
77 template <typename MatrixType>
78 static Solver& compute_proxy(Solver& self,
79 const Eigen::EigenBase<MatrixType>& matrix) {
80 return self.compute(matrix);
81 }
82};
83
84} // namespace eigenpy
85
86#endif // ifndef __eigenpy_decompositions_complex_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