Author: Matti Picus <[email protected]>
Branch: numpy-subarrays
Changeset: r64195:d48e9c0866a0
Date: 2013-05-15 21:19 +0300
http://bitbucket.org/pypy/pypy/changeset/d48e9c0866a0/

Log:    fix ztranslation - one fix and lots of asserts

diff --git a/pypy/module/micronumpy/arrayimpl/concrete.py 
b/pypy/module/micronumpy/arrayimpl/concrete.py
--- a/pypy/module/micronumpy/arrayimpl/concrete.py
+++ b/pypy/module/micronumpy/arrayimpl/concrete.py
@@ -69,6 +69,7 @@
             new_backstrides = [0] * ndims
             for nd in range(ndims):
                 new_backstrides[nd] = (new_shape[nd] - 1) * new_strides[nd]
+            assert isinstance(orig_array, W_NDimArray) or orig_array is None
             return SliceArray(self.start, new_strides, new_backstrides,
                               new_shape, self, orig_array)
         else:
diff --git a/pypy/module/micronumpy/arrayimpl/scalar.py 
b/pypy/module/micronumpy/arrayimpl/scalar.py
--- a/pypy/module/micronumpy/arrayimpl/scalar.py
+++ b/pypy/module/micronumpy/arrayimpl/scalar.py
@@ -2,6 +2,7 @@
 from pypy.module.micronumpy.arrayimpl import base
 from pypy.module.micronumpy.base import W_NDimArray, convert_to_array
 from pypy.module.micronumpy import support
+from pypy.module.micronumpy.interp_boxes import W_GenericBox
 from pypy.interpreter.error import OperationError
 
 class ScalarIterator(base.BaseArrayIterator):
@@ -48,6 +49,7 @@
         return self.value
 
     def set_scalar_value(self, w_val):
+        assert isinstance(w_val, W_GenericBox)
         self.value = w_val.convert_to(self.dtype)
 
     def copy(self, space):
@@ -73,7 +75,7 @@
         dtype = self.dtype.float_type or self.dtype
         if len(w_arr.get_shape()) > 0:
             raise OperationError(space.w_ValueError, space.wrap(
-                "could not broadcast input array from shape " + 
+                "could not broadcast input array from shape " +
                 "(%s) into shape ()" % (
                     ','.join([str(x) for x in w_arr.get_shape()],))))
         if self.dtype.is_complex_type():
@@ -102,7 +104,7 @@
         dtype = self.dtype.float_type
         if len(w_arr.get_shape()) > 0:
             raise OperationError(space.w_ValueError, space.wrap(
-                "could not broadcast input array from shape " + 
+                "could not broadcast input array from shape " +
                 "(%s) into shape ()" % (
                     ','.join([str(x) for x in w_arr.get_shape()],))))
         self.value = self.dtype.itemtype.composite(
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
@@ -12,6 +12,7 @@
 from pypy.module.micronumpy.iter import PureShapeIterator
 from pypy.module.micronumpy import constants
 from pypy.module.micronumpy.support import int_w
+from pypy.module.micronumpy.interp_boxes import W_GenericBox
 
 call2_driver = jit.JitDriver(name='numpy_call2',
                              greens = ['shapelen', 'func', 'calc_dtype',
@@ -33,8 +34,12 @@
                                      out=out,
                                      left_iter=left_iter, 
right_iter=right_iter,
                                      out_iter=out_iter)
-        w_left = left_iter.getitem().convert_to(calc_dtype)
-        w_right = right_iter.getitem().convert_to(calc_dtype)
+        item_l = left_iter.getitem()
+        item_r = right_iter.getitem()
+        assert isinstance(item_l, W_GenericBox)
+        assert isinstance(item_r, W_GenericBox)
+        w_left = item_l.convert_to(calc_dtype)
+        w_right = item_r.convert_to(calc_dtype)
         out_iter.setitem(func(calc_dtype, w_left, w_right).convert_to(
             res_dtype))
         left_iter.next()
@@ -59,7 +64,9 @@
                                      calc_dtype=calc_dtype, 
res_dtype=res_dtype,
                                      shape=shape, w_obj=w_obj, out=out,
                                      obj_iter=obj_iter, out_iter=out_iter)
-        elem = obj_iter.getitem().convert_to(calc_dtype)
+        item = obj_iter.getitem()
+        assert isinstance(item, W_GenericBox)
+        elem = item.convert_to(calc_dtype)
         out_iter.setitem(func(calc_dtype, elem).convert_to(res_dtype))
         out_iter.next()
         obj_iter.next()
@@ -86,7 +93,9 @@
     shapelen = len(shape)
     while not target_iter.done():
         setslice_driver1.jit_merge_point(shapelen=shapelen, dtype=dtype)
-        target_iter.setitem(source_iter.getitem().convert_to(dtype))
+        item = source_iter.getitem()
+        assert isinstance(item, W_GenericBox)
+        target_iter.setitem(item.convert_to(dtype))
         target_iter.next()
         source_iter.next()
     return target
@@ -100,7 +109,9 @@
     shapelen = len(shape)
     while not target_iter.done():
         setslice_driver2.jit_merge_point(shapelen=shapelen, dtype=dtype)
-        target_iter.setitem(dtype.build_and_convert(space, 
source_iter.getitem()))
+        item = source_iter.getitem()
+        assert isinstance(item, W_GenericBox)
+        target_iter.setitem(dtype.build_and_convert(space, item))
         target_iter.next()
         source_iter.next()
     return target
@@ -113,7 +124,9 @@
 def compute_reduce(obj, calc_dtype, func, done_func, identity):
     obj_iter = obj.create_iter()
     if identity is None:
-        cur_value = obj_iter.getitem().convert_to(calc_dtype)
+        item = obj_iter.getitem()
+        assert isinstance(item, W_GenericBox)
+        cur_value = item.convert_to(calc_dtype)
         obj_iter.next()
     else:
         cur_value = identity.convert_to(calc_dtype)
@@ -123,7 +136,9 @@
                                       done_func=done_func,
                                       calc_dtype=calc_dtype, identity=identity,
                                       )
-        rval = obj_iter.getitem().convert_to(calc_dtype)
+        item = obj_iter.getitem()
+        assert isinstance(item, W_GenericBox)
+        rval = item.convert_to(calc_dtype)
         if done_func is not None and done_func(calc_dtype, rval):
             return rval
         cur_value = func(calc_dtype, cur_value, rval)
@@ -142,7 +157,9 @@
         reduce_cum_driver.jit_merge_point(shapelen=shapelen, func=func,
                                           dtype=calc_dtype,
                                          )
-        rval = obj_iter.getitem().convert_to(calc_dtype)
+        item = obj_iter.getitem()
+        assert isinstance(item, W_GenericBox)
+        rval = item.convert_to(calc_dtype)
         cur_value = func(calc_dtype, cur_value, rval)
         out_iter.setitem(cur_value)
         out_iter.next()
@@ -173,13 +190,16 @@
         iter = x_iter
     shapelen = len(shape)
     while not iter.done():
-        where_driver.jit_merge_point(shapelen=shapelen, dtype=dtype, 
+        where_driver.jit_merge_point(shapelen=shapelen, dtype=dtype,
                                         arr_dtype=arr_dtype)
         w_cond = arr_iter.getitem()
+        assert isinstance(w_cond, W_GenericBox)
         if arr_dtype.itemtype.bool(w_cond):
-            w_val = x_iter.getitem().convert_to(dtype)
+            item = x_iter.getitem()
         else:
-            w_val = y_iter.getitem().convert_to(dtype)
+            item = y_iter.getitem()
+        assert isinstance(item, W_GenericBox)
+        w_val = item.convert_to(dtype)
         out_iter.setitem(w_val)
         out_iter.next()
         arr_iter.next()
@@ -188,7 +208,7 @@
     return out
 
 axis_reduce__driver = jit.JitDriver(name='numpy_axis_reduce',
-                                    greens=['shapelen', 
+                                    greens=['shapelen',
                                             'func', 'dtype',
                                             'identity'],
                                     reds='auto')
@@ -208,12 +228,15 @@
         axis_reduce__driver.jit_merge_point(shapelen=shapelen, func=func,
                                             dtype=dtype, identity=identity,
                                             )
-        w_val = arr_iter.getitem().convert_to(dtype)
+        item = arr_iter.getitem()
+        assert isinstance(item, W_GenericBox)
+        w_val = item.convert_to(dtype)
         if out_iter.first_line:
             if identity is not None:
                 w_val = func(dtype, identity, w_val)
         else:
             cur = temp_iter.getitem()
+            assert isinstance(cur, W_GenericBox)
             w_val = func(dtype, cur, w_val)
         out_iter.setitem(w_val)
         if cumultative:
@@ -228,19 +251,21 @@
     arg_driver = jit.JitDriver(name='numpy_' + op_name,
                                greens = ['shapelen', 'dtype'],
                                reds = 'auto')
-    
+
     def argmin_argmax(arr):
         result = 0
         idx = 1
         dtype = arr.get_dtype()
         iter = arr.create_iter()
         cur_best = iter.getitem()
+        assert isinstance(cur_best, W_GenericBox)
         iter.next()
         shapelen = len(arr.get_shape())
         while not iter.done():
             arg_driver.jit_merge_point(shapelen=shapelen, dtype=dtype,
                                       )
             w_val = iter.getitem()
+            assert isinstance(w_val, W_GenericBox)
             new_best = getattr(dtype.itemtype, op_name)(cur_best, w_val)
             if dtype.itemtype.ne(new_best, cur_best):
                 result = idx
@@ -265,7 +290,7 @@
      result.shape == [3, 5, 2, 4]
      broadcast shape should be [3, 5, 2, 7, 4]
      result should skip dims 3 which is len(result_shape) - 1
-        (note that if right is 1d, result should 
+        (note that if right is 1d, result should
                   skip len(result_shape))
      left should skip 2, 4 which is a.ndims-1 + range(right.ndims)
           except where it==(right.ndims-2)
@@ -283,9 +308,13 @@
     righti = right.create_dot_iter(broadcast_shape, right_skip)
     while not outi.done():
         dot_driver.jit_merge_point(dtype=dtype)
-        lval = lefti.getitem().convert_to(dtype) 
-        rval = righti.getitem().convert_to(dtype) 
-        outval = outi.getitem().convert_to(dtype) 
+        litem = lefti.getitem()
+        ritem = righti.getitem()
+        oitem = outi.getitem()
+        assert isinstance(litem, W_GenericBox) and isinstance(ritem, 
W_GenericBox) and isinstance(oitem, W_GenericBox)
+        lval = litem.convert_to(dtype)
+        rval = ritem.convert_to(dtype)
+        outval = oitem.convert_to(dtype)
         v = dtype.itemtype.mul(lval, rval)
         value = dtype.itemtype.add(v, outval).convert_to(dtype)
         outi.setitem(value)
@@ -355,7 +384,7 @@
         setitem_filter_driver.jit_merge_point(shapelen=shapelen,
                                               index_dtype=index_dtype,
                                               arr_dtype=arr_dtype,
-                                             ) 
+                                             )
         if index_iter.getitem_bool():
             arr_iter.setitem(value_iter.getitem())
             value_iter.next()
@@ -397,7 +426,9 @@
     arr_iter.next_skip_x(start)
     while length > 0:
         flatiter_setitem_driver1.jit_merge_point(dtype=dtype)
-        arr_iter.setitem(val_iter.getitem().convert_to(dtype))
+        item = val_iter.getitem()
+        assert isinstance(item, W_GenericBox)
+        arr_iter.setitem(item.convert_to(dtype))
         # need to repeat i_nput values until all assignments are done
         arr_iter.next_skip_x(step)
         length -= 1
@@ -541,7 +572,9 @@
                     index = 0
                 else:
                     index = len(iterators) - 1
-        out_iter.setitem(iterators[index].getitem().convert_to(dtype))
+        item = iterators[index].getitem()
+        assert isinstance(item, W_GenericBox)
+        out_iter.setitem(item.convert_to(dtype))
         for iter in iterators:
             iter.next()
         out_iter.next()
@@ -559,9 +592,13 @@
     out_iter = out.create_iter(shape)
     while not arr_iter.done():
         clip_driver.jit_merge_point(shapelen=shapelen, dtype=dtype)
-        w_v = arr_iter.getitem().convert_to(dtype)
-        w_min = min_iter.getitem().convert_to(dtype)
-        w_max = max_iter.getitem().convert_to(dtype)
+        i_arr = arr_iter.getitem()
+        i_min = min_iter.getitem()
+        i_max = max_iter.getitem()
+        assert isinstance(i_arr, W_GenericBox) and isinstance(i_min, 
W_GenericBox) and isinstance(i_max, W_GenericBox)
+        w_v = i_arr.convert_to(dtype)
+        w_min = i_min.convert_to(dtype)
+        w_max = i_max.convert_to(dtype)
         if dtype.itemtype.lt(w_v, w_min):
             w_v = w_min
         elif dtype.itemtype.gt(w_v, w_max):
@@ -613,4 +650,4 @@
         out_iter.setitem(arr.getitem_index(space, indexes))
         iter.next()
         out_iter.next()
-       
+
diff --git a/pypy/module/micronumpy/types.py b/pypy/module/micronumpy/types.py
--- a/pypy/module/micronumpy/types.py
+++ b/pypy/module/micronumpy/types.py
@@ -1686,6 +1686,7 @@
         return space.wrap(self.to_str(box))
 
     def build_and_convert(self, space, mydtype, box):
+        assert isinstance(box, interp_boxes.W_GenericBox)
         if box.get_dtype(space).is_str_or_unicode():
             arg = box.get_dtype(space).itemtype.to_str(box)
         else:
@@ -1725,7 +1726,8 @@
         if dtype is None:
             dtype = arr.dtype
         strides, backstrides = support.calc_strides(dtype.shape, 
dtype.subdtype, arr.order)
-        implementation = SliceArray(i + offset, strides, backstrides, 
dtype.shape, arr, arr, dtype.subdtype)
+        implementation = SliceArray(i + offset, strides, backstrides,
+                             dtype.shape, arr, W_NDimArray(arr), 
dtype.subdtype)
         return W_NDimArray(implementation)
 
 NonNativeVoidType = VoidType
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to