@@ -100,42 +100,43 @@ def test_hazard_forecast_concat(haz_fc, lead_time, member):
100100 npt .assert_array_equal (haz_fc_concat .member , np .concatenate ([member , member ]))
101101
102102
103- def test_hazard_forecast_select (haz_fc , lead_time , member , haz_kwargs ):
103+ @pytest .mark .parametrize (
104+ "var, var_select" ,
105+ [("event_id" , "event_id" ), ("event_name" , "event_names" ), ("date" , "date" )],
106+ )
107+ def test_hazard_forecast_select (haz_fc , lead_time , member , haz_kwargs , var , var_select ):
104108 """Check if Hazard.select works on the derived class"""
105109
106110 select_mask = np .array ([3 , 2 ])
107- ordered_select_mask = np .array ([2 , 3 ])
108- vars_to_select = {
109- "event_id" : "event_id" ,
110- "event_name" : "event_names" ,
111- "date" : "date" ,
112- }
113-
114- for var , var_select in vars_to_select .items ():
115- var_value = np .array (haz_kwargs [var ])[select_mask ]
116- # event_name is a list, convert to numpy array for indexing
117- haz_fc_sel = haz_fc .select (** {var_select : var_value })
118- npt .assert_array_equal (
119- haz_fc_sel .event_id ,
120- haz_fc .event_id [ordered_select_mask ],
121- )
122- npt .assert_array_equal (
123- haz_fc_sel .event_name ,
124- np .array (haz_fc .event_name )[ordered_select_mask ],
125- )
126- npt .assert_array_equal (haz_fc_sel .date , haz_fc .date [ordered_select_mask ])
127- npt .assert_array_equal (
128- haz_fc_sel .frequency , haz_fc .frequency [ordered_select_mask ]
129- )
130- npt .assert_array_equal (haz_fc_sel .member , member [ordered_select_mask ])
131- npt .assert_array_equal (haz_fc_sel .lead_time , lead_time [ordered_select_mask ])
132- npt .assert_array_equal (
133- haz_fc_sel .intensity .todense (),
134- haz_fc .intensity .todense ()[ordered_select_mask ],
135- )
136- npt .assert_array_equal (
137- haz_fc_sel .fraction .todense (),
138- haz_fc .fraction .todense ()[ordered_select_mask ],
139- )
140-
141- assert haz_fc_sel .centroids == haz_fc .centroids
111+ ordered_select_mask = np .array ([3 , 2 ])
112+ if var == "date" :
113+ # Date needs to be a valid delta
114+ select_mask = np .array ([2 , 3 ])
115+ ordered_select_mask = np .array ([2 , 3 ])
116+
117+ var_value = np .array (haz_kwargs [var ])[select_mask ]
118+ # event_name is a list, convert to numpy array for indexing
119+ haz_fc_sel = haz_fc .select (** {var_select : var_value })
120+ # Note: order is preserved
121+ npt .assert_array_equal (
122+ haz_fc_sel .event_id ,
123+ haz_fc .event_id [ordered_select_mask ],
124+ )
125+ npt .assert_array_equal (
126+ haz_fc_sel .event_name ,
127+ np .array (haz_fc .event_name )[ordered_select_mask ],
128+ )
129+ npt .assert_array_equal (haz_fc_sel .date , haz_fc .date [ordered_select_mask ])
130+ npt .assert_array_equal (haz_fc_sel .frequency , haz_fc .frequency [ordered_select_mask ])
131+ npt .assert_array_equal (haz_fc_sel .member , member [ordered_select_mask ])
132+ npt .assert_array_equal (haz_fc_sel .lead_time , lead_time [ordered_select_mask ])
133+ npt .assert_array_equal (
134+ haz_fc_sel .intensity .todense (),
135+ haz_fc .intensity .todense ()[ordered_select_mask ],
136+ )
137+ npt .assert_array_equal (
138+ haz_fc_sel .fraction .todense (),
139+ haz_fc .fraction .todense ()[ordered_select_mask ],
140+ )
141+
142+ assert haz_fc_sel .centroids == haz_fc .centroids
0 commit comments