Ejemplo n.º 1
0
    def test_write_read_pass(self):
        """ Read demo excel file."""      
        disc_rate = DiscRates()
        disc_rate.years = np.arange(1950, 2150)
        disc_rate.rates = np.ones(disc_rate.years.size)*0.03

        file_name = os.path.join(os.path.join(CURR_DIR, 'data'), 'test_disc.xlsx')
        disc_rate.write_excel(file_name)
        
        disc_read = DiscRates()
        disc_read.read_excel(file_name)

        self.assertTrue(np.array_equal(disc_read.years, disc_rate.years))
        self.assertTrue(np.array_equal(disc_read.rates, disc_rate.rates))

        self.assertEqual(disc_read.tag.file_name, file_name)
        self.assertEqual(disc_read.tag.description, '')
Ejemplo n.º 2
0
    def test_write_read_pass(self):
        """Read demo excel file."""
        disc_rate = DiscRates()
        disc_rate.years = np.arange(1950, 2150)
        disc_rate.rates = np.ones(disc_rate.years.size) * 0.03

        file_name = CONFIG.disc_rates.test_data.dir().joinpath(
            'test_disc.xlsx')
        disc_rate.write_excel(file_name)

        disc_read = DiscRates()
        disc_read.read_excel(file_name)

        self.assertTrue(np.array_equal(disc_read.years, disc_rate.years))
        self.assertTrue(np.array_equal(disc_read.rates, disc_rate.rates))

        self.assertEqual(disc_read.tag.file_name, str(file_name))
        self.assertEqual(disc_read.tag.description, '')
Ejemplo n.º 3
0
    def test_template_file_pass(self):
        """ Read demo excel file."""
        disc_rate = DiscRates()
        disc_rate.read_excel(ENT_TEMPLATE_XLS)

        # Check results
        n_rates = 102

        self.assertIn('int', str(disc_rate.years.dtype))
        self.assertEqual(disc_rate.years.shape, (n_rates,))
        self.assertEqual(disc_rate.years[0], 2000)
        self.assertEqual(disc_rate.years[n_rates-1], 2101)

        self.assertIn('float', str(disc_rate.rates.dtype))
        self.assertEqual(disc_rate.rates.shape, (n_rates,))
        self.assertEqual(disc_rate.rates.min(), 0.02)
        self.assertEqual(disc_rate.rates.max(), 0.02)

        self.assertEqual(disc_rate.tag.file_name, ENT_TEMPLATE_XLS)
        self.assertEqual(disc_rate.tag.description, '')
Ejemplo n.º 4
0
    def test_demo_file_pass(self):
        """ Read demo excel file."""      
        disc_rate = DiscRates()
        description = 'One single file.'
        disc_rate.read_excel(ENT_DEMO_TODAY, description)

        # Check results
        n_rates = 51

        self.assertIn('int', str(disc_rate.years.dtype))
        self.assertEqual(disc_rate.years.shape, (n_rates,))
        self.assertEqual(disc_rate.years[0], 2000)
        self.assertEqual(disc_rate.years[n_rates-1], 2050)

        self.assertIn('float', str(disc_rate.rates.dtype))
        self.assertEqual(disc_rate.rates.shape, (n_rates,))
        self.assertEqual(disc_rate.rates.min(), 0.02)
        self.assertEqual(disc_rate.rates.max(), 0.02)

        self.assertEqual(disc_rate.tag.file_name, ENT_DEMO_TODAY)
        self.assertEqual(disc_rate.tag.description, description)
Ejemplo n.º 5
0
class Entity(object):
    """Collects exposures, impact functions, measures and discount rates.
    Default values set when empty constructor.

    Attributes:
        exposures (Exposures): exposures
        impact_funcs (ImpactFucs): impact functions
        measures (MeasureSet): measures
        disc_rates (DiscRates): discount rates
        def_file (str): Default file from configuration file
    """
    def __init__(self):
        """ Empty initializator """
        self.exposures = Exposures()
        self.disc_rates = DiscRates()
        self.impact_funcs = ImpactFuncSet()
        self.measures = MeasureSet()

    def read_mat(self, file_name, description=''):
        """Read MATLAB file of climada.

        Parameters:
            file_name (str, optional): file name(s) or folder name
                containing the files to read
            description (str or list(str), optional): one description of the
                data or a description of each data file

        Raises:
            ValueError
        """
        self.exposures = Exposures()
        self.exposures.read_mat(file_name)

        self.disc_rates = DiscRates()
        self.disc_rates.read_mat(file_name, description)

        self.impact_funcs = ImpactFuncSet()
        self.impact_funcs.read_mat(file_name, description)

        self.measures = MeasureSet()
        self.measures.read_mat(file_name, description)

    def read_excel(self, file_name, description=''):
        """Read csv or xls or xlsx file following climada's template.

        Parameters:
            file_name (str, optional): file name(s) or folder name
                containing the files to read
            description (str or list(str), optional): one description of the
                data or a description of each data file

        Raises:
            ValueError
        """
        self.exposures = Exposures(pd.read_excel(file_name))
        self.exposures.tag = Tag()
        self.exposures.tag.file_name = file_name
        self.exposures.tag.description = description

        self.disc_rates = DiscRates()
        self.disc_rates.read_excel(file_name, description)

        self.impact_funcs = ImpactFuncSet()
        self.impact_funcs.read_excel(file_name, description)

        self.measures = MeasureSet()
        self.measures.read_excel(file_name, description)

    def write_excel(self, file_name):
        """ Write excel file following template. """
        self.exposures.to_excel(file_name)
        self.impact_funcs.write_excel(file_name)
        self.measures.write_excel(file_name)
        self.disc_rates.write_excel(file_name)

    def check(self):
        """Check instance attributes.

        Raises:
            ValueError
        """
        self.disc_rates.check()
        self.exposures.check()
        self.impact_funcs.check()
        self.measures.check()

    def __setattr__(self, name, value):
        """Check input type before set"""
        if name == "exposures":
            if not isinstance(value, Exposures):
                LOGGER.error("Input value is not (sub)class of Exposures.")
                raise ValueError
        elif name == "impact_funcs":
            if not isinstance(value, ImpactFuncSet):
                LOGGER.error("Input value is not (sub)class of ImpactFuncSet.")
                raise ValueError
        elif name == "measures":
            if not isinstance(value, MeasureSet):
                LOGGER.error("Input value is not (sub)class of MeasureSet.")
                raise ValueError
        elif name == "disc_rates":
            if not isinstance(value, DiscRates):
                LOGGER.error("Input value is not (sub)class of DiscRates.")
                raise ValueError
        super().__setattr__(name, value)

    def __str__(self):
        return 'Exposures: \n' + self.exposures.tag.__str__() + \
                '\nDiscRates: \n' + self.disc_rates.tag.__str__() + \
                '\nImpactFuncSet: \n' + self.impact_funcs.tag.__str__() + \
                '\nMeasureSet: \n' + self.measures.tag.__str__()

    __repr__ = __str__