def test_append_all_pass(self):
        """Test _append_all function."""
        haz_1 = Hazard('TC')
        haz_1.tag.file_name = 'file1.mat'
        haz_1.tag.description = 'Description 1'
        haz_1.centroids = Centroids()
        haz_1.centroids.set_lat_lon(np.array([1, 3, 5]), np.array([2, 4, 6]))
        haz_1.event_id = np.array([1])
        haz_1.event_name = ['ev1']
        haz_1.date = np.array([1])
        haz_1.orig = np.array([True])
        haz_1.frequency = np.array([1.0])
        haz_1.fraction = sparse.csr_matrix([[0.02, 0.03, 0.04]])
        haz_1.intensity = sparse.csr_matrix([[0.2, 0.3, 0.4]])
        haz_1.units = 'm/s'

        haz_2 = Hazard('TC')
        haz_2.tag.file_name = 'file2.mat'
        haz_2.tag.description = 'Description 2'
        haz_2.centroids = Centroids()
        haz_2.centroids.set_lat_lon(np.array([1, 3, 5]), np.array([2, 4, 6]))
        haz_2.event_id = np.array([1])
        haz_2.event_name = ['ev2']
        haz_2.date = np.array([2])
        haz_2.orig = np.array([False])
        haz_2.frequency = np.array([1.0])
        haz_2.fraction = sparse.csr_matrix([[1.02, 1.03, 1.04]])
        haz_2.intensity = sparse.csr_matrix([[1.2, 1.3, 1.4]])
        haz_2.units = 'm/s'

        haz = Hazard('TC')
        haz._append_all([haz_1, haz_2])


        hres_frac = sparse.csr_matrix([[0.02, 0.03, 0.04], \
                                        [1.02, 1.03, 1.04]])
        hres_inten = sparse.csr_matrix([[0.2, 0.3, 0.4], \
                                       [1.2, 1.3, 1.4]])

        self.assertTrue(sparse.isspmatrix_csr(haz.intensity))
        self.assertTrue(
            np.array_equal(haz.intensity.todense(), hres_inten.todense()))
        self.assertTrue(sparse.isspmatrix_csr(haz.fraction))
        self.assertTrue(
            np.array_equal(haz.fraction.todense(), hres_frac.todense()))
        self.assertEqual(haz.units, haz_2.units)
        self.assertTrue(np.array_equal(haz.frequency, np.array([1.0, 1.0])))
        self.assertTrue(np.array_equal(haz.orig, np.array([True, False])))
        self.assertTrue(np.array_equal(haz.date, np.array([1, 2])))
        self.assertTrue(np.array_equal(haz.event_id, np.array([1, 2])))
        self.assertTrue(haz.event_name, ['ev1', 'ev2'])
        self.assertTrue(
            np.array_equal(haz.centroids.coord, haz_1.centroids.coord))
        self.assertTrue(
            np.array_equal(haz.centroids.coord, haz_2.centroids.coord))
        self.assertTrue(haz.tag, 'file_1.mat + file_2.mat')
        self.assertTrue(haz.tag, 'Description 1 + Description 2')
Beispiel #2
0
    def test_write_read_pass(self):
        ''' Read a hazard mat file correctly.'''
        file_name = os.path.join(DATA_DIR, 'test_haz.h5')

        # Read demo excel file
        hazard = Hazard('TC')
        hazard.read_mat(HAZ_TEST_MAT)
        hazard.event_name = list(map(str, hazard.event_name))
        hazard.write_hdf5(file_name)

        haz_read = Hazard('TC')
        haz_read.read_hdf5(file_name)

        self.assertEqual(hazard.tag.file_name, haz_read.tag.file_name)
        self.assertIsInstance(haz_read.tag.file_name, str)
        self.assertEqual(hazard.tag.haz_type, haz_read.tag.haz_type)
        self.assertIsInstance(haz_read.tag.haz_type, str)
        self.assertEqual(hazard.tag.description, haz_read.tag.description)
        self.assertIsInstance(haz_read.tag.description, str)
        self.assertEqual(hazard.units, haz_read.units)
        self.assertIsInstance(haz_read.units, str)
        self.assertTrue(np.array_equal(hazard.centroids.coord, haz_read.centroids.coord))
        self.assertEqual(hazard.centroids.crs, haz_read.centroids.crs)
        self.assertTrue(np.array_equal(hazard.event_id, haz_read.event_id))
        self.assertTrue(np.array_equal(hazard.frequency, haz_read.frequency))
        self.assertTrue(np.array_equal(hazard.event_name, haz_read.event_name))
        self.assertIsInstance(haz_read.event_name, list)
        self.assertIsInstance(haz_read.event_name[0], str)
        self.assertTrue(np.array_equal(hazard.date, haz_read.date))
        self.assertTrue(np.array_equal(hazard.orig, haz_read.orig))
        self.assertTrue(np.array_equal(hazard.intensity.todense(), haz_read.intensity.todense()))
        self.assertIsInstance(haz_read.intensity, sparse.csr_matrix)
        self.assertTrue(np.array_equal(hazard.fraction.todense(), haz_read.fraction.todense()))
        self.assertIsInstance(haz_read.fraction, sparse.csr_matrix)
Beispiel #3
0
    def test_hazard_intensity_pass(self):
        """Generate all possible plots of the hazard intensity."""
        hazard = Hazard('TC')
        hazard.read_mat(HAZ_DEMO_MAT)
        hazard.event_name = [""] * hazard.event_id.size
        hazard.event_name[35] = "NNN_1185106_gen5"
        hazard.event_name[3898] = "NNN_1190604_gen8"
        hazard.event_name[5488] = "NNN_1192804_gen8"
        myax = hazard.plot_intensity(event=36)
        self.assertIn('Event ID 36: NNN_1185106_gen5', myax.get_title())

        myax = hazard.plot_intensity(event=-1)
        self.assertIn('1-largest Event. ID 3899: NNN_1190604_gen8', myax.get_title())

        myax = hazard.plot_intensity(event=-4)
        self.assertIn('4-largest Event. ID 5489: NNN_1192804_gen8', myax.get_title())

        myax = hazard.plot_intensity(event=0)
        self.assertIn('TC max intensity at each point', myax.get_title())

        myax = hazard.plot_intensity(centr=59)
        self.assertIn('Centroid 59: (30.0, -79.0)', myax.get_title())

        myax = hazard.plot_intensity(centr=-1)
        self.assertIn('1-largest Centroid. 99: (30.0, -75.0)', myax.get_title())

        myax = hazard.plot_intensity(centr=-4)
        self.assertIn('4-largest Centroid. 69: (30.0, -78.0)', myax.get_title())

        myax = hazard.plot_intensity(centr=0)
        self.assertIn('TC max intensity at each event', myax.get_title())

        myax = hazard.plot_intensity(event='NNN_1192804_gen8')
        self.assertIn('NNN_1192804_gen8', myax.get_title())
    def test_same_centroids_extend(self):
        """Append hazard with same centroids, different events."""
        haz1 = dummy_hazard()
        haz2 = Hazard('TC')
        haz2.tag.file_name = 'file2.mat'
        haz2.tag.description = 'Description 2'

        haz2.centroids = haz1.centroids
        haz2.event_id = np.array([5, 6, 7, 8])
        haz2.event_name = ['ev5', 'ev6', 'ev7', 'ev8']
        haz2.frequency = np.array([0.9, 0.75, 0.75, 0.22])
        haz2.fraction = sparse.csr_matrix([[0.2, 0.3, 0.4], \
                                           [0.1, 0.1, 0.1], \
                                           [0.3, 0.1, 0.9], \
                                           [0.3, 0.2, 0.8]])
        haz2.intensity = sparse.csr_matrix([[0.2, 3.3, 6.4], \
                                            [1.1, 0.1, 1.01], \
                                            [8.3, 4.1, 4.0], \
                                            [9.3, 9.2, 1.7]])
        haz2.units = 'm/s'

        haz1.append(haz2)
        haz1.check()

        # expected values
        haz1_orig = dummy_hazard()
        exp_inten = np.zeros((8, 3))
        exp_inten[0:4, 0:3] = haz1_orig.intensity.todense()
        exp_inten[4:8, 0:3] = haz2.intensity.todense()
        exp_frac = np.zeros((8, 3))
        exp_frac[0:4, 0:3] = haz1_orig.fraction.todense()
        exp_frac[4:8, 0:3] = haz2.fraction.todense()

        self.assertEqual(haz1.event_id.size, 8)
        self.assertTrue(sparse.isspmatrix_csr(haz1.intensity))
        self.assertTrue(sparse.isspmatrix_csr(haz1.fraction))
        for i_ev in range(haz1.event_id.size):
            self.assertTrue(
                any((haz1.intensity[i_ev].todense() == exp_inten).all(1)))
            self.assertTrue(
                any((haz1.fraction[i_ev].todense() == exp_frac).all(1)))
            self.assertTrue(haz1.event_name[i_ev] in haz1_orig.event_name +
                            haz2.event_name)
            self.assertTrue(
                haz1.date[i_ev] in np.append(haz1_orig.date, haz2.date))
            self.assertTrue(
                haz1.orig[i_ev] in np.append(haz1_orig.orig, haz2.orig))
            self.assertTrue(haz1.event_id[i_ev] in np.append(
                haz1_orig.event_id, haz2.event_id))
            self.assertTrue(haz1.frequency[i_ev] in np.append(
                haz1_orig.frequency, haz2.frequency))

        self.assertEqual(haz1.centroids.size, 3)
        self.assertTrue(
            np.array_equal(haz1.centroids.coord, haz2.centroids.coord))
        self.assertEqual(haz1.tag.file_name, \
                         [haz1_orig.tag.file_name, haz2.tag.file_name])
        self.assertEqual(haz1.tag.haz_type, haz1_orig.tag.haz_type)
        self.assertEqual(haz1.tag.description, \
                         [haz1_orig.tag.description, haz2.tag.description])
