Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 34k
bpo-41559: Implement PEP 612 - Add ParamSpec and Concatenate to typing#23702
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Uh oh!
There was an error while loading. Please reload this page.
Conversation
Fidget-Spinner commented Dec 8, 2020 • edited
Loading Uh oh!
There was an error while loading. Please reload this page.
edited
Uh oh!
There was an error while loading. Please reload this page.
gvanrossum left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm sorry, I didn't get to the end of this review (not by far), but I have a few comments. Main thing though is, did you look at all the examples in PEP 612? It seems that for user-defined generic classes that have a ParamSpec parameter, things like X[int, P] are actually valid.
Maybe this indirectly also answers your question: I think that the ParamSpec should be included in __parameters__.
Also, I wonder if we could do less type checking at runtime rather than trying to be strict? I desperately want typing.py to shrink, not grow... :-)
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Fidget-Spinner commented Dec 9, 2020
Points taken. Sorry D'oh, I just realised I answered my own question since we need |
Co-Authored-By: Guido van Rossum <gvanrossum@users.noreply.github.com>
also reduced runtime checks
gvanrossum commented Dec 11, 2020
Let's wait until #23060 has landed and then see what adjustments this might need. |
gvanrossum commented Dec 23, 2020
Finally looking at this...
Yeah, ParamSpec is super special, and you can't do anything with it that isn't explicitly mentioned in the PEP. So it's debatable whether So let's not worry about those clearly wrong cases. |
gvanrossum commented Dec 23, 2020 • edited
Loading Uh oh!
There was an error while loading. Please reload this page.
edited
Uh oh!
There was an error while loading. Please reload this page.
Sorry, submitted too soon. (UPDATE: Not, I made a mistake -- or GitHub did. :-) |
gvanrossum left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Excellent work! Thanks for your perseverance. My feedback is mostly simple improvements.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Objects/genericaliasobject.c Outdated
| } | ||
| // convert all the lists inside args to tuples to help | ||
| // with caching in other libaries if substituting a ParamSpec | ||
| if (PyList_CheckExact(subst) &&is_paramspec(arg)){ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why only do this for ParamSpec?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm afraid of existing code relying on substituting typevars in genericalias with lists, then expecting that list to be inside __args__. Although in Python 3.9 that should be invalid, and the IDE/type checker should warn the users about that already.
If I just convert list to tuples for all cases, the C code will become way simpler :).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There can't be much code yet relying about anything for GenericAlias -- it's new in 3.9. We could backport that particular behavior to 3.9.3 to ensure there won't be any more code relying on it. :-)
Uh oh!
There was an error while loading. Please reload this page.
Co-Authored-By: Guido van Rossum <gvanrossum@users.noreply.github.com>
gvanrossum left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Re: the 3.9 issues that you discovered: maybe create a PR for those first, land that in master and 3.9 branch, then merge master into this PR?
Uh oh!
There was an error while loading. Please reload this page.
Fidget-Spinner commented Dec 24, 2020 • edited
Loading Uh oh!
There was an error while loading. Please reload this page.
edited
Uh oh!
There was an error while loading. Please reload this page.
Guido, thank you so much for all the time you've put into reviewing this PR! I learnt quite a bit about the typing module in the process :).
Yeah I agree, I created #23915 for that. Once that one lands, I'll merge the changes in along with some of your suggestions. |
Uh oh!
There was an error while loading. Please reload this page.
gvanrossum commented Dec 24, 2020
I think it’s ready! |
gvanrossum commented Dec 24, 2020
@Fidget-Spinner Let me know if you agree. |
Fidget-Spinner commented Dec 24, 2020
Yes! Sorry, I thought you were going to merge it in so I was waiting too 😆 . |
gvanrossum commented Dec 24, 2020
I figured that was the case. :-) |
bedevere-bot commented Dec 24, 2020
@gvanrossum: Please replace |
Fidget-Spinner commented Dec 24, 2020
@gvanrossum Oh dang I knew I had a hunch I missed something :/. I forgot to convert all lists to tuples in ga_new/setup_ga too (I did it only for getitem and co.). Well on the bright side, having that as a separate PR makes backporting to 3.9 easier if anything :), and anyways lists aren't valid in genericalias other than the Callable case (which we already have covered), so we won't have anything broken even without that in right now. |
Fidget-Spinner commented Dec 24, 2020
I'll fix that some other time, right now I'm celebrating 🥳 |
Changes:
__parameters__) in:Documentation will be another patch.
https://bugs.python.org/issue41559