Author: Matti Picus <[email protected]>
Branch: numpypy-nditer
Changeset: r70697:2f4b0bd4e54b
Date: 2014-04-17 10:29 +0300
http://bitbucket.org/pypy/pypy/changeset/2f4b0bd4e54b/
Log: add comments for long confusing code
diff --git a/pypy/module/micronumpy/nditer.py b/pypy/module/micronumpy/nditer.py
--- a/pypy/module/micronumpy/nditer.py
+++ b/pypy/module/micronumpy/nditer.py
@@ -282,17 +282,22 @@
self.done = False
self.first_next = True
self.op_axes = []
+ # convert w_seq operands to a list of W_NDimArray
if space.isinstance_w(w_seq, space.w_tuple) or \
space.isinstance_w(w_seq, space.w_list):
w_seq_as_list = space.listview(w_seq)
self.seq = [convert_to_array_or_none(space, w_elem) for w_elem in
w_seq_as_list]
else:
self.seq =[convert_to_array(space, w_seq)]
+
parse_func_flags(space, self, w_flags)
self.op_flags = parse_op_arg(space, 'op_flags', w_op_flags,
len(self.seq), parse_op_flag)
+ # handle w_op_axes
if not space.is_none(w_op_axes):
self.set_op_axes(space, w_op_axes)
+
+ # handle w_op_dtypes part 1: creating self.dtypes list from input
if not space.is_none(w_op_dtypes):
w_seq_as_list = space.listview(w_op_dtypes)
self.dtypes = [decode_w_dtype(space, w_elem) for w_elem in
w_seq_as_list]
@@ -301,6 +306,8 @@
"op_dtypes must be a tuple/list matching the number of
ops"))
else:
self.dtypes = []
+
+ # handle None or writable operands, calculate my shape
self.iters=[]
outargs = [i for i in range(len(self.seq)) \
if self.seq[i] is None or self.op_flags[i].rw == 'w']
@@ -334,6 +341,7 @@
if not self.op_flags[i].broadcast:
# Raises if ooutput cannot be broadcast
shape_agreement(space, iter_shape, self.seq[i], False)
+
if self.tracked_index != "":
if self.order == "K":
self.order = self.seq[0].implementation.order
@@ -342,8 +350,9 @@
else:
backward = self.order != self.tracked_index
self.index_iter = IndexIterator(iter_shape, backward=backward)
+
+ # handle w_op_dtypes part 2: copy where needed if possible
if len(self.dtypes) > 0:
- # Make sure dtypes make sense
for i in range(len(self.seq)):
selfd = self.dtypes[i]
seq_d = self.seq[i].get_dtype()
@@ -359,6 +368,8 @@
else:
#copy them from seq
self.dtypes = [s.get_dtype() for s in self.seq]
+
+ # create an iterator for each operand
if self.external_loop:
for i in range(len(self.seq)):
self.iters.append(ExternalLoopIterator(get_external_loop_iter(space, self.order,
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit