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