diff options
author | Mark Wiebe <mwwiebe@gmail.com> | 2011-03-07 12:04:05 -0800 |
---|---|---|
committer | Mark Wiebe <mwwiebe@gmail.com> | 2011-03-07 12:04:05 -0800 |
commit | b28b1158fc58459b80b22b6e5a7b8d446ed31035 (patch) | |
tree | 3b5dbbb017c684e801d345abb9378b2baf65e325 | |
parent | c081ad795a70fcd0168edda6d63f3ebc7c5529a7 (diff) | |
download | numpy-b28b1158fc58459b80b22b6e5a7b8d446ed31035.tar.gz |
BUG: Field's subarray access of scalar was incorrectly Fortran (Ticket #1760)
This was the consequence of a previous bugfix which set the NPY_F_CONTIGUOUS
flag for scalars.
-rw-r--r-- | numpy/core/src/multiarray/arraytypes.c.src | 7 | ||||
-rw-r--r-- | numpy/core/src/multiarray/methods.c | 3 | ||||
-rw-r--r-- | numpy/core/tests/test_regression.py | 8 |
3 files changed, 12 insertions, 6 deletions
diff --git a/numpy/core/src/multiarray/arraytypes.c.src b/numpy/core/src/multiarray/arraytypes.c.src index a5e47139e..dee492482 100644 --- a/numpy/core/src/multiarray/arraytypes.c.src +++ b/numpy/core/src/multiarray/arraytypes.c.src @@ -548,7 +548,7 @@ VOID_getitem(char *ip, PyArrayObject *ap) int itemsize; descr = ap->descr; - if (descr->names) { + if (descr->names != NULL) { PyObject *key; PyObject *names; int i, n; @@ -560,9 +560,6 @@ VOID_getitem(char *ip, PyArrayObject *ap) /* get the names from the fields dictionary*/ names = descr->names; - if (!names) { - goto finish; - } n = PyTuple_GET_SIZE(names); ret = PyTuple_New(n); savedflags = ap->flags; @@ -604,7 +601,7 @@ VOID_getitem(char *ip, PyArrayObject *ap) Py_INCREF(descr->subarray->base); ret = PyArray_NewFromDescr(&PyArray_Type, descr->subarray->base, shape.len, shape.ptr, - NULL, ip, ap->flags, NULL); + NULL, ip, ap->flags&(~NPY_F_CONTIGUOUS), NULL); PyDimMem_FREE(shape.ptr); if (!ret) { return NULL; diff --git a/numpy/core/src/multiarray/methods.c b/numpy/core/src/multiarray/methods.c index 4c568a959..ed86e208c 100644 --- a/numpy/core/src/multiarray/methods.c +++ b/numpy/core/src/multiarray/methods.c @@ -303,7 +303,8 @@ PyArray_GetField(PyArrayObject *self, PyArray_Descr *typed, int offset) self->nd, self->dimensions, self->strides, self->data + offset, - self->flags, (PyObject *)self); + self->flags&(~NPY_F_CONTIGUOUS), + (PyObject *)self); if (ret == NULL) { return NULL; } diff --git a/numpy/core/tests/test_regression.py b/numpy/core/tests/test_regression.py index 599100719..5458fac33 100644 --- a/numpy/core/tests/test_regression.py +++ b/numpy/core/tests/test_regression.py @@ -1554,5 +1554,13 @@ class TestRegression(TestCase): a2 = np.array([s[:i]]*5) assert_equal(a1, a2) + def test_fields_strides(self): + "Ticket #1760" + r=np.fromstring('abcdefghijklmnop'*4*3, dtype='i4,(2,3)u2') + assert_equal(r[0:3:2]['f1'], r['f1'][0:3:2]) + assert_equal(r[0:3:2]['f1'][0], r[0:3:2][0]['f1']) + assert_equal(r[0:3:2]['f1'][0][()], r[0:3:2][0]['f1'][()]) + assert_equal(r[0:3:2]['f1'][0].strides, r[0:3:2][0]['f1'].strides) + if __name__ == "__main__": run_module_suite() |