Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 33.9k
gh-138425: Correctly partially evaluate global generics with undefined params in ref.evaluate(format=Format.FORWARDREF)#138430
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
dr-carlos commented Sep 3, 2025 • edited by bedevere-app bot
Loading Uh oh!
There was an error while loading. Please reload this page.
edited by bedevere-app bot
Uh oh!
There was an error while loading. Please reload this page.
auvipy 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.
looks good
Misc/NEWS.d/next/Library/2025-09-03-18-26-07.gh-issue-138425.cVE9Ho.rst Outdated Show resolvedHide resolved
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Co-authored-by: sobolevn <mail@sobolevn.me>
python-cla-botbot commented Sep 3, 2025 • 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.
Misc/NEWS.d/next/Library/2025-09-03-18-26-07.gh-issue-138425.cVE9Ho.rst Outdated Show resolvedHide resolved
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
…fined generic tests Removed global overriding builtin test as it seemingly wasn't compatible with `get_annotations()`.
dr-carlos commented Sep 6, 2025
Note that this PR also inherently fixes builtins overriding globals in this particular code path. I was previously unable to come up with a test for this without using the undocumented fromannotationlibimportFormat, get_annotationsclassC: y: alias[memoryview, undef] mv=__builtins__["memoryview"] del__builtins__["memoryview"] fwdref=get_annotations(C, format=Format.FORWARDREF)["y"] __builtins__["memoryview"] =mvgeneric=fwdref.evaluate( format=Format.FORWARDREF, globals={"memoryview": int}, locals={"alias": dict} ) self.assertNotIsInstance(generic, ForwardRef) self.assertIs(generic.__origin__, dict) self.assertEqual(len(generic.__args__), 2) self.assertIs(generic.__args__[0], int) self.assertIsInstance(generic.__args__[1], ForwardRef)It feels very unlikely this would happen in real code, and I'm not sure if it's a good idea to test given that "Since this is an implementation detail, it may not be used by alternate implementations of Python." (https://docs.python.org/3/library/builtins.html), and given that |
JelleZijlstra commented Sep 6, 2025
Good point, I think it's fine to skip the test in that case. Technical issue: your two PRs #138430 and #138075 will conflict with each other, and I won't be able to backport them to 3.14 until after 3.14.0 final comes out. So I'm planning to leave them open for now and land them once 3.14.0 final is out so I can sort out the merge conflicts and merge the backports without having to disrupt the RC process. |
dr-carlos commented Nov 2, 2025
@JelleZijlstra Just a quick reminder of these PRs - any updates now that 3.14.0 final is out? |
e66f87c into python:mainUh oh!
There was an error while loading. Please reload this page.
Thanks @dr-carlos for the PR, and @JelleZijlstra for merging it 🌮🎉.. I'm working now to backport this PR to: 3.14. |
…defined params in `ref.evaluate(format=Format.FORWARDREF)` (pythonGH-138430) (cherry picked from commit e66f87c) Co-authored-by: dr-carlos <77367421+dr-carlos@users.noreply.github.com> Co-authored-by: sobolevn <mail@sobolevn.me>
GH-140927 is a backport of this pull request to the 3.14 branch. |
…ndefined params in `ref.evaluate(format=Format.FORWARDREF)` (GH-138430) (#140927) gh-138425: Correctly partially evaluate global generics with undefined params in `ref.evaluate(format=Format.FORWARDREF)` (GH-138430) (cherry picked from commit e66f87c) Co-authored-by: dr-carlos <77367421+dr-carlos@users.noreply.github.com> Co-authored-by: sobolevn <mail@sobolevn.me>
dr-carlos commented Nov 3, 2025
Thanks for the merges @JelleZijlstra! |
…defined params in `ref.evaluate(format=Format.FORWARDREF)` (python#138430) Co-authored-by: sobolevn <mail@sobolevn.me>
ref.evaluate(format=Format.FORWARDREF)not evaluating global generics with undefined params #138425