Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
0
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
Exemple #5
0
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
Exemple #6
0
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
Exemple #8
0
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
Exemple #9
0
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
Exemple #10
0
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
Exemple #11
0
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
Exemple #12
0
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
Exemple #13
0
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
Exemple #14
0
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
Exemple #15
0
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
Exemple #16
0
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
Exemple #17
0
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
Exemple #18
0
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
Exemple #19
0
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)
        )
Exemple #20
0
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
Exemple #21
0
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
Exemple #22
0
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
Exemple #23
0
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"]
Exemple #24
0
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)
        )
Exemple #25
0
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
Exemple #26
0
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
Exemple #27
0
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