res2df 1.2.3__py2.py3-none-any.whl → 1.3.1__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- res2df/common.py +9 -8
- res2df/compdat.py +3 -6
- res2df/csv2res.py +1 -2
- res2df/equil.py +1 -1
- res2df/grid.py +1 -4
- res2df/gruptree.py +15 -2
- res2df/pvt.py +1 -1
- res2df/rft.py +5 -5
- res2df/satfunc.py +8 -7
- res2df/summary.py +4 -4
- res2df/version.py +2 -2
- {res2df-1.2.3.dist-info → res2df-1.3.1.dist-info}/METADATA +27 -17
- {res2df-1.2.3.dist-info → res2df-1.3.1.dist-info}/RECORD +17 -17
- {res2df-1.2.3.dist-info → res2df-1.3.1.dist-info}/WHEEL +1 -1
- {res2df-1.2.3.dist-info → res2df-1.3.1.dist-info}/LICENSE +0 -0
- {res2df-1.2.3.dist-info → res2df-1.3.1.dist-info}/entry_points.txt +0 -0
- {res2df-1.2.3.dist-info → res2df-1.3.1.dist-info}/top_level.txt +0 -0
res2df/common.py
CHANGED
|
@@ -10,6 +10,7 @@ import re
|
|
|
10
10
|
import shlex
|
|
11
11
|
import signal
|
|
12
12
|
import sys
|
|
13
|
+
from collections import defaultdict
|
|
13
14
|
from pathlib import Path
|
|
14
15
|
from typing import Any, Dict, List, Optional, Set, Union
|
|
15
16
|
|
|
@@ -397,7 +398,7 @@ def merge_zones(
|
|
|
397
398
|
zone_df.index.name = "K"
|
|
398
399
|
zone_df.reset_index(inplace=True)
|
|
399
400
|
|
|
400
|
-
df[zoneheader] = df[kname].map(zonedict)
|
|
401
|
+
df[zoneheader] = df[kname].map(defaultdict(lambda: None, zonedict))
|
|
401
402
|
return df
|
|
402
403
|
|
|
403
404
|
|
|
@@ -476,7 +477,7 @@ def fill_reverse_parser(
|
|
|
476
477
|
"""
|
|
477
478
|
parser.add_argument(
|
|
478
479
|
"csvfile",
|
|
479
|
-
help="Name of CSV file with " + modulename + " data with
|
|
480
|
+
help="Name of CSV file with " + modulename + " data with res2df format",
|
|
480
481
|
)
|
|
481
482
|
parser.add_argument(
|
|
482
483
|
"-o",
|
|
@@ -690,7 +691,7 @@ def generic_deck_table(
|
|
|
690
691
|
|
|
691
692
|
# NaN or Nones are assumed to be defaulted, which in Eclipse terminology is
|
|
692
693
|
# the string "1*":
|
|
693
|
-
dframe.fillna(value="1*"
|
|
694
|
+
dframe = dframe.fillna(value="1*")
|
|
694
695
|
|
|
695
696
|
if drop_trailing_columns:
|
|
696
697
|
for col_name in reversed(relevant_columns):
|
|
@@ -709,9 +710,9 @@ def generic_deck_table(
|
|
|
709
710
|
}
|
|
710
711
|
for int_col in integer_cols.intersection(dframe.columns):
|
|
711
712
|
defaulted_rows = dframe[int_col] == "1*"
|
|
712
|
-
dframe.loc[~defaulted_rows, int_col]
|
|
713
|
-
|
|
714
|
-
|
|
713
|
+
integer_values = dframe.loc[~defaulted_rows, int_col].astype(int)
|
|
714
|
+
dframe[int_col] = dframe[int_col].astype(str)
|
|
715
|
+
dframe.loc[~defaulted_rows, int_col] = integer_values
|
|
715
716
|
|
|
716
717
|
# Quote all string data. This is not always needed, but needed
|
|
717
718
|
# for some colums, for example well-names containing a slash.
|
|
@@ -826,9 +827,9 @@ def stack_on_colnames(
|
|
|
826
827
|
dframe.columns = pd.MultiIndex.from_tuples(
|
|
827
828
|
tuplecolumns, names=["dummy", stackcolname]
|
|
828
829
|
)
|
|
829
|
-
dframe = dframe.stack()
|
|
830
|
+
dframe = dframe.stack(future_stack=True)
|
|
830
831
|
staticcols = [col[0] for col in tuplecolumns if len(col) == 1]
|
|
831
|
-
dframe[staticcols] = dframe[staticcols].
|
|
832
|
+
dframe[staticcols] = dframe[staticcols].ffill()
|
|
832
833
|
dframe.reset_index(inplace=True)
|
|
833
834
|
# Drop rows stemming from the NaNs in the second tuple-element for
|
|
834
835
|
# static columns:
|
res2df/compdat.py
CHANGED
|
@@ -615,8 +615,7 @@ def expand_wlist(wlist_df: pd.DataFrame) -> pd.DataFrame:
|
|
|
615
615
|
and wlist_record["NAME"] not in currentstate
|
|
616
616
|
):
|
|
617
617
|
raise ValueError(
|
|
618
|
-
"WLIST ADD/DEL only works on existing well lists: "
|
|
619
|
-
f"{str(wlist_record)}"
|
|
618
|
+
f"WLIST ADD/DEL only works on existing well lists: {str(wlist_record)}"
|
|
620
619
|
)
|
|
621
620
|
if wlist_record["ACTION"] == "ADD":
|
|
622
621
|
currentstate[wlist_record["NAME"]] = " ".join(
|
|
@@ -888,14 +887,12 @@ def applywelopen(
|
|
|
888
887
|
].drop_duplicates(subset=["I", "J", "K1", "K2"], keep="last")
|
|
889
888
|
else:
|
|
890
889
|
raise ValueError(
|
|
891
|
-
"A WELOPEN keyword contains data that could not be parsed. "
|
|
892
|
-
f"\n {row} "
|
|
890
|
+
f"A WELOPEN keyword contains data that could not be parsed. \n {row} "
|
|
893
891
|
)
|
|
894
892
|
|
|
895
893
|
if previous_state.empty:
|
|
896
894
|
raise ValueError(
|
|
897
|
-
"A WELOPEN keyword is not acting on any existing connection. "
|
|
898
|
-
f"\n {row} "
|
|
895
|
+
f"A WELOPEN keyword is not acting on any existing connection. \n {row} "
|
|
899
896
|
)
|
|
900
897
|
|
|
901
898
|
new_state = previous_state
|
res2df/csv2res.py
CHANGED
|
@@ -90,8 +90,7 @@ def get_parser() -> argparse.ArgumentParser:
|
|
|
90
90
|
"satfunc",
|
|
91
91
|
help="Write saturation function include files",
|
|
92
92
|
description=(
|
|
93
|
-
"Write saturation function include files from CSV files with "
|
|
94
|
-
"res2df format."
|
|
93
|
+
"Write saturation function include files from CSV files with res2df format."
|
|
95
94
|
),
|
|
96
95
|
)
|
|
97
96
|
satfunc_fill_reverse_parser(satfunc_parser)
|
res2df/equil.py
CHANGED
|
@@ -298,7 +298,7 @@ def fill_parser(parser: argparse.ArgumentParser) -> argparse.ArgumentParser:
|
|
|
298
298
|
"-o",
|
|
299
299
|
"--output",
|
|
300
300
|
type=str,
|
|
301
|
-
help=("Name of output csv file.
|
|
301
|
+
help=("Name of output csv file. Use '-' for stdout."),
|
|
302
302
|
default="equil.csv",
|
|
303
303
|
)
|
|
304
304
|
parser.add_argument(
|
res2df/grid.py
CHANGED
|
@@ -686,10 +686,7 @@ def df2res(
|
|
|
686
686
|
|
|
687
687
|
if "GLOBAL_INDEX" not in grid_df:
|
|
688
688
|
logger.warning(
|
|
689
|
-
(
|
|
690
|
-
"Global index not found in grid dataframe. "
|
|
691
|
-
"Assumes all cells are active"
|
|
692
|
-
)
|
|
689
|
+
("Global index not found in grid dataframe. Assumes all cells are active")
|
|
693
690
|
)
|
|
694
691
|
# Drop NaN rows for columns to be used (triggered by stacked
|
|
695
692
|
# dates and no global index, unlikely)
|
res2df/gruptree.py
CHANGED
|
@@ -9,6 +9,7 @@ import sys
|
|
|
9
9
|
import warnings
|
|
10
10
|
from typing import Any, Dict, List, Optional, Tuple, Union
|
|
11
11
|
|
|
12
|
+
import numpy as np
|
|
12
13
|
import pandas as pd
|
|
13
14
|
import treelib
|
|
14
15
|
|
|
@@ -19,6 +20,7 @@ with contextlib.suppress(ImportError):
|
|
|
19
20
|
import opm.io
|
|
20
21
|
|
|
21
22
|
from .common import (
|
|
23
|
+
OPMKEYWORDS,
|
|
22
24
|
parse_opmio_date_rec,
|
|
23
25
|
parse_opmio_deckrecord,
|
|
24
26
|
parse_opmio_tstep_rec,
|
|
@@ -91,7 +93,7 @@ def df(
|
|
|
91
93
|
# Flags which will tell when a new network related keyword
|
|
92
94
|
# has been encountered
|
|
93
95
|
keywords = ["GRUPTREE", "BRANPROP", "WELSPECS", "GRUPNET", "NODEPROP"]
|
|
94
|
-
found_keywords =
|
|
96
|
+
found_keywords = dict.fromkeys(keywords, False)
|
|
95
97
|
for kword in deck:
|
|
96
98
|
if kword.name in ["DATES", "START", "TSTEP"]:
|
|
97
99
|
# Whenever we encounter a new DATES, it means that
|
|
@@ -107,7 +109,7 @@ def df(
|
|
|
107
109
|
edgerecords += _write_edgerecords(
|
|
108
110
|
currentedges, nodedata, wellspecsedges, found_keywords, date
|
|
109
111
|
)
|
|
110
|
-
found_keywords =
|
|
112
|
+
found_keywords = dict.fromkeys(keywords, False)
|
|
111
113
|
# Done dumping the data for the previous date, parse the fresh
|
|
112
114
|
# date:
|
|
113
115
|
if kword.name in ["DATES", "START"]:
|
|
@@ -164,6 +166,17 @@ def df(
|
|
|
164
166
|
currentedges, nodedata, wellspecsedges, found_keywords, date
|
|
165
167
|
)
|
|
166
168
|
dframe = pd.DataFrame(edgerecords)
|
|
169
|
+
|
|
170
|
+
string_cols = {"PARENT", "CHILD"}
|
|
171
|
+
for keyword in ["GRUPTREE", "BRANPROP", "NODEPROP", "GRUPNET", "WELSPECS"]:
|
|
172
|
+
string_cols |= {
|
|
173
|
+
item["name"]
|
|
174
|
+
for item in OPMKEYWORDS[keyword]["items"]
|
|
175
|
+
if item["value_type"] == "STRING"
|
|
176
|
+
}
|
|
177
|
+
for col in string_cols:
|
|
178
|
+
if col in dframe:
|
|
179
|
+
dframe[col] = dframe[col].replace(np.nan, None)
|
|
167
180
|
if "DATE" in dframe:
|
|
168
181
|
dframe["DATE"] = pd.to_datetime(dframe["DATE"])
|
|
169
182
|
|
res2df/pvt.py
CHANGED
|
@@ -375,7 +375,7 @@ def df2res_rock(dframe: pd.DataFrame, comment: Optional[str] = None) -> str:
|
|
|
375
375
|
return "-- No data!"
|
|
376
376
|
string = "ROCK\n"
|
|
377
377
|
string += comment_formatter(comment)
|
|
378
|
-
string += "-- {'PRESSURE':^21} {'COMPRESSIBILITY':^21}\n"
|
|
378
|
+
string += f"-- {'PRESSURE':^21} {'COMPRESSIBILITY':^21}\n"
|
|
379
379
|
# Use everything if KEYWORD not in dframe..
|
|
380
380
|
subset = dframe if "KEYWORD" not in dframe else dframe[dframe["KEYWORD"] == "ROCK"]
|
|
381
381
|
if "PVTNUM" not in subset:
|
res2df/rft.py
CHANGED
|
@@ -90,8 +90,8 @@ def _rftrecords2df(rftfile: ResdataFile) -> pd.DataFrame:
|
|
|
90
90
|
nav_df.loc[nav_df["recordname"] == "TIME", "timeindex"] = nav_df[
|
|
91
91
|
nav_df["recordname"] == "TIME"
|
|
92
92
|
].index
|
|
93
|
-
nav_df.
|
|
94
|
-
|
|
93
|
+
nav_df.ffill(
|
|
94
|
+
inplace=True
|
|
95
95
|
) # forward fill (because any record is associated to the previous TIME record)
|
|
96
96
|
nav_df["timeindex"] = nav_df["timeindex"].astype(int)
|
|
97
97
|
logger.info(
|
|
@@ -242,7 +242,7 @@ def process_seg_topology(seg_data: pd.DataFrame) -> pd.DataFrame:
|
|
|
242
242
|
seg_data = seg_data.sort_values("SEGIDX")
|
|
243
243
|
# For the first segment, None is allowed as SEGNXT, which excludes
|
|
244
244
|
# int as a Pandas type. Convert to 0 for the moment
|
|
245
|
-
seg_data["SEGNXT"] = seg_data["SEGNXT"].fillna(value=0).astype(int)
|
|
245
|
+
seg_data["SEGNXT"] = seg_data["SEGNXT"].fillna(value="0").astype(int)
|
|
246
246
|
|
|
247
247
|
# Outer merge first to add the upstream segment information to every row.
|
|
248
248
|
merged = pd.merge(
|
|
@@ -481,14 +481,14 @@ def add_extras(dframe: pd.DataFrame, inplace: bool = True) -> pd.DataFrame:
|
|
|
481
481
|
dframe = dframe.copy()
|
|
482
482
|
|
|
483
483
|
if "CONPRES" in dframe and "SEGPRES" in dframe:
|
|
484
|
-
dframe["COMPLETION_DP"] = 0
|
|
484
|
+
dframe["COMPLETION_DP"] = 0.0
|
|
485
485
|
nonzero_pres = (dframe["CONPRES"] > 0) & (dframe["SEGPRES"] > 0)
|
|
486
486
|
dframe.loc[nonzero_pres, "COMPLETION_DP"] = (
|
|
487
487
|
dframe.loc[nonzero_pres, "CONPRES"] - dframe.loc[nonzero_pres, "SEGPRES"]
|
|
488
488
|
)
|
|
489
489
|
|
|
490
490
|
if not dframe.empty:
|
|
491
|
-
dframe["DRAWDOWN"] = 0 # Set a default so that the column always exists
|
|
491
|
+
dframe["DRAWDOWN"] = 0.0 # Set a default so that the column always exists
|
|
492
492
|
|
|
493
493
|
if "CONPRES" in dframe and "PRESSURE" in dframe:
|
|
494
494
|
nonzero_conpres = dframe["CONPRES"] > 0
|
res2df/satfunc.py
CHANGED
|
@@ -144,9 +144,9 @@ def interpolate_defaults(dframe: pd.DataFrame) -> pd.DataFrame:
|
|
|
144
144
|
can consist of multiple SATNUMs.
|
|
145
145
|
"""
|
|
146
146
|
sat_cols: set = {"SW", "SO", "SG", "SL"}.intersection(dframe.columns)
|
|
147
|
-
assert (
|
|
148
|
-
|
|
149
|
-
)
|
|
147
|
+
assert len(sat_cols) == 1, (
|
|
148
|
+
f"Could not determine a single saturation column in {dframe.columns}"
|
|
149
|
+
)
|
|
150
150
|
sat_col = list(sat_cols)[0]
|
|
151
151
|
|
|
152
152
|
if dframe[sat_col].isna().any():
|
|
@@ -154,11 +154,12 @@ def interpolate_defaults(dframe: pd.DataFrame) -> pd.DataFrame:
|
|
|
154
154
|
|
|
155
155
|
filled_frames = []
|
|
156
156
|
for _, subframe in dframe.groupby("SATNUM"):
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
157
|
+
subframe.set_index(sat_col, inplace=True)
|
|
158
|
+
numeric_columns = subframe.select_dtypes(include=["float", "int"]).columns
|
|
159
|
+
subframe[numeric_columns] = subframe[numeric_columns].interpolate(
|
|
160
|
+
method="index", limit_area="inside"
|
|
161
161
|
)
|
|
162
|
+
filled_frames.append(subframe.reset_index())
|
|
162
163
|
return pd.concat(filled_frames)
|
|
163
164
|
|
|
164
165
|
|
res2df/summary.py
CHANGED
|
@@ -461,7 +461,9 @@ def _ensure_unique_datetime_index(dframe: pd.DataFrame) -> pd.DataFrame:
|
|
|
461
461
|
|
|
462
462
|
if dframe.attrs["meta"]["TIMESTEP"]["unit"] == "DAYS":
|
|
463
463
|
for idx in np.where(index_duplicates)[0]:
|
|
464
|
-
index_as_list[idx] += dt.timedelta(
|
|
464
|
+
index_as_list[idx] += dt.timedelta(
|
|
465
|
+
days=dframe["TIMESTEP"].iloc[idx]
|
|
466
|
+
)
|
|
465
467
|
elif dframe.attrs["meta"]["TIMESTEP"]["unit"] == "HOURS":
|
|
466
468
|
for idx in np.where(index_duplicates)[0]:
|
|
467
469
|
index_as_list[idx] += dt.timedelta(hours=dframe["TIMESTEP"][idx])
|
|
@@ -761,9 +763,7 @@ def fill_parser(parser: argparse.ArgumentParser) -> argparse.ArgumentParser:
|
|
|
761
763
|
"-o",
|
|
762
764
|
"--output",
|
|
763
765
|
type=str,
|
|
764
|
-
help=(
|
|
765
|
-
"Name of output file. Use '-' to write to stdout. " "Default 'summary.csv'"
|
|
766
|
-
),
|
|
766
|
+
help=("Name of output file. Use '-' to write to stdout. Default 'summary.csv'"),
|
|
767
767
|
default="summary.csv",
|
|
768
768
|
)
|
|
769
769
|
parser.add_argument("--arrow", action="store_true", help="Write to pyarrow format")
|
res2df/version.py
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: res2df
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.3.1
|
|
4
4
|
Summary: Convert reservoir simulator input and output to DataFrames
|
|
5
5
|
Home-page: http://github.com/equinor/res2df
|
|
6
6
|
Author: Håvard Berland
|
|
7
7
|
Author-email: havb@equinor.com
|
|
8
8
|
License: GPLv3
|
|
9
|
-
Requires-Python: >=3.
|
|
9
|
+
Requires-Python: >=3.11
|
|
10
10
|
Description-Content-Type: text/markdown
|
|
11
11
|
License-File: LICENSE
|
|
12
12
|
Requires-Dist: resdata>=5.0.0-b0
|
|
@@ -17,34 +17,44 @@ Requires-Dist: pandas
|
|
|
17
17
|
Requires-Dist: pyarrow
|
|
18
18
|
Requires-Dist: pyyaml>=5.1
|
|
19
19
|
Requires-Dist: treelib
|
|
20
|
-
Provides-Extra: docs
|
|
21
|
-
Requires-Dist: autoapi; extra == "docs"
|
|
22
|
-
Requires-Dist: ipython; extra == "docs"
|
|
23
|
-
Requires-Dist: rstcheck; extra == "docs"
|
|
24
|
-
Requires-Dist: setuptools; extra == "docs"
|
|
25
|
-
Requires-Dist: sphinx<7; extra == "docs"
|
|
26
|
-
Requires-Dist: sphinx-argparse; extra == "docs"
|
|
27
|
-
Requires-Dist: sphinx-autodoc-typehints; extra == "docs"
|
|
28
|
-
Requires-Dist: sphinx-rtd-theme; extra == "docs"
|
|
29
|
-
Provides-Extra: ert
|
|
30
|
-
Requires-Dist: ert>=10.2.0b13; extra == "ert"
|
|
31
|
-
Provides-Extra: style
|
|
32
|
-
Requires-Dist: pre-commit; extra == "style"
|
|
33
20
|
Provides-Extra: tests
|
|
34
21
|
Requires-Dist: networkx; extra == "tests"
|
|
35
22
|
Requires-Dist: pytest; extra == "tests"
|
|
36
23
|
Requires-Dist: pytest-cov; extra == "tests"
|
|
37
24
|
Requires-Dist: pytest-mock; extra == "tests"
|
|
38
25
|
Requires-Dist: pytest-timeout; extra == "tests"
|
|
26
|
+
Provides-Extra: style
|
|
27
|
+
Requires-Dist: pre-commit; extra == "style"
|
|
39
28
|
Provides-Extra: types
|
|
40
29
|
Requires-Dist: mypy; extra == "types"
|
|
41
30
|
Requires-Dist: types-PyYAML; extra == "types"
|
|
42
31
|
Requires-Dist: types-python-dateutil; extra == "types"
|
|
43
32
|
Requires-Dist: types-setuptools; extra == "types"
|
|
33
|
+
Provides-Extra: docs
|
|
34
|
+
Requires-Dist: autoapi; extra == "docs"
|
|
35
|
+
Requires-Dist: ipython; extra == "docs"
|
|
36
|
+
Requires-Dist: rstcheck; extra == "docs"
|
|
37
|
+
Requires-Dist: setuptools; extra == "docs"
|
|
38
|
+
Requires-Dist: sphinx<7; extra == "docs"
|
|
39
|
+
Requires-Dist: sphinx-argparse; extra == "docs"
|
|
40
|
+
Requires-Dist: sphinx-autodoc-typehints; extra == "docs"
|
|
41
|
+
Requires-Dist: sphinx_rtd_theme; extra == "docs"
|
|
42
|
+
Provides-Extra: ert
|
|
43
|
+
Requires-Dist: ert>=10.2.0b13; extra == "ert"
|
|
44
|
+
Dynamic: author
|
|
45
|
+
Dynamic: author-email
|
|
46
|
+
Dynamic: description
|
|
47
|
+
Dynamic: description-content-type
|
|
48
|
+
Dynamic: home-page
|
|
49
|
+
Dynamic: license
|
|
50
|
+
Dynamic: provides-extra
|
|
51
|
+
Dynamic: requires-dist
|
|
52
|
+
Dynamic: requires-python
|
|
53
|
+
Dynamic: summary
|
|
44
54
|
|
|
45
55
|
[](https://github.com/equinor/res2df/actions?query=workflow%3Ares2df)
|
|
46
56
|
[](https://codecov.io/gh/equinor/res2df)
|
|
47
|
-
[](https://www.python.org)
|
|
48
58
|
[](https://github.com/astral-sh/ruff)
|
|
49
59
|
[](https://www.gnu.org/licenses/gpl-3.0)
|
|
50
60
|
|
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
res2df/__init__.py,sha256=M4U5Q5zJ-W0ni3YcDBs_ZobKVW6ZLAmQXspbZEOqkwo,601
|
|
2
2
|
res2df/__version__.py,sha256=UtExCuqQ29NY2we1bzLXvNkP21JU7hx1wXM4G1uPvts,128
|
|
3
|
-
res2df/common.py,sha256=
|
|
4
|
-
res2df/compdat.py,sha256=
|
|
3
|
+
res2df/common.py,sha256=9hK4g-0PDVb9HUv96DJ0Spx-yYCGT8ceL_huDjP-UDE,34887
|
|
4
|
+
res2df/compdat.py,sha256=TVIXdK8HKYfbOQX2TnI63Xt0UNPjI3E9mFC1_Vb0AAc,36796
|
|
5
5
|
res2df/constants.py,sha256=0W-ZYlm3Bbe9MONrRhA0c4yLXfJlqGX5apFN64i8RU0,258
|
|
6
|
-
res2df/csv2res.py,sha256=
|
|
7
|
-
res2df/equil.py,sha256=
|
|
6
|
+
res2df/csv2res.py,sha256=f_27wjKXMUWnsYVBF1cFxSe4ePOGntZmUP7VDoZ9N7w,4018
|
|
7
|
+
res2df/equil.py,sha256=NIJwAgbpjJg0pxsqfxPB86d2rdAVMNJBKsJsoG6ExxU,17175
|
|
8
8
|
res2df/faults.py,sha256=5v4cWcEmIQwG8TXBBsiteT_3kCNO0noNiAiOZ6JC-80,3163
|
|
9
9
|
res2df/fipreports.py,sha256=msZgrUfpQaZppboQgAwVOtReQHKepdsgwJ9lNAcrt0Y,7631
|
|
10
|
-
res2df/grid.py,sha256=
|
|
11
|
-
res2df/gruptree.py,sha256=
|
|
10
|
+
res2df/grid.py,sha256=wlwwsRSfxFAI8YV8x6_VyKXKwnmC1376RtCTNb51wvs,27680
|
|
11
|
+
res2df/gruptree.py,sha256=JXLacbT2CNADOIVuh1NkeOmmXYLY_09TzDsoGUGr8To,16923
|
|
12
12
|
res2df/inferdims.py,sha256=ur0GE1ASzfzoXPgUjaow46NWBlBCgiX6qfAmn8HJatg,7329
|
|
13
13
|
res2df/nnc.py,sha256=qEPuAhTFwmZuClxaKsrBh28HlLquE0-XH7ams4ylt50,9346
|
|
14
14
|
res2df/parameters.py,sha256=pkgmW5tVtyMav1T43RxdYHnoejvnZarFhKfhhgp028U,6277
|
|
15
15
|
res2df/pillars.py,sha256=NXFZhcd4L0pRFLH3B3ip_3ClVuy8Dgz13m4QW4mZDfA,16174
|
|
16
|
-
res2df/pvt.py,sha256=
|
|
16
|
+
res2df/pvt.py,sha256=JNmCUvaNBnq-SUdmnxkt9n3rkR-HUneiHJBfINACVfU,22646
|
|
17
17
|
res2df/res2csv.py,sha256=aKqSHNTNXxMb3Ahwh1Cx2BSx7bXV3dSGxhjuPznDABA,12080
|
|
18
18
|
res2df/res2csvlogger.py,sha256=rsg1IweNsOiP2zHoYqpipQxW2FbvSIN5XNOlQHXfUqo,2328
|
|
19
19
|
res2df/resdatafiles.py,sha256=xBW3GewottrdFqpj4LxGKjCbfLEPC0H7Odw1Mn1ls_U,10093
|
|
20
|
-
res2df/rft.py,sha256=
|
|
21
|
-
res2df/satfunc.py,sha256=
|
|
22
|
-
res2df/summary.py,sha256=
|
|
20
|
+
res2df/rft.py,sha256=ptf-tqc10tpYN2B7W-onC-s20Ct2GRK65oD9ojG0O4w,28082
|
|
21
|
+
res2df/satfunc.py,sha256=sxoqXsORI5xijD0RSybr6unm-sQNpUckXFNwHEtVdv8,13808
|
|
22
|
+
res2df/summary.py,sha256=sa0OH9Nle1uaTRMN33XL69Lyl66876OX01ZJ_kISxSI,31711
|
|
23
23
|
res2df/svg_color_keyword_names.txt,sha256=yiI2Ohv3NxxEAJC5OjVERZi7MLi2-bk7okyI5-xFDr8,1456
|
|
24
24
|
res2df/trans.py,sha256=fWlelN74QPnxm5krWYXIGxhRZKVJA2r1lHXE-Ac1DuI,10880
|
|
25
|
-
res2df/version.py,sha256=
|
|
25
|
+
res2df/version.py,sha256=cOVPCvD2h2G_2KB6G3ddreYkIQfAnS6WqgAkF_qgGOQ,411
|
|
26
26
|
res2df/wcon.py,sha256=67A2qtqokaefLyI5mdTaGkTlkSkDIRhVNVYA-8TE9oE,3376
|
|
27
27
|
res2df/wellcompletiondata.py,sha256=s4PvMNYBcgSJzPE6_so6suxgeI_fzHbDzA8kHxen-AA,10990
|
|
28
28
|
res2df/wellconnstatus.py,sha256=KPteMgwomDpp11rAkmN5GTLMEdS79Ah0QEFdG0VSu-E,4055
|
|
@@ -81,9 +81,9 @@ res2df/vfp/_vfpcommon.py,sha256=0no9r1jwGaABXexZ6WoKrOl2fFq87RMmcRZLE640cnk,7053
|
|
|
81
81
|
res2df/vfp/_vfpdefs.py,sha256=yvi5nCkJ2UZxVx0LuVbBHLNjn0e0UCSZudmzvTk689A,7028
|
|
82
82
|
res2df/vfp/_vfpinj.py,sha256=-QgT0hKBd7mW9VcEaROtwOdxJlZlutRHCNp9wiED6jM,23594
|
|
83
83
|
res2df/vfp/_vfpprod.py,sha256=0ar8v1JUFy3f4ezofdwCsq5Xricg6tQArre9rjI5Ol0,36743
|
|
84
|
-
res2df-1.
|
|
85
|
-
res2df-1.
|
|
86
|
-
res2df-1.
|
|
87
|
-
res2df-1.
|
|
88
|
-
res2df-1.
|
|
89
|
-
res2df-1.
|
|
84
|
+
res2df-1.3.1.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
85
|
+
res2df-1.3.1.dist-info/METADATA,sha256=6jgXWz_jzV8ApovvFVMzJm75RLfcuCmAy3gJ_Df9R8c,3339
|
|
86
|
+
res2df-1.3.1.dist-info/WHEEL,sha256=9Hm2OB-j1QcCUq9Jguht7ayGIIZBRTdOXD1qg9cCgPM,109
|
|
87
|
+
res2df-1.3.1.dist-info/entry_points.txt,sha256=MEFyOYIu-X3ZCgqZIE6t8EnmZ3xGvMAj8VMkJdi_lZY,164
|
|
88
|
+
res2df-1.3.1.dist-info/top_level.txt,sha256=U8AZBqrFHm9PMXg0toCfHJ817VfFtdKQpc8JuS5qToM,7
|
|
89
|
+
res2df-1.3.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|