[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