[pypy-commit] pypy ufuncapi: test and fix signature handling
mattip
noreply at buildbot.pypy.org
Fri Aug 22 16:13:11 CEST 2014
Author: mattip <matti.picus at gmail.com>
Branch: ufuncapi
Changeset: r72960:03e110d4a60f
Date: 2014-08-22 16:04 +0300
http://bitbucket.org/pypy/pypy/changeset/03e110d4a60f/
Log: test and fix signature handling
diff --git a/pypy/module/micronumpy/support.py b/pypy/module/micronumpy/support.py
--- a/pypy/module/micronumpy/support.py
+++ b/pypy/module/micronumpy/support.py
@@ -101,7 +101,7 @@
while signature[name_end] == ' ' or signature[name_end] == '\t':
name_end -= 1
var_name = signature[i:name_end + 1]
- if not all([_is_alpha_underscore(s) for s in var_name]):
+ if not all([_is_alnum_underscore(s) for s in var_name]):
raise oefmt(space.w_ValueError, '%s at %d in "%s"',
"expect dimension name", i, signature)
if var_name not in var_names:
@@ -111,10 +111,6 @@
cur_core_dim += 1
nd += 1
i = next_comma
- i = _next_non_white_space(signature, i + 1)
- if signature[i] != ',' and signature[i] != ')' and signature[i] != '-':
- raise oefmt(space.w_ValueError, '%s at %d in "%s"',
- "expect ',' or ')' or '-'", i, signature)
if signature[i] == ',':
i = _next_non_white_space(signature, i + 1);
if signature[i] == ')':
diff --git a/pypy/module/micronumpy/test/test_support.py b/pypy/module/micronumpy/test/test_support.py
--- a/pypy/module/micronumpy/test/test_support.py
+++ b/pypy/module/micronumpy/test/test_support.py
@@ -1,6 +1,8 @@
+from py.test import raises
from pypy.module.micronumpy import support
from pypy.module.micronumpy.ufuncs import W_UfuncGeneric
from pypy.module.micronumpy.test.test_base import BaseNumpyAppTest
+from pypy.interpreter.error import OperationError
class TestParseSignatureDirect(BaseNumpyAppTest):
def test_signature_basic(self):
@@ -28,3 +30,24 @@
ufunc = W_UfuncGeneric(space, funcs, name, identity, nin, nout, dtypes, signature)
support._parse_signature(space, ufunc, ufunc.signature)
assert ufunc.core_enabled == 1
+
+ nin = 2
+ nout = 1
+ signature = '(i1, i2),(J_1)->(_kAB)'
+ ufunc = W_UfuncGeneric(space, funcs, name, identity, nin, nout, dtypes, signature)
+ support._parse_signature(space, ufunc, ufunc.signature)
+ assert ufunc.core_enabled == 1
+
+ nin = 2
+ nout = 1
+ signature = '(i1 i2),(J_1)->(_kAB)'
+ ufunc = W_UfuncGeneric(space, funcs, name, identity, nin, nout, dtypes, signature)
+ exc = raises(OperationError, support._parse_signature, space, ufunc, ufunc.signature)
+ assert "expect dimension name" in exc.value.errorstr(space)
+
+ nin = 2
+ nout = 1
+ signature = '(i),i(->()'
+ ufunc = W_UfuncGeneric(space, funcs, name, identity, nin, nout, dtypes, signature)
+ exc = raises(OperationError, support._parse_signature, space, ufunc, ufunc.signature)
+ assert "expect '(' at 4" in exc.value.errorstr(space)
More information about the pypy-commit
mailing list