Updated.
[retire.git] / simulation_params.py
1 #!/usr/bin/env python3
2
3 import account
4 from dataclasses import dataclass
5 import returns_and_expenses as rai
6 from typing import List, Tuple
7
8 import string_utils as su
9 from type.money import Money
10
11 import taxman
12
13
14 @dataclass(repr=False)
15 class SimulationParameters(object):
16     initial_account_states: List[account.Account]
17     initial_annual_expenses: Money
18     annual_expenses: Money
19     lynn_social_security_age: int
20     lynn_annual_social_security_dollars: float
21     scott_social_security_age: int
22     scott_annual_social_security_dollars: float
23     federal_dividends_and_long_term_gains_brackets: List[Tuple[Money, float]]
24     federal_ordinary_income_tax_brackets: List[Tuple[Money, float]]
25     returns_and_expenses: rai.ReturnsAndExpenses
26
27     def __repr__(self):
28         with su.SprintfStdout() as buf:
29             print('SIMULATION PARAMETERS:')
30             print(f'    initial_annual_expenses: {self.initial_annual_expenses}')
31             print(f'    current_annual_expenses: {self.annual_expenses}')
32             print(f'    lynn_social_security_age: {self.lynn_social_security_age}')
33             print(f'    lynn_annual_social_security_dollars: {self.lynn_annual_social_security_dollars}')
34             print(f'    scott_social_security_age: {self.scott_social_security_age}')
35             print(f'    scott_annual_social_security_dollars: {self.scott_annual_social_security_dollars}')
36             print(f'    returns_and_expenses: {self.returns_and_expenses}')
37             print('    federal_ordinary_income_tax_brackets: [')
38             for t in self.federal_ordinary_income_tax_brackets:
39                 print(f'        {t[0]} => {t[1]}')
40             print('    ]')
41             print('    federal_dividends_and_long_term_gains_brackets: [')
42             for t in self.federal_dividends_and_long_term_gains_brackets:
43                 print(f'        {t[0]} => {t[1]}')
44             print('    ]')
45         return buf()
46
47
48 DEFAULT_SIMULATION_PARAMS = SimulationParameters(
49     initial_account_states = [],
50     initial_annual_expenses = Money(150000),
51     annual_expenses = Money(150000),
52     lynn_social_security_age = 67,
53     lynn_annual_social_security_dollars = 40000,
54     scott_social_security_age = 67,
55     scott_annual_social_security_dollars = 40000,
56     federal_ordinary_income_tax_brackets = taxman.PESSIMISTIC_FEDERAL_INCOME_TAX_BRACKETS,
57     federal_dividends_and_long_term_gains_brackets = taxman.PESSIMISTIC_LONG_TERM_GAIN_FEDERAL_TAX_BRACKETS,
58     returns_and_expenses = None,
59 )