[pypy-commit] pypy ufuncapi: integrate signature core_enabled into ufunc call

mattip noreply at buildbot.pypy.org
Fri Aug 22 16:13:13 CEST 2014


Author: mattip <matti.picus at gmail.com>
Branch: ufuncapi
Changeset: r72961:aa2a66acc1f9
Date: 2014-08-22 17:12 +0300
http://bitbucket.org/pypy/pypy/changeset/aa2a66acc1f9/

Log:	integrate signature core_enabled into ufunc call

diff --git a/pypy/module/cpyext/test/test_ndarrayobject.py b/pypy/module/cpyext/test/test_ndarrayobject.py
--- a/pypy/module/cpyext/test/test_ndarrayobject.py
+++ b/pypy/module/cpyext/test/test_ndarrayobject.py
@@ -322,9 +322,6 @@
                 char types[] = { NPY_DOUBLE,NPY_DOUBLE, NPY_INT, NPY_INT };
                 void *array_data[] = {NULL, NULL};
                 PyObject * retval;
-                /* XXX should be 'funcs', not 'funcs[1]' but how to define an array of 
-                   function pointers in ndarrayobject.py? */
-                printf("calling w/funcs[0] = 0x%x, funcs[1] = 0x%x \\n", funcs[0], funcs[1]);   
                 retval = _PyUFunc_FromFuncAndDataAndSignature(funcs,
                                     array_data, types, 2, 1, 1, PyUFunc_None,
                                     "times2", "times2_docstring", 0, "()->()");
diff --git a/pypy/module/micronumpy/loop.py b/pypy/module/micronumpy/loop.py
--- a/pypy/module/micronumpy/loop.py
+++ b/pypy/module/micronumpy/loop.py
@@ -137,7 +137,7 @@
         in_iters[i] = in_iter
         in_states[i] = in_state
     for i in range(nout):
-        out_i = in_args[i]
+        out_i = out_args[i]
         assert isinstance(out_i, W_NDimArray)
         out_iter, out_state = out_i.create_iter(shape)
         out_iters[i] = out_iter
diff --git a/pypy/module/micronumpy/test/test_ufuncs.py b/pypy/module/micronumpy/test/test_ufuncs.py
--- a/pypy/module/micronumpy/test/test_ufuncs.py
+++ b/pypy/module/micronumpy/test/test_ufuncs.py
@@ -114,9 +114,9 @@
             adder_ufunc0 = frompyfunc(adder, 2, 1, dtypes=['match'])
             adder_ufunc1 = frompyfunc([adder, adder], 2, 1, 
                             dtypes=[int, int, int, float, float, float])
-            int_func22 = frompyfunc([int, int], 2, 2, signature='(i)->(i)',
+            int_func22 = frompyfunc([int, int], 2, 2, signature='(i),(i)->(i),(i)',
                                     dtypes=['match'])
-            int_func12 = frompyfunc([int], 1, 2, signature='(i)->(i)',
+            int_func12 = frompyfunc([int], 1, 2, signature='(i)->(i),(i)',
                                     dtypes=['match'])
             retype = dtype(int)
         assert isinstance(adder_ufunc1, ufunc)
diff --git a/pypy/module/micronumpy/ufuncs.py b/pypy/module/micronumpy/ufuncs.py
--- a/pypy/module/micronumpy/ufuncs.py
+++ b/pypy/module/micronumpy/ufuncs.py
@@ -558,10 +558,8 @@
         new_shape = inargs0.get_shape()
         res_dtype = outargs0.get_dtype()
         # XXX handle inner-loop indexing
-        sign_parts = self.signature.split('->')
-        if len(sign_parts) == 2 and sign_parts[0].strip() == '()' \
-                                and sign_parts[1].strip() == '()':
-                                        
+        if not self.core_enabled:
+            # func is going to do all the work
             arglist = space.newlist(inargs + outargs)
             func = self.funcs[index]
             arglist = space.newlist(inargs + outargs)
@@ -1034,6 +1032,10 @@
         raise oefmt(space.w_ValueError,
             'identity must be None or an int')
 
+    if len(signature) == 0:
+        # cpython compatability, func is of the form (i),(i)->(i)
+        signature = ','.join(['(i)'] * nin) + '->' + ','.join(['(i)'] * nout)
+
     w_ret = W_UfuncGeneric(space, func, name, identity, nin, nout, dtypes, signature,
                                 match_dtypes=match_dtypes)
     _parse_signature(space, w_ret, w_ret.signature)


More information about the pypy-commit mailing list