diff --git a/HypothesisWorks.github.io/_posts/2016-12-10-how-hypothesis-works.md b/HypothesisWorks.github.io/_posts/2016-12-10-how-hypothesis-works.md index 3e1c7da75b..7403b06440 100644 --- a/HypothesisWorks.github.io/_posts/2016-12-10-how-hypothesis-works.md +++ b/HypothesisWorks.github.io/_posts/2016-12-10-how-hypothesis-works.md @@ -61,8 +61,7 @@ bytes from: ```python class TestData: - def draw_bytes(self, n): - ... + def draw_bytes(self, n): ... ``` (note: The Python code in this article isn't an exact copy of what's @@ -237,8 +236,7 @@ distribution hint: ```python class TestData: - def draw_bytes(self, n, distribution=None): - ... + def draw_bytes(self, n, distribution=None): ... ``` Where a distribution function takes a Random object @@ -328,14 +326,11 @@ looks like this: ```python class TestData: - def start_interval(self): - ... + def start_interval(self): ... - def stop_interval(self): - ... + def stop_interval(self): ... - def draw_bytes(self, n): - ... + def draw_bytes(self, n): ... def draw(self, strategy): self.start_interval() diff --git a/hypothesis-python/RELEASE.rst b/hypothesis-python/RELEASE.rst new file mode 100644 index 0000000000..cfbd34824b --- /dev/null +++ b/hypothesis-python/RELEASE.rst @@ -0,0 +1,4 @@ +RELEASE_TYPE: patch + +This patch updates our vendored `list of top-level domains `__, +which is used by the provisional :func:`~hypothesis.provisional.domains` strategy. diff --git a/hypothesis-python/docs/details.rst b/hypothesis-python/docs/details.rst index 568abd38dc..291b46b13e 100644 --- a/hypothesis-python/docs/details.rst +++ b/hypothesis-python/docs/details.rst @@ -524,8 +524,7 @@ transformation before applying :func:`@given `. @given(x=integers()) @pytest.mark.trio - async def test(x): - ... + async def test(x): ... # Illustrative code, inside the pytest-trio plugin @@ -677,8 +676,7 @@ supported use-case, again on a best-effort provisional basis. For example: .. code:: python - def foo_strategy() -> SearchStrategy[Foo]: - ... + def foo_strategy() -> SearchStrategy[Foo]: ... .. class:: hypothesis.strategies.SearchStrategy @@ -752,8 +750,7 @@ converting bytestrings into your objects by hand? .. code:: python @given(st.text()) - def test_foo(s): - ... + def test_foo(s): ... # This is a traditional fuzz target - call it with a bytestring, diff --git a/hypothesis-python/docs/reproducing.rst b/hypothesis-python/docs/reproducing.rst index 68fd74dfc7..bb31fdac71 100644 --- a/hypothesis-python/docs/reproducing.rst +++ b/hypothesis-python/docs/reproducing.rst @@ -100,13 +100,11 @@ same examples each time they are executed, thanks to ``@seed()``: @seed(1234) @given(x=...) - def test(x): - ... + def test(x): ... @seed(6789) - class MyModel(RuleBasedStateMachine): - ... + class MyModel(RuleBasedStateMachine): ... The seed will not be printed if you could simply use ``@example`` instead. diff --git a/hypothesis-python/src/hypothesis/extra/_patching.py b/hypothesis-python/src/hypothesis/extra/_patching.py index 49b15ebc37..2660e04a90 100644 --- a/hypothesis-python/src/hypothesis/extra/_patching.py +++ b/hypothesis-python/src/hypothesis/extra/_patching.py @@ -94,16 +94,20 @@ def __call_node_to_example_dec(self, node, via): # If we have black installed, remove trailing comma, _unless_ there's a comment node = node.with_changes( func=self.decorator_func, - args=[ - a.with_changes( - comma=a.comma - if m.findall(a.comma, m.Comment()) - else cst.MaybeSentinel.DEFAULT - ) - for a in node.args - ] - if black - else node.args, + args=( + [ + a.with_changes( + comma=( + a.comma + if m.findall(a.comma, m.Comment()) + else cst.MaybeSentinel.DEFAULT + ) + ) + for a in node.args + ] + if black + else node.args + ), ) # Note: calling a method on a decorator requires PEP-614, i.e. Python 3.9+, # but plumbing two cases through doesn't seem worth the trouble :-/ diff --git a/hypothesis-python/src/hypothesis/extra/codemods.py b/hypothesis-python/src/hypothesis/extra/codemods.py index b2828c31c3..3de0580ada 100644 --- a/hypothesis-python/src/hypothesis/extra/codemods.py +++ b/hypothesis-python/src/hypothesis/extra/codemods.py @@ -218,9 +218,11 @@ def leave_Call(self, original_node, updated_node): whitespace_after=cst.SimpleWhitespace(""), ) newargs = [ - arg - if arg.keyword or arg.star or p.kind is not Parameter.KEYWORD_ONLY - else arg.with_changes(keyword=cst.Name(p.name), equal=assign_nospace) + ( + arg + if arg.keyword or arg.star or p.kind is not Parameter.KEYWORD_ONLY + else arg.with_changes(keyword=cst.Name(p.name), equal=assign_nospace) + ) for p, arg in zip(params, updated_node.args) ] return updated_node.with_changes(args=newargs) diff --git a/hypothesis-python/src/hypothesis/extra/ghostwriter.py b/hypothesis-python/src/hypothesis/extra/ghostwriter.py index 68e6a85c29..3404088ed0 100644 --- a/hypothesis-python/src/hypothesis/extra/ghostwriter.py +++ b/hypothesis-python/src/hypothesis/extra/ghostwriter.py @@ -770,9 +770,11 @@ def _write_call( subtypes of `except_`, which will be handled in an outer try-except block. """ args = ", ".join( - (v or p.name) - if p.kind is inspect.Parameter.POSITIONAL_ONLY - else f"{p.name}={v or p.name}" + ( + (v or p.name) + if p.kind is inspect.Parameter.POSITIONAL_ONLY + else f"{p.name}={v or p.name}" + ) for v, p in zip_longest(pass_variables, _get_params(func).values()) ) call = f"{_get_qualname(func, include_module=True)}({args})" diff --git a/hypothesis-python/src/hypothesis/extra/pandas/impl.py b/hypothesis-python/src/hypothesis/extra/pandas/impl.py index 4801b1ad46..7b53a8be42 100644 --- a/hypothesis-python/src/hypothesis/extra/pandas/impl.py +++ b/hypothesis-python/src/hypothesis/extra/pandas/impl.py @@ -346,9 +346,11 @@ def result(draw): return pandas.Series( (), index=index, - dtype=dtype - if dtype is not None - else draw(dtype_for_elements_strategy(elements)), + dtype=( + dtype + if dtype is not None + else draw(dtype_for_elements_strategy(elements)) + ), name=draw(name), ) diff --git a/hypothesis-python/src/hypothesis/internal/conjecture/data.py b/hypothesis-python/src/hypothesis/internal/conjecture/data.py index 4e43477c5e..bc850254b9 100644 --- a/hypothesis-python/src/hypothesis/internal/conjecture/data.py +++ b/hypothesis-python/src/hypothesis/internal/conjecture/data.py @@ -1578,9 +1578,11 @@ def as_result(self) -> Union[ConjectureResult, _Overrun]: examples=self.examples, blocks=self.blocks, output=self.output, - extra_information=self.extra_information - if self.extra_information.has_information() - else None, + extra_information=( + self.extra_information + if self.extra_information.has_information() + else None + ), has_discards=self.has_discards, target_observations=self.target_observations, tags=frozenset(self.tags), diff --git a/hypothesis-python/src/hypothesis/internal/conjecture/junkdrawer.py b/hypothesis-python/src/hypothesis/internal/conjecture/junkdrawer.py index ec12b028b8..0da103a030 100644 --- a/hypothesis-python/src/hypothesis/internal/conjecture/junkdrawer.py +++ b/hypothesis-python/src/hypothesis/internal/conjecture/junkdrawer.py @@ -110,12 +110,10 @@ def __len__(self): return len(self.__underlying) @overload - def __getitem__(self, i: int) -> int: - ... # pragma: no cover + def __getitem__(self, i: int) -> int: ... # pragma: no cover @overload - def __getitem__(self, i: slice) -> "IntList": - ... # pragma: no cover + def __getitem__(self, i: slice) -> "IntList": ... # pragma: no cover def __getitem__(self, i: Union[int, slice]) -> "Union[int, IntList]": if isinstance(i, slice): diff --git a/hypothesis-python/src/hypothesis/internal/conjecture/shrinker.py b/hypothesis-python/src/hypothesis/internal/conjecture/shrinker.py index 39a515d296..b762b89c96 100644 --- a/hypothesis-python/src/hypothesis/internal/conjecture/shrinker.py +++ b/hypothesis-python/src/hypothesis/internal/conjecture/shrinker.py @@ -627,16 +627,16 @@ def explain(self): # This *can't* be a shrink because none of the components were. assert shrink_target is self.shrink_target if result.status == Status.VALID: - self.shrink_target.slice_comments[ - (0, 0) - ] = "The test sometimes passed when commented parts were varied together." + self.shrink_target.slice_comments[(0, 0)] = ( + "The test sometimes passed when commented parts were varied together." + ) break # Test passed, this param can't vary freely. elif self.__predicate(result): # pragma: no branch n_same_failures_together += 1 if n_same_failures_together >= 100: - self.shrink_target.slice_comments[ - (0, 0) - ] = "The test always failed when commented parts were varied together." + self.shrink_target.slice_comments[(0, 0)] = ( + "The test always failed when commented parts were varied together." + ) break def greedy_shrink(self): diff --git a/hypothesis-python/src/hypothesis/internal/escalation.py b/hypothesis-python/src/hypothesis/internal/escalation.py index 9261d2aefc..c3c678d239 100644 --- a/hypothesis-python/src/hypothesis/internal/escalation.py +++ b/hypothesis-python/src/hypothesis/internal/escalation.py @@ -142,9 +142,11 @@ def from_exception(cls, exception: BaseException, /) -> "InterestingOrigin": # to support introspection when debugging, so we can use that unconditionally. cls.from_exception(exception.__context__) if exception.__context__ else (), # We distinguish exception groups by the inner exceptions, as for __context__ - tuple(map(cls.from_exception, exception.exceptions)) - if isinstance(exception, BaseExceptionGroup) - else (), + ( + tuple(map(cls.from_exception, exception.exceptions)) + if isinstance(exception, BaseExceptionGroup) + else () + ), ) diff --git a/hypothesis-python/src/hypothesis/provisional.py b/hypothesis-python/src/hypothesis/provisional.py index dec1abfc61..a6f1c4afc5 100644 --- a/hypothesis-python/src/hypothesis/provisional.py +++ b/hypothesis-python/src/hypothesis/provisional.py @@ -146,9 +146,11 @@ def domains( _url_fragments_strategy = ( st.lists( st.builds( - lambda char, encode: f"%{ord(char):02X}" - if (encode or char not in FRAGMENT_SAFE_CHARACTERS) - else char, + lambda char, encode: ( + f"%{ord(char):02X}" + if (encode or char not in FRAGMENT_SAFE_CHARACTERS) + else char + ), st.characters(min_codepoint=0, max_codepoint=255), st.booleans(), ), diff --git a/hypothesis-python/src/hypothesis/strategies/_internal/core.py b/hypothesis-python/src/hypothesis/strategies/_internal/core.py index 234b8de822..8b5f1de4f1 100644 --- a/hypothesis-python/src/hypothesis/strategies/_internal/core.py +++ b/hypothesis-python/src/hypothesis/strategies/_internal/core.py @@ -1835,9 +1835,11 @@ def _composite(f): params = params[1:] newsig = sig.replace( parameters=params, - return_annotation=SearchStrategy - if sig.return_annotation is sig.empty - else SearchStrategy[sig.return_annotation], + return_annotation=( + SearchStrategy + if sig.return_annotation is sig.empty + else SearchStrategy[sig.return_annotation] + ), ) @defines_strategy() diff --git a/hypothesis-python/src/hypothesis/vendor/pretty.py b/hypothesis-python/src/hypothesis/vendor/pretty.py index 056f1795d3..35451b9961 100644 --- a/hypothesis-python/src/hypothesis/vendor/pretty.py +++ b/hypothesis-python/src/hypothesis/vendor/pretty.py @@ -764,7 +764,7 @@ def for_type_by_name(type_module, type_name, func): """Add a pretty printer for a type specified by the module and name of a type rather than the type object itself.""" key = (type_module, type_name) - oldfunc = _deferred_type_pprinters.get(key, None) + oldfunc = _deferred_type_pprinters.get(key) _deferred_type_pprinters[key] = func return oldfunc diff --git a/hypothesis-python/src/hypothesis/vendor/tlds-alpha-by-domain.txt b/hypothesis-python/src/hypothesis/vendor/tlds-alpha-by-domain.txt index 589b768abd..c520fc063e 100644 --- a/hypothesis-python/src/hypothesis/vendor/tlds-alpha-by-domain.txt +++ b/hypothesis-python/src/hypothesis/vendor/tlds-alpha-by-domain.txt @@ -1,4 +1,4 @@ -# Version 2023122300, Last Updated Sat Dec 23 07:07:01 2023 UTC +# Version 2024020300, Last Updated Sat Feb 3 07:07:01 2024 UTC AAA AARP ABB @@ -96,7 +96,6 @@ BA BABY BAIDU BANAMEX -BANANAREPUBLIC BAND BANK BAR @@ -855,7 +854,6 @@ OFFICE OKINAWA OLAYAN OLAYANGROUP -OLDNAVY OLLO OM OMEGA diff --git a/hypothesis-python/tests/conjecture/test_shrinker.py b/hypothesis-python/tests/conjecture/test_shrinker.py index bd8cae75f0..49c46a077c 100644 --- a/hypothesis-python/tests/conjecture/test_shrinker.py +++ b/hypothesis-python/tests/conjecture/test_shrinker.py @@ -438,8 +438,7 @@ def shrinker(data): data.stop_example() data.start_example(1) interesting = ( - data.draw_integer(0, 2**8 - 1) > 0 - and data.draw_integer(0, 2**16 - 1) > 0 + data.draw_integer(0, 2**8 - 1) > 0 and data.draw_integer(0, 2**16 - 1) > 0 ) data.stop_example() if interesting: diff --git a/hypothesis-python/tests/cover/test_filter_rewriting.py b/hypothesis-python/tests/cover/test_filter_rewriting.py index 42cc60310e..d6b36d43ce 100644 --- a/hypothesis-python/tests/cover/test_filter_rewriting.py +++ b/hypothesis-python/tests/cover/test_filter_rewriting.py @@ -410,7 +410,8 @@ def test_filter_rewriting_text_partial_len(data, strategy, predicate, start, end s = strategy.filter(predicate) assert isinstance(s, LazyStrategy) - assert isinstance(inner := unwrap_strategies(s), TextStrategy) + inner = unwrap_strategies(s) + assert isinstance(inner, TextStrategy) assert inner.min_size == start assert inner.max_size == end value = data.draw(s) @@ -427,7 +428,8 @@ def test_can_rewrite_multiple_length_filters_if_not_lambdas(data): .filter(partial(max_len, 4)) ) assert isinstance(s, LazyStrategy) - assert isinstance(inner := unwrap_strategies(s), TextStrategy) + inner = unwrap_strategies(s) + assert isinstance(inner, TextStrategy) assert inner.min_size == 2 assert inner.max_size == 4 value = data.draw(s) diff --git a/hypothesis-python/tests/cover/test_lookup.py b/hypothesis-python/tests/cover/test_lookup.py index dfaab8f5e0..f0907c9275 100644 --- a/hypothesis-python/tests/cover/test_lookup.py +++ b/hypothesis-python/tests/cover/test_lookup.py @@ -1056,8 +1056,7 @@ def test_constructor_is_more_important(data): data.draw(st.builds(AnnotatedConstructor)) -def use_signature(self, value: str) -> None: - ... +def use_signature(self, value: str) -> None: ... class AnnotatedConstructorWithSignature(typing.Generic[_ValueType]): @@ -1070,8 +1069,7 @@ def __init__(self, value: int) -> None: assert isinstance(value, str) -def selfless_signature(value: str) -> None: - ... +def selfless_signature(value: str) -> None: ... class AnnotatedConstructorWithSelflessSignature(AnnotatedConstructorWithSignature): diff --git a/hypothesis-python/tests/cover/test_lookup_py39.py b/hypothesis-python/tests/cover/test_lookup_py39.py index e3bc1a9f3f..a571e9c78e 100644 --- a/hypothesis-python/tests/cover/test_lookup_py39.py +++ b/hypothesis-python/tests/cover/test_lookup_py39.py @@ -137,8 +137,7 @@ def test_can_register_builtin_list(): @typing.runtime_checkable class Fooable(typing.Protocol[T]): - def foo(self): - ... + def foo(self): ... class FooableConcrete(tuple): diff --git a/hypothesis-python/tests/cover/test_regex.py b/hypothesis-python/tests/cover/test_regex.py index db5a331ba2..f56caf0e0f 100644 --- a/hypothesis-python/tests/cover/test_regex.py +++ b/hypothesis-python/tests/cover/test_regex.py @@ -183,16 +183,12 @@ def test_any_doesnt_generate_newline(): @pytest.mark.parametrize("pattern", [re.compile("\\A.\\Z", re.DOTALL), "(?s)\\A.\\Z"]) def test_any_with_dotall_generate_newline(pattern): - find_any( - st.from_regex(pattern), lambda s: s == "\n", settings(max_examples=10**6) - ) + find_any(st.from_regex(pattern), lambda s: s == "\n", settings(max_examples=10**6)) @pytest.mark.parametrize("pattern", [re.compile(b"\\A.\\Z", re.DOTALL), b"(?s)\\A.\\Z"]) def test_any_with_dotall_generate_newline_binary(pattern): - find_any( - st.from_regex(pattern), lambda s: s == b"\n", settings(max_examples=10**6) - ) + find_any(st.from_regex(pattern), lambda s: s == b"\n", settings(max_examples=10**6)) @pytest.mark.parametrize( diff --git a/hypothesis-python/tests/cover/test_slices.py b/hypothesis-python/tests/cover/test_slices.py index a3bf3da018..1ab11c3cc3 100644 --- a/hypothesis-python/tests/cover/test_slices.py +++ b/hypothesis-python/tests/cover/test_slices.py @@ -65,9 +65,7 @@ def test_slices_will_shrink(size): @given(st.integers(1, 1000)) @settings(deadline=None) def test_step_will_be_negative(size): - find_any( - st.slices(size), lambda x: (x.step or 1) < 0, settings(max_examples=10**6) - ) + find_any(st.slices(size), lambda x: (x.step or 1) < 0, settings(max_examples=10**6)) @given(st.integers(1, 1000)) diff --git a/hypothesis-python/tests/ghostwriter/recorded/re_compile_unittest.txt b/hypothesis-python/tests/ghostwriter/recorded/re_compile_unittest.txt index 955fec7456..392a432760 100644 --- a/hypothesis-python/tests/ghostwriter/recorded/re_compile_unittest.txt +++ b/hypothesis-python/tests/ghostwriter/recorded/re_compile_unittest.txt @@ -7,6 +7,7 @@ from hypothesis import given, strategies as st class TestFuzzCompile(unittest.TestCase): + @given(pattern=st.text(), flags=st.just(0)) def test_fuzz_compile(self, pattern, flags): re.compile(pattern=pattern, flags=flags) diff --git a/hypothesis-python/tests/ghostwriter/recorded/sorted_self_error_equivalent_2error_unittest.txt b/hypothesis-python/tests/ghostwriter/recorded/sorted_self_error_equivalent_2error_unittest.txt index ce5086b083..f05014e1bd 100644 --- a/hypothesis-python/tests/ghostwriter/recorded/sorted_self_error_equivalent_2error_unittest.txt +++ b/hypothesis-python/tests/ghostwriter/recorded/sorted_self_error_equivalent_2error_unittest.txt @@ -6,6 +6,7 @@ from hypothesis import given, reject, strategies as st, target class TestEquivalentSortedSorted(unittest.TestCase): + @given( iterable=st.one_of(st.iterables(st.integers()), st.iterables(st.text())), key=st.none(), diff --git a/pyproject.toml b/pyproject.toml index 99572fe97e..c847aa82e9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,4 +1,8 @@ [tool.ruff] +line-length = 125 +target-version = "py38" + +[tool.ruff.lint] select = [ "ASYNC", # flake8-async "B", # flake8-bugbear @@ -53,6 +57,7 @@ ignore = [ "PT023", "PT027", "RUF001", # don't break our tests by rewriting confusables + "RUF017", "SIM102", "SIM105", "SIM108", @@ -61,14 +66,12 @@ ignore = [ "SIM300", "UP031", ] -line-length = 125 -target-version = "py38" exclude = [ "hypothesis-python/src/hypothesis/internal/conjecture/shrinking/learned_dfas.py", ] -[tool.ruff.per-file-ignores] +[tool.ruff.lint.per-file-ignores] "hypothesis-python/src/hypothesis/core.py" = ["B030", "B904", "FBT001"] "hypothesis-python/src/hypothesis/internal/compat.py" = ["F401"] "hypothesis-python/tests/nocover/test_imports.py" = ["F403", "F405"] diff --git a/requirements/coverage.txt b/requirements/coverage.txt index 64899393be..fc7bf97319 100644 --- a/requirements/coverage.txt +++ b/requirements/coverage.txt @@ -10,13 +10,13 @@ async-timeout==4.0.3 # via redis attrs==23.2.0 # via hypothesis (hypothesis-python/setup.py) -black==23.12.1 +black==24.1.1 # via -r requirements/coverage.in click==8.1.7 # via # -r requirements/coverage.in # black -coverage==7.4.0 +coverage==7.4.1 # via -r requirements/coverage.in dpcontracts==0.6.0 # via -r requirements/coverage.in @@ -26,7 +26,7 @@ exceptiongroup==1.2.0 ; python_version < "3.11" # pytest execnet==2.0.2 # via pytest-xdist -fakeredis==2.20.1 +fakeredis==2.21.0 # via -r requirements/coverage.in iniconfig==2.0.0 # via pytest @@ -53,15 +53,15 @@ pathspec==0.12.1 # via black pexpect==4.9.0 # via -r requirements/test.in -platformdirs==4.1.0 +platformdirs==4.2.0 # via black -pluggy==1.3.0 +pluggy==1.4.0 # via pytest ptyprocess==0.7.0 # via pexpect pyarrow==15.0.0 # via -r requirements/coverage.in -pytest==7.4.4 +pytest==8.0.0 # via # -r requirements/test.in # pytest-xdist @@ -71,7 +71,7 @@ python-dateutil==2.8.2 # via # -r requirements/coverage.in # pandas -pytz==2023.3.post1 +pytz==2024.1 # via # -r requirements/coverage.in # pandas diff --git a/requirements/fuzzing.txt b/requirements/fuzzing.txt index 448f365bde..9eeaec16fe 100644 --- a/requirements/fuzzing.txt +++ b/requirements/fuzzing.txt @@ -6,22 +6,20 @@ # annotated-types==0.6.0 # via -r requirements/coverage.in -ansi2html==1.9.1 - # via dash async-timeout==4.0.3 # via redis attrs==23.2.0 # via # hypothesis # hypothesis (hypothesis-python/setup.py) -black==23.12.1 +black==24.1.1 # via # -r requirements/coverage.in # hypofuzz # hypothesis blinker==1.7.0 # via flask -certifi==2023.11.17 +certifi==2024.2.2 # via requests charset-normalizer==3.3.2 # via requests @@ -31,11 +29,11 @@ click==8.1.7 # black # flask # hypothesis -coverage==7.4.0 +coverage==7.4.1 # via # -r requirements/coverage.in # hypofuzz -dash==2.14.2 +dash==2.15.0 # via hypofuzz dash-core-components==2.0.0 # via dash @@ -52,13 +50,13 @@ exceptiongroup==1.2.0 ; python_version < "3.11" # pytest execnet==2.0.2 # via pytest-xdist -fakeredis==2.20.1 +fakeredis==2.21.0 # via -r requirements/coverage.in -flask==3.0.1 +flask==3.0.2 # via dash -hypofuzz==23.12.1 +hypofuzz==24.2.1 # via -r requirements/fuzzing.in -hypothesis[cli]==6.96.2 +hypothesis[cli]==6.97.5 # via # hypofuzz # hypothesis @@ -80,7 +78,7 @@ libcst==1.1.0 # hypofuzz markdown-it-py==3.0.0 # via rich -markupsafe==2.1.4 +markupsafe==2.1.5 # via # jinja2 # werkzeug @@ -110,11 +108,11 @@ pathspec==0.12.1 # via black pexpect==4.9.0 # via -r requirements/test.in -platformdirs==4.1.0 +platformdirs==4.2.0 # via black plotly==5.18.0 # via dash -pluggy==1.3.0 +pluggy==1.4.0 # via pytest psutil==5.9.8 # via hypofuzz @@ -124,7 +122,7 @@ pyarrow==15.0.0 # via -r requirements/coverage.in pygments==2.17.2 # via rich -pytest==7.4.4 +pytest==8.0.0 # via # -r requirements/test.in # hypofuzz @@ -135,7 +133,7 @@ python-dateutil==2.8.2 # via # -r requirements/coverage.in # pandas -pytz==2023.3.post1 +pytz==2024.1 # via # -r requirements/coverage.in # pandas @@ -177,7 +175,7 @@ typing-inspect==0.9.0 # via libcst tzdata==2023.4 # via pandas -urllib3==2.1.0 +urllib3==2.2.0 # via requests werkzeug==3.0.1 # via diff --git a/requirements/test.txt b/requirements/test.txt index 01d7e5d116..f78a472249 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -18,11 +18,11 @@ packaging==23.2 # via pytest pexpect==4.9.0 # via -r requirements/test.in -pluggy==1.3.0 +pluggy==1.4.0 # via pytest ptyprocess==0.7.0 # via pexpect -pytest==7.4.4 +pytest==8.0.0 # via # -r requirements/test.in # pytest-xdist diff --git a/requirements/tools.txt b/requirements/tools.txt index caf6e64067..e1c4ee63e1 100644 --- a/requirements/tools.txt +++ b/requirements/tools.txt @@ -18,13 +18,13 @@ babel==2.14.0 # via sphinx beautifulsoup4==4.12.3 # via sphinx-codeautolink -black==23.12.1 +black==24.1.1 # via shed build==1.0.3 # via pip-tools cachetools==5.3.2 # via tox -certifi==2023.11.17 +certifi==2024.2.2 # via requests cffi==1.16.0 # via cryptography @@ -42,9 +42,9 @@ colorama==0.4.6 # via tox com2ann==0.3.0 # via shed -coverage==7.4.0 +coverage==7.4.1 # via -r requirements/tools.in -cryptography==41.0.7 +cryptography==42.0.2 # via # secretstorage # types-pyopenssl @@ -85,7 +85,7 @@ importlib-metadata==7.0.1 # twine iniconfig==2.0.0 # via pytest -ipython==8.20.0 +ipython==8.21.0 # via -r requirements/tools.in isort==5.13.2 # via shed @@ -111,7 +111,7 @@ libcst==1.1.0 # shed markdown-it-py==3.0.0 # via rich -markupsafe==2.1.4 +markupsafe==2.1.5 # via jinja2 matplotlib-inline==0.1.6 # via ipython @@ -148,12 +148,12 @@ pip-tools==7.3.0 # via -r requirements/tools.in pkginfo==1.9.6 # via twine -platformdirs==4.1.0 +platformdirs==4.2.0 # via # black # tox # virtualenv -pluggy==1.3.0 +pluggy==1.4.0 # via # pytest # tox @@ -177,9 +177,9 @@ pyproject-api==1.6.1 # via tox pyproject-hooks==1.0.0 # via build -pyright==1.1.348 +pyright==1.1.349 # via -r requirements/tools.in -pytest==7.4.4 +pytest==8.0.0 # via -r requirements/tools.in python-dateutil==2.8.2 # via -r requirements/tools.in @@ -206,11 +206,11 @@ rfc3986==2.0.0 # via twine rich==13.7.0 # via twine -ruff==0.1.14 +ruff==0.2.0 # via -r requirements/tools.in secretstorage==3.3.3 # via keyring -shed==2023.6.1 +shed==2024.1.1 # via -r requirements/tools.in six==1.16.0 # via @@ -284,9 +284,9 @@ types-click==7.1.8 # via -r requirements/tools.in types-pkg-resources==0.1.3 # via -r requirements/tools.in -types-pyopenssl==23.3.0.20240106 +types-pyopenssl==24.0.0.20240130 # via types-redis -types-pytz==2023.3.1.1 +types-pytz==2024.1.0.20240203 # via -r requirements/tools.in types-redis==4.6.0.20240106 # via -r requirements/tools.in @@ -300,7 +300,7 @@ typing-extensions==4.9.0 # typing-inspect typing-inspect==0.9.0 # via libcst -urllib3==2.1.0 +urllib3==2.2.0 # via # requests # twine @@ -314,7 +314,7 @@ zipp==3.17.0 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: -pip==23.3.2 +pip==24.0 # via pip-tools setuptools==69.0.3 # via diff --git a/tooling/src/hypothesistooling/__main__.py b/tooling/src/hypothesistooling/__main__.py index 2e39f887ea..adc7caadf0 100644 --- a/tooling/src/hypothesistooling/__main__.py +++ b/tooling/src/hypothesistooling/__main__.py @@ -421,12 +421,12 @@ def run_tox(task, version, *args): "3.8": "3.8.18", "3.9": "3.9.18", "3.10": "3.10.13", - "3.11": "3.11.6", - "3.12": "3.12.0", - "3.13": "3.13.0a2", + "3.11": "3.11.7", + "3.12": "3.12.1", + "3.13": "3.13.0a3", "pypy3.8": "pypy3.8-7.3.11", - "pypy3.9": "pypy3.9-7.3.13", - "pypy3.10": "pypy3.10-7.3.13", + "pypy3.9": "pypy3.9-7.3.15", + "pypy3.10": "pypy3.10-7.3.15", } ci_version = "3.10" # Keep this in sync with GH Actions main.yml and .readthedocs.yml