Skip to content

Commit f0fd3a5

Browse files
authored
Merge pull request #719 from CLIMADA-project/bugfix/hazard_select_nparray
Allow for numpy arrays in hazard select
2 parents ac492fe + 4fc4882 commit f0fd3a5

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

climada/hazard/base.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1359,15 +1359,15 @@ def select(self, event_names=None, event_id=None, date=None, orig=None,
13591359
return None
13601360

13611361
# filter events hist/synthetic
1362-
if isinstance(orig, bool):
1362+
if orig is not None:
13631363
sel_ev &= (self.orig.astype(bool) == orig)
13641364
if not np.any(sel_ev):
13651365
LOGGER.info('No hazard with %s original events.', str(orig))
13661366
return None
13671367

13681368
# filter events based on name
13691369
sel_ev = np.argwhere(sel_ev).reshape(-1)
1370-
if isinstance(event_names, list):
1370+
if event_names is not None:
13711371
filtered_events = [self.event_name[i] for i in sel_ev]
13721372
try:
13731373
new_sel = [filtered_events.index(n) for n in event_names]
@@ -1378,7 +1378,7 @@ def select(self, event_names=None, event_id=None, date=None, orig=None,
13781378
sel_ev = sel_ev[new_sel]
13791379

13801380
# filter events based on id
1381-
if isinstance(event_id, list):
1381+
if event_id is not None:
13821382
# preserves order of event_id
13831383
sel_ev = np.array([
13841384
np.argwhere(self.event_id == n)[0,0]

climada/hazard/test/test_base.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,30 @@ def test_select_event_id(self):
357357
self.assertIsInstance(sel_haz.intensity, sparse.csr_matrix)
358358
self.assertIsInstance(sel_haz.fraction, sparse.csr_matrix)
359359

360+
def test_select_event_id(self):
361+
"""Test select historical events."""
362+
haz = dummy_hazard()
363+
sel_haz = haz.select(event_id=np.array([4, 1]))
364+
365+
self.assertTrue(np.array_equal(sel_haz.centroids.coord, haz.centroids.coord))
366+
self.assertEqual(sel_haz.tag, haz.tag)
367+
self.assertEqual(sel_haz.units, haz.units)
368+
self.assertTrue(np.array_equal(sel_haz.event_id, np.array([4, 1])))
369+
self.assertTrue(np.array_equal(sel_haz.date, np.array([4, 1])))
370+
self.assertTrue(np.array_equal(sel_haz.orig, np.array([True, True])))
371+
self.assertTrue(np.array_equal(sel_haz.frequency, np.array([0.2, 0.1])))
372+
self.assertEqual(sel_haz.frequency_unit, haz.frequency_unit)
373+
self.assertTrue(np.array_equal(sel_haz.fraction.toarray(),
374+
np.array([[0.3, 0.2, 0.0],
375+
[0.02, 0.03, 0.04]])))
376+
self.assertTrue(np.array_equal(sel_haz.intensity.toarray(),
377+
np.array([[5.3, 0.2, 0.0],
378+
[0.2, 0.3, 0.4]])))
379+
self.assertEqual(sel_haz.event_name, ['ev4', 'ev1'])
380+
self.assertIsInstance(sel_haz, Hazard)
381+
self.assertIsInstance(sel_haz.intensity, sparse.csr_matrix)
382+
self.assertIsInstance(sel_haz.fraction, sparse.csr_matrix)
383+
360384
def test_select_orig_pass(self):
361385
"""Test select historical events."""
362386
haz = dummy_hazard()

0 commit comments

Comments
 (0)