[pypy-commit] pypy refactor-signature: RPythonization
fijal
noreply at buildbot.pypy.org
Thu Dec 15 09:34:59 CET 2011
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: refactor-signature
Changeset: r50532:78db9015b5f0
Date: 2011-12-15 10:14 +0200
http://bitbucket.org/pypy/pypy/changeset/78db9015b5f0/
Log: RPythonization
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
@@ -893,6 +893,7 @@
self.strides = strides
self.backstrides = backstrides
BaseArray.__init__(self, shape, parent.order)
+ assert isinstance(parent, W_NDimArray)
self.parent = parent
self.invalidates = parent.invalidates
@@ -1113,7 +1114,7 @@
)
arr = W_NDimArray(size, shape[:], dtype=dtype, order=order)
shapelen = len(shape)
- arr_iter = ArrayIterator(arr)
+ arr_iter = ArrayIterator(arr.size)
for i in range(len(elems_w)):
w_elem = elems_w[i]
dtype.setitem(arr.storage, arr_iter.offset,
diff --git a/pypy/module/micronumpy/signature.py b/pypy/module/micronumpy/signature.py
--- a/pypy/module/micronumpy/signature.py
+++ b/pypy/module/micronumpy/signature.py
@@ -40,9 +40,8 @@
def __init__(self, iterators):
self = hint(self, access_directly=True)
self.iterators = iterators
- self.final_iter = None
for i, iter in enumerate(self.iterators):
- if not isinstance(iter, ConstantIterator) or not isinstance(iter, BroadcastIterator):
+ if not isinstance(iter, ConstantIterator):# or not isinstance(iter, BroadcastIterator):
self.final_iter = i
break
else:
@@ -93,11 +92,16 @@
return 'Array'
def _create_iter(self, iterlist, arr):
+ from pypy.module.micronumpy.interp_numarray import W_NDimArray
+ arr = arr.get_concrete()
+ assert isinstance(arr, W_NDimArray)
if self.iter_no >= len(iterlist):
iterlist.append(ArrayIterator(arr.size))
def eval(self, frame, arr):
+ from pypy.module.micronumpy.interp_numarray import W_NDimArray
arr = arr.get_concrete()
+ assert isinstance(arr, W_NDimArray)
iter = frame.iterators[self.iter_no]
return arr.dtype.getitem(arr.storage, iter.offset)
@@ -111,6 +115,8 @@
iterlist.append(iter)
def eval(self, frame, arr):
+ from pypy.module.micronumpy.interp_numarray import Scalar
+ assert isinstance(arr, Scalar)
return arr.value
class ViewSignature(Signature):
@@ -139,6 +145,8 @@
iterlist.append(ViewIterator(arr))
def eval(self, frame, arr):
+ from pypy.module.micronumpy.interp_numarray import W_NDimSlice
+ assert isinstance(arr, W_NDimSlice)
arr = arr.get_concrete()
iter = frame.iterators[self.iter_no]
return arr.find_dtype().getitem(arr.parent.storage, iter.offset)
@@ -148,7 +156,7 @@
return 'FlatIter(%s)' % self.child.debug_repr()
def _create_iter(self, iterlist, arr):
- XXX
+ raise NotImplementedError
class Call1(Signature):
def __init__(self, func, child):
@@ -170,9 +178,13 @@
self.child._invent_numbering(cache, allnumbers)
def _create_iter(self, iterlist, arr):
+ from pypy.module.micronumpy.interp_numarray import Call1
+ assert isinstance(arr, Call1)
self.child._create_iter(iterlist, arr.values)
def eval(self, frame, arr):
+ from pypy.module.micronumpy.interp_numarray import Call1
+ assert isinstance(arr, Call1)
v = self.child.eval(frame, arr.values).convert_to(arr.res_dtype)
return self.unfunc(arr.res_dtype, v)
@@ -197,10 +209,15 @@
self.right._invent_numbering(cache, allnumbers)
def _create_iter(self, iterlist, arr):
+ from pypy.module.micronumpy.interp_numarray import Call2
+
+ assert isinstance(arr, Call2)
self.left._create_iter(iterlist, arr.left)
self.right._create_iter(iterlist, arr.right)
def eval(self, frame, arr):
+ from pypy.module.micronumpy.interp_numarray import Call2
+ assert isinstance(arr, Call2)
lhs = self.left.eval(frame, arr.left).convert_to(arr.calc_dtype)
rhs = self.right.eval(frame, arr.right).convert_to(arr.calc_dtype)
return self.binfunc(arr.calc_dtype, lhs, rhs)
diff --git a/pypy/module/micronumpy/test/test_zjit.py b/pypy/module/micronumpy/test/test_zjit.py
--- a/pypy/module/micronumpy/test/test_zjit.py
+++ b/pypy/module/micronumpy/test/test_zjit.py
@@ -48,9 +48,11 @@
interp = InterpreterState(codes[i])
interp.run(space)
w_res = interp.results[-1]
- if isinstance(w_res, BaseArray):
- w_res = w_res.eval(w_res.start_iter())
-
+ if isinstance(w_res, W_NDimArray):
+ concr = w_res.get_concrete()
+ sig = concr.find_sig()
+ frame = sig.create_frame(w_res)
+ w_res = sig.eval(frame, concr)
if isinstance(w_res, interp_boxes.W_Float64Box):
return w_res.value
elif isinstance(w_res, interp_boxes.W_BoolBox):
More information about the pypy-commit
mailing list