@@ -27,8 +27,7 @@ def _run_with_contribution(
2727 n = len (children )
2828 per_child = annual_contribution / n
2929 modified = [
30- replace (c , annual_contribution = c .annual_contribution + per_child )
31- for c in children
30+ replace (c , annual_contribution = c .annual_contribution + per_child ) for c in children
3231 ]
3332 hf = household_fund
3433 else : # shared_pool
@@ -76,9 +75,7 @@ def solve_required_savings(
7675 validate_plan (children , assumptions , household_fund )
7776
7877 # Check if already funded with zero additional contribution
79- current_ratio = _run_with_contribution (
80- children , assumptions , household_fund , 0.0 , solve_mode
81- )
78+ current_ratio = _run_with_contribution (children , assumptions , household_fund , 0.0 , solve_mode )
8279 if current_ratio >= target_funding_ratio :
8380 n = len (children )
8481 return SavingsSolution (
@@ -99,46 +96,36 @@ def solve_required_savings(
9996 upper = total_cost / min_years
10097
10198 # Verify upper bound is sufficient
102- upper_ratio = _run_with_contribution (
103- children , assumptions , household_fund , upper , solve_mode
104- )
99+ upper_ratio = _run_with_contribution (children , assumptions , household_fund , upper , solve_mode )
105100 while upper_ratio < target_funding_ratio :
106101 upper *= 2
107102 upper_ratio = _run_with_contribution (
108103 children , assumptions , household_fund , upper , solve_mode
109104 )
110105 if upper > total_cost * 10 :
111- raise SolverError (
112- "Cannot find a feasible contribution within reasonable bounds"
113- )
106+ raise SolverError ("Cannot find a feasible contribution within reasonable bounds" )
114107
115108 # Bisection
116109 lo , hi = 0.0 , upper
117110 for _ in range (max_iterations ):
118111 mid = (lo + hi ) / 2
119- ratio = _run_with_contribution (
120- children , assumptions , household_fund , mid , solve_mode
121- )
112+ ratio = _run_with_contribution (children , assumptions , household_fund , mid , solve_mode )
122113 if ratio < target_funding_ratio :
123114 lo = mid
124115 else :
125116 hi = mid
126117 if hi - lo < tolerance :
127118 break
128119 else :
129- raise SolverError (
130- f"Solver did not converge after { max_iterations } iterations"
131- )
120+ raise SolverError (f"Solver did not converge after { max_iterations } iterations" )
132121
133122 annual = (lo + hi ) / 2
134123 monthly = annual / 12
135124 n = len (children )
136125 per_child = {c .name : annual / n for c in children }
137126
138127 # Verify achieved ratio
139- achieved = _run_with_contribution (
140- children , assumptions , household_fund , annual , solve_mode
141- )
128+ achieved = _run_with_contribution (children , assumptions , household_fund , annual , solve_mode )
142129
143130 return SavingsSolution (
144131 required_annual_contribution = annual ,
0 commit comments