Author: Maciej Fijalkowski <[email protected]>
Branch: numpy-refactor
Changeset: r57192:6568eea7f237
Date: 2012-09-06 21:54 +0200
http://bitbucket.org/pypy/pypy/changeset/6568eea7f237/
Log: finish flat iterator
diff --git a/pypy/module/micronumpy/interp_flatiter.py
b/pypy/module/micronumpy/interp_flatiter.py
--- a/pypy/module/micronumpy/interp_flatiter.py
+++ b/pypy/module/micronumpy/interp_flatiter.py
@@ -2,13 +2,29 @@
from pypy.module.micronumpy.base import W_NDimArray, convert_to_array
from pypy.module.micronumpy import loop
from pypy.module.micronumpy.strides import to_coords
-from pypy.interpreter.baseobjspace import Wrappable
+from pypy.module.micronumpy.arrayimpl.base import BaseArrayImplementation
from pypy.interpreter.error import OperationError
-from pypy.interpreter.typedef import TypeDef, interp2app, GetSetProperty
-class W_FlatIterator(Wrappable):
+class FakeArrayImplementation(BaseArrayImplementation):
+ """ The sole purpose of this class is to W_FlatIterator can behave
+ like a real array for descr_eq and friends
+ """
+ def __init__(self, base):
+ self.base = base
+ self.dtype = base.get_dtype()
+ self.shape = [base.get_size()]
+
+ def get_shape(self):
+ return self.shape
+
+ def create_iter(self, shape=None):
+ return self.base.create_iter()
+
+class W_FlatIterator(W_NDimArray):
def __init__(self, arr):
self.base = arr
+ # this is needed to support W_NDimArray interface
+ self.implementation = FakeArrayImplementation(self.base)
self.reset()
def reset(self):
@@ -67,22 +83,4 @@
def descr_base(self, space):
return space.wrap(self.base)
-W_FlatIterator.typedef = TypeDef(
- 'flatiter',
- __iter__ = interp2app(W_FlatIterator.descr_iter),
- __getitem__ = interp2app(W_FlatIterator.descr_getitem),
- __setitem__ = interp2app(W_FlatIterator.descr_setitem),
- __len__ = interp2app(W_FlatIterator.descr_len),
-
-# __eq__ = interp2app(W_FlatIterator.descr_eq),
-# __ne__ = interp2app(W_FlatIterator.descr_ne),
-# __lt__ = interp2app(W_FlatIterator.descr_lt),
-# __le__ = interp2app(W_FlatIterator.descr_le),
-# __gt__ = interp2app(W_FlatIterator.descr_gt),
-# __ge__ = interp2app(W_FlatIterator.descr_ge),
-
- next = interp2app(W_FlatIterator.descr_next),
- base = GetSetProperty(W_FlatIterator.descr_base),
- index = GetSetProperty(W_FlatIterator.descr_index),
- coords = GetSetProperty(W_FlatIterator.descr_coords),
-)
+# typedef is in interp_numarray, so we see the additional arguments
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
@@ -544,3 +544,22 @@
arr.fill(one)
return space.wrap(arr)
+W_FlatIterator.typedef = TypeDef(
+ 'flatiter',
+ __iter__ = interp2app(W_FlatIterator.descr_iter),
+ __getitem__ = interp2app(W_FlatIterator.descr_getitem),
+ __setitem__ = interp2app(W_FlatIterator.descr_setitem),
+ __len__ = interp2app(W_FlatIterator.descr_len),
+
+ __eq__ = interp2app(W_FlatIterator.descr_eq),
+ __ne__ = interp2app(W_FlatIterator.descr_ne),
+ __lt__ = interp2app(W_FlatIterator.descr_lt),
+ __le__ = interp2app(W_FlatIterator.descr_le),
+ __gt__ = interp2app(W_FlatIterator.descr_gt),
+ __ge__ = interp2app(W_FlatIterator.descr_ge),
+
+ next = interp2app(W_FlatIterator.descr_next),
+ base = GetSetProperty(W_FlatIterator.descr_base),
+ index = GetSetProperty(W_FlatIterator.descr_index),
+ coords = GetSetProperty(W_FlatIterator.descr_coords),
+)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit