@@ -40,12 +40,19 @@ namespace eigenpy
4040      typedef  typename  SimilarMatrixType::Scalar Scalar;
4141      enum  { NPY_ARRAY_MEMORY_CONTIGUOUS = SimilarMatrixType::IsRowMajor ? NPY_ARRAY_CARRAY : NPY_ARRAY_FARRAY };
4242
43-       PyArrayObject * pyArray = (PyArrayObject*) call_PyArray_New (nd, shape,
44-                                                                   NumpyEquivalentType<Scalar>::type_code,
45-                                                                   mat.data (),
46-                                                                   NPY_ARRAY_MEMORY_CONTIGUOUS | NPY_ARRAY_ALIGNED);
47-       
48-       return  pyArray;
43+       if (NumpyType::sharedMemory ())
44+       {
45+         PyArrayObject * pyArray = (PyArrayObject*) call_PyArray_New (nd, shape,
46+                                                                     NumpyEquivalentType<Scalar>::type_code,
47+                                                                     mat.data (),
48+                                                                     NPY_ARRAY_MEMORY_CONTIGUOUS | NPY_ARRAY_ALIGNED);
49+         
50+         return  pyArray;
51+       }
52+       else 
53+       {
54+         return  NumpyAllocator<MatType>::allocate (mat.derived (),nd,shape);
55+       }
4956    }
5057  };
5158
@@ -68,12 +75,19 @@ namespace eigenpy
6875      typedef  typename  SimilarMatrixType::Scalar Scalar;
6976      enum  { NPY_ARRAY_MEMORY_CONTIGUOUS_RO = SimilarMatrixType::IsRowMajor ? NPY_ARRAY_CARRAY_RO : NPY_ARRAY_FARRAY_RO };
7077
71-       PyArrayObject * pyArray = (PyArrayObject*) call_PyArray_New (nd, shape,
72-                                                                   NumpyEquivalentType<Scalar>::type_code,
73-                                                                   const_cast <SimilarMatrixType &>(mat.derived ()).data (),
74-                                                                   NPY_ARRAY_MEMORY_CONTIGUOUS_RO | NPY_ARRAY_ALIGNED);
75-       
76-       return  pyArray;
78+       if (NumpyType::sharedMemory ())
79+       {
80+         PyArrayObject * pyArray = (PyArrayObject*) call_PyArray_New (nd, shape,
81+                                                                     NumpyEquivalentType<Scalar>::type_code,
82+                                                                     const_cast <SimilarMatrixType &>(mat.derived ()).data (),
83+                                                                     NPY_ARRAY_MEMORY_CONTIGUOUS_RO | NPY_ARRAY_ALIGNED);
84+                                                                     
85+         return  pyArray;
86+       }
87+       else 
88+       {
89+         return  NumpyAllocator<MatType>::allocate (mat.derived (),nd,shape);
90+       }
7791    }
7892  };
7993
0 commit comments