@@ -41,13 +41,13 @@ def hazard(haz_kwargs):
4141
4242
4343@pytest .fixture
44- def lead_time ():
45- return pd .timedelta_range ("1h" , periods = 6 ).to_numpy ()
44+ def lead_time (haz_kwargs ):
45+ return pd .timedelta_range ("1h" , periods = len ( haz_kwargs [ "event_id" ]) ).to_numpy ()
4646
4747
4848@pytest .fixture
49- def member ():
50- return np .arange (6 )
49+ def member (haz_kwargs ):
50+ return np .arange (len ( haz_kwargs [ "event_id" ]) )
5151
5252
5353@pytest .fixture
@@ -78,6 +78,13 @@ def test_init_hazard_forecast(haz_fc, member, lead_time, haz_kwargs):
7878 assert_hazard_kwargs (haz_fc , ** haz_kwargs )
7979
8080
81+ def test_init_hazard_forecast_error (hazard , member , lead_time , haz_kwargs ):
82+ with pytest .raises (ValueError , match = "Forecast.lead_time" ):
83+ HazardForecast (lead_time = lead_time [:- 2 ], member = member , ** haz_kwargs )
84+ with pytest .raises (ValueError , match = "Forecast.member" ):
85+ HazardForecast .from_hazard (hazard , lead_time = lead_time , member = member [1 :])
86+
87+
8188def test_from_hazard (lead_time , member , hazard , haz_kwargs ):
8289 haz_fc_from_haz = HazardForecast .from_hazard (
8390 hazard , lead_time = lead_time , member = member
@@ -140,3 +147,20 @@ def test_hazard_forecast_select(haz_fc, lead_time, member, haz_kwargs, var, var_
140147 )
141148
142149 assert haz_fc_sel .centroids == haz_fc .centroids
150+
151+
152+ def test_write_read_hazard_forecast (haz_fc , tmp_path ):
153+
154+ file_name = tmp_path / "test_hazard_forecast.h5"
155+
156+ haz_fc .write_hdf5 (file_name )
157+ haz_fc_read = HazardForecast .from_hdf5 (file_name )
158+
159+ assert haz_fc_read .lead_time .dtype .kind == np .dtype ("timedelta64" ).kind
160+
161+ for key in haz_fc .__dict__ .keys ():
162+ if key in ["intensity" , "fraction" ]:
163+ (haz_fc .__dict__ [key ] != haz_fc_read .__dict__ [key ]).nnz == 0
164+ else :
165+ # npt.assert_array_equal also works for comparing int, float or list
166+ npt .assert_array_equal (haz_fc .__dict__ [key ], haz_fc_read .__dict__ [key ])
0 commit comments