Implement unique selection reduction - #1194
Closed
luseverin wants to merge 42 commits into
Closed
GitHub Actions / Core / Unit Test Results (3.11)
failed
Dec 17, 2025 in 0s
3 fail, 1 skipped, 831 pass in 6m 12s
Annotations
Check warning on line 0 in climada.hazard.test.test_forecast
github-actions / Core / Unit Test Results (3.11)
test_hazard_forecast_mean_min_max_member[min] (climada.hazard.test.test_forecast) failed
tests_xml/tests.xml [took 0s]
Raw output
AssertionError:
Arrays are not equal
Mismatched elements: 4 / 4 (100%)
Max absolute difference among violations: 4
Max relative difference among violations: 4.
ACTUAL: array([0, 1, 2, 3])
DESIRED: array([-1, -1, -1, -1])
haz_fc = <climada.hazard.forecast.HazardForecast object at 0x7f381959d7d0>
attr = 'min'
@pytest.mark.parametrize("attr", ["min", "mean", "max"])
def test_hazard_forecast_mean_min_max_member(haz_fc, attr):
"""Check mean, min, and max methods for HazardForecast with dim argument"""
for dim, unique_vals in zip(
["member", "lead_time"],
[np.unique(haz_fc.member), np.unique(haz_fc.lead_time)],
):
haz_fcst_reduced = getattr(haz_fc, attr)(dim=dim)
# Assert sparse matrices
expected_intensity = []
expected_fraction = []
for val in unique_vals:
mask = getattr(haz_fc, dim) == val
expected_intensity.append(
getattr(haz_fc.intensity.todense()[mask], attr)(axis=0)
)
expected_fraction.append(
getattr(haz_fc.fraction.todense()[mask], attr)(axis=0)
)
npt.assert_array_equal(
haz_fcst_reduced.intensity.todense(),
np.vstack(expected_intensity),
)
npt.assert_array_equal(
haz_fcst_reduced.fraction.todense(),
np.vstack(expected_fraction),
)
# Check that attributes where reduced correctly
if dim == "lead_time":
npt.assert_array_equal(haz_fcst_reduced.member, np.unique(haz_fc.member))
npt.assert_array_equal(
haz_fcst_reduced.lead_time,
np.array([np.timedelta64("NaT")] * len(unique_vals)),
)
else: # dim == "member"
npt.assert_array_equal(
haz_fcst_reduced.lead_time, np.unique(haz_fc.lead_time)
)
> npt.assert_array_equal(
haz_fcst_reduced.member,
np.array([-1] * len(unique_vals)),
)
E AssertionError:
E Arrays are not equal
E
E Mismatched elements: 4 / 4 (100%)
E Max absolute difference among violations: 4
E Max relative difference among violations: 4.
E ACTUAL: array([0, 1, 2, 3])
E DESIRED: array([-1, -1, -1, -1])
climada/hazard/test/test_forecast.py:364: AssertionError
Check warning on line 0 in climada.hazard.test.test_forecast
github-actions / Core / Unit Test Results (3.11)
test_hazard_forecast_mean_min_max_member[mean] (climada.hazard.test.test_forecast) failed
tests_xml/tests.xml [took 0s]
Raw output
AssertionError:
Arrays are not equal
Mismatched elements: 4 / 4 (100%)
Max absolute difference among violations: 4
Max relative difference among violations: 4.
ACTUAL: array([0, 1, 2, 3])
DESIRED: array([-1, -1, -1, -1])
haz_fc = <climada.hazard.forecast.HazardForecast object at 0x7f3817aa0050>
attr = 'mean'
@pytest.mark.parametrize("attr", ["min", "mean", "max"])
def test_hazard_forecast_mean_min_max_member(haz_fc, attr):
"""Check mean, min, and max methods for HazardForecast with dim argument"""
for dim, unique_vals in zip(
["member", "lead_time"],
[np.unique(haz_fc.member), np.unique(haz_fc.lead_time)],
):
haz_fcst_reduced = getattr(haz_fc, attr)(dim=dim)
# Assert sparse matrices
expected_intensity = []
expected_fraction = []
for val in unique_vals:
mask = getattr(haz_fc, dim) == val
expected_intensity.append(
getattr(haz_fc.intensity.todense()[mask], attr)(axis=0)
)
expected_fraction.append(
getattr(haz_fc.fraction.todense()[mask], attr)(axis=0)
)
npt.assert_array_equal(
haz_fcst_reduced.intensity.todense(),
np.vstack(expected_intensity),
)
npt.assert_array_equal(
haz_fcst_reduced.fraction.todense(),
np.vstack(expected_fraction),
)
# Check that attributes where reduced correctly
if dim == "lead_time":
npt.assert_array_equal(haz_fcst_reduced.member, np.unique(haz_fc.member))
npt.assert_array_equal(
haz_fcst_reduced.lead_time,
np.array([np.timedelta64("NaT")] * len(unique_vals)),
)
else: # dim == "member"
npt.assert_array_equal(
haz_fcst_reduced.lead_time, np.unique(haz_fc.lead_time)
)
> npt.assert_array_equal(
haz_fcst_reduced.member,
np.array([-1] * len(unique_vals)),
)
E AssertionError:
E Arrays are not equal
E
E Mismatched elements: 4 / 4 (100%)
E Max absolute difference among violations: 4
E Max relative difference among violations: 4.
E ACTUAL: array([0, 1, 2, 3])
E DESIRED: array([-1, -1, -1, -1])
climada/hazard/test/test_forecast.py:364: AssertionError
Check warning on line 0 in climada.hazard.test.test_forecast
github-actions / Core / Unit Test Results (3.11)
test_hazard_forecast_mean_min_max_member[max] (climada.hazard.test.test_forecast) failed
tests_xml/tests.xml [took 0s]
Raw output
AssertionError:
Arrays are not equal
Mismatched elements: 4 / 4 (100%)
Max absolute difference among violations: 4
Max relative difference among violations: 4.
ACTUAL: array([0, 1, 2, 3])
DESIRED: array([-1, -1, -1, -1])
haz_fc = <climada.hazard.forecast.HazardForecast object at 0x7f3819506290>
attr = 'max'
@pytest.mark.parametrize("attr", ["min", "mean", "max"])
def test_hazard_forecast_mean_min_max_member(haz_fc, attr):
"""Check mean, min, and max methods for HazardForecast with dim argument"""
for dim, unique_vals in zip(
["member", "lead_time"],
[np.unique(haz_fc.member), np.unique(haz_fc.lead_time)],
):
haz_fcst_reduced = getattr(haz_fc, attr)(dim=dim)
# Assert sparse matrices
expected_intensity = []
expected_fraction = []
for val in unique_vals:
mask = getattr(haz_fc, dim) == val
expected_intensity.append(
getattr(haz_fc.intensity.todense()[mask], attr)(axis=0)
)
expected_fraction.append(
getattr(haz_fc.fraction.todense()[mask], attr)(axis=0)
)
npt.assert_array_equal(
haz_fcst_reduced.intensity.todense(),
np.vstack(expected_intensity),
)
npt.assert_array_equal(
haz_fcst_reduced.fraction.todense(),
np.vstack(expected_fraction),
)
# Check that attributes where reduced correctly
if dim == "lead_time":
npt.assert_array_equal(haz_fcst_reduced.member, np.unique(haz_fc.member))
npt.assert_array_equal(
haz_fcst_reduced.lead_time,
np.array([np.timedelta64("NaT")] * len(unique_vals)),
)
else: # dim == "member"
npt.assert_array_equal(
haz_fcst_reduced.lead_time, np.unique(haz_fc.lead_time)
)
> npt.assert_array_equal(
haz_fcst_reduced.member,
np.array([-1] * len(unique_vals)),
)
E AssertionError:
E Arrays are not equal
E
E Mismatched elements: 4 / 4 (100%)
E Max absolute difference among violations: 4
E Max relative difference among violations: 4.
E ACTUAL: array([0, 1, 2, 3])
E DESIRED: array([-1, -1, -1, -1])
climada/hazard/test/test_forecast.py:364: AssertionError
Loading