[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