mirror of
https://github.com/pytorch/pytorch.git
synced 2025-10-20 21:14:14 +08:00
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
300 lines
5.9 KiB
INI
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
|