| [[linter]] | 
 | code = 'FLAKE8' | 
 | include_patterns = ['**/*.py'] | 
 | exclude_patterns = [ | 
 |     '.git/**', | 
 |     'build_test_custom_build/**', | 
 |     'build/**', | 
 |     'caffe2/**', | 
 |     'docs/caffe2/**', | 
 |     'docs/cpp/src/**', | 
 |     'docs/src/**', | 
 |     # NOTE: [Impending functorch move] | 
 |     # In preparation for the functorch -> pytorch merge, | 
 |     # we are adding the following excludes so that functorch passes | 
 |     # lint when it gets merged in. Please don't delete. | 
 |     'functorch/**', | 
 |     'scripts/**', | 
 |     'test/generated_type_hints_smoketest.py', | 
 |     'third_party/**', | 
 |     'torch/include/**', | 
 |     'torch/lib/**', | 
 |     'venv/**', | 
 |     '**/*.pyi', | 
 |     'tools/test/test_selective_build.py', | 
 | ] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/flake8_linter.py', | 
 |     '--', | 
 |     '@{{PATHSFILE}}' | 
 | ] | 
 | init_command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/pip_init.py', | 
 |     '--dry-run={{DRYRUN}}', | 
 |     'flake8==3.8.2', | 
 |     'flake8-bugbear==20.1.4', | 
 |     'flake8-comprehensions==3.3.0', | 
 |     'flake8-executable==2.0.4', | 
 |     'flake8-pyi==20.5.0', | 
 |     'mccabe==0.6.1', | 
 |     'pycodestyle==2.6.0', | 
 |     'pyflakes==2.2.0', | 
 | ] | 
 |  | 
 |  | 
 | [[linter]] | 
 | code = 'CLANGFORMAT' | 
 | include_patterns = [ | 
 |     'aten/src/ATen/*.h', | 
 |     'aten/src/ATen/native/vulkan/**/*.h', | 
 |     'aten/src/ATen/native/vulkan/**/*.cpp', | 
 |     'c10/**/*.h', | 
 |     'c10/**/*.cpp', | 
 |     'torch/csrc/**/*.h', | 
 |     'torch/csrc/**/*.cpp', | 
 |     'test/cpp/**/*.h', | 
 |     'test/cpp/**/*.cpp', | 
 | ] | 
 | exclude_patterns = [ | 
 |     'aten/src/ATen/native/vulkan/api/vk_mem_alloc.h', | 
 |     'c10/util/strong_type.h', | 
 |     'torch/csrc/jit/serialization/mobile_bytecode_generated.h', | 
 | ] | 
 | init_command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/s3_init.py', | 
 |     '--config-json=tools/linter/adapters/s3_init_config.json', | 
 |     '--linter=clang-format', | 
 |     '--dry-run={{DRYRUN}}', | 
 |     '--output-dir=.lintbin', | 
 |     '--output-name=clang-format', | 
 | ] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/clangformat_linter.py', | 
 |     '--binary=.lintbin/clang-format', | 
 |     '--', | 
 |     '@{{PATHSFILE}}' | 
 | ] | 
 | is_formatter = true | 
 |  | 
 | [[linter]] | 
 | code = 'MYPY' | 
 | include_patterns = [ | 
 |     'torch/**/*.py', | 
 |     'torch/**/*.pyi', | 
 |     'caffe2/**/*.py', | 
 |     'caffe2/**/*.pyi', | 
 |     '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_patterns = [ | 
 |     'torch/include/**', | 
 |     'torch/csrc/**', | 
 |     'torch/distributed/elastic/agent/server/api.py', | 
 |     'torch/testing/_internal/**', | 
 |     'torch/distributed/fsdp/fully_sharded_data_parallel.py', | 
 |     # TODO(suo): these exclusions were added just to get lint clean on master. | 
 |     # Follow up to do more target suppressions and remove them. | 
 |     'torch/distributed/fsdp/flatten_params_wrapper.py', | 
 |     'torch/ao/quantization/fx/convert.py', | 
 |     'torch/ao/quantization/_dbr/function_fusion.py', | 
 |     'test/test_datapipe.py', | 
 |     'caffe2/contrib/fakelowp/test/test_batchmatmul_nnpi_fp16.py', | 
 |     'test/test_numpy_interop.py', | 
 |     'torch/torch_version.py', | 
 | ] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/mypy_linter.py', | 
 |     '--config=mypy.ini', | 
 |     '--', | 
 |     '@{{PATHSFILE}}' | 
 | ] | 
 | init_command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/pip_init.py', | 
 |     '--dry-run={{DRYRUN}}', | 
 |     'numpy==1.21.6', | 
 |     'expecttest==0.1.3', | 
 |     'mypy==0.960', | 
 |     'types-requests==2.27.25', | 
 |     'types-six==1.16.15', | 
 |     'types-PyYAML==6.0.7', | 
 |     'types-tabulate==0.8.8', | 
 |     'types-protobuf==3.19.18', | 
 |     'types-pkg-resources==0.1.3', | 
 |     'types-Jinja2==2.11.9', | 
 |     'junitparser==2.1.1', | 
 |     'rich==10.9.0', | 
 |     'pyyaml==6.0', | 
 | ] | 
 |  | 
 | [[linter]] | 
 | code = 'MYPYSTRICT' | 
 | include_patterns = [ | 
 |     '.github/**/*.py', | 
 |     'benchmarks/instruction_counts/**/*.py', | 
 |     'tools/**/*.py', | 
 |     'torch/utils/_pytree.py', | 
 |     'torch/utils/benchmark/utils/common.py', | 
 |     'torch/utils/benchmark/utils/timer.py', | 
 |     'torch/utils/benchmark/utils/valgrind_wrapper/**/*.py', | 
 | ] | 
 | exclude_patterns = [ | 
 |     # (linbinyu) copied from internal repo | 
 |     'tools/code_analyzer/gen_operators_yaml.py', | 
 |     'tools/gen_vulkan_spv.py', | 
 |     'tools/test/gen_operators_yaml_test.py', | 
 |     'tools/test/gen_oplist_test.py', | 
 |     'tools/test/test_selective_build.py', | 
 | ] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/mypy_linter.py', | 
 |     '--config=mypy-strict.ini', | 
 |     '--', | 
 |     '@{{PATHSFILE}}' | 
 | ] | 
 |  | 
 | [[linter]] | 
 | code = 'CLANGTIDY' | 
 | include_patterns = [ | 
 |     'torch/csrc/deploy/**/*.cpp', | 
 |     'torch/csrc/fx/**/*.cpp', | 
 |     'torch/csrc/generic/**/*.cpp', | 
 |     'torch/csrc/onnx/**/*.cpp', | 
 |     'torch/csrc/tensor/**/*.cpp', | 
 |     'torch/csrc/utils/**/*.cpp', | 
 | ] | 
 | exclude_patterns = [ | 
 |     # The negative filters below are to exclude files that include onnx_pb.h or | 
 |     # caffe2_pb.h, otherwise we'd have to build protos as part of this CI job. | 
 |     # FunctionsManual.cpp is excluded to keep this diff clean. It will be fixed | 
 |     # in a follow up PR. | 
 |     # /torch/csrc/generic/*.cpp is excluded because those files aren't actually built. | 
 |     # deploy/interpreter files are excluded due to using macros and other techniquies | 
 |     # that are not easily converted to accepted c++ | 
 |     'torch/csrc/jit/passes/onnx/helper.cpp', | 
 |     'torch/csrc/jit/passes/onnx/shape_type_inference.cpp', | 
 |     'torch/csrc/jit/serialization/onnx.cpp', | 
 |     'torch/csrc/jit/serialization/export.cpp', | 
 |     'torch/csrc/jit/serialization/import.cpp', | 
 |     'torch/csrc/jit/serialization/import_legacy.cpp', | 
 |     'torch/csrc/onnx/init.cpp', | 
 |     'torch/csrc/cuda/nccl.*', | 
 |     'torch/csrc/cuda/python_nccl.cpp', | 
 |     'torch/csrc/autograd/FunctionsManual.cpp', | 
 |     'torch/csrc/generic/*.cpp', | 
 |     'torch/csrc/jit/codegen/cuda/runtime/*', | 
 |     'torch/csrc/deploy/interactive_embedded_interpreter.cpp', | 
 |     'torch/csrc/deploy/interpreter/**', | 
 |     'torch/csrc/deploy/test_deploy_python_ext.cpp', | 
 |     'torch/csrc/deploy/test_deploy_missing_interpreter.cpp', | 
 |     'torch/csrc/deploy/test_deploy_gpu.cpp', | 
 |     'torch/csrc/utils/disable_torch_function.cpp', | 
 | ] | 
 | init_command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/s3_init.py', | 
 |     '--config-json=tools/linter/adapters/s3_init_config.json', | 
 |     '--linter=clang-tidy', | 
 |     '--dry-run={{DRYRUN}}', | 
 |     '--output-dir=.lintbin', | 
 |     '--output-name=clang-tidy', | 
 | ] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/clangtidy_linter.py', | 
 |     '--binary=.lintbin/clang-tidy', | 
 |     '--build_dir=./build', | 
 |     '--', | 
 |     '@{{PATHSFILE}}' | 
 | ] | 
 |  | 
 | [[linter]] | 
 | code = 'TYPEIGNORE' | 
 | include_patterns = ['**/*.py', '**/*.pyi'] | 
 | exclude_patterns = [ | 
 |     'test/test_jit.py', | 
 |     # See NOTE: [Impending functorch move] | 
 |     'functorch/**', | 
 | ] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/grep_linter.py', | 
 |     '--pattern=# type:\s*ignore([^\[]|$)', | 
 |     '--linter-name=TYPEIGNORE', | 
 |     '--error-name=unqualified type: ignore', | 
 |     """--error-description=\ | 
 |         This line has an unqualified `type: ignore`; \ | 
 |         please convert it to `type: ignore[xxxx]`\ | 
 |     """, | 
 |     '--', | 
 |     '@{{PATHSFILE}}' | 
 | ] | 
 |  | 
 | [[linter]] | 
 | code = 'NOQA' | 
 | include_patterns = ['**/*.py', '**/*.pyi'] | 
 | exclude_patterns = ['caffe2/**'] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/grep_linter.py', | 
 |     '--pattern=# noqa([^:]|$)', | 
 |     '--linter-name=NOQA', | 
 |     '--error-name=unqualified noqa', | 
 |     """--error-description=\ | 
 |         This line has an unqualified `noqa`; \ | 
 |         please convert it to `noqa: XXXX`\ | 
 |     """, | 
 |     '--', | 
 |     '@{{PATHSFILE}}' | 
 | ] | 
 |  | 
 | [[linter]] | 
 | code = 'CIRCLECI' | 
 | include_patterns=['.circleci/**'] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/circleci_linter.py', | 
 |     '--regen-script-working-dir=.circleci', | 
 |     '--config-yml=.circleci/config.yml', | 
 |     '--regen-script=generate_config_yml.py', | 
 | ] | 
 |  | 
 | [[linter]] | 
 | code = 'NATIVEFUNCTIONS' | 
 | include_patterns=['aten/src/ATen/native/native_functions.yaml'] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/nativefunctions_linter.py', | 
 |     '--native-functions-yml=aten/src/ATen/native/native_functions.yaml', | 
 | ] | 
 | init_command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/pip_init.py', | 
 |     '--dry-run={{DRYRUN}}', | 
 |     'ruamel.yaml==0.17.4', | 
 | ] | 
 | is_formatter = true | 
 |  | 
 | [[linter]] | 
 | code = 'NEWLINE' | 
 | include_patterns=['**'] | 
 | exclude_patterns=[ | 
 |     '**/contrib/**', | 
 |     'third_party/**', | 
 |     '**/*.expect', | 
 |     '**/*.ipynb', | 
 |     '**/*.ptl', | 
 |     'tools/clang_format_hash/**', | 
 |     'test/cpp/jit/upgrader_models/*.ptl', | 
 |     'test/cpp/jit/upgrader_models/*.ptl.ff', | 
 |     # See NOTE: [Impending functorch move] | 
 |     'functorch/**', | 
 | ] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/newlines_linter.py', | 
 |     '--', | 
 |     '@{{PATHSFILE}}', | 
 | ] | 
 | is_formatter = true | 
 |  | 
 | [[linter]] | 
 | code = 'SPACES' | 
 | include_patterns = ['**'] | 
 | exclude_patterns = [ | 
 |     '**/contrib/**', | 
 |     '**/*.diff', | 
 |     'third_party/**', | 
 |     'aten/src/ATen/native/vulkan/api/vk_mem_alloc.h', | 
 |     'test/cpp/jit/upgrader_models/*.ptl', | 
 |     'test/cpp/jit/upgrader_models/*.ptl.ff', | 
 |     # See NOTE: [Impending functorch move] | 
 |     'functorch/**', | 
 | ] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/grep_linter.py', | 
 |     '--pattern=[[:blank:]]$', | 
 |     '--linter-name=SPACES', | 
 |     '--error-name=trailing spaces', | 
 |     '--replace-pattern=s/[[:blank:]]+$//', | 
 |     """--error-description=\ | 
 |         This line has trailing spaces; please remove them.\ | 
 |     """, | 
 |     '--', | 
 |     '@{{PATHSFILE}}' | 
 | ] | 
 |  | 
 | [[linter]] | 
 | code = 'TABS' | 
 | include_patterns = ['**'] | 
 | exclude_patterns = [ | 
 |     '**/*.svg', | 
 |     '**/*Makefile', | 
 |     '**/contrib/**', | 
 |     'third_party/**', | 
 |     '**/.gitattributes', | 
 |     '**/.gitmodules', | 
 |     'aten/src/ATen/native/vulkan/api/vk_mem_alloc.h', | 
 |     'test/cpp/jit/upgrader_models/*.ptl', | 
 |     'test/cpp/jit/upgrader_models/*.ptl.ff', | 
 |     '.lintrunner.toml', | 
 |     # See NOTE: [Impending functorch move] | 
 |     'functorch/**', | 
 | ] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/grep_linter.py', | 
 |     # @lint-ignore TXT2 | 
 |     '--pattern=	', | 
 |     '--linter-name=TABS', | 
 |     '--error-name=saw some tabs', | 
 |     '--replace-pattern=s/\t/    /', | 
 |     """--error-description=\ | 
 |         This line has tabs; please replace them with spaces.\ | 
 |     """, | 
 |     '--', | 
 |     '@{{PATHSFILE}}' | 
 | ] | 
 |  | 
 | [[linter]] | 
 | code = 'INCLUDE' | 
 | include_patterns = [ | 
 |     'c10/**', | 
 |     'aten/**', | 
 |     'torch/csrc/**', | 
 | ] | 
 | exclude_patterns = [ | 
 |     'aten/src/ATen/native/quantized/cpu/qnnpack/**', | 
 |     'aten/src/ATen/native/vulkan/api/vk_mem_alloc.h', | 
 |     'torch/csrc/jit/serialization/mobile_bytecode_generated.h', | 
 | ] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/grep_linter.py', | 
 |     '--pattern=#include "', | 
 |     '--linter-name=INCLUDE', | 
 |     '--error-name=quoted include', | 
 |     '--replace-pattern=s/#include "(.*)"$/#include <\1>/', | 
 |     """--error-description=\ | 
 |         This #include uses quotes; please convert it to #include <xxxx>\ | 
 |     """, | 
 |     '--', | 
 |     '@{{PATHSFILE}}' | 
 | ] | 
 |  | 
 | [[linter]] | 
 | code = 'PYPIDEP' | 
 | include_patterns = ['.github/**'] | 
 | exclude_patterns = [ | 
 |     '**/*.rst', | 
 |     '**/*.py', | 
 |     '**/*.md', | 
 |     '**/*.diff', | 
 | ] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/grep_linter.py', | 
 |     """--pattern=\ | 
 |     (pip|pip3|python -m pip|python3 -m pip|python3 -mpip|python -mpip) \ | 
 |     install ([a-zA-Z0-9][A-Za-z0-9\\._\\-]+)([^/=<>~!]+)[A-Za-z0-9\\._\\-\\*\\+\\!]*$\ | 
 |     """, | 
 |     '--linter-name=PYPIDEP', | 
 |     '--error-name=unpinned PyPI install', | 
 |     """--error-description=\ | 
 |         This line has unpinned PyPi installs; \ | 
 |         please pin them to a specific version: e.g. 'thepackage==1.2'\ | 
 |     """, | 
 |     '--', | 
 |     '@{{PATHSFILE}}' | 
 | ] | 
 |  | 
 | [[linter]] | 
 | code = 'EXEC' | 
 | include_patterns = ['**'] | 
 | exclude_patterns = [ | 
 |     'third_party/**', | 
 |     'torch/bin/**', | 
 |     '**/*.so', | 
 |     '**/*.py', | 
 |     '**/*.sh', | 
 |     '**/*.bash', | 
 |     '**/git-pre-commit', | 
 |     '**/git-clang-format', | 
 |     '**/gradlew', | 
 |     # See NOTE: [Impending functorch move] | 
 |     'functorch/**', | 
 | ] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/exec_linter.py', | 
 |     '--', | 
 |     '@{{PATHSFILE}}', | 
 | ] | 
 |  | 
 | [[linter]] | 
 | code = 'CUBINCLUDE' | 
 | include_patterns = ['aten/**'] | 
 | exclude_patterns = [ | 
 |     'aten/src/ATen/cuda/cub*.cuh', | 
 | ] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/grep_linter.py', | 
 |     '--pattern=#include <cub/', | 
 |     '--linter-name=CUBINCLUDE', | 
 |     '--error-name=direct cub include', | 
 |     """--error-description=\ | 
 |         This line has a direct cub include; please include \ | 
 |         ATen/cuda/cub.cuh instead and wrap your cub calls in \ | 
 |         at::native namespace if necessary. | 
 |     """, | 
 |     '--', | 
 |     '@{{PATHSFILE}}' | 
 | ] | 
 |  | 
 | [[linter]] | 
 | code = 'RAWCUDA' | 
 | include_patterns = [ | 
 |     'aten/**', | 
 |     'c10/**', | 
 | ] | 
 | exclude_patterns = [ | 
 |     'aten/src/ATen/test/**', | 
 |     'c10/cuda/CUDAFunctions.h', | 
 | ] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/grep_linter.py', | 
 |     '--pattern=cudaStreamSynchronize', | 
 |     '--linter-name=RAWCUDA', | 
 |     '--error-name=raw CUDA API usage', | 
 |     """--error-description=\ | 
 |         This line calls raw CUDA APIs directly; please use at::cuda wrappers instead. | 
 |     """, | 
 |     '--', | 
 |     '@{{PATHSFILE}}' | 
 | ] | 
 |  | 
 | [[linter]] | 
 | code = 'CMAKE' | 
 | include_patterns = [ | 
 |     "**/*.cmake", | 
 |     "**/*.cmake.in", | 
 |     "**/CMakeLists.txt", | 
 | ] | 
 | exclude_patterns = [ | 
 |     'cmake/Modules/**', | 
 |     'cmake/Modules_CUDA_fix/**', | 
 |     'cmake/Caffe2Config.cmake.in', | 
 |     'aten/src/ATen/ATenConfig.cmake.in', | 
 |     'cmake/Caffe2ConfigVersion.cmake.in', | 
 |     'cmake/TorchConfig.cmake.in', | 
 |     'cmake/TorchConfigVersion.cmake.in', | 
 |     'cmake/cmake_uninstall.cmake.i', | 
 | ] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/cmake_linter.py', | 
 |     '--config=.cmakelintrc', | 
 |     '--', | 
 |     '@{{PATHSFILE}}', | 
 | ] | 
 | init_command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/pip_init.py', | 
 |     '--dry-run={{DRYRUN}}', | 
 |     'cmakelint==1.4.1', | 
 | ] | 
 |  | 
 | [[linter]] | 
 | code = 'SHELLCHECK' | 
 | include_patterns = [ | 
 |     '.jenkins/pytorch/**/*.sh' | 
 | ] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/shellcheck_linter.py', | 
 |     '--', | 
 |     '@{{PATHSFILE}}', | 
 | ] | 
 | init_command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/pip_init.py', | 
 |     '--dry-run={{DRYRUN}}', | 
 |     'shellcheck-py==0.7.2.1', | 
 | ] | 
 |  | 
 | [[linter]] | 
 | code = 'ACTIONLINT' | 
 | include_patterns = [ | 
 |     '.github/workflows/*.yml', | 
 |     '.github/workflows/*.yaml', | 
 |     # actionlint does not support composite actions yet | 
 |     # '.github/actions/**/*.yml', | 
 |     # '.github/actions/**/*.yaml', | 
 | ] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/actionlint_linter.py', | 
 |     '--binary=.lintbin/actionlint', | 
 |     '--', | 
 |     '@{{PATHSFILE}}', | 
 | ] | 
 | init_command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/s3_init.py', | 
 |     '--config-json=tools/linter/adapters/s3_init_config.json', | 
 |     '--linter=actionlint', | 
 |     '--dry-run={{DRYRUN}}', | 
 |     '--output-dir=.lintbin', | 
 |     '--output-name=actionlint', | 
 | ] | 
 |  | 
 | [[linter]] | 
 | code = 'TESTOWNERS' | 
 | include_patterns = [ | 
 |     'test/**/test_*.py', | 
 |     'test/**/*_test.py', | 
 | ] | 
 | exclude_patterns = [ | 
 |     'test/run_test.py', | 
 | ] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/testowners_linter.py', | 
 |     '--', | 
 |     '@{{PATHSFILE}}', | 
 | ] | 
 |  | 
 | [[linter]] | 
 | code = 'BLACK' | 
 | include_patterns = [ | 
 |     'torchgen/**/*.py', | 
 |     'tools/**/*.py', | 
 |     'torch/package/**/*.py', | 
 |     'torch/onnx/**/*.py', | 
 |     'torch/_refs/**/*.py', | 
 |     'torch/_prims/**/*.py', | 
 |     'torch/_meta_registrations.py', | 
 |     'torch/_decomp/**/*.py', | 
 |     'test/onnx/**/*.py', | 
 | ] | 
 | exclude_patterns = [ | 
 |     'tools/gen_vulkan_spv.py', | 
 | ] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/black_linter.py', | 
 |     '--', | 
 |     '@{{PATHSFILE}}' | 
 | ] | 
 | init_command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/pip_init.py', | 
 |     '--dry-run={{DRYRUN}}', | 
 |     '--no-binary', | 
 |     'black==22.3.0', | 
 | ] | 
 | is_formatter = true | 
 |  | 
 | [[linter]] | 
 | code = 'CALL_ONCE' | 
 | include_patterns = [ | 
 |     'c10/**', | 
 |     'aten/**', | 
 |     'torch/csrc/**', | 
 | ] | 
 | exclude_patterns = [ | 
 |     'c10/util/CallOnce.h', | 
 | ] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/grep_linter.py', | 
 |     '--pattern=std::call_once', | 
 |     '--linter-name=CALL_ONCE', | 
 |     '--error-name=invalid call_once', | 
 |     '--replace-pattern=s/std::call_once/c10::call_once/', | 
 |     """--error-description=\ | 
 |         Use of std::call_once is forbidden and should be replaced with c10::call_once\ | 
 |     """, | 
 |     '--', | 
 |     '@{{PATHSFILE}}' | 
 | ] | 
 |  | 
 | [[linter]] | 
 | code = 'ONCE_FLAG' | 
 | include_patterns = [ | 
 |     'c10/**', | 
 |     'aten/**', | 
 |     'torch/csrc/**', | 
 | ] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/grep_linter.py', | 
 |     '--pattern=std::once_flag', | 
 |     '--linter-name=ONCE_FLAG', | 
 |     '--error-name=invalid once_flag', | 
 |     '--replace-pattern=s/std::once_flag/c10::once_flag/', | 
 |     """--error-description=\ | 
 |         Use of std::once_flag is forbidden and should be replaced with c10::once_flag\ | 
 |     """, | 
 |     '--', | 
 |     '@{{PATHSFILE}}' | 
 | ] | 
 |  | 
 | [[linter]] | 
 | code = 'WORKFLOWSYNC' | 
 | include_patterns = [ | 
 |     '.github/workflows/pull.yml', | 
 |     '.github/workflows/trunk.yml', | 
 |     '.github/workflows/periodic.yml', | 
 | ] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/workflow_consistency_linter.py', | 
 |     '--', | 
 |     '@{{PATHSFILE}}' | 
 | ] | 
 | init_command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/pip_init.py', | 
 |     '--dry-run={{DRYRUN}}', | 
 |     'PyYAML==6.0', | 
 | ] | 
 |  | 
 | # This also provides the same functionality as BLACK formatter. Just to be | 
 | # on the safe side, we will run both BLACK and UFMT for a while to make sure | 
 | # that nothing breaks before removing the former | 
 | [[linter]] | 
 | code = 'UFMT' | 
 | # This is a big bang change to reformat every python files in the repo, | 
 | # so it's arguably safer to gradually reformat them in subsequent PR. | 
 | # After that, we can use **/*.py to apply the formatter to all entries | 
 | # currently enforced by BLACK linter | 
 | include_patterns = [ | 
 |     'test/onnx/**/*.py', | 
 |     'tools/**/*.py', | 
 |     'torchgen/**/*.py', | 
 | ] | 
 | command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/ufmt_linter.py', | 
 |     '--', | 
 |     '@{{PATHSFILE}}' | 
 | ] | 
 | exclude_patterns = [ | 
 |     'tools/gen_vulkan_spv.py', | 
 | ] | 
 | init_command = [ | 
 |     'python3', | 
 |     'tools/linter/adapters/pip_init.py', | 
 |     '--dry-run={{DRYRUN}}', | 
 |     'black==22.3.0', | 
 |     'ufmt==1.3.3', | 
 |     'usort==1.0.2', | 
 | ] | 
 | is_formatter = true |