[pypy-commit] pypy missing-ndarray-attributes: fixes and tests, comparison on single float failing

fijal noreply at buildbot.pypy.org
Sun Sep 30 01:18:54 CEST 2012


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: missing-ndarray-attributes
Changeset: r57681:63fa48a761a0
Date: 2012-09-30 01:08 +0200
http://bitbucket.org/pypy/pypy/changeset/63fa48a761a0/

Log:	fixes and tests, comparison on single float failing

diff --git a/pypy/module/micronumpy/arrayimpl/sort.py b/pypy/module/micronumpy/arrayimpl/sort.py
--- a/pypy/module/micronumpy/arrayimpl/sort.py
+++ b/pypy/module/micronumpy/arrayimpl/sort.py
@@ -1,11 +1,13 @@
 
-from pypy.rpython.lltypesystem import rffi
+from pypy.rpython.lltypesystem import rffi, lltype
 from pypy.rlib.listsort import make_timsort_class
 from pypy.rlib.objectmodel import specialize
 from pypy.rlib.rawstorage import raw_storage_getitem, raw_storage_setitem
 from pypy.module.micronumpy.base import W_NDimArray
 from pypy.module.micronumpy import interp_dtype
 
+INT_SIZE = rffi.sizeof(lltype.Signed)
+
 @specialize.memo()
 def make_sort_classes(space, TP):
     class ArgArrayRepresentation(object):
@@ -16,14 +18,14 @@
             self.indexes = indexes
 
         def getitem(self, item):
-            idx = item * self.itemsize
-            return (raw_storage_getitem(TP, self.values, idx),
-                    raw_storage_getitem(TP, self.indexes, idx))
+            return (raw_storage_getitem(TP, self.values, item * self.itemsize),
+                    raw_storage_getitem(lltype.Signed, self.indexes,
+                                        item * INT_SIZE))
 
         def setitem(self, idx, item):
-            idx *= self.itemsize
-            raw_storage_setitem(self.values, idx, rffi.cast(TP, item[0]))
-            raw_storage_setitem(self.indexes, idx, item[1])
+            raw_storage_setitem(self.values, idx * self.itemsize,
+                                rffi.cast(TP, item[0]))
+            raw_storage_setitem(self.indexes, idx * INT_SIZE, item[1])
 
     def arg_getitem(lst, item):
         return lst.getitem(item)
@@ -52,7 +54,7 @@
     indexes = W_NDimArray.from_shape([arr.get_size()], dtype)
     storage = indexes.implementation.get_storage()
     for i in range(arr.get_size()):
-        raw_storage_setitem(storage, i * itemsize, i)
+        raw_storage_setitem(storage, i * INT_SIZE, i)
     Repr, Sort = make_sort_classes(space, arr.dtype.itemtype.T)
     r = Repr(itemsize, arr.get_size(), arr.get_storage(),
              indexes.implementation.get_storage())
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
@@ -224,6 +224,8 @@
                 return dtype
             if w_dtype is dtype.w_box_type:
                 return dtype
+    import pdb
+    pdb.set_trace()
     raise OperationError(space.w_TypeError, space.wrap("data type not understood"))
 
 W_Dtype.typedef = TypeDef("dtype",
@@ -349,6 +351,7 @@
             char="l",
             w_box_type=space.gettypefor(interp_boxes.W_LongBox),
             alternate_constructors=[space.w_int],
+            aliases=['int'],
         )
         self.w_ulongdtype = W_Dtype(
             types.ULong(),
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
@@ -1551,13 +1551,14 @@
 
     def test_argsort(self):
         from _numpypy import array, arange
-        a = array([6, 4, 1, 3, 8, 3])
         assert array(2.0).argsort() == 0
-        res = a.argsort()
-        assert (res == [2, 3, 5, 1, 0, 4]).all()
-        assert (a == [6, 4, 1, 3, 8, 3]).all() # not modified
-        a = arange(100)
-        assert (a.argsort() == a).all()
+        for dtype in ['int', 'float', 'int8', 'int16', 'float32']:
+            a = array([6, 4, 1, 3, 8, 3], dtype=dtype)
+            res = a.argsort()
+            assert (res == [2, 3, 5, 1, 0, 4]).all()
+            assert (a == [6, 4, 1, 3, 8, 3]).all() # not modified
+            a = arange(100)
+            assert (a.argsort() == a).all()
 
 class AppTestMultiDim(BaseNumpyAppTest):
     def test_init(self):


More information about the pypy-commit mailing list