[Numpy-svn] r3480 - trunk/numpy/core/src

numpy-svn at scipy.org numpy-svn at scipy.org
Thu Dec 7 21:54:42 EST 2006


Author: oliphant
Date: 2006-12-07 20:54:38 -0600 (Thu, 07 Dec 2006)
New Revision: 3480

Modified:
   trunk/numpy/core/src/multiarraymodule.c
   trunk/numpy/core/src/ufuncobject.c
Log:
Fix some problems with user-defined ufunc registration.

Modified: trunk/numpy/core/src/multiarraymodule.c
===================================================================
--- trunk/numpy/core/src/multiarraymodule.c	2006-12-06 20:48:30 UTC (rev 3479)
+++ trunk/numpy/core/src/multiarraymodule.c	2006-12-08 02:54:38 UTC (rev 3480)
@@ -607,9 +607,7 @@
 /* Returns a new array
    with the new shape from the data
    in the old array --- order-perspective depends on fortran argument.
-   copy-if-necessary  (currently if not contiguous or fortran-contiguous)
-   perhaps a more general-purpose strategy for determining this can
-   be worked out
+   copy-only-if-necessary 
 */
 
 /*MULTIARRAY_API

Modified: trunk/numpy/core/src/ufuncobject.c
===================================================================
--- trunk/numpy/core/src/ufuncobject.c	2006-12-06 20:48:30 UTC (rev 3479)
+++ trunk/numpy/core/src/ufuncobject.c	2006-12-08 02:54:38 UTC (rev 3480)
@@ -652,19 +652,19 @@
 _find_matching_userloop(PyObject *obj, int *arg_types, 
                         PyArray_SCALARKIND *scalars,
                         PyUFuncGenericFunction *function, void **data, 
-                        int nargs)
+                        int nargs, int nin)
 {
         PyUFunc_Loop1d *funcdata;
         int i;
         funcdata = (PyUFunc_Loop1d *)PyCObject_AsVoidPtr(obj);
         while (funcdata != NULL) {
-                for (i=0; i<nargs; i++) {
+                for (i=0; i<nin; i++) {
 			if (!PyArray_CanCoerceScalar(arg_types[i],
 						     funcdata->arg_types[i],
 						     scalars[i])) 
                                 break;
                 }
-                if (i==nargs) { /* match found */
+                if (i==nin) { /* match found */
                         *function = funcdata->func;
                         *data = funcdata->data;
                         /* Make sure actual arg_types supported
@@ -901,7 +901,8 @@
                    data and argtypes
                 */
                 ret = _find_matching_userloop(obj, arg_types, scalars,
-                                              function, data, self->nargs);
+                                              function, data, self->nargs,
+                                              self->nin);
                 Py_DECREF(obj);
                 return ret;
 	}
@@ -3493,7 +3494,7 @@
 
         /* If it's not there, then make one and return. */
         if (cobj == NULL) {
-                cobj = PyCObject_FromVoidPtr((void *)function, 
+                cobj = PyCObject_FromVoidPtr((void *)funcdata,
                                              _loop1d_list_free);
                 if (cobj == NULL) goto fail;
                 PyDict_SetItem(ufunc->userloops, key, cobj);




More information about the Numpy-svn mailing list