1+ from dataclasses import dataclass
2+
3+ from simple_parsing import ArgumentParser
4+ from simple_parsing .helpers import flag
5+
6+
7+ def parse (cls , args : str = "" ):
8+ """Removes some boilerplate code from the examples."""
9+ parser = ArgumentParser () # Create an argument parser
10+ parser .add_arguments (cls , dest = "hparams" ) # add arguments for the dataclass
11+ ns = parser .parse_args (args .split ()) # parse the given `args`
12+ return ns .hparams
13+
14+
15+ @dataclass
16+ class HParams :
17+ """Set of options for the training of a Model."""
18+
19+ num_layers : int = 4
20+ num_units : int = 64
21+ optimizer : str = "ADAM"
22+ learning_rate : float = 0.001
23+ train : bool = flag (default = True , negative_prefix = "--no-" )
24+
25+
26+ # Example 1 using default flag, i.e. train set to True
27+ args = parse (HParams )
28+
29+ print (args )
30+ expected = """
31+ HParams(num_layers=4, num_units=64, optimizer='ADAM', learning_rate=0.001, train=True)
32+ """
33+
34+ # Example 2 using the flags negative prefix
35+ assert parse (HParams , "--no-train" ) == HParams (train = False )
36+
37+
38+ # showing what --help outputs
39+ parser = ArgumentParser () # Create an argument parser
40+ parser .add_arguments (HParams , dest = "hparams" ) # add arguments for the dataclass
41+ parser .print_help ()
42+ expected += """
43+ usage: flag.py [-h] [--num_layers int] [--num_units int] [--optimizer str]
44+ [--learning_rate float] [--train bool]
45+
46+ optional arguments:
47+ -h, --help show this help message and exit
48+
49+ HParams ['hparams']:
50+ Set of options for the training of a Model.
51+
52+ --num_layers int (default: 4)
53+ --num_units int (default: 64)
54+ --optimizer str (default: ADAM)
55+ --learning_rate float
56+ (default: 0.001)
57+ --train bool, --no-train bool
58+ (default: True)
59+ """
0 commit comments