[Numpy-svn] r3112 - in trunk/numpy/core: src tests

numpy-svn at scipy.org numpy-svn at scipy.org
Mon Sep 4 17:42:23 CDT 2006


Author: oliphant
Date: 2006-09-04 17:42:18 -0500 (Mon, 04 Sep 2006)
New Revision: 3112

Modified:
   trunk/numpy/core/src/arrayobject.c
   trunk/numpy/core/tests/test_regression.py
Log:
Fix object array creation to revert to previous behavior

Modified: trunk/numpy/core/src/arrayobject.c
===================================================================
--- trunk/numpy/core/src/arrayobject.c	2006-09-04 22:04:31 UTC (rev 3111)
+++ trunk/numpy/core/src/arrayobject.c	2006-09-04 22:42:18 UTC (rev 3112)
@@ -7146,7 +7146,7 @@
 /* steals reference to typecode */
 static PyObject *
 Array_FromSequence(PyObject *s, PyArray_Descr *typecode, int fortran,
-                   int min_depth, int max_depth, int isobject)
+                   int min_depth, int max_depth)
 {
         PyArrayObject *r;
         int nd;
@@ -7157,9 +7157,6 @@
         int type = typecode->type_num;
         int itemsize = typecode->elsize;
 
-        if (isobject)
-                return ObjectArray_FromNestedList(s, typecode, fortran);
-
         stop_at_string = ((type == PyArray_OBJECT) ||   \
                           (type == PyArray_STRING && \
                            typecode->type == PyArray_STRINGLTR) ||      \
@@ -8227,17 +8224,26 @@
                 if (PySequence_Check(op)) {
                         PyObject *thiserr;
                         /* necessary but not sufficient */
-
                         Py_INCREF(newtype);
                         r = Array_FromSequence(op, newtype, flags & FORTRAN,
-                                               min_depth, max_depth, isobject);
-                        if (r == NULL && \
-                            ((thiserr = PyErr_Occurred()) &&            \
-                             !PyErr_GivenExceptionMatches(thiserr,
-                                                          PyExc_MemoryError))) {
-                                /* It wasn't really a sequence after all.
-                                 * Try interpreting it as a scalar */
-                                PyErr_Clear();
+                                               min_depth, max_depth);
+                        if (r == NULL && (thiserr=PyErr_Occurred()) && \
+                            !PyErr_GivenExceptionMatches(thiserr, 
+                                                         PyExc_MemoryError)) {
+                                /* If object was explicitly requested, 
+                                   then try nested list object array creation
+                                */
+                                if (isobject) {
+                                        PyErr_Clear();
+                                        Py_INCREF(newtype);
+                                        r = ObjectArray_FromNestedList  \
+                                                (op, newtype, flags & FORTRAN);
+                                        seq = TRUE;
+                                        Py_DECREF(newtype);
+                                }
+                                else {
+                                        PyErr_Clear();
+                                }
                         }
                         else {
                                 seq = TRUE;

Modified: trunk/numpy/core/tests/test_regression.py
===================================================================
--- trunk/numpy/core/tests/test_regression.py	2006-09-04 22:04:31 UTC (rev 3111)
+++ trunk/numpy/core/tests/test_regression.py	2006-09-04 22:42:18 UTC (rev 3112)
@@ -344,8 +344,8 @@
         assert_equal(N.array([[1,2],3,4],dtype=object).shape, (3,))
         assert_equal(N.array([[1,2],[3,4]],dtype=object).shape, (2,2))
         assert_equal(N.array([(1,2),(3,4)],dtype=object).shape, (2,2))
-        assert_equal(N.array([],dtype=object).shape, ())
-        assert_equal(N.array([[],[],[]],dtype=object).shape, (3,))
+        assert_equal(N.array([],dtype=object).shape, (0,))
+        assert_equal(N.array([[],[],[]],dtype=object).shape, (3,0))
         assert_equal(N.array([[3,4],[5,6],None],dtype=object).shape, (3,))
         
     def check_lexsort(self,level=rlevel):



More information about the Numpy-svn mailing list