Source code for rook.utils.atlas_fixes
import xarray as xr
[docs]
def apply_atlas_fixes(ds_id, ds):
ds_mod = fix_deflation(ds)
ds_mod = add_project_id(ds_id, ds)
return ds_mod
[docs]
def add_project_id(ds_id, ds):
project_id = ds_id.split(".")[0]
ds.attrs["project_id"] = project_id
return ds
[docs]
def fix_deflation(ds: xr.Dataset | xr.DataArray):
"""See also: clisops.ops.base_operation._remove_redundant_fill_values."""
if isinstance(ds, xr.Dataset):
var_list = list(ds.coords) + list(ds.data_vars)
elif isinstance(ds, xr.DataArray):
var_list = list(ds.coords)
else:
raise ValueError("Input must be an xarray Dataset or DataArray")
# DEBUG
for var in var_list:
print("debug var", var, ds[var].encoding)
# DEBUG END
for var in var_list:
ds[var].encoding["_FillValue"] = None
# Remove string deflation options if applicable
for cvar in [
"member_id",
"gcm_variant",
"gcm_model",
"gcm_institution",
"rcm_variant",
"rcm_model",
"rcm_institution",
]:
for en in ["zlib", "shuffle", "complevel"]:
try:
del ds[cvar].encoding[en]
except KeyError:
pass
# use compression level 1
for var in ds.data_vars:
complevel = ds[var].encoding.get("complevel", 0)
if complevel > 1:
ds[var].encoding["complevel"] = 1
ds[var].encoding["zlib"] = True
ds[var].encoding["shuffle"] = True
return ds