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)
Esempio n. 2
0
    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)
Esempio n. 3
0
    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)