def test_mockprtfile(): """ Test (a) mocked PRT file(s) """ dframe = fipreports.df(MOCKPRTFILE) assert dframe["FIPNAME"].unique() == "FIPNUM" assert len(dframe["DATE"].unique()) == 1 assert int(dframe.loc[0, "GIIP_GAS"]) == 20 dframe = fipreports.df(MOCKPRTFILE, fipname="FIPZON") assert dframe["FIPNAME"].unique() == "FIPZON" assert len(dframe["REGION"].unique()) == 2 assert len(dframe["TO_REGION"].dropna().unique()) == 4 assert len(dframe["DATE"].unique()) == 3 assert len(dframe["DATATYPE"].unique()) == 6 dframe = fipreports.df(MOCKPRTFILE, fipname="FIPOWG") assert dframe["FIPNAME"].unique() == "FIPOWG" assert len(dframe["DATE"].unique()) == 1 with pytest.raises(ValueError): fipreports.df(MOCKPRTFILE, fipname="WIPNUM") # fipname at most 8 characters: assert fipreports.df(MOCKPRTFILE, fipname="FIP45678").empty with pytest.raises(ValueError): fipreports.df(MOCKPRTFILE, fipname="FIP456789")
def test_fipreports2df(): """Test parsing of Reek dataset""" prtfile = EclFiles(DATAFILE).get_prtfilename() fipreport_df = fipreports.df(prtfile) assert len(fipreport_df["REGION"].unique()) == 6 assert len(fipreport_df["DATE"].unique()) == 1 assert fipreport_df["FIPNAME"].unique()[0] == "FIPNUM" assert len(fipreport_df["DATATYPE"].unique()) == 5
def test_mockprtfile(): """ Test (a) mocked PRT file(s) """ dframe = fipreports.df(MOCKPRTFILE) assert dframe["FIPNAME"].unique() == "FIPNUM" assert len(dframe["DATE"].unique()) == 1 assert int(dframe.loc[0, "GIIP_GAS"]) == 20 dframe = fipreports.df(MOCKPRTFILE, fipname="FIPZON") assert dframe["FIPNAME"].unique() == "FIPZON" assert len(dframe["REGION"].unique()) == 2 assert len(dframe["TO_REGION"].dropna().unique()) == 4 assert len(dframe["DATE"].unique()) == 3 assert len(dframe["DATATYPE"].unique()) == 6 dframe = fipreports.df(MOCKPRTFILE, fipname="FIPOWG") assert dframe["FIPNAME"].unique() == "FIPOWG" assert len(dframe["DATE"].unique()) == 1
def test_prtstring_opmflow(tmp_path): """Test parsing the PRT output from OPM flow.""" prtstring = """ Starting time step 3, stepsize 19.6 days, at day 11.4/31, date = 12-Jan-2000 =================================================== : FIPNUM report region 1 : : PAV = 306.192 BARSA : : PORV = 78804306 RM3 : :--------------- Oil SM3 ---------------:-- Wat SM3 --:--------------- Gas SM3 ---------------: : Liquid Vapour Total : Total : Free Dissolved Total : :------------------------:------------------------------------------:----------------:------------------------------------------: :Currently in place : 16528782 0 16528782: 60416351 : 0 0 0: :------------------------:------------------------------------------:----------------:------------------------------------------: :Originally in place : 16530271 0 16530271: 60415965 : 0 0 0: :========================:==========================================:================:==========================================: """ # noqa os.chdir(tmp_path) Path("FOO.PRT").write_text(prtstring) dframe = fipreports.df("FOO.PRT") print(dframe.to_dict(orient="records")) expected_dframe = pd.DataFrame([ { "DATE": datetime.date(2000, 1, 12), "FIPNAME": "FIPNUM", "REGION": 1, "DATATYPE": "CURRENTLY IN PLACE", "TO_REGION": None, "STOIIP_OIL": 16528782.0, "ASSOCIATEDOIL_GAS": 0.0, "STOIIP_TOTAL": 16528782.0, "WIIP_TOTAL": 60416351.0, "GIIP_GAS": 0.0, "ASSOCIATEDGAS_OIL": 0.0, "GIIP_TOTAL": 0.0, }, { "DATE": datetime.date(2000, 1, 12), "FIPNAME": "FIPNUM", "REGION": 1, "DATATYPE": "ORIGINALLY IN PLACE", "TO_REGION": None, "STOIIP_OIL": 16530271.0, "ASSOCIATEDOIL_GAS": 0.0, "STOIIP_TOTAL": 16530271.0, "WIIP_TOTAL": 60415965.0, "GIIP_GAS": 0.0, "ASSOCIATEDGAS_OIL": 0.0, "GIIP_TOTAL": 0.0, }, ]) pd.testing.assert_frame_equal(dframe, expected_dframe)
def test_opm_prt_file(): """Test parsing a PRT file from OPM""" fipreport_df = fipreports.df( TESTDIR / "data/reek/eclipse/model/2_R001_REEK-0-OPMFLOW.PRT") assert len(fipreport_df) == 530 assert len(fipreport_df["DATE"].unique()) == 38 assert set(fipreport_df["REGION"]) == {1, 2, 3, 4, 5, 6} assert set([ "DATE", "FIPNAME", "REGION", "DATATYPE", "STOIIP_OIL", "ASSOCIATEDOIL_GAS", "STOIIP_TOTAL", "WIIP_TOTAL", "GIIP_GAS", "ASSOCIATEDGAS_OIL", "GIIP_TOTAL", ]).issubset(set(fipreport_df.columns))
def test_rogue_eclipse_output(tmp_path): """The starts in the material balance error line has been observed in reality.""" prtstring = """ ================================= : FIPNUM REPORT REGION 120 : : PAV = 298.89 BARSA: : PORV= 4502843. RM3 : :--------------- OIL SM3 ---------------:-- WAT SM3 -:--------------- GAS SM3 ---------------: : LIQUID VAPOUR TOTAL : TOTAL : FREE DISSOLVED TOTAL : :-------------------------:-------------------------------------------:----------------:-------------------------------------------: :CURRENTLY IN PLACE : -2703242. 10451. -2692791.: 2568336. : 59233087. 190842667352. 190901900439.: :-------------------------:-------------------------------------------:----------------:-------------------------------------------: :OUTFLOW TO OTHER REGIONS : 294586. 6362. 300947.: 1235671. : 39452538. 51855907. 91308445.: :OUTFLOW THROUGH WELLS : 65430.: -1818966. : -85526625.: :MATERIAL BALANCE ERROR. : 3419391.: 671761. : *************: :-------------------------:-------------------------------------------:----------------:-------------------------------------------: """ # noqa os.chdir(tmp_path) Path("FOO.PRT").write_text(prtstring) dframe = fipreports.df("FOO.PRT").set_index("DATATYPE") assert np.isnan(dframe.loc["MATERIAL BALANCE ERROR.", "GIIP_TOTAL"])
def test_prtstring(tmp_path): """Test a PRT from string, verifying every detail of the dataframe""" prtstring = """ REPORT 0 1 JAN 2000 ================================= : FIPNUM REPORT REGION 2 : : PAV = 139.76 BARSA: : PORV= 27777509. RM3 : :--------------- OIL SM3 ---------------:-- WAT SM3 -:--------------- GAS SM3 ---------------: : LIQUID VAPOUR TOTAL : TOTAL : FREE DISSOLVED TOTAL : :-------------------------:-------------------------------------------:----------------:-------------------------------------------: :CURRENTLY IN PLACE : 21091398. 21091398.: 4590182. : -0. 483594842. 483594842.: :-------------------------:-------------------------------------------:----------------:-------------------------------------------: :OUTFLOW TO OTHER REGIONS : 76266. 76266.: 75906. : 0. 1818879. 1818879.: :OUTFLOW THROUGH WELLS : 0.: 0. : 0.: :MATERIAL BALANCE ERROR. : 0.: 0. : 0.: :-------------------------:-------------------------------------------:----------------:-------------------------------------------: :ORIGINALLY IN PLACE : 21136892. 21136892.: 4641214. : 0. 484657561. 484657561.: :-------------------------:-------------------------------------------:----------------:-------------------------------------------: :OUTFLOW TO REGION 1 : 143128. 143128.: -161400. : 0. 3017075. 3017075.: :OUTFLOW TO REGION 3 : -66862. -66862.: 198900. : -0. -1198195. -1198195.: :OUTFLOW TO REGION 8 : 0. 0.: 38405. : 0. 0. 0.: ==================================================================================================================================== """ # noqa os.chdir(tmp_path) Path("FOO.PRT").write_text(prtstring) dframe = fipreports.df("FOO.PRT") expected_dframe = pd.DataFrame([ { "DATE": datetime.date(2000, 1, 1), "FIPNAME": "FIPNUM", "REGION": 2, "DATATYPE": "CURRENTLY IN PLACE", "TO_REGION": np.nan, "STOIIP_OIL": 21091398.0, "ASSOCIATEDOIL_GAS": None, "STOIIP_TOTAL": 21091398.0, "WIIP_TOTAL": 4590182.0, "GIIP_GAS": -0.0, "ASSOCIATEDGAS_OIL": 483594842.0, "GIIP_TOTAL": 483594842.0, }, { "DATE": datetime.date(2000, 1, 1), "FIPNAME": "FIPNUM", "REGION": 2, "DATATYPE": "OUTFLOW TO OTHER REGIONS", "TO_REGION": np.nan, "STOIIP_OIL": 76266.0, "ASSOCIATEDOIL_GAS": None, "STOIIP_TOTAL": 76266.0, "WIIP_TOTAL": 75906.0, "GIIP_GAS": 0.0, "ASSOCIATEDGAS_OIL": 1818879.0, "GIIP_TOTAL": 1818879.0, }, { "DATE": datetime.date(2000, 1, 1), "FIPNAME": "FIPNUM", "REGION": 2, "DATATYPE": "OUTFLOW THROUGH WELLS", "TO_REGION": np.nan, "STOIIP_OIL": np.nan, "ASSOCIATEDOIL_GAS": None, "STOIIP_TOTAL": 0.0, "WIIP_TOTAL": 0.0, "GIIP_GAS": np.nan, "ASSOCIATEDGAS_OIL": np.nan, "GIIP_TOTAL": 0.0, }, { "DATE": datetime.date(2000, 1, 1), "FIPNAME": "FIPNUM", "REGION": 2, "DATATYPE": "MATERIAL BALANCE ERROR.", "TO_REGION": np.nan, "STOIIP_OIL": np.nan, "ASSOCIATEDOIL_GAS": None, "STOIIP_TOTAL": 0.0, "WIIP_TOTAL": 0.0, "GIIP_GAS": np.nan, "ASSOCIATEDGAS_OIL": np.nan, "GIIP_TOTAL": 0.0, }, { "DATE": datetime.date(2000, 1, 1), "FIPNAME": "FIPNUM", "REGION": 2, "DATATYPE": "ORIGINALLY IN PLACE", "TO_REGION": np.nan, "STOIIP_OIL": 21136892.0, "ASSOCIATEDOIL_GAS": None, "STOIIP_TOTAL": 21136892.0, "WIIP_TOTAL": 4641214.0, "GIIP_GAS": 0.0, "ASSOCIATEDGAS_OIL": 484657561.0, "GIIP_TOTAL": 484657561.0, }, { "DATE": datetime.date(2000, 1, 1), "FIPNAME": "FIPNUM", "REGION": 2, "DATATYPE": "OUTFLOW TO REGION", "TO_REGION": 1.0, "STOIIP_OIL": 143128.0, "ASSOCIATEDOIL_GAS": None, "STOIIP_TOTAL": 143128.0, "WIIP_TOTAL": -161400.0, "GIIP_GAS": 0.0, "ASSOCIATEDGAS_OIL": 3017075.0, "GIIP_TOTAL": 3017075.0, }, { "DATE": datetime.date(2000, 1, 1), "FIPNAME": "FIPNUM", "REGION": 2, "DATATYPE": "OUTFLOW TO REGION", "TO_REGION": 3.0, "STOIIP_OIL": -66862.0, "ASSOCIATEDOIL_GAS": None, "STOIIP_TOTAL": -66862.0, "WIIP_TOTAL": 198900.0, "GIIP_GAS": -0.0, "ASSOCIATEDGAS_OIL": -1198195.0, "GIIP_TOTAL": -1198195.0, }, { "DATE": datetime.date(2000, 1, 1), "FIPNAME": "FIPNUM", "REGION": 2, "DATATYPE": "OUTFLOW TO REGION", "TO_REGION": 8.0, "STOIIP_OIL": 0.0, "ASSOCIATEDOIL_GAS": None, "STOIIP_TOTAL": 0.0, "WIIP_TOTAL": 38405.0, "GIIP_GAS": 0.0, "ASSOCIATEDGAS_OIL": 0.0, "GIIP_TOTAL": 0.0, }, ]) pd.testing.assert_frame_equal(dframe, expected_dframe)