[pypy-commit] pypy numpypy-nditer: implement something

mattip noreply at buildbot.pypy.org
Sun May 12 20:03:06 CEST 2013


Author: Matti Picus <matti.picus at gmail.com>
Branch: numpypy-nditer
Changeset: r64016:07782daba0f3
Date: 2013-05-12 21:02 +0300
http://bitbucket.org/pypy/pypy/changeset/07782daba0f3/

Log:	implement something

diff --git a/pypy/module/micronumpy/interp_nditer.py b/pypy/module/micronumpy/interp_nditer.py
--- a/pypy/module/micronumpy/interp_nditer.py
+++ b/pypy/module/micronumpy/interp_nditer.py
@@ -2,11 +2,30 @@
 from pypy.interpreter.typedef import TypeDef, GetSetProperty, make_weakref_descr
 from pypy.interpreter.gateway import interp2app, unwrap_spec, WrappedDefault
 from pypy.interpreter.error import OperationError
+from pypy.module.micronumpy.interp_numarray import array
 #from pypy.module.micronumpy.iter import W_NDIter
 
+
+def handle_sequence_args(space, cls, w_seq, w_op_flags, w_op_types, w_op_axes):
+    '''
+    Make sure that len(args) == 1 or len(w_seq)
+    and set attribs on cls appropriately
+    '''
+    raise OperationError(space.w_NotImplementedError, space.wrap(
+        'not implemented yet'))
+
+
 class W_NDIter(W_Root):
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, space, w_seq, w_flags, w_op_flags, w_op_dtypes, w_casting,
+            w_op_axes, w_itershape, w_buffersize, order):
+        self.order = order
+        if space.isinstance_w(w_seq, space.w_tuple) or space.isinstance_w(w_seq, space.w_list):
+            handle_sequence_args(space, self, w_seq, w_op_flags, w_op_dtypes, w_op_axes)
+        else:
+            self.seq =array(space, w_seq, copy=False)
+            # XXX handle args
+            self.iters = [self.seq.implementation.create_iter()]
         pass
 
     def descr_iter(self, space):
@@ -25,8 +44,18 @@
             'not implemented yet'))
 
     def descr_next(self, space):
-        raise OperationError(space.w_NotImplementedError, space.wrap(
-            'not implemented yet'))
+        for it in self.iters:
+            if not it.done():
+                break
+        else:
+            raise OperationError(space.w_StopIteration, space.w_None)
+        res = []
+        for it in self.iters:
+            res.append(space.wrap(it.getitem()))
+            it.next()
+        if len(res) <2:
+            return res[0]
+        return space.newtuple(res)
 
     def descr_iternext(self, space):
         raise OperationError(space.w_NotImplementedError, space.wrap(
@@ -57,7 +86,7 @@
         raise OperationError(space.w_NotImplementedError, space.wrap(
             'not implemented yet'))
 
-    def descr_get_operands(self, space, w_indx):
+    def descr_get_operands(self, space):
         raise OperationError(space.w_NotImplementedError, space.wrap(
             'not implemented yet'))
 
@@ -128,7 +157,8 @@
              w_itershape=WrappedDefault(None), w_buffersize=WrappedDefault(None))
 def nditer(space, w_seq, w_flags, w_op_flags, w_op_dtypes, w_casting, w_op_axes,
              w_itershape, w_buffersize, order='K'):
-    return W_NDIter()
+    return W_NDIter(space, w_seq, w_flags, w_op_flags, w_op_dtypes, w_casting, w_op_axes,
+            w_itershape, w_buffersize, order)
 
 W_NDIter.typedef = TypeDef(
     'nditer',


More information about the pypy-commit mailing list