Beispiel #1
0
def test_equil2df():
    """Test that dataframes are produced"""
    eclfiles = EclFiles(DATAFILE)
    equildf = equil.df(eclfiles)
    assert not equildf.empty
    assert "KEYWORD" in equildf
    assert "Z" in equildf
    assert "RS" in equildf
    assert "RSVD" in equildf["KEYWORD"].values
    assert "EQUIL" in equildf["KEYWORD"].values
    # RVVD is not present in the Reek deck:
    assert "RVVD" not in equildf["KEYWORD"].values

    # Check that we can dump from dataframe to include file
    # and reparse to the same dataframe:
    inc = equil.df2ecl(equildf, withphases=True)
    df_from_inc = equil.df(inc)
    pd.testing.assert_frame_equal(equildf, df_from_inc, check_dtype=False)
Beispiel #2
0
def test_rvvd():
    """Test RVVD tables"""
    deckstr = """
RVVD
 10 100 /
 30 400 /
 50 100 /"""
    rvvd_df = equil.df(deckstr)
    assert "KEYWORD" in rvvd_df
    assert "EQUIL" not in rvvd_df["KEYWORD"].values
    assert max(rvvd_df["EQLNUM"]) == 3
    assert set(rvvd_df["Z"].values) == {10, 30, 50}
    assert set(rvvd_df["RV"].values) == {100, 400}

    inc = equil.df2ecl(rvvd_df)
    df_from_inc = equil.df(inc)
    pd.testing.assert_frame_equal(rvvd_df, df_from_inc)

    assert equil.df(deckstr, keywords="EQUIL").empty

    # Check that we can use the underlying function directly:
    rvvd_df2 = equil.rvvd_fromdeck(deckstr)
    pd.testing.assert_frame_equal(rvvd_df.drop("KEYWORD", axis="columns"),
                                  rvvd_df2)

    deckstr = """
RVVD
 10 100
 30 400 /
 50 100
 60 1000 /"""
    rvvd_df = equil.df(deckstr)
    assert "KEYWORD" in rvvd_df
    assert "EQUIL" not in rvvd_df["KEYWORD"].values
    assert len(rvvd_df) == 4
    assert max(rvvd_df["EQLNUM"]) == 2
    assert set(rvvd_df["Z"].values) == {10, 30, 50, 60}
    assert set(rvvd_df["RV"].values) == {100, 400, 1000}

    inc = equil.df2ecl(rvvd_df)
    df_from_inc = equil.df(inc)
    pd.testing.assert_frame_equal(rvvd_df, df_from_inc)
Beispiel #3
0
def test_df2ecl(tmpdir):
    """Test that we can write include files to disk"""
    tmpdir.chdir()
    eclfiles = EclFiles(DATAFILE)
    equildf = equil.df(eclfiles)
    equil.df2ecl(equildf, filename="equil.inc")
    assert os.path.exists("equil.inc")

    # Test automatic directory creation:
    equil.df2ecl(equildf, filename="eclipse/include/equil.inc")
    assert os.path.exists("eclipse/include/equil.inc")
Beispiel #4
0
def test_df2ecl(tmp_path):
    """Test that we can write include files to disk"""
    os.chdir(tmp_path)
    eclfiles = EclFiles(EIGHTCELLS)
    equildf = equil.df(eclfiles)
    equil.df2ecl(equildf, filename="equil.inc")
    assert Path("equil.inc").is_file()

    # Test automatic directory creation:
    equil.df2ecl(equildf, filename="eclipse/include/equil.inc")
    assert Path("eclipse/include/equil.inc").is_file()
Beispiel #5
0
def test_ntequl():
    """Test that we can infer NTEQUL when not supplied"""
    deckstr = """
GAS
OIL

EQUIL
 2000 200 2200 1 2100 3 /
 3000 200 2200 1 2100 3 /
"""
    df = equil.df(deckstr)
    assert set(df["GOC"].values) == set([2100, 2100])
    assert len(df) == 2
    assert df["EQLNUM"].min() == 1
    assert df["EQLNUM"].max() == 2
    # Supply correct NTEQUL instead of estimating
    df = equil.df(deckstr, ntequl=2)
    assert len(df) == 2

    inc = equil.df2ecl(df, withphases=True)
    df_from_inc = equil.df(inc)
    pd.testing.assert_frame_equal(df, df_from_inc, check_dtype=False)

    # Supplying wrong NTEQUIL:
    df = equil.df(deckstr, ntequl=1)
    # We are not able to catch this situation..
    assert len(df) == 1
    # But this will fail:
    with pytest.raises(ValueError):
        equil.df(deckstr, ntequl=3)

    deckstr = """
GAS
OIL

EQLDIMS
 2 /

EQUIL
 2000 200 2200 1 2100 3 /
 3000 200 2200 1 2100 3 /
"""
    df = equil.df(deckstr)
    assert set(df["GOC"].values) == set([2100, 2100])
    assert len(df) == 2

    inc = equil.df2ecl(df, withphases=True)
    df_from_inc = equil.df(inc)
    pd.testing.assert_frame_equal(df, df_from_inc, check_dtype=False)
Beispiel #6
0
def test_pbvd():
    """Test PBVD tables"""
    deckstr = """
PBVD
 10 100 /
 30 400 /
 50 100 /"""
    pbvd_df = equil.df(deckstr)
    assert "KEYWORD" in pbvd_df
    assert "EQUIL" not in pbvd_df["KEYWORD"].values
    assert max(pbvd_df["EQLNUM"]) == 3
    assert set(pbvd_df["Z"].values) == {10, 30, 50}
    assert set(pbvd_df["PB"].values) == {100, 400}

    inc = equil.df2ecl(pbvd_df)
    df_from_inc = equil.df(inc)
    pd.testing.assert_frame_equal(pbvd_df, df_from_inc)

    assert equil.df(deckstr, keywords="EQUIL").empty

    # Check that we can use the underlying function directly:
    pbvd_df2 = equil.pbvd_fromdeck(deckstr)
    pd.testing.assert_frame_equal(pbvd_df.drop("KEYWORD", axis="columns"),
                                  pbvd_df2)
Beispiel #7
0
def test_rsvd_via_file(tmpdir):
    """Test that we can reparse RSVD with unknown TABDIMS
    from a file using the command line utility"""
    tmpdir.chdir()
    deckstr = """
RSVD
 10 100
 30 400 /
 50 100
 60 1000 /"""
    rsvd_df = equil.df(deckstr)
    with open("rsvd.inc", "w") as filehandle:
        filehandle.write(deckstr)
    sys.argv = ["ecl2csv", "equil", "-v", "rsvd.inc", "-o", "rsvd.csv"]
    ecl2csv.main()
    rsvd_df_fromcsv = pd.read_csv("rsvd.csv")
    pd.testing.assert_frame_equal(rsvd_df, rsvd_df_fromcsv)
Beispiel #8
0
def test_equil_fromdeck():
    """equil.df relies on equil.equil_fromdeck, test that expliclitly"""
    deckstr = """
OIL
WATER
GAS

EQUIL
--   DATUM  PRESSURE     OWC  PCOWC  GOC  PCGOC  INITRS  INITRV  ACCURACY
 2469.0     382.4  1700.0    0.0  0.0    0.0     1     0      20  /
 2469.0     382.4  1000.0    0.0  0.0    0.0     2     0      20  /
"""
    pd.testing.assert_frame_equal(equil.equil_fromdeck(deckstr),
                                  equil.df(deckstr).drop("KEYWORD", axis=1))
    # If we supply a deck object and not a string, it will not be able
    # to pick up both EQLNUMs:
    assert len(equil.equil_fromdeck(deckstr)) == 2  # correct
    assert len(equil.equil_fromdeck(deckstr, 2)) == 2
    assert len(equil.equil_fromdeck(deckstr, 1)) == 1
    assert len(equil.equil_fromdeck(
        EclFiles.str2deck(deckstr))) == 1  # (watch out!)

    wrongdeck = """
EQUIL
1 1 1 1 1 1 1 1 1 /
/
"""
    with pytest.raises(ValueError,
                       match="Could not determine phase configuration"):
        equil.equil_fromdeck(wrongdeck)

    with pytest.raises(ValueError,
                       match="Could not determine phase configuration"):
        equil.equil_fromdeck("")

    # Single phase decks will not work:
    gasdeck = """
GAS

EQUIL
1 1 5000 0 4000 /
"""
    with pytest.raises(ValueError,
                       match="Could not determine phase configuration"):
        equil.equil_fromdeck(gasdeck)
Beispiel #9
0
def test_decks():
    """Test some string decks"""
    deckstr = """
OIL
WATER
GAS

EQUIL
 2000 200 2200 /
"""
    df = equil.df(deckstr)
    assert df["OWC"].values == 2200
    assert len(df) == 1
    assert "IGNORE1" not in df
    assert df["EQLNUM"].unique()[0] == 1
    inc = equil.df2ecl(df, withphases=True)
    df_from_inc = equil.df(inc)
    # 0 columns can be both integers and floats.
    pd.testing.assert_frame_equal(df, df_from_inc, check_dtype=False)

    deckstr = """
OIL
WATER

EQUIL
 2000 200 2200 /
"""
    df = equil.df(deckstr)
    assert df["OWC"].values == 2200
    assert len(df) == 1
    assert "IGNORE1" not in df
    inc = equil.df2ecl(df, withphases=True)
    df_from_inc = equil.df(inc)
    # 0 columns can be both integers and floats.
    pd.testing.assert_frame_equal(df, df_from_inc, check_dtype=False)

    deckstr = """
GAS
WATER

EQUIL
 2000 200 2200 /
"""
    df = equil.df(deckstr)
    assert df["GWC"].values == 2200
    assert "OWC" not in df
    assert len(df) == 1
    assert "IGNORE2" not in df
    inc = equil.df2ecl(df, withphases=True)
    df_from_inc = equil.df(inc)
    # 0 columns can be both integers and floats.
    pd.testing.assert_frame_equal(df, df_from_inc, check_dtype=False)

    deckstr = """
GAS
OIL

EQUIL
 2000 200 2200 1 2100 3 /
"""
    df = equil.df(deckstr)
    assert df["GOC"].values == 2100
    assert "GWC" not in df
    assert "OWC" not in df
    assert len(df) == 1
    assert "IGNORE2" not in df
    inc = equil.df2ecl(df, withphases=True)
    df_from_inc = equil.df(inc)
    # 0 columns can be both integers and floats.
    pd.testing.assert_frame_equal(df, df_from_inc, check_dtype=False)

    deckstr = """
OIL
WATER
GAS

-- Output file printed by ecl2df.equil 0.5.2.dev12+g785dc0d.d20200402
-- at 2020-04-03 16:18:57.450100

EQUIL
--   DATUM  PRESSURE     OWC  PCOWC  GOC  PCGOC  INITRS  INITRV  ACCURACY
 2469.0     382.4  1700.0    0.0  0.0    0.0     1     0      20  /
 2469.0     382.4  1000.0    0.0  0.0    0.0     2     0      20  /
"""
    df = equil.df(deckstr)
    assert set(df["GOC"].values) == {0.0}
    assert "GWC" not in df
    assert "OWC" in df
    assert len(df) == 2
    assert "IGNORE2" not in df
    inc = equil.df2ecl(df, withphases=True)
    df_from_inc = equil.df(inc)
    # 0 columns can be both integers and floats.
    pd.testing.assert_frame_equal(df, df_from_inc, check_dtype=False)
Beispiel #10
0
def test_equil2df():
    """Test that dataframes are produced"""
    eclfiles = EclFiles(DATAFILE)
    equildf = equil.df(eclfiles)
    expected = {}
    expected["EQUIL"] = pd.DataFrame([
        {
            "Z": 2469.0,
            "PRESSURE": 382.4,
            "OWC": 1700.0,
            "PCOWC": 0.0,
            "GOC": 0.0,
            "PCGOC": 0.0,
            "INITRS": 1.0,
            "INITRV": 0.0,
            "OIP_INIT": 20.0,
            "EQLNUM": 1,
            "KEYWORD": "EQUIL",
        },
        {
            "Z": 2469.0,
            "PRESSURE": 382.4,
            "OWC": 1000.0,
            "PCOWC": 0.0,
            "GOC": 0.0,
            "PCGOC": 0.0,
            "INITRS": 2.0,
            "INITRV": 0.0,
            "OIP_INIT": 20.0,
            "EQLNUM": 2,
            "KEYWORD": "EQUIL",
        },
    ])
    expected["RSVD"] = pd.DataFrame([
        {
            "Z": 1500.0,
            "EQLNUM": 1,
            "KEYWORD": "RSVD",
            "RS": 184.0
        },
        {
            "Z": 4000.0,
            "EQLNUM": 1,
            "KEYWORD": "RSVD",
            "RS": 184.0
        },
        {
            "Z": 1500.0,
            "EQLNUM": 2,
            "KEYWORD": "RSVD",
            "RS": 184.0
        },
        {
            "Z": 4000.0,
            "EQLNUM": 2,
            "KEYWORD": "RSVD",
            "RS": 184.0
        },
    ])

    for keyword, df in equildf.groupby("KEYWORD"):
        pd.testing.assert_frame_equal(
            df.dropna(axis=1).reset_index(drop=True), expected[keyword])

    # Check that we can dump from dataframe to include file
    # and reparse to the same dataframe:
    inc = equil.df2ecl(equildf, withphases=True)
    df_from_inc = equil.df(inc)
    pd.testing.assert_frame_equal(equildf, df_from_inc, check_dtype=False)