Files
pytorch/mypy.ini
Edward Z. Yang b816760a2f 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
2024-02-05 20:29:25 +00:00

300 lines
5.9 KiB
INI

# This is the PyTorch mypy.ini file (note: don't change this line! -
# test_run_mypy in test/test_type_hints.py uses this string)
[mypy]
plugins = mypy_plugins/check_mypy_version.py, mypy_plugins/sympy_mypy_plugin.py, numpy.typing.mypy_plugin
cache_dir = .mypy_cache/normal
allow_redefinition = True
warn_unused_configs = True
warn_redundant_casts = True
show_error_codes = True
show_column_numbers = True
check_untyped_defs = True
follow_imports = normal
local_partial_types = True
enable_error_code = possibly-undefined
# do not reenable this:
# https://github.com/pytorch/pytorch/pull/60006#issuecomment-866130657
warn_unused_ignores = False
#
# Note: test/ still has syntax errors so can't be added
#
# Typing tests is low priority, but enabling type checking on the
# untyped test functions (using `--check-untyped-defs`) is still
# high-value because it helps test the typing.
#
files =
torch,
caffe2,
test/test_bundled_images.py,
test/test_bundled_inputs.py,
test/test_complex.py,
test/test_datapipe.py,
test/test_futures.py,
test/test_numpy_interop.py,
test/test_torch.py,
test/test_type_hints.py,
test/test_type_info.py
test/test_utils.py
#
# `exclude` is a regex, not a list of paths like `files` (sigh)
#
exclude = torch/include/|torch/csrc/|torch/distributed/elastic/agent/server/api.py|torch/testing/_internal|torch/distributed/fsdp/fully_sharded_data_parallel.py
python_version = 3.11
#
# Extension modules without stubs.
#
[mypy-torch._C._jit_tree_views]
ignore_missing_imports = True
[mypy-torch.for_onnx.onnx]
ignore_missing_imports = True
[mypy-torch.ao.quantization.experimental.apot_utils]
ignore_missing_imports = True
[mypy-torch.ao.quantization.experimental.quantizer]
ignore_missing_imports = True
[mypy-torch.ao.quantization.experimental.observer]
ignore_missing_imports = True
[mypy-torch.ao.quantization.experimental.APoT_tensor]
ignore_missing_imports = True
[mypy-torch.ao.quantization.experimental.fake_quantize_function]
ignore_missing_imports = True
[mypy-torch.ao.quantization.experimental.fake_quantize]
ignore_missing_imports = True
#
# Files with various errors. Mostly real errors, possibly some false
# positives as well.
#
[mypy-test_torch]
check_untyped_defs = False
# Excluded from mypy due to OpInfos being annoying to type
[mypy-torch.testing._internal.common_methods_invocations.*]
ignore_errors = True
[mypy-torch.testing._internal.hypothesis_utils.*]
ignore_errors = True
[mypy-torch.testing._internal.common_quantization.*]
ignore_errors = True
[mypy-torch.testing._internal.generated.*]
ignore_errors = True
[mypy-torch.testing._internal.distributed.*]
ignore_errors = True
[mypy-torch.nn.modules.pooling]
ignore_errors = True
[mypy-torch.nn.parallel._functions]
ignore_errors = True
[mypy-torch._appdirs]
ignore_errors = True
[mypy-torch.multiprocessing.pool]
ignore_errors = True
[mypy-torch.overrides]
ignore_errors = True
#
# Files with 'type: ignore' comments that are needed if checked with mypy-strict.ini
#
[mypy-tools.render_junit]
warn_unused_ignores = False
[mypy-tools.generate_torch_version]
warn_unused_ignores = False
#
# Adding type annotations to caffe2 is probably not worth the effort
# only work on this if you have a specific reason for it, otherwise
# leave these ignores as they are.
#
[mypy-caffe2.python.*]
ignore_errors = True
[mypy-caffe2.proto.*]
ignore_errors = True
[mypy-caffe2.core.nomnigraph.op_gen]
ignore_errors = True
[mypy-caffe2.distributed.store_ops_test_util]
ignore_errors = True
[mypy-caffe2.experiments.*]
ignore_errors = True
[mypy-caffe2.contrib.*]
ignore_errors = True
[mypy-caffe2.quantization.server.*]
ignore_errors = True
#
# Third party dependencies that don't have types.
#
[mypy-triton.*]
ignore_missing_imports = True
[mypy-tensorflow.*]
ignore_missing_imports = True
[mypy-tensorboard.*]
ignore_missing_imports = True
[mypy-onnx.*]
ignore_missing_imports = True
[mypy-matplotlib.*]
ignore_missing_imports = True
[mypy-numpy.*]
ignore_missing_imports = True
[mypy-sympy]
ignore_missing_imports = True
[mypy-sympy.*]
ignore_missing_imports = True
[mypy-hypothesis.*]
ignore_missing_imports = True
[mypy-tqdm.*]
ignore_missing_imports = True
[mypy-multiprocessing.*]
ignore_missing_imports = True
[mypy-setuptools.*]
ignore_missing_imports = True
[mypy-distutils.*]
ignore_missing_imports = True
[mypy-nvd3.*]
ignore_missing_imports = True
[mypy-future.utils]
ignore_missing_imports = True
[mypy-past.builtins]
ignore_missing_imports = True
[mypy-numba.*]
ignore_missing_imports = True
[mypy-PIL.*]
ignore_missing_imports = True
[mypy-moviepy.*]
ignore_missing_imports = True
[mypy-cv2.*]
ignore_missing_imports = True
[mypy-torchvision.*]
ignore_missing_imports = True
[mypy-pycuda.*]
ignore_missing_imports = True
[mypy-tensorrt.*]
ignore_missing_imports = True
[mypy-tornado.*]
ignore_missing_imports = True
[mypy-pydot.*]
ignore_missing_imports = True
[mypy-networkx.*]
ignore_missing_imports = True
[mypy-scipy.*]
ignore_missing_imports = True
[mypy-IPython.*]
ignore_missing_imports = True
[mypy-google.protobuf.textformat]
ignore_missing_imports = True
[mypy-lmdb.*]
ignore_missing_imports = True
[mypy-mpi4py.*]
ignore_missing_imports = True
[mypy-skimage.*]
ignore_missing_imports = True
[mypy-librosa.*]
ignore_missing_imports = True
[mypy-mypy.*]
ignore_missing_imports = True
[mypy-xml.*]
ignore_missing_imports = True
[mypy-boto3.*]
ignore_missing_imports = True
[mypy-dill.*]
ignore_missing_imports = True
[mypy-usort.*]
ignore_missing_imports = True
[mypy-torch._inductor.*]
disallow_any_generics = True
[mypy-torch._dynamo.*]
disallow_any_generics = True
[mypy-cutlass_library.*]
ignore_missing_imports = True
[mypy-deeplearning.*]
ignore_missing_imports = True
[mypy-einops.*]
ignore_missing_imports = True
[mypy-libfb.*]
ignore_missing_imports = True
[mypy-torch.*.fb.*]
ignore_missing_imports = True
[mypy-torch.fb.*]
ignore_missing_imports = True
[mypy-torch_xla.*]
ignore_missing_imports = True