Пример #1
0
def test_indicator_from_dict():
    d = dict(
        realm="atmos",
        output=dict(
            var_name="tmean{thresh}",
            units="K",
            long_name="{freq} mean surface temperature",
            standard_name="{freq} mean temperature",
            cell_methods=[{
                "time": "mean within days"
            }],
        ),
        index_function=dict(
            name="thresholded_statistics",
            parameters=dict(
                threshold={
                    "data": {
                        "thresh": None
                    },
                    "description": "A threshold temp"
                },
                condition={"data": "`<"},
                reducer={"data": "mean"},
            ),
        ),
        input={"data": "tas"},
    )

    ind = Daily.from_dict(d, identifier="tmean", module="test")

    assert ind.realm == "atmos"
    # Parameters metadata modification
    assert ind.parameters["threshold"]["description"] == "A threshold temp"
    # Injection of paramters
    assert "condition" in ind.compute._injected
    # Placeholders were translated to name in signature
    assert ind.cf_attrs[0]["var_name"] == "tmean{threshold}"
    # Default value for input variable injected and meta injected
    assert ind._sig.parameters["data"].default == "tas"
    assert ind.parameters["data"]["units"] == "[temperature]"
    # Cf checks were generated
    assert ind.cfcheck is not Daily.cfcheck
Пример #2
0
def test_indicator_from_dict():
    d = dict(
        realm="atmos",
        cf_attrs=dict(
            var_name="tmean{threshold}",
            units="K",
            long_name="{freq} mean surface temperature",
            standard_name="{freq} mean temperature",
            cell_methods=[{
                "time": "mean within days"
            }],
        ),
        compute="thresholded_statistics",
        parameters=dict(
            threshold={"description": "A threshold temp"},
            condition="<",
            reducer="mean",
        ),
        input={"data": "tas"},
    )

    ind = Daily.from_dict(d, identifier="tmean", module="test")

    assert ind.realm == "atmos"
    # Parameters metadata modification
    assert ind.parameters["threshold"].description == "A threshold temp"
    # Injection of paramters
    assert ind.injected_parameters["condition"] == "<"
    # Default value for input variable injected and meta injected
    assert ind._variable_mapping["data"] == "tas"
    assert signature(ind).parameters["tas"].default == "tas"
    assert ind.parameters["tas"].units == "K"

    # Wrap a multi-output ind
    d = dict(base="wind_speed_from_vector")
    ind = Indicator.from_dict(d, identifier="wsfv", module="test")