[Numpy-svn] r5616 - in trunk/numpy/core: include/numpy src

numpy-svn@scip... numpy-svn@scip...
Wed Aug 6 12:34:57 CDT 2008


Author: oliphant
Date: 2008-08-06 12:34:56 -0500 (Wed, 06 Aug 2008)
New Revision: 5616

Modified:
   trunk/numpy/core/include/numpy/ndarrayobject.h
   trunk/numpy/core/src/arraymethods.c
   trunk/numpy/core/src/arrayobject.c
   trunk/numpy/core/src/arraytypes.inc.src
Log:
Fix ticket #877 along with other bugs not yet reported for data-types with titles.

Modified: trunk/numpy/core/include/numpy/ndarrayobject.h
===================================================================
--- trunk/numpy/core/include/numpy/ndarrayobject.h	2008-08-06 00:12:01 UTC (rev 5615)
+++ trunk/numpy/core/include/numpy/ndarrayobject.h	2008-08-06 17:34:56 UTC (rev 5616)
@@ -2014,10 +2014,16 @@
 
 #include "old_defines.h"
 
-#ifdef __cplusplus
-}
-#endif
+/* 
+   Check to see if this key in the dictionary is the "title" 
+   entry of the tuple (i.e. a duplicate dictionary entry in the fields
+   dict. 
+*/
 
+#define NPY_TITLE_KEY(key, value) ((PyTuple_GET_SIZE((value))==3) && \
+				   (PyTuple_GET_ITEM((value), 2) == (key)))
+
+
 /* Define python version independent deprecation macro */
 
 #if PY_VERSION_HEX >= 0x02050000
@@ -2026,4 +2032,10 @@
 #define DEPRECATE(msg) PyErr_Warn(PyExc_DeprecationWarning,msg)
 #endif
 
+
+#ifdef __cplusplus
+}
+#endif
+
+
 #endif /* NPY_NDARRAYOBJECT_H */

