From e810ac4a0e6af9f763f4433863042b34609075a7 Mon Sep 17 00:00:00 2001 From: V3n3RiX Date: Wed, 10 Jul 2024 12:25:06 +0100 Subject: gentoo auto-resync : 10:07:2024 - 12:25:06 --- dev-python/mypy/Manifest | 3 +- dev-python/mypy/files/mypy-1.10.1-py313.patch | 153 ++++++++++++++++++++++++++ dev-python/mypy/mypy-1.10.1.ebuild | 31 +++++- 3 files changed, 181 insertions(+), 6 deletions(-) create mode 100644 dev-python/mypy/files/mypy-1.10.1-py313.patch (limited to 'dev-python/mypy') diff --git a/dev-python/mypy/Manifest b/dev-python/mypy/Manifest index 51e477dc4751..a90ab87d0acc 100644 --- a/dev-python/mypy/Manifest +++ b/dev-python/mypy/Manifest @@ -1,5 +1,6 @@ +AUX mypy-1.10.1-py313.patch 5922 BLAKE2B 3dd0e1feb0351f9b83424c0b9e31ddee82134332c8610f9a211c815701019a3e760a0d3656eb9457f5de0a72d4d0bcfe1bec489462b905b739aa66e25c6c0765 SHA512 f944d7b3e44ed84a8bc7cf333e5806dedf9d9989bb5d356acca088209c0d425abd01c87bd88307771bb3a4e44d4e54124bdd1750dce5bde24ac02f64a02aef7d DIST mypy-1.10.0.gh.tar.gz 3062151 BLAKE2B ddc7354b2b62247387fd04b309c50d4ffa5c1b8af58873cc8787bd17c04069b528850bfb586925aa7df6634a65af6a1e951e4d6036d5bd0e688b8608980510bd SHA512 c936c299d9d4b6911505ef7b7df6f8d7344bd199a2d654e66467291f6e6ba4432dfa7aed5a504e6ec9518d9d53ac85f771e7b31dc6a72e06e79c443547bc2b66 DIST mypy-1.10.1.gh.tar.gz 3062383 BLAKE2B 326fb33e42ad8920a235e510b3d39663f333dc46d0dd3ffc59f4604e9a4f29f0be95f73bac42166aae00b53987d6a2a54446f1f58033dce389c43044dbaa9cdd SHA512 10d29ae145d71911dc7c9b4538371bf1caa64f333984ab3a4cbf9561d7c4e752c68380496489f56d0941f143d6684d84d28f157be578d6f55f1e81d3d47b204c EBUILD mypy-1.10.0.ebuild 3636 BLAKE2B 6743ea6ae4c646ff7024731a3ce102596168db3ad9037816bd3e701933accdb0358f75bcf35bcf30c3f0206f72e56c1f3488e2e25dae450c1deb5751482e8d62 SHA512 4615b351f6254ace77b5646ac2c377c433054da83c40270151f724e62ef45b7016b1905a61ebb18dbc800444a5c1ee881f0acbfc6ef164b9a536bc8099c9f3d8 -EBUILD mypy-1.10.1.ebuild 3640 BLAKE2B c060a7a0352fe49d96442066db59f9527e7109cd1c69ba10b41c7b1b9490f2fae5311c02f3e3c4459cb5e4b1863d34956a2a6e74fc8fa16c27941ec45489998a SHA512 76239def60f6ed7b9ca23d4d16ce13a556ed85ebf8c8e7bed81c2ba2f36992a81fb1831293b0dd95f454ffb47da1a2c3222b7374c25fc82780e8d598f3f0945e +EBUILD mypy-1.10.1.ebuild 4089 BLAKE2B cbc1f669fc62d00096c2c0d210fdbb49948c85ada5ed1d115622a3bbaa3778534cd0c21105e18e114a2880c5e10a3f1978fd337514d0b0cf85546bf1e9d0e3c7 SHA512 15208625c5fc3a77d99d3b2e54e06f2759209d9f6258376e1a90a6f5e5005be359a067cec3050b8decb248e69c0ec91ea88e8e557058592148445cabdae37ff1 MISC metadata.xml 661 BLAKE2B df57cc2dfde5b112f8c26b51ca5cc9e7727d318ee274ea7e1abf448819daf0307f471aeb7c32b19f20e87ce1ccffd47a5529415003765c275523e1b5236f3bb1 SHA512 eddd19c4b0b5211f73f9619f388a799ced108b62bb43d852ed2d01d0b1717e7b9ef118d34b9d61db543c7b47080fb8058c3d35f7359cc456069636f357e080c9 diff --git a/dev-python/mypy/files/mypy-1.10.1-py313.patch b/dev-python/mypy/files/mypy-1.10.1-py313.patch new file mode 100644 index 000000000000..5b9932852e19 --- /dev/null +++ b/dev-python/mypy/files/mypy-1.10.1-py313.patch @@ -0,0 +1,153 @@ +From 29b4303e905f43556043efde95e19f32e04df9a5 Mon Sep 17 00:00:00 2001 +From: Jelle Zijlstra +Date: Fri, 24 May 2024 21:00:17 -0700 +Subject: [PATCH] Fix stubgen for Python 3.13 + +__firstlineno__ and __static_attributes__ are new in 3.13. +__annotate__ will be new in 3.14, so we might as well add it now. +--- + mypy/stubgenc.py | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/mypy/stubgenc.py b/mypy/stubgenc.py +index 29b2636d39cc..7e3ef49c6e9a 100755 +--- a/mypy/stubgenc.py ++++ b/mypy/stubgenc.py +@@ -466,6 +466,9 @@ def is_skipped_attribute(self, attr: str) -> bool: + "__module__", + "__weakref__", + "__annotations__", ++ "__firstlineno__", ++ "__static_attributes__", ++ "__annotate__", + ) + or attr in self.IGNORED_DUNDERS + or is_pybind_skipped_attribute(attr) # For pickling +From 071e3f5f4685470f55dab7fc474e9f89a8e49fb9 Mon Sep 17 00:00:00 2001 +From: hauntsaninja +Date: Fri, 17 May 2024 18:49:27 -0400 +Subject: [PATCH] stubtest: changes for py313 + +Technically it feels like we should be able to put the new dunders on +`type` or something, but that wasn't enough to make false positives go +away. But also we might not want to do that because it only applies to +pure Python types +--- + mypy/stubtest.py | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/mypy/stubtest.py b/mypy/stubtest.py +index dd43c472d67f..d78b71715159 100644 +--- a/mypy/stubtest.py ++++ b/mypy/stubtest.py +@@ -634,6 +634,10 @@ def strip_prefix(s: str, prefix: str) -> str: + if strip_prefix(stub_arg.variable.name, "__") == runtime_arg.name: + return + ++ nonspecific_names = {"object", "args"} ++ if runtime_arg.name in nonspecific_names: ++ return ++ + def names_approx_match(a: str, b: str) -> bool: + a = a.strip("_") + b = b.strip("_") +@@ -1455,6 +1459,8 @@ def verify_typealias( + "__getattr__", # resulting behaviour might be typed explicitly + "__setattr__", # defining this on a class can cause worse type checking + "__vectorcalloffset__", # undocumented implementation detail of the vectorcall protocol ++ "__firstlineno__", ++ "__static_attributes__", + # isinstance/issubclass hooks that type-checkers don't usually care about + "__instancecheck__", + "__subclasshook__", +diff --git a/mypy/plugins/dataclasses.py b/mypy/plugins/dataclasses.py +index dd2eceab217f..edfc6840fc37 100644 +--- a/mypy/plugins/dataclasses.py ++++ b/mypy/plugins/dataclasses.py +@@ -385,6 +385,9 @@ def transform(self) -> bool: + + self._add_dataclass_fields_magic_attribute() + self._add_internal_replace_method(attributes) ++ if self._api.options.python_version >= (3, 13): ++ self._add_dunder_replace(attributes) ++ + if "__post_init__" in info.names: + self._add_internal_post_init_method(attributes) + +@@ -395,6 +398,18 @@ def transform(self) -> bool: + + return True + ++ def _add_dunder_replace(self, attributes: list[DataclassAttribute]) -> None: ++ """Add a `__replace__` method to the class, which is used to replace attributes in the `copy` module.""" ++ args = [attr.to_argument(self._cls.info, of="replace") for attr in attributes] ++ type_vars = [tv for tv in self._cls.type_vars] ++ add_method_to_class( ++ self._api, ++ self._cls, ++ "__replace__", ++ args=args, ++ return_type=Instance(self._cls.info, type_vars), ++ ) ++ + def _add_internal_replace_method(self, attributes: list[DataclassAttribute]) -> None: + """ + Stashes the signature of 'dataclasses.replace(...)' for this specific dataclass +From 160a9c767324460e916978d49f8d770738572119 Mon Sep 17 00:00:00 2001 +From: hauntsaninja +Date: Fri, 17 May 2024 18:23:01 -0400 +Subject: [PATCH 1/2] Support namedtuple.__replace__ in Python 3.13 + +--- + mypy/semanal_namedtuple.py | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/mypy/semanal_namedtuple.py b/mypy/semanal_namedtuple.py +index 9a0be9d9c14c..bdd633a60635 100644 +--- a/mypy/semanal_namedtuple.py ++++ b/mypy/semanal_namedtuple.py +@@ -599,6 +599,12 @@ def add_method( + ret=selftype, + args=[Argument(var, var.type, EllipsisExpr(), ARG_NAMED_OPT) for var in vars], + ) ++ if self.options.python_version >= (3, 13): ++ add_method( ++ "__replace__", ++ ret=selftype, ++ args=[Argument(var, var.type, EllipsisExpr(), ARG_NAMED_OPT) for var in vars], ++ ) + + def make_init_arg(var: Var) -> Argument: + default = default_items.get(var.name, None) + +From 9fcaedb9f757595486ed231dbdb9433151ec669d Mon Sep 17 00:00:00 2001 +From: hauntsaninja +Date: Sat, 18 May 2024 18:40:09 -0400 +Subject: [PATCH 2/2] . + +--- + test-data/unit/check-namedtuple.test | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/test-data/unit/check-namedtuple.test b/test-data/unit/check-namedtuple.test +index 23e109e1af78..b2ba69abb045 100644 +--- a/test-data/unit/check-namedtuple.test ++++ b/test-data/unit/check-namedtuple.test +@@ -1376,3 +1376,17 @@ class Test3(NamedTuple, metaclass=type): # E: Unexpected keyword argument "meta + ... + [builtins fixtures/tuple.pyi] + [typing fixtures/typing-namedtuple.pyi] ++ ++ ++[case testNamedTupleDunderReplace] ++# flags: --python-version 3.13 ++from typing import NamedTuple ++ ++class A(NamedTuple): ++ x: int ++ ++A(x=0).__replace__(x=1) ++A(x=0).__replace__(x="asdf") # E: Argument "x" to "__replace__" of "A" has incompatible type "str"; expected "int" ++A(x=0).__replace__(y=1) # E: Unexpected keyword argument "y" for "__replace__" of "A" ++[builtins fixtures/tuple.pyi] ++[typing fixtures/typing-namedtuple.pyi] diff --git a/dev-python/mypy/mypy-1.10.1.ebuild b/dev-python/mypy/mypy-1.10.1.ebuild index 2f0a69442d64..9bd317074557 100644 --- a/dev-python/mypy/mypy-1.10.1.ebuild +++ b/dev-python/mypy/mypy-1.10.1.ebuild @@ -5,9 +5,9 @@ EAPI=8 DISTUTILS_EXT=1 DISTUTILS_USE_PEP517=setuptools -PYTHON_COMPAT=( python3_{10..12} ) +PYTHON_COMPAT=( python3_{10..13} ) -inherit distutils-r1 multiprocessing +inherit distutils-r1 DESCRIPTION="Optional static typing for Python" HOMEPAGE=" @@ -51,14 +51,27 @@ BDEPEND=" EPYTEST_XDIST=1 distutils_enable_tests pytest +PATCHES=( + # https://github.com/python/mypy/pull/17259 + # https://github.com/python/mypy/pull/17261 + # https://github.com/python/mypy/pull/17290 + "${FILESDIR}/${P}-py313.patch" +) + # frustratingly, mypyc produces non-deterministic output. If ccache is enabled it will be a waste of time, # but simultaneously it might trash your system and fill up the cache with a giant wave of non-reproducible # test files (https://github.com/mypyc/mypyc/issues/1014) export CCACHE_DISABLE=1 -src_compile() { +python_compile() { local -x MYPY_USE_MYPYC=$(usex native-extensions 1 0) - distutils-r1_src_compile + case ${EPYTHON} in + python3.13) + # https://github.com/mypyc/mypyc/issues/1056 + MYPY_USE_MYPYC=0 + ;; + esac + distutils-r1_python_compile } python_test() { @@ -87,6 +100,14 @@ python_test() { mypyc/test/test_run.py::TestRun::run-i64.test::testI64ErrorValuesAndUndefined ) ;; + python3.13) + EPYTEST_DESELECT+=( + # https://github.com/mypyc/mypyc/issues/1056 + mypyc/test + # requires typeshed update + mypy/test/teststubtest.py::StubtestUnit::test_type_alias + ) + ;; esac # Some mypy/test/testcmdline.py::PythonCmdlineSuite tests @@ -104,7 +125,7 @@ python_test() { local failed= local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 - nonfatal epytest -n "$(makeopts_jobs)" --dist=worksteal || failed=1 + nonfatal epytest || failed=1 rm conftest.py pyproject.toml || die -- cgit v1.2.3