summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wiebe <mwwiebe@gmail.com>2011-03-07 12:04:05 -0800
committerMark Wiebe <mwwiebe@gmail.com>2011-03-07 12:04:05 -0800
commitb28b1158fc58459b80b22b6e5a7b8d446ed31035 (patch)
tree3b5dbbb017c684e801d345abb9378b2baf65e325
parentc081ad795a70fcd0168edda6d63f3ebc7c5529a7 (diff)
downloadnumpy-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.src7
-rw-r--r--numpy/core/src/multiarray/methods.c3
-rw-r--r--numpy/core/tests/test_regression.py8
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()