def test_str2df(): deckstr = """ FAULTS 'A' 1 2 3 4 5 6 'I' / 'B' 2 3 4 5 6 7 'J' / / """ deck = EclFiles.str2deck(deckstr) faultsdf = faults.df(deck) assert len(faultsdf) == 16
def test_str2df(): """Test making dataframe from a string""" deckstr = """ FAULTS 'A' 1 2 3 4 5 6 'I' / 'B' 2 3 4 5 6 7 'J' / / """ deck = EclFiles.str2deck(deckstr) faultsdf = faults.df(deck) assert len(faultsdf) == 16
def test_faults2df(): """Test that dataframes are produced""" eclfiles = EclFiles(DATAFILE) faultsdf = faults.df(eclfiles.get_ecldeck()) assert "NAME" in faultsdf assert "I" in faultsdf assert "J" in faultsdf assert "K" in faultsdf assert "FACE" in faultsdf assert not faultsdf.empty
def _faults(self) -> pd.DataFrame: """ Function to read fault plane data using ecl2df. Returns: A dataframe with columns NAME, X, Y, Z with data for fault planes """ eclfile = EclFiles(self._input_case) df_fault_keyword = faults.df(eclfile) points = [] for _, row in df_fault_keyword.iterrows(): i = row["I"] - 1 j = row["J"] - 1 k = row["K"] - 1 points.append((row["NAME"], i, j, k)) if (row["FACE"] == "X" or row["FACE"] == "X+" or row["FACE"] == "I" or row["FACE"] == "I+"): points.append((row["NAME"], i + 1, j, k)) elif (row["FACE"] == "Y" or row["FACE"] == "Y+" or row["FACE"] == "J" or row["FACE"] == "J+"): points.append((row["NAME"], i, j + 1, k)) elif (row["FACE"] == "Z" or row["FACE"] == "Z+" or row["FACE"] == "K" or row["FACE"] == "K+"): points.append((row["NAME"], i, j, k + 1)) elif row["FACE"] == "X-" or row["FACE"] == "I-": points.append((row["NAME"], i - 1, j, k)) elif row["FACE"] == "Y-" or row["FACE"] == "J-": points.append((row["NAME"], i, j - 1, k)) elif row["FACE"] == "Z-" or row["FACE"] == "K-": points.append((row["NAME"], i, j, k - 1)) else: raise ValueError( f"Could not interpret '{row['FACE']}' while reading the FAULTS keyword." ) df_faults = pd.DataFrame.from_records(points, columns=["NAME", "I", "J", "K"]) if not df_faults.empty: df_faults[["X", "Y", "Z"]] = pd.DataFrame( df_faults.apply( lambda row: list( self._grid.get_xyz(ijk=(row["I"], row["J"], row["K"])) ), axis=1, ).values.tolist()) return df_faults.drop(["I", "J", "K"], axis=1)
def test_multiplestr2df(): """Test that we support multiple occurences of the FAULTS keyword""" deckstr = """ FAULTS 'A' 1 2 3 4 5 6 'I' / 'B' 2 3 4 5 6 7 'J' / / FAULTS 'C' 1 1 3 3 10 15 'I' / 'D' 2 2 4 4 10 10 'J' / / """ deck = EclFiles.str2deck(deckstr) faultsdf = faults.df(deck).set_index("NAME") assert len(faultsdf) == 23 assert len(faultsdf.loc[["D"]]) == 1 # Pass lists to .loc for single row assert len(faultsdf.loc["C"]) == 6
def test_nnc2df_faultnames(): """Add faultnames from FAULTS keyword to connections""" eclfiles = EclFiles(DATAFILE) nncdf = nnc.df(eclfiles) faultsdf = faults.df(eclfiles.get_ecldeck()) merged = pd.merge( nncdf, faultsdf, how="left", left_on=["I1", "J1", "K1"], right_on=["I", "J", "K"], ) merged = pd.merge( merged, faultsdf, how="left", left_on=["I2", "J2", "K2"], right_on=["I", "J", "K"], )
def test_nofaults(): """Test on a dataset with no faults""" eclfiles = EclFiles(EIGHTCELLS) faultsdf = faults.df(eclfiles.get_ecldeck()) assert faultsdf.empty