import argparse
def add_common_args(parser):
parser.add_argument("-i", "--input", required=True, help="CSV test case file")
parser.add_argument("--config", default=None,
help="Path to ttk config YAML (overrides ~/.config/ttk/ and ./ttk.conf.yaml)")
parser.add_argument("-o", "--output", help="Output CSV file")
parser.add_argument("-t", "--testcase", help="Specify testcase name(s), comma-separated")
parser.add_argument("--ti", "--testcase-index", dest="testcase_index",
help="Specify testcase indexes, e.g. --ti=1,3,6 or --ti=1-5")
parser.add_argument("--tc", "--testcase-count", type=int, dest="testcase_count",
help="Randomly pick N test cases")
parser.add_argument("--priority", help="Filter by priority, e.g. --priority=1,3 or --priority=1-3")
parser.add_argument("--op", "--operator", dest="operator", help="Filter by operator name(s)")
parser.add_argument("--no-op", "--exclude-operator", dest="exclude_operator",
help="Exclude operator name(s)")
parser.add_argument("--seed", "--random-seed", type=int, dest="random_seed", help="Random seed")
parser.add_argument("--input-dist", dest="input_dist", choices=["uniform", "normal"],
default="uniform", help="Input data distribution (default: uniform)")
parser.add_argument("--compare", default=None,
choices=["close", "stat_rel_err", "cosine", "binary", "requant", "cross_check"],
help="Comparison method. Default: per-output routing via Spec.tolerance "
"(requires --plugin), else stat_rel_err.")
parser.add_argument("--golden-mode", dest="golden_mode", default="Enable",
choices=["Enable", "Disable", "Promote"],
help="Golden generation mode (default: Enable)")
parser.add_argument("--dump", nargs="?", const="full",
help="Dump data: full, in, out, golden (comma-separated)")
parser.add_argument("--dump-format", dest="dump_format", default="bin",
choices=["bin", "npy", "pt", "print"],
help="Dump file format (default: bin)")
parser.add_argument("--dump-on-fail", dest="dump_on_fail", action="store_true",
help="Dump all data when precision check fails")
parser.add_argument("--manual-data-dirs", dest="manual_data_dirs", nargs="+",
help="Prepared input/golden data directories. Without --no-prof, "
"load matching testcase data and run device comparison")
parser.add_argument("--plugin", help="External plugin path for customized golden/inputs")
parser.add_argument("--rerun", help="Rerun failed cases, e.g. --rerun=precision_status")
parser.add_argument("--title", "--titles", dest="title",
help="Custom output columns, e.g. --title=testcase_name,dyn_perf_us")
parser.add_argument("--csv-preserve", dest="csv_preserve", action="store_true",
help="Preserve original CSV headers")
parser.add_argument("--single-log", dest="single_log", action="store_true",
help="Each test case gets its own log file")
parser.add_argument("--print", dest="summary_print", default=True,
type=lambda x: x.lower() != "false",
help="Print summary info periodically (default: true)")
parser.add_argument("--validate", dest="validate_only", action="store_true",
help="Validate CSV cases only, skip device execution")
parser.add_argument("--proc-no-reuse", dest="proc_no_reuse", action="store_true",
help="Create new process for each case")
parser.add_argument("--no-memory-check", dest="no_memory_check", action="store_true",
help="Skip host memory check")
parser.add_argument("--task-prof", dest="task_prof", default=True,
type=lambda x: x.lower() != "false",
help="Profile E2E duration (default: true)")
parser.add_argument("--po", "--progress-output", dest="progress_output",
help="Progress output file")
parser.add_argument("--provider", default=None,
help="Which providers to TEST (e.g. torch,tf). "
"Test filter — narrows dispatch, does NOT override remote config. "
"If not set, uses the first available key from spec's third_party.")