def test_load_with_two_levels(file_path): """ Use ``first_level`` and ``second_level`` in ``level`` option. 土壤温度 * 0-10cm below ground * 10-30cm below ground """ parameter = "t" level_type = "depthBelowLandLayer" first_level = 0 second_level = 0.1 field_0_10 = load_field_from_file(file_path, parameter=parameter, level_type=level_type, level={ "first_level": first_level, "second_level": second_level }) assert field_0_10 is not None first_level = 0.1 second_level = 0.3 field_10_30 = load_field_from_file(file_path, parameter=parameter, level_type=level_type, level={ "first_level": first_level, "second_level": second_level }) assert field_10_30 is not None
def test_embedded_level_name(file_path, modelvar_file_path): """ embedded level type: * pl * surface * ml """ test_cases = [ TestCase(query=QueryOption(parameter="t", level_type="pl", level=850), ), TestCase(query=QueryOption(parameter="t", level_type="sfc", level=None), ), ] for test_case in test_cases: field = load_field_from_file(file_path, **asdict(test_case.query)) assert field is not None test_cases = [ TestCase(query=QueryOption(parameter="u", level_type="ml", level=10)) ] for test_case in test_cases: field = load_field_from_file(modelvar_file_path, **asdict(test_case.query)) assert field is not None
def test_type_of_level(file_path): test_cases = [ TestCase(query=QueryOption( parameter="t", level_type="isobaricInhPa", level=850)), TestCase(query=QueryOption( parameter="t", level_type="isobaricInPa", level=50)), TestCase(query=QueryOption( parameter="asnow", level_type="surface", level=None)), TestCase(query=QueryOption( parameter="tmax", level_type="heightAboveGround", level=2)), TestCase(query=QueryOption( parameter="lcc", level_type="nominalTop", level=None)), TestCase(query=QueryOption( parameter="tciwv", level_type="atmosphere", level=None)), TestCase(query=QueryOption( parameter="prmsl", level_type="meanSea", level=None)), TestCase(query=QueryOption(parameter="t", level_type="depthBelowLandLayer", level={ "first_level": 0, "second_level": 0.1 })) ] for test_case in test_cases: field = load_field_from_file(file_path, **asdict(test_case.query)) assert field is not None
def test_ml(modelvar_file_path): test_cases = [ TestCase(query=QueryOption(parameter="gh", level_type="ml", level=10, level_dim=None), expected_level_name="ml", expected_level=10), TestCase( query=QueryOption(parameter="gh", level_type="ml", level=10, level_dim="ml"), expected_level_name="ml", expected_level=10, ), TestCase( query=QueryOption(parameter="gh", level_type="ml", level=10, level_dim="other_level_string"), expected_level_name="other_level_string", expected_level=10, ), ] for test_case in test_cases: field = load_field_from_file(modelvar_file_path, **asdict(test_case.query)) assert field is not None assert field.coords[ test_case.expected_level_name].values == test_case.expected_level
def test_grib_key_modelvar(modelvar_file_path): test_cases = [ TestCase( query=QueryOption(parameter="t", level_type={"typeOfFirstFixedSurface": 131}, level=10, level_dim=None), expected_level_name="level_131", expected_level=10, ), TestCase( query=QueryOption(parameter="t", level_type={"typeOfFirstFixedSurface": 131}, level=10, level_dim="ml"), expected_level_name="ml", expected_level=10, ), TestCase( query=QueryOption(parameter="t", level_type={"typeOfFirstFixedSurface": 131}, level=10, level_dim="other_level_string"), expected_level_name="other_level_string", expected_level=10, ), ] for test_case in test_cases: field = load_field_from_file(modelvar_file_path, **asdict(test_case.query)) assert field is not None assert field.coords[ test_case.expected_level_name].values == test_case.expected_level
def test_parameter_string(file_path): test_cases = [ TestCase(query=QueryOption(parameter="t", level_type="pl", level=850, field_name=None), expected_field_name="t"), TestCase(query=QueryOption(parameter="t", level_type="pl", level=850, field_name="other_field_name"), expected_field_name="other_field_name"), TestCase(query=QueryOption(parameter="TMP", level_type="pl", level=850, field_name=None), expected_field_name="TMP"), TestCase(query=QueryOption(parameter="TMP", level_type="pl", level=850, field_name="other_field_name"), expected_field_name="other_field_name") ] for test_case in test_cases: f = load_field_from_file(file_path, **asdict(test_case.query)) assert f is not None assert f.name == test_case.expected_field_name
def test_short_name(file_path): test_cases = [ TestCase(query=QueryOption(parameter="t", level_type="pl", level=850)) ] for test_case in test_cases: field = load_field_from_file(file_path, **asdict(test_case.query)) assert field is not None
def test_load_modelvar_using_level_type(modelvar_file_path): parameter = "t" level = 10 level_type = "ml" field = load_field_from_file(modelvar_file_path, parameter=parameter, level_type=level_type, level=level) assert field is not None
def test_load_modelvar_using_cemc_param_table(modelvar_file_path): test_cases = [ TestCase(QueryOption(parameter="pip", level_type="ml", level=30)), ] for test_case in test_cases: field = load_field_from_file(modelvar_file_path, **asdict(test_case.query)) assert field is not None
def test_load_10wind(file_path): """ Use ``stepType`` for normal and statistics fields. """ parameter = "10u" # 10m U 风 step_type = "instant" field_instant = load_field_from_file(file_path, parameter=parameter, stepType=step_type) assert field_instant is not None # 输出间隔内最大 10m U 风 step_type = "max" field_max = load_field_from_file(file_path, parameter=parameter, stepType=step_type) assert field_max is not None
def test_load_with_short_name(file_path): """ Use short name supported by ecCodes """ short_name = "t" field = load_field_from_file(file_path, parameter=short_name, level_type="pl", level=850) assert field is not None
def test_load_ri(file_path): """ Use different ``level_type`` for same parameter. 地表理查森数 边界层理查森数 """ parameter = "RI" level_type = "surface" field_surface = load_field_from_file(file_path, parameter=parameter, level_type=level_type) assert field_surface is not None level_type = {"typeOfFirstFixedSurface": 166} field_166 = load_field_from_file(file_path, parameter=parameter, level_type=level_type) assert field_166 is not None
def test_load_with_extended_name(file_path): """ Use short name embedded by reki from wgrib2 and CEMC """ parameter = "TCOLW" field = load_field_from_file( file_path, parameter=parameter, ) assert field is not None
def test_grib_key(modelvar_file_path): test_cases = [ TestCase(query=QueryOption(parameter="u", level_type={"typeOfFirstFixedSurface": 131}, level=10)) ] for test_case in test_cases: field = load_field_from_file(modelvar_file_path, **asdict(test_case.query)) assert field is not None
def test_parameter_dict(file_path): test_cases = [ TestCase(query=QueryOption( parameter=dict(discipline=0, parameterCategory=2, parameterNumber=224), level_type="pl", level=850, field_name=None, ), expected_field_name="0_2_224"), TestCase(query=QueryOption(parameter=dict(discipline=0, parameterCategory=2, parameterNumber=224), level_type="pl", level=850, field_name="other_field_name"), expected_field_name="other_field_name"), TestCase(query=QueryOption(parameter=dict(discipline=0, parameterCategory=2, parameterNumber=227), level_type="sfc", field_name=None), expected_field_name="0_2_227"), TestCase(query=QueryOption(parameter=dict(discipline=0, parameterCategory=2, parameterNumber=227), level_type="sfc", field_name="other_field_name"), expected_field_name="other_field_name"), TestCase(query=QueryOption( parameter=dict(discipline=0, parameterCategory=5, parameterNumber=4), level_type="sfc", field_name=None, ), expected_field_name="ulwrf"), TestCase(query=QueryOption( parameter=dict(discipline=0, parameterCategory=5, parameterNumber=4), level_type="sfc", field_name="other_field_name", ), expected_field_name="other_field_name") ] for test_case in test_cases: f = load_field_from_file( file_path, **asdict(test_case.query), ) assert f is not None assert f.name == test_case.expected_field_name
def test_scalar(file_path, modelvar_file_path): test_cases = [ TestCase( query=QueryOption(parameter="t", level_type="pl", level=1.5), expected_level_name="pl", expected_level=1.5 ), TestCase( query=QueryOption(parameter="t", level_type="isobaricInhPa", level=850), expected_level_name="isobaricInhPa", expected_level=850 ), TestCase( query=QueryOption(parameter="TMAX", level_type="heightAboveGround", level=2), expected_level_name="heightAboveGround", expected_level=2 ), ] for test_case in test_cases: field = load_field_from_file( file_path, **asdict(test_case.query) ) assert field is not None assert field.coords[test_case.expected_level_name] == test_case.expected_level test_cases = [ TestCase( query=QueryOption( parameter="u", level_type={"typeOfFirstFixedSurface": 131}, level=10), expected_level_name="level_131", expected_level=10 ) ] for test_case in test_cases: field = load_field_from_file( modelvar_file_path, **asdict(test_case.query) ) assert field is not None assert field.coords[test_case.expected_level_name] == test_case.expected_level
def test_parameter_cemc_param_db(file_path): test_cases = [ TestCase(query=QueryOption(parameter="btv", field_name=None), expected_field_name="btv"), TestCase( query=QueryOption(parameter="zs", field_name=None), expected_field_name="zs", ), ] for test_case in test_cases: f = load_field_from_file(file_path, **asdict(test_case.query)) assert f is not None assert f.name == test_case.expected_field_name
def test_numbers(file_path): """ 雷达组合反射率 """ test_cases = [ TestCase(query=QueryOption(parameter={ "discipline": 0, "parameterCategory": 16, "parameterNumber": 225, }, level_type="pl", level=850)) ] for test_case in test_cases: field = load_field_from_file(file_path, **asdict(test_case.query)) assert field is not None
def test_multi_levels(file_path): test_cases = [ TestCase( query=QueryOption(parameter="t", level_type="pl", level=[850, 925, 1000]), ), TestCase( query=QueryOption(parameter="gh", level_type="isobaricInhPa", level=[850, 925, 1000]), ) ] for test_case in test_cases: field = load_field_from_file( file_path, **asdict(test_case.query) ) assert field is not None assert np.array_equal( np.sort(field.coords[test_case.query.level_type].values), np.sort(test_case.query.level).astype(float) )
def test_none_level(file_path): test_cases = [ TestCase( query=QueryOption(parameter="t", level_type="pl", level=None), expected_level_name="pl", expected_level=1000 ), TestCase( query=QueryOption(parameter="vwsh", level_type="heightAboveGroundLayer", level=None), expected_level_name="heightAboveGroundLayer", expected_level=1000 ) ] for test_case in test_cases: field = load_field_from_file( file_path, **asdict(test_case.query) ) assert field is not None assert field.coords[test_case.expected_level_name].values == test_case.expected_level
def test_load_with_numbers(file_path): """ Use GRIB keys for parameter: * discipline * parameterCategory * parameterNumber """ parameter = { "discipline": 0, "parameterCategory": 1, "parameterNumber": 225 } level_type = "pl" level = 850 field = load_field_from_file(file_path, parameter=parameter, level_type=level_type, level=level) assert field is not None
def test_pl(file_path): test_cases = [ TestCase(query=QueryOption(parameter="t", level_type="pl", level=1.5, level_dim=None), expected_level_name="pl", expected_level=1.5), TestCase(query=QueryOption(parameter="t", level_type="pl", level=1.5, level_dim="pl"), expected_level_name="pl", expected_level=1.5), TestCase(query=QueryOption(parameter="t", level_type="pl", level=1.5, level_dim="isobaricInhPa"), expected_level_name="isobaricInhPa", expected_level=1.5), TestCase(query=QueryOption(parameter="t", level_type="pl", level=1.5, level_dim="isobaricInPa"), expected_level_name="isobaricInPa", expected_level=150.), TestCase( query=QueryOption(parameter="t", level_type="pl", level=1.5, level_dim="other_level_string"), expected_level_name="other_level_string", expected_level=1, ) # TODO: use float point? ] for test_case in test_cases: field = load_field_from_file(file_path, **asdict(test_case.query)) assert field is not None assert field.coords[ test_case.expected_level_name].values == test_case.expected_level
def test_embedded_short_name(file_path): test_cases = [ TestCase( query=QueryOption(parameter="DEPR", level_type="pl", level=850)), TestCase(query=QueryOption(parameter={ "discipline": 0, "parameterCategory": 0, "parameterNumber": 7, }, level_type="pl", level=850)), ] fields = [] for test_case in test_cases: field = load_field_from_file(file_path, **asdict(test_case.query)) assert field is not None fields.append(field) assert fields[0].attrs["GRIB_count"] == fields[1].attrs["GRIB_count"]
def test_all_levels(file_path, pl_levels): test_cases = [ TestCase( query=QueryOption( parameter="t", level_type="pl", level="all" ), expected_level_name="pl", expected_level=pl_levels ), ] for test_case in test_cases: field = load_field_from_file( file_path, **asdict(test_case.query) ) assert field is not None assert np.array_equal( np.sort(field.coords[test_case.expected_level_name].values), np.sort(test_case.expected_level).astype(float) )
def test_dict(file_path): test_cases = [ TestCase( QueryOption( parameter="vwsh", level_type="heightAboveGroundLayer", level=dict(first_level=1000, second_level=0) ), ), TestCase( QueryOption( parameter="t", level_type="depthBelowLandLayer", level=dict(first_level=0.1, second_level=0.4) ), ) ] for test_case in test_cases: field = load_field_from_file( file_path, **asdict(test_case.query) ) assert field is not None
def test_type_of_level(file_path): test_cases = [ TestCase(query=QueryOption(parameter="gh", level_type="isobaricInhPa", level=10, level_dim=None), expected_level_name="isobaricInhPa", expected_level=10), TestCase(query=QueryOption(parameter="gh", level_type="isobaricInhPa", level=10, level_dim="other_level_string"), expected_level_name="other_level_string", expected_level=10), TestCase(query=QueryOption(parameter="gh", level_type="isobaricInPa", level=50, level_dim=None), expected_level_name="isobaricInPa", expected_level=50), TestCase(query=QueryOption(parameter="gh", level_type="isobaricInPa", level=50, level_dim="other_level_string"), expected_level_name="other_level_string", expected_level=50), TestCase(query=QueryOption(parameter="ulwrf", level_type="nominalTop", level=None, level_dim=None), expected_level_name="nominalTop", expected_level=0), TestCase(query=QueryOption(parameter="tmax", level_type="heightAboveGround", level=2, level_dim=None), expected_level_name="heightAboveGround", expected_level=2), TestCase(query=QueryOption(parameter="prmsl", level_type="meanSea", level=None, level_dim=None), expected_level_name="meanSea", expected_level=0), TestCase( query=QueryOption(parameter="q", level_type="depthBelowLandLayer", level={ "first_level": 0.1, "second_level": 0.4 }, level_dim=None), expected_level_name="depthBelowLandLayer", expected_level=0, ), TestCase( query=QueryOption(parameter="t", level_type="depthBelowLandLayer", level={ "first_level": 1, "second_level": 2 }, level_dim=None), expected_level_name="depthBelowLandLayer", expected_level=1, ), TestCase( query=QueryOption(parameter="vwsh", level_type="heightAboveGroundLayer", level={ "first_level": 1000, "second_level": 0 }, level_dim=None), expected_level_name="heightAboveGroundLayer", expected_level=1000, ), ] for test_case in test_cases: field = load_field_from_file( file_path, **asdict(test_case.query), ) assert field is not None assert field.coords[ test_case.expected_level_name].values == test_case.expected_level
def test_grib_key_for_pl(file_path): test_cases = [ TestCase(query=QueryOption( parameter="gh", level_type={"typeOfFirstFixedSurface": "pl"}, level=10, level_dim=None), expected_level_name="isobaricInhPa", expected_level=10), TestCase(query=QueryOption( parameter="gh", level_type={"typeOfFirstFixedSurface": "pl"}, level=10, level_dim="pl"), expected_level_name="pl", expected_level=10), TestCase(query=QueryOption( parameter="gh", level_type={"typeOfFirstFixedSurface": "pl"}, level=10, level_dim="isobaricInhPa"), expected_level_name="isobaricInhPa", expected_level=10), TestCase(query=QueryOption( parameter="gh", level_type={"typeOfFirstFixedSurface": "pl"}, level=10, level_dim="isobaricInPa"), expected_level_name="isobaricInPa", expected_level=1000), TestCase( query=QueryOption(parameter="gh", level_type={"typeOfFirstFixedSurface": "pl"}, level={"first_level": 150}, level_dim=None), expected_level_name="isobaricInhPa", expected_level=1, ), TestCase( query=QueryOption(parameter="gh", level_type={"typeOfFirstFixedSurface": "pl"}, level={"first_level": 150}, level_dim="pl"), expected_level_name="pl", expected_level=1.5, ), TestCase( query=QueryOption(parameter="gh", level_type={"typeOfFirstFixedSurface": "pl"}, level={"first_level": 150}, level_dim="isobaricInhPa"), expected_level_name="isobaricInhPa", expected_level=1.5, ), TestCase( query=QueryOption(parameter="gh", level_type={"typeOfFirstFixedSurface": "pl"}, level={"first_level": 150}, level_dim="isobaricInPa"), expected_level_name="isobaricInPa", expected_level=150, ), TestCase( query=QueryOption(parameter="gh", level_type={"typeOfFirstFixedSurface": "pl"}, level={"first_level": 150}, level_dim="other_level_string"), expected_level_name="other_level_string", expected_level=1, ), TestCase(query=QueryOption( parameter="gh", level_type={"typeOfFirstFixedSurface": "pl"}, level={"first_level": 50}, level_dim=None), expected_level_name="isobaricInPa", expected_level=50), TestCase(query=QueryOption( parameter="gh", level_type={"typeOfFirstFixedSurface": "pl"}, level={"first_level": 50}, level_dim="pl"), expected_level_name="pl", expected_level=0.5), TestCase(query=QueryOption( parameter="gh", level_type={"typeOfFirstFixedSurface": "pl"}, level={"first_level": 50}, level_dim="isobaricInhPa"), expected_level_name="isobaricInhPa", expected_level=0.5), TestCase(query=QueryOption( parameter="gh", level_type={"typeOfFirstFixedSurface": "pl"}, level={"first_level": 50}, level_dim="isobaricInPa"), expected_level_name="isobaricInPa", expected_level=50), TestCase(query=QueryOption( parameter="gh", level_type={"typeOfFirstFixedSurface": "pl"}, level={"first_level": 50}, level_dim="other_level_string"), expected_level_name="other_level_string", expected_level=50), ] for test_case in test_cases: field = load_field_from_file(file_path, **asdict(test_case.query)) assert field is not None assert field.coords[ test_case.expected_level_name].values == test_case.expected_level