mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
gh-91162: Support splitting of unpacked arbitrary-length tuple over TypeVar and TypeVarTuple parameters (alt) (GH-93412)
For example: A[T, *Ts][*tuple[int, ...]] -> A[int, *tuple[int, ...]] A[*Ts, T][*tuple[int, ...]] -> A[*tuple[int, ...], int]
This commit is contained in:
parent
23c9febdc6
commit
3473817106
6 changed files with 108 additions and 129 deletions
|
@ -753,14 +753,11 @@ class GenericAliasSubstitutionTests(BaseTestCase):
|
|||
('generic[*Ts]', '[*tuple_type[int]]', 'generic[int]'),
|
||||
('generic[*Ts]', '[*tuple_type[*Ts]]', 'generic[*Ts]'),
|
||||
('generic[*Ts]', '[*tuple_type[int, str]]', 'generic[int, str]'),
|
||||
('generic[*Ts]', '[str, *tuple_type[int, ...], bool]', 'generic[str, *tuple_type[int, ...], bool]'),
|
||||
('generic[*Ts]', '[tuple_type[int, ...]]', 'generic[tuple_type[int, ...]]'),
|
||||
('generic[*Ts]', '[tuple_type[int, ...], tuple_type[str, ...]]', 'generic[tuple_type[int, ...], tuple_type[str, ...]]'),
|
||||
('generic[*Ts]', '[*tuple_type[int, ...]]', 'generic[*tuple_type[int, ...]]'),
|
||||
|
||||
# Technically, multiple unpackings are forbidden by PEP 646, but we
|
||||
# choose to be less restrictive at runtime, to allow folks room
|
||||
# to experiment. So all three of these should be valid.
|
||||
('generic[*Ts]', '[*tuple_type[int, ...], *tuple_type[str, ...]]', 'generic[*tuple_type[int, ...], *tuple_type[str, ...]]'),
|
||||
('generic[*Ts]', '[*tuple_type[int, ...], *tuple_type[str, ...]]', 'TypeError'),
|
||||
|
||||
('generic[*Ts]', '[*Ts]', 'generic[*Ts]'),
|
||||
('generic[*Ts]', '[T, *Ts]', 'generic[T, *Ts]'),
|
||||
|
@ -772,8 +769,6 @@ class GenericAliasSubstitutionTests(BaseTestCase):
|
|||
('generic[list[T], *Ts]', '[int, str]', 'generic[list[int], str]'),
|
||||
('generic[list[T], *Ts]', '[int, str, bool]', 'generic[list[int], str, bool]'),
|
||||
|
||||
('generic[T, *Ts]', '[*tuple[int, ...]]', 'TypeError'), # Should be generic[int, *tuple[int, ...]]
|
||||
|
||||
('generic[*Ts, T]', '[int]', 'generic[int]'),
|
||||
('generic[*Ts, T]', '[int, str]', 'generic[int, str]'),
|
||||
('generic[*Ts, T]', '[int, str, bool]', 'generic[int, str, bool]'),
|
||||
|
@ -781,6 +776,14 @@ class GenericAliasSubstitutionTests(BaseTestCase):
|
|||
('generic[*Ts, list[T]]', '[int, str]', 'generic[int, list[str]]'),
|
||||
('generic[*Ts, list[T]]', '[int, str, bool]', 'generic[int, str, list[bool]]'),
|
||||
|
||||
('generic[T, *Ts]', '[*tuple_type[int, ...]]', 'generic[int, *tuple_type[int, ...]]'),
|
||||
('generic[*Ts, T]', '[*tuple_type[int, ...]]', 'generic[*tuple_type[int, ...], int]'),
|
||||
('generic[T1, *Ts, T2]', '[*tuple_type[int, ...]]', 'generic[int, *tuple_type[int, ...], int]'),
|
||||
('generic[T, str, *Ts]', '[*tuple_type[int, ...]]', 'generic[int, str, *tuple_type[int, ...]]'),
|
||||
('generic[*Ts, str, T]', '[*tuple_type[int, ...]]', 'generic[*tuple_type[int, ...], str, int]'),
|
||||
('generic[list[T], *Ts]', '[*tuple_type[int, ...]]', 'generic[list[int], *tuple_type[int, ...]]'),
|
||||
('generic[*Ts, list[T]]', '[*tuple_type[int, ...]]', 'generic[*tuple_type[int, ...], list[int]]'),
|
||||
|
||||
('generic[T, *tuple_type[int, ...]]', '[str]', 'generic[str, *tuple_type[int, ...]]'),
|
||||
('generic[T1, T2, *tuple_type[int, ...]]', '[str, bool]', 'generic[str, bool, *tuple_type[int, ...]]'),
|
||||
('generic[T1, *tuple_type[int, ...], T2]', '[str, bool]', 'generic[str, *tuple_type[int, ...], bool]'),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue