Author: Alex Gaynor <alex.gay...@gmail.com> Branch: numpy-dtype-refactor Changeset: r48984:b055942a4830 Date: 2011-11-08 23:26 -0500 http://bitbucket.org/pypy/pypy/changeset/b055942a4830/
Log: more updates to code and tests diff --git a/pypy/module/micronumpy/compile.py b/pypy/module/micronumpy/compile.py --- a/pypy/module/micronumpy/compile.py +++ b/pypy/module/micronumpy/compile.py @@ -4,7 +4,7 @@ """ from pypy.interpreter.baseobjspace import InternalSpaceCache, W_Root -from pypy.module.micronumpy.interp_boxes import W_GenericBox +from pypy.module.micronumpy import interp_boxes from pypy.module.micronumpy.interp_dtype import get_dtype_cache from pypy.module.micronumpy.interp_numarray import (Scalar, BaseArray, descr_new_array, scalar_w, SingleDimArray) @@ -70,8 +70,10 @@ return obj.items def float(self, w_obj): - assert isinstance(w_obj, FloatObject) - return w_obj + if isinstance(w_obj, FloatObject): + return w_obj + assert isinstance(w_obj, interp_boxes.W_FloatingBox) + return FloatObject(w_obj.value) def float_w(self, w_obj): assert isinstance(w_obj, FloatObject) @@ -172,8 +174,8 @@ def execute(self, interp): arr = interp.variables[self.name] - w_index = self.index.execute(interp).eval(0).wrap(interp.space) - w_val = self.expr.execute(interp).eval(0).wrap(interp.space) + w_index = self.index.execute(interp).eval(0) + w_val = self.expr.execute(interp).eval(0) arr.descr_setitem(interp.space, w_index, w_val) def __repr__(self): @@ -210,15 +212,15 @@ w_res = w_lhs.descr_sub(interp.space, w_rhs) elif self.name == '->': if isinstance(w_rhs, Scalar): - index = int(interp.space.float_w( - w_rhs.value)) - dtype = interp.space.fromcache(W_Float64Dtype) + index = int(interp.space.float_w(interp.space.float(w_rhs.value))) + dtype = get_dtype_cache(interp.space).w_float64dtype return Scalar(dtype, w_lhs.get_concrete().eval(index)) else: raise NotImplementedError else: raise NotImplementedError - if not isinstance(w_res, BaseArray) and not isinstance(w_res, W_GenericBox): + if (not isinstance(w_res, BaseArray) and + not isinstance(w_res, interp_boxes.W_GenericBox)): dtype = interp.space.fromcache(W_Float64Dtype) w_res = scalar_w(interp.space, dtype, w_res) return w_res @@ -246,8 +248,9 @@ def execute(self, interp): w_list = interp.space.newlist( - [interp.space.wrap(float(i)) for i in range(self.v)]) - dtype = interp.space.fromcache(W_Float64Dtype) + [interp.space.wrap(float(i)) for i in range(self.v)] + ) + dtype = get_dtype_cache(interp.space).w_float64dtype return descr_new_array(interp.space, None, w_list, w_dtype=dtype) def __repr__(self): @@ -331,6 +334,8 @@ dtype = interp.space.fromcache(W_Float64Dtype) elif isinstance(w_res, BoolObject): dtype = interp.space.fromcache(W_BoolDtype) + elif isinstance(w_res, interp_boxes.W_GenericBox): + dtype = w_res.descr_get_dtype(interp.space) else: dtype = None return scalar_w(interp.space, dtype, w_res) 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 @@ -309,7 +309,7 @@ return scalar_w(space, dtype, w_obj) def scalar_w(space, dtype, w_obj): - return Scalar(dtype, dtype.unwrap(space, w_obj)) + return Scalar(dtype, dtype.coerce(space, w_obj)) class Scalar(BaseArray): """ diff --git a/pypy/module/micronumpy/interp_ufuncs.py b/pypy/module/micronumpy/interp_ufuncs.py --- a/pypy/module/micronumpy/interp_ufuncs.py +++ b/pypy/module/micronumpy/interp_ufuncs.py @@ -74,7 +74,7 @@ new_sig = signature.Signature.find_sig([ self.reduce_signature, obj.signature ]) - return self.reduce(new_sig, start, value, obj, dtype, size).wrap(space) + return self.reduce(new_sig, start, value, obj, dtype, size) def reduce(self, signature, start, value, obj, dtype, size): i = start @@ -235,7 +235,7 @@ if dt.kind == interp_dtype.BOOLLTR or dt.kind == interp_dtype.SIGNEDLTR: return space.fromcache(interp_dtype.W_Int64Dtype) elif dt.kind == interp_dtype.FLOATINGLTR: - return space.fromcache(interp_dtype.W_Float64Dtype) + return interp_dtype.get_dtype_cache(space).w_float64dtype elif dt.kind == interp_dtype.UNSIGNEDLTR: return space.fromcache(interp_dtype.W_UInt64Dtype) else: diff --git a/pypy/module/micronumpy/test/test_compile.py b/pypy/module/micronumpy/test/test_compile.py --- a/pypy/module/micronumpy/test/test_compile.py +++ b/pypy/module/micronumpy/test/test_compile.py @@ -5,7 +5,7 @@ class TestCompiler(object): def compile(self, code): return numpy_compile(code) - + def test_vars(self): code = """ a = 2 @@ -25,7 +25,7 @@ st = interp.code.statements[0] assert st.expr.items == [FloatConstant(1), FloatConstant(2), FloatConstant(3)] - + def test_array_literal2(self): code = "a = [[1],[2],[3]]" interp = self.compile(code) @@ -114,15 +114,15 @@ a + b -> 3 """ interp = self.run(code) - assert interp.results[0].value.val == 3 + 6 - + assert interp.results[0].value.value == 3 + 6 + def test_range_getitem(self): code = """ r = |20| + 3 r -> 3 """ interp = self.run(code) - assert interp.results[0].value.val == 6 + assert interp.results[0].value.value == 6 def test_sum(self): code = """ @@ -131,7 +131,7 @@ r """ interp = self.run(code) - assert interp.results[0].value.val == 15 + assert interp.results[0].value.value == 15 def test_array_write(self): code = """ _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit