[pypy-commit] pypy default: fix fill for complex with non-native byteorder

bdkearns noreply at buildbot.pypy.org
Sun Feb 23 21:06:50 CET 2014


Author: Brian Kearns <bdkearns at gmail.com>
Branch: 
Changeset: r69290:793aeb9704c0
Date: 2014-02-23 15:05 -0500
http://bitbucket.org/pypy/pypy/changeset/793aeb9704c0/

Log:	fix fill for complex with non-native byteorder

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
@@ -2684,7 +2684,7 @@
         assert arange(3)[array(1)] == 1
 
     def test_fill(self):
-        from numpypy import array, empty
+        from numpypy import array, empty, dtype, zeros
         a = array([1, 2, 3])
         a.fill(10)
         assert (a == [10, 10, 10]).all()
@@ -2721,6 +2721,11 @@
             else:
                 assert tuple(i) == (123,) * 5
 
+        a = zeros(3, dtype=dtype(complex).newbyteorder())
+        a.fill(1.5+2.5j)
+        for i in a:
+            assert i == 1.5+2.5j
+
     def test_array_indexing_bool(self):
         from numpypy import arange
         a = arange(10)
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
@@ -1054,13 +1054,6 @@
         op = '+' if imag >= 0 or rfloat.isnan(imag) else ''
         return ''.join(['(', real_str, op, imag_str, ')'])
 
-    def fill(self, storage, width, box, start, stop, offset):
-        real, imag = self.unbox(box)
-        for i in xrange(start, stop, width):
-            raw_storage_setitem(storage, i+offset, real)
-            raw_storage_setitem(storage,
-                    i+offset+rffi.sizeof(self.T), imag)
-
     def runpack_str(self, space, s):
         comp = self.ComponentBoxType._get_dtype(space).itemtype
         l = len(s) // 2
@@ -1149,6 +1142,11 @@
     def store(self, arr, i, offset, box):
         self._write(arr.storage, i, offset, self.unbox(box))
 
+    def fill(self, storage, width, box, start, stop, offset):
+        value = self.unbox(box)
+        for i in xrange(start, stop, width):
+            self._write(storage, i, offset, value)
+
     @complex_binary_op
     def add(self, v1, v2):
         return rcomplex.c_add(v1, v2)


More information about the pypy-commit mailing list