Beispiel #5
0
    def test_write_fraction_pass(self):
        """Test write_raster with fraction"""
        haz_fl = Hazard('FL')
        haz_fl.event_id = np.array([1])
        haz_fl.date = np.array([1])
        haz_fl.frequency = np.array([1])
        haz_fl.orig = np.array([1])
        haz_fl.event_name = ['1']
        haz_fl.intensity = sparse.csr_matrix(np.array([0.5, 0.2, 0.1]))
        haz_fl.fraction = sparse.csr_matrix(np.array([0.5, 0.2, 0.1]) / 2)
        haz_fl.centroids.set_lat_lon(np.array([1, 2, 3]), np.array([1, 2, 3]))
        haz_fl.check()

        haz_fl.write_raster(os.path.join(DATA_DIR, 'test_write_hazard.tif'),
                            intensity=False)

        haz_read = Hazard('FL')
        haz_read.set_raster(
            [os.path.join(DATA_DIR, 'test_write_hazard.tif')],
            files_fraction=[os.path.join(DATA_DIR, 'test_write_hazard.tif')])
        self.assertEqual(haz_read.intensity.shape, (1, 9))
        self.assertEqual(haz_read.fraction.shape, (1, 9))
        self.assertTrue(
            np.allclose(np.unique(np.array(haz_read.fraction.toarray())),
                        np.array([0.0, 0.05, 0.1, 0.25])))
        self.assertTrue(
            np.allclose(np.unique(np.array(haz_read.intensity.toarray())),
                        np.array([0.0, 0.05, 0.1, 0.25])))
Beispiel #6
0
    def test_same_events_append(self):
        """Append hazard with same events (and diff centroids).
        Events are appended with all new centroids columns. """
        haz1 = dummy_hazard()
        haz2 = Hazard('TC')
        haz2.tag.file_name = 'file2.mat'
        haz2.tag.description = 'Description 2'
        haz2.centroids = Centroids()
        haz2.centroids.set_lat_lon(np.array([7, 9, 11]), np.array([8, 10, 12]))

        haz2.event_id = haz1.event_id
        haz2.event_name = haz1.event_name.copy()
        haz2.frequency = haz1.frequency
        haz2.date = haz1.date
        haz2.fraction = sparse.csr_matrix([[0.22, 0.32, 0.44], \
                                           [0.11, 0.11, 0.11], \
                                           [0.32, 0.11, 0.99], \
                                           [0.32, 0.22, 0.88]])
        haz2.intensity = sparse.csr_matrix([[0.22, 3.33, 6.44], \
                                            [1.11, 0.11, 1.11], \
                                            [8.33, 4.11, 4.4], \
                                            [9.33, 9.22, 1.77]])
        haz2.units = 'm/s'

        haz1.append(haz2)

        # expected values
        haz1_ori = dummy_hazard()
        res_inten = sparse.lil_matrix(np.zeros((8, 6)))
        res_inten[0:4, 0:3] = haz1_ori.intensity
        res_inten[4:, 3:] = haz2.intensity

        res_frac = sparse.lil_matrix(np.zeros((8, 6)))
        res_frac[0:4, 0:3] = haz1_ori.fraction
        res_frac[4:, 3:] = haz2.fraction

        self.assertTrue(np.array_equal(res_inten.todense(),
                                       haz1.intensity.todense()))
        self.assertTrue(sparse.isspmatrix_csr(haz1.intensity))
        self.assertTrue(np.array_equal(res_frac.todense(), \
                                       haz1.fraction.todense()))
        self.assertTrue(sparse.isspmatrix_csr(haz1.fraction))
        self.assertEqual(haz1.event_name,
                         haz1_ori.event_name + haz2.event_name)
        self.assertTrue(np.array_equal(haz1.date,
                                       np.append(haz1_ori.date, haz2.date)))
        self.assertTrue(np.array_equal(haz1.orig,
                                       np.append(haz1_ori.orig, haz2.orig)))
        self.assertTrue(np.array_equal(haz1.event_id, np.arange(1,9)))
        self.assertTrue(np.array_equal(haz1.frequency,
                                       np.append(haz1_ori.frequency, haz2.frequency)))
        self.assertEqual(haz1_ori.units, haz1.units)

        self.assertEqual(haz1.tag.file_name, \
                         [haz1_ori.tag.file_name, haz2.tag.file_name])
        self.assertEqual(haz1.tag.haz_type, haz1_ori.tag.haz_type)
        self.assertEqual(haz1.tag.description, \
                         [haz1_ori.tag.description, haz2.tag.description])
Beispiel #7
0
    def test_same_events_same(self):
        """Append hazard with same events and diff centroids. After removing
        duplicate events, initial events are obtained with 0 intensity and
        fraction in new appended centroids."""
        haz1 = dummy_hazard()
        haz2 = Hazard('TC')
        haz2.tag.file_name = 'file2.mat',
        haz2.tag.description = 'Description 2'
        haz2.centroids = Centroids()
        haz2.centroids.set_lat_lon(np.array([7, 9, 11]), np.array([8, 10, 12]))

        haz2.event_id = haz1.event_id
        haz2.event_name = haz1.event_name
        haz2.frequency = haz1.frequency
        haz2.date = haz1.date
        haz2.fraction = sparse.csr_matrix([[0.22, 0.32, 0.44], \
                                           [0.11, 0.11, 0.11], \
                                           [0.32, 0.11, 0.99], \
                                           [0.32, 0.22, 0.88]])
        haz2.intensity = sparse.csr_matrix([[0.22, 3.33, 6.44], \
                                            [1.11, 0.11, 1.11], \
                                            [8.33, 4.11, 4.4], \
                                            [9.33, 9.22, 1.77]])
        haz2.units = 'm/s'

        haz1.append(haz2)
        haz1.remove_duplicates()
        haz1.check()

        # expected values
        haz_res = dummy_hazard()
        haz_res.intensity = sparse.hstack([haz_res.intensity, \
            sparse.lil_matrix((haz_res.intensity.shape[0], 3))], format='lil').tocsr()
        haz_res.fraction = sparse.hstack([haz_res.fraction, \
            sparse.lil_matrix((haz_res.fraction.shape[0], 3))], format='lil').tocsr()
        self.assertTrue(np.array_equal(haz_res.intensity.todense(), \
                                       haz1.intensity.todense()))
        self.assertTrue(sparse.isspmatrix_csr(haz1.intensity))
        self.assertTrue(np.array_equal(haz_res.fraction.todense(), \
                                       haz1.fraction.todense()))
        self.assertTrue(sparse.isspmatrix_csr(haz1.fraction))
        self.assertEqual(haz1.event_name, haz_res.event_name)
        self.assertTrue(np.array_equal(haz1.date, haz_res.date))
        self.assertTrue(np.array_equal(haz1.orig, haz_res.orig))
        self.assertTrue(np.array_equal(haz1.event_id, \
                                       haz_res.event_id))
        self.assertTrue(np.array_equal(haz1.frequency, haz_res.frequency))
        self.assertEqual(haz_res.units, haz1.units)

        self.assertEqual(haz1.tag.file_name, \
                         [haz_res.tag.file_name, haz2.tag.file_name])
        self.assertEqual(haz1.tag.haz_type, haz_res.tag.haz_type)
        self.assertEqual(haz1.tag.description, \
                         [haz_res.tag.description, haz2.tag.description])
Beispiel #8
0
    def good_hazard():
        """Define well a hazard"""
        haz = Hazard('TC')
        haz.centroids = Centroids()
        haz.centroids.set_lat_lon(np.array([1, 3]), np.array([2, 3]))
        haz.centroids.region_id = np.array([1, 2])
        haz.event_id = np.array([1, 2, 3])
        haz.event_name = ['A', 'B', 'C']
        haz.frequency = np.array([1, 2, 3])
        # events x centroids
        haz.intensity = sparse.csr_matrix([[1, 2], [1, 2], [1, 2]])
        haz.fraction = sparse.csr_matrix([[1, 2], [1, 2], [1, 2]])

        return haz
Beispiel #9
0
    def _event_probabilistic(self, ev_id, i_ens):
        """ Append a row in the intensity matrix for the probabilistic event.
        The brightness value of the probabilistic event are randomly selected
        in the intensity matrix corresponding to the historical event.
        Fill in the hazard file for the probabilistic event.

        Parameters:
            ev_id: id of the selected historical event
            i_ens (int): number of the generated probabilistic event

        Returns:
            new_haz (Hazard): new hazard corresponding to one probabilistic event
        """
        LOGGER.debug('Brightness probabilistic event.')

        # Probabilistic event
        ev_proba = np.argwhere(self.centroids.burned >= 1)
        ev_proba_uni = (ev_proba[:, 0]-1) * self.centroids.nb_centr_lon + ev_proba[:, 1]

        # Append a row to the intensity matrix with the brightness values of the
        # probabilistic event
        # The brightness value is chosen randomly from the brightness values of
        # the historical event.
        new_haz = Hazard(HAZ_TYPE)
        new_haz.intensity = sparse.lil_matrix(np.zeros(len(self.centroids.id)))
        for _, ev_prob in enumerate(ev_proba_uni):
            bright_proba = np.random.choice(self.intensity[ev_id -1].data)
            new_haz.intensity[0, ev_prob] = bright_proba
        new_haz.intensity = new_haz.intensity.tocsr()

        # Hazard
        new_haz.tag = TagHazard(HAZ_TYPE)
        new_haz.units = 'K' # Kelvin units brightness
        new_haz.centroids = self.centroids
        new_haz.event_id = np.ones(1, int)
        new_haz.frequency = np.ones(1, float)
        new_haz.event_name = [str(ev_id) + '_gen' + str(i_ens)]
        new_haz.date = np.array([self.date[int(ev_id-1)]])
        new_haz.orig = np.zeros(1, bool)

        # Following values are defined for each event and centroid
        new_haz.fraction = new_haz.intensity.copy()
        new_haz.fraction.data.fill(1.0)

        return new_haz
Beispiel #10
0
    def test_hazard_fraction_pass(self):
        """Generate all possible plots of the hazard fraction."""
        hazard = Hazard('TC')
        hazard.read_mat(HAZ_DEMO_MAT)
        hazard.event_name = [""] * hazard.event_id.size
        hazard.event_name[35] = "NNN_1185106_gen5"
        hazard.event_name[11897] = "GORDON_gen7"
        myax = hazard.plot_fraction(event=36)
        self.assertIn('Event ID 36: NNN_1185106_gen5', myax.get_title())

        myax = hazard.plot_fraction(event=-1)
        self.assertIn('1-largest Event. ID 11898: GORDON_gen7', myax.get_title())

        myax = hazard.plot_fraction(centr=59)
        self.assertIn('Centroid 59: (30.0, -79.0)', myax.get_title())

        myax = hazard.plot_fraction(centr=-1)
        self.assertIn('1-largest Centroid. 79: (30.0, -77.0)', myax.get_title())
