Uh oh!
There was an error while loading. Please reload this page.
bpo-43224: Implement PEP 646 grammar changes - #31018
Conversation
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.
@mrahtz Could you please add some expected syntax errors to |
mrahtz
commented
Feb 2, 2022
Sure, will do. Two questions:
|
pablogsal
commented
Feb 2, 2022
If you want to check that something is a Syntax error and just want to assert the message and can do they with a simple input, in th doctest. If you required special compilation modes, some gigantic or dynamic string or check the location of the errors, then a specific test case is needed.
In general we have one test file for testing the runtime implications of the grammar, and things go to |
mrahtz
commented
Feb 14, 2022
Sorry for the slow reply - I'm only just now finding time again to work on this. Looking through |
mrahtz
commented
Mar 5, 2022
@pablogsal Friendly poke :) |
mrahtz
commented
Mar 16, 2022
@pablogsal Another friendly poke :) I'm getting a bit nervous we might miss the merge window for 3.11 on this - if you're busy at the moment, would you be able to recommend anyone else who'd be a good fit for a review of this? (Or @JelleZijlstra do you know of anyone?) |
JelleZijlstra
commented
Mar 16, 2022
Maybe @isidentical if you'd like to take a look? Seems like Pablo already looked at the diff to some extent, so if he doesn't have time for a full re-review, I can also do a review and help get this in. I'd of course prefer if someone familiar with the parser can do a review, though. |
JelleZijlstra
commented
Mar 17, 2022
I noticed that this is allowed by the grammar: |
pablogsal
commented
Mar 17, 2022
Apologies, unfortunately I was sick with COVID these past weeks and I couldn't dedicate much time to open source :( I will do another pass today or tomorrow. Thanks for your understanding @mrahtz |
isidentical
left a comment
There was a problem hiding this comment.
Seems like ast.unparse is broken on some scenerious:
importasttree_1=ast.parse("A[1:2, *l]")
tree_2=ast.parse(ast.unparse(ast.parse(tree_1)))
assertast.dump(tree_1) ==ast.dump(tree_2)I assume it this is related to parenthesizing logic in here, which needs to be adapted to PEP646:
Lines 1479 to 1487 in ef1327e
JelleZijlstra
commented
Mar 23, 2022
I just fixed a merge conflict and a whitespace issue found by (1) The (2) There is also a C version of (3) If you use Here's an example that demonstrates these issues: Detailsfrom __future__ importannotationsimporttypingimportastTs=typing.TypeVarTuple("Ts")
deff(x: tuple[*Ts], *args: *Ts):
passprint(f.__annotations__)
print(ast.unparse(ast.parse("tuple[*Ts]")))
print(typing.get_type_hints(f)) |
JelleZijlstra
commented
Mar 23, 2022
Also, there were a few buildbot failures when Pablo triggered builds on 1543785, but apart from the whitespace issue I fixed, they looked like random failures on unrelated tests. |
gvanrossum
commented
Mar 23, 2022
Thanks, go ahead, but do add the needed tests and fix the issues. Agreed on the parsing in get_type_hints. |
JelleZijlstra
commented
Mar 24, 2022
Thanks @mrahtz for the fixes! I'll do another review today or maybe tomorrow and then hopefully merge. I think we can leave the |
mrahtz
commented
Mar 24, 2022
@JelleZijlstra Oops, I only just saw your message 😅 Let me know if you'd prefer to take the |
JelleZijlstra
commented
Mar 24, 2022
If you already implemented it, that's fine too :) Thanks! |
| scope = {} | ||
| exec( | ||
| "from __future__ import annotations\n" | ||
| + code, {}, scope |
There was a problem hiding this comment.
I removed this because if both globals and locals are passed to exec, it treats the code as it if were executed in a class definition, which makes the new test I've added harder than it needs to be (we can't access c so easily). Removing this doesn't seem to break any of the rest of the tests, so I hope this is fine?
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.
mrahtz
commented
Mar 26, 2022
Whoop whoop! :D |
These are the parts of the old PR (#30398) relevant to only the grammar changes. To summarise, this adds support for:
Tensor[*Ts],Tensor[T, *Ts](whereTsis aTypeVarTupleandTis aTypeVar).Tensor[0:*Ts]should not be valid.*args, e.g.*args: *Ts.For 1, our intention is to call
__iter__onTsand add the items from the resulting iterator to the tuple of arguments sent toTensor.__cls_getitem__. For example, withTensor[*Ts], ifTs.__iter__returns an iterator yieldingTs.unpacked,Tensor.__cls_getitem__would receive(Ts.unpacked,). WithTensor[T, *Ts],Tensor.__cls_getitem__would receive(T, Ts.unpacked).For 2, our intention is to call
__iter__onTs, get a single item from the iterator, verify that the iterator is exhausted, and set that item as the annotation for*args.I'm guessing the person I should ask for review on this is @pablogsal?
https://bugs.python.org/issue43224