This release adds a ``unique`` argument to :func:`~hypothesis.extra.numpy.arrays` which behaves the same ways as the corresponding one for :func:`~hypothesis.strategies.lists`, requiring all of the elements in the generated array to be distinct.
3.22.2
Not secure
-------------------
This release fixes an issue where Hypothesis would raise a ``TypeError`` when using the datetime-related strategies if running with ``PYTHONOPTIMIZE=2``. This bug was introduced in :ref:`3.20.0 <v3.20.0>`. (See :issue:`822`)
3.22.1
Not secure
-------------------
Hypothesis now transparently handles problems with an internal unicode cache, including file truncation or read-only filesystems (:issue:`767`). Thanks to Sam Hames for the patch.
3.22.0
Not secure
-------------------
This release provides what should be a substantial performance improvement to numpy arrays generated using :ref:`provided numpy support <hypothesis-numpy>`, and adds a new ``fill_value`` argument to :func:`~hypothesis.extra.numpy.arrays` to control this behaviour.
This work was funded by `Stripe <https://stripe.com/>`_.
3.21.3
Not secure
-------------------
This release fixes some extremely specific circumstances that probably have never occurred in the wild where users of :func:`~hypothesis.strategies.deferred` might have seen a :class:`python:RuntimeError` from too much recursion, usually in cases where no valid example could have been generated anyway.
3.21.2
Not secure
-------------------
This release fixes some minor bugs in argument validation:
* :ref:`hypothesis.extra.numpy <hypothesis-numpy>` dtype strategies would raise an internal error instead of an InvalidArgument exception when passed an invalid endianness specification. * :func:`~hypothesis.strategies.fractions` would raise an internal error instead of an InvalidArgument if passed ``float("nan")`` as one of its bounds. * The error message for passing ``float("nan")`` as a bound to various strategies has been improved. * Various bound arguments will now raise InvalidArgument in cases where they would previously have raised an internal TypeError or ValueError from the relevant conversion function. * ``streaming()`` would not have emitted a deprecation warning when called with an invalid argument.