From 0b48d968952a6183ae122679d624940e5228567f Mon Sep 17 00:00:00 2001 From: Patrick Kan Date: Wed, 1 Sep 2021 12:20:50 -0700 Subject: [PATCH] [Bootcamp] Include both python unittest and parser parameters in --help and -h flag (#64297) Summary: Fixes https://github.com/pytorch/pytorch/issues/45945 Creates a new thread to run -h or --help with unittest.main if the help flag is present, and keeps the add_help default for parameters. Includes both python unittest and parser parameters in --help and -h flag and will remain up to date since both messages are displayed. Pull Request resolved: https://github.com/pytorch/pytorch/pull/64297 Test Plan: Imported from GitHub `python test/test_spectral_ops.py --help` Output: ``` % python test/test_spectral_ops.py --help usage: test_spectral_ops.py [-h] [-v] [-q] [--locals] [-f] [-c] [-b] [-k TESTNAMEPATTERNS] [tests [tests ...]] positional arguments: tests a list of any number of test modules, classes and test methods. optional arguments: -h, --help show this help message and exit -v, --verbose Verbose output -q, --quiet Quiet output --locals Show local variables in tracebacks -f, --failfast Stop on first fail or error -c, --catch Catch Ctrl-C and display results so far -b, --buffer Buffer stdout and stderr during tests -k TESTNAMEPATTERNS Only run tests which match the given substring Examples: test_spectral_ops.py - run default set of tests test_spectral_ops.py MyTestSuite - run suite 'MyTestSuite' test_spectral_ops.py MyTestCase.testSomething - run MyTestCase.testSomething test_spectral_ops.py MyTestCase - run all 'test*' test methods in MyTestCase usage: test_spectral_ops.py [-h] [--subprocess] [--seed SEED] [--accept] [--jit_executor JIT_EXECUTOR] [--repeat REPEAT] [--test_bailouts] [--save-xml [SAVE_XML]] [--discover-tests] [--log-suffix LOG_SUFFIX] [--run-parallel RUN_PARALLEL] [--import-slow-tests [IMPORT_SLOW_TESTS]] [--import-disabled-tests [IMPORT_DISABLED_TESTS]] optional arguments: -h, --help show this help message and exit --subprocess whether to run each test in a subprocess --seed SEED --accept --jit_executor JIT_EXECUTOR --repeat REPEAT --test_bailouts --save-xml [SAVE_XML] --discover-tests --log-suffix LOG_SUFFIX --run-parallel RUN_PARALLEL --import-slow-tests [IMPORT_SLOW_TESTS] --import-disabled-tests [IMPORT_DISABLED_TESTS] ``` Also ran some other tests to make sure tests still worked, and other tests with --help or -h flag Reviewed By: seemethere Differential Revision: D30677776 Pulled By: PatrickKan fbshipit-source-id: eb3d6e3fa677137ec703ec3a23808efb99acc896 --- torch/testing/_internal/common_utils.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/torch/testing/_internal/common_utils.py b/torch/testing/_internal/common_utils.py index 90f3551..0a265b5 100644 --- a/torch/testing/_internal/common_utils.py +++ b/torch/testing/_internal/common_utils.py @@ -23,6 +23,7 @@ import warnings import random import contextlib import shutil +import threading from pathlib import Path import socket import subprocess @@ -156,7 +157,7 @@ def _get_test_report_path(): return os.path.join('test-reports', test_source) -parser = argparse.ArgumentParser(add_help=False) +parser = argparse.ArgumentParser() parser.add_argument('--subprocess', action='store_true', help='whether to run each test in a subprocess') parser.add_argument('--seed', type=int, default=1234) @@ -173,6 +174,15 @@ parser.add_argument('--run-parallel', type=int, default=1) parser.add_argument('--import-slow-tests', type=str, nargs='?', const=SLOW_TESTS_FILE) parser.add_argument('--import-disabled-tests', type=str, nargs='?', const=DISABLED_TESTS_FILE) +# Only run when -h or --help flag is active to display both unittest and parser help messages. +def run_unittest_help(argv): + unittest.main(argv=argv) + +if '-h' in sys.argv or '--help' in sys.argv: + help_thread = threading.Thread(target=run_unittest_help, args=(sys.argv,)) + help_thread.start() + help_thread.join() + args, remaining = parser.parse_known_args() if args.jit_executor == 'legacy': GRAPH_EXECUTOR = ProfilingMode.LEGACY -- 2.7.4