Updated.
[retire.git] / data.py
1 #!/usr/bin/env python3
2
3 from dataclasses import dataclass
4 from typing import Dict
5
6 from type.rate import Rate
7
8
9 # Used to compute RMDs.  Source:
10 # https://www.irs.gov/publications/p590b#en_US_2018_publink1000231258
11 IRS_ACTUARY_TABLES = {
12     70: 27.4,
13     71: 26.5,
14     72: 25.6,
15     73: 24.7,
16     74: 23.8,
17     75: 22.9,
18     76: 22.0,
19     77: 21.2,
20     78: 20.3,
21     79: 19.5,
22     80: 18.7,
23     81: 17.9,
24     82: 17.1,
25     83: 16.3,
26     84: 15.5,
27     85: 14.8,
28     86: 14.1,
29     87: 13.4,
30     88: 12.7,
31     89: 12.0,
32     90: 11.4,
33     91: 10.8,
34     92: 10.2,
35     93: 9.6,
36     94: 9.1,
37     95: 8.6,
38     96: 8.1,
39     97: 7.6,
40     98: 7.1,
41     99: 6.7,
42     100: 6.3,
43     101: 5.9,
44     102: 5.5,
45     103: 5.2,
46     104: 4.9,
47     105: 4.5,
48     106: 4.2,
49     107: 3.9,
50     108: 3.7,
51     109: 3.4,
52     110: 3.1,
53     111: 2.9,
54     112: 2.6,
55     113: 2.4,
56     114: 2.1,
57 }
58
59
60 def get_actuary_number_years_to_live(age: int):
61     if age < 70:
62         return 27.4 + age
63     if age > 114:
64         return 1.9
65     return IRS_ACTUARY_TABLES[age]
66
67
68 def make_multiplier(percent: float) -> Rate:
69     percent /= 100
70     if percent > 0:
71         percent += 1.0
72     else:
73         percent = 1.0 - percent
74     return percent
75
76
77 #                        year       s&p    10y    infla-
78 #                                   500    bond    tion
79 #
80 # source: https://www.multpl.com/inflation/table/by-year
81 # source: http://pages.stern.nyu.edu/~adamodar/New_Home_Page/datafile/histretSP.html
82
83 @dataclass
84 class StocksBondsAndInflation:
85     snp_500_return: Rate
86     us_10y_bond_return: Rate
87     inflation: Rate
88
89     def __init__(self, snp: Rate, bonds: Rate, inflation: Rate):
90         self.snp_500_return = snp
91         self.us_10y_bond_return = bonds
92         self.inflation = inflation
93
94
95 ROIs_AND_INFLATION: Dict[int, StocksBondsAndInflation] = {
96     2020: StocksBondsAndInflation(Rate(percent_change=18.01), Rate(percent_change=11.33),  Rate(percent_change=2.49)),
97     2019: StocksBondsAndInflation(Rate(percent_change=31.21),  Rate(percent_change=9.64),   Rate(percent_change=1.55)),
98     2018: StocksBondsAndInflation(Rate(percent_change=-4.23),  Rate(percent_change=-0.02),  Rate(percent_change=2.07)),
99     2017: StocksBondsAndInflation(Rate(percent_change=21.61),  Rate(percent_change=2.80),   Rate(percent_change=2.50)),
100     2016: StocksBondsAndInflation(Rate(percent_change=11.77),  Rate(percent_change=0.69),   Rate(percent_change=1.37)),
101     2015: StocksBondsAndInflation(Rate(percent_change=1.38),   Rate(percent_change=1.28),   Rate(percent_change=-0.09)),
102     2014: StocksBondsAndInflation(Rate(percent_change=13.52),  Rate(percent_change=10.75),  Rate(percent_change=1.58)),
103     2013: StocksBondsAndInflation(Rate(percent_change=32.15),  Rate(percent_change=-9.10),  Rate(percent_change=1.59)),
104     2012: StocksBondsAndInflation(Rate(percent_change=15.89),  Rate(percent_change=2.97),   Rate(percent_change=2.93)),
105     2011: StocksBondsAndInflation(Rate(percent_change=2.10),   Rate(percent_change=16.04),  Rate(percent_change=1.63)),
106     2010: StocksBondsAndInflation(Rate(percent_change=14.82),  Rate(percent_change=8.46),   Rate(percent_change=2.63)),
107     2009: StocksBondsAndInflation(Rate(percent_change=25.94),  Rate(percent_change=-11.12), Rate(percent_change=0.03)),
108     2008: StocksBondsAndInflation(Rate(percent_change=-36.55), Rate(percent_change=20.10),  Rate(percent_change=4.28)),
109     2007: StocksBondsAndInflation(Rate(percent_change=5.48),   Rate(percent_change=10.21),  Rate(percent_change=2.08)),
110     2006: StocksBondsAndInflation(Rate(percent_change=15.61),  Rate(percent_change=1.96),   Rate(percent_change=3.99)),
111     2005: StocksBondsAndInflation(Rate(percent_change=4.83),   Rate(percent_change=2.87),   Rate(percent_change=2.97)),
112     2004: StocksBondsAndInflation(Rate(percent_change=10.74),  Rate(percent_change=4.49),   Rate(percent_change=1.93)),
113     2003: StocksBondsAndInflation(Rate(percent_change=28.36),  Rate(percent_change=0.38),   Rate(percent_change=2.60)),
114     2002: StocksBondsAndInflation(Rate(percent_change=-21.97), Rate(percent_change=15.12),  Rate(percent_change=1.14)),
115     2001: StocksBondsAndInflation(Rate(percent_change=-11.85), Rate(percent_change=5.57),   Rate(percent_change=3.73)),
116     2000: StocksBondsAndInflation(Rate(percent_change=-9.03),  Rate(percent_change=16.66),  Rate(percent_change=2.74)),
117     1999: StocksBondsAndInflation(Rate(percent_change=20.89),  Rate(percent_change=-8.25),  Rate(percent_change=1.67)),
118     1998: StocksBondsAndInflation(Rate(percent_change=28.34),  Rate(percent_change=14.92),  Rate(percent_change=1.57)),
119     1997: StocksBondsAndInflation(Rate(percent_change=33.10),  Rate(percent_change=9.94),   Rate(percent_change=3.04)),
120     1996: StocksBondsAndInflation(Rate(percent_change=22.68),  Rate(percent_change=1.43),   Rate(percent_change=2.73)),
121     1995: StocksBondsAndInflation(Rate(percent_change=37.20),  Rate(percent_change=23.48),  Rate(percent_change=2.80)),
122     1994: StocksBondsAndInflation(Rate(percent_change=1.33),   Rate(percent_change=-8.04),  Rate(percent_change=2.52)),
123     1993: StocksBondsAndInflation(Rate(percent_change=9.97),   Rate(percent_change=14.21),  Rate(percent_change=3.26)),
124     1992: StocksBondsAndInflation(Rate(percent_change=7.49),   Rate(percent_change=9.36),   Rate(percent_change=2.60)),
125     1991: StocksBondsAndInflation(Rate(percent_change=30.23),  Rate(percent_change=15.00),  Rate(percent_change=5.65)),
126     1990: StocksBondsAndInflation(Rate(percent_change=-3.06),  Rate(percent_change=6.24),   Rate(percent_change=5.20)),
127     1989: StocksBondsAndInflation(Rate(percent_change=31.48),  Rate(percent_change=17.69),  Rate(percent_change=4.67)),
128     1988: StocksBondsAndInflation(Rate(percent_change=16.54),  Rate(percent_change=8.22),   Rate(percent_change=4.05)),
129     1987: StocksBondsAndInflation(Rate(percent_change=5.81),   Rate(percent_change=-4.96),  Rate(percent_change=1.46)),
130     1986: StocksBondsAndInflation(Rate(percent_change=18.49),  Rate(percent_change=24.28),  Rate(percent_change=3.89)),
131     1985: StocksBondsAndInflation(Rate(percent_change=31.24),  Rate(percent_change=25.71),  Rate(percent_change=3.53)),
132     1984: StocksBondsAndInflation(Rate(percent_change=6.15),   Rate(percent_change=13.73),  Rate(percent_change=4.19)),
133     1983: StocksBondsAndInflation(Rate(percent_change=22.34),  Rate(percent_change=3.20),   Rate(percent_change=3.71)),
134     1982: StocksBondsAndInflation(Rate(percent_change=20.42),  Rate(percent_change=32.81),  Rate(percent_change=8.39)),
135     1981: StocksBondsAndInflation(Rate(percent_change=-4.70),  Rate(percent_change=8.20),   Rate(percent_change=11.83)),
136     1980: StocksBondsAndInflation(Rate(percent_change=31.74),  Rate(percent_change=-2.99),  Rate(percent_change=13.91)),
137     1979: StocksBondsAndInflation(Rate(percent_change=18.52),  Rate(percent_change=0.67),   Rate(percent_change=9.28)),
138     1978: StocksBondsAndInflation(Rate(percent_change=6.51),   Rate(percent_change=-0.78),  Rate(percent_change=6.84)),
139     1977: StocksBondsAndInflation(Rate(percent_change=-6.98),  Rate(percent_change=1.29),   Rate(percent_change=5.22)),
140     1976: StocksBondsAndInflation(Rate(percent_change=23.83),  Rate(percent_change=15.98),  Rate(percent_change=6.72)),
141     1975: StocksBondsAndInflation(Rate(percent_change=37.00),  Rate(percent_change=3.61),   Rate(percent_change=11.80)),
142     1974: StocksBondsAndInflation(Rate(percent_change=-25.90), Rate(percent_change=1.99),   Rate(percent_change=9.39)),
143     1973: StocksBondsAndInflation(Rate(percent_change=-14.31), Rate(percent_change=3.66),   Rate(percent_change=3.65)),
144     1972: StocksBondsAndInflation(Rate(percent_change=18.76),  Rate(percent_change=2.82),   Rate(percent_change=3.27)),
145     1971: StocksBondsAndInflation(Rate(percent_change=14.22),  Rate(percent_change=9.79),   Rate(percent_change=5.29)),
146     1970: StocksBondsAndInflation(Rate(percent_change=3.56),   Rate(percent_change=16.75),  Rate(percent_change=6.18)),
147     1969: StocksBondsAndInflation(Rate(percent_change=-8.24),  Rate(percent_change=-5.01),  Rate(percent_change=4.40)),
148     1968: StocksBondsAndInflation(Rate(percent_change=10.81),  Rate(percent_change=3.27),   Rate(percent_change=3.65)),
149     1967: StocksBondsAndInflation(Rate(percent_change=23.80),  Rate(percent_change=-1.58),  Rate(percent_change=3.46)),
150     1966: StocksBondsAndInflation(Rate(percent_change=-9.97),  Rate(percent_change=2.91),   Rate(percent_change=1.92)),
151     1965: StocksBondsAndInflation(Rate(percent_change=12.40),  Rate(percent_change=0.72),   Rate(percent_change=0.97)),
152     1964: StocksBondsAndInflation(Rate(percent_change=16.42),  Rate(percent_change=3.73),   Rate(percent_change=1.64)),
153     1963: StocksBondsAndInflation(Rate(percent_change=22.61),  Rate(percent_change=1.68),   Rate(percent_change=1.33)),
154     1962: StocksBondsAndInflation(Rate(percent_change=-8.81),  Rate(percent_change=5.69),   Rate(percent_change=0.67)),
155     1961: StocksBondsAndInflation(Rate(percent_change=26.64),  Rate(percent_change=2.06),   Rate(percent_change=1.71)),
156     1960: StocksBondsAndInflation(Rate(percent_change=0.34),   Rate(percent_change=11.64),  Rate(percent_change=1.03)),
157     1959: StocksBondsAndInflation(Rate(percent_change=12.06),  Rate(percent_change=-2.65),  Rate(percent_change=1.40)),
158     1958: StocksBondsAndInflation(Rate(percent_change=43.72),  Rate(percent_change=-2.10),  Rate(percent_change=3.62)),
159     1957: StocksBondsAndInflation(Rate(percent_change=-10.46), Rate(percent_change=6.80),   Rate(percent_change=2.99)),
160     1956: StocksBondsAndInflation(Rate(percent_change=7.44),   Rate(percent_change=-2.26),  Rate(percent_change=0.37)),
161     1955: StocksBondsAndInflation(Rate(percent_change=32.60),  Rate(percent_change=-1.34),  Rate(percent_change=-0.74)),
162     1954: StocksBondsAndInflation(Rate(percent_change=52.56),  Rate(percent_change=3.29),   Rate(percent_change=1.13)),
163     1953: StocksBondsAndInflation(Rate(percent_change=-1.21),  Rate(percent_change=4.14),   Rate(percent_change=0.38)),
164     1952: StocksBondsAndInflation(Rate(percent_change=18.15),  Rate(percent_change=2.27),   Rate(percent_change=4.33)),
165     1951: StocksBondsAndInflation(Rate(percent_change=23.68),  Rate(percent_change=-0.30),  Rate(percent_change=8.09)),
166     1950: StocksBondsAndInflation(Rate(percent_change=30.81),  Rate(percent_change=0.43),   Rate(percent_change=-2.08)),
167     1949: StocksBondsAndInflation(Rate(percent_change=18.30),  Rate(percent_change=4.66),   Rate(percent_change=1.27)),
168     1948: StocksBondsAndInflation(Rate(percent_change=5.70),   Rate(percent_change=1.95),   Rate(percent_change=10.23)),
169     1947: StocksBondsAndInflation(Rate(percent_change=5.20),   Rate(percent_change=0.92),   Rate(percent_change=18.13)),
170     1946: StocksBondsAndInflation(Rate(percent_change=-8.43),  Rate(percent_change=3.13),   Rate(percent_change=2.25)),
171     1945: StocksBondsAndInflation(Rate(percent_change=35.82),  Rate(percent_change=3.80),   Rate(percent_change=2.30)),
172     1944: StocksBondsAndInflation(Rate(percent_change=19.03),  Rate(percent_change=2.58),   Rate(percent_change=2.96)),
173     1943: StocksBondsAndInflation(Rate(percent_change=25.06),  Rate(percent_change=2.49),   Rate(percent_change=7.64)),
174     1942: StocksBondsAndInflation(Rate(percent_change=19.17),  Rate(percent_change=2.29),   Rate(percent_change=11.35)),
175     1941: StocksBondsAndInflation(Rate(percent_change=-12.77), Rate(percent_change=-2.02),  Rate(percent_change=1.44)),
176     1940: StocksBondsAndInflation(Rate(percent_change=-10.67), Rate(percent_change=5.40),   Rate(percent_change=-0.71)),
177     1939: StocksBondsAndInflation(Rate(percent_change=-1.10),  Rate(percent_change=4.41),   Rate(percent_change=-1.41)),
178     1938: StocksBondsAndInflation(Rate(percent_change=29.28),  Rate(percent_change=4.21),   Rate(percent_change=0.71)),
179     1937: StocksBondsAndInflation(Rate(percent_change=-35.34), Rate(percent_change=1.38),   Rate(percent_change=2.17)),
180     1936: StocksBondsAndInflation(Rate(percent_change=31.94),  Rate(percent_change=5.02),   Rate(percent_change=1.47)),
181     1935: StocksBondsAndInflation(Rate(percent_change=46.74),  Rate(percent_change=4.47),   Rate(percent_change=3.03)),
182     1934: StocksBondsAndInflation(Rate(percent_change=-1.19),  Rate(percent_change=7.96),   Rate(percent_change=2.33)),
183     1933: StocksBondsAndInflation(Rate(percent_change=49.98),  Rate(percent_change=1.86),   Rate(percent_change=-9.79)),
184     1932: StocksBondsAndInflation(Rate(percent_change=-8.64),  Rate(percent_change=8.79),   Rate(percent_change=-10.06)),
185     1931: StocksBondsAndInflation(Rate(percent_change=-43.84), Rate(percent_change=-2.56),  Rate(percent_change=-7.02)),
186     1930: StocksBondsAndInflation(Rate(percent_change=-25.12), Rate(percent_change=4.54),   Rate(percent_change=0.00)),
187     1929: StocksBondsAndInflation(Rate(percent_change=-8.30),  Rate(percent_change=4.20),   Rate(percent_change=-1.16)),
188     1928: StocksBondsAndInflation(Rate(percent_change=43.81),  Rate(percent_change=0.84),   Rate(percent_change=-1.14)),
189 }