Updated.
[retire.git] / retire.py
1 #!/usr/bin/env python3
2
3 from typing import List
4
5 import bootstrap
6 import config
7
8 import account
9 from person import Person
10 import result_summarizer
11 import returns_and_expenses as rai
12 import simulation
13 import simulation_params
14 import trials
15 from type.money import Money
16
17
18 args = config.add_commandline_args(
19     'Retire!',
20     'Args that drive the retirement simulator',
21 )
22 args.add_argument(
23     '--num_trials',
24     '-n',
25     type=int,
26     default=1,
27     help='How many simulations to run'
28 )
29 args.add_argument(
30     '--verbosity',
31     '-v',
32     type=int,
33     choices=range(0, 3),
34     default=1,
35     help='How verbose should I be?',
36 )
37
38
39 # This defines the set of account and their initial balances.
40 accounts: List[account.Account] = [
41
42     # Your accounts here....
43
44 ]
45
46
47 @bootstrap.initialize
48 def main() -> None:
49     params = simulation_params.DEFAULT_SIMULATION_PARAMS
50     params.initial_account_states = accounts
51     params.returns_and_expenses = rai.GaussianRae()  #rai.HistoricalRaE()
52
53     if config.config['num_trials'] > 1:
54         with simulation.ReportColorizer():
55             print(params)
56         results = trials.run_multiple_trials(
57             params=params,
58             num_trials=config.config['num_trials']
59         )
60         print
61         result_summarizer.summarize_results(results)
62     else:
63         sim = simulation.Simulation(params)
64         results = sim.simulate(
65             simulation.Verbosity(config.config['verbosity'])
66         )
67         if not results.success:
68             print("Unsuccessful")
69             return 1
70         return 0
71
72
73 if __name__ == '__main__':
74     main()