Skip to content

Conversation

pyup-bot
Copy link
Collaborator

@pyup-bot pyup-bot commented Sep 3, 2025

This PR updates more-itertools from 8.1.0 to 10.8.0.

Changelog

10.8.0

------

* New functions:
 * :func:`derangements` was added (thanks to debruijn)
 * :func:`argmin` and :func:`argmax` were added (thanks to rhettinger)
 * :func:`running_median` was added (thanks to rhettinger)
 * :func:`extract` was added (thanks to rhettinger)
 * :func:`interleave_randomly` was added (thanks to ktbarrett)

* Changes to existing functions:
 * The type hints and docstring for :func:`batched` were improved (thanks to qobilidop and inventshah)
 * The memory usage of :func:`islice_extended` was reduced (thanks to ben42code)
 * The performance of :func:`sample` and :func:`consecutive_groups`, :func:`dft`, :func:`idft`, :func:`map_if`, :func:`count_cycle`, and :func:`tail` were improved (thanks to rhettinger) 
 * The performance of :func:`before_and_after`, :func:`mark_ends`, and :func:`interleave_longest` were improved (thanks to pochmann3) 
 * :func:`nth_prime` now accepts an ``approximate`` keyword. When set to ``True``, a faster but less accurate method is used to return a result. (thanks to rhettinger)
 * :func:`last` now works when its input has ``__reversed__`` set to ``None`` (thanks to inventshah)
 * The :func:`unzip` function was simplified (thanks to pochmann3)
 * The :func:`reshape` function now accepts ``shape`` values that represent multidimensional matrices (thanks to rhettinger)

* Other changes:
 * An issue with dark themes and documentation display was fixed (thanks to pochmann3, moreati, and pradyunsg)
 * Variable names in several functions were improved (thanks to rhettinger)
 * The docstrings for :func:`dft`, :func:`idft`, :func:`minmax`, :func:`sample`, and :func:`multinomial` were improved (thanks to rhettinger)
 * Packaging and package index metadata were improved (thanks to cdce8p)
 * Several aspects of the documentation were improved (thanks to rhettinger, saadmanrafat)
 * The Makefile now refers to `python` instead of `python3` (thanks to ktbarrett)
 * Test coverage was improved (thanks to rhettinger)
 * Python 3.14 is now tested by GitHub Actions

10.7.0

------

* New functions:
 * :func:`multinomial` was added (thanks to rhettinger)

* Changes to existing functions:
 * :func:`ichunked`, :func:`iterate`, :func:`one`, :func:`only`, :func:`powerset_of_sets`, and :func:`strictly_n` were optimized (thanks to rhettinger)
 * :func:`exactly_n` now uses less memory (thanks to rhettinger)
 * :func:`dft` and :func:`idft` were optimized for Python versions below 3.12 (thanks to rhettinger)
 * :func:`is_prime` no longer shares state with the users random number generator (thanks to rhettinger)

* Other changes:
 * Some docstring issues were fixed (thanks to lpulley and ricbit)
 * The type hints for :func:`groupby_transform` were improved (thanks to rhettinger)
 * The ``furo`` theme is now used for docs (thanks to AA-turner)

10.6.0

------

* New functions:
 * :func:`is_prime` and :func:`nth_prime` were added (thanks to JamesParrott and rhettinger)
 * :func:`loops` was added (thanks to rhettinger)

* Changes to existing functions:
 * :func:`factor` was optimized to handle larger inputs and use less memory (thanks to rhettinger)
 * :func:`spy` was optimized to enable nested calls (thanks to rhettinger)
 * :func:`polynomial_from_roots` was made non-recursive and able to handle larger numbers of roots (thanks to pochmann3 and rhettinger)
 * :func:`is_sorted` now only relies on less than comparisons (thanks to rhettinger)
 * The docstring for :func:`outer_product` was improved (thanks to rhettinger)
 * The type annotations for :func:`sample` were improved (thanks to rhettinger)

* Other changes:
 * Python 3.13 is officially supported. Python 3.8 is no longer officially supported. (thanks to hugovk, JamesParrott, and stankudrow)
 * `mypy` checks were fixed (thanks to JamesParrott)

10.5.0

------

* Bug fixes
 * A missing symbol in ``more.pyi`` was fixed (thanks to eberts-google and nathanielmanistaatgoogle)

* Other changes
 * :func:`all_equal` was optimized (thanks to pochmann3 and rhettinger)

10.4.0

------

* Changes to existing functions
 * :func:`circular_shifts` now accepts a ``steps`` parameter (thanks to rhettinger)
 * :func:`distinct_permutations` now accepts iterables with non-comparable items (thanks to hgustafsson, JamesParrott, and pochmann3)
 * :class:`run_length`, :func:`totient`, :func:`sliding_window`, and :func:`triplewise` were optimized (thanks to rhettinger)
 * :class:`ilen` was optimized (thanks to pochmann3 and rhettinger)
 * :func:`sample` was improved, and now accepts ``counts`` and ``strict`` parameters (thanks to rhettinger)
 * :func:`set_partitions` now accepts ``min_size`` and ``max_size`` parameters (thanks to Pandede)
 * :func:`seekable`'s ``relative_seek`` method remembers previous calls (thanks to dkrikun)
 * :func:`sort_together` now accepts a ``strict`` parameter (thanks to rhettinger and Pandede)

* Other changes
 * The docs for :func:`is_sorted` and :func:`strictly_n` were improved (thanks to pochmann3 and fakuivan)
 * The typing information for :func:`windowed_complete`, :func:`zip_broadcast`, and :func:`zip_equal` were improved (thanks to m472, eyalho, akisatoon1, jbosboom, and Pandede)

10.3.0

------

* New functions
 * :func:`powerset_of_sets`, :func:`dft`, and :func:`idft` (thanks to rhettinger)
 * :func:`join_mappings` (thanks to NeilGirdhar and rhettinger)
 * :func:`doublestarmap` (thanks to Skeen, monk-time, DamianB-BitFlipper, and ergoithz)
 * :func:`unique` (thanks to rhettinger)

* Changes to existing functions
 * :func:`collapse`, :func:`chunked_even`, :func:`ichunked`, :func:`padded`, and :func:`windowed` were optimized and improved (thanks to james-wasson)
 * :func:`totient` was optimized (thanks to rhettinger)
 * :func:`roundrobin` was updated and improved (thanks to rhettinger)
 * :func:`all_equal` now accepts a *key* parameter.
 * The docs for :func:`value_chain` were improved (thanks to bjrtx)
 * The type annotations for :class:`countable` were improved (thanks to aidanholm)

* Other changes
 * Unit tests were improved (thanks to haukex)
 * Some documentation issues were fixed (thanks to bjrtx and DimitriPapadopoulos)

10.2.0

------

* New functions
 * :func:`iter_suppress` (thanks to jaraco, pochmann, and rhettinger)
 * :func:`filter_map` (thanks to struktured)
 * :func:`classify_unique` (thanks to haukex)
 * :func:`totient` (from the itertools docs)
 * :func:`reshape` (from the itertools docs)

* Changes to existing functions
 * :func:`factor`, :func:`iter_index`, :func:`sieve`, and :func:`unique_justseen` were updated to match the itertools docs
 * :func:`first` was optimized (thanks to pochmann)
 * :func:`takewhile_inclusive` was refactored (thanks to eltoder)
 * :func:`combination_with_replacement_index` was optimized (thanks to elliotwutingfeng and rhettinger)
 * :func:`nth_permutation`, :func:`nth_combination_with_replacement`, :func:`combination_index`, and :func:`combination_with_replacement_index` were optimized (thanks to rhettinger)
 * :func:`batched` now accepts a `strict` argument (adapted from itertools docs)
 * :func:`time_limited` was improved for Windows (thanks to haukex)

* Other changes
 * Several typing updates were made (thanks to obaltian and ilai-deutel)
 * Some documentation issues were fixed (thanks to F-park, DimitriPapadopoulos, peterbygrave, shuuji3, eltoder, and homeworkprod)

10.1.0

------

* New functions
 * :func:`takewhile_inclusive` (thanks to OlegAlexander)
 * :func:`outer_product` (thanks to OlegAlexander)

* Changes to existing functions
 * :func:`zip_broadcast` was improved (thanks to kalekundert and pochmann)
 * :func:`consume` had its type annotation fixed (thanks to obaltian)

* Other changes
 * Some documentation and testing issues were fixed (thanks to OlegAlexander)

10.0.0

------

* Potentially breaking changes
 * Python 3.7 support was dropped, since it went EOL on 2023-06-27
 * :func:`batched` no longer issues a ``DeprecationWarning``; it is now an alias for ``itertools.batched`` for Python 3.12+
 * :func:`batched` and :func:`matmul` now yield tuples instead of lists

* New functions
 * :func:`combination_with_replacement_index` (thanks to Schoyen)
 * :func:`nth_combination_with_replacement` (thanks to Schoyen)
 * :func:`polynomial_eval` (from the Python itertools docs)
 * :func:`polynomial_derivative` (from the Python itertools docs)
 * :func:`sum_of_squares` (from the Python itertools docs)

* Changes to existing functions
 * :func:`seekable` now has ``relative_seek`` method (thanks to karlb)
 * :func:`chunked_even` was optimized (thanks to elliotwutingfeng)
 * :func:`numeric_range` was optimized (thanks to eltoder)
 * :func:`duplicates_justseen`, :func:`pairwise`, :func:`partial_product`, and :func:`partition` were updated and optimized (thanks to pochmann)
 * :func:`unique_in_window` had its implementation updated (thanks to elliotwutingfeng)
 * :func:`iterate` now breaks when its ``func`` argument raises ``StopIteration`` (thanks to jrebiffe)

* Other changes
 * Some documentation and testing issues were fixed (thanks to lonnen and XuehaiPan)

9.1.0

-----

* New functions
 * :func:`iter_index` (from the Python itertools docs)
 * :func:`transpose` (from the Python itertools docs)
 * :func:`matmul` (from the Python itertools docs)
 * :func:`factor` (from the Python itertools docs)
 * :func:`gray_product` (thanks to haukex)
 * :func:`partial_product` (thanks to lonnen)

* Changes to existing functions
 * :func:`sieve` was updated to match the Python itertools docs
 * :func:`maxsplit` was updated to fix a bug (thanks to abingham)
 * :func:`sliced` had its `type hint <https://github.com/more-itertools/more-itertools/pull/667>`__ updated (thanks to ad-chaos)


* Other changes
 * The ``batched`` function is marked as deprecated and will be removed in a future major release. For Python 3.12 and above, use ``itertools.batched`` instead. (thanks to neutrinoceros)
 * The type hints now used postponed evaluation of annotations from PEP 563 (thanks to Isira-Seneviratne)
 * Some documentation issues were fixed (thanks to Voskov and jdkandersson)

9.0.0

-----

* Potentially breaking changes
 * :func:`grouper` no longer accepts an integer as its first argument. Previously this raised a ``DeprecationWarning``.
 * :func:`collate` has been removed. Use the built-in :func:`heapq.merge` instead.
 * :func:`windowed` now yields nothing when its iterable is empty.
 * This library now advertises support for Python 3.7+.

* New functions
 * :func:`constrained_batches`
 * :func:`batched` (from the Python itertools docs)
 * :func:`polynomial_from_roots` (from the Python itertools docs)
 * :func:`sieve` (from the Python itertools docs)

* Other changes
 * Some documentation issues were fixed (thanks to nanouasyn)

8.14.0

------

* New functions
 * :func:`longest_common_prefix` (thanks to nanouasyn)
 * :func:`iequals` (thanks to nanouasyn)

* Changes to existing functions
 * `concurrent.futures.ThreadPoolExecutor` is now imported lazily in :func:`callback_iter`.
 * :func:`tail` is now optimized for iterables with a fixed length.

* Other changes
 * Some documentation issues were fixed (thanks to pochmann and timgates42)
 * This library is now marked for Python 3.10 compatibility in PyPI (thanks to chayim)

8.13.0

------

* New functions
 * The :func:`subslices` recipe from the `itertools` docs was added (thanks to rhettinger)

* Changes to existing functions
 * The :func:`ichunked` function is now more efficient (thanks to hjtran0 and seanmacavaney)
 * The :func:`difference` function is now more efficient (thanks to Masynchin)
 * The :func:`grouper` recipe now has more features, mirroring the one in the `itertools` docs (thanks to rhettinger)

* Other changes
 * Some documentation issues were fixed (thanks to medvied and Freed-Wu)
 * The `more_itertools` package is now built with `flit` (thanks to mgorny)

8.12.0

------

* Bug fixes
 * Some documentation issues were fixed (thanks to Masynchin, spookylukey, astrojuanlu, and stephengmatthews)
 * Python 3.5 support was temporarily restored (thanks to mattbonnell)

8.11.0

------

* New functions
 * The :func:`before_and_after`, :func:`sliding_window`, and :func:`triplewise` recipes from the Python 3.10 docs were added
 * :func:`duplicates_everseen` and :func:`duplicates_justseen` (thanks to OrBin and DavidPratt512)
 * :func:`minmax` (thanks to Ricocotam, MSeifert04, and ruancomelli)
 * :func:`strictly_n` (thanks to hwalinga and NotWearingPants)
 * :func:`unique_in_window`

* Changes to existing functions
 * :func:`groupby_transform` had its type stub improved (thanks to mjk4 and ruancomelli)
 * :func:`is_sorted` now accepts a ``strict`` parameter (thanks to Dutcho and ruancomelli)
 * :func:`zip_broadcast` was updated to fix a bug (thanks to kalekundert)

8.10.0

------

* Changes to existing functions
 * The type stub for :func:`iter_except` was improved (thanks to  MarcinKonowalczyk)

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

8.9.0

-----

* New functions
 * :func:`interleave_evenly` (thanks to mbugert)
 * :func:`repeat_each` (thanks to FinalSh4re)
 * :func:`chunked_even` (thanks to valtron)
 * :func:`map_if` (thanks to sassbalint)
 * :func:`zip_broadcast` (thanks to kalekundert)

* Changes to existing functions
 * The type stub for :func:`chunked` was improved (thanks to  PhilMacKay)
 * The type stubs for :func:`zip_equal` and `zip_offset` were improved (thanks to maffoo)
 * Building Sphinx docs locally was improved (thanks to MarcinKonowalczyk)

8.8.0

-----

* New functions
 * :func:`countable` (thanks to krzysieq)

* Changes to existing functions
 * :func:`split_before` was updated to handle empty collections (thanks to TiunovNN)
 * :func:`unique_everseen` got a performance boost (thanks to Numerlor)
 * The type hint for :func:`value_chain` was corrected (thanks to vr2262)

8.7.0

-----

* New functions
 * :func:`convolve` (from the Python itertools docs)
 * :func:`product_index`, :func:`combination_index`, and :func:`permutation_index` (thanks to N8Brooks)
 * :func:`value_chain` (thanks to jenstroeger)

* Changes to existing functions
 * :func:`distinct_combinations` now uses a non-recursive algorithm (thanks to  knutdrand)
 * :func:`pad_none` is now the preferred name for :func:`padnone`, though the latter remains available.
 * :func:`pairwise` will now use the Python standard library implementation on Python 3.10+
 * :func:`sort_together` now accepts a ``key`` argument (thanks to brianmaissy)
 * :func:`seekable` now has a ``peek`` method, and can indicate whether the iterator it's wrapping is exhausted (thanks to gsakkis)
 * :func:`time_limited` can now indicate whether its iterator has expired (thanks to roysmith)
 * The implementation of :func:`unique_everseen` was improved (thanks to plammens)

* Other changes:
 * Various documentation updates (thanks to cthoyt, Evantm, and cyphase)

8.6.0

-----

* New itertools
 * :func:`all_unique` (thanks to brianmaissy)
 * :func:`nth_product` and :func:`nth_permutation` (thanks to N8Brooks)

* Changes to existing itertools
 * :func:`chunked` and :func:`sliced` now accept a ``strict`` parameter (thanks to shlomif and jtwool)

* Other changes
 * Python 3.5 has reached its end of life and is no longer supported.
 * Python 3.9 is officially supported.
 * Various documentation fixes (thanks to timgates42)

8.5.0

-----

* New itertools
 * :func:`windowed_complete` (thanks to MarcinKonowalczyk)

* Changes to existing itertools:
 * The :func:`is_sorted` implementation was improved (thanks to cool-RR)
 * The :func:`groupby_transform` now accepts a ``reducefunc`` parameter.
 * The :func:`last` implementation was improved (thanks to brianmaissy)

* 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

-----

* New itertools
 * :func:`mark_ends` (thanks to kalekundert)
 * :func:`is_sorted`

* Changes to existing itertools:
 * :func:`islice_extended` can now be used with real slices (thanks to cool-RR)
 * The implementations for :func:`filter_except` and :func:`map_except` were improved (thanks to SergBobrovsky)

* Other changes
 * Automated tests now enforce code style (using `black <https://github.com/psf/black>`__)
 * The various signatures of :func:`islice_extended` and :func:`numeric_range` now appear in the docs (thanks to dsfulf)
 * The test configuration for mypy was updated (thanks to blueyed)

8.3.0

-----

* New itertools
 * :func:`zip_equal` (thanks to frankier and alexmojaki)

* Changes to existing itertools:
 * :func:`split_at`, :func:`split_before`, :func:`split_after`, and :func:`split_when` all got a ``maxsplit`` parameter (thanks to jferard and ilai-deutel)
 * :func:`split_at` now accepts a ``keep_separator`` parameter (thanks to jferard)
 * :func:`distinct_permutations` can now generate ``r``-length permutations (thanks to SergBobrovsky and ilai-deutel)
 * The :func:`windowed` implementation was improved  (thanks to SergBobrovsky)
 * The :func:`spy` implementation was improved (thanks to has2k1)

* Other changes
 * Type stubs are now tested with ``stubtest`` (thanks to ilai-deutel)
 * Tests now run with ``python -m unittest`` instead of ``python setup.py test`` (thanks to jdufresne)

8.2.0

-----

* Bug fixes
 * The .pyi files for typing were updated. (thanks to blueyed and ilai-deutel)

* Changes to existing itertools:
 * :func:`numeric_range` now behaves more like the built-in :func:`range`. (thanks to jferard)
 * :func:`bucket` now allows for enumerating keys. (thanks to alexchandel)
 * :func:`sliced` should work for numpy arrays. (thanks to sswingle)
 * :func:`seekable` now has a ``maxlen`` parameter.
Links

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant