summaryrefslogtreecommitdiff
path: root/numpy
diff options
context:
space:
mode:
Diffstat (limited to 'numpy')
-rw-r--r--numpy/core/src/arrayobject.c21
-rw-r--r--numpy/core/tests/test_regression.py9
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()