complex.cpp
Go to the documentation of this file.
1 /*
2  * Copyright 2020 INRIA
3  */
4 
5 #include "eigenpy/eigenpy.hpp"
6 
7 namespace Eigen {
8 #define EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, Size, SizeSuffix) \
9  \
10  typedef Matrix<Type, Size, Size> Matrix##SizeSuffix##TypeSuffix; \
11  \
12  typedef Matrix<Type, Size, 1> Vector##SizeSuffix##TypeSuffix; \
13  \
14  typedef Matrix<Type, 1, Size> RowVector##SizeSuffix##TypeSuffix;
15 
16 #define EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, Size) \
17  \
18  typedef Matrix<Type, Size, Dynamic> Matrix##Size##X##TypeSuffix; \
19  \
20  typedef Matrix<Type, Dynamic, Size> Matrix##X##Size##TypeSuffix;
21 
22 #define EIGEN_MAKE_TYPEDEFS_ALL_SIZES(Type, TypeSuffix) \
23  EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 2, 2) \
24  EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 3, 3) \
25  EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 4, 4) \
26  EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, Dynamic, X) \
27  EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, 2) \
28  EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, 3) \
29  EIGEN_MAKE_FIXED_TYPEDEFS(Type, TypeSuffix, 4)
30 
31 EIGEN_MAKE_TYPEDEFS_ALL_SIZES(long double, ld)
32 EIGEN_MAKE_TYPEDEFS_ALL_SIZES(std::complex<long double>, cld)
33 
34 #undef EIGEN_MAKE_TYPEDEFS_ALL_SIZES
35 #undef EIGEN_MAKE_TYPEDEFS
36 #undef EIGEN_MAKE_FIXED_TYPEDEFS
37 } // namespace Eigen
38 
39 template <typename ComplexMatrix>
40 typename Eigen::Matrix<typename ComplexMatrix::RealScalar,
41  ComplexMatrix::RowsAtCompileTime,
42  ComplexMatrix::ColsAtCompileTime, ComplexMatrix::Options>
43 real(const Eigen::MatrixBase<ComplexMatrix> &complex_mat) {
44  return complex_mat.real();
45 }
46 
47 template <typename ComplexMatrix>
48 typename Eigen::Matrix<typename ComplexMatrix::RealScalar,
49  ComplexMatrix::RowsAtCompileTime,
50  ComplexMatrix::ColsAtCompileTime, ComplexMatrix::Options>
51 imag(const Eigen::MatrixBase<ComplexMatrix> &complex_mat) {
52  return complex_mat.imag();
53 }
54 
55 template <typename Scalar, int Rows, int Cols, int Options>
56 Eigen::Matrix<std::complex<Scalar>, Rows, Cols, Options> ascomplex(
57  const Eigen::Matrix<Scalar, Rows, Cols, Options> &mat) {
58  typedef Eigen::Matrix<std::complex<Scalar>, Rows, Cols, Options> ReturnType;
59  return ReturnType(mat.template cast<std::complex<Scalar> >());
60 }
61 
63  using namespace Eigen;
64  namespace bp = boost::python;
66 
67  bp::def("ascomplex", ascomplex<float, Eigen::Dynamic, Eigen::Dynamic, 0>);
68  bp::def("ascomplex", ascomplex<double, Eigen::Dynamic, Eigen::Dynamic, 0>);
69  bp::def("ascomplex",
70  ascomplex<long double, Eigen::Dynamic, Eigen::Dynamic, 0>);
71 
72  bp::def("real", (MatrixXf(*)(const Eigen::MatrixBase<MatrixXcf> &)) &
73  real<MatrixXcf>);
74  bp::def("real", (MatrixXd(*)(const Eigen::MatrixBase<MatrixXcd> &)) &
75  real<MatrixXcd>);
76  bp::def("real", (MatrixXld(*)(const Eigen::MatrixBase<MatrixXcld> &)) &
77  real<MatrixXcld>);
78 
79  bp::def("imag", (MatrixXf(*)(const Eigen::MatrixBase<MatrixXcf> &)) &
80  imag<MatrixXcf>);
81  bp::def("imag", (MatrixXd(*)(const Eigen::MatrixBase<MatrixXcd> &)) &
82  imag<MatrixXcd>);
83  bp::def("imag", (MatrixXld(*)(const Eigen::MatrixBase<MatrixXcld> &)) &
84  imag<MatrixXcld>);
85 }
boost::python
Definition: alignment.hpp:49
Eigen
Definition: complex.cpp:7
eigenpy::enableEigenPy
void EIGENPY_DLLAPI enableEigenPy()
Definition: eigenpy.cpp:29
EIGEN_MAKE_TYPEDEFS_ALL_SIZES
#define EIGEN_MAKE_TYPEDEFS_ALL_SIZES(Type, TypeSuffix)
Definition: complex.cpp:22
real
Eigen::Matrix< typename ComplexMatrix::RealScalar, ComplexMatrix::RowsAtCompileTime, ComplexMatrix::ColsAtCompileTime, ComplexMatrix::Options > real(const Eigen::MatrixBase< ComplexMatrix > &complex_mat)
Definition: complex.cpp:43
BOOST_PYTHON_MODULE
BOOST_PYTHON_MODULE(complex)
Definition: complex.cpp:62
imag
Eigen::Matrix< typename ComplexMatrix::RealScalar, ComplexMatrix::RowsAtCompileTime, ComplexMatrix::ColsAtCompileTime, ComplexMatrix::Options > imag(const Eigen::MatrixBase< ComplexMatrix > &complex_mat)
Definition: complex.cpp:51
test_eigen_ref.mat
mat
Definition: test_eigen_ref.py:140
ascomplex
Eigen::Matrix< std::complex< Scalar >, Rows, Cols, Options > ascomplex(const Eigen::Matrix< Scalar, Rows, Cols, Options > &mat)
Definition: complex.cpp:56
eigenpy.hpp
eigenpy::internal::cast
static void cast(void *from_, void *to_, npy_intp n, void *, void *)
Definition: user-type.hpp:31


eigenpy
Author(s): Justin Carpentier, Nicolas Mansard
autogenerated on Tue Jan 23 2024 03:15:01