Skip to content

Commit e9aec33

Browse files
authored
Merge pull request #12 from gavinevans/mobt_877_implement_qrf3
Update QRF acceptance test data, return cubes with perc dim if they had one before and return none if fp or cycletime is not present in the tables.
2 parents 4e77428 + 4391764 commit e9aec33

6 files changed

Lines changed: 98 additions & 126 deletions

File tree

improver/calibration/load_and_apply_quantile_regression_random_forest.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
)
2323
from improver.ensemble_copula_coupling.ensemble_copula_coupling import (
2424
RebadgePercentilesAsRealizations,
25+
RebadgeRealizationsAsPercentiles,
2526
)
2627
from improver.ensemble_copula_coupling.utilities import choose_set_of_percentiles
2728
from improver.utilities.cube_checker import assert_spatial_coords_match
@@ -185,8 +186,7 @@ def _percentiles_to_realizations(cube_inputs: CubeList) -> CubeList:
185186
if feature_cube.coords("percentile"):
186187
feature_cube = RebadgePercentilesAsRealizations()(feature_cube)
187188
realization_cube_inputs.append(feature_cube)
188-
cube_inputs = realization_cube_inputs
189-
return cube_inputs
189+
return realization_cube_inputs
190190

191191
@staticmethod
192192
def _organise_cubes(
@@ -250,14 +250,19 @@ def process(
250250
cube_inputs, forecast_cube, qrf_model = self._get_inputs(file_paths)
251251
if not qrf_model:
252252
return forecast_cube
253+
254+
template_forecast_cube = forecast_cube.copy()
253255
if forecast_cube.coords("percentile"):
254-
percentiles = self._compute_percentiles(forecast_cube, "percentile")
255-
cube_inputs = self._percentiles_to_realizations(cube_inputs)
256+
percentiles = self._compute_percentiles(forecast_cube.copy(), "percentile")
257+
cube_inputs = self._percentiles_to_realizations(cube_inputs.copy())
258+
template_forecast_cube = RebadgePercentilesAsRealizations()(
259+
template_forecast_cube
260+
)
256261
elif forecast_cube.coords("realization"):
257-
percentiles = self._compute_percentiles(forecast_cube, "realization")
262+
percentiles = self._compute_percentiles(forecast_cube.copy(), "realization")
258263

259264
cube_inputs, template_forecast_cube = self._organise_cubes(
260-
cube_inputs, forecast_cube
265+
cube_inputs, template_forecast_cube
261266
)
262267

263268
result = ApplyQuantileRegressionRandomForests(
@@ -266,4 +271,7 @@ def process(
266271
transformation=self.transformation,
267272
pre_transform_addition=self.pre_transform_addition,
268273
)(qrf_model, cube_inputs, template_forecast_cube)
274+
275+
if forecast_cube.coords("percentile"):
276+
result = RebadgeRealizationsAsPercentiles()(result)
269277
return result

improver/calibration/load_and_train_quantile_regression_random_forest.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,9 @@ def _dataframe_to_cubes(
271271
truth_slice = iris.util.new_axis(truth_slice, "time")
272272
truth_cubes.append(truth_slice)
273273

274+
if len(forecast_cubes) == 0 or len(truth_cubes) == 0:
275+
return None, None
276+
274277
truth_cube = truth_cubes.concatenate_cube()
275278
forecast_cube = forecast_cubes.concatenate()
276279

@@ -417,6 +420,8 @@ def process(
417420
forecast_cube, truth_cube = self._dataframe_to_cubes(
418421
forecast_df, truth_df, forecast_periods
419422
)
423+
if forecast_cube is None or truth_cube is None:
424+
return None
420425

421426
# If target_forecast is also a dynamic feature in the feature config then
422427
# add it to cube_inputs

0 commit comments

Comments
 (0)