Modified: trunk/numpy/core/src/arraymethods.c
===================================================================
--- trunk/numpy/core/src/arraymethods.c	2008-08-06 00:12:01 UTC (rev 5615)
+++ trunk/numpy/core/src/arraymethods.c	2008-08-06 17:34:56 UTC (rev 5616)
@@ -1006,6 +1006,7 @@
         int offset;
         Py_ssize_t pos=0;
         while (PyDict_Next(dtype->fields, &pos, &key, &value)) {
+	    if NPY_TITLE_KEY(key, value) continue;
             if (!PyArg_ParseTuple(value, "Oi|O", &new, &offset,
                                   &title)) return;
             _deepcopy_call(iptr + offset, optr + offset, new,

Modified: trunk/numpy/core/src/arrayobject.c
===================================================================
--- trunk/numpy/core/src/arrayobject.c	2008-08-06 00:12:01 UTC (rev 5615)
+++ trunk/numpy/core/src/arrayobject.c	2008-08-06 17:34:56 UTC (rev 5616)
@@ -13,7 +13,7 @@
   Travis Oliphant,  oliphant@ee.byu.edu
   Brigham Young Univeristy
 
-:8613
+
 maintainer email:  oliphant.travis@ieee.org
 
   Numarray design (which provided guidance) by
@@ -171,6 +171,7 @@
         Py_ssize_t pos=0;
 
         while (PyDict_Next(descr->fields, &pos, &key, &value)) {
+	    if NPY_TITLE_KEY(key, value) continue;
             if (!PyArg_ParseTuple(value, "Oi|O", &new, &offset,
                                   &title)) {
                 return;
@@ -202,8 +203,10 @@
             PyArray_Descr *new;
             int offset;
             Py_ssize_t pos=0;
+
             while (PyDict_Next(descr->fields, &pos, &key, &value)) {
-                if (!PyArg_ParseTuple(value, "Oi|O", &new, &offset,
+		if NPY_TITLE_KEY(key, value) continue;
+		if (!PyArg_ParseTuple(value, "Oi|O", &new, &offset,
                                       &title)) {
                     return;
                 }
@@ -4814,6 +4817,7 @@
 
         op = (cmp_op == Py_EQ ? n_ops.logical_and : n_ops.logical_or);
         while (PyDict_Next(self->descr->fields, &pos, &key, &value)) {
+	    if NPY_TITLE_KEY(key, value) continue;
             a = PyArray_EnsureAnyArray(array_subscript(self, key));
             if (a==NULL) {
                 Py_XDECREF(res);
@@ -5706,6 +5710,7 @@
         int offset;
         Py_ssize_t pos=0;
         while (PyDict_Next(dtype->fields, &pos, &key, &value)) {
+	    if NPY_TITLE_KEY(key, value) continue;
             if (!PyArg_ParseTuple(value, "Oi|O", &new, &offset,
                                   &title)) return;
             _putzero(optr + offset, zero, new);
@@ -5876,6 +5881,7 @@
         int offset;
         Py_ssize_t pos=0;
         while (PyDict_Next(dtype->fields, &pos, &key, &value)) {
+	    if NPY_TITLE_KEY(key, value) continue;
             if (!PyArg_ParseTuple(value, "Oi|O", &new, &offset,
                                   &title)) return;
             _fillobject(optr + offset, obj, new);
@@ -11296,6 +11302,7 @@
         int offset;
         Py_ssize_t pos=0;
         while(PyDict_Next(self->fields, &pos, &key, &value)) {
+	    if NPY_TITLE_KEY(key, value) continue;
             if (!PyArg_ParseTuple(value, "Oi|O", &new, &offset,
                                   &title)) return -1;
             if (!_arraydescr_isnative(new)) return 0;
@@ -11567,6 +11574,7 @@
         int offset;
         Py_ssize_t pos=0;
         while (PyDict_Next(self->fields, &pos, &key, &value)) {
+	    if NPY_TITLE_KEY(key, value) continue;
             if (!PyArg_ParseTuple(value, "Oi|O", &new, &offset,
                                   &title)) {
                 PyErr_Clear();
@@ -11760,6 +11768,7 @@
         /* make new dictionary with replaced */
         /* PyArray_Descr Objects */
         while(PyDict_Next(self->fields, &pos, &key, &value)) {
+	    if NPY_TITLE_KEY(key, value) continue;
             if (!PyString_Check(key) ||          \
                 !PyTuple_Check(value) ||                    \
                 ((len=PyTuple_GET_SIZE(value)) < 2))

Modified: trunk/numpy/core/src/arraytypes.inc.src
===================================================================
--- trunk/numpy/core/src/arraytypes.inc.src	2008-08-06 00:12:01 UTC (rev 5615)
+++ trunk/numpy/core/src/arraytypes.inc.src	2008-08-06 17:34:56 UTC (rev 5616)
@@ -1306,6 +1306,7 @@
         Py_ssize_t pos=0;
         descr = arr->descr;
         while (PyDict_Next(descr->fields, &pos, &key, &value)) {
+	    if NPY_TITLE_KEY(key, value) continue;
             if (!PyArg_ParseTuple(value, "Oi|O", &new, &offset,
                         &title)) {
                 arr->descr=descr;return;
@@ -1357,6 +1358,7 @@
         Py_ssize_t pos=0;
         descr = arr->descr;  /* Save it */
         while (PyDict_Next(descr->fields, &pos, &key, &value)) {
+	    if NPY_TITLE_KEY(key, value) continue;
             if (!PyArg_ParseTuple(value, "Oi|O", &new, &offset,
                         &title)) {
                 arr->descr=descr;return;
@@ -1596,6 +1598,7 @@
         descr = ap->descr;
         savedflags = ap->flags;
         while (PyDict_Next(descr->fields, &pos, &key, &value)) {
+	    if NPY_TITLE_KEY(key, value) continue;
             if (!PyArg_ParseTuple(value, "Oi|O", &new, &offset,
                         &title)) {PyErr_Clear(); continue;}
             ap->descr = new;



More information about the Numpy-svn mailing list