Beispiel #11
0
    def test_read_write_vector_pass(self):
        """Test write_raster: Hazard from vector data"""
        haz_fl = Hazard('FL')
        haz_fl.event_id = np.array([1])
        haz_fl.date = np.array([1])
        haz_fl.frequency = np.array([1])
        haz_fl.orig = np.array([1])
        haz_fl.event_name = ['1']
        haz_fl.intensity = sparse.csr_matrix(np.array([0.5, 0.2, 0.1]))
        haz_fl.fraction = sparse.csr_matrix(np.array([0.5, 0.2, 0.1]) / 2)
        haz_fl.centroids.set_lat_lon(np.array([1, 2, 3]), np.array([1, 2, 3]))
        haz_fl.check()

        haz_fl.write_raster(DATA_DIR.joinpath('test_write_hazard.tif'))

        haz_read = Hazard('FL')
        haz_read.set_raster([DATA_DIR.joinpath('test_write_hazard.tif')])
        self.assertEqual(haz_read.intensity.shape, (1, 9))
        self.assertTrue(
            np.allclose(np.unique(np.array(haz_read.intensity.toarray())),
                        np.array([0.0, 0.1, 0.2, 0.5])))
Beispiel #12
0
def dummy_hazard():
    hazard = Hazard('TC')
    hazard.tag.file_name = 'file1.mat'
    hazard.tag.description = 'Description 1'
    hazard.centroids = Centroids()
    hazard.centroids.set_lat_lon(np.array([1, 3, 5]), np.array([2, 4, 6]))
    hazard.event_id = np.array([1, 2, 3, 4])
    hazard.event_name = ['ev1', 'ev2', 'ev3', 'ev4']
    hazard.date = np.array([1, 2, 3, 4])
    hazard.orig = np.array([True, False, False, True])
    hazard.frequency = np.array([0.1, 0.5, 0.5, 0.2])
    hazard.fraction = sparse.csr_matrix([[0.02, 0.03, 0.04], \
                                          [0.01, 0.01, 0.01], \
                                          [0.3, 0.1, 0.0], \
                                          [0.3, 0.2, 0.0]])
    hazard.intensity = sparse.csr_matrix([[0.2, 0.3, 0.4], \
                                          [0.1, 0.1, 0.01], \
                                          [4.3, 2.1, 1.0], \
                                          [5.3, 0.2, 1.3]])
    hazard.units = 'm/s'

    return hazard
Beispiel #13
0
    def _event_probabilistic(self, ev_idx, i_ens, centr_burned):
        """ Define synthetic hazard from randomly burned centroids.

        Parameters:
            ev_idx (int): the selected historical event
            i_ens (int): number of the generated probabilistic event
            centr_burned (np.array): array containing burned centroids

        Returns:
            new_haz (Hazard)
        """
        LOGGER.debug('Brightness probabilistic event.')

        # The brightness values are chosen randomly at every burned centroids
        # from the brightness values of the historical event
        ev_proba_uni = centr_burned.nonzero()[0] * self.centroids.shape[1] + \
            centr_burned.nonzero()[1]
        new_haz = Hazard(HAZ_TYPE)
        new_haz.intensity = sparse.lil_matrix(np.zeros((1, self.centroids.size)))
        for ev_prob in ev_proba_uni:
            new_haz.intensity[0, ev_prob] = np.random.choice( \
                self.intensity[ev_idx, :].data)
        new_haz.intensity = new_haz.intensity.tocsr()

        # Hazard
        new_haz.tag = TagHazard(HAZ_TYPE)
        new_haz.units = 'K' # Kelvin units brightness
        new_haz.centroids = self.centroids
        new_haz.event_id = np.ones(1, int)
        new_haz.frequency = np.ones(1, float)
        new_haz.event_name = [str(ev_idx+1) + '_gen' + str(i_ens+1)]
        new_haz.date = np.array([self.date[ev_idx]], int)
        new_haz.orig = np.zeros(1, bool)

        # Following values are defined for each event and centroid
        new_haz.fraction = new_haz.intensity.copy()
        new_haz.fraction.data.fill(1.0)

        return new_haz