bpo-43224: Work around substitution of unpacked TypeVarTuple #31804
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Following up on the discussion in #31021 about how to handle substitution of
TypeVarTuple
s, here's a first attempt at the solution Jelle suggested: whenTypeVarTuple
s` are involved, don't perform the substitution at all, instead returning an object whose repr() reflects that.(What Jelle actually suggested was to return a new
_GenericAlias
here. I've tested that too, and it seems to work fine, but I'm a bit wary about giving_GenericAlias
too many hats to wear - as a newcomer to this codebase, I've struggled with how overloaded classes already are, making it predict what the effects of a change will be. Having said that, Jelle, I remember you mentioning you'd prefer to keep the number of classes intyping.py
small, so if you think the tradeoff isn't worth it, I respect your judgement, and we can re-use_GenericAlias
, coping with the extra functionality with extra documentation comments.)The main alternative I'm aware of is the logic we cut out in b9b1c80 - about 200 lines of logic, and another 100 lines of tests. @serhiy-storchaka also has a partial solution in #31800, which could also be an option - making the substitutions only when it's easy, and otherwise falling back to the approach in this PR.
I've also pulled in @serhiy-storchaka's nice
assertEndsWith
helper from #31800 :)@JelleZijlstra @pradeep90
https://bugs.python.org/issue43224