diff options
author | Mathieu Lamarre <mlamarre@ea.com> | 2018-02-08 14:10:58 -0500 |
---|---|---|
committer | Mathieu Lamarre <mlamarre@ea.com> | 2018-02-08 14:10:58 -0500 |
commit | a119f03a846e76dcc9aff64ea760b9f128110ea6 (patch) | |
tree | f2e80154ab29233a55a10831e4f1c684618344db /tools | |
parent | 6c4a77bf87b8a6fcadd7a128f73b8f2954642bec (diff) | |
download | python-numpy-a119f03a846e76dcc9aff64ea760b9f128110ea6.tar.gz python-numpy-a119f03a846e76dcc9aff64ea760b9f128110ea6.tar.bz2 python-numpy-a119f03a846e76dcc9aff64ea760b9f128110ea6.zip |
Swig tool: Clear CARRAY flag when buffer is not C_CONTIGUOUS
Leave the flag if there's only one non unit dim
Diffstat (limited to 'tools')
-rw-r--r-- | tools/swig/numpy.i | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/tools/swig/numpy.i b/tools/swig/numpy.i index 686e11eaf..ee2cc3d5e 100644 --- a/tools/swig/numpy.i +++ b/tools/swig/numpy.i @@ -80,6 +80,7 @@ %#define array_data(a) (((PyArrayObject*)a)->data) %#define array_descr(a) (((PyArrayObject*)a)->descr) %#define array_flags(a) (((PyArrayObject*)a)->flags) +%#define array_clearflags(a,f) (((PyArrayObject*)a)->flags) &= ~f %#define array_enableflags(a,f) (((PyArrayObject*)a)->flags) = f %#define array_is_fortran(a) (PyArray_ISFORTRAN((PyArrayObject*)a)) %#else @@ -536,11 +537,16 @@ { int success = 1; int nd = array_numdims(ary); - int i; + int i; npy_intp * strides = array_strides(ary); if (array_is_fortran(ary)) return success; + int n_non_one = 0; /* Set the Fortran ordered flag */ - array_clearflags(ary,NPY_ARRAY_CARRAY); + const npy_intp *dims = array_dimensions(ary); + for (i=0; i < nd; ++i) + n_non_one += (dims[i] != 1) ? 1 : 0; + if (n_non_one > 1) + array_clearflags(ary,NPY_ARRAY_CARRAY); array_enableflags(ary,NPY_ARRAY_FARRAY); /* Recompute the strides */ strides[0] = strides[nd-1]; |