Author: mattip Branch: matrixmath-dot Changeset: r50186:55f149559e25 Date: 2011-12-04 22:06 +0200 http://bitbucket.org/pypy/pypy/changeset/55f149559e25/
Log: bad merge 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 @@ -3,13 +3,16 @@ It should not be imported by the module itself """ +import re + from pypy.interpreter.baseobjspace import InternalSpaceCache, W_Root -from pypy.module.micronumpy.interp_dtype import W_Float64Dtype, W_BoolDtype +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, NDimArray) + scalar_w, W_NDimArray, array) from pypy.module.micronumpy import interp_ufuncs -from pypy.rlib.objectmodel import specialize -import re +from pypy.rlib.objectmodel import specialize, instantiate + class BogusBytecode(Exception): pass @@ -49,15 +52,12 @@ def __init__(self): """NOT_RPYTHON""" self.fromcache = InternalSpaceCache(self).getorbuild - self.w_float64dtype = W_Float64Dtype(self) def issequence_w(self, w_obj): - return isinstance(w_obj, ListObject) or isinstance(w_obj, NDimArray) + return isinstance(w_obj, ListObject) or isinstance(w_obj, W_NDimArray) def isinstance_w(self, w_obj, w_tp): - if w_obj.tp == w_tp: - return True - return False + return w_obj.tp == w_tp def decode_index4(self, w_idx, size): if isinstance(w_idx, IntObject): @@ -98,8 +98,10 @@ fixedview = listview 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_GenericBox) + return self.float(w_obj.descr_float(self)) def float_w(self, w_obj): assert isinstance(w_obj, FloatObject) @@ -113,7 +115,10 @@ raise NotImplementedError def int(self, w_obj): - return w_obj + if isinstance(w_obj, IntObject): + return w_obj + assert isinstance(w_obj, interp_boxes.W_GenericBox) + return self.int(w_obj.descr_int(self)) def is_true(self, w_obj): assert isinstance(w_obj, BoolObject) @@ -136,6 +141,9 @@ assert isinstance(what, tp) return what + def allocate_instance(self, klass, w_subtype): + return instantiate(klass) + def len_w(self, w_obj): if isinstance(w_obj, ListObject): return len(w_obj.items) @@ -248,7 +256,7 @@ w_rhs = self.rhs.execute(interp) if not isinstance(w_lhs, BaseArray): # scalar - dtype = interp.space.fromcache(W_Float64Dtype) + dtype = get_dtype_cache(interp.space).w_float64dtype w_lhs = scalar_w(interp.space, dtype, w_lhs) assert isinstance(w_lhs, BaseArray) if self.name == '+': @@ -265,8 +273,9 @@ w_res = w_lhs.descr_getitem(interp.space, w_rhs) else: raise NotImplementedError - if not isinstance(w_res, BaseArray): - dtype = interp.space.fromcache(W_Float64Dtype) + if (not isinstance(w_res, BaseArray) and + not isinstance(w_res, interp_boxes.W_GenericBox)): + dtype = get_dtype_cache(interp.space).w_float64dtype w_res = scalar_w(interp.space, dtype, w_res) return w_res @@ -284,7 +293,7 @@ return space.wrap(self.v) def execute(self, interp): - return FloatObject(self.v) + return interp.space.wrap(self.v) class RangeConstant(Node): def __init__(self, v): @@ -292,10 +301,10 @@ 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) - return descr_new_array(interp.space, None, w_list, w_dtype=dtype, - w_order=None) + [interp.space.wrap(float(i)) for i in range(self.v)] + ) + dtype = get_dtype_cache(interp.space).w_float64dtype + return array(interp.space, w_list, w_dtype=dtype, w_order=None) def __repr__(self): return 'Range(%s)' % self.v @@ -316,9 +325,8 @@ def execute(self, interp): w_list = self.wrap(interp.space) - dtype = interp.space.fromcache(W_Float64Dtype) - return descr_new_array(interp.space, None, w_list, w_dtype=dtype, - w_order=None) + dtype = get_dtype_cache(interp.space).w_float64dtype + return array(interp.space, w_list, w_dtype=dtype, w_order=None) def __repr__(self): return "[" + ", ".join([repr(item) for item in self.items]) + "]" @@ -398,9 +406,11 @@ if isinstance(w_res, BaseArray): return w_res if isinstance(w_res, FloatObject): - dtype = interp.space.fromcache(W_Float64Dtype) + dtype = get_dtype_cache(interp.space).w_float64dtype elif isinstance(w_res, BoolObject): - dtype = interp.space.fromcache(W_BoolDtype) + dtype = get_dtype_cache(interp.space).w_booldtype + elif isinstance(w_res, interp_boxes.W_GenericBox): + dtype = w_res.get_dtype(interp.space) else: dtype = None return scalar_w(interp.space, dtype, w_res) 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 @@ -1,6 +1,8 @@ import py -from pypy.module.micronumpy.compile import * +from pypy.module.micronumpy.compile import (numpy_compile, Assignment, + ArrayConstant, FloatConstant, Operator, Variable, RangeConstant, Execute, + FunctionCall, FakeSpace) class TestCompiler(object): def compile(self, code): @@ -106,7 +108,7 @@ c -> 3 """ interp = self.run(code) - assert interp.results[-1].value.val == 9 + assert interp.results[-1].value == 9 def test_array_getitem(self): code = """ @@ -115,7 +117,7 @@ a + b -> 3 """ interp = self.run(code) - assert interp.results[0].value.val == 3 + 6 + assert interp.results[0].value == 3 + 6 def test_range_getitem(self): code = """ @@ -123,7 +125,7 @@ r -> 3 """ interp = self.run(code) - assert interp.results[0].value.val == 6 + assert interp.results[0].value == 6 def test_sum(self): code = """ @@ -132,7 +134,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 = """ @@ -141,7 +143,7 @@ a -> 3 """ interp = self.run(code) - assert interp.results[0].value.val == 15 + assert interp.results[0].value == 15 def test_min(self): interp = self.run(""" @@ -150,7 +152,7 @@ b = a + a min(b) """) - assert interp.results[0].value.val == -24 + assert interp.results[0].value.value == -24 def test_max(self): interp = self.run(""" @@ -159,7 +161,7 @@ b = a + a max(b) """) - assert interp.results[0].value.val == 256 + assert interp.results[0].value.value == 256 def test_slice(self): interp = self.run(""" @@ -167,7 +169,7 @@ b = a -> : b -> 3 """) - assert interp.results[0].value.val == 4 + assert interp.results[0].value == 4 def test_slice_step(self): interp = self.run(""" @@ -175,7 +177,7 @@ b = a -> ::2 b -> 3 """) - assert interp.results[0].value.val == 6 + assert interp.results[0].value == 6 def test_setslice(self): interp = self.run(""" @@ -185,7 +187,7 @@ a[::3] = b a -> 3 """) - assert interp.results[0].value.val == 5 + assert interp.results[0].value == 5 def test_slice2(self): @@ -196,14 +198,14 @@ b = s1 + s2 b -> 3 """) - assert interp.results[0].value.val == 15 + assert interp.results[0].value == 15 def test_multidim_getitem(self): interp = self.run(""" a = [[1,2]] a -> 0 -> 1 """) - assert interp.results[0].value.val == 2 + assert interp.results[0].value == 2 def test_multidim_getitem_2(self): interp = self.run(""" @@ -211,7 +213,7 @@ b = a + a b -> 1 -> 1 """) - assert interp.results[0].value.val == 8 + assert interp.results[0].value == 8 def test_set_slice(self): interp = self.run(""" @@ -220,7 +222,7 @@ b[:] = a + a b -> 3 """) - assert interp.results[0].value.val == 6 + assert interp.results[0].value == 6 def test_set_slice2(self): interp = self.run(""" @@ -231,7 +233,7 @@ a[0:30:3] = c a -> 3 """) - assert interp.results[0].value.val == 11 + assert interp.results[0].value == 11 def test_dot(self): interp = self.run(""" a = [[1, 2], [3, 4]] @@ -239,4 +241,4 @@ c = dot(a, b) c -> 0 -> 0 """) - assert interp.results[0].value.val == 19 + assert interp.results[0].value == 19 _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit