METADATA 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460
  1. Metadata-Version: 2.1
  2. Name: more-itertools
  3. Version: 5.0.0
  4. Summary: More routines for operating on iterables, beyond itertools
  5. Home-page: https://github.com/erikrose/more-itertools
  6. Author: Erik Rose
  7. Author-email: erikrose@grinchcentral.com
  8. License: MIT
  9. Keywords: itertools,iterator,iteration,filter,peek,peekable,collate,chunk,chunked
  10. Platform: UNKNOWN
  11. Classifier: Development Status :: 5 - Production/Stable
  12. Classifier: Intended Audience :: Developers
  13. Classifier: Natural Language :: English
  14. Classifier: License :: OSI Approved :: MIT License
  15. Classifier: Programming Language :: Python :: 2
  16. Classifier: Programming Language :: Python :: 2.7
  17. Classifier: Programming Language :: Python :: 3
  18. Classifier: Programming Language :: Python :: 3.4
  19. Classifier: Programming Language :: Python :: 3.5
  20. Classifier: Programming Language :: Python :: 3.6
  21. Classifier: Programming Language :: Python :: 3.7
  22. Classifier: Topic :: Software Development :: Libraries
  23. Requires-Dist: six (<2.0.0,>=1.0.0)
  24. ==============
  25. More Itertools
  26. ==============
  27. .. image:: https://coveralls.io/repos/github/erikrose/more-itertools/badge.svg?branch=master
  28. :target: https://coveralls.io/github/erikrose/more-itertools?branch=master
  29. Python's ``itertools`` library is a gem - you can compose elegant solutions
  30. for a variety of problems with the functions it provides. In ``more-itertools``
  31. we collect additional building blocks, recipes, and routines for working with
  32. Python iterables.
  33. ----
  34. +------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  35. | Grouping | `chunked <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.chunked>`_, |
  36. | | `sliced <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.sliced>`_, |
  37. | | `distribute <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.distribute>`_, |
  38. | | `divide <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.divide>`_, |
  39. | | `split_at <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.split_at>`_, |
  40. | | `split_before <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.split_before>`_, |
  41. | | `split_after <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.split_after>`_, |
  42. | | `bucket <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.bucket>`_, |
  43. | | `grouper <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.grouper>`_, |
  44. | | `partition <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.partition>`_ |
  45. +------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  46. | Lookahead and lookback | `spy <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.spy>`_, |
  47. | | `peekable <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.peekable>`_, |
  48. | | `seekable <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.seekable>`_ |
  49. +------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  50. | Windowing | `windowed <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.windowed>`_, |
  51. | | `stagger <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.stagger>`_, |
  52. | | `pairwise <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.pairwise>`_ |
  53. +------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  54. | Augmenting | `count_cycle <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.count_cycle>`_, |
  55. | | `intersperse <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.intersperse>`_, |
  56. | | `padded <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.padded>`_, |
  57. | | `adjacent <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.adjacent>`_, |
  58. | | `groupby_transform <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.groupby_transform>`_, |
  59. | | `padnone <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.padnone>`_, |
  60. | | `ncycles <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.ncycles>`_ |
  61. +------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  62. | Combining | `collapse <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.collapse>`_, |
  63. | | `sort_together <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.sort_together>`_, |
  64. | | `interleave <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.interleave>`_, |
  65. | | `interleave_longest <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.interleave_longest>`_, |
  66. | | `collate <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.collate>`_, |
  67. | | `zip_offset <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.zip_offset>`_, |
  68. | | `dotproduct <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.dotproduct>`_, |
  69. | | `flatten <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.flatten>`_, |
  70. | | `roundrobin <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.roundrobin>`_, |
  71. | | `prepend <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.prepend>`_ |
  72. +------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  73. | Summarizing | `ilen <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.ilen>`_, |
  74. | | `first <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.first>`_, |
  75. | | `last <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.last>`_, |
  76. | | `one <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.one>`_, |
  77. | | `unique_to_each <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.unique_to_each>`_, |
  78. | | `locate <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.locate>`_, |
  79. | | `rlocate <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.rlocate>`_, |
  80. | | `consecutive_groups <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.consecutive_groups>`_, |
  81. | | `exactly_n <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.exactly_n>`_, |
  82. | | `run_length <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.run_length>`_, |
  83. | | `map_reduce <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.map_reduce>`_, |
  84. | | `all_equal <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.all_equal>`_, |
  85. | | `first_true <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.first_true>`_, |
  86. | | `nth <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.nth>`_, |
  87. | | `quantify <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.quantify>`_ |
  88. +------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  89. | Selecting | `islice_extended <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.islice_extended>`_, |
  90. | | `strip <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.strip>`_, |
  91. | | `lstrip <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.lstrip>`_, |
  92. | | `rstrip <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.rstrip>`_, |
  93. | | `take <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.take>`_, |
  94. | | `tail <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.tail>`_, |
  95. | | `unique_everseen <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertoo ls.unique_everseen>`_, |
  96. | | `unique_justseen <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.unique_justseen>`_ |
  97. +------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  98. | Combinatorics | `distinct_permutations <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.distinct_permutations>`_, |
  99. | | `circular_shifts <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.circular_shifts>`_, |
  100. | | `powerset <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.powerset>`_, |
  101. | | `random_product <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.random_product>`_, |
  102. | | `random_permutation <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.random_permutation>`_, |
  103. | | `random_combination <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.random_combination>`_, |
  104. | | `random_combination_with_replacement <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.random_combination_with_replacement>`_, |
  105. | | `nth_combination <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.nth_combination>`_ |
  106. +------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  107. | Wrapping | `always_iterable <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.always_iterable>`_, |
  108. | | `consumer <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.consumer>`_, |
  109. | | `with_iter <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.with_iter>`_, |
  110. | | `iter_except <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.iter_except>`_ |
  111. +------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  112. | Others | `replace <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.replace>`_, |
  113. | | `numeric_range <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.numeric_range>`_, |
  114. | | `always_reversible <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.always_reversible>`_, |
  115. | | `side_effect <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.side_effect>`_, |
  116. | | `iterate <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.iterate>`_, |
  117. | | `difference <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.difference>`_, |
  118. | | `make_decorator <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.make_decorator>`_, |
  119. | | `SequenceView <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.SequenceView>`_, |
  120. | | `consume <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.consume>`_, |
  121. | | `accumulate <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.accumulate>`_, |
  122. | | `tabulate <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.tabulate>`_, |
  123. | | `repeatfunc <https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.repeatfunc>`_ |
  124. +------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  125. Getting started
  126. ===============
  127. To get started, install the library with `pip <https://pip.pypa.io/en/stable/>`_:
  128. .. code-block:: shell
  129. pip install more-itertools
  130. The recipes from the `itertools docs <https://docs.python.org/3/library/itertools.html#itertools-recipes>`_
  131. are included in the top-level package:
  132. .. code-block:: python
  133. >>> from more_itertools import flatten
  134. >>> iterable = [(0, 1), (2, 3)]
  135. >>> list(flatten(iterable))
  136. [0, 1, 2, 3]
  137. Several new recipes are available as well:
  138. .. code-block:: python
  139. >>> from more_itertools import chunked
  140. >>> iterable = [0, 1, 2, 3, 4, 5, 6, 7, 8]
  141. >>> list(chunked(iterable, 3))
  142. [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
  143. >>> from more_itertools import spy
  144. >>> iterable = (x * x for x in range(1, 6))
  145. >>> head, iterable = spy(iterable, n=3)
  146. >>> list(head)
  147. [1, 4, 9]
  148. >>> list(iterable)
  149. [1, 4, 9, 16, 25]
  150. For the full listing of functions, see the `API documentation <https://more-itertools.readthedocs.io/en/latest/api.html>`_.
  151. Development
  152. ===========
  153. ``more-itertools`` is maintained by `@erikrose <https://github.com/erikrose>`_
  154. and `@bbayles <https://github.com/bbayles>`_, with help from `many others <https://github.com/erikrose/more-itertools/graphs/contributors>`_.
  155. If you have a problem or suggestion, please file a bug or pull request in this
  156. repository. Thanks for contributing!
  157. Version History
  158. ===============
  159. 5.0.0
  160. -----
  161. * New itertools:
  162. * split_into (thanks to rovyko)
  163. * unzip (thanks to bmintz)
  164. * substrings (thanks to pylang)
  165. * Changes to existing itertools:
  166. * ilen was optimized a bit (thanks to MSeifert04, achampion, and bmintz)
  167. * first_true now returns ``None`` by default. This is the reason for the major version bump - see below. (thanks to sk and OJFord)
  168. * Other changes:
  169. * Some code for old Python versions was removed (thanks to hugovk)
  170. * Some documentation mistakes were corrected (thanks to belm0 and hugovk)
  171. * Tests now run properly on 32-bit versions of Python (thanks to Millak)
  172. * Newer versions of CPython and PyPy are now tested against
  173. The major version update is due to the change in the default return value of
  174. first_true. It's now ``None``.
  175. .. code-block:: python
  176. >>> from more_itertools import first_true
  177. >>> iterable = [0, '', False, [], ()] # All these are False
  178. >>> answer = first_true(iterable)
  179. >>> print(answer)
  180. None
  181. 4.3.0
  182. -----
  183. * New itertools:
  184. * last (thanks to tmshn)
  185. * replace (thanks to pylang)
  186. * rlocate (thanks to jferard and pylang)
  187. * Improvements to existing itertools:
  188. * locate can now search for multiple items
  189. * Other changes:
  190. * The docs now include a nice table of tools (thanks MSeifert04)
  191. 4.2.0
  192. -----
  193. * New itertools:
  194. * map_reduce (thanks to pylang)
  195. * prepend (from the `Python 3.7 docs <https://docs.python.org/3.7/library/itertools.html#itertools-recipes>`_)
  196. * Improvements to existing itertools:
  197. * bucket now complies with PEP 479 (thanks to irmen)
  198. * Other changes:
  199. * Python 3.7 is now supported (thanks to irmen)
  200. * Python 3.3 is no longer supported
  201. * The test suite no longer requires third-party modules to run
  202. * The API docs now include links to source code
  203. 4.1.0
  204. -----
  205. * New itertools:
  206. * split_at (thanks to michael-celani)
  207. * circular_shifts (thanks to hiqua)
  208. * make_decorator - see the blog post `Yo, I heard you like decorators <https://sites.google.com/site/bbayles/index/decorator_factory>`_
  209. for a tour (thanks to pylang)
  210. * always_reversible (thanks to michael-celani)
  211. * nth_combination (from the `Python 3.7 docs <https://docs.python.org/3.7/library/itertools.html#itertools-recipes>`_)
  212. * Improvements to existing itertools:
  213. * seekable now has an ``elements`` method to return cached items.
  214. * The performance tradeoffs between roundrobin and
  215. interleave_longest are now documented (thanks michael-celani,
  216. pylang, and MSeifert04)
  217. 4.0.1
  218. -----
  219. * No code changes - this release fixes how the docs display on PyPI.
  220. 4.0.0
  221. -----
  222. * New itertools:
  223. * consecutive_groups (Based on the example in the `Python 2.4 docs <https://docs.python.org/release/2.4.4/lib/itertools-example.html>`_)
  224. * seekable (If you're looking for how to "reset" an iterator,
  225. you're in luck!)
  226. * exactly_n (thanks to michael-celani)
  227. * run_length.encode and run_length.decode
  228. * difference
  229. * Improvements to existing itertools:
  230. * The number of items between filler elements in intersperse can
  231. now be specified (thanks to pylang)
  232. * distinct_permutations and peekable got some minor
  233. adjustments (thanks to MSeifert04)
  234. * always_iterable now returns an iterator object. It also now
  235. allows different types to be considered iterable (thanks to jaraco)
  236. * bucket can now limit the keys it stores in memory
  237. * one now allows for custom exceptions (thanks to kalekundert)
  238. * Other changes:
  239. * A few typos were fixed (thanks to EdwardBetts)
  240. * All tests can now be run with ``python setup.py test``
  241. The major version update is due to the change in the return value of always_iterable.
  242. It now always returns iterator objects:
  243. .. code-block:: python
  244. >>> from more_itertools import always_iterable
  245. # Non-iterable objects are wrapped with iter(tuple(obj))
  246. >>> always_iterable(12345)
  247. <tuple_iterator object at 0x7fb24c9488d0>
  248. >>> list(always_iterable(12345))
  249. [12345]
  250. # Iterable objects are wrapped with iter()
  251. >>> always_iterable([1, 2, 3, 4, 5])
  252. <list_iterator object at 0x7fb24c948c50>
  253. 3.2.0
  254. -----
  255. * New itertools:
  256. * lstrip, rstrip, and strip
  257. (thanks to MSeifert04 and pylang)
  258. * islice_extended
  259. * Improvements to existing itertools:
  260. * Some bugs with slicing peekable-wrapped iterables were fixed
  261. 3.1.0
  262. -----
  263. * New itertools:
  264. * numeric_range (Thanks to BebeSparkelSparkel and MSeifert04)
  265. * count_cycle (Thanks to BebeSparkelSparkel)
  266. * locate (Thanks to pylang and MSeifert04)
  267. * Improvements to existing itertools:
  268. * A few itertools are now slightly faster due to some function
  269. optimizations. (Thanks to MSeifert04)
  270. * The docs have been substantially revised with installation notes,
  271. categories for library functions, links, and more. (Thanks to pylang)
  272. 3.0.0
  273. -----
  274. * Removed itertools:
  275. * ``context`` has been removed due to a design flaw - see below for
  276. replacement options. (thanks to NeilGirdhar)
  277. * Improvements to existing itertools:
  278. * ``side_effect`` now supports ``before`` and ``after`` keyword
  279. arguments. (Thanks to yardsale8)
  280. * PyPy and PyPy3 are now supported.
  281. The major version change is due to the removal of the ``context`` function.
  282. Replace it with standard ``with`` statement context management:
  283. .. code-block:: python
  284. # Don't use context() anymore
  285. file_obj = StringIO()
  286. consume(print(x, file=f) for f in context(file_obj) for x in u'123')
  287. # Use a with statement instead
  288. file_obj = StringIO()
  289. with file_obj as f:
  290. consume(print(x, file=f) for x in u'123')
  291. 2.6.0
  292. -----
  293. * New itertools:
  294. * ``adjacent`` and ``groupby_transform`` (Thanks to diazona)
  295. * ``always_iterable`` (Thanks to jaraco)
  296. * (Removed in 3.0.0) ``context`` (Thanks to yardsale8)
  297. * ``divide`` (Thanks to mozbhearsum)
  298. * Improvements to existing itertools:
  299. * ``ilen`` is now slightly faster. (Thanks to wbolster)
  300. * ``peekable`` can now prepend items to an iterable. (Thanks to diazona)
  301. 2.5.0
  302. -----
  303. * New itertools:
  304. * ``distribute`` (Thanks to mozbhearsum and coady)
  305. * ``sort_together`` (Thanks to clintval)
  306. * ``stagger`` and ``zip_offset`` (Thanks to joshbode)
  307. * ``padded``
  308. * Improvements to existing itertools:
  309. * ``peekable`` now handles negative indexes and slices with negative
  310. components properly.
  311. * ``intersperse`` is now slightly faster. (Thanks to pylang)
  312. * ``windowed`` now accepts a ``step`` keyword argument.
  313. (Thanks to pylang)
  314. * Python 3.6 is now supported.
  315. 2.4.1
  316. -----
  317. * Move docs 100% to readthedocs.io.
  318. 2.4
  319. -----
  320. * New itertools:
  321. * ``accumulate``, ``all_equal``, ``first_true``, ``partition``, and
  322. ``tail`` from the itertools documentation.
  323. * ``bucket`` (Thanks to Rosuav and cvrebert)
  324. * ``collapse`` (Thanks to abarnet)
  325. * ``interleave`` and ``interleave_longest`` (Thanks to abarnet)
  326. * ``side_effect`` (Thanks to nvie)
  327. * ``sliced`` (Thanks to j4mie and coady)
  328. * ``split_before`` and ``split_after`` (Thanks to astronouth7303)
  329. * ``spy`` (Thanks to themiurgo and mathieulongtin)
  330. * Improvements to existing itertools:
  331. * ``chunked`` is now simpler and more friendly to garbage collection.
  332. (Contributed by coady, with thanks to piskvorky)
  333. * ``collate`` now delegates to ``heapq.merge`` when possible.
  334. (Thanks to kmike and julianpistorius)
  335. * ``peekable``-wrapped iterables are now indexable and sliceable.
  336. Iterating through ``peekable``-wrapped iterables is also faster.
  337. * ``one`` and ``unique_to_each`` have been simplified.
  338. (Thanks to coady)
  339. 2.3
  340. -----
  341. * Added ``one`` from ``jaraco.util.itertools``. (Thanks, jaraco!)
  342. * Added ``distinct_permutations`` and ``unique_to_each``. (Contributed by
  343. bbayles)
  344. * Added ``windowed``. (Contributed by bbayles, with thanks to buchanae,
  345. jaraco, and abarnert)
  346. * Simplified the implementation of ``chunked``. (Thanks, nvie!)
  347. * Python 3.5 is now supported. Python 2.6 is no longer supported.
  348. * Python 3 is now supported directly; there is no 2to3 step.
  349. 2.2
  350. -----
  351. * Added ``iterate`` and ``with_iter``. (Thanks, abarnert!)
  352. 2.1
  353. -----
  354. * Added (tested!) implementations of the recipes from the itertools
  355. documentation. (Thanks, Chris Lonnen!)
  356. * Added ``ilen``. (Thanks for the inspiration, Matt Basta!)
  357. 2.0
  358. -----
  359. * ``chunked`` now returns lists rather than tuples. After all, they're
  360. homogeneous. This slightly backward-incompatible change is the reason for
  361. the major version bump.
  362. * Added ``@consumer``.
  363. * Improved test machinery.
  364. 1.1
  365. -----
  366. * Added ``first`` function.
  367. * Added Python 3 support.
  368. * Added a default arg to ``peekable.peek()``.
  369. * Noted how to easily test whether a peekable iterator is exhausted.
  370. * Rewrote documentation.
  371. 1.0
  372. -----
  373. * Initial release, with ``collate``, ``peekable``, and ``chunked``. Could
  374. really use better docs.