def test_rename_cmip6(xname, yname, zname, missing_dim): xlen, ylen, zlen = (10, 5, 6) ds = create_test_ds(xname, yname, zname, xlen, ylen, zlen) if missing_dim == "x": ds = ds.drop_dims(xname) elif missing_dim == "y": ds = ds.drop_dims(yname) elif missing_dim == "z": ds = ds.drop_dims(zname) ds_renamed = rename_cmip6(ds, cmip6_renaming_dict()) assert set(ds_renamed.dims).issubset(set(["x", "y", "lev"])) if missing_dim not in ["x", "y"]: assert (set(ds_renamed.coords) - set(ds_renamed.dims)) == set( ["lon", "lat"]) if not missing_dim == "x": assert xlen == len(ds_renamed.x) if not missing_dim == "y": assert ylen == len(ds_renamed.y) if not missing_dim == "z": assert zlen == len(ds_renamed.lev) # test exceptions and error handling with pytest.warns(UserWarning): ds_renamed = rename_cmip6(ds, {}) with pytest.raises(ValueError): ds_renamed = rename_cmip6(ds, {"x": "x"})
def test_rename_cmip6(xname, yname, zname): xlen, ylen, zlen = (10, 5, 6) ds = create_test_ds(xname, yname, zname, xlen, ylen, zlen) # TODO: Build the bounds into this. # Eventually I can use a universal dict will all possible combos instead # of the lenghty beast I am using now. universal_dict = { "test_id": { "x": ["i", "x", "lon"], "y": ["j", "y", "lat"], "lev": ["lev", "olev", "olevel", "deptht", "deptht"], "lon": ["lon", "longitude"], "lat": ["lat", "latitude"], # "lev_bounds": "lev_bounds", # "lon_bounds": "bounds_lon", # "lat_bounds": "bounds_lat", # "bnds": "axis_nbounds", # "vertex": None, # "time_bounds": "time_bnds", } } ds_renamed = rename_cmip6(ds, universal_dict) assert set(ds_renamed.dims) == set(["x", "y", "lev"]) assert (set(ds_renamed.coords) - set(ds_renamed.dims)) == set( ["lon", "lat"]) assert xlen == len(ds_renamed.x) assert ylen == len(ds_renamed.y) assert zlen == len(ds_renamed.lev)
def test_rename_cmip6_unkown_name(source_id): xlen, ylen, zlen = (10, 5, 6) ds = create_test_ds("x", "y", "z", xlen, ylen, zlen) ds.attrs["source_id"] = source_id # input dictionary empty for source_id: `%s` # Test when there is no dict entry for the source_id universal_dict = {} with pytest.warns( UserWarning, match= f"No input dictionary entry for source_id: `{ds.attrs['source_id']}`", ): ds_renamed = rename_cmip6(ds, universal_dict) # and now if the entry is there but its empty itself # TODO: These can probably go as soon as I have implemented the single renaming dict universal_dict = {source_id: {}} with pytest.warns( UserWarning, match= f"input dictionary empty for source_id: `{ds.attrs['source_id']}`", ): ds_renamed = rename_cmip6(ds, universal_dict)
def test_rename_cmip6_worst_case(xname, yname): xlen, ylen, zlen = (10, 5, 6) ds = create_test_ds(xname, yname, "lev", xlen, ylen, zlen) print(ds.lon) # now rename only some of the coordinates to the correct naming ds = ds.assign_coords({ "lon": ds.lon.reset_coords(drop=True).rename({ xname: "x", yname: "y" }) }) ds_renamed = rename_cmip6(ds, cmip6_renaming_dict()) assert set(ds_renamed.dims) == set(["x", "y", "lev"])
def test_rename_cmip6(xname, yname, zname, missing_dim): xlen, ylen, zlen = (10, 5, 6) ds = create_test_ds(xname, yname, zname, xlen, ylen, zlen) if missing_dim == "x": ds = ds.isel({xname: 0}).squeeze() elif missing_dim == "y": ds = ds.isel({yname: 0}).squeeze() elif missing_dim == "z": ds = ds.isel({zname: 0}).squeeze() ds_renamed = rename_cmip6(ds, cmip6_renaming_dict()) assert set(ds_renamed.dims).issubset(set(["x", "y", "lev"])) if not missing_dim == "x": assert xlen == len(ds_renamed.x) if not missing_dim == "y": assert ylen == len(ds_renamed.y) if not missing_dim == "z": assert zlen == len(ds_renamed.lev)
def test_rename_cmip6(xname, yname, zname, missing_dim): xlen, ylen, zlen = (10, 5, 6) ds = create_test_ds(xname, yname, zname, xlen, ylen, zlen) if missing_dim == "x": ds = ds.drop_dims(xname) elif missing_dim == "y": ds = ds.drop_dims(yname) elif missing_dim == "z": ds = ds.drop_dims(zname) ds_renamed = rename_cmip6(ds, cmip6_renaming_dict()) assert set(ds_renamed.dims).issubset(set(["x", "y", "lev"])) if missing_dim not in ["x", "y"]: assert (set(ds_renamed.coords) - set(ds_renamed.dims)) == set( ["lon", "lat"]) if not missing_dim == "x": assert xlen == len(ds_renamed.x) if not missing_dim == "y": assert ylen == len(ds_renamed.y) if not missing_dim == "z": assert zlen == len(ds_renamed.lev)