summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorMathieu Lamarre <mlamarre@ea.com>2018-02-08 14:10:58 -0500
committerMathieu Lamarre <mlamarre@ea.com>2018-02-08 14:10:58 -0500
commita119f03a846e76dcc9aff64ea760b9f128110ea6 (patch)
treef2e80154ab29233a55a10831e4f1c684618344db /tools
parent6c4a77bf87b8a6fcadd7a128f73b8f2954642bec (diff)
downloadpython-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.i10
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];