Author: Ronan Lamy <ronan.l...@gmail.com> Branch: longdouble2 Changeset: r62905:bfcadb0b748c Date: 2013-03-31 17:04 +0100 http://bitbucket.org/pypy/pypy/changeset/bfcadb0b748c/
Log: get rid of the NonNativeFoo item types (a few translation failures) diff --git a/pypy/module/micronumpy/interp_boxes.py b/pypy/module/micronumpy/interp_boxes.py --- a/pypy/module/micronumpy/interp_boxes.py +++ b/pypy/module/micronumpy/interp_boxes.py @@ -284,8 +284,8 @@ except KeyError: raise OperationError(space.w_IndexError, space.wrap("Field %s does not exist" % item)) - read_val = dtype.itemtype.read(self.arr, self.ofs, ofs, dtype) - if isinstance (read_val, W_StringBox): + read_val = dtype.itemtype.read(self.arr, self.ofs, ofs, dtype.native, dtype) + if isinstance(read_val, W_StringBox): # StringType returns a str return space.wrap(dtype.itemtype.to_str(read_val)) return read_val @@ -298,7 +298,7 @@ raise OperationError(space.w_IndexError, space.wrap("Field %s does not exist" % item)) dtype.itemtype.store(self.arr, self.ofs, ofs, - dtype.coerce(space, w_value)) + dtype.coerce(space, w_value), dtype.native) def convert_to(self, dtype): # if we reach here, the record fields are guarenteed to match. 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 @@ -70,9 +70,7 @@ """NOT RPYTHON Return the non-native version of this dtype """ - itemtypename = self.itemtype.__class__.__name__ - itemtype = getattr(types, 'NonNative' + itemtypename)() - return W_Dtype(itemtype, self.num, self.kind, name, self.char, + return W_Dtype(self.itemtype, self.num, self.kind, name, self.char, self.BoxType, native=False) @@ -90,16 +88,30 @@ return self.itemtype.coerce(space, self, w_item) def getitem(self, arr, i): - return self.itemtype.read(arr, i, 0) + if self.native: + return self.itemtype.read(arr, i, 0, True) + else: + return self.itemtype.read(arr, i, 0, False) def getitem_bool(self, arr, i): - return self.itemtype.read_bool(arr, i, 0) + if self.native: + return self.itemtype.read_bool(arr, i, 0, True) + else: + return self.itemtype.read_bool(arr, i, 0, False) def setitem(self, arr, i, box): - self.itemtype.store(arr, i, 0, box) + if self.native: + self.itemtype.store(arr, i, 0, box, True) + else: + self.itemtype.store(arr, i, 0, box, False) def fill(self, storage, box, start, stop): - self.itemtype.fill(storage, self.get_size(), box, start, stop, 0) + if self.native: + self.itemtype.fill(storage, self.get_size(), box, start, stop, 0, + True) + else: + self.itemtype.fill(storage, self.get_size(), box, start, stop, 0, + False) def get_name(self): if self.char == 'S': diff --git a/pypy/module/micronumpy/types.py b/pypy/module/micronumpy/types.py --- a/pypy/module/micronumpy/types.py +++ b/pypy/module/micronumpy/types.py @@ -176,22 +176,47 @@ def _read(self, storage, i, offset): return raw_storage_getitem(self.spec.T, storage, i + offset) - def read(self, arr, i, offset, dtype=None): - return self.box(self._read(arr.storage, i, offset)) + def _read_nn(self, storage, i, offset): + res = raw_storage_getitem(self.spec.T, storage, i + offset) + return byteswap(res) - def read_bool(self, arr, i, offset): - return bool(self.for_computation(self._read(arr.storage, i, offset))) + @specialize.arg(4) + def read(self, arr, i, offset, native, dtype=None): + if native: + value = self._read(arr.storage, i, offset) + else: + value = self._read_nn(arr.storage, i, offset) + return self.box(value) + + def read_bool(self, arr, i, offset, native): + if native: + value = self.for_computation(self._read(arr.storage, i, offset)) + else: + value = self.for_computation(self._read_nn(arr.storage, i, offset)) + return bool(value) def _write(self, storage, i, offset, value): raw_storage_setitem(storage, i + offset, value) - def store(self, arr, i, offset, box): - self._write(arr.storage, i, offset, self.unbox(box)) + def _write_nn(self, storage, i, offset, value): + value = byteswap(value) + raw_storage_setitem(storage, i + offset, value) - def fill(self, storage, width, box, start, stop, offset): + @specialize.arg(5) + def store(self, arr, i, offset, box, native): + if native: + self._write(arr.storage, i, offset, self.unbox(box)) + else: + self._write_nn(arr.storage, i, offset, self.unbox(box)) + + @specialize.arg(7) + def fill(self, storage, width, box, start, stop, offset, native): value = self.unbox(box) for i in xrange(start, stop, width): - self._write(storage, i, offset, value) + if native: + self._write(storage, i, offset, value) + else: + self._write_nn(storage, i, offset, value) def runpack_str(self, s): v = runpack(self.format_code, s) @@ -307,13 +332,6 @@ class NonNativePrimitive(Primitive): _mixin_ = True - def _read(self, storage, i, offset): - res = raw_storage_getitem(self.spec.T, storage, i + offset) - return byteswap(res) - - def _write(self, storage, i, offset, value): - value = byteswap(value) - raw_storage_setitem(storage, i + offset, value) class Bool(BaseType, Primitive): _attrs_ = () @@ -973,14 +991,11 @@ else: return v1 + v2 -class NonNativeFloat(NonNativePrimitive, Float): - _mixin_ = True - - def _read(self, storage, i, offset): + def _read_nn(self, storage, i, offset): res = raw_storage_getitem(self.spec.T, storage, i + offset) return rffi.cast(lltype.Float, byteswap(res)) - def _write(self, storage, i, offset, value): + def _write_nn(self, storage, i, offset, value): swapped_value = byteswap(rffi.cast(self.spec.T, value)) raw_storage_setitem(storage, i + offset, swapped_value) @@ -991,12 +1006,6 @@ format_code = "f" Float32_instance = Float32() -class NonNativeFloat32(BaseType, NonNativeFloat): - _attrs_ = () - spec = float32_spec - BoxType = interp_boxes.W_Float32Box - format_code = "f" - class Float64(BaseType, Float): _attrs_ = () spec = float64_spec @@ -1004,11 +1013,6 @@ format_code = "d" Float64_instance = Float64() -class NonNativeFloat64(BaseType, NonNativeFloat): - _attrs_ = () - spec = float64_spec - BoxType = interp_boxes.W_Float64Box - format_code = "d" class ComplexFloating(object): _mixin_ = True @@ -1055,7 +1059,7 @@ real,imag = self.for_computation(self.unbox(box)) return space.newcomplex(real, imag) - def read_bool(self, arr, i, offset): + def read_bool(self, arr, i, offset, native): v = self.for_computation(self._read(arr.storage, i, offset)) return bool(v[0]) or bool(v[1]) @@ -1086,7 +1090,7 @@ real, imag = box.real, box.imag return real, imag - def store(self, arr, i, offset, box): + def store(self, arr, i, offset, box, native): real, imag = self.unbox(box) raw_storage_setitem(arr.storage, i+offset, real) raw_storage_setitem(arr.storage, @@ -1098,7 +1102,7 @@ i + offset + self.FloatType.get_element_size()) return real, imag - def read(self, arr, i, offset, dtype=None): + def read(self, arr, i, offset, native, dtype=None): real, imag = self._read(arr.storage, i, offset) return self.box_complex(real, imag) @@ -1583,12 +1587,12 @@ return interp_boxes.W_StringBox(arr, 0, arr.dtype) @jit.unroll_safe - def store(self, arr, i, offset, box): + def store(self, arr, i, offset, box, native): assert isinstance(box, interp_boxes.W_StringBox) for k in range(min(self.size, box.arr.size-offset)): arr.storage[k + i] = box.arr.storage[k + offset] - def read(self, arr, i, offset, dtype=None): + def read(self, arr, i, offset, native, dtype=None): if dtype is None: dtype = arr.dtype return interp_boxes.W_StringBox(arr, i + offset, dtype) @@ -1654,7 +1658,7 @@ def get_element_size(self): return self.size - def read(self, arr, i, offset, dtype=None): + def read(self, arr, i, offset, native, dtype=None): if dtype is None: dtype = arr.dtype return interp_boxes.W_VoidBox(arr, i + offset, dtype) @@ -1678,11 +1682,11 @@ ofs, itemtype = self.offsets_and_fields[i] w_item = items_w[i] w_box = itemtype.coerce(space, subdtype, w_item) - itemtype.store(arr, 0, ofs, w_box) + itemtype.store(arr, 0, ofs, w_box, subdtype.native) return interp_boxes.W_VoidBox(arr, 0, dtype) @jit.unroll_safe - def store(self, arr, i, ofs, box): + def store(self, arr, i, ofs, box, native): assert isinstance(box, interp_boxes.W_VoidBox) for k in range(self.get_element_size()): arr.storage[k + i] = box.arr.storage[k + box.ofs] @@ -1697,7 +1701,12 @@ first = False else: pieces.append(", ") - pieces.append(tp.str_format(tp.read(box.arr, box.ofs, ofs))) + dtype = box.arr.dtype + if dtype.native: + p_box = tp.read(box.arr, box.ofs, ofs, True) + else: + p_box = tp.read(box.arr, box.ofs, ofs, False) + pieces.append(tp.str_format(p_box)) pieces.append(")") return "".join(pieces) @@ -1732,10 +1741,7 @@ _setup() del _setup -class BaseFloat16(Float): - _mixin_ = True - - _attrs_ = () +class Float16(BaseType, Float): _STORAGE_T = rffi.USHORT spec = float16_spec @@ -1759,7 +1765,6 @@ swapped = byteswap(rffi.cast(self._STORAGE_T, hbits)) return self.box(float_unpack(r_ulonglong(swapped), 2)) -class Float16(BaseType, BaseFloat16): def _read(self, storage, i, offset): hbits = raw_storage_getitem(self._STORAGE_T, storage, i + offset) return float_unpack(r_ulonglong(hbits), 2) @@ -1769,12 +1774,11 @@ raw_storage_setitem(storage, i + offset, rffi.cast(self._STORAGE_T, hbits)) -class NonNativeFloat16(BaseType, BaseFloat16): - def _read(self, storage, i, offset): + def _read_nn(self, storage, i, offset): hbits = raw_storage_getitem(self._STORAGE_T, storage, i + offset) return float_unpack(r_ulonglong(byteswap(hbits)), 2) - def _write(self, storage, i, offset, value): + def _write_nn(self, storage, i, offset, value): hbits = float_pack(value,2) raw_storage_setitem(storage, i + offset, byteswap(rffi.cast(self._STORAGE_T, hbits))) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit