Author: Maciej Fijalkowski <[email protected]>
Branch: missing-ndarray-attributes
Changeset: r58578:864533f972b6
Date: 2012-10-29 12:13 +0100
http://bitbucket.org/pypy/pypy/changeset/864533f972b6/
Log: implement byteswap
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
@@ -35,6 +35,9 @@
def convert_to(self, dtype):
return dtype.box(self.value)
+ def __repr__(self):
+ return '%s(%s)' % (self.__class__.__name__, self.value)
+
class ComplexBox(object):
_mixin_ = True
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
@@ -393,7 +393,6 @@
@unwrap_spec(inplace=bool)
def descr_byteswap(self, space, inplace=False):
- raise OperationError(space.w_NotImplementedError, space.wrap("not
impl"))
if inplace:
loop.byteswap(self.implementation, self.implementation)
return self
@@ -796,6 +795,7 @@
argsort = interp2app(W_NDimArray.descr_argsort),
astype = interp2app(W_NDimArray.descr_astype),
base = GetSetProperty(W_NDimArray.descr_get_base),
+ byteswap = interp2app(W_NDimArray.descr_byteswap),
__array_interface__ = GetSetProperty(W_NDimArray.descr_array_iface),
)
diff --git a/pypy/module/micronumpy/loop.py b/pypy/module/micronumpy/loop.py
--- a/pypy/module/micronumpy/loop.py
+++ b/pypy/module/micronumpy/loop.py
@@ -464,8 +464,8 @@
reds = ['from_iter', 'to_iter'])
def copy_from_to(from_, to, dtype):
- from_iter = from_.create_iter(from_.get_shape())
- to_iter = to.create_iter(to.get_shape())
+ from_iter = from_.create_iter()
+ to_iter = to.create_iter()
while not from_iter.done():
copy_from_to_driver.jit_merge_point(dtype=dtype, from_iter=from_iter,
to_iter=to_iter)
@@ -473,3 +473,16 @@
to_iter.next()
from_iter.next()
+byteswap_driver = jit.JitDriver(greens = ['dtype'],
+ reds = ['from_iter', 'to_iter'])
+
+def byteswap(from_, to):
+ dtype = from_.dtype
+ from_iter = from_.create_iter()
+ to_iter = to.create_iter()
+ while not from_iter.done():
+ byteswap_driver.jit_merge_point(dtype=dtype, from_iter=from_iter,
+ to_iter=to_iter)
+ to_iter.setitem(dtype.itemtype.byteswap(from_iter.getitem()))
+ to_iter.next()
+ from_iter.next()
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
@@ -1593,7 +1593,11 @@
def test_byteswap(self):
from _numpypy import array
- xxx
+ a = array([1, 256 + 2, 3], dtype='i2')
+ assert (a.byteswap() == [0x0100, 0x0201, 0x0300]).all()
+ assert (a == [1, 256 + 2, 3]).all()
+ assert (a.byteswap(True) == [0x0100, 0x0201, 0x0300]).all()
+ assert (a == [0x0100, 0x0201, 0x0300]).all()
class AppTestMultiDim(BaseNumpyAppTest):
def test_init(self):
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
@@ -204,6 +204,10 @@
def neg(self, v):
return -v
+ def byteswap(self, w_v):
+ # no for_computation here
+ return self.box(byteswap(self.unbox(w_v)))
+
@simple_unary_op
def conj(self, v):
return v
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit