#!/usr/bin/env python3 import account from dataclasses import dataclass import returns_and_expenses as rai from typing import List, Tuple import string_utils as su from type.money import Money import taxman @dataclass(repr=False) class SimulationParameters(object): initial_account_states: List[account.Account] initial_annual_expenses: Money annual_expenses: Money lynn_social_security_age: int lynn_annual_social_security_dollars: float scott_social_security_age: int scott_annual_social_security_dollars: float federal_dividends_and_long_term_gains_brackets: List[Tuple[Money, float]] federal_ordinary_income_tax_brackets: List[Tuple[Money, float]] returns_and_expenses: rai.ReturnsAndExpenses def __repr__(self): with su.SprintfStdout() as buf: print('SIMULATION PARAMETERS:') print(f' initial_annual_expenses: {self.initial_annual_expenses}') print(f' current_annual_expenses: {self.annual_expenses}') print(f' lynn_social_security_age: {self.lynn_social_security_age}') print(f' lynn_annual_social_security_dollars: {self.lynn_annual_social_security_dollars}') print(f' scott_social_security_age: {self.scott_social_security_age}') print(f' scott_annual_social_security_dollars: {self.scott_annual_social_security_dollars}') print(f' returns_and_expenses: {self.returns_and_expenses}') print(' federal_ordinary_income_tax_brackets: [') for t in self.federal_ordinary_income_tax_brackets: print(f' {t[0]} => {t[1]}') print(' ]') print(' federal_dividends_and_long_term_gains_brackets: [') for t in self.federal_dividends_and_long_term_gains_brackets: print(f' {t[0]} => {t[1]}') print(' ]') return buf() DEFAULT_SIMULATION_PARAMS = SimulationParameters( initial_account_states = [], initial_annual_expenses = Money(150000), annual_expenses = Money(150000), lynn_social_security_age = 67, lynn_annual_social_security_dollars = 40000, scott_social_security_age = 67, scott_annual_social_security_dollars = 40000, federal_ordinary_income_tax_brackets = taxman.PESSIMISTIC_FEDERAL_INCOME_TAX_BRACKETS, federal_dividends_and_long_term_gains_brackets = taxman.PESSIMISTIC_LONG_TERM_GAIN_FEDERAL_TAX_BRACKETS, returns_and_expenses = None, )