|
23 | 23 | SamEconomicsCalculations, |
24 | 24 | _get_royalty_rate_schedule, |
25 | 25 | ) |
26 | | -from geophires_x.GeoPHIRESUtils import sig_figs, quantity |
| 26 | +from geophires_x.GeoPHIRESUtils import sig_figs, quantity, is_float |
27 | 27 |
|
28 | 28 | # noinspection PyProtectedMember |
29 | 29 | 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): |
221 | 221 | logs, 'has been adjusted to: [0.25, 0.25, 0.25, 0.25]', treat_substring_match_as_match=True |
222 | 222 | ) |
223 | 223 |
|
224 | | - cy4_cf = construction_years_4.result['SAM CASH FLOW PROFILE'] |
| 224 | + cy4_cf = construction_years_4.result['SAM CASH FLOW PROFILE'] |
225 | 225 |
|
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 | + ) |
231 | 232 |
|
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'] |
233 | 234 |
|
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 | + ) |
241 | 257 |
|
242 | 258 | def test_bond_interest_rate_during_construction(self): |
243 | 259 | fraction_in_bonds: float = 0.5 |
|
0 commit comments