def test_str2df(): """Test when we send in a string directly""" schstr = """ GRUPTREE 'OPWEST' 'OP' / 'OP' 'FIELD' / 'FIELD' 'AREA' / 'AREA' 'NORTHSEA' / / WELSPECS 'OP1' 'OPWEST' 41 125 1759.74 'OIL' 0.0 'STD' 'SHUT' 'YES' 0 'SEG' / / """ deck = EclFiles.str2deck(schstr) grupdf = gruptree.df(deck) assert grupdf.dropna().empty # the DATE is empty # This is only available if GRUPNET is also there assert "TERMINAL_PRESSURE" not in grupdf withstart = gruptree.df(deck, startdate="2019-01-01") assert not withstart.dropna().empty assert len(withstart) == 5
def test_gruptree2df(): """Test that dataframes are produced""" eclfiles = EclFiles(DATAFILE) grupdf = gruptree.df(eclfiles.get_ecldeck()) assert not grupdf.empty assert len(grupdf["DATE"].unique()) == 5 assert len(grupdf["CHILD"].unique()) == 10 assert len(grupdf["PARENT"].unique()) == 3 assert set(grupdf["KEYWORD"].unique()) == set(["GRUPTREE", "WELSPECS"]) grupdfnowells = gruptree.df(eclfiles.get_ecldeck(), welspecs=False) assert len(grupdfnowells["KEYWORD"].unique()) == 1 assert grupdf["PARENT"].unique()[0] == "FIELD" assert grupdf["KEYWORD"].unique()[0] == "GRUPTREE"
def test_prettyprint(tmpdir, mocker, caplog): """ "Test prettyprinting with multiple dates and both GRUPTREE and BRANPROP trees""" schstr = """ DATES 1 JAN 2000 / / GRUPTREE 'TMPL_A' 'FIELD'/ / BRANPROP 'NODE_A' 'FIELD' / 'TMPL_A' 'NODE_A' / / NODEPROP 'FIELD' 20 / 'TMPL_A' 2* YES / / WELSPECS 'WELL_1' 'TMPL_A' 1 1 1 OIL / 'WELL_2' 'TMPL_B' 1 1 1 OIL / / DATES 1 FEB 2000 / / NODEPROP 'FIELD' 22 / / """ expected_prettyprint = """ Date: 2000-01-01 GRUPTREE trees: FIELD └── TMPL_A └── WELL_1 TMPL_B └── WELL_2 BRANPROP trees: FIELD └── NODE_A └── TMPL_A └── WELL_1 Date: 2000-02-01 BRANPROP trees: FIELD └── NODE_A └── TMPL_A └── WELL_1 """ dframe = gruptree.df(EclFiles.str2deck(schstr)) assert gruptree.prettyprint(dframe).strip() == expected_prettyprint.strip()
def test_grupnet_rst_docs(tmp_path): """Provide the input and output for the examples in the RST documentation""" os.chdir(tmp_path) schstr = """ START 01 'JAN' 2000 / SCHEDULE GRUPTREE 'OPEAST' 'OP' / 'OPWEST' 'OP' / 'INJEAST' 'WI' / 'OP' 'FIELD' / 'WI' 'FIELD' / 'FIELD' 'AREA' / 'AREA' 'NORTHSEA' / / GRUPNET 'FIELD' 90 / 'OPWEST' 100 / / WELSPECS 'OP1' 'OPWEST' 41 125 1759.74 'OIL' 0.0 'STD' 'SHUT' 'YES' 0 'SEG' / 'OP2' 'OPEAST' 43 122 1776.01 'OIL' 0.0 'STD' 'SHUT' 'YES' 0 'SEG' / 'INJ1' 'INJEAST' 33 115 1960.21 'OIL' 0.0 'STD' 'SHUT' 'YES' 0 'SEG' / / """ deck = EclFiles.str2deck(schstr) grupdf = gruptree.df(deck) grupdf[["DATE", "CHILD", "PARENT", "KEYWORD"]].to_csv("gruptree.csv", index=False) grupdf.to_csv("gruptreenet.csv", index=False) grup_dict = gruptree.edge_dataframe2dict(grupdf) print("Copy and paste into RST files:") print(str(gruptree.tree_from_dict(grup_dict[0]))) assert ( str(gruptree.tree_from_dict(grup_dict[0])).strip() == """ NORTHSEA └── AREA └── FIELD ├── OP │ ├── OPEAST │ │ └── OP2 │ └── OPWEST │ └── OP1 └── WI └── INJEAST └── INJ1 """.strip() )
def test_emptytree(): """Test empty schedule sections. Don't want to crash""" schstr = "" deck = EclFiles.str2deck(schstr) grupdf = gruptree.df(deck) assert grupdf.empty gruptreedict = gruptree.df2dict(grupdf) assert not gruptreedict treelibtree = gruptree.dict2treelib("", gruptreedict) treestring = str(treelibtree) assert not treestring.strip() # Let it return whitespace
def test_branprop_nodeprop(schstr, expected_dframe, check_columns): """Testing that the gruptree dataframe works correctly when the schedule string contains BRANPROP and NODEPROP """ deck = EclFiles.str2deck(schstr) dframe = gruptree.df(deck).reset_index() expected_dframe.DATE = pd.to_datetime(expected_dframe.DATE) pd.testing.assert_frame_equal( dframe[check_columns], expected_dframe[check_columns], check_dtype=False, )
def test_emptytree_strdeck(): """Test empty schedule sections. Don't want to crash""" schstr = "" deck = EclFiles.str2deck(schstr) grupdf = gruptree.df(deck) assert grupdf.empty gruptreedict = gruptree.edge_dataframe2dict(grupdf) assert not gruptreedict[0] treelibtree = gruptree.tree_from_dict(gruptreedict[0]) # Returning an empty string and not a treelib.Tree() is # a workaround for a limitation in treelib. assert treelibtree == ""
def test_eightcells_dataset(): """Test Eightcells dataset""" eclfiles = EclFiles(EIGHTCELLS) gruptree_df = gruptree.df(eclfiles.get_ecldeck()) expected_dframe = pd.DataFrame( [ ["2000-01-01", "FIELD", "GRUPTREE", np.nan], ["2000-01-01", "OP1", "WELSPECS", "OPS"], ["2000-01-01", "OPS", "GRUPTREE", "FIELD"], ], columns=["DATE", "CHILD", "KEYWORD", "PARENT"], ) expected_dframe["DATE"] = pd.to_datetime(expected_dframe["DATE"]) pd.testing.assert_frame_equal(gruptree_df, expected_dframe, check_dtype=False)
def test_grupnetroot(schstr, expected_dframe, expected_tree): """Test that terminal pressure of the tree root can be included in the dataframe (with an empty parent)""" deck = EclFiles.str2deck(schstr) grupdf = gruptree.df(deck, startdate="2000-01-01") non_default_columns = ["CHILD", "PARENT", "TERMINAL_PRESSURE"] pd.testing.assert_frame_equal( grupdf[non_default_columns] .sort_values(["CHILD", "PARENT"]) .reset_index(drop=True), expected_dframe.sort_values(["CHILD", "PARENT"]).reset_index(drop=True), check_dtype=False, ) treelist = gruptree.edge_dataframe2dict(grupdf) # Merge strings for all trees (if multiple roots) strtrees = [str(gruptree.tree_from_dict(tree)) for tree in treelist] strtrees.sort() # Avoid flaky test due to sorting treelibtree = "".join(strtrees) assert treelibtree.strip() == expected_tree.strip()
def test_tstep(): schstr = """ GRUPTREE 'OPWEST' 'OP' / 'OP' 'FIELD' / 'FIELD' 'AREA' / 'AREA' 'NORTHSEA' / / TSTEP 1 / WELSPECS 'OP1' 'OPWEST' 41 125 1759.74 'OIL' 0.0 'STD' 'SHUT' 'YES' 0 'SEG' / / """ deck = EclFiles.str2deck(schstr) grupdf = gruptree.df(deck) assert len(grupdf["DATE"].unique()) == 2 print(grupdf)
def test_grupnet_rst_docs(tmpdir): """Provide the input and output for the examples in the RST documentation""" tmpdir.chdir() schstr = """ START 01 'JAN' 2000 / SCHEDULE GRUPTREE 'OPEAST' 'OP' / 'OPWEST' 'OP' / 'INJEAST' 'WI' / 'OP' 'FIELD' / 'WI' 'FIELD' / 'FIELD' 'AREA' / 'AREA' 'NORTHSEA' / / GRUPNET 'FIELD' 90 / 'OPWEST' 100 / / WELSPECS 'OP1' 'OPWEST' 41 125 1759.74 'OIL' 0.0 'STD' 'SHUT' 'YES' 0 'SEG' / 'OP2' 'OPEAST' 43 122 1776.01 'OIL' 0.0 'STD' 'SHUT' 'YES' 0 'SEG' / 'INJ1' 'INJEAST' 33 115 1960.21 'OIL' 0.0 'STD' 'SHUT' 'YES' 0 'SEG' / / """ deck = EclFiles.str2deck(schstr) grupdf = gruptree.df(deck) grupdf[["DATE", "CHILD", "PARENT", "KEYWORD"]].to_csv("gruptree.csv", index=False) grupdf.to_csv("gruptreenet.csv", index=False) grup_dict = gruptree.df2dict(grupdf) print("Copy and paste into RST files:") print(str(gruptree.dict2treelib("", grup_dict[0])))
def test_grupnetdf(): schstr = """ GRUPTREE 'OPWEST' 'OP' / 'OP' 'FIELD' / 'WI' 'FIELD' / 'FIELD' 'AREA' / 'AREA' 'NORTHSEA' / / GRUPNET 'FIELD' 90 / 'OPWEST' 100 / / """ deck = EclFiles.str2deck(schstr) grupdf = gruptree.df(deck, startdate="2000-01-01") print(grupdf) assert "TERMINAL_PRESSURE" in grupdf assert 90 in grupdf["TERMINAL_PRESSURE"].values assert 100 in grupdf["TERMINAL_PRESSURE"].values