diff options
| author | YDBot <[email protected]> | 2026-06-21 01:39:12 +0000 |
|---|---|---|
| committer | YDBot <[email protected]> | 2026-06-21 01:39:12 +0000 |
| commit | a092ef090f65bb495a846c2f00af14508becd0c2 (patch) | |
| tree | c802ad236b28d438b0eb1054db75ac3b687eacfe /contrib/python | |
| parent | 84f51d19457d15b671fad2edfaac96ecd9686c4f (diff) | |
| parent | c013015d7d1832b26ec39a320f36729137c3e16d (diff) | |
Sync branches 260621-0136
Diffstat (limited to 'contrib/python')
9 files changed, 78 insertions, 52 deletions
diff --git a/contrib/python/hypothesis/py3/.dist-info/METADATA b/contrib/python/hypothesis/py3/.dist-info/METADATA index da12b2f59f0..087eb11eaaa 100644 --- a/contrib/python/hypothesis/py3/.dist-info/METADATA +++ b/contrib/python/hypothesis/py3/.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: hypothesis -Version: 6.155.1 +Version: 6.155.2 Summary: The property-based testing library for Python Author-email: "David R. MacIver and Zac Hatfield-Dodds" <[email protected]> License-Expression: MPL-2.0 @@ -61,7 +61,7 @@ Provides-Extra: redis Requires-Dist: redis>=3.0.0; extra == "redis" Provides-Extra: crosshair Requires-Dist: hypothesis-crosshair>=0.0.28; extra == "crosshair" -Requires-Dist: crosshair-tool>=0.0.104; extra == "crosshair" +Requires-Dist: crosshair-tool>=0.0.106; extra == "crosshair" Provides-Extra: zoneinfo Requires-Dist: tzdata>=2026.2; (sys_platform == "win32" or sys_platform == "emscripten") and extra == "zoneinfo" Provides-Extra: django @@ -71,7 +71,7 @@ Requires-Dist: watchdog>=4.0.0; extra == "watchdog" Provides-Extra: all Requires-Dist: black>=20.8b0; extra == "all" Requires-Dist: click>=7.0; extra == "all" -Requires-Dist: crosshair-tool>=0.0.104; extra == "all" +Requires-Dist: crosshair-tool>=0.0.106; extra == "all" Requires-Dist: django>=5.2; extra == "all" Requires-Dist: dpcontracts>=0.4; extra == "all" Requires-Dist: hypothesis-crosshair>=0.0.28; extra == "all" diff --git a/contrib/python/hypothesis/py3/hypothesis/strategies/_internal/datetime.py b/contrib/python/hypothesis/py3/hypothesis/strategies/_internal/datetime.py index 62d97b91fee..c5e8bfaaf5c 100644 --- a/contrib/python/hypothesis/py3/hypothesis/strategies/_internal/datetime.py +++ b/contrib/python/hypothesis/py3/hypothesis/strategies/_internal/datetime.py @@ -12,7 +12,6 @@ import datetime as dt import operator as op import warnings import zoneinfo -from calendar import monthrange from functools import cache, partial from importlib import resources from pathlib import Path @@ -88,26 +87,54 @@ def datetime_does_not_exist(value): return value != roundtrip +def _num_days_in_month(year, month): + """Branchless equivalent of ``monthrange(year, month)[1]`` for valid inputs. + + Written using only arithmetic and (in)equality, with no branching or indexing. + This avoids concretizing the input or adding more path constraints than necessary. + """ + leap = (year % 4 == 0) * (1 - (year % 100 == 0) * (year % 400 != 0)) + is_feb = month == 2 + is_30_day = 1 - (month != 4) * (month != 6) * (month != 9) * (month != 11) + return 31 - is_30_day - is_feb * (3 - leap) + + def draw_capped_multipart( data, min_value, max_value, duration_names=DATENAMES + TIMENAMES ): assert isinstance(min_value, (dt.date, dt.time, dt.datetime)) assert type(min_value) == type(max_value) assert min_value <= max_value + + # cap_{low, high} records whether every field drawn so far has equalled + # ``min_value``'s / ``max_value``'s, i.e. whether that bound is still "active" and + # constrains the next field. + # + # cap_{low, high} are conceptually booleans. We define them as integers and interpret + # boolean operations on them as multiplication, so that we don't concretize or + # branch under symbolic backends. See + # https://github.com/HypothesisWorks/hypothesis/issues/4759. + cap_low = 1 + cap_high = 1 result = {} - cap_low, cap_high = True, True for name in duration_names: - low = getattr(min_value if cap_low else dt.datetime.min, name) - high = getattr(max_value if cap_high else dt.datetime.max, name) - if name == "day" and not cap_high: - _, high = monthrange(**result) + natural_low = getattr(dt.datetime.min, name) + if name == "day": + natural_high = _num_days_in_month(result["year"], result["month"]) + else: + natural_high = getattr(dt.datetime.max, name) + # equivalent to: + # low = min_value.<name> if cap_low else natural_low + # high = max_value.<name> if cap_high else natural_high + low = natural_low + cap_low * (getattr(min_value, name) - natural_low) + high = natural_high + cap_high * (getattr(max_value, name) - natural_high) if name == "year": val = data.draw_integer(low, high, shrink_towards=2000) else: val = data.draw_integer(low, high) result[name] = val - cap_low = cap_low and val == low - cap_high = cap_high and val == high + cap_low = cap_low * (val == low) + cap_high = cap_high * (val == high) if hasattr(min_value, "fold"): # The `fold` attribute is ignored in comparison of naive datetimes. # In tz-aware datetimes it would require *very* invasive changes to diff --git a/contrib/python/hypothesis/py3/hypothesis/version.py b/contrib/python/hypothesis/py3/hypothesis/version.py index c513f1ef801..b71a3693b09 100644 --- a/contrib/python/hypothesis/py3/hypothesis/version.py +++ b/contrib/python/hypothesis/py3/hypothesis/version.py @@ -8,5 +8,5 @@ # v. 2.0. If a copy of the MPL was not distributed with this file, You can # obtain one at https://mozilla.org/MPL/2.0/. -__version_info__ = (6, 155, 1) +__version_info__ = (6, 155, 2) __version__ = ".".join(map(str, __version_info__)) diff --git a/contrib/python/hypothesis/py3/ya.make b/contrib/python/hypothesis/py3/ya.make index 30dca82125f..59ebb1c2ba5 100644 --- a/contrib/python/hypothesis/py3/ya.make +++ b/contrib/python/hypothesis/py3/ya.make @@ -2,7 +2,7 @@ PY3_LIBRARY() -VERSION(6.155.1) +VERSION(6.155.2) LICENSE(MPL-2.0) diff --git a/contrib/python/traitlets/py3/.dist-info/METADATA b/contrib/python/traitlets/py3/.dist-info/METADATA index 379f2d9c97b..1867e373948 100644 --- a/contrib/python/traitlets/py3/.dist-info/METADATA +++ b/contrib/python/traitlets/py3/.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: traitlets -Version: 5.15.0 +Version: 5.15.1 Summary: Traitlets Python configuration system Project-URL: Homepage, https://github.com/ipython/traitlets Project-URL: Documentation, https://traitlets.readthedocs.io @@ -56,8 +56,7 @@ Requires-Dist: pydata-sphinx-theme; extra == 'docs' Requires-Dist: sphinx; extra == 'docs' Provides-Extra: test Requires-Dist: argcomplete>=3.0.3; extra == 'test' -Requires-Dist: mypy<1.19,>=1.7.0; (platform_python_implementation == 'PyPy') and extra == 'test' -Requires-Dist: mypy>=1.7.0; extra == 'test' +Requires-Dist: mypy<1.19,>=1.17.0; extra == 'test' Requires-Dist: pre-commit; extra == 'test' Requires-Dist: pytest-mock; extra == 'test' Requires-Dist: pytest-mypy-testing; extra == 'test' diff --git a/contrib/python/traitlets/py3/tests/test_typing.py b/contrib/python/traitlets/py3/tests/test_typing.py index 940447478dc..b1090928a30 100644 --- a/contrib/python/traitlets/py3/tests/test_typing.py +++ b/contrib/python/traitlets/py3/tests/test_typing.py @@ -185,27 +185,27 @@ def mypy_unicode_typing() -> None: t = T() reveal_type( - Unicode( # R: traitlets.traitlets.Unicode[builtins.str, Union[builtins.str, builtins.bytes]] + Unicode( # R: traitlets.traitlets.Unicode[builtins.str, builtins.str | builtins.bytes] "foo" ) ) reveal_type( - Unicode( # R: traitlets.traitlets.Unicode[builtins.str, Union[builtins.str, builtins.bytes]] + Unicode( # R: traitlets.traitlets.Unicode[builtins.str, builtins.str | builtins.bytes] "" ).tag(sync=True) ) reveal_type( - Unicode( # R: traitlets.traitlets.Unicode[Union[builtins.str, None], Union[builtins.str, builtins.bytes, None]] + Unicode( # R: traitlets.traitlets.Unicode[builtins.str | None, builtins.str | builtins.bytes | None] None, allow_none=True ) ) reveal_type( - Unicode( # R: traitlets.traitlets.Unicode[Union[builtins.str, None], Union[builtins.str, builtins.bytes, None]] + Unicode( # R: traitlets.traitlets.Unicode[builtins.str | None, builtins.str | builtins.bytes | None] None, allow_none=True ).tag(sync=True) ) reveal_type( - T.export_format # R: traitlets.traitlets.Unicode[builtins.str, Union[builtins.str, builtins.bytes]] + T.export_format # R: traitlets.traitlets.Unicode[builtins.str, builtins.str | builtins.bytes] ) reveal_type(t.export_format) # R: builtins.str @@ -312,37 +312,37 @@ def mypy_bool_typing() -> None: t = T() reveal_type( - Bool(True) # R: traitlets.traitlets.Bool[builtins.bool, Union[builtins.bool, builtins.int]] + Bool(True) # R: traitlets.traitlets.Bool[builtins.bool, builtins.bool | builtins.int] ) reveal_type( - Bool( # R: traitlets.traitlets.Bool[builtins.bool, Union[builtins.bool, builtins.int]] + Bool( # R: traitlets.traitlets.Bool[builtins.bool, builtins.bool | builtins.int] True ).tag(sync=True) ) reveal_type( - Bool( # R: traitlets.traitlets.Bool[Union[builtins.bool, None], Union[builtins.bool, builtins.int, None]] + Bool( # R: traitlets.traitlets.Bool[builtins.bool | None, builtins.bool | builtins.int | None] None, allow_none=True ) ) reveal_type( - Bool( # R: traitlets.traitlets.Bool[Union[builtins.bool, None], Union[builtins.bool, builtins.int, None]] + Bool( # R: traitlets.traitlets.Bool[builtins.bool | None, builtins.bool | builtins.int | None] None, allow_none=True ).tag(sync=True) ) reveal_type( - T.b # R: traitlets.traitlets.Bool[builtins.bool, Union[builtins.bool, builtins.int]] + T.b # R: traitlets.traitlets.Bool[builtins.bool, builtins.bool | builtins.int] ) reveal_type(t.b) # R: builtins.bool - reveal_type(t.ob) # R: Union[builtins.bool, None] + reveal_type(t.ob) # R: builtins.bool | None reveal_type( - T.b # R: traitlets.traitlets.Bool[builtins.bool, Union[builtins.bool, builtins.int]] + T.b # R: traitlets.traitlets.Bool[builtins.bool, builtins.bool | builtins.int] ) reveal_type( - T.ob # R: traitlets.traitlets.Bool[Union[builtins.bool, None], Union[builtins.bool, builtins.int, None]] + T.ob # R: traitlets.traitlets.Bool[builtins.bool | None, builtins.bool | builtins.int | None] ) - # we would expect this to be Optional[Union[bool, int]], but... - t.b = "foo" # E: Incompatible types in assignment (expression has type "str", variable has type "Union[bool, int]") [assignment] - t.b = None # E: Incompatible types in assignment (expression has type "None", variable has type "Union[bool, int]") [assignment] + # we would expect this to be Optional[bool | int], but... + t.b = "foo" # E: Incompatible types in assignment (expression has type "str", variable has type "bool | int") [assignment] + t.b = None # E: Incompatible types in assignment (expression has type "None", variable has type "bool | int") [assignment] @pytest.mark.mypy_testing @@ -355,21 +355,21 @@ def mypy_int_typing() -> None: reveal_type(Int(True)) # R: traitlets.traitlets.Int[builtins.int, builtins.int] reveal_type(Int(True).tag(sync=True)) # R: traitlets.traitlets.Int[builtins.int, builtins.int] reveal_type( - Int( # R: traitlets.traitlets.Int[Union[builtins.int, None], Union[builtins.int, None]] + Int( # R: traitlets.traitlets.Int[builtins.int | None, builtins.int | None] None, allow_none=True ) ) reveal_type( - Int( # R: traitlets.traitlets.Int[Union[builtins.int, None], Union[builtins.int, None]] + Int( # R: traitlets.traitlets.Int[builtins.int | None, builtins.int | None] None, allow_none=True ).tag(sync=True) ) reveal_type(T.i) # R: traitlets.traitlets.Int[builtins.int, builtins.int] reveal_type(t.i) # R: builtins.int - reveal_type(t.oi) # R: Union[builtins.int, None] + reveal_type(t.oi) # R: builtins.int | None reveal_type(T.i) # R: traitlets.traitlets.Int[builtins.int, builtins.int] reveal_type( - T.oi # R: traitlets.traitlets.Int[Union[builtins.int, None], Union[builtins.int, None]] + T.oi # R: traitlets.traitlets.Int[builtins.int | None, builtins.int | None] ) t.i = "foo" # E: Incompatible types in assignment (expression has type "str", variable has type "int") [assignment] t.i = None # E: Incompatible types in assignment (expression has type "None", variable has type "int") [assignment] @@ -386,18 +386,18 @@ def mypy_cint_typing() -> None: reveal_type(CInt(42)) # R: traitlets.traitlets.CInt[builtins.int, Any] reveal_type(CInt(42).tag(sync=True)) # R: traitlets.traitlets.CInt[builtins.int, Any] reveal_type( - CInt(None, allow_none=True) # R: traitlets.traitlets.CInt[Union[builtins.int, None], Any] + CInt(None, allow_none=True) # R: traitlets.traitlets.CInt[builtins.int | None, Any] ) reveal_type( - CInt( # R: traitlets.traitlets.CInt[Union[builtins.int, None], Any] + CInt( # R: traitlets.traitlets.CInt[builtins.int | None, Any] None, allow_none=True ).tag(sync=True) ) reveal_type(T.i) # R: traitlets.traitlets.CInt[builtins.int, Any] reveal_type(t.i) # R: builtins.int - reveal_type(t.oi) # R: Union[builtins.int, None] + reveal_type(t.oi) # R: builtins.int | None reveal_type(T.i) # R: traitlets.traitlets.CInt[builtins.int, Any] - reveal_type(T.oi) # R: traitlets.traitlets.CInt[Union[builtins.int, None], Any] + reveal_type(T.oi) # R: traitlets.traitlets.CInt[builtins.int | None, Any] @pytest.mark.mypy_testing @@ -416,17 +416,17 @@ def mypy_tcp_typing() -> None: sync=True ) ) - reveal_type(t.otcp) # R: Union[tuple[builtins.str, builtins.int], None] + reveal_type(t.otcp) # R: tuple[builtins.str, builtins.int] | None reveal_type( - T.otcp # R: traitlets.traitlets.TCPAddress[Union[tuple[builtins.str, builtins.int], None], Union[tuple[builtins.str, builtins.int], None]] + T.otcp # R: traitlets.traitlets.TCPAddress[tuple[builtins.str, builtins.int] | None, tuple[builtins.str, builtins.int] | None] ) reveal_type( - T.otcp.tag( # R: traitlets.traitlets.TCPAddress[Union[tuple[builtins.str, builtins.int], None], Union[tuple[builtins.str, builtins.int], None]] + T.otcp.tag( # R: traitlets.traitlets.TCPAddress[tuple[builtins.str, builtins.int] | None, tuple[builtins.str, builtins.int] | None] sync=True ) ) t.tcp = "foo" # E: Incompatible types in assignment (expression has type "str", variable has type "tuple[str, int]") [assignment] - t.otcp = "foo" # E: Incompatible types in assignment (expression has type "str", variable has type "Optional[tuple[str, int]]") [assignment] + t.otcp = "foo" # E: Incompatible types in assignment (expression has type "str", variable has type "tuple[str, int] | None") [assignment] t.tcp = None # E: Incompatible types in assignment (expression has type "None", variable has type "tuple[str, int]") [assignment] @@ -441,14 +441,14 @@ def mypy_instance_typing() -> None: reveal_type(t.inst) # R: tests.test_typing.Foo reveal_type(T.inst) # R: traitlets.traitlets.Instance[tests.test_typing.Foo] reveal_type(T.inst.tag(sync=True)) # R: traitlets.traitlets.Instance[tests.test_typing.Foo] - reveal_type(t.oinst) # R: Union[tests.test_typing.Foo, None] - reveal_type(t.oinst_string) # R: Union[Any, None] - reveal_type(T.oinst) # R: traitlets.traitlets.Instance[Union[tests.test_typing.Foo, None]] + reveal_type(t.oinst) # R: tests.test_typing.Foo | None + reveal_type(t.oinst_string) # R: Any | None + reveal_type(T.oinst) # R: traitlets.traitlets.Instance[tests.test_typing.Foo | None] reveal_type( - T.oinst.tag( # R: traitlets.traitlets.Instance[Union[tests.test_typing.Foo, None]] + T.oinst.tag( # R: traitlets.traitlets.Instance[tests.test_typing.Foo | None] sync=True ) ) t.inst = "foo" # E: Incompatible types in assignment (expression has type "str", variable has type "Foo") [assignment] - t.oinst = "foo" # E: Incompatible types in assignment (expression has type "str", variable has type "Optional[Foo]") [assignment] + t.oinst = "foo" # E: Incompatible types in assignment (expression has type "str", variable has type "Foo | None") [assignment] t.inst = None # E: Incompatible types in assignment (expression has type "None", variable has type "Foo") [assignment] diff --git a/contrib/python/traitlets/py3/traitlets/_version.py b/contrib/python/traitlets/py3/traitlets/_version.py index fb2dbc36d16..ae4eaf842c4 100644 --- a/contrib/python/traitlets/py3/traitlets/_version.py +++ b/contrib/python/traitlets/py3/traitlets/_version.py @@ -6,7 +6,7 @@ from __future__ import annotations import re # Version string must appear intact for hatch versioning -__version__ = "5.15.0" +__version__ = "5.15.1" # Build up version_info tuple for backwards compatibility pattern = r"(?P<major>\d+).(?P<minor>\d+).(?P<patch>\d+)(?P<rest>.*)" diff --git a/contrib/python/traitlets/py3/traitlets/config/application.py b/contrib/python/traitlets/py3/traitlets/config/application.py index b07ca818fc8..1d475c583c8 100644 --- a/contrib/python/traitlets/py3/traitlets/config/application.py +++ b/contrib/python/traitlets/py3/traitlets/config/application.py @@ -216,7 +216,7 @@ class Application(SingletonConfigurable): log_datefmt = Unicode( "%Y-%m-%d %H:%M:%S", - help="The date format used by logging formatters for `asctime`", + help="The date format used by logging formatters for `logging.Formatter` ``datefmt`` parameter", ).tag(config=True) log_format = Unicode( diff --git a/contrib/python/traitlets/py3/ya.make b/contrib/python/traitlets/py3/ya.make index 545b7dcfca3..7e0b5c22b88 100644 --- a/contrib/python/traitlets/py3/ya.make +++ b/contrib/python/traitlets/py3/ya.make @@ -4,7 +4,7 @@ PY3_LIBRARY() PROVIDES(python_traitlets) -VERSION(5.15.0) +VERSION(5.15.1) LICENSE(BSD-3-Clause) |
