NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #539 most downloaded on PyPI
The property-based testing library for Python
Last release 2 days ago
28 Sep 2026
Ships on a steady schedule
a new release about every 9 days
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
14 years old
1571 releases · first in 2013
This patch dramatically improves the performance of "from_type()" on hierarchies of abstract classes whose subclasses refer back to the base class (di
This patch dramatically improves the performance of "from_type()" on hierarchies of abstract classes whose subclasses refer back to the base class (directly, or via a sibling subclass) in their annotations. Resolution previously took time cubic in the number of subclasses; we now resolve each type only once (issue #4729).
The canonical version of these notes (with links) is on readthedocs.
This patch dramatically improves the performance of ~hypothesis.strategies.from_type on hierarchies of abstract classes whose subclasses refer back to the base class (directly, or via a sibling subclass) in their annotations. Resolution previously took time cubic in the number of subclasses; we now resolve each type only once (4729).
One column per quarter.
This patch fixes a bug where fuzz_one_input did not track the "interesting_origin" of failures (issue #4420). As a result, it only saved the single sm
This patch fixes a bug where fuzz_one_input did not track the "interesting_origin" of failures (issue #4420). As a result, it only saved the single smallest failure to the database rather than the smallest example of each distinct failure, and the "interesting_origin" was missing from observability reports.
The canonical version of these notes (with links) is on readthedocs.
This patch fixes a bug where "decimals()" with the "places" argument could generate values outside the "min_value" and "max_value" bounds, when those
This patch fixes a bug where "decimals()" with the "places" argument could generate values outside the "min_value" and "max_value" bounds, when those bounds had more fractional digits than "places" (issue #4651).
The canonical version of these notes (with links) is on readthedocs.
This patch fixes a bug where ~hypothesis.strategies.decimals with the places argument could generate values outside the min_value and max_value bounds, when those bounds had more fractional digits than places (4651).
This patch improves the performance of stateful testing for state machines with a large number of rules (issue #4465).
This patch improves the performance of stateful testing for state machines with a large number of rules (issue #4465).
The canonical version of these notes (with links) is on readthedocs.
This patch improves the performance of stateful testing for state machines with a large number of rules (4465).
This patch fixes a bug where we emitted incorrect git patch files when one file did not have a trailing newline (issue #4744).
This patch fixes a bug where we emitted incorrect git patch files when one file did not have a trailing newline (issue #4744).
The canonical version of these notes (with links) is on readthedocs.
This patch fixes a bug where we emitted incorrect git patch files when one file did not have a trailing newline (4744).
"event()"'s "payload" is now typed as accepting "Any", matching its runtime behavior of accepting any string-coercible object.
"event()"'s "payload" is now typed as accepting "Any", matching its runtime behavior of accepting any string-coercible object.
The canonical version of these notes (with links) is on readthedocs.
|event|'s payload is now typed as accepting |Any|, matching its runtime behavior of accepting any string-coercible object.
When Hypothesis detects that your data generation is flaky and raises "FlakyStrategyDefinition", the error message now describes *what* differed betwe
When Hypothesis detects that your data generation is flaky and raises "FlakyStrategyDefinition", the error message now describes what differed between the two runs - such as a different choice type, different constraints, or drawing more or less data - as well as the stack of strategies being drawn from, instead of only reporting that generation was inconsistent. In stateful tests, it also reports the steps leading up to the error.
Thanks to Ian Hunt-Isaak for this improvement!
The canonical version of these notes (with links) is on readthedocs.
This patch adds support for recursive forward references in "from_type()", such as "A = list[Union["A", str]]" (issue #4542). Previously, such recursi
This patch adds support for recursive forward references in "from_type()", such as "A = list[Union["A", str]]" (issue #4542). Previously, such recursive type aliases would raise a "ResolutionFailed" error. Now, Hypothesis can automatically resolve the forward reference by looking it up in the caller's namespace. This also resolves forward references inside "type[...]", such as "type["MyClass"]".
The canonical version of these notes (with links) is on readthedocs.
This patch adds support for resolving forward references in |st.from_type| (4542):
# this now works
A = list[Union["A", str]]
st.from_type(A).example()
# this also now works
s = st.from_type(list["B"])
@dataclass
class B:
v: int
s.example()
Previously, these would raise an error. Now, Hypothesis automatically resolves the forward reference by looking it up in the caller's namespace.
This patch renames our source code directory from "hypothesis-python" to "hypothesis", and changes our canonical scheme for git tags from "hypothesis-
This patch renames our source code directory from "hypothesis-python" to "hypothesis", and changes our canonical scheme for git tags from "hypothesis-python-X.Y.Z" to "vX.Y.Z".
We have backfilled git tags in the new "vX.Y.Z" scheme. Any distributions or build scripts which rely on the git tag scheme should update to the new scheme.
The canonical version of these notes (with links) is on readthedocs.
This release substantially improves our internal distribution for generating integers. This release has the most visible effect on "integers()", but m
This release substantially improves our internal distribution for generating integers. This release has the most visible effect on "integers()", but may incidentally improve other strategies which draw integers internally.
Our integers distribution had two problems. First, it had jagged discontinuities at certain values where we switched sampling approaches. Second, it used a different distribution for bounded and unbounded ranges, which resulted in "st.integers()" and "st.integers(-264, 264)" producing very different distributions despite being semantically similar.
We now use a smooth distribution for both "st.integers()" and "st.integers(a, b)", which fixes both of these issues. This should substantially improve our testing power in certain cases.
The only way this release should be user-visible is that it finds more bugs! If this release is user-visible in other ways - for example, because it is slower, or produces a worse distribution in some cases - please open an issue.
The canonical version of these notes (with links) is on readthedocs.
This release drops support for end-of-life Django 4.2.
This release drops support for end-of-life Django 4.2.
The canonical version of these notes (with links) is on readthedocs.
This patch improves our type hints for ".filter()" to work with "typing.TypeGuard". For example:
This patch improves our type hints for ".filter()" to work with "typing.TypeGuard". For example:
from typing import TypeGuard
from hypothesis import strategies as st
def is_str(x: object) -> TypeGuard[str]: return isinstance(x, str)
s = st.from_type(object).filter(is_str)
reveal_type(s)
The canonical version of these notes (with links) is on readthedocs.
This patch improves our type hints for |.filter| to work with |TypeGuard|. For example:
from typing import TypeGuard
from hypothesis import strategies as st
def is_str(x: object) -> TypeGuard[str]:
return isinstance(x, str)
s = st.from_type(object).filter(is_str)
# previously: SearchStrategy[object]
# now: SearchStrategy[str]
reveal_type(s)
This patch adds a shrinking pass that tries natural text transformations - unicode decomposition (NFD/NFKD) and case mapping - on individual character
This patch adds a shrinking pass that tries natural text transformations - unicode decomposition (NFD/NFKD) and case mapping - on individual characters in string choices. Failures involving e.g. ""À" != "À".lower()" will now reliably shrink to ""A"" rather than sometimes getting stuck on the high-codepoint accented form (issue #4725).
The canonical version of these notes (with links) is on readthedocs.
This patch improves the "Phase.explain" phase so that simple cases like "assert n1 == n2" no longer get a misleading "# or any other generated value"
This patch improves the "Phase.explain" phase so that simple cases like "assert n1 == n2" no longer get a misleading "# or any other generated value" comment (issue #4715). Before falling back to random sampling, we now also try borrowing values from each other arg slice with matching shape.
The canonical version of these notes (with links) is on readthedocs.
This patch fixes a rare internal error during "Phase.explain" introduced in version 6.149.0 for certain strategies (issue #4708).
This patch fixes a rare internal error during "Phase.explain" introduced in version 6.149.0 for certain strategies (issue #4708).
The canonical version of these notes (with links) is on readthedocs.
This patch fixes a rare internal error during |Phase.explain| introduced in 6.149.0 for certain strategies (4708).
The "hypothesis-urandom" backend now reads from "/dev/urandom" with buffering disabled, which improves the control of those hooking "/dev/urandom" to
The "hypothesis-urandom" backend now reads from "/dev/urandom" with buffering disabled, which improves the control of those hooking "/dev/urandom" to change or read Hypothesis's random decisions.
The canonical version of these notes (with links) is on readthedocs.
This release further improves printing of generated values, building on the changes in version 6.151.11.
This release further improves printing of generated values, building on the changes in version 6.151.11.
Principle changes:
In many cases where we would have printed a complex expression producing a value, we now print the repr (or a pretty-printed version of it).
Additionally, in some cases where we would print a complex expression that involved a lambda, we are now able to simplify that expression into a more readable one.
The canonical version of these notes (with links) is on readthedocs.
Improve some internal type hints.
Improve some internal type hints.
The canonical version of these notes (with links) is on readthedocs.
Hypothesis generally recommends that the ".hypothesis" directory not be checked into version control. As a result, Hypothesis now automatically create
Hypothesis generally recommends that the ".hypothesis" directory not be checked into version control. As a result, Hypothesis now automatically creates a ".gitignore" with "*" in the ".hypothesis" directory, which excludes it from being tracked by git.
If you do want to check ".hypothesis" into git, you can remove the ".gitignore" file. Hypothesis will not re-create it unless the entire ".hypothesis" directory is removed.
The canonical version of these notes (with links) is on readthedocs.
This patch fixes our "from_regex()" type annotations so that "from_regex(..., alphabet=None)" is accepted.
This patch fixes our "from_regex()" type annotations so that "from_regex(..., alphabet=None)" is accepted.
This patch also adds unicode line breaks and thai combining vowels to our list of constant strings to upweight at runtime.
The canonical version of these notes (with links) is on readthedocs.
This patch fixes our |st.from_regex| type annotations so that from_regex(..., alphabet=None) is accepted.
This patch also adds unicode line breaks and thai combining vowels to our list of constant strings to upweight at runtime.
This patch removes some newly unnecessary "# type: ignore" comments.
This patch removes some newly unnecessary "# type: ignore" comments.
The canonical version of these notes (with links) is on readthedocs.
This release improves "Phase.explain" output by excluding pytest- related syrupy files as a possible source of variation.
This release improves "Phase.explain" output by excluding pytest- related syrupy files as a possible source of variation.
The canonical version of these notes (with links) is on readthedocs.
This release improves |Phase.explain| output by excluding pytest-related syrupy files as a possible source of variation.
This patch improves printing of primitive values generated from complex strategies, particularly for "from_regex()". Previously, these would often be
This patch improves printing of primitive values generated from complex strategies, particularly for "from_regex()". Previously, these would often be printed as function calls desctribing how to construct them. Now they will always be printed as a literal value.
The canonical version of these notes (with links) is on readthedocs.
This patch improves printing of primitive values generated from complex strategies, particularly for ~hypothesis.strategies.from_regex. Previously, these would often be printed as function calls desctribing how to construct them. Now they will always be printed as a literal value.
When shrinking takes more than five minutes, Hypothesis now prints the "@seed" decorator alongside the slow-shrinking warning so you can reproduce the
When shrinking takes more than five minutes, Hypothesis now prints the "@seed" decorator alongside the slow-shrinking warning so you can reproduce the failure.
Thanks to Ian Hunt-Isaak for this contribution!
The canonical version of these notes (with links) is on readthedocs.
*The canonical version of these notes (with links) is on readthedocs.*
Remove some old unused code.
The canonical version of these notes (with links) is on readthedocs.
This patch fixes a crash when "sys.modules" contains unhashable values, such as "SimpleNamespace" objects (issue #4660).
This patch fixes a crash when "sys.modules" contains unhashable values, such as "SimpleNamespace" objects (issue #4660).
The canonical version of these notes (with links) is on readthedocs.
This patch fixes a crash when sys.modules contains unhashable values, such as ~types.SimpleNamespace objects (4660).
This patch updates our vendored list of top-level domains, which is used by the provisional "domains()" strategy.
This patch updates our vendored list of top-level domains, which is used by the provisional "domains()" strategy.
The canonical version of these notes (with links) is on readthedocs.
This patch updates our vendored list of top-level domains, which is used by the provisional ~hypothesis.provisional.domains strategy.
This patch fixes several duplicate word typos in comments and documentation.
This patch fixes several duplicate word typos in comments and documentation.
The canonical version of these notes (with links) is on readthedocs.
This patch fixes several duplicate word typos in comments and documentation.
This patch teaches our pytest plugin to :ref: find interesting constants when pytest is collecting tests, to avoid arbitrarily attributing the latency
This patch teaches our pytest plugin to find interesting constants when pytest is collecting tests, to avoid arbitrarily attributing the latency to whichever test function happened to be executed first (issue #4627).
[The canonical version of these notes (with links) is on readthedocs.](https://hypothesis.readthedocs.io/en/latest/changelog.html#v6-151-5)
This patch adjusts how we compute the stopping threshold introduced in version 6.151.3, while still maintaining 99% confidence that <1% of test cases
This patch adjusts how we compute the stopping threshold introduced in version 6.151.3, while still maintaining 99% confidence that <1% of test cases pass.
The canonical version of these notes (with links) is on readthedocs.
This patch adjusts how we compute the stopping threshold introduced in 6.151.3, while still maintaining 99% confidence that <1% of test cases pass.
This patch makes Hypothesis more tolerant of slow-to-satisfy "assume()" calls. Previously, Hypothesis would give up after "max_examples * 10" attempts
This patch makes Hypothesis more tolerant of slow-to-satisfy "assume()" calls. Previously, Hypothesis would give up after "max_examples * 10" attempts; now it uses a statistical test to stop only when 99% confident that <1% of examples would pass (issue #4623).
Thanks to @ajdavis for this improvement!
The canonical version of these notes (with links) is on readthedocs.
Format our code with the latest version of black.
Format our code with the latest version of black.
The canonical version of these notes (with links) is on readthedocs.
Improve internal categorization of test cases when an alternative backend raises "BackendCannotProceed".
Improve internal categorization of test cases when an alternative backend raises "BackendCannotProceed".
The canonical version of these notes (with links) is on readthedocs.
Improve internal categorization of test cases when an alternative backend raises |BackendCannotProceed|.
Add 2025.12 to the list of recognized Array API versions in "hypothesis.extra.array_api".
Add 2025.12 to the list of recognized Array API versions in "hypothesis.extra.array_api".
The canonical version of these notes (with links) is on readthedocs.
Add 2025.12 to the list of recognized Array API versions in hypothesis.extra.array_api.
Hypothesis now generates powers of 2 more often when using "integers()".
Hypothesis now generates powers of 2 more often when using "integers()".
The canonical version of these notes (with links) is on readthedocs.
Hypothesis now generates powers of 2 more often when using |st.integers|.
Update some internal type hints.
Update some internal type hints.
The canonical version of these notes (with links) is on readthedocs.
Now, the historical behavior is working-but-deprecated, or an error if you explicitly pass "min_leaves=".
This patch fixes a bug where "recursive()" would fail in cases where the "extend=" function does not reference it's argument - which was assumed by the recent "min_leaves=" feature, because the strategy can't actually recurse otherwise. (issue #4638)
Now, the historical behavior is working-but-deprecated, or an error if you explicitly pass "min_leaves=".
The canonical version of these notes (with links) is on readthedocs.
This patch fixes a bug where |st.recursive| would fail in cases where the extend= function does not reference it's argument - which was assumed by the recent min_leaves= feature, because the strategy can't actually recurse otherwise. (4638)
Now, the historical behavior is working-but-deprecated, or an error if you explicitly pass min_leaves=.
This release adds a "min_leaves" argument to "recursive()", which ensures that generated recursive structures have at least the specified number of le
This release adds a "min_leaves" argument to "recursive()", which ensures that generated recursive structures have at least the specified number of leaf nodes (issue #4205).
The canonical version of these notes (with links) is on readthedocs.
This release adds a min_leaves argument to ~hypothesis.strategies.recursive, which ensures that generated recursive structures have at least the specified number of leaf nodes (4205).
Add type hints to an internal class.
Add type hints to an internal class.
The canonical version of these notes (with links) is on readthedocs.
This release extends the explain-phase "# or any other generated value" comments to sub-arguments within "builds()", "tuples()", and "fixed_dictionari
This release extends the explain-phase "# or any other generated value" comments to sub-arguments within "builds()", "tuples()", and "fixed_dictionaries()".
Previously, these comments only appeared on top-level test arguments. Now, when the explain phase determines that a sub-argument can vary freely without affecting the test failure, you'll see comments like:
Falsifying example: test_foo( obj=MyClass( x=0, # or any other generated value y=True, ), data=( '', # or any other generated value 42, ), )
This makes it easier to understand which parts of complex inputs actually matter for reproducing a failure.
The canonical version of these notes (with links) is on readthedocs.
This release extends the explain-phase # or any other generated value comments to sub-arguments within ~hypothesis.strategies.builds, ~hypothesis.strategies.tuples, and ~hypothesis.strategies.fixed_dictionaries.
Previously, these comments only appeared on top-level test arguments. Now, when the explain phase determines that a sub-argument can vary freely without affecting the test failure, you'll see comments like:
Falsifying example: test_foo(
obj=MyClass(
x=0, # or any other generated value
y=True,
),
data=(
'', # or any other generated value
42,
),
)
This makes it easier to understand which parts of complex inputs actually matter for reproducing a failure.
*The canonical version of these notes (with links) is on readthedocs.*
Clean up an internal helper.
The canonical version of these notes (with links) is on readthedocs.
This patch fixes "from_type()" to properly handle parameterized type aliases created with Python 3.12+'s PEP 695 "type" statement. For example, "st.fr
This patch fixes "from_type()" to properly handle parameterized type aliases created with Python 3.12+'s PEP 695 "type" statement. For example, "st.from_type(A[int])" where "type A[T] = list[T]" now correctly resolves to "lists(integers())" instead of raising a "TypeError" (issue #4628).
The canonical version of these notes (with links) is on readthedocs.
This patch fixes ~hypothesis.strategies.from_type to properly handle parameterized type aliases created with Python 3.12+'s 695 type statement. For example, st.from_type(A[int]) where type A[T] = list[T] now correctly resolves to lists(integers()) instead of raising a TypeError (4628).
Hypothesis now prints a "Verbosity.verbose" log when we switch away from an alternative backend.
Hypothesis now prints a "Verbosity.verbose" log when we switch away from an alternative backend.
The canonical version of these notes (with links) is on readthedocs.
Hypothesis now prints a |Verbosity.verbose| log when we switch away from an alternative backend.
Fixes Ghostwriter output for numpy >= 2.4.0. Also adds support "from_type()" for numpy 2.5.0 nightly (which has not yet been released).
Fixes Ghostwriter output for numpy >= 2.4.0. Also adds support "from_type()" for numpy 2.5.0 nightly (which has not yet been released).
The canonical version of these notes (with links) is on readthedocs.
Fixes Ghostwriter output for numpy >= 2.4.0. Also adds support |st.from_type| for numpy 2.5.0 nightly (which has not yet been released).
".example()" no longer emits "NonInteractiveExampleWarning" when running a python file directly. This means that e.g. "python my_sandbox.py" during ex
".example()" no longer emits "NonInteractiveExampleWarning" when running a python file directly. This means that e.g. "python my_sandbox.py" during exploratory work with ".example()" will no longer raise warnings.
The canonical version of these notes (with links) is on readthedocs.
Add "__dict__" and "__proto__" to the list of constant strings Hypothesis sometimes generates.
Add "dict" and "proto" to the list of constant strings Hypothesis sometimes generates.
The canonical version of these notes (with links) is on readthedocs.
Add __dict__ and __proto__ to the list of constant strings Hypothesis sometimes generates.
When multiple explicit "@example" decorators fail with the same error, Hypothesis now shows only the simplest failing example (by shortlex order) with
When multiple explicit "@example" decorators fail with the same error, Hypothesis now shows only the simplest failing example (by shortlex order) with a note about how many other examples also failed (issue #4520).
To see all failing examples, use "Verbosity.verbose" or higher.
The canonical version of these notes (with links) is on readthedocs.
Fix a bug where we persisted symbolics from solver-based alternative backends in "event()".
Fix a bug where we persisted symbolics from solver-based alternative backends in "event()".
The canonical version of these notes (with links) is on readthedocs.
Fix a bug where we persisted symbolics from solver-based alternative backends in |event|.
This patch improves the error message for "FlakyStrategyDefinition" when the precondition for a rule is flaky (issue #4206).
This patch improves the error message for "FlakyStrategyDefinition" when the precondition for a rule is flaky (issue #4206).
The canonical version of these notes (with links) is on readthedocs.
This patch improves the error message for ~hypothesis.errors.FlakyStrategyDefinition when the precondition for a rule is flaky (4206).
This patch improves the type annotations for "basic_indices()". The return type now accurately reflects the "allow_ellipsis" and "allow_newaxis" param
This patch improves the type annotations for "basic_indices()". The return type now accurately reflects the "allow_ellipsis" and "allow_newaxis" parameters, excluding "EllipsisType" or "None" from the union when those index types are disabled (issue #4607).
Additionally, "assume()" now has overloaded type annotations: "assume(True)" returns "Literal[True]", while "assume(False)" and "assume(None)" return "NoReturn".
The canonical version of these notes (with links) is on readthedocs.
This patch improves the type annotations for ~hypothesis.extra.numpy.basic_indices. The return type now accurately reflects the allow_ellipsis and allow_newaxis parameters, excluding EllipsisType or None from the union when those index types are disabled (4607).
Additionally, ~hypothesis.assume now has overloaded type annotations: assume(True) returns Literal[True], while assume(False) and assume(None) return NoReturn.
*The canonical version of these notes (with links) is on readthedocs.*
Clean up some internal code.
The canonical version of these notes (with links) is on readthedocs.
*The canonical version of these notes (with links) is on readthedocs.*
Document "fuzz_one_input()".
The canonical version of these notes (with links) is on readthedocs.
This patch updates our vendored list of top-level domains, which is used by the provisional "domains()" strategy.
This patch updates our vendored list of top-level domains, which is used by the provisional "domains()" strategy.
The canonical version of these notes (with links) is on readthedocs.
This patch updates our vendored list of top-level domains, which is used by the provisional ~hypothesis.provisional.domains strategy.
Calling "register_profile()" from within a test decorated with "@settings" is now deprecated, to avoid confusion about which settings are used as the…
Calling "register_profile()" from within a test decorated with "@settings" is now deprecated, to avoid confusion about which settings are used as the baseline for the new profile.
The canonical version of these notes (with links) is on readthedocs.
Calling ~hypothesis.settings.register_profile from within a test decorated with @settings is now deprecated, to avoid confusion about which settings are used as the baseline for the new profile.
This release drops support for nose, which ceased development 9 years ago and does not support Python 3.10 or newer.
This release drops support for nose, which ceased development 9 years ago and does not support Python 3.10 or newer.
Hypothesis still supports nose2. While we do not test "nose2" in our CI, we will fix any bugs that get reported.
The canonical version of these notes (with links) is on readthedocs.
Instantiating "Verbosity", "Phase", or "HealthCheck" with an integer, such as "Verbosity(0)", is now deprecated.
"@settings" now accepts equivalent string representations for "settings.verbosity", "settings.phases", and "settings.suppress_health_check". For example:
settings(verbosity=Verbosity.verbose) settings(verbosity="verbose")
settings(phases=[Phase.explicit]) settings(phases=["explicit"])
settings(suppress_health_check=[HealthCheck.filter_too_much]) settings(suppress_health_check=["filter_too_much"])
This release also changes the canonical value of "Verbosity", "Phase", and "HealthCheck" members to a string instead of an integer. For example, "Phase.reuse.value == "explicit"" as of this release, where previously "Phase.reuse.value == 1".
Instantiating "Verbosity", "Phase", or "HealthCheck" with an integer, such as "Verbosity(0)", is now deprecated.
The canonical version of these notes (with links) is on readthedocs.
Refactor some internal logic around strategy definitions.
Refactor some internal logic around strategy definitions.
The canonical version of these notes (with links) is on readthedocs.
Hypothesis previously required attrs as a dependency. This release removes that dependency, so that the only required dependency of Hypothesis is sort
Hypothesis previously required attrs as a dependency. This release removes that dependency, so that the only required dependency of Hypothesis is sortedcontainers.
All attrs-specific features of Hypothesis, such as using "from_type()" with attrs classes, will continue to behave as before.
The canonical version of these notes (with links) is on readthedocs.
Hypothesis previously required attrs as a dependency. This release removes that dependency, so that the only required dependency of Hypothesis is sortedcontainers.
All attrs-specific features of Hypothesis, such as using |st.from_type| with attrs classes, will continue to behave as before.
Tweak how Hypothesis hides internal tracebacks to fix an error under rare conditions (issue #3822).
Tweak how Hypothesis hides internal tracebacks to fix an error under rare conditions (issue #3822).
The canonical version of these notes (with links) is on readthedocs.
Tweak how Hypothesis hides internal tracebacks to fix an error under rare conditions (3822).
Bounding "decimals()" with *other* values that cannot be exactly represented is now deprecated; previously the bounds could be off by one.
This release adds support for "Fraction" objects as "min_value" and "max_value" bounds in "decimals()", if they can be exactly represented as decimals in the target precision (issue #4466).
Bounding "decimals()" with other values that cannot be exactly represented is now deprecated; previously the bounds could be off by one.
The canonical version of these notes (with links) is on readthedocs.
This release adds support for ~fractions.Fraction objects as min_value and max_value bounds in ~hypothesis.strategies.decimals, if they can be exactly represented as decimals in the target precision (4466).
Bounding ~hypothesis.strategies.decimals with other values that cannot be exactly represented is now deprecated; previously the bounds could be off by one.
Your coding agent can read these notes before it upgrades. Set up the MCP server →