res2df 1.3.9__py3-none-any.whl → 1.3.11__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/__init__.py +43 -4
- res2df/__version__.py +1 -1
- res2df/common.py +23 -26
- res2df/compdat.py +7 -8
- res2df/csv2res.py +1 -1
- res2df/equil.py +60 -60
- res2df/faults.py +12 -12
- res2df/fipreports.py +3 -2
- res2df/grid.py +11 -14
- res2df/gruptree.py +10 -12
- res2df/hook_implementations/forward_model_steps.py +11 -8
- res2df/inferdims.py +3 -6
- res2df/nnc.py +3 -7
- res2df/parameters.py +2 -2
- res2df/pillars.py +3 -3
- res2df/pvt.py +9 -12
- res2df/py.typed +0 -0
- res2df/res2csv.py +3 -5
- res2df/resdatafiles.py +20 -27
- res2df/rft.py +1 -1
- res2df/satfunc.py +12 -16
- res2df/summary.py +11 -16
- res2df/trans.py +5 -5
- res2df/version.py +2 -2
- res2df/vfp/__init__.py +18 -1
- res2df/vfp/_vfp.py +10 -14
- res2df/vfp/_vfpcommon.py +27 -29
- res2df/vfp/_vfpinj.py +4 -3
- res2df/wcon.py +3 -6
- res2df/wellcompletiondata.py +8 -3
- res2df/wellconnstatus.py +2 -2
- res2df-1.3.11.dist-info/METADATA +95 -0
- {res2df-1.3.9.dist-info → res2df-1.3.11.dist-info}/RECORD +37 -36
- res2df-1.3.9.dist-info/METADATA +0 -769
- {res2df-1.3.9.dist-info → res2df-1.3.11.dist-info}/WHEEL +0 -0
- {res2df-1.3.9.dist-info → res2df-1.3.11.dist-info}/entry_points.txt +0 -0
- {res2df-1.3.9.dist-info → res2df-1.3.11.dist-info}/licenses/LICENSE +0 -0
- {res2df-1.3.9.dist-info → res2df-1.3.11.dist-info}/top_level.txt +0 -0
res2df/vfp/__init__.py
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
keywords in Eclipse.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
from ._vfp import (
|
|
5
|
+
from ._vfp import (
|
|
6
6
|
basic_data,
|
|
7
7
|
basic_data2df,
|
|
8
8
|
basic_data2pyarrow,
|
|
@@ -18,3 +18,20 @@ from ._vfp import ( # noqa: F401
|
|
|
18
18
|
vfp_main,
|
|
19
19
|
vfp_reverse_main,
|
|
20
20
|
)
|
|
21
|
+
|
|
22
|
+
__all__ = [
|
|
23
|
+
"basic_data",
|
|
24
|
+
"basic_data2df",
|
|
25
|
+
"basic_data2pyarrow",
|
|
26
|
+
"df",
|
|
27
|
+
"df2basic_data",
|
|
28
|
+
"df2res",
|
|
29
|
+
"df2ress",
|
|
30
|
+
"dfs",
|
|
31
|
+
"fill_parser",
|
|
32
|
+
"fill_reverse_parser",
|
|
33
|
+
"pyarrow2basic_data",
|
|
34
|
+
"pyarrow_tables",
|
|
35
|
+
"vfp_main",
|
|
36
|
+
"vfp_reverse_main",
|
|
37
|
+
]
|
res2df/vfp/_vfp.py
CHANGED
|
@@ -7,22 +7,19 @@ output both in csv format as a pandas DataFrame or in pyarrow and pyarrow.table
|
|
|
7
7
|
import argparse
|
|
8
8
|
import logging
|
|
9
9
|
import sys
|
|
10
|
+
from pathlib import Path
|
|
10
11
|
from typing import Any
|
|
11
12
|
|
|
12
13
|
import numpy as np
|
|
14
|
+
|
|
15
|
+
# Needed for mypy
|
|
16
|
+
import opm.io
|
|
13
17
|
import pandas as pd
|
|
14
18
|
import pyarrow as pa
|
|
15
19
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
import opm.io
|
|
20
|
-
|
|
21
|
-
# This import is seemingly not used, but necessary for some attributes
|
|
22
|
-
# to be included in DeckItem objects.
|
|
23
|
-
from opm.io.deck import DeckKeyword # noqa: F401
|
|
24
|
-
except ImportError:
|
|
25
|
-
pass
|
|
20
|
+
# This import is seemingly not used, but necessary for some attributes
|
|
21
|
+
# to be included in DeckItem objects.
|
|
22
|
+
from opm.io.deck import DeckKeyword # noqa: F401
|
|
26
23
|
|
|
27
24
|
from ..common import comment_formatter, write_dframe_stdout_file, write_inc_stdout_file
|
|
28
25
|
from ..common import fill_reverse_parser as common_fill_reverse_parser
|
|
@@ -404,8 +401,7 @@ def df2res(
|
|
|
404
401
|
str_vfps += "\n"
|
|
405
402
|
|
|
406
403
|
if filename:
|
|
407
|
-
|
|
408
|
-
fout.write(str_vfps)
|
|
404
|
+
Path(filename).write_text(str_vfps, encoding="utf-8")
|
|
409
405
|
|
|
410
406
|
return str_vfps
|
|
411
407
|
|
|
@@ -484,7 +480,7 @@ def fill_reverse_parser(parser: argparse.ArgumentParser) -> argparse.ArgumentPar
|
|
|
484
480
|
return common_fill_reverse_parser(parser, "VFPPROD, VFPINJ", "vfp.inc")
|
|
485
481
|
|
|
486
482
|
|
|
487
|
-
def vfp_main(args) -> None:
|
|
483
|
+
def vfp_main(args: argparse.Namespace) -> None:
|
|
488
484
|
"""Entry-point for module, for command line utility."""
|
|
489
485
|
logger = getLogger_res2csv(__name__, vars(args))
|
|
490
486
|
if args.keyword and args.keyword not in SUPPORTED_KEYWORDS:
|
|
@@ -523,7 +519,7 @@ def vfp_main(args) -> None:
|
|
|
523
519
|
logger.info("Parsed file %s for vfp.df", args.DATAFILE)
|
|
524
520
|
|
|
525
521
|
|
|
526
|
-
def vfp_reverse_main(args) -> None:
|
|
522
|
+
def vfp_reverse_main(args: argparse.Namespace) -> None:
|
|
527
523
|
"""Entry-point for module, for command line utility for CSV to Eclipse"""
|
|
528
524
|
logger = getLogger_res2csv(__name__, vars(args))
|
|
529
525
|
vfp_df = pd.read_csv(args.csvfile)
|
res2df/vfp/_vfpcommon.py
CHANGED
|
@@ -7,22 +7,16 @@ output both in csv format as a pandas DataFrame or in pyarrow and pyarrow.table
|
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
9
|
import logging
|
|
10
|
-
import numbers
|
|
11
|
-
from typing import Any
|
|
12
10
|
|
|
13
11
|
import numpy as np
|
|
14
|
-
import pandas as pd
|
|
15
|
-
|
|
16
|
-
try:
|
|
17
|
-
# Needed for mypy
|
|
18
12
|
|
|
19
|
-
|
|
13
|
+
# Needed for mypy
|
|
14
|
+
import opm.io
|
|
15
|
+
import pandas as pd
|
|
20
16
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
except ImportError:
|
|
25
|
-
pass
|
|
17
|
+
# This import is seemingly not used, but necessary for some attributes
|
|
18
|
+
# to be included in DeckItem objects.
|
|
19
|
+
from opm.io.deck import DeckKeyword # noqa: F401
|
|
26
20
|
|
|
27
21
|
from ..common import parse_opmio_deckrecord
|
|
28
22
|
|
|
@@ -36,19 +30,18 @@ def _string2intlist(list_def_str: str) -> list[int]:
|
|
|
36
30
|
list_def_str: String defining list of int
|
|
37
31
|
Format "[1,2,6:9]" to define list [1,2,6,7,8,9]
|
|
38
32
|
"""
|
|
39
|
-
list = []
|
|
33
|
+
int_list: list[int] = []
|
|
40
34
|
list_def = list_def_str.strip().strip("[").strip("]")
|
|
41
35
|
if list_def.strip():
|
|
42
36
|
list_items = list_def.split(",") if "," in list_def else [list_def]
|
|
43
37
|
for item in list_items:
|
|
44
38
|
if ":" in item:
|
|
45
39
|
item_split = item.split(":")
|
|
46
|
-
for value in item_split
|
|
47
|
-
list.append(int(value))
|
|
40
|
+
int_list.extend(int(value) for value in item_split)
|
|
48
41
|
else:
|
|
49
|
-
|
|
42
|
+
int_list.append(int(item))
|
|
50
43
|
|
|
51
|
-
return
|
|
44
|
+
return int_list
|
|
52
45
|
|
|
53
46
|
|
|
54
47
|
def _deckrecord2list(
|
|
@@ -56,7 +49,7 @@ def _deckrecord2list(
|
|
|
56
49
|
keyword: str,
|
|
57
50
|
recordindex: int,
|
|
58
51
|
recordname: str,
|
|
59
|
-
) ->
|
|
52
|
+
) -> list[float]:
|
|
60
53
|
"""
|
|
61
54
|
Parse an opm.opmcommon_python.DeckRecord belonging to a certain keyword
|
|
62
55
|
and return as list of numbers
|
|
@@ -68,14 +61,22 @@ def _deckrecord2list(
|
|
|
68
61
|
list index to the "record".
|
|
69
62
|
recordname: Name of the record
|
|
70
63
|
"""
|
|
71
|
-
|
|
64
|
+
rec_dict = parse_opmio_deckrecord(record, keyword, "records", recordindex)
|
|
72
65
|
|
|
73
|
-
values:
|
|
66
|
+
values: list[float]
|
|
74
67
|
# Extract interpolation ranges into lists
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
68
|
+
tmp_val = rec_dict.get(recordname)
|
|
69
|
+
if tmp_val is None:
|
|
70
|
+
raise KeyError(f"Missing record '{recordname}' in keyword '{keyword}'")
|
|
71
|
+
if isinstance(tmp_val, (list, tuple)):
|
|
72
|
+
try:
|
|
73
|
+
values = [float(val) for val in tmp_val]
|
|
74
|
+
except (TypeError, ValueError) as e:
|
|
75
|
+
raise ValueError(
|
|
76
|
+
f"Non-numeric value in record '{recordname}' for keyword '{keyword}'"
|
|
77
|
+
) from e
|
|
78
|
+
elif isinstance(tmp_val, (int, float)):
|
|
79
|
+
values = [float(tmp_val)]
|
|
79
80
|
else:
|
|
80
81
|
raise ValueError(
|
|
81
82
|
f"Keyword {keyword} and recordname {recordname} "
|
|
@@ -126,11 +127,8 @@ def _stack_vfptable2df(
|
|
|
126
127
|
df_vfptable.insert(i, index_names_list[i], index_values_list[i])
|
|
127
128
|
|
|
128
129
|
# create multi-index for columns
|
|
129
|
-
indextuples = []
|
|
130
|
-
for
|
|
131
|
-
indextuples.append((index_name, "DELETE"))
|
|
132
|
-
for flowvalue in flow_values_list:
|
|
133
|
-
indextuples.append(("TAB", str(flowvalue)))
|
|
130
|
+
indextuples = [(index_name, "DELETE") for index_name in index_names_list]
|
|
131
|
+
indextuples.extend(("TAB", str(flowvalue)) for flowvalue in flow_values_list)
|
|
134
132
|
|
|
135
133
|
# Set the columns to a MultiIndex, to facilitate stacking
|
|
136
134
|
df_vfptable.columns = pd.MultiIndex.from_tuples(indextuples)
|
res2df/vfp/_vfpinj.py
CHANGED
|
@@ -395,9 +395,10 @@ def pyarrow2basic_data(pa_table: pa.Table) -> dict[str, Any]:
|
|
|
395
395
|
"""
|
|
396
396
|
|
|
397
397
|
# Extract index data from colum metadata
|
|
398
|
-
thp_indices = [
|
|
399
|
-
|
|
400
|
-
|
|
398
|
+
thp_indices = [
|
|
399
|
+
int(pa_table.schema.field(i).metadata[b"thp_idx"])
|
|
400
|
+
for i in range(0, pa_table.num_columns)
|
|
401
|
+
]
|
|
401
402
|
|
|
402
403
|
# Extract table data as numpy.array
|
|
403
404
|
bhp_data = np.array(pa_table.columns)
|
res2df/wcon.py
CHANGED
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
"""Extract WCON* from a .DATA file"""
|
|
2
2
|
|
|
3
3
|
import argparse
|
|
4
|
-
import contextlib
|
|
5
4
|
import datetime
|
|
6
5
|
import logging
|
|
7
6
|
|
|
7
|
+
# Needed for mypy
|
|
8
|
+
import opm.io
|
|
8
9
|
import pandas as pd
|
|
9
10
|
|
|
10
|
-
with contextlib.suppress(ImportError):
|
|
11
|
-
# Needed for mypy
|
|
12
|
-
import opm.io
|
|
13
|
-
|
|
14
11
|
from .common import (
|
|
15
12
|
parse_opmio_date_rec,
|
|
16
13
|
parse_opmio_deckrecord,
|
|
@@ -85,7 +82,7 @@ def fill_parser(parser: argparse.ArgumentParser) -> argparse.ArgumentParser:
|
|
|
85
82
|
return parser
|
|
86
83
|
|
|
87
84
|
|
|
88
|
-
def wcon_main(args) -> None:
|
|
85
|
+
def wcon_main(args: argparse.Namespace) -> None:
|
|
89
86
|
"""Read from disk and write CSV back to disk"""
|
|
90
87
|
logger = getLogger_res2csv(__name__, vars(args))
|
|
91
88
|
resdatafiles = ResdataFiles(args.DATAFILE)
|
res2df/wellcompletiondata.py
CHANGED
|
@@ -34,7 +34,7 @@ class KHUnit(StrEnum):
|
|
|
34
34
|
|
|
35
35
|
def df(
|
|
36
36
|
resdatafiles: ResdataFiles,
|
|
37
|
-
zonemap: dict[int, str],
|
|
37
|
+
zonemap: dict[int, str] | None = None,
|
|
38
38
|
use_wellconnstatus: bool = False,
|
|
39
39
|
excl_well_startswith: str | None = None,
|
|
40
40
|
) -> pd.DataFrame:
|
|
@@ -48,6 +48,9 @@ def df(
|
|
|
48
48
|
if other connections are closed. And the KH is summed over open connections
|
|
49
49
|
only.
|
|
50
50
|
|
|
51
|
+
If no zonemap is provided, it will be looked for in the default location
|
|
52
|
+
(the same directory as the DATA file loaded in resdatafiles).
|
|
53
|
+
|
|
51
54
|
Args:
|
|
52
55
|
resdatafiles; ResdataFiles object
|
|
53
56
|
zonemap: dictionary with layer->zone mapping
|
|
@@ -56,7 +59,9 @@ def df(
|
|
|
56
59
|
Returns:
|
|
57
60
|
pd.DataFrame with one row per unique combination of well, zone and date.
|
|
58
61
|
"""
|
|
62
|
+
|
|
59
63
|
compdat_df = create_compdat_df(resdatafiles, zonemap=zonemap)
|
|
64
|
+
|
|
60
65
|
if "ZONE" not in compdat_df.columns:
|
|
61
66
|
logger.warning(
|
|
62
67
|
"ZONE column not generated in compdat table. "
|
|
@@ -252,7 +257,7 @@ def fill_parser(parser: argparse.ArgumentParser) -> argparse.ArgumentParser:
|
|
|
252
257
|
"DATAFILE",
|
|
253
258
|
type=str,
|
|
254
259
|
help="Name of the .DATA input file for the reservoir simulator."
|
|
255
|
-
|
|
260
|
+
" There must exist a UNSMRY file with the same path and basename",
|
|
256
261
|
)
|
|
257
262
|
parser.add_argument(
|
|
258
263
|
"--zonemap",
|
|
@@ -286,7 +291,7 @@ def fill_parser(parser: argparse.ArgumentParser) -> argparse.ArgumentParser:
|
|
|
286
291
|
return parser
|
|
287
292
|
|
|
288
293
|
|
|
289
|
-
def wellcompletiondata_main(args):
|
|
294
|
+
def wellcompletiondata_main(args: argparse.Namespace) -> None:
|
|
290
295
|
"""Entry-point for module, for command line utility"""
|
|
291
296
|
logger = getLogger_res2csv(__name__, vars(args))
|
|
292
297
|
|
res2df/wellconnstatus.py
CHANGED
|
@@ -96,7 +96,7 @@ def fill_parser(parser: argparse.ArgumentParser) -> argparse.ArgumentParser:
|
|
|
96
96
|
"DATAFILE",
|
|
97
97
|
type=str,
|
|
98
98
|
help="Name of the .DATA input file for the reservoir simulator."
|
|
99
|
-
|
|
99
|
+
" There must exist a UNSMRY file with the same path and basename.",
|
|
100
100
|
)
|
|
101
101
|
parser.add_argument(
|
|
102
102
|
"-o",
|
|
@@ -112,7 +112,7 @@ def fill_parser(parser: argparse.ArgumentParser) -> argparse.ArgumentParser:
|
|
|
112
112
|
return parser
|
|
113
113
|
|
|
114
114
|
|
|
115
|
-
def wellconnstatus_main(args):
|
|
115
|
+
def wellconnstatus_main(args: argparse.Namespace) -> None:
|
|
116
116
|
"""Entry-point for module, for command line utility"""
|
|
117
117
|
logger = getLogger_res2csv(__name__, vars(args))
|
|
118
118
|
resdatafiles = ResdataFiles(args.DATAFILE)
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: res2df
|
|
3
|
+
Version: 1.3.11
|
|
4
|
+
Summary: Convert reservoir simulator input and output to DataFrames
|
|
5
|
+
Author-email: Håvard Berland <havb@equinor.com>
|
|
6
|
+
License-Expression: GPL-3.0-only
|
|
7
|
+
Project-URL: Homepage, https://github.com/equinor/res2df
|
|
8
|
+
Project-URL: Repository, https://github.com/equinor/res2df
|
|
9
|
+
Project-URL: Documentation, https://equinor.github.io/res2df/
|
|
10
|
+
Keywords: energy,subsurface,reservoir,scientific,engineering
|
|
11
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
12
|
+
Classifier: Intended Audience :: Science/Research
|
|
13
|
+
Classifier: Topic :: Scientific/Engineering
|
|
14
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
15
|
+
Classifier: Topic :: Utilities
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
20
|
+
Classifier: Natural Language :: English
|
|
21
|
+
Requires-Python: >=3.11
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
Requires-Dist: resdata>=5.0.0-b0
|
|
25
|
+
Requires-Dist: resfo
|
|
26
|
+
Requires-Dist: networkx
|
|
27
|
+
Requires-Dist: numpy
|
|
28
|
+
Requires-Dist: opm>=2020.10.2
|
|
29
|
+
Requires-Dist: pandas
|
|
30
|
+
Requires-Dist: pyarrow
|
|
31
|
+
Requires-Dist: pyyaml>=5.1
|
|
32
|
+
Requires-Dist: treelib
|
|
33
|
+
Provides-Extra: tests
|
|
34
|
+
Requires-Dist: pytest; extra == "tests"
|
|
35
|
+
Requires-Dist: pytest-cov; extra == "tests"
|
|
36
|
+
Requires-Dist: pytest-mock; extra == "tests"
|
|
37
|
+
Requires-Dist: pytest-timeout; extra == "tests"
|
|
38
|
+
Provides-Extra: style
|
|
39
|
+
Requires-Dist: pre-commit; extra == "style"
|
|
40
|
+
Provides-Extra: types
|
|
41
|
+
Requires-Dist: mypy; extra == "types"
|
|
42
|
+
Requires-Dist: types-PyYAML; extra == "types"
|
|
43
|
+
Requires-Dist: types-python-dateutil; extra == "types"
|
|
44
|
+
Requires-Dist: types-setuptools; extra == "types"
|
|
45
|
+
Requires-Dist: types-networkx; extra == "types"
|
|
46
|
+
Requires-Dist: pandas-stubs; extra == "types"
|
|
47
|
+
Provides-Extra: docs
|
|
48
|
+
Requires-Dist: sphinx-autoapi; extra == "docs"
|
|
49
|
+
Requires-Dist: ipython; extra == "docs"
|
|
50
|
+
Requires-Dist: rstcheck; extra == "docs"
|
|
51
|
+
Requires-Dist: setuptools; extra == "docs"
|
|
52
|
+
Requires-Dist: sphinx<9; extra == "docs"
|
|
53
|
+
Requires-Dist: sphinx-argparse; extra == "docs"
|
|
54
|
+
Requires-Dist: sphinx-autodoc-typehints; extra == "docs"
|
|
55
|
+
Requires-Dist: sphinx_rtd_theme>=3.1.0.rc1; extra == "docs"
|
|
56
|
+
Provides-Extra: ert
|
|
57
|
+
Requires-Dist: ert>=10.2.0b13; extra == "ert"
|
|
58
|
+
Dynamic: license-file
|
|
59
|
+
|
|
60
|
+
[](https://github.com/equinor/res2df/actions/workflows/publish.yml)
|
|
61
|
+
[](https://pypi.org/project/res2df/)
|
|
62
|
+
[](https://codecov.io/gh/equinor/res2df)
|
|
63
|
+
[](https://www.python.org)
|
|
64
|
+
[](https://github.com/astral-sh/ruff)
|
|
65
|
+
[](https://www.gnu.org/licenses/gpl-3.0)
|
|
66
|
+
|
|
67
|
+
# res2df
|
|
68
|
+
|
|
69
|
+
res2df is a Pandas DataFrame wrapper around resdata and opm.io, which
|
|
70
|
+
are used to access binary files outputted by reservoir simulators,
|
|
71
|
+
or its input files --- or any other tool outputting to the same data format.
|
|
72
|
+
|
|
73
|
+
The reverse operation, from a Pandas DataFrame to reservoir simulator include files
|
|
74
|
+
(commonly given the extension ".inc", ".grdecl" etc.) is provided for some of the
|
|
75
|
+
modules.
|
|
76
|
+
|
|
77
|
+
The package consists of a module pr. datatype, e.g. one module for summary
|
|
78
|
+
files (.UNSMRY), one for completion data etc.
|
|
79
|
+
|
|
80
|
+
There is a command line frontend for almost all functionality, called
|
|
81
|
+
`res2csv`, which converts the reservoir data to DataFrames, and then dumps
|
|
82
|
+
the dataframes to files in CSV format, and a similar `csv2res` for the
|
|
83
|
+
reverse operation.
|
|
84
|
+
|
|
85
|
+
For documentation, see <https://equinor.github.io/res2df/>
|
|
86
|
+
|
|
87
|
+
## License
|
|
88
|
+
|
|
89
|
+
This library is released under GPLv3.
|
|
90
|
+
|
|
91
|
+
## Copyright
|
|
92
|
+
|
|
93
|
+
The code is Copyright Equinor ASA 2019-2021.
|
|
94
|
+
|
|
95
|
+
Contributions without copyright transfer are welcome.
|
|
@@ -1,33 +1,34 @@
|
|
|
1
|
-
res2df/__init__.py,sha256=
|
|
2
|
-
res2df/__version__.py,sha256=
|
|
3
|
-
res2df/common.py,sha256=
|
|
4
|
-
res2df/compdat.py,sha256=
|
|
1
|
+
res2df/__init__.py,sha256=IXPD2hI8TlGP7oZcCtXBBQlcnx3QrvYkglI94G731d4,1429
|
|
2
|
+
res2df/__version__.py,sha256=3bzEDF3c5flgPrfdaj_gccAfCp9firn58xrcjSwgh7E,112
|
|
3
|
+
res2df/common.py,sha256=K6sTXPusioWKb50etYLw_PiCANPMmwedeq4r2l_5RLQ,34910
|
|
4
|
+
res2df/compdat.py,sha256=TlG7jwh7ZnqPcAjoYfaUX7fEUYfJHjRPuCcrKy9jBxw,36741
|
|
5
5
|
res2df/constants.py,sha256=0W-ZYlm3Bbe9MONrRhA0c4yLXfJlqGX5apFN64i8RU0,258
|
|
6
|
-
res2df/csv2res.py,sha256=
|
|
7
|
-
res2df/equil.py,sha256=
|
|
8
|
-
res2df/faults.py,sha256=
|
|
9
|
-
res2df/fipreports.py,sha256=
|
|
10
|
-
res2df/grid.py,sha256
|
|
11
|
-
res2df/gruptree.py,sha256=
|
|
12
|
-
res2df/inferdims.py,sha256=
|
|
13
|
-
res2df/nnc.py,sha256=
|
|
14
|
-
res2df/parameters.py,sha256=
|
|
15
|
-
res2df/pillars.py,sha256=
|
|
16
|
-
res2df/pvt.py,sha256=
|
|
17
|
-
res2df/
|
|
6
|
+
res2df/csv2res.py,sha256=EN3FsBXONmKWVuYk3cTmW25bsmvhp9Yg1VvJ_DSoAA8,3077
|
|
7
|
+
res2df/equil.py,sha256=6DrStpmeZDnkSUyZMd2Hxdlun95P2xi6nXUd6QPbSHw,17102
|
|
8
|
+
res2df/faults.py,sha256=wd--_6ilhOozsi0HID4YUTFuZi-8BcGhJP1f3MT17pY,3058
|
|
9
|
+
res2df/fipreports.py,sha256=XvkjFyPuJnroRKHDNRkrSfU4rcfkKhYJFRi8FWahgLA,7599
|
|
10
|
+
res2df/grid.py,sha256=dW1fcrur4wz6ZO8VtP6GvKHmz3qdeKXh8n8kKocJPUQ,27291
|
|
11
|
+
res2df/gruptree.py,sha256=ffWLzN4V67qcgjV0DUsQgVGWINoM8yPBlUSI1sK15Ys,16898
|
|
12
|
+
res2df/inferdims.py,sha256=NtjCaR0l54LiFRAg4Zq9xMJmYKyBSc3aLWa9RASgRNs,7124
|
|
13
|
+
res2df/nnc.py,sha256=_O2Uxc0wkUeXzGosLPRAqFcSXrQ9qKm8qduOJt9k8m8,9177
|
|
14
|
+
res2df/parameters.py,sha256=X2dtb_RPpC3lR3RV1sjCqQjvn13eSWQtZJOT-KvLJQA,6217
|
|
15
|
+
res2df/pillars.py,sha256=PkPNVp_ukLr1HAudjlQwgrsnlb8yAVY0YuyJZdEad60,15983
|
|
16
|
+
res2df/pvt.py,sha256=OAHYUpBoeFQlrNkYqsDK4oYqRMkxZpP6oyKXQ1pd0dw,22458
|
|
17
|
+
res2df/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
|
+
res2df/res2csv.py,sha256=RBDz3vt15CnK0WCeGPIpOf7TzzXnl5Svi9GX7dqb7ys,10817
|
|
18
19
|
res2df/res2csvlogger.py,sha256=n9gMmlgzPNbtZAN9dhrBDpahEK1bG2jPWQZ7CHjSN6c,2243
|
|
19
|
-
res2df/resdatafiles.py,sha256=
|
|
20
|
-
res2df/rft.py,sha256=
|
|
21
|
-
res2df/satfunc.py,sha256=
|
|
22
|
-
res2df/summary.py,sha256=
|
|
20
|
+
res2df/resdatafiles.py,sha256=tMyqYYcXUua6fHQspQgt7nGWfW34wQvSjWAWD6LIGxI,9946
|
|
21
|
+
res2df/rft.py,sha256=_Y6mEbhMgaV2W_l7po2prMsXbQeITMQv84ao0IR9ufI,27974
|
|
22
|
+
res2df/satfunc.py,sha256=md_pb_T_XgAhL40VGWO_wH2JFOcljUvqpRSXvJc7dvg,13527
|
|
23
|
+
res2df/summary.py,sha256=Q3natArNIvMoWFhYRvsV4t8Rhj4af-cOmh-oWQXfuK4,31352
|
|
23
24
|
res2df/svg_color_keyword_names.txt,sha256=yiI2Ohv3NxxEAJC5OjVERZi7MLi2-bk7okyI5-xFDr8,1456
|
|
24
|
-
res2df/trans.py,sha256=
|
|
25
|
-
res2df/version.py,sha256=
|
|
26
|
-
res2df/wcon.py,sha256=
|
|
27
|
-
res2df/wellcompletiondata.py,sha256=
|
|
28
|
-
res2df/wellconnstatus.py,sha256=
|
|
25
|
+
res2df/trans.py,sha256=aTZ3tLQJjRGUUdw4gmGCXcAoSs33AJWHa7AYlCmoOak,10469
|
|
26
|
+
res2df/version.py,sha256=RIYRhQ2JFIUmHdqcIYBvks_0HOhsZi2Vy6dWdcTCKVw,706
|
|
27
|
+
res2df/wcon.py,sha256=l5yvjQGleLyQY_ySjw2hq0C8gC-U3EMQRDGtjo4iroA,3152
|
|
28
|
+
res2df/wellcompletiondata.py,sha256=5wdipNlu0B9BDZaAfJcPT-WwskP_PtsTIZv-q3frKtM,11104
|
|
29
|
+
res2df/wellconnstatus.py,sha256=fMar2MkCXh2_-XWLbOmdUUDftQM9LnxDkqFdrfSAgUw,4061
|
|
29
30
|
res2df/hook_implementations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
30
|
-
res2df/hook_implementations/forward_model_steps.py,sha256=
|
|
31
|
+
res2df/hook_implementations/forward_model_steps.py,sha256=GLpmlv9exEKkCLsHv2AUKWnK4oIxJ4jhHuI0p41_m6U,4986
|
|
31
32
|
res2df/opmkeywords/BRANPROP,sha256=MZA6L6J9olaprrUhRah_wgJoOiYXP-DknVAYOdsIC14,475
|
|
32
33
|
res2df/opmkeywords/COMPDAT,sha256=K19zEK1p9XNoKhD0ylLEJ-oNTi88QQNeUXt7qckO4lg,1345
|
|
33
34
|
res2df/opmkeywords/COMPLUMP,sha256=AC1vBiHmQIjf9IxeVTGp38Ld8Xjz_xHQOUIg-VmGhFk,514
|
|
@@ -74,15 +75,15 @@ res2df/opmkeywords/WSEGVALV,sha256=iCknAC9AEhGx_28iv1FSYhukQFT8_ekDdqxfhVrHFJo,9
|
|
|
74
75
|
res2df/opmkeywords/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
75
76
|
res2df/opmkeywords/readme,sha256=xJM2Or6oiSP02xTe-aY4efPeh5UQiTieScoPHGV4rH0,285
|
|
76
77
|
res2df/opmkeywords/runmetoupdate.sh,sha256=GKvjvd3H3Sf0bmeIduQ43pYcDmcBlOL_Epfm_xjDFUA,996
|
|
77
|
-
res2df/vfp/__init__.py,sha256=
|
|
78
|
-
res2df/vfp/_vfp.py,sha256=
|
|
79
|
-
res2df/vfp/_vfpcommon.py,sha256=
|
|
78
|
+
res2df/vfp/__init__.py,sha256=6ksjEvMSkHK_3C_x5Fz0_eR4dq-DtTqm_YMv4WI13Fc,633
|
|
79
|
+
res2df/vfp/_vfp.py,sha256=sHN_08HJEtVzirltNnJ_wfm9JVm_iGrRdVF-BhSzkLQ,19371
|
|
80
|
+
res2df/vfp/_vfpcommon.py,sha256=Np49jE5SIecw-4Gb5ZsGOc45Ln66gseZEDkX8EL2axk,7144
|
|
80
81
|
res2df/vfp/_vfpdefs.py,sha256=TT0bHHbbdGMS3Xm7dzpZPR7zBLPvlCuQIKvH7sr5TBA,6985
|
|
81
|
-
res2df/vfp/_vfpinj.py,sha256=
|
|
82
|
+
res2df/vfp/_vfpinj.py,sha256=WYaJRSF2LBnW6dqm4mdhZWGizlKBiUe-xcNBGjgqZ2s,22511
|
|
82
83
|
res2df/vfp/_vfpprod.py,sha256=vohQOu63pQsinGT8wgreeUwxzfwH6S1Om90XB8gfUzs,35669
|
|
83
|
-
res2df-1.3.
|
|
84
|
-
res2df-1.3.
|
|
85
|
-
res2df-1.3.
|
|
86
|
-
res2df-1.3.
|
|
87
|
-
res2df-1.3.
|
|
88
|
-
res2df-1.3.
|
|
84
|
+
res2df-1.3.11.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
85
|
+
res2df-1.3.11.dist-info/METADATA,sha256=k0mpu_hkpNscaCYFH1s5EvG-z0kkohSvpnwsgZjEqWs,4048
|
|
86
|
+
res2df-1.3.11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
87
|
+
res2df-1.3.11.dist-info/entry_points.txt,sha256=ctl-_CwayyUVqFMUrwTT3Z3gZdnW6WCaiaLUJ4f_HnY,180
|
|
88
|
+
res2df-1.3.11.dist-info/top_level.txt,sha256=U8AZBqrFHm9PMXg0toCfHJ817VfFtdKQpc8JuS5qToM,7
|
|
89
|
+
res2df-1.3.11.dist-info/RECORD,,
|