@@ -46,6 +46,14 @@ def long_forecast_many_cubes() -> iris.cube.Cube:
46
46
)
47
47
48
48
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
+
49
57
def test_collapse (cube ):
50
58
"""Reduces dimension of cube."""
51
59
# Test collapsing a single coordinate.
@@ -80,28 +88,78 @@ def test_collapse_percentile(cube):
80
88
81
89
def test_collapse_by_hour_of_day (long_forecast ):
82
90
"""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
+ )
85
94
expected_cube = "<iris 'Cube' of air_temperature / (K) (-- : 24; grid_latitude: 3; grid_longitude: 3)>"
86
95
assert repr (collapsed_cube ) == expected_cube
87
96
88
97
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
+
89
104
def test_collapse_by_hour_of_day_percentile (long_forecast ):
90
105
"""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" )
93
106
# Test collapsing long forecast.
94
107
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
96
109
)
97
110
expected_cube = "<iris 'Cube' of air_temperature / (K) (percentile_over_hour: 2; -- : 24; grid_latitude: 3; grid_longitude: 3)>"
98
111
assert repr (collapsed_cube ) == expected_cube
99
112
100
113
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
+
101
159
def test_collapse_by_lead_time_single_cube (long_forecast_multi_day ):
102
160
"""Check cube collapse by lead time."""
103
161
calculated_cube = collapse .collapse (
104
- long_forecast_multi_day , "forecast_period " , "MEAN"
162
+ long_forecast_multi_day , "forecast_reference_time " , "MEAN"
105
163
)
106
164
assert np .allclose (
107
165
calculated_cube .data ,
@@ -116,7 +174,7 @@ def test_collapse_by_lead_time_cube_list(
116
174
):
117
175
"""Check CubeList is made into an aggregatable cube and collapses by lead time."""
118
176
calculated_cube = collapse .collapse (
119
- long_forecast_multi_day , "forecast_period " , "MEAN"
177
+ long_forecast_multi_day , "forecast_reference_time " , "MEAN"
120
178
)
121
179
assert np .allclose (
122
180
calculated_cube .data ,
@@ -129,10 +187,11 @@ def test_collapse_by_lead_time_cube_list(
129
187
def test_collapse_by_lead_time_single_cube_percentile (long_forecast_multi_day ):
130
188
"""Check Cube collapse by lead time with percentiles."""
131
189
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 ,
133
194
)
134
- with pytest .raises (ValueError ):
135
- collapse .collapse_by_lead_time (long_forecast_multi_day , "PERCENTILE" )
136
195
assert np .allclose (
137
196
calculated_cube .data ,
138
197
collapse .collapse_by_lead_time (
@@ -143,15 +202,22 @@ def test_collapse_by_lead_time_single_cube_percentile(long_forecast_multi_day):
143
202
)
144
203
145
204
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
+
146
211
def test_collapse_by_lead_time_cube_list_percentile (
147
212
long_forecast_multi_day , long_forecast_many_cubes
148
213
):
149
214
"""Check CubeList is made into an aggregatable cube and collapses by lead time with percentiles."""
150
215
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 ,
152
220
)
153
- with pytest .raises (ValueError ):
154
- collapse .collapse_by_lead_time (long_forecast_many_cubes , "PERCENTILE" )
155
221
assert np .allclose (
156
222
calculated_cube .data ,
157
223
collapse .collapse_by_lead_time (
0 commit comments