Esempio n. 1
0
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
Esempio n. 2
0
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"
Esempio n. 3
0
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()
Esempio n. 4
0
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()
    )
Esempio n. 5
0
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
Esempio n. 6
0
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,
    )
Esempio n. 7
0
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 == ""
Esempio n. 8
0
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)
Esempio n. 9
0
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()
Esempio n. 10
0
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)
Esempio n. 11
0
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])))
Esempio n. 12
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