示例#1
0
def test_df2ecl_rock(tmpdir):
    """Test generation of ROCK include files from dataframes"""
    tmpdir.chdir()

    rock_df = pd.DataFrame(
        columns=["PVTNUM", "KEYWORD", "PRESSURE", "COMPRESSIBILITY"],
        data=[[1, "ROCK", 100, 0.001]],
    )

    rock_inc = pvt.df2ecl(rock_df)
    assert "ROCK" in rock_inc
    rock_inc = pvt.df2ecl(rock_df, comments=dict(ROCK="foo"))
    assert "foo" in rock_inc
    rock_inc = pvt.df2ecl(rock_df, comments=dict(DENSITY="foo"))
    assert "foo" not in rock_inc

    rock_inc = pvt.df2ecl(rock_df, comments=dict(ROCK="foo\nbar"), filename="foo.inc")
    assert Path("foo.inc").is_file()
    assert "foo" in rock_inc
    assert "bar" in rock_inc
    # Multiline comments are tricky, is the output valid?
    rock_df_from_inc = pvt.rock_fromdeck(rock_inc).assign(KEYWORD="ROCK")
    # Need to sort columns for comparison, as column order does not matter
    # in dataframes, but it does in the function assert_frame_equal
    rock_df_from_inc = rock_df_from_inc.reindex(
        sorted(rock_df_from_inc.columns), axis=1
    )
    rock_df = rock_df_from_inc.reindex(sorted(rock_df.columns), axis=1)
    pd.testing.assert_frame_equal(rock_df_from_inc, rock_df)

    rock_inc = pvt.df2ecl(rock_df, keywords=["DENSITY"])
    assert not rock_inc
    rock_inc = pvt.df2ecl(rock_df, keywords="DENSITY")
    assert not rock_inc

    rock_inc = pvt.df2ecl(rock_df, keywords=["ROCK", "DENSITY"])
    assert "ROCK" in rock_inc
    assert "DENSITY" not in rock_inc
    rock_inc = pvt.df2ecl(rock_df, keywords="ROCK")
    assert "ROCK" in rock_inc

    # This dataframe is ignored, if we miss PVTNUM:
    ambig_rock_df = pd.DataFrame(
        columns=["KEYWORD", "PRESSURE", "COMPRESSIBILITY"],
        data=[["ROCK", 100, 0.001], ["ROCK", 200, 0.002]],
    )
    assert "ROCK" not in pvt.df2ecl_rock(ambig_rock_df)

    # But if only one row, it is ok:
    assert "ROCK" in pvt.df2ecl_rock(ambig_rock_df.head(1))

    # If we don't want the ROCK keyword, we won't get it:
    nonrock_inc = pvt.df2ecl(rock_df, keywords=["PVTO"])
    assert "ROCK" not in nonrock_inc
示例#2
0
def test_rock():
    """Test parsing of the ROCK keyword from a string"""
    deck = """ROCK
     100 1.1 /"""
    rock_df = pvt.rock_fromdeck(EclFiles.str2deck(deck))
    assert len(rock_df) == 1
    assert "PRESSURE" in rock_df
    assert "COMPRESSIBILITY" in rock_df
    dframe_via_string = pvt.rock_fromdeck(pvt.df2ecl_rock(rock_df))
    pd.testing.assert_frame_equal(dframe_via_string, rock_df)

    # Test emtpy data:
    inc = pvt.df2ecl_rock(pvt.df(""))
    assert "No data" in inc
    assert pvt.df(inc).empty