diff --git a/include/eigenpy/details.hpp b/include/eigenpy/details.hpp index f8815e391473502f2d9a1153cc6b6a5e00519821..678837c9bb8d1478448d7b094cf7b16b19b20f45 100644 --- a/include/eigenpy/details.hpp +++ b/include/eigenpy/details.hpp @@ -145,18 +145,37 @@ namespace eigenpy const int rows = (int)PyArray_DIMS(pyArray)[0]; const int cols = (int)PyArray_DIMS(pyArray)[1]; - Type * mat_ptr = new(storage) Type(rows,cols); + Type * mat_ptr = new (storage) Type(rows,cols); + + if(NumpyEquivalentType<Scalar>::type_code == GET_PY_ARRAY_TYPE(pyArray)) + { + *mat_ptr = MapNumpy<MatType,Scalar>::map(pyArray); // avoid useless cast + return; + } + if(GET_PY_ARRAY_TYPE(pyArray) == NPY_INT) + { *mat_ptr = MapNumpy<MatType,int>::map(pyArray).template cast<Scalar>(); + return; + } if(GET_PY_ARRAY_TYPE(pyArray) == NPY_LONG) + { *mat_ptr = MapNumpy<MatType,long>::map(pyArray).template cast<Scalar>(); + return; + } if(GET_PY_ARRAY_TYPE(pyArray) == NPY_FLOAT) + { *mat_ptr = MapNumpy<MatType,float>::map(pyArray).template cast<Scalar>(); + return; + } if(GET_PY_ARRAY_TYPE(pyArray) == NPY_DOUBLE) + { *mat_ptr = MapNumpy<MatType,double>::map(pyArray).template cast<Scalar>(); + return; + } } /// \brief Copy mat into the Python array using Eigen::Map