def my_calculation(arguments): """ This function returns the assets after death for the given arguments. """ args, rate_of_return, years_to_wait = arguments # # Calculate the most efficient Roth conversion amount. # most_assets = 0 roth_conversion_amount = 0 best_roth_conversion_amount = 0 while True: simulation = Simulation( args.starting_balance_hsa, args.starting_balance_taxable, args.starting_balance_trad_401k, args.starting_balance_trad_ira, args.starting_balance_roth_401k, args.starting_balance_roth_ira, rate_of_return, years_to_wait, args.current_age, args.age_of_retirement, args.age_to_start_rmds, args.age_of_death, roth_conversion_amount, # this is our variable args.income, args.yearly_income_raise, args.max_income, args.age_of_marriage, args.spending, args.contribution_limit_hsa, args.contribution_catch_up_amount_hsa, args.contribution_catch_up_age_hsa, args.contribution_limit_401k, args.contribution_limit_401k_total, args.contribution_catch_up_amount_401k, args.contribution_catch_up_age_401k, args.contribution_limit_ira, args.contribution_catch_up_amount_ira, args.contribution_catch_up_age_ira, args.do_mega_backdoor_roth, args.work_state, args.retirement_state, args.add_dependent, args.public_safety_employee, args.employer_match_401k, args.max_contribution_percentage_401k, args.employer_contribution_hsa) simulation.simulate() if round(simulation.get_total_assets_after_death(), 2) >= round( most_assets, 2): best_roth_conversion_amount = roth_conversion_amount most_assets = simulation.get_total_assets_after_death() traditional_money = (simulation.accounts.trad_401k.get_value() + simulation.accounts.trad_ira.get_value()) if round(traditional_money, 2) == 0: break roth_conversion_amount += args.roth_conversion_unit simulation = Simulation( args.starting_balance_hsa, args.starting_balance_taxable, args.starting_balance_trad_401k, args.starting_balance_trad_ira, args.starting_balance_roth_401k, args.starting_balance_roth_ira, rate_of_return, years_to_wait, args.current_age, args.age_of_retirement, args.age_to_start_rmds, args.age_of_death, best_roth_conversion_amount, args.income, args.yearly_income_raise, args.max_income, args.age_of_marriage, args.spending, args.contribution_limit_hsa, args.contribution_catch_up_amount_hsa, args.contribution_catch_up_age_hsa, args.contribution_limit_401k, args.contribution_limit_401k_total, args.contribution_catch_up_amount_401k, args.contribution_catch_up_age_401k, args.contribution_limit_ira, args.contribution_catch_up_amount_ira, args.contribution_catch_up_age_ira, args.do_mega_backdoor_roth, args.work_state, args.retirement_state, args.add_dependent, args.public_safety_employee, args.employer_match_401k, args.max_contribution_percentage_401k, args.employer_contribution_hsa) simulation.simulate() return simulation.get_total_assets_after_death()