Author: Amaury Forgeot d'Arc <amaur...@gmail.com> Branch: py3k Changeset: r52047:772300a58841 Date: 2012-02-03 00:35 +0100 http://bitbucket.org/pypy/pypy/changeset/772300a58841/
Log: hg merge default diff --git a/pypy/jit/metainterp/pyjitpl.py b/pypy/jit/metainterp/pyjitpl.py --- a/pypy/jit/metainterp/pyjitpl.py +++ b/pypy/jit/metainterp/pyjitpl.py @@ -974,13 +974,13 @@ any_operation = len(self.metainterp.history.operations) > 0 jitdriver_sd = self.metainterp.staticdata.jitdrivers_sd[jdindex] self.verify_green_args(jitdriver_sd, greenboxes) - self.debug_merge_point(jitdriver_sd, jdindex, self.metainterp.in_recursion, + self.debug_merge_point(jitdriver_sd, jdindex, self.metainterp.portal_call_depth, greenboxes) if self.metainterp.seen_loop_header_for_jdindex < 0: if not any_operation: return - if self.metainterp.in_recursion or not self.metainterp.get_procedure_token(greenboxes, True): + if self.metainterp.portal_call_depth or not self.metainterp.get_procedure_token(greenboxes, True): if not jitdriver_sd.no_loop_header: return # automatically add a loop_header if there is none @@ -992,7 +992,7 @@ self.metainterp.seen_loop_header_for_jdindex = -1 # - if not self.metainterp.in_recursion: + if not self.metainterp.portal_call_depth: assert jitdriver_sd is self.metainterp.jitdriver_sd # Set self.pc to point to jit_merge_point instead of just after: # if reached_loop_header() raises SwitchToBlackhole, then the @@ -1028,11 +1028,11 @@ assembler_call=True) raise ChangeFrame - def debug_merge_point(self, jitdriver_sd, jd_index, in_recursion, greenkey): + def debug_merge_point(self, jitdriver_sd, jd_index, portal_call_depth, greenkey): # debugging: produce a DEBUG_MERGE_POINT operation loc = jitdriver_sd.warmstate.get_location_str(greenkey) debug_print(loc) - args = [ConstInt(jd_index), ConstInt(in_recursion)] + greenkey + args = [ConstInt(jd_index), ConstInt(portal_call_depth)] + greenkey self.metainterp.history.record(rop.DEBUG_MERGE_POINT, args, None) @arguments("box", "label") @@ -1552,7 +1552,7 @@ # ____________________________________________________________ class MetaInterp(object): - in_recursion = 0 + portal_call_depth = 0 cancel_count = 0 def __init__(self, staticdata, jitdriver_sd): @@ -1587,7 +1587,7 @@ def newframe(self, jitcode, greenkey=None): if jitcode.is_portal: - self.in_recursion += 1 + self.portal_call_depth += 1 if greenkey is not None and self.is_main_jitcode(jitcode): self.portal_trace_positions.append( (greenkey, len(self.history.operations))) @@ -1603,7 +1603,7 @@ frame = self.framestack.pop() jitcode = frame.jitcode if jitcode.is_portal: - self.in_recursion -= 1 + self.portal_call_depth -= 1 if frame.greenkey is not None and self.is_main_jitcode(jitcode): self.portal_trace_positions.append( (None, len(self.history.operations))) @@ -1662,17 +1662,17 @@ raise self.staticdata.ExitFrameWithExceptionRef(self.cpu, excvaluebox.getref_base()) def check_recursion_invariant(self): - in_recursion = -1 + portal_call_depth = -1 for frame in self.framestack: jitcode = frame.jitcode assert jitcode.is_portal == len([ jd for jd in self.staticdata.jitdrivers_sd if jd.mainjitcode is jitcode]) if jitcode.is_portal: - in_recursion += 1 - if in_recursion != self.in_recursion: - print "in_recursion problem!!!" - print in_recursion, self.in_recursion + portal_call_depth += 1 + if portal_call_depth != self.portal_call_depth: + print "portal_call_depth problem!!!" + print portal_call_depth, self.portal_call_depth for frame in self.framestack: jitcode = frame.jitcode if jitcode.is_portal: @@ -2183,11 +2183,11 @@ def initialize_state_from_start(self, original_boxes): # ----- make a new frame ----- - self.in_recursion = -1 # always one portal around + self.portal_call_depth = -1 # always one portal around self.framestack = [] f = self.newframe(self.jitdriver_sd.mainjitcode) f.setup_call(original_boxes) - assert self.in_recursion == 0 + assert self.portal_call_depth == 0 self.virtualref_boxes = [] self.initialize_withgreenfields(original_boxes) self.initialize_virtualizable(original_boxes) @@ -2198,7 +2198,7 @@ # otherwise the jit_virtual_refs are left in a dangling state. rstack._stack_criticalcode_start() try: - self.in_recursion = -1 # always one portal around + self.portal_call_depth = -1 # always one portal around self.history = history.History() inputargs_and_holes = self.rebuild_state_after_failure(resumedescr) self.history.inputargs = [box for box in inputargs_and_holes if box] 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 @@ -267,7 +267,7 @@ out_size = support.product(out_shape) result = W_NDimArray(out_size, out_shape, dtype) # This is the place to add fpypy and blas - return multidim_dot(space, self.get_concrete(), + return multidim_dot(space, self.get_concrete(), other.get_concrete(), result, dtype, other_critical_dim) @@ -280,6 +280,12 @@ def descr_get_ndim(self, space): return space.wrap(len(self.shape)) + def descr_get_itemsize(self, space): + return space.wrap(self.find_dtype().itemtype.get_element_size()) + + def descr_get_nbytes(self, space): + return space.wrap(self.size * self.find_dtype().itemtype.get_element_size()) + @jit.unroll_safe def descr_get_shape(self, space): return space.newtuple([space.wrap(i) for i in self.shape]) @@ -507,7 +513,7 @@ w_shape = space.newtuple(args_w) new_shape = get_shape_from_iterable(space, self.size, w_shape) return self.reshape(space, new_shape) - + def reshape(self, space, new_shape): concrete = self.get_concrete() # Since we got to here, prod(new_shape) == self.size @@ -1289,11 +1295,13 @@ BaseArray.descr_set_shape), size = GetSetProperty(BaseArray.descr_get_size), ndim = GetSetProperty(BaseArray.descr_get_ndim), - item = interp2app(BaseArray.descr_item), + itemsize = GetSetProperty(BaseArray.descr_get_itemsize), + nbytes = GetSetProperty(BaseArray.descr_get_nbytes), T = GetSetProperty(BaseArray.descr_get_transpose), flat = GetSetProperty(BaseArray.descr_get_flatiter), ravel = interp2app(BaseArray.descr_ravel), + item = interp2app(BaseArray.descr_item), mean = interp2app(BaseArray.descr_mean), sum = interp2app(BaseArray.descr_sum), @@ -1349,8 +1357,8 @@ return space.wrap(self.index) def descr_coords(self, space): - coords, step, lngth = to_coords(space, self.base.shape, - self.base.size, self.base.order, + coords, step, lngth = to_coords(space, self.base.shape, + self.base.size, self.base.order, space.wrap(self.index)) return space.newtuple([space.wrap(c) for c in coords]) @@ -1380,7 +1388,7 @@ step=step, res=res, ri=ri, - ) + ) w_val = base.getitem(basei.offset) res.setitem(ri.offset,w_val) basei = basei.next_skip_x(shapelen, step) @@ -1408,7 +1416,7 @@ arr=arr, ai=ai, lngth=lngth, - ) + ) v = arr.getitem(ai).convert_to(base.dtype) base.setitem(basei.offset, v) # need to repeat input values until all assignments are done @@ -1424,7 +1432,6 @@ W_FlatIterator.typedef = TypeDef( 'flatiter', - #__array__ = #MISSING __iter__ = interp2app(W_FlatIterator.descr_iter), __getitem__ = interp2app(W_FlatIterator.descr_getitem), __setitem__ = interp2app(W_FlatIterator.descr_setitem), @@ -1434,7 +1441,6 @@ __le__ = interp2app(BaseArray.descr_le), __gt__ = interp2app(BaseArray.descr_gt), __ge__ = interp2app(BaseArray.descr_ge), - #__sizeof__ #MISSING base = GetSetProperty(W_FlatIterator.descr_base), index = GetSetProperty(W_FlatIterator.descr_index), coords = GetSetProperty(W_FlatIterator.descr_coords), 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 @@ -173,7 +173,7 @@ def _to_coords(index, order): return to_coords(self.space, [2, 3, 4], 24, order, self.space.wrap(index))[0] - + assert _to_coords(0, 'C') == [0, 0, 0] assert _to_coords(1, 'C') == [0, 0, 1] assert _to_coords(-1, 'C') == [1, 2, 3] @@ -306,7 +306,7 @@ from _numpypy import arange a = arange(15).reshape(3, 5) assert a[1, 3] == 8 - assert a.T[1, 2] == 11 + assert a.T[1, 2] == 11 def test_setitem(self): from _numpypy import array @@ -1121,14 +1121,14 @@ f1 = array([0,1]) f = concatenate((f1, [2], f1, [7])) assert (f == [0,1,2,0,1,7]).all() - + bad_axis = raises(ValueError, concatenate, (a1,a2), axis=1) assert str(bad_axis.value) == "bad axis argument" - + concat_zero = raises(ValueError, concatenate, ()) assert str(concat_zero.value) == \ "concatenation of zero-length sequences is impossible" - + dims_disagree = raises(ValueError, concatenate, (a1, b1), axis=0) assert str(dims_disagree.value) == \ "array dimensions must agree except for axis being concatenated" @@ -1163,6 +1163,25 @@ a = array([[1, 2], [3, 4]]) assert (a.T.flatten() == [1, 3, 2, 4]).all() + def test_itemsize(self): + from _numpypy import ones, dtype, array + + for obj in [float, bool, int]: + assert ones(1, dtype=obj).itemsize == dtype(obj).itemsize + assert (ones(1) + ones(1)).itemsize == 8 + assert array(1.0).itemsize == 8 + assert ones(1)[:].itemsize == 8 + + def test_nbytes(self): + from _numpypy import array, ones + + assert ones(1).nbytes == 8 + assert ones((2, 2)).nbytes == 32 + assert ones((2, 2))[1:,].nbytes == 16 + assert (ones(1) + ones(1)).nbytes == 8 + assert array(3.0).nbytes == 8 + + class AppTestMultiDim(BaseNumpyAppTest): def test_init(self): import _numpypy @@ -1458,13 +1477,13 @@ b = a.T.flat assert (b == [0, 4, 8, 1, 5, 9, 2, 6, 10, 3, 7, 11]).all() assert not (b != [0, 4, 8, 1, 5, 9, 2, 6, 10, 3, 7, 11]).any() - assert ((b >= range(12)) == [True, True, True,False, True, True, + assert ((b >= range(12)) == [True, True, True,False, True, True, False, False, True, False, False, True]).all() - assert ((b < range(12)) != [True, True, True,False, True, True, + assert ((b < range(12)) != [True, True, True,False, True, True, False, False, True, False, False, True]).all() - assert ((b <= range(12)) != [False, True, True,False, True, True, + assert ((b <= range(12)) != [False, True, True,False, True, True, False, False, True, False, False, False]).all() - assert ((b > range(12)) == [False, True, True,False, True, True, + assert ((b > range(12)) == [False, True, True,False, True, True, False, False, True, False, False, False]).all() def test_flatiter_view(self): from _numpypy import arange diff --git a/pypy/module/pypyjit/interp_resop.py b/pypy/module/pypyjit/interp_resop.py --- a/pypy/module/pypyjit/interp_resop.py +++ b/pypy/module/pypyjit/interp_resop.py @@ -127,6 +127,7 @@ l_w.append(DebugMergePoint(space, jit_hooks._cast_to_gcref(op), logops.repr_of_resop(op), jd_sd.jitdriver.name, + op.getarg(1).getint(), w_greenkey)) else: l_w.append(WrappedOp(jit_hooks._cast_to_gcref(op), ofs, @@ -163,14 +164,14 @@ llres = res.llbox return WrappedOp(jit_hooks.resop_new(num, args, llres), offset, repr) -@unwrap_spec(repr=str, jd_name=str) -def descr_new_dmp(space, w_tp, w_args, repr, jd_name, w_greenkey): +@unwrap_spec(repr=str, jd_name=str, call_depth=int) +def descr_new_dmp(space, w_tp, w_args, repr, jd_name, call_depth, w_greenkey): args = [space.interp_w(WrappedBox, w_arg).llbox for w_arg in space.listview(w_args)] num = rop.DEBUG_MERGE_POINT return DebugMergePoint(space, jit_hooks.resop_new(num, args, jit_hooks.emptyval()), - repr, jd_name, w_greenkey) + repr, jd_name, call_depth, w_greenkey) class WrappedOp(Wrappable): """ A class representing a single ResOperation, wrapped nicely @@ -205,10 +206,11 @@ jit_hooks.resop_setresult(self.op, box.llbox) class DebugMergePoint(WrappedOp): - def __init__(self, space, op, repr_of_resop, jd_name, w_greenkey): + def __init__(self, space, op, repr_of_resop, jd_name, call_depth, w_greenkey): WrappedOp.__init__(self, op, -1, repr_of_resop) + self.jd_name = jd_name + self.call_depth = call_depth self.w_greenkey = w_greenkey - self.jd_name = jd_name def get_pycode(self, space): if self.jd_name == pypyjitdriver.name: @@ -243,6 +245,7 @@ greenkey = interp_attrproperty_w("w_greenkey", cls=DebugMergePoint), pycode = GetSetProperty(DebugMergePoint.get_pycode), bytecode_no = GetSetProperty(DebugMergePoint.get_bytecode_no), + call_depth = interp_attrproperty("call_depth", cls=DebugMergePoint), jitdriver_name = GetSetProperty(DebugMergePoint.get_jitdriver_name), ) DebugMergePoint.acceptable_as_base_class = False diff --git a/pypy/module/pypyjit/test/test_jit_hook.py b/pypy/module/pypyjit/test/test_jit_hook.py --- a/pypy/module/pypyjit/test/test_jit_hook.py +++ b/pypy/module/pypyjit/test/test_jit_hook.py @@ -122,7 +122,8 @@ assert isinstance(dmp, pypyjit.DebugMergePoint) assert dmp.pycode is self.f.func_code assert dmp.greenkey == (self.f.func_code, 0, False) - #assert int_add.name == 'int_add' + assert dmp.call_depth == 0 + assert int_add.name == 'int_add' assert int_add.num == self.int_add_num self.on_compile_bridge() assert len(all) == 2 @@ -223,11 +224,13 @@ def f(): pass - op = DebugMergePoint([Box(0)], 'repr', 'pypyjit', (f.func_code, 0, 0)) + op = DebugMergePoint([Box(0)], 'repr', 'pypyjit', 2, (f.func_code, 0, 0)) assert op.bytecode_no == 0 assert op.pycode is f.func_code assert repr(op) == 'repr' assert op.jitdriver_name == 'pypyjit' assert op.num == self.dmp_num - op = DebugMergePoint([Box(0)], 'repr', 'notmain', ('str',)) + assert op.call_depth == 2 + op = DebugMergePoint([Box(0)], 'repr', 'notmain', 5, ('str',)) raises(AttributeError, 'op.pycode') + assert op.call_depth == 5 _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit