File tree Expand file tree Collapse file tree 2 files changed +32
-29
lines changed Expand file tree Collapse file tree 2 files changed +32
-29
lines changed Original file line number Diff line number Diff line change @@ -86,42 +86,15 @@ namespace eigenpy
8686 template <typename MatType>
8787 struct EigenFromPy
8888 {
89-
90- static bool isScalarConvertible (const int np_type)
91- {
92- if (NumpyEquivalentType<typename MatType::Scalar>::type_code == np_type)
93- return true ;
94-
95- switch (np_type)
96- {
97- case NPY_INT:
98- return FromTypeToType<int ,typename MatType::Scalar>::value;
99- case NPY_LONG:
100- return FromTypeToType<long ,typename MatType::Scalar>::value;
101- case NPY_FLOAT:
102- return FromTypeToType<float ,typename MatType::Scalar>::value;
103- case NPY_CFLOAT:
104- return FromTypeToType<std::complex <float >,typename MatType::Scalar>::value;
105- case NPY_DOUBLE:
106- return FromTypeToType<double ,typename MatType::Scalar>::value;
107- case NPY_CDOUBLE:
108- return FromTypeToType<std::complex <double >,typename MatType::Scalar>::value;
109- case NPY_LONGDOUBLE:
110- return FromTypeToType<long double ,typename MatType::Scalar>::value;
111- case NPY_CLONGDOUBLE:
112- return FromTypeToType<std::complex <long double >,typename MatType::Scalar>::value;
113- default :
114- return false ;
115- }
116- }
89+ typedef typename MatType::Scalar Scalar;
11790
11891 // / \brief Determine if pyObj can be converted into a MatType object
11992 static void * convertible (PyArrayObject* pyArray)
12093 {
12194 if (!PyArray_Check (pyArray))
12295 return 0 ;
12396
124- if (!isScalarConvertible (EIGENPY_GET_PY_ARRAY_TYPE (pyArray)))
97+ if (!np_type_is_convertible_into_scalar<Scalar> (EIGENPY_GET_PY_ARRAY_TYPE (pyArray)))
12598 return 0 ;
12699
127100 if (MatType::IsVectorAtCompileTime)
Original file line number Diff line number Diff line change 66#define __eigenpy_numpy_type_hpp__
77
88#include " eigenpy/fwd.hpp"
9+ #include " eigenpy/scalar-conversion.hpp"
910
1011#include < patchlevel.h> // For PY_MAJOR_VERSION
1112
@@ -23,6 +24,35 @@ namespace eigenpy
2324 template <> struct NumpyEquivalentType < std::complex <long double > > { enum { type_code = NPY_CLONGDOUBLE };};
2425 template <> struct NumpyEquivalentType <int > { enum { type_code = NPY_INT };};
2526 template <> struct NumpyEquivalentType <long > { enum { type_code = NPY_LONG };};
27+
28+ template <typename Scalar>
29+ bool np_type_is_convertible_into_scalar (const int np_type)
30+ {
31+ if (NumpyEquivalentType<Scalar>::type_code == np_type)
32+ return true ;
33+
34+ switch (np_type)
35+ {
36+ case NPY_INT:
37+ return FromTypeToType<int ,Scalar>::value;
38+ case NPY_LONG:
39+ return FromTypeToType<long ,Scalar>::value;
40+ case NPY_FLOAT:
41+ return FromTypeToType<float ,Scalar>::value;
42+ case NPY_CFLOAT:
43+ return FromTypeToType<std::complex <float >,Scalar>::value;
44+ case NPY_DOUBLE:
45+ return FromTypeToType<double ,Scalar>::value;
46+ case NPY_CDOUBLE:
47+ return FromTypeToType<std::complex <double >,Scalar>::value;
48+ case NPY_LONGDOUBLE:
49+ return FromTypeToType<long double ,Scalar>::value;
50+ case NPY_CLONGDOUBLE:
51+ return FromTypeToType<std::complex <long double >,Scalar>::value;
52+ default :
53+ return false ;
54+ }
55+ }
2656
2757 enum NP_TYPE
2858 {
You can’t perform that action at this time.
0 commit comments