From db1f50879da5180af663b05c62ecdc4fb64ab6b3 Mon Sep 17 00:00:00 2001 From: Daniel Sperber Date: Wed, 12 Mar 2025 16:37:23 +0100 Subject: [PATCH 1/4] Class trick not needed for 3.11 --- src/typing_extensions.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/typing_extensions.py b/src/typing_extensions.py index fe492a3f..0d531a3f 100644 --- a/src/typing_extensions.py +++ b/src/typing_extensions.py @@ -2657,7 +2657,9 @@ def __init__(self, getitem): self.__doc__ = _UNPACK_DOC class _UnpackAlias(typing._GenericAlias, _root=True): - __class__ = typing.TypeVar + if sys.version_info[:2] < (3, 11): + # needed for compatibility with Generic[Unpack[Ts]] + __class__ = typing.TypeVar @property def __typing_unpacked_tuple_args__(self): From 53584b13223d9e5e84450d4ae7ea2bb5520dcafd Mon Sep 17 00:00:00 2001 From: Daniel Sperber Date: Wed, 12 Mar 2025 16:50:40 +0100 Subject: [PATCH 2/4] Add changelog entry --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 690bf5d5..a02f48c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,6 +42,9 @@ aliases that have a `Concatenate` special form as their argument. to reflect Python 3.13+ behavior: A value assigned to `__total__` in the class body of a `TypedDict` will be overwritten by the `total` argument of the `TypedDict` constructor. Patch by [Daraan](https://github.com/Daraan), backporting a CPython PR by Jelle Zijlstra. +- Fix for Python 3.11 that now `isinstance(typing_extensions.Unpack[...], TypeVar)` + evaluates to `False`, however still `True` for <3.11. + Patch by [Daraan](https://github.com/Daraan) # Release 4.12.2 (June 7, 2024) From 13508c18cdd0f14c9fd8ea2e58165123e851c66a Mon Sep 17 00:00:00 2001 From: Daniel Sperber Date: Wed, 12 Mar 2025 16:51:26 +0100 Subject: [PATCH 3/4] Add TypeVar inheritance test for Unpack --- src/test_typing_extensions.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/test_typing_extensions.py b/src/test_typing_extensions.py index 17ce28f2..beab0057 100644 --- a/src/test_typing_extensions.py +++ b/src/test_typing_extensions.py @@ -6172,6 +6172,12 @@ def test_equivalent_nested_variadics(self): self.assertEqual(nested_tuple_bare, TupleAliasTsT[Unpack[Tuple[str, int]], object]) self.assertEqual(nested_tuple_bare, TupleAliasTsT[Unpack[Tuple[str]], Unpack[Tuple[int]], object]) + @skipUnless(TYPING_3_11_0, "Needed for backport") + def test_type_var_inheritance(self): + Ts = TypeVarTuple("Ts") + self.assertFalse(isinstance(Unpack[Ts], TypeVar)) + self.assertFalse(isinstance(Unpack[Ts], typing.TypeVar)) + class TypeVarTupleTests(BaseTestCase): From 17545860368712f42b87430b6b02f919bab84d77 Mon Sep 17 00:00:00 2001 From: Daraan Date: Wed, 12 Mar 2025 22:27:14 +0100 Subject: [PATCH 4/4] Update typing_extensions.py --- src/typing_extensions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/typing_extensions.py b/src/typing_extensions.py index 0d531a3f..9589f035 100644 --- a/src/typing_extensions.py +++ b/src/typing_extensions.py @@ -2657,7 +2657,7 @@ def __init__(self, getitem): self.__doc__ = _UNPACK_DOC class _UnpackAlias(typing._GenericAlias, _root=True): - if sys.version_info[:2] < (3, 11): + if sys.version_info < (3, 11): # needed for compatibility with Generic[Unpack[Ts]] __class__ = typing.TypeVar