From 8264824271f12797da3a34624aed88637c77a294 Mon Sep 17 00:00:00 2001 From: daflack Date: Wed, 25 Mar 2026 09:36:31 +0000 Subject: [PATCH 1/2] Ensures callbacks do not realise data Fixes #1984 --- src/CSET/operators/read.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/CSET/operators/read.py b/src/CSET/operators/read.py index 6c30af1e7..3388e89a8 100644 --- a/src/CSET/operators/read.py +++ b/src/CSET/operators/read.py @@ -842,8 +842,8 @@ def _convert_wind_true_dirn_um(cubes: iris.cube.CubeList): v_grids = cubes.extract(iris.AttributeConstraint(STASH="m01s03i226")) for u, v in zip(u_grids, v_grids, strict=True): true_u, true_v = rotate_winds(u, v, iris.coord_systems.GeogCS(6371229.0)) - u.data = true_u.data - v.data = true_v.data + u.data = true_u.core_data() + v.data = true_v.core_data() def _normalise_var0_varname(cube: iris.cube.Cube): From 8678403b923e401e047e64face73a8576be8f46a Mon Sep 17 00:00:00 2001 From: daflack Date: Wed, 25 Mar 2026 09:43:23 +0000 Subject: [PATCH 2/2] Converts fix_lfric_cloud_base to lazy data using dask Uses the suggestion from Scott Wales in issue 1985, does not close the issue.. --- src/CSET/operators/read.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/CSET/operators/read.py b/src/CSET/operators/read.py index 3388e89a8..6fe0a8932 100644 --- a/src/CSET/operators/read.py +++ b/src/CSET/operators/read.py @@ -23,6 +23,7 @@ from pathlib import Path from typing import Literal +import dask import iris import iris.coord_systems import iris.coords @@ -789,8 +790,7 @@ def _fix_lfric_cloud_base_altitude(cube: iris.cube.Cube): varnames = filter(None, [cube.long_name, cube.standard_name, cube.var_name]) if any("cloud_base_altitude" in name for name in varnames): # Mask cube where set > 144kft to catch default 144.35695538058164 - cube.data = np.ma.masked_array(cube.data) - cube.data[cube.data > 144.0] = np.ma.masked + cube.data = dask.array.ma.masked_greater(cube.core_data(), 144.0) def _fix_um_winds(cubes: iris.cube.CubeList):