Changelog
### 6.2.2
```
=========================
Bug Fixes
---------
- `8152 <https://github.com/pytest-dev/pytest/issues/8152>`_: Fixed "(<Skipped instance>)" being shown as a skip reason in the verbose test summary line when the reason is empty.
- `8249 <https://github.com/pytest-dev/pytest/issues/8249>`_: Fix the ``faulthandler`` plugin for occasions when running with ``twisted.logger`` and using ``pytest --capture=no``.
```
Links
- PyPI: https://pypi.org/project/pytest
- Changelog: https://pyup.io/changelogs/pytest/
- Homepage: https://docs.pytest.org/en/latest/
Changelog
### 6.2.0
```
------------------
If you use :pypi:`pytest-html`, Hypothesis now includes the
:ref:`summary statistics for each test <statistics>` in the HTML report,
whether or not the ``--hypothesis-show-statistics`` argument was passed
to show them in the command-line output.
```
### 6.1.1
```
------------------
This patch updates our automatic code formatting to use :pypi:`shed`,
which includes :pypi:`autoflake`, :pypi:`black`, :pypi:`isort`, and
:pypi:`pyupgrade` (:issue:`2780`).
```
### 6.1.0
```
------------------
This release teaches Hypothesis to distinguish between errors based on the
`__cause__ or __context__ of otherwise identical exceptions
<https://docs.python.org/3/library/exceptions.html>`__, which is particularly
useful when internal errors can be wrapped by a library-specific or semantically
appropriate exception such as:
.. code-block:: python
try:
do_the_thing(foo, timeout=10)
except Exception as err:
raise FooError("Failed to do the thing") from err
Earlier versions of Hypothesis only see the ``FooError``, while we can now
distinguish a ``FooError`` raised because of e.g. an internal assertion from
one raised because of a ``TimeoutExceeded`` exception.
```
### 6.0.4
```
------------------
This release prevents a race condition inside :func:`~hypothesis.strategies.recursive` strategies.
The race condition occurs when the same :func:`~hypothesis.strategies.recursive` strategy is shared among tests
that are running in multiple threads (:issue:`2717`).
```
### 6.0.3
```
------------------
This patch improves the type annotations for :func:`~hypothesis.strategies.one_of`,
by adding overloads to handle up to five distinct arguments as
:class:`~python:typing.Union` before falling back to :class:`~python:typing.Any`,
as well as annotating the ``|`` (``__or__``) operator for strategies (:issue:`2765`).
```
### 6.0.2
```
------------------
This release makes some small improvements to how filtered strategies work. It should improve the performance of shrinking filtered strategies,
and may under some (probably rare) circumstances improve the diversity of generated examples.
```
### 6.0.1
```
------------------
This patch fixes an interaction where our :ref:`test statistics <statistics>`
handling made Pytest's ``--junit-xml`` output fail to validate against the
strict ``xunit2`` schema (:issue:`1975`).
```
### 6.0.0
```
------------------
Welcome to the next major version of Hypothesis!
There are no new features here, as we release those in minor versions.
Instead, 6.0 is a chance for us to remove deprecated features (many already
converted into no-ops), and turn a variety of warnings into errors.
If you were running on the last version of Hypothesis 5.x *without any
Hypothesis deprecation warnings*, this will be a very boring upgrade.
**In fact, nothing will change for you at all.**
Changes
~~~~~~~
- Many functions now use :pep:`3102` keyword-only arguments where passing positional
arguments :ref:`was deprecated since 5.5 <v5.5.0>`.
- :func:`hypothesis.extra.django.from_model` no longer accepts ``model`` as a
keyword argument, where it could conflict with fields named "model".
- :func:`~hypothesis.strategies.randoms` now defaults to ``use_true_random=False``.
- :func:`~hypothesis.strategies.complex_numbers` no longer accepts
``min_magnitude=None``; either use ``min_magnitude=0`` or just omit the argument.
- ``hypothesis.provisional.ip4_addr_strings`` and ``ip6_addr_strings`` are removed
in favor of :func:`ip_addresses(v=...).map(str) <hypothesis.strategies.ip_addresses>`.
- :func:`~hypothesis.strategies.register_type_strategy` no longer accepts generic
types with type arguments, which were always pretty badly broken.
- Using function-scoped pytest fixtures is now a health-check error, instead of a warning.
.. tip::
The :command:`hypothesis codemod` command can automatically refactor your code,
particularly to convert positional to keyword arguments where those are now
required.
Hypothesis 5.x
==============
```
### 5.49.0
```
-------------------
This release adds the
:obj:`~hypothesis.HealthCheck.function_scoped_fixture` health check value,
which can be used to suppress the existing warning that appears when
:func:`given <hypothesis.given>` is applied to a test that uses pytest
function-scoped fixtures.
(This warning exists because function-scoped fixtures only run once per
function, not once per example, which is usually unexpected and can cause
subtle problems.)
When this warning becomes a health check error in a future release, suppressing
it via Python warning settings will no longer be possible.
In the rare case that once-per-function behaviour is intended, it will still be
possible to use :obj:`~hypothesis.HealthCheck.function_scoped_fixture` to
opt out of the health check error for specific tests.
```
### 5.48.0
```
-------------------
This release adds :func:`hypothesis.currently_in_test_context`, which can be used
to check whether the calling code is currently running inside an
:func:`given <hypothesis.given>` or :doc:`stateful <stateful>` test.
This is most useful for third-party integrations and assertion helpers which may
wish to use :func:`~hypothesis.assume` or :func:`~hypothesis.target`, without also
requiring that the helper only be used from property-based tests (:issue:`2581`).
```
### 5.47.0
```
-------------------
This release upgrades the import logic for :doc:`ghostwritten tests <ghostwriter>`,
handling many cases where imports would previously be missing or from unexpected
locations.
```
Links
- PyPI: https://pypi.org/project/hypothesis
- Changelog: https://pyup.io/changelogs/hypothesis/
- Repo: https://github.com/HypothesisWorks/hypothesis/tree/master/hypothesis-python
Changelog
### 3.4.4
```
~~~~~~~~~~~~~~~~~~
* Added a ``py.typed`` file so that ``mypy`` will know to use our type
annotations.
* Fixed an import cycle that could be triggered by certain import sequences.
.. _v3-4-3:
```
### 3.4.3
```
~~~~~~~~~~~~~~~~~~
* Specify our supported Rust version (>=1.45.0) in our ``setup.py`` so users
on older versions will get a clear error message.
.. _v3-4-2:
```
### 3.4.2
```
~~~~~~~~~~~~~~~~~~
* Improvements to make the rust transition a bit easier. This includes some
better error messages and small dependency fixes. If you experience
installation problems **Be sure to update pip** first, then check the
:doc:`FAQ </faq>`.
.. _v3-4-1:
```
### 3.4.1
```
~~~~~~~~~~~~~~~~~~
* Fixed a circular import issue.
* Added additional debug output to assist users seeing installation errors
due to outdated ``pip`` or missing ``rustc``.
.. _v3-4:
```
### 3.4
```
~~~~~~~~~~~~~~~~
* **BACKWARDS INCOMPATIBLE:** Support for Python 2 has been removed.
* We now ship ``manylinux2014`` wheels and no longer ship ``manylinux1``
wheels. Users should upgrade to the latest ``pip`` to ensure this doesn't
cause issues downloading wheels on their platform.
* ``cryptography`` now incorporates Rust code. Users building ``cryptography``
themselves will need to have the Rust toolchain installed. Users who use an
officially produced wheel will not need to make any changes. The minimum
supported Rust version is 1.45.0.
* ``cryptography`` now has :pep:`484` type hints on nearly all of of its public
APIs. Users can begin using them to type check their code with ``mypy``.
.. _v3-3-2:
```
### 3.3.2
```
~~~~~~~~~~~~~~~~~~
* **SECURITY ISSUE:** Fixed a bug where certain sequences of ``update()`` calls
when symmetrically encrypting very large payloads (>2GB) could result in an
integer overflow, leading to buffer overflows. *CVE-2020-36242*
.. _v3-3-1:
```
Links
- PyPI: https://pypi.org/project/cryptography
- Changelog: https://pyup.io/changelogs/cryptography/
- Repo: https://github.com/pyca/cryptography
Changelog
### 3.3.4
```
This is the fourth bugfix release of the 3.3.x series.
This release contains several critical bug-fixes:
* Fix WebAgg initialization.
* Fix parsing `QT_API` setting with mixed case.
* Fix build with link-time optimization disabled in environment.
* Fix test compatibility with NumPy 1.20.
* Fix test compatibility with pytest 6.2.
```
Links
- PyPI: https://pypi.org/project/matplotlib
- Changelog: https://pyup.io/changelogs/matplotlib/
- Homepage: https://matplotlib.org
Changelog
### 53.0.0
```
-------
Breaking Changes
^^^^^^^^^^^^^^^^
* 1527: Removed bootstrap script. Now Setuptools requires pip or another pep517-compliant builder such as 'build' to build. Now Setuptools can be installed from Github main branch.
```
### 52.0.0
```
-------
Breaking Changes
^^^^^^^^^^^^^^^^
* 2537: Remove fallback support for fetch_build_eggs using easy_install. Now pip is required for setup_requires to succeed.
* 2544: Removed 'easy_install' top-level model (runpy entry point) and 'easy_install' console script.
* 2545: Removed support for eggsecutables.
Changes
^^^^^^^
* 2459: Tests now run in parallel via pytest-xdist, completing in about half the time. Special thanks to :user:`webknjaz` for hard work implementing test isolation. To run without parallelization, disable the plugin with ``tox -- -p no:xdist``.
```
### 51.3.3
```
-------
Misc
^^^^
* 2539: Fix AttributeError in Description validation.
```
### 51.3.2
```
-------
Misc
^^^^
* 1390: Validation of Description field now is more lenient, emitting a warning and mangling the value to be valid (replacing newlines with spaces).
```
### 51.3.1
```
-------
Misc
^^^^
* 2536: Reverted tag deduplication handling.
```
### 51.3.0
```
-------
Changes
^^^^^^^
* 1390: Newlines in metadata description/Summary now trigger a ValueError.
* 2481: Define ``create_module()`` and ``exec_module()`` methods in ``VendorImporter``
to get rid of ``ImportWarning`` -- by :user:`hroncok`
* 2489: ``pkg_resources`` behavior for zipimport now matches the regular behavior, and finds
``.egg-info`` (previoulsy would only find ``.dist-info``) -- by :user:`thatch`
* 2529: Fixed an issue where version tags may be added multiple times
```
### 51.2.0
```
-------
Changes
^^^^^^^
* 2493: Use importlib.import_module() rather than the deprectated loader.load_module()
in pkg_resources namespace delaration -- by :user:`encukou`
Documentation changes
^^^^^^^^^^^^^^^^^^^^^
* 2525: Fix typo in the document page about entry point. -- by :user:`jtr109`
Misc
^^^^
* 2534: Avoid hitting network during test_easy_install.
```
### 51.1.2
```
-------
Misc
^^^^
* 2505: Disable inclusion of package data as it causes 'tests' to be included as data.
```
Links
- PyPI: https://pypi.org/project/setuptools
- Changelog: https://pyup.io/changelogs/setuptools/
- Repo: https://github.com/pypa/setuptools
Changelog
### 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)
```
Links
- PyPI: https://pypi.org/project/more-itertools
- Changelog: https://pyup.io/changelogs/more-itertools/
- Repo: https://github.com/more-itertools/more-itertools
- Docs: https://pythonhosted.org/more-itertools/
Update pytest from 6.2.1 to 6.2.2.
Changelog
### 6.2.2 ``` ========================= Bug Fixes --------- - `8152 <https://github.com/pytest-dev/pytest/issues/8152>`_: Fixed "(<Skipped instance>)" being shown as a skip reason in the verbose test summary line when the reason is empty. - `8249 <https://github.com/pytest-dev/pytest/issues/8249>`_: Fix the ``faulthandler`` plugin for occasions when running with ``twisted.logger`` and using ``pytest --capture=no``. ```Links
- PyPI: https://pypi.org/project/pytest - Changelog: https://pyup.io/changelogs/pytest/ - Homepage: https://docs.pytest.org/en/latest/Update hypothesis from 5.46.0 to 6.2.0.
Changelog
### 6.2.0 ``` ------------------ If you use :pypi:`pytest-html`, Hypothesis now includes the :ref:`summary statistics for each test <statistics>` in the HTML report, whether or not the ``--hypothesis-show-statistics`` argument was passed to show them in the command-line output. ``` ### 6.1.1 ``` ------------------ This patch updates our automatic code formatting to use :pypi:`shed`, which includes :pypi:`autoflake`, :pypi:`black`, :pypi:`isort`, and :pypi:`pyupgrade` (:issue:`2780`). ``` ### 6.1.0 ``` ------------------ This release teaches Hypothesis to distinguish between errors based on the `__cause__ or __context__ of otherwise identical exceptions <https://docs.python.org/3/library/exceptions.html>`__, which is particularly useful when internal errors can be wrapped by a library-specific or semantically appropriate exception such as: .. code-block:: python try: do_the_thing(foo, timeout=10) except Exception as err: raise FooError("Failed to do the thing") from err Earlier versions of Hypothesis only see the ``FooError``, while we can now distinguish a ``FooError`` raised because of e.g. an internal assertion from one raised because of a ``TimeoutExceeded`` exception. ``` ### 6.0.4 ``` ------------------ This release prevents a race condition inside :func:`~hypothesis.strategies.recursive` strategies. The race condition occurs when the same :func:`~hypothesis.strategies.recursive` strategy is shared among tests that are running in multiple threads (:issue:`2717`). ``` ### 6.0.3 ``` ------------------ This patch improves the type annotations for :func:`~hypothesis.strategies.one_of`, by adding overloads to handle up to five distinct arguments as :class:`~python:typing.Union` before falling back to :class:`~python:typing.Any`, as well as annotating the ``|`` (``__or__``) operator for strategies (:issue:`2765`). ``` ### 6.0.2 ``` ------------------ This release makes some small improvements to how filtered strategies work. It should improve the performance of shrinking filtered strategies, and may under some (probably rare) circumstances improve the diversity of generated examples. ``` ### 6.0.1 ``` ------------------ This patch fixes an interaction where our :ref:`test statistics <statistics>` handling made Pytest's ``--junit-xml`` output fail to validate against the strict ``xunit2`` schema (:issue:`1975`). ``` ### 6.0.0 ``` ------------------ Welcome to the next major version of Hypothesis! There are no new features here, as we release those in minor versions. Instead, 6.0 is a chance for us to remove deprecated features (many already converted into no-ops), and turn a variety of warnings into errors. If you were running on the last version of Hypothesis 5.x *without any Hypothesis deprecation warnings*, this will be a very boring upgrade. **In fact, nothing will change for you at all.** Changes ~~~~~~~ - Many functions now use :pep:`3102` keyword-only arguments where passing positional arguments :ref:`was deprecated since 5.5 <v5.5.0>`. - :func:`hypothesis.extra.django.from_model` no longer accepts ``model`` as a keyword argument, where it could conflict with fields named "model". - :func:`~hypothesis.strategies.randoms` now defaults to ``use_true_random=False``. - :func:`~hypothesis.strategies.complex_numbers` no longer accepts ``min_magnitude=None``; either use ``min_magnitude=0`` or just omit the argument. - ``hypothesis.provisional.ip4_addr_strings`` and ``ip6_addr_strings`` are removed in favor of :func:`ip_addresses(v=...).map(str) <hypothesis.strategies.ip_addresses>`. - :func:`~hypothesis.strategies.register_type_strategy` no longer accepts generic types with type arguments, which were always pretty badly broken. - Using function-scoped pytest fixtures is now a health-check error, instead of a warning. .. tip:: The :command:`hypothesis codemod` command can automatically refactor your code, particularly to convert positional to keyword arguments where those are now required. Hypothesis 5.x ============== ``` ### 5.49.0 ``` ------------------- This release adds the :obj:`~hypothesis.HealthCheck.function_scoped_fixture` health check value, which can be used to suppress the existing warning that appears when :func:`given <hypothesis.given>` is applied to a test that uses pytest function-scoped fixtures. (This warning exists because function-scoped fixtures only run once per function, not once per example, which is usually unexpected and can cause subtle problems.) When this warning becomes a health check error in a future release, suppressing it via Python warning settings will no longer be possible. In the rare case that once-per-function behaviour is intended, it will still be possible to use :obj:`~hypothesis.HealthCheck.function_scoped_fixture` to opt out of the health check error for specific tests. ``` ### 5.48.0 ``` ------------------- This release adds :func:`hypothesis.currently_in_test_context`, which can be used to check whether the calling code is currently running inside an :func:`given <hypothesis.given>` or :doc:`stateful <stateful>` test. This is most useful for third-party integrations and assertion helpers which may wish to use :func:`~hypothesis.assume` or :func:`~hypothesis.target`, without also requiring that the helper only be used from property-based tests (:issue:`2581`). ``` ### 5.47.0 ``` ------------------- This release upgrades the import logic for :doc:`ghostwritten tests <ghostwriter>`, handling many cases where imports would previously be missing or from unexpected locations. ```Links
- PyPI: https://pypi.org/project/hypothesis - Changelog: https://pyup.io/changelogs/hypothesis/ - Repo: https://github.com/HypothesisWorks/hypothesis/tree/master/hypothesis-pythonUpdate cryptography from 3.3.1 to 3.4.5.
Changelog
### 3.4.4 ``` ~~~~~~~~~~~~~~~~~~ * Added a ``py.typed`` file so that ``mypy`` will know to use our type annotations. * Fixed an import cycle that could be triggered by certain import sequences. .. _v3-4-3: ``` ### 3.4.3 ``` ~~~~~~~~~~~~~~~~~~ * Specify our supported Rust version (>=1.45.0) in our ``setup.py`` so users on older versions will get a clear error message. .. _v3-4-2: ``` ### 3.4.2 ``` ~~~~~~~~~~~~~~~~~~ * Improvements to make the rust transition a bit easier. This includes some better error messages and small dependency fixes. If you experience installation problems **Be sure to update pip** first, then check the :doc:`FAQ </faq>`. .. _v3-4-1: ``` ### 3.4.1 ``` ~~~~~~~~~~~~~~~~~~ * Fixed a circular import issue. * Added additional debug output to assist users seeing installation errors due to outdated ``pip`` or missing ``rustc``. .. _v3-4: ``` ### 3.4 ``` ~~~~~~~~~~~~~~~~ * **BACKWARDS INCOMPATIBLE:** Support for Python 2 has been removed. * We now ship ``manylinux2014`` wheels and no longer ship ``manylinux1`` wheels. Users should upgrade to the latest ``pip`` to ensure this doesn't cause issues downloading wheels on their platform. * ``cryptography`` now incorporates Rust code. Users building ``cryptography`` themselves will need to have the Rust toolchain installed. Users who use an officially produced wheel will not need to make any changes. The minimum supported Rust version is 1.45.0. * ``cryptography`` now has :pep:`484` type hints on nearly all of of its public APIs. Users can begin using them to type check their code with ``mypy``. .. _v3-3-2: ``` ### 3.3.2 ``` ~~~~~~~~~~~~~~~~~~ * **SECURITY ISSUE:** Fixed a bug where certain sequences of ``update()`` calls when symmetrically encrypting very large payloads (>2GB) could result in an integer overflow, leading to buffer overflows. *CVE-2020-36242* .. _v3-3-1: ```Links
- PyPI: https://pypi.org/project/cryptography - Changelog: https://pyup.io/changelogs/cryptography/ - Repo: https://github.com/pyca/cryptographyUpdate pandas from 1.2.0 to 1.2.2.
The bot wasn't able to find a changelog for this release. Got an idea?
Links
- PyPI: https://pypi.org/project/pandas - Homepage: https://pandas.pydata.orgUpdate matplotlib from 3.3.3 to 3.3.4.
Changelog
### 3.3.4 ``` This is the fourth bugfix release of the 3.3.x series. This release contains several critical bug-fixes: * Fix WebAgg initialization. * Fix parsing `QT_API` setting with mixed case. * Fix build with link-time optimization disabled in environment. * Fix test compatibility with NumPy 1.20. * Fix test compatibility with pytest 6.2. ```Links
- PyPI: https://pypi.org/project/matplotlib - Changelog: https://pyup.io/changelogs/matplotlib/ - Homepage: https://matplotlib.orgUpdate setuptools from 51.1.1 to 53.0.0.
Changelog
### 53.0.0 ``` ------- Breaking Changes ^^^^^^^^^^^^^^^^ * 1527: Removed bootstrap script. Now Setuptools requires pip or another pep517-compliant builder such as 'build' to build. Now Setuptools can be installed from Github main branch. ``` ### 52.0.0 ``` ------- Breaking Changes ^^^^^^^^^^^^^^^^ * 2537: Remove fallback support for fetch_build_eggs using easy_install. Now pip is required for setup_requires to succeed. * 2544: Removed 'easy_install' top-level model (runpy entry point) and 'easy_install' console script. * 2545: Removed support for eggsecutables. Changes ^^^^^^^ * 2459: Tests now run in parallel via pytest-xdist, completing in about half the time. Special thanks to :user:`webknjaz` for hard work implementing test isolation. To run without parallelization, disable the plugin with ``tox -- -p no:xdist``. ``` ### 51.3.3 ``` ------- Misc ^^^^ * 2539: Fix AttributeError in Description validation. ``` ### 51.3.2 ``` ------- Misc ^^^^ * 1390: Validation of Description field now is more lenient, emitting a warning and mangling the value to be valid (replacing newlines with spaces). ``` ### 51.3.1 ``` ------- Misc ^^^^ * 2536: Reverted tag deduplication handling. ``` ### 51.3.0 ``` ------- Changes ^^^^^^^ * 1390: Newlines in metadata description/Summary now trigger a ValueError. * 2481: Define ``create_module()`` and ``exec_module()`` methods in ``VendorImporter`` to get rid of ``ImportWarning`` -- by :user:`hroncok` * 2489: ``pkg_resources`` behavior for zipimport now matches the regular behavior, and finds ``.egg-info`` (previoulsy would only find ``.dist-info``) -- by :user:`thatch` * 2529: Fixed an issue where version tags may be added multiple times ``` ### 51.2.0 ``` ------- Changes ^^^^^^^ * 2493: Use importlib.import_module() rather than the deprectated loader.load_module() in pkg_resources namespace delaration -- by :user:`encukou` Documentation changes ^^^^^^^^^^^^^^^^^^^^^ * 2525: Fix typo in the document page about entry point. -- by :user:`jtr109` Misc ^^^^ * 2534: Avoid hitting network during test_easy_install. ``` ### 51.1.2 ``` ------- Misc ^^^^ * 2505: Disable inclusion of package data as it causes 'tests' to be included as data. ```Links
- PyPI: https://pypi.org/project/setuptools - Changelog: https://pyup.io/changelogs/setuptools/ - Repo: https://github.com/pypa/setuptoolsUpdate numpy from 1.19.4 to 1.20.1.
The bot wasn't able to find a changelog for this release. Got an idea?
Links
- PyPI: https://pypi.org/project/numpy - Homepage: https://www.numpy.orgUpdate PyYAML from 5.3.1 to 5.4.1.
The bot wasn't able to find a changelog for this release. Got an idea?
Links
- PyPI: https://pypi.org/project/pyyaml - Homepage: https://pyyaml.org/Update more-itertools from 8.6.0 to 8.7.0.
Changelog
### 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) ```Links
- PyPI: https://pypi.org/project/more-itertools - Changelog: https://pyup.io/changelogs/more-itertools/ - Repo: https://github.com/more-itertools/more-itertools - Docs: https://pythonhosted.org/more-itertools/