Guest User

fire_calculator

a guest
Apr 18th, 2021
807
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.45 KB | None | 0 0
  1. #!/usr/bin/python3
  2.  
  3. # Modify the following as inputs:
  4. LAC = 10**5
  5. CURRENT_YEAR = 2021
  6. RETIREMENT_YEAR = 2027
  7. DEATH_YEAR = 2080
  8. INFLATION_RATE = 0.06  # 6% inflation rate in India on average
  9. SALARY_INCREASE_INTERVAL = 3  # Will get a salary bump after these many years (job hop interval)
  10. SALARY_INCREASE_RATE = 0.5  # 50% salary hike at job switch
  11. EQUITY_RETURN_RATE = 0.1  # Assuming 10% return rate from index funds.
  12. CURRENT_WEALTH = 5000000.0  # The corpus you have right now
  13. CURRENT_ANNUAL_EXPENSES = 1000000.0  # Your current annual expenses
  14. CURRENT_ANNUAL_INCOME = 3700000.0  # Your current annual salary after tax
  15. EXPENSE_REDUCTION_RATIO_AFTER_RETIREMENT = 0.5  # Annual expenses will become half of before due to no rents/donations etc.
  16.  
  17.  
  18. def get_real_money_value_multiplier(src_year, target_year):
  19.   """Inflation multiplier: To help compute the real value of money at a future/past target date."""
  20.   return (1.0 + INFLATION_RATE) ** (target_year - src_year)
  21.  
  22.  
  23. def earning_phase():
  24.   """Earning phase: Period of your life when you are hustling and earning."""
  25.   i = 0
  26.   year = CURRENT_YEAR
  27.   wealth = CURRENT_WEALTH
  28.   expenses = CURRENT_ANNUAL_EXPENSES
  29.   salary = CURRENT_ANNUAL_INCOME
  30.   while year < RETIREMENT_YEAR:
  31.     savings = salary - expenses
  32.     wealth += savings
  33.     if i % SALARY_INCREASE_INTERVAL == 0:
  34.       salary = salary * (1 + SALARY_INCREASE_RATE)
  35.     expenses = expenses * (1 + INFLATION_RATE)
  36.     wealth = wealth * (1 + EQUITY_RETURN_RATE)
  37.     year += 1
  38.     i += 1
  39.  
  40.   real_value_multiplier = get_real_money_value_multiplier(RETIREMENT_YEAR, CURRENT_YEAR)
  41.   print(f'Real value multiplier for {RETIREMENT_YEAR} -> {CURRENT_YEAR} = {real_value_multiplier}')
  42.   print(f'YEAR {RETIREMENT_YEAR}: Corpus at the start of retirement = {wealth/LAC:0.2f} lacs [Real value in {CURRENT_YEAR} = {wealth * real_value_multiplier/LAC:0.2f} lacs]')
  43.   print(f'YEAR {RETIREMENT_YEAR}: Annual expenses during the first year of retirement = {expenses/LAC:0.2f} lacs [Real value in {CURRENT_YEAR} = {expenses * real_value_multiplier/LAC:0.2f} lacs]')
  44.   print(f'YEAR {RETIREMENT_YEAR}: At the start of retirement, your corpus is {wealth/expenses:0.2f} times your annual expenses.')
  45.   expenses *= EXPENSE_REDUCTION_RATIO_AFTER_RETIREMENT
  46.   print(f'YEAR {RETIREMENT_YEAR}: Annual expenses (x{EXPENSE_REDUCTION_RATIO_AFTER_RETIREMENT:0.2f}) after retirement = {expenses/LAC:0.2f} lacs [Real value in {CURRENT_YEAR} = {expenses * real_value_multiplier/LAC:0.2f} lacs]')
  47.   return wealth, expenses
  48.  
  49.  
  50. def retirement_phase(wealth, expenses):
  51.   """Period of your life when you are retired and not earning anything."""
  52.   year = RETIREMENT_YEAR
  53.   while year < DEATH_YEAR:
  54.     wealth = wealth * (1 + EQUITY_RETURN_RATE)
  55.     expenses = expenses * (1 + INFLATION_RATE)
  56.     wealth -= expenses
  57.     year += 1
  58.  
  59.   real_value_multiplier = get_real_money_value_multiplier(DEATH_YEAR, CURRENT_YEAR)
  60.   print(f'Real value multiplier for {DEATH_YEAR} -> {CURRENT_YEAR} = {real_value_multiplier}')
  61.   print(f'YEAR {DEATH_YEAR}: Corpus at deathbed = {wealth/LAC:0.2f} lacs [Real value in {CURRENT_YEAR} = {wealth * real_value_multiplier/LAC:0.2f} lacs]')
  62.   print(f'YEAR {DEATH_YEAR}: Annual expenses at deathbed = {expenses/LAC:0.2f} lacs [Real value in {CURRENT_YEAR} = {expenses * real_value_multiplier/LAC:0.2f} lacs]')
  63.   print(f'YEAR {DEATH_YEAR}: At deathbed, your corpus is {wealth/expenses:0.2f} times your annual expenses')
  64.  
  65.  
  66. def main():
  67.   retirement_phase(*earning_phase())
  68.  
  69.  
  70. main()
  71.  
Advertisement
Add Comment
Please, Sign In to add comment