bpo-43224: Work around substitution of unpacked TypeVarTuple#31804
Uh oh!
There was an error while loading. Please reload this page.
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
TypeVarTuples, here's a first attempt at the solution Jelle suggested: whenTypeVarTuples` 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
_GenericAliashere. I've tested that too, and it seems to work fine, but I'm a bit wary about giving_GenericAliastoo 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.pysmall, 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
assertEndsWithhelper from #31800 :)@JelleZijlstra@pradeep90
https://bugs.python.org/issue43224