def net_present_value(self, ini_year, end_year, val_years): """ Compute net present value between present year and future year. Parameters ---------- ini_year: float initial year end_year: float end year val_years: np.array cash flow at each year btw ini_year and end_year (both included) Returns ------- net_present_value: float net present value between present year and future year. """ year_range = np.arange(ini_year, end_year + 1) if year_range.size != val_years.size: raise ValueError('Wrong size of yearly values.') sel_disc = self.select(year_range) if sel_disc is None: raise ValueError('No information of discount rates for provided years:' f' {ini_year} - {end_year}') return u_fin.net_present_value(sel_disc.years, sel_disc.rates, val_years)
def test_net_pres_val_pass(self): """ Test net_present_value against MATLAB reference""" years = np.arange(2018, 2041) disc_rates = np.ones(years.size)*0.02 val_years = np.ones(years.size)*6.512201157564418e9 res = net_present_value(years, disc_rates, val_years) self.assertEqual(1.215049630691397e+11, res)
def net_present_value(self, ini_year, end_year, val_years): """Compute net present value between present year and future year. Parameters: ini_year (float): initial year end_year (float): end year val_years (np.array): cash flow at each year btw ini_year and end_year (both included) Returns: float """ year_range = np.arange(ini_year, end_year + 1) if year_range.size != val_years.size: LOGGER.error('Wrong size of yearly values.') raise ValueError sel_disc = self.select(year_range) if sel_disc is None: LOGGER.error('No information of discount rates for provided years:'\ ' %s - %s', ini_year, end_year) raise ValueError return u_fin.net_present_value(sel_disc.years, sel_disc.rates, val_years)