Skip to content

Commit 3b36dac

Browse files
test that construction debt balance equals SAM debt balance at Year 0
1 parent 1a5af3b commit 3b36dac

File tree

1 file changed

+31
-15
lines changed

1 file changed

+31
-15
lines changed

tests/geophires_x_tests/test_economics_sam.py

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
SamEconomicsCalculations,
2424
_get_royalty_rate_schedule,
2525
)
26-
from geophires_x.GeoPHIRESUtils import sig_figs, quantity
26+
from geophires_x.GeoPHIRESUtils import sig_figs, quantity, is_float
2727

2828
# noinspection PyProtectedMember
2929
from geophires_x.EconomicsSamCashFlow import _clean_profile, _is_category_row_label, _is_designator_row_label
@@ -221,23 +221,39 @@ def test_multiple_construction_years(self):
221221
logs, 'has been adjusted to: [0.25, 0.25, 0.25, 0.25]', treat_substring_match_as_match=True
222222
)
223223

224-
cy4_cf = construction_years_4.result['SAM CASH FLOW PROFILE']
224+
cy4_cf = construction_years_4.result['SAM CASH FLOW PROFILE']
225225

226-
cy4_result_npv = construction_years_4.result['ECONOMIC PARAMETERS']['Project NPV']
227-
self.assertEqual(
228-
sig_figs(quantity(cy4_result_npv['value'], cy4_result_npv['unit']).to('USD').magnitude, 4),
229-
sig_figs(self._get_cash_flow_row(cy4_cf, 'After-tax cumulative NPV ($)')[-1], 4),
230-
)
226+
cy4_result_npv = construction_years_4.result['ECONOMIC PARAMETERS']['Project NPV']
227+
self.assertAlmostEqualWithinSigFigs(
228+
quantity(cy4_result_npv['value'], cy4_result_npv['unit']).to('USD').magnitude,
229+
self._get_cash_flow_row(cy4_cf, 'After-tax cumulative NPV ($)')[-1],
230+
num_sig_figs=4,
231+
)
231232

232-
cy4_result_irr = construction_years_4.result['ECONOMIC PARAMETERS']['After-tax IRR']
233+
cy4_result_irr = construction_years_4.result['ECONOMIC PARAMETERS']['After-tax IRR']
233234

234-
self.assertEqual(
235-
sig_figs(
236-
quantity(cy4_result_irr['value'], cy4_result_irr['unit']).to(convertible_unit('percent')).magnitude,
237-
3,
238-
),
239-
sig_figs(self._get_cash_flow_row(cy4_cf, 'After-tax cumulative IRR (%)')[-1], 3),
240-
)
235+
self.assertAlmostEqualWithinSigFigs(
236+
quantity(cy4_result_irr['value'], cy4_result_irr['unit']).to(convertible_unit('percent')).magnitude,
237+
self._get_cash_flow_row(cy4_cf, 'After-tax cumulative IRR (%)')[-1],
238+
)
239+
240+
def _floats(_cf: list[Any]) -> list[float]:
241+
return [float(it) for it in _cf if is_float(it)]
242+
243+
self.assertEqual(
244+
_floats(self._get_cash_flow_row(cy4_cf, 'Debt balance [construction] ($)'))[-1],
245+
_floats(self._get_cash_flow_row(cy4_cf, 'Debt balance ($)'))[0],
246+
)
247+
248+
def assertAlmostEqualWithinSigFigs(self, expected: float | int, actual: float | int, num_sig_figs: int = 3):
249+
"""
250+
TODO move to parent class (BaseTestCase)
251+
"""
252+
253+
self.assertEqual(
254+
sig_figs(expected, num_sig_figs),
255+
sig_figs(actual, num_sig_figs),
256+
)
241257

242258
def test_bond_interest_rate_during_construction(self):
243259
fraction_in_bonds: float = 0.5

0 commit comments

Comments
 (0)