Author: Amaury Forgeot d'Arc <[email protected]>
Branch: py3.3
Changeset: r82013:a5416d54ea4e
Date: 2016-01-31 21:11 +0100
http://bitbucket.org/pypy/pypy/changeset/a5416d54ea4e/
Log: Pickle support for itertools.islice
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
@@ -404,6 +404,15 @@
if num <= 0:
break
+ def descr_reduce(self, space):
+ return space.newtuple([
+ space.type(self),
+ space.newtuple([self.iterable,
+ space.wrap(self.start),
+ space.wrap(self.stop),
+ space.wrap(self.ignore + 1)]),
+ ])
+
def W_ISlice___new__(space, w_subtype, w_iterable, w_startstop, args_w):
r = space.allocate_instance(W_ISlice, w_subtype)
r.__init__(space, w_iterable, w_startstop, args_w)
@@ -414,6 +423,7 @@
__new__ = interp2app(W_ISlice___new__),
__iter__ = interp2app(W_ISlice.iter_w),
__next__ = interp2app(W_ISlice.next_w),
+ __reduce__ = interp2app(W_ISlice.descr_reduce),
__doc__ = """Make an iterator that returns selected elements from the
iterable. If start is non-zero, then elements from the iterable
are skipped until start is reached. Afterward, elements are
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
@@ -988,6 +988,11 @@
assert list(op(testIntermediate)) == [
(0,1,3), (0,2,3), (1,2,3)]
+ def test_islice_pickle(self):
+ import itertools, pickle
+ it = itertools.islice(range(100), 10, 20, 3)
+ assert list(pickle.loads(pickle.dumps(it))) ==
list(range(100)[10:20:3])
+
def test_cycle_pickle(self):
import itertools, pickle
c = itertools.cycle('abc')
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit