Example #1
0
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)