@@ -46,6 +46,14 @@ def long_forecast_many_cubes() -> iris.cube.Cube:
4646 )
4747
4848
49+ @pytest .fixture ()
50+ def medium_forecast () -> iris .cube .Cube :
51+ """Get medium forecast with monotonic time coordinate."""
52+ return iris .load_cube (
53+ "tests/test_data/medium_forecast_air_temp_monotonic.nc" , "air_temperature"
54+ )
55+
56+
4957def test_collapse (cube ):
5058 """Reduces dimension of cube."""
5159 # Test collapsing a single coordinate.
@@ -80,28 +88,78 @@ def test_collapse_percentile(cube):
8088
8189def test_collapse_by_hour_of_day (long_forecast ):
8290 """Convert and aggregates time dimension by hour of day."""
83- # Test collapsing a long forecast.
84- collapsed_cube = collapse .collapse_by_hour_of_day (long_forecast , "MEAN" )
91+ collapsed_cube = collapse .collapse_by_hour_of_day (
92+ long_forecast , "MEAN" , multi_case = False
93+ )
8594 expected_cube = "<iris 'Cube' of air_temperature / (K) (-- : 24; grid_latitude: 3; grid_longitude: 3)>"
8695 assert repr (collapsed_cube ) == expected_cube
8796
8897
98+ def test_collapse_by_hour_of_day_fail (long_forecast ):
99+ """Test failing due to multi_case set to True."""
100+ with pytest .raises (TypeError ):
101+ collapse .collapse_by_hour_of_day (long_forecast , "MEAN" )
102+
103+
89104def test_collapse_by_hour_of_day_percentile (long_forecast ):
90105 """Convert and aggregate time dimension by hour of day with percentiles."""
91- with pytest .raises (ValueError ):
92- collapse .collapse_by_hour_of_day (long_forecast , "PERCENTILE" )
93106 # Test collapsing long forecast.
94107 collapsed_cube = collapse .collapse_by_hour_of_day (
95- long_forecast , "PERCENTILE" , additional_percent = [25 , 75 ]
108+ long_forecast , "PERCENTILE" , additional_percent = [25 , 75 ], multi_case = False
96109 )
97110 expected_cube = "<iris 'Cube' of air_temperature / (K) (percentile_over_hour: 2; -- : 24; grid_latitude: 3; grid_longitude: 3)>"
98111 assert repr (collapsed_cube ) == expected_cube
99112
100113
114+ def test_collapse_by_hour_of_day_percentile_fail (long_forecast ):
115+ """Test failing due to non-specified additional_percent."""
116+ with pytest .raises (ValueError ):
117+ collapse .collapse_by_hour_of_day (long_forecast , "PERCENTILE" , multi_case = False )
118+
119+
120+ def test_collapse_by_hour_of_day_multi_forecast_cube (long_forecast_multi_day ):
121+ """Convert and aggregates time dimension by hour of day for a multi day cube."""
122+ collapsed_cube = collapse .collapse_by_hour_of_day (long_forecast_multi_day , "MEAN" )
123+ expected_cube = "<iris 'Cube' of air_temperature / (K) (-- : 24; grid_latitude: 3; grid_longitude: 3)>"
124+ assert repr (collapsed_cube ) == expected_cube
125+
126+
127+ def test_collapse_by_hour_of_day_multi_forecast_cube_fail (long_forecast_multi_day ):
128+ """Test failing due to multi_case set to False."""
129+ with pytest .raises (TypeError ):
130+ collapse .collapse_by_hour_of_day (
131+ long_forecast_multi_day , "MEAN" , multi_case = False
132+ )
133+
134+
135+ def test_collapse_by_hour_of_day_multi_forecast_cubelist (long_forecast_many_cubes ):
136+ """Convert and aggregates time dimension by hour of day for a CubeList."""
137+ collapsed_cube = collapse .collapse_by_hour_of_day (long_forecast_many_cubes , "MEAN" )
138+ expected_cube = "<iris 'Cube' of air_temperature / (K) (-- : 24; grid_latitude: 3; grid_longitude: 3)>"
139+ assert repr (collapsed_cube ) == expected_cube
140+
141+
142+ def test_collapse_by_hour_of_day_multi_forecast_cubelist_fail (long_forecast_many_cubes ):
143+ """Test failing due to multi_case set to False."""
144+ with pytest .raises (TypeError ):
145+ collapse .collapse_by_hour_of_day (
146+ long_forecast_many_cubes , "MEAN" , multi_case = False
147+ )
148+
149+
150+ def test_collapse_by_hour_of_day_monotonic_coords (medium_forecast ):
151+ """Convert and aggregates time dimension by hour of day with montonic coordinates."""
152+ collapsed_cube = collapse .collapse_by_hour_of_day (
153+ medium_forecast , "MEAN" , multi_case = False
154+ )
155+ expected_cube = "<iris 'Cube' of air_temperature / (K) (hour: 24; grid_latitude: 3; grid_longitude: 3)>"
156+ assert repr (collapsed_cube ) == expected_cube
157+
158+
101159def test_collapse_by_lead_time_single_cube (long_forecast_multi_day ):
102160 """Check cube collapse by lead time."""
103161 calculated_cube = collapse .collapse (
104- long_forecast_multi_day , "forecast_period " , "MEAN"
162+ long_forecast_multi_day , "forecast_reference_time " , "MEAN"
105163 )
106164 assert np .allclose (
107165 calculated_cube .data ,
@@ -116,7 +174,7 @@ def test_collapse_by_lead_time_cube_list(
116174):
117175 """Check CubeList is made into an aggregatable cube and collapses by lead time."""
118176 calculated_cube = collapse .collapse (
119- long_forecast_multi_day , "forecast_period " , "MEAN"
177+ long_forecast_multi_day , "forecast_reference_time " , "MEAN"
120178 )
121179 assert np .allclose (
122180 calculated_cube .data ,
@@ -129,10 +187,11 @@ def test_collapse_by_lead_time_cube_list(
129187def test_collapse_by_lead_time_single_cube_percentile (long_forecast_multi_day ):
130188 """Check Cube collapse by lead time with percentiles."""
131189 calculated_cube = collapse .collapse (
132- long_forecast_multi_day , "forecast_period" , "PERCENTILE" , additional_percent = 75
190+ long_forecast_multi_day ,
191+ "forecast_reference_time" ,
192+ "PERCENTILE" ,
193+ additional_percent = 75 ,
133194 )
134- with pytest .raises (ValueError ):
135- collapse .collapse_by_lead_time (long_forecast_multi_day , "PERCENTILE" )
136195 assert np .allclose (
137196 calculated_cube .data ,
138197 collapse .collapse_by_lead_time (
@@ -143,15 +202,22 @@ def test_collapse_by_lead_time_single_cube_percentile(long_forecast_multi_day):
143202 )
144203
145204
205+ def test_collapse_by_lead_time_single_cube_percentile_fail (long_forecast_multi_day ):
206+ """Test fail by not setting additional percent."""
207+ with pytest .raises (ValueError ):
208+ collapse .collapse_by_lead_time (long_forecast_multi_day , "PERCENTILE" )
209+
210+
146211def test_collapse_by_lead_time_cube_list_percentile (
147212 long_forecast_multi_day , long_forecast_many_cubes
148213):
149214 """Check CubeList is made into an aggregatable cube and collapses by lead time with percentiles."""
150215 calculated_cube = collapse .collapse (
151- long_forecast_multi_day , "forecast_period" , "PERCENTILE" , additional_percent = 75
216+ long_forecast_multi_day ,
217+ "forecast_reference_time" ,
218+ "PERCENTILE" ,
219+ additional_percent = 75 ,
152220 )
153- with pytest .raises (ValueError ):
154- collapse .collapse_by_lead_time (long_forecast_many_cubes , "PERCENTILE" )
155221 assert np .allclose (
156222 calculated_cube .data ,
157223 collapse .collapse_by_lead_time (
0 commit comments