Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: missing-ndarray-attributes
Changeset: r58577:2c7822df923e
Date: 2012-10-29 12:03 +0100
http://bitbucket.org/pypy/pypy/changeset/2c7822df923e/

Log:    implement non-native floats

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
@@ -391,9 +391,16 @@
     def descr_get_base(self, space):
         return self.implementation.base()
 
-    def descr_byteswap(self, space, w_inplace=False):
-        raise OperationError(space.w_NotImplementedError, space.wrap(
-            "byteswap not implemented yet"))
+    @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
+        else:
+            res = W_NDimArray.from_shape(self.get_shape(), self.get_dtype())
+            loop.byteswap(self.implementation, res.implementation)
+            return res
 
     def descr_choose(self, space, w_choices, w_out=None, w_mode='raise'):
         raise OperationError(space.w_NotImplementedError, space.wrap(
diff --git a/pypy/module/micronumpy/test/test_dtypes.py 
b/pypy/module/micronumpy/test/test_dtypes.py
--- a/pypy/module/micronumpy/test/test_dtypes.py
+++ b/pypy/module/micronumpy/test/test_dtypes.py
@@ -684,9 +684,10 @@
             else:
                 assert stor2[1] == '\x01'
                 assert stor2[0] == '\x00'
-        cls.w_check_non_native = cls.space.wrap(interp2app(check_non_native))
         if option.runappdirect:
-            py.test.skip("not a direct test")
+            cls.w_check_non_native = lambda *args : None
+        else:
+            cls.w_check_non_native = 
cls.space.wrap(interp2app(check_non_native))
 
     def test_non_native(self):
         from _numpypy import array
@@ -694,6 +695,12 @@
         assert a[0] == 1
         assert (a + a)[1] == 4
         self.check_non_native(a, array([1, 2, 3], 'i2'))
+        a = array([1, 2, 3], dtype=self.non_native_prefix + 'f8')
+        assert a[0] == 1
+        assert (a + a)[1] == 4
+        a = array([1, 2, 3], dtype=self.non_native_prefix + 'f4')
+        assert a[0] == 1
+        assert (a + a)[1] == 4
 
 class AppTestPyPyOnly(BaseNumpyAppTest):
     def setup_class(cls):
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
@@ -1591,6 +1591,10 @@
         b = a[::2]
         assert b.base is a
 
+    def test_byteswap(self):
+        from _numpypy import array
+        xxx
+
 class AppTestMultiDim(BaseNumpyAppTest):
     def test_init(self):
         import _numpypy
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
@@ -910,16 +910,14 @@
 
     def _read(self, storage, i, offset):
         res = raw_storage_getitem(self.T, storage, i + offset)
-        #return byteswap(res) XXX
-        return res
+        return rffi.cast(lltype.Float, byteswap(res))
 
     def _write(self, storage, i, offset, value):
-        #value = byteswap(value) XXX
-        raw_storage_setitem(storage, i + offset, value)
+        swapped_value = byteswap(rffi.cast(self.T, value))
+        raw_storage_setitem(storage, i + offset, swapped_value)
 
     def pack_str(self, box):
-        # XXX byteswap
-        return struct.pack(self.format_code, self.unbox(box))
+        return struct.pack(self.format_code, byteswap(self.unbox(box)))
 
 
 class Float32(BaseType, Float):
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to