diff options
Diffstat (limited to 'numpy')
-rw-r--r-- | numpy/core/src/arrayobject.c | 21 | ||||
-rw-r--r-- | numpy/core/tests/test_regression.py | 9 |
2 files changed, 17 insertions, 13 deletions
diff --git a/numpy/core/src/arrayobject.c b/numpy/core/src/arrayobject.c index d83f7bda8..82652aaed 100644 --- a/numpy/core/src/arrayobject.c +++ b/numpy/core/src/arrayobject.c @@ -1972,20 +1972,15 @@ PyArray_ToList(PyArrayObject *self) sz = self->dimensions[0]; lp = PyList_New(sz); for(i = 0; i < sz; i++) { - if (PyArray_CheckExact(self)) { - v=(PyArrayObject *)array_big_item(self, i); + v = (PyArrayObject *)array_big_item(self, i); + if (PyArray_Check(v) && (v->nd >= self->nd)) { + PyErr_SetString(PyExc_RuntimeError, + "array_item not returning smaller-" \ + "dimensional array"); + Py_DECREF(v); + Py_DECREF(lp); + return NULL; } - else { - v = (PyArrayObject *)PySequence_GetItem((PyObject *)self, i); - if ((!PyArray_Check(v)) || (v->nd >= self->nd)) { - PyErr_SetString(PyExc_RuntimeError, - "array_item not returning smaller-" \ - "dimensional array"); - Py_DECREF(v); - Py_DECREF(lp); - return NULL; - } - } PyList_SetItem(lp, i, PyArray_ToList(v)); Py_DECREF(v); } diff --git a/numpy/core/tests/test_regression.py b/numpy/core/tests/test_regression.py index 3765d20c8..1020a3d27 100644 --- a/numpy/core/tests/test_regression.py +++ b/numpy/core/tests/test_regression.py @@ -1038,5 +1038,14 @@ class TestRegression(NumpyTestCase): assert (xp.__array_interface__['data'][0] != xpd.__array_interface__['data'][0]) + def check_recarray_tolist(self, level=rlevel): + """Ticket #783 + """ + a = np.recarray(2, formats="i4,f8,f8", names="id,x,y") + b = a.tolist() + assert( a[0].tolist() == b[0]) + assert( a[1].tolist() == b[1]) + + if __name__ == "__main__": NumpyTest().run() |