Author: Brian Kearns <[email protected]>
Branch: 
Changeset: r68000:d50d27c01818
Date: 2013-11-12 20:20 -0500
http://bitbucket.org/pypy/pypy/changeset/d50d27c01818/

Log:    raise coerce conversion errors at app-level

diff --git a/pypy/module/micronumpy/interp_numarray.py 
b/pypy/module/micronumpy/interp_numarray.py
--- a/pypy/module/micronumpy/interp_numarray.py
+++ b/pypy/module/micronumpy/interp_numarray.py
@@ -198,8 +198,7 @@
                                prefix)
 
     def descr_getitem(self, space, w_idx):
-        if (isinstance(w_idx, W_NDimArray) and
-            w_idx.get_dtype().is_bool_type()):
+        if isinstance(w_idx, W_NDimArray) and w_idx.get_dtype().is_bool_type():
             return self.getitem_filter(space, w_idx)
         try:
             return self.implementation.descr_getitem(space, self, w_idx)
@@ -213,9 +212,11 @@
         self.implementation.setitem_index(space, index_list, w_value)
 
     def descr_setitem(self, space, w_idx, w_value):
-        if (isinstance(w_idx, W_NDimArray) and
-                w_idx.get_dtype().is_bool_type()):
-            self.setitem_filter(space, w_idx, convert_to_array(space, w_value))
+        if isinstance(w_idx, W_NDimArray) and w_idx.get_dtype().is_bool_type():
+            try:
+                self.setitem_filter(space, w_idx, convert_to_array(space, 
w_value))
+            except ValueError, e:
+                raise OperationError(space.w_ValueError, space.wrap(str(e)))
             return
         try:
             self.implementation.descr_setitem(space, self, w_idx, w_value)
diff --git a/pypy/module/micronumpy/test/test_numarray.py 
b/pypy/module/micronumpy/test/test_numarray.py
--- a/pypy/module/micronumpy/test/test_numarray.py
+++ b/pypy/module/micronumpy/test/test_numarray.py
@@ -2454,6 +2454,23 @@
         assert exc.value[0].find('cannot assign') >= 0
         assert (a == [[0, 1], [2, 3], [4, 5]]).all()
 
+    def test_nonarray_assignment(self):
+        import numpypy as np
+        a = np.arange(10)
+        b = np.ones(10, dtype=bool)
+        r = np.arange(10)
+        def assign(a, b, c):
+            a[b] = c
+        raises(ValueError, assign, a, b, np.nan)
+        #raises(ValueError, assign, a, r, np.nan)  # XXX
+        import sys
+        if '__pypy__' not in sys.builtin_module_names:
+            a[b] = np.array(np.nan)
+            #a[r] = np.array(np.nan)
+        else:
+            raises(ValueError, assign, a, b, np.array(np.nan))
+            #raises(ValueError, assign, a, r, np.array(np.nan))
+
     def test_copy_kwarg(self):
         from numpypy import array
         x = array([1, 2, 3])
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to