Positional Arguments#
Positional-only arguments in functions are converted to positional CLI arguments.
For more general positional arguments, see tyro.conf.Positional
.
1from __future__ import annotations
2
3import dataclasses
4import enum
5import pathlib
6from typing import Tuple
7
8import tyro
9
10
11def main(
12 source: pathlib.Path,
13 dest: pathlib.Path,
14 /, # Mark the end of positional arguments.
15 optimizer: OptimizerConfig,
16 force: bool = False,
17 verbose: bool = False,
18 background_rgb: Tuple[float, float, float] = (1.0, 0.0, 0.0),
19) -> None:
20 """Command-line interface defined using a function signature. Note that this
21 docstring is parsed to generate helptext.
22
23 Args:
24 source: Source path.
25 dest: Destination path.
26 optimizer: Configuration for our optimizer object.
27 force: Do not prompt before overwriting.
28 verbose: Explain what is being done.
29 background_rgb: Background color. Red by default.
30 """
31 print(f"{source=}\n{dest=}\n{optimizer=}\n{force=}\n{verbose=}\n{background_rgb=}")
32
33
34class OptimizerType(enum.Enum):
35 ADAM = enum.auto()
36 SGD = enum.auto()
37
38
39@dataclasses.dataclass(frozen=True)
40class OptimizerConfig:
41 algorithm: OptimizerType = OptimizerType.ADAM
42 """Gradient-based optimizer to use."""
43
44 learning_rate: float = 3e-4
45 """Learning rate to use."""
46
47 weight_decay: float = 1e-2
48 """Coefficient for L2 regularization."""
49
50
51if __name__ == "__main__":
52 tyro.cli(main)
python 04_additional/01_positional_args.py --help
usage: 01_positional_args.py [-h] [OPTIONS] PATH PATH Command-line interface defined using a function signature. Note that this docstring is parsed to generate helptext. ╭─ positional arguments ─────────────────────────────────────────────────────╮ │ PATH Source path. (required) │ │ PATH Destination path. (required) │ ╰────────────────────────────────────────────────────────────────────────────╯ ╭─ options ──────────────────────────────────────────────────────────────────╮ │ -h, --help show this help message and exit │ │ --force, --no-force Do not prompt before overwriting. (default: False) │ │ --verbose, --no-verbose │ │ Explain what is being done. (default: False) │ │ --background-rgb FLOAT FLOAT FLOAT │ │ Background color. Red by default. (default: 1.0 │ │ 0.0 0.0) │ ╰────────────────────────────────────────────────────────────────────────────╯ ╭─ optimizer options ────────────────────────────────────────────────────────╮ │ Configuration for our optimizer object. │ │ ────────────────────────────────────────────────────────────────────────── │ │ --optimizer.algorithm {ADAM,SGD} │ │ Gradient-based optimizer to use. (default: ADAM) │ │ --optimizer.learning-rate FLOAT │ │ Learning rate to use. (default: 0.0003) │ │ --optimizer.weight-decay FLOAT │ │ Coefficient for L2 regularization. (default: 0.01) │ ╰────────────────────────────────────────────────────────────────────────────╯
python 04_additional/01_positional_args.py ./a ./b --optimizer.learning-rate 1e-5
source=PosixPath('a') dest=PosixPath('b') optimizer=OptimizerConfig(algorithm=<OptimizerType.ADAM: 1>, learning_rate=1e-05, weight_decay=0.01) force=False verbose=False background_rgb=(1.0, 0.0, 0.0)