Closed brianschubert closed 3 days ago
As an alternative approach, I toyed with using the slice.__new__
overloads from typeshed to infer the type arguments. However, this had a big impact on the tests (since all tests involving slice expressions now needed a fixture defining slice
), and I'm not sure if there are any benefits from doing it that way.
Diff from mypy_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]
Sure, done!
(FWIW, that's how I originally wrote it :wink:. 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 from mypy_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]
Fixes #18149
Slices were made generic in https://github.com/python/typeshed/pull/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: