Author: Matti Picus <[email protected]>
Branch: numpy-subarrays
Changeset: r64247:e08dfdfdcfbe
Date: 2013-05-17 11:24 +0300
http://bitbucket.org/pypy/pypy/changeset/e08dfdfdcfbe/
Log: simplify assertion, still trying to work out why it is necessary for
translation
diff --git a/pypy/module/micronumpy/interp_dtype.py
b/pypy/module/micronumpy/interp_dtype.py
--- a/pypy/module/micronumpy/interp_dtype.py
+++ b/pypy/module/micronumpy/interp_dtype.py
@@ -80,7 +80,9 @@
return self.itemtype.coerce(space, self, w_item)
def getitem(self, arr, i):
- return self.itemtype.read(arr, i, 0)
+ item = self.itemtype.read(arr, i, 0)
+ assert isinstance(item, interp_boxes.W_GenericBox)
+ return item
def getitem_bool(self, arr, i):
return self.itemtype.read_bool(arr, i, 0)
diff --git a/pypy/module/micronumpy/iter.py b/pypy/module/micronumpy/iter.py
--- a/pypy/module/micronumpy/iter.py
+++ b/pypy/module/micronumpy/iter.py
@@ -32,13 +32,13 @@
shape dimension
which is back 25 and forward 1,
which is x.strides[1] * (x.shape[1] - 1) + x.strides[0]
-so if we precalculate the overflow backstride as
+so if we precalculate the overflow backstride as
[x.strides[i] * (x.shape[i] - 1) for i in range(len(x.shape))]
we can go faster.
All the calculations happen in next()
next_skip_x() tries to do the iteration for a number of steps at once,
-but then we cannot gaurentee that we only overflow one single shape
+but then we cannot gaurentee that we only overflow one single shape
dimension, perhaps we could overflow times in one big step.
"""
@@ -170,7 +170,8 @@
self.dtype.setitem(self.array, self.offset, elem)
def getitem(self):
- return self.dtype.getitem(self.array, self.offset)
+ item = self.dtype.getitem(self.array, self.offset)
+ return item
def getitem_bool(self):
return self.dtype.getitem_bool(self.array, self.offset)
@@ -288,12 +289,13 @@
self.dim = dim
self.array = array
self.dtype = array.dtype
-
+
def setitem(self, elem):
self.dtype.setitem(self.array, self.offset, elem)
def getitem(self):
- return self.dtype.getitem(self.array, self.offset)
+ item = self.dtype.getitem(self.array, self.offset)
+ return item
@jit.unroll_safe
def next(self):
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,7 +12,6 @@
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',
@@ -34,12 +33,8 @@
out=out,
left_iter=left_iter,
right_iter=right_iter,
out_iter=out_iter)
- 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)
+ w_left = left_iter.getitem().convert_to(calc_dtype)
+ w_right = right_iter.getitem().convert_to(calc_dtype)
out_iter.setitem(func(calc_dtype, w_left, w_right).convert_to(
res_dtype))
left_iter.next()
@@ -64,9 +59,7 @@
calc_dtype=calc_dtype,
res_dtype=res_dtype,
shape=shape, w_obj=w_obj, out=out,
obj_iter=obj_iter, out_iter=out_iter)
- item = obj_iter.getitem()
- assert isinstance(item, W_GenericBox)
- elem = item.convert_to(calc_dtype)
+ elem = obj_iter.getitem().convert_to(calc_dtype)
out_iter.setitem(func(calc_dtype, elem).convert_to(res_dtype))
out_iter.next()
obj_iter.next()
@@ -93,9 +86,7 @@
shapelen = len(shape)
while not target_iter.done():
setslice_driver1.jit_merge_point(shapelen=shapelen, dtype=dtype)
- item = source_iter.getitem()
- assert isinstance(item, W_GenericBox)
- target_iter.setitem(item.convert_to(dtype))
+ target_iter.setitem(source_iter.getitem().convert_to(dtype))
target_iter.next()
source_iter.next()
return target
@@ -109,9 +100,7 @@
shapelen = len(shape)
while not target_iter.done():
setslice_driver2.jit_merge_point(shapelen=shapelen, dtype=dtype)
- item = source_iter.getitem()
- assert isinstance(item, W_GenericBox)
- target_iter.setitem(dtype.build_and_convert(space, item))
+ target_iter.setitem(dtype.build_and_convert(space,
source_iter.getitem()))
target_iter.next()
source_iter.next()
return target
@@ -124,9 +113,7 @@
def compute_reduce(obj, calc_dtype, func, done_func, identity):
obj_iter = obj.create_iter()
if identity is None:
- item = obj_iter.getitem()
- assert isinstance(item, W_GenericBox)
- cur_value = item.convert_to(calc_dtype)
+ cur_value = obj_iter.getitem().convert_to(calc_dtype)
obj_iter.next()
else:
cur_value = identity.convert_to(calc_dtype)
@@ -136,9 +123,7 @@
done_func=done_func,
calc_dtype=calc_dtype, identity=identity,
)
- item = obj_iter.getitem()
- assert isinstance(item, W_GenericBox)
- rval = item.convert_to(calc_dtype)
+ rval = obj_iter.getitem().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)
@@ -157,9 +142,7 @@
reduce_cum_driver.jit_merge_point(shapelen=shapelen, func=func,
dtype=calc_dtype,
)
- item = obj_iter.getitem()
- assert isinstance(item, W_GenericBox)
- rval = item.convert_to(calc_dtype)
+ rval = obj_iter.getitem().convert_to(calc_dtype)
cur_value = func(calc_dtype, cur_value, rval)
out_iter.setitem(cur_value)
out_iter.next()
@@ -190,16 +173,13 @@
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):
- item = x_iter.getitem()
+ w_val = x_iter.getitem().convert_to(dtype)
else:
- item = y_iter.getitem()
- assert isinstance(item, W_GenericBox)
- w_val = item.convert_to(dtype)
+ w_val = y_iter.getitem().convert_to(dtype)
out_iter.setitem(w_val)
out_iter.next()
arr_iter.next()
@@ -208,7 +188,7 @@
return out
axis_reduce__driver = jit.JitDriver(name='numpy_axis_reduce',
- greens=['shapelen',
+ greens=['shapelen',
'func', 'dtype',
'identity'],
reds='auto')
@@ -228,15 +208,12 @@
axis_reduce__driver.jit_merge_point(shapelen=shapelen, func=func,
dtype=dtype, identity=identity,
)
- item = arr_iter.getitem()
- assert isinstance(item, W_GenericBox)
- w_val = item.convert_to(dtype)
+ w_val = arr_iter.getitem().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:
@@ -251,21 +228,19 @@
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
@@ -290,7 +265,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)
@@ -308,13 +283,9 @@
righti = right.create_dot_iter(broadcast_shape, right_skip)
while not outi.done():
dot_driver.jit_merge_point(dtype=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)
+ lval = lefti.getitem().convert_to(dtype)
+ rval = righti.getitem().convert_to(dtype)
+ outval = outi.getitem().convert_to(dtype)
v = dtype.itemtype.mul(lval, rval)
value = dtype.itemtype.add(v, outval).convert_to(dtype)
outi.setitem(value)
@@ -384,7 +355,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()
@@ -426,9 +397,7 @@
arr_iter.next_skip_x(start)
while length > 0:
flatiter_setitem_driver1.jit_merge_point(dtype=dtype)
- item = val_iter.getitem()
- assert isinstance(item, W_GenericBox)
- arr_iter.setitem(item.convert_to(dtype))
+ arr_iter.setitem(val_iter.getitem().convert_to(dtype))
# need to repeat i_nput values until all assignments are done
arr_iter.next_skip_x(step)
length -= 1
@@ -572,9 +541,7 @@
index = 0
else:
index = len(iterators) - 1
- item = iterators[index].getitem()
- assert isinstance(item, W_GenericBox)
- out_iter.setitem(item.convert_to(dtype))
+ out_iter.setitem(iterators[index].getitem().convert_to(dtype))
for iter in iterators:
iter.next()
out_iter.next()
@@ -592,13 +559,9 @@
out_iter = out.create_iter(shape)
while not arr_iter.done():
clip_driver.jit_merge_point(shapelen=shapelen, dtype=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)
+ w_v = arr_iter.getitem().convert_to(dtype)
+ w_min = min_iter.getitem().convert_to(dtype)
+ w_max = max_iter.getitem().convert_to(dtype)
if dtype.itemtype.lt(w_v, w_min):
w_v = w_min
elif dtype.itemtype.gt(w_v, w_max):
@@ -650,4 +613,4 @@
out_iter.setitem(arr.getitem_index(space, indexes))
iter.next()
out_iter.next()
-
+
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit