Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork3.1k
Infer generic type arguments for slice expressions#18160
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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Infer generic type arguments for slice expressions#18160
Uh oh!
There was an error while loading.Please reload this page.
Conversation
brianschubert commentedNov 18, 2024
As an alternative approach, I toyed with using the Details--- a/mypy/checkexpr.py+++ b/mypy/checkexpr.py@@ -5616,7 +5616,12 @@ class ExpressionChecker(ExpressionVisitor[Type]): if index: t = self.accept(index) self.chk.check_subtype(t, expected, index, message_registry.INVALID_SLICE_INDEX)- return self.named_type("builtins.slice")+ args = [+ TempNode(NoneType()) if arg is None else arg+ for arg in [e.begin_index, e.end_index, e.stride]+ ]+ slice_type = TypeType(self.named_type("builtins.slice"))+ return self.check_call(slice_type, args, [nodes.ARG_POS] * 3, e, [None] * 3)[0] |
This comment has been minimized.
This comment has been minimized.
hauntsaninja 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.
Nice! Can we recordt in the loop so we avoid type checking the index expressions twice?
brianschubert commentedNov 18, 2024 • 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.
Sure, done! (FWIW, that's how Ioriginally wrote it 😉. I thought to try separating this logic from that loop since I figured it may be removed soon, now that generic slices let us do better checking on slice indices than the hardcoded SupportsIndex/None checks in that loop) |
Diff frommypy_primer, showing the effect of this PR on open source code: pandas-stubs (https://github.com/pandas-dev/pandas-stubs)+ tests/test_frame.py:2246: error: Expression is of type "tuple[Index[int], slice[None, None, None]]", not "tuple[Index[int], slice[Any, Any, Any]]" [assert-type]- tests/test_frame.py:226: error: Expression is of type "Any", not "DataFrame" [assert-type]- tests/test_frame.py:227: error: Expression is of type "Any", not "DataFrame" [assert-type] |
6759dbd intopython:masterUh oh!
There was an error while loading.Please reload this page.
Fixes#18149
Slices were made generic inpython/typeshed#11637. Currently, all slice expressions are inferred to have type
slice[Any, Any, Any]. This PR fills in the generic type arguments more appropriately using start/stop/stride expression types.Given
Before:
After: