def test_cf_sglocator_match_attr(attr, root, loc, expected): value = dict( standard_name="my_var_at_t_location", long_name="My var at T location", name="myvar_t", )[attr] assert cf.SGLocator().match_attr(attr, value, root, loc) is expected
def test_cf_sglocator_format_dataarray_no_copy_no_rename(): banana = xr.DataArray(1, name="banana_t", attrs={"standard_name": "banana"}) banana_fmt = cf.SGLocator().format_dataarray(banana, "p", copy=False, rename=False) assert banana_fmt is banana assert banana_fmt.name == "banana_t" assert banana_fmt.standard_name == "banana_at_p_location"
def test_cf_sglocator_get_location_error(name, standard_name, long_name): da = xr.DataArray(0) if name: da.name = name if standard_name: da.attrs["standard_name"] = standard_name if long_name: da.attrs["long_name"] = long_name with pytest.raises(cf.XoaCFError) as excinfo: cf.SGLocator().get_location(da)
def test_cf_sglocator_get_location(name, standard_name, long_name, loc): da = xr.DataArray(0) if name: da.name = name if standard_name: da.attrs["standard_name"] = standard_name if long_name: da.attrs["long_name"] = long_name parsed_loc = cf.SGLocator().get_location(da) assert parsed_loc == loc
def test_cf_sglocator_format_attrs_with_loc(): attrs = { "name": "u_u", "standard_name": "banana_at_t_location", "long_name": "Banana", "int_attr": 10, "str_attr": "good", } fmt_attrs = cf.SGLocator().format_attrs(attrs, loc="f") assert fmt_attrs["name"] == "u_u" assert fmt_attrs["standard_name"] == "banana_at_f_location" assert fmt_attrs["long_name"] == "Banana at F location" for attr in ("int_attr", "str_attr"): assert fmt_attrs[attr] == attrs[attr]
def test_cf_sglocator_patch_attrs(isn, psn, osn, loc): iattrs = {"units": "m", "color": "blue"} patch = {"cmap": "viridis", "mylist": [1, 2], "units": "cm"} if isn: iattrs["standard_name"] = isn if psn: patch["standard_name"] = psn oattrs = cf.SGLocator().patch_attrs(iattrs, patch, loc=loc) assert oattrs["units"] == "cm" assert oattrs["color"] == "blue" assert oattrs["cmap"] == "viridis" assert oattrs["mylist"] == [1, 2] assert oattrs.get("standard_name") == osn
def test_cf_sglocator_format_dataarray(floc, fname, fattrs, out_name, out_standard_name): lon = xr.DataArray(range(5), dims="lon") banana = xr.DataArray( lon + 20, dims="lon", coords=[lon], name="banana_t", attrs={ "standard_name": "banana", "taste": "good" }, ) banana_fmt = cf.SGLocator().format_dataarray(banana, floc, name=fname, attrs=fattrs) assert banana_fmt.name == out_name assert banana_fmt.standard_name == out_standard_name assert banana_fmt.taste == "good"
def test_cf_sglocator_parse_attr_with_valid_locations(attr, value, expected): assert cf.SGLocator( valid_locations=['u', 'rho'], name_format="{root}{loc}", ).parse_attr(attr, value) == expected
def test_cf_sglocator_parse_attr(attr, value, expected): assert cf.SGLocator().parse_attr(attr, value) == expected
def test_cf_sglocator_merge_attr(value0, value1, loc, value): out = cf.SGLocator().merge_attr("name", value0, value1, loc) assert out == value
def test_cf_sglocator_format_attr_valid_locations(): with pytest.raises(cf.XoaCFError) as excinfo: cf.SGLocator(valid_locations="x").format_attr("name", "banana", "y") assert str(excinfo.value) == "Invalid location: y. Please one use of: x."
def test_cf_sglocator_format_attr(attr, root, loc, expected): assert cf.SGLocator().format_attr(attr, root, loc) == expected