@@ -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