From 6aedd37e1bcf32b9f5c0e0670a97c083aa7d3371 Mon Sep 17 00:00:00 2001
From: Justin Carpentier <justin.carpentier@inria.fr>
Date: Thu, 18 Jul 2019 14:53:53 +0200
Subject: [PATCH] core: improve copy from Python to Eigen::Matrix

---
 include/eigenpy/details.hpp | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/include/eigenpy/details.hpp b/include/eigenpy/details.hpp
index f8815e39..678837c9 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
-- 
GitLab