[pypy-svn] pypy default: Fix product() when given non-tuple but iterable arguments.
arigo
commits-noreply at bitbucket.org
Tue Jan 25 17:47:59 CET 2011
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r41309:16ec3f5e8424
Date: 2011-01-24 16:04 +0100
http://bitbucket.org/pypy/pypy/changeset/16ec3f5e8424/
Log: Fix product() when given non-tuple but iterable arguments.
diff --git a/pypy/module/itertools/test/test_itertools.py b/pypy/module/itertools/test/test_itertools.py
--- a/pypy/module/itertools/test/test_itertools.py
+++ b/pypy/module/itertools/test/test_itertools.py
@@ -729,6 +729,9 @@
prodlist = product(l, m)
assert list(prodlist) == [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')]
+ prodlist = product(iter(l), iter(m))
+ assert list(prodlist) == [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')]
+
def test_product_repeat(self):
from itertools import product
l = [1, 2]
diff --git a/pypy/module/itertools/interp_itertools.py b/pypy/module/itertools/interp_itertools.py
--- a/pypy/module/itertools/interp_itertools.py
+++ b/pypy/module/itertools/interp_itertools.py
@@ -1036,11 +1036,11 @@
def __init__(self, space, args_w, w_repeat):
self.space = space
- self.gears_w = args_w * space.int_w(w_repeat)
- self.num_gears = len(self.gears_w)
+ args = [space.fixedview(w_arg) for w_arg in args_w]
+ self.gears = args * space.int_w(w_repeat)
+ self.num_gears = len(self.gears)
# initialization of indicies to loop over
- self.indicies = [(0, space.int_w(space.len(w_gear)))
- for w_gear in self.gears_w]
+ self.indicies = [(0, len(gear)) for gear in self.gears]
self.cont = True
for _, lim in self.indicies:
if lim <= 0:
@@ -1082,8 +1082,7 @@
l = [None] * self.num_gears
for x in range(0, self.num_gears):
index, limit = self.indicies[x]
- l[x] = self.space.getitem(self.gears_w[x],
- self.space.wrap(index))
+ l[x] = self.gears[x][index]
self.roll_gears()
return self.space.newtuple(l)
More information about the Pypy-commit
mailing list