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"]
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" ]