[pypy-commit] pypy longdouble2: get rid of the NonNativeFoo item types (a few translation failures)
rlamy
noreply at buildbot.pypy.org
Sun Mar 31 18:04:58 CEST 2013
Author: Ronan Lamy <ronan.lamy at 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)))
More information about the pypy-commit
mailing list