예제 #1
0
def test_webviz_regiontofipnum_format():
    """Test that the webviz format for mapping regions to fipnums also works"""
    simv = pd.DataFrame([{"STOIIP_OIL": 1000}], index=[1])
    resv = pd.DataFrame([{"PORV_TOTAL": 1000}], index=[1])
    Path("webviz_fip.yml").write_text(
        yaml.dump(
            {"FIPNUM": {"groups": {"REGION": {"West": [1]}, "ZONE": {"Volon": [1]}}}}
        ),
        encoding="utf8",
    )
    dframe = prtvol2csv.prtvol2df(simv, resv, FipMapper(yamlfile="webviz_fip.yml"))
    assert dframe["ZONE"].values == ["Volon"]
    assert dframe["REGION"].values == ["West"]
예제 #2
0
def test_prtvol2df(tmpdir):
    simv = pd.DataFrame([{"STOIIP_OIL": 1000}], index=[1])
    resv = pd.DataFrame([{"PORV_TOTAL": 1000}], index=[1])

    # This function is simple concatenation horizontally:
    volumes = prtvol2csv.prtvol2df(simv, resv)
    pd.testing.assert_frame_equal(
        volumes,
        pd.DataFrame([{
            "STOIIP_OIL": 1000,
            "PORV_TOTAL": 1000
        }], index=[1]))
    # Index is [1] implicitly, and refers to FIPNUM.
    assert "REGION" not in prtvol2csv.prtvol2df(simv, resv, FipMapper())
    assert "ZONE" not in prtvol2csv.prtvol2df(simv, resv, FipMapper())

    # Add a non-trivial FipMapper:
    print(
        prtvol2csv.prtvol2df(simv, resv,
                             FipMapper(mapdata={"region2fipnum": {
                                 "West": 1
                             }})))

    assert prtvol2csv.prtvol2df(
        simv, resv, FipMapper(mapdata={"region2fipnum": {
            "West": 1
        }}))["REGION"].values == ["West"]

    # Reverse the supplied map, should give the same:
    assert prtvol2csv.prtvol2df(
        simv, resv, FipMapper(mapdata={"fipnum2region": {
            1: "West"
        }}))["REGION"].values == ["West"]

    # And then for zones:
    assert prtvol2csv.prtvol2df(
        simv, resv, FipMapper(mapdata={"fipnum2zone": {
            1: "Upper"
        }}))["ZONE"].values == ["Upper"]
    assert prtvol2csv.prtvol2df(
        simv, resv, FipMapper(mapdata={"zone2fipnum": {
            "Upper": 1
        }}))["ZONE"].values == ["Upper"]
    # if we use {"Upper": "1"} it will fail, but no pytest.raises on
    # that yet, perhaps it will be fixed later.

    # Check integer handling through yaml:
    tmpdir.chdir()
    Path("z2f_int.yml").write_text(yaml.dump({"zone2fipnum": {"Upper": 1}}))
    assert prtvol2csv.prtvol2df(
        simv, resv,
        FipMapper(yamlfile="z2f_int.yml"))["ZONE"].values == ["Upper"]
    prtvol2csv.prtvol2df(simv, resv,
                         FipMapper(yamlfile="z2f_int.yml")).to_csv("foo.csv")

    # Both zone and regions at the same time:
    volumes = prtvol2csv.prtvol2df(
        simv,
        resv,
        FipMapper(mapdata={
            "fipnum2region": {
                1: "West"
            },
            "zone2fipnum": {
                "Upper": 1
            }
        }),
    )
    assert volumes["REGION"].values == ["West"]
    assert volumes["ZONE"].values == ["Upper"]

    # fipnummaps referring to non-existing fipnums:
    volumes = prtvol2csv.prtvol2df(
        simv,
        resv,
        FipMapper(
            mapdata={
                "fipnum2region": {
                    1: "West",
                    50: "Antarctica"
                },
                "zone2fipnum": {
                    "Upper": 1,
                    "Mantel": 100
                },
            }),
    )
    assert "Antarctica" not in volumes["REGION"]
    assert "Mantel" not in volumes["ZONE"]

    # Simple global_master_config support:
    Path("global_master_config.yml").write_text(
        yaml.dump({"global": {
            "zone2fipnum": {
                "Upper": 1
            }
        }}))
    assert prtvol2csv.prtvol2df(
        simv, resv,
        FipMapper(yamlfile="global_master_config.yml"))["ZONE"].values == [
            "Upper"
        ]