[pypy-commit] pypy numpy-back-to-applevel: compress support
fijal
noreply at buildbot.pypy.org
Thu Jan 26 15:25:18 CET 2012
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: numpy-back-to-applevel
Changeset: r51796:b70485f468be
Date: 2012-01-26 16:24 +0200
http://bitbucket.org/pypy/pypy/changeset/b70485f468be/
Log: compress support
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
@@ -380,7 +380,7 @@
def count_all_true(self, arr):
sig = arr.find_sig()
- frame = sig.create_frame(self)
+ frame = sig.create_frame(arr)
shapelen = len(arr.shape)
s = 0
iter = None
@@ -394,6 +394,9 @@
def getitem_filter(self, space, arr):
concr = arr.get_concrete()
+ if concr.size > self.size:
+ raise OperationError(space.w_IndexError,
+ space.wrap("index out of range for array"))
size = self.count_all_true(concr)
res = W_NDimArray(size, [size], self.find_dtype())
ri = ArrayIterator(size)
@@ -402,7 +405,7 @@
sig = self.find_sig()
frame = sig.create_frame(self)
v = None
- while not frame.done():
+ while not ri.done():
filter_driver.jit_merge_point(concr=concr, argi=argi, ri=ri,
frame=frame, v=v, res=res, sig=sig,
shapelen=shapelen, self=self)
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
@@ -1416,6 +1416,9 @@
from _numpypy import arange
a = arange(10)
assert (a.compress([True, False, True]) == [0, 2]).all()
+ assert (a.compress([1, 0, 13]) == [0, 2]).all()
+ assert (a.compress([1, 0, 13.5]) == [0, 2]).all()
+ raises(IndexError, "a.compress([1] * 100)")
class AppTestSupport(BaseNumpyAppTest):
def setup_class(cls):
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
@@ -105,7 +105,8 @@
))
def read_bool(self, storage, width, i, offset):
- raise NotImplementedError
+ return bool(libffi.array_getitem(clibffi.cast_type_to_ffitype(self.T),
+ width, storage, i, offset))
def store(self, storage, width, i, offset, box):
value = self.unbox(box)
@@ -207,11 +208,6 @@
else:
return self.False
-
- def read_bool(self, storage, width, i, offset):
- return libffi.array_getitem(clibffi.cast_type_to_ffitype(self.T),
- width, storage, i, offset)
-
def coerce_subtype(self, space, w_subtype, w_item):
# Doesn't return subclasses so it can return the constants.
return self._coerce(space, w_item)
More information about the pypy-commit
mailing list