More progress on type checking ValueRanges (#118870)

Type checking Python is a pain. Here are my learnings:

* The types for heavily polymorphic code is going to be verbose, no way around it. I originally was hoping I could lean on polymorphism with a bounded TypeVar to compactly write signatures for many of the ValueRanges methods, but I ran into some unworkaroundable mypy bugs. Writing out all the types explicitly and using `@overload` liberally works pretty well, so I think I recommend people do that instead of trying to do fancy things.
* Sympy is missing annotations for assumptions, because they are all metaprogrammed. I don't really relish maintaining a typeshed for sympy, so I wrote a small mypy plugin to add them in.
* GADT style refinement is... just not a good idea in practice. Mypy easily gets confused whether or not a return value from a refined section is allowed for the outer return type. So many of these have been replaced with less informative implementation types and more informative external types via overloads. Hopefully this is good for use sites.

Signed-off-by: Edward Z. Yang <ezyang@meta.com>
Pull Request resolved: https://github.com/pytorch/pytorch/pull/118870
Approved by: https://github.com/Skylion007, https://github.com/albanD
This commit is contained in:
Edward Z. Yang
2024-02-05 09:22:07 -08:00
committed by PyTorch MergeBot
parent b92819a039
commit b816760a2f
4 changed files with 171 additions and 42 deletions

View File

@ -67,7 +67,7 @@ def _run_mypy() -> Dict[str, List[str]]:
directory,
]
)
assert not stderr, directory
assert not stderr, stderr
stdout = stdout.replace("*", "")
# Parse the output