Skip to content

Latest commit

 

History

History
544 lines (421 loc) · 19 KB

versions.rst

File metadata and controls

544 lines (421 loc) · 19 KB

Version History

.. automodule:: more_itertools
   :noindex:

8.10.0

  • Changes to existing functions
  • Other changes:
    • Type stubs now ship with the source release (thanks to saaketp)
    • The Sphinx docs were improved (thanks to MarcinKonowalczyk)

8.9.0

8.8.0

8.7.0

8.6.0

8.5.0

  • New itertools
  • Changes to existing itertools:
  • Other changes
    • Various documentation fixes (thanks to craigrosie, samuelstjean, PiCT0)
    • The tests for :func:`distinct_combinations` were improved (thanks to Minabsapi)
    • Automated tests now run on GitHub Actions. All commits now check:
      • That unit tests pass
      • That the examples in docstrings work
      • That test coverage remains high (using coverage)
      • For linting errors (using flake8)
      • For consistent style (using black)
      • That the type stubs work (using mypy)
      • That the docs build correctly (using sphinx)
      • That packages build correctly (using twine)

8.4.0

8.3.0

8.2.0

  • Bug fixes
    • The .pyi files for typing were updated. (thanks to blueyed and ilai-deutel)
  • Changes to existing itertools:

8.1.0

8.0.2

  • Bug fixes
    • The type stub files are now part of the wheel distribution (thanks to keisheiled)

8.0.1

  • Bug fixes
    • The type stub files now work for functions imported from the root package (thanks to keisheiled)

8.0.0

  • New itertools and other additions
    • This library now ships type hints for use with mypy. (thanks to ilai-deutel for the implementation, and to gabbard and fmagin for assistance)
    • :func:`split_when` (thanks to jferard)
    • :func:`repeat_last` (thanks to d-ryzhikov)
  • Changes to existing itertools:
  • Other changes
    • Python 3.4 has reached its end of life and is no longer supported.
    • Python 3.8 is officially supported. (thanks to jdufresne)
    • The collate function has been deprecated. It raises a DeprecationWarning if used, and will be removed in a future release.
    • :func:`one` and :func:`only` now provide more informative error messages. (thanks to gabbard)
    • Unit tests were moved outside of the main package (thanks to jdufresne)
    • Various documentation fixes (thanks to kriomant, gabbard, jdufresne)

7.2.0

7.1.0

  • New itertools
  • Changes to existing itertools:
    • :func:`numeric_range` now supports ranges specified by datetime.datetime and datetime.timedelta objects (thanks to MSeifert04 for tests).
    • :func:`difference` now supports an initial keyword argument.
  • Other changes
    • Various documentation fixes (thanks raimon49, pylang)

7.0.0

The major version update is due to the change in the default behavior of :func:`collapse`. It now treats bytes objects the same as str objects. This aligns its behavior with :func:`always_iterable`.

>>> from more_itertools import collapse
>>> iterable = [[1, 2], b'345', [6]]
>>> print(list(collapse(iterable)))
[1, 2, b'345', 6]

6.0.0

  • Major changes:
    • Python 2.7 is no longer supported. The 5.0.0 release will be the last version targeting Python 2.7.
    • All future releases will target the active versions of Python 3. As of 2019, those are Python 3.4 and above.
    • The six library is no longer a dependency.
    • The :func:`accumulate` function is no longer part of this library. You may import a better version from the standard itertools module.
  • Changes to existing itertools:
    • The order of the parameters in :func:`grouper` have changed to match the latest recipe in the itertools documentation. Use of the old order will be supported in this release, but emit a DeprecationWarning. The legacy behavior will be dropped in a future release. (thanks to jaraco)
    • :func:`distinct_permutations` was improved (thanks to jferard - see also permutations with unique values at StackOverflow.)
    • An unused parameter was removed from :func:`substrings`. (thanks to pylang)
  • Other changes:
    • The docs for :func:`unique_everseen` were improved. (thanks to jferard and MSeifert04)
    • Several Python 2-isms were removed. (thanks to jaraco, MSeifert04, and hugovk)

5.0.0

  • New itertools:
  • Changes to existing itertools:
    • :func:`ilen` was optimized a bit (thanks to MSeifert04, achampion, and bmintz)
    • :func:`first_true` now returns None by default. This is the reason for the major version bump - see below. (thanks to sk and OJFord)
  • Other changes:
    • Some code for old Python versions was removed (thanks to hugovk)
    • Some documentation mistakes were corrected (thanks to belm0 and hugovk)
    • Tests now run properly on 32-bit versions of Python (thanks to Millak)
    • Newer versions of CPython and PyPy are now tested against

The major version update is due to the change in the default return value of :func:`first_true`. It's now None.

>>> from more_itertools import first_true
>>> iterable = [0, '', False, [], ()]  # All these are False
>>> answer = first_true(iterable)
>>> print(answer)
None

4.3.0

  • New itertools:
  • Improvements to existing itertools:
  • Other changes:
    • The docs now include a nice table of tools (thanks MSeifert04)

4.2.0

  • New itertools:
  • Improvements to existing itertools:
  • Other changes:
    • Python 3.7 is now supported (thanks to irmen)
    • Python 3.3 is no longer supported
    • The test suite no longer requires third-party modules to run
    • The API docs now include links to source code

4.1.0

4.0.1

  • No code changes - this release fixes how the docs display on PyPI.

4.0.0

The major version update is due to the change in the return value of :func:`always_iterable`. It now always returns iterator objects:

>>> from more_itertools import always_iterable
# Non-iterable objects are wrapped with iter(tuple(obj))
>>> always_iterable(12345)
<tuple_iterator object at 0x7fb24c9488d0>
>>> list(always_iterable(12345))
[12345]
# Iterable objects are wrapped with iter()
>>> always_iterable([1, 2, 3, 4, 5])
<list_iterator object at 0x7fb24c948c50>

3.2.0

3.1.0

  • New itertools:
  • Improvements to existing itertools:
    • A few itertools are now slightly faster due to some function optimizations. (Thanks to MSeifert04)
  • The docs have been substantially revised with installation notes, categories for library functions, links, and more. (Thanks to pylang)

3.0.0

  • Removed itertools:
    • context has been removed due to a design flaw - see below for replacement options. (thanks to NeilGirdhar)
  • Improvements to existing itertools:
    • side_effect now supports before and after keyword arguments. (Thanks to yardsale8)
  • PyPy and PyPy3 are now supported.

The major version change is due to the removal of the context function. Replace it with standard with statement context management:

# Don't use context() anymore
file_obj = StringIO()
consume(print(x, file=f) for f in context(file_obj) for x in u'123')

# Use a with statement instead
file_obj = StringIO()
with file_obj as f:
    consume(print(x, file=f) for x in u'123')

2.6.0

  • New itertools:
    • adjacent and groupby_transform (Thanks to diazona)
    • always_iterable (Thanks to jaraco)
    • (Removed in 3.0.0) context (Thanks to yardsale8)
    • divide (Thanks to mozbhearsum)
  • Improvements to existing itertools:
    • ilen is now slightly faster. (Thanks to wbolster)
    • peekable can now prepend items to an iterable. (Thanks to diazona)

2.5.0

  • New itertools:
    • distribute (Thanks to mozbhearsum and coady)
    • sort_together (Thanks to clintval)
    • stagger and zip_offset (Thanks to joshbode)
    • padded
  • Improvements to existing itertools:
    • peekable now handles negative indexes and slices with negative components properly.
    • intersperse is now slightly faster. (Thanks to pylang)
    • windowed now accepts a step keyword argument. (Thanks to pylang)
  • Python 3.6 is now supported.

2.4.1

  • Move docs 100% to readthedocs.io.

2.4

  • New itertools:
    • accumulate, all_equal, first_true, partition, and tail from the itertools documentation.
    • bucket (Thanks to Rosuav and cvrebert)
    • collapse (Thanks to abarnet)
    • interleave and interleave_longest (Thanks to abarnet)
    • side_effect (Thanks to nvie)
    • sliced (Thanks to j4mie and coady)
    • split_before and split_after (Thanks to astronouth7303)
    • spy (Thanks to themiurgo and mathieulongtin)
  • Improvements to existing itertools:
    • chunked is now simpler and more friendly to garbage collection. (Contributed by coady, with thanks to piskvorky)
    • collate now delegates to heapq.merge when possible. (Thanks to kmike and julianpistorius)
    • peekable-wrapped iterables are now indexable and sliceable. Iterating through peekable-wrapped iterables is also faster.
    • one and unique_to_each have been simplified. (Thanks to coady)

2.3

  • Added one from jaraco.util.itertools. (Thanks, jaraco!)
  • Added distinct_permutations and unique_to_each. (Contributed by bbayles)
  • Added windowed. (Contributed by bbayles, with thanks to buchanae, jaraco, and abarnert)
  • Simplified the implementation of chunked. (Thanks, nvie!)
  • Python 3.5 is now supported. Python 2.6 is no longer supported.
  • Python 3 is now supported directly; there is no 2to3 step.

2.2

  • Added iterate and with_iter. (Thanks, abarnert!)

2.1

  • Added (tested!) implementations of the recipes from the itertools documentation. (Thanks, Chris Lonnen!)
  • Added ilen. (Thanks for the inspiration, Matt Basta!)

2.0

  • chunked now returns lists rather than tuples. After all, they're homogeneous. This slightly backward-incompatible change is the reason for the major version bump.
  • Added @consumer.
  • Improved test machinery.

1.1

  • Added first function.
  • Added Python 3 support.
  • Added a default arg to peekable.peek().
  • Noted how to easily test whether a peekable iterator is exhausted.
  • Rewrote documentation.

1.0

  • Initial release, with collate, peekable, and chunked. Could really use better docs.