[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