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/vfp/__init__.py CHANGED
@@ -2,7 +2,7 @@
2
2
  keywords in Eclipse.
3
3
  """
4
4
 
5
- from ._vfp import ( # noqa: F401
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
- try:
17
- # Needed for mypy
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
- with open(filename, "w", encoding="utf-8") as fout:
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
- import opm.io
13
+ # Needed for mypy
14
+ import opm.io
15
+ import pandas as pd
20
16
 
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
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
- list.append(int(item))
42
+ int_list.append(int(item))
50
43
 
51
- return list
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
- ) -> Any | list[float]:
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
- record = parse_opmio_deckrecord(record, keyword, "records", recordindex)
64
+ rec_dict = parse_opmio_deckrecord(record, keyword, "records", recordindex)
72
65
 
73
- values: Any | list[float]
66
+ values: list[float]
74
67
  # Extract interpolation ranges into lists
75
- if isinstance(record.get(recordname), list):
76
- values = record.get(recordname)
77
- elif isinstance(record.get(recordname), numbers.Number):
78
- values = [record.get(recordname)]
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 index_name in index_names_list:
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
- for i in range(0, pa_table.num_columns):
400
- thp_indices.append(int(pa_table.schema.field(i).metadata[b"thp_idx"]))
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)
@@ -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
- + " There must exist a UNSMRY file with the same path and basename",
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
- + " There must exist a UNSMRY file with the same path and basename.",
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
+ [![Publish to PyPI](https://github.com/equinor/res2df/actions/workflows/publish.yml/badge.svg)](https://github.com/equinor/res2df/actions/workflows/publish.yml)
61
+ [![PyPI version](https://img.shields.io/pypi/v/res2df.svg)](https://pypi.org/project/res2df/)
62
+ [![codecov](https://codecov.io/gh/equinor/res2df/graph/badge.svg?token=3sZBGGu5VG)](https://codecov.io/gh/equinor/res2df)
63
+ [![Python 3.11-3.14](https://img.shields.io/badge/python-3.11%20|%203.12%20|%203.13%20|%203.14-blue.svg)](https://www.python.org)
64
+ [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
65
+ [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](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=op6PPtJBOLn7JRGZW09BIjJbHCFva4VY2iXmbKaGhnE,577
2
- res2df/__version__.py,sha256=UtExCuqQ29NY2we1bzLXvNkP21JU7hx1wXM4G1uPvts,128
3
- res2df/common.py,sha256=wpmxgl-QMEdSLmh71J6mfWCjO5sjoejPPPnwKaqqsYA,35004
4
- res2df/compdat.py,sha256=4-T3bUWZLqUQw99YJUQblFXa2kwmpMWSeZi-RWuBL1w,36630
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=i1SqzDYoKDmwik0ZHRb-F775Lhmt2GQPoFrquE_viOI,3093
7
- res2df/equil.py,sha256=Fk5aGYhje4pgrHLHEn2MdQwhl59pel4cOg5dLdWMWaU,16911
8
- res2df/faults.py,sha256=JMOib30354Me9qLonqRlo9hhhhfB4oUg5vit1-GGb-U,3038
9
- res2df/fipreports.py,sha256=1d7rp1me51dN2Rr6wYMq_wVWbh1bbSM-srnNlehtYFY,7549
10
- res2df/grid.py,sha256=-KTjhINfZoxbsvdYMY_MeAj5Wdr6wTn6LR79XGwT2Jw,27314
11
- res2df/gruptree.py,sha256=ET7IuqHkamxDpZN2mK6FDwZwC1lqgg4aNodexghW-0A,16926
12
- res2df/inferdims.py,sha256=xRNkHJ9EQMx2ai9hDBntlXYqDIuB-0tO3EXsHcIZI_Q,7241
13
- res2df/nnc.py,sha256=UvgBVqs8b3hXfumiAZT6xv4yF3Rjaxwc71iLNcJ-UfI,9193
14
- res2df/parameters.py,sha256=zdGvmFg3qyzopXRTgb9CvyI1izCBYS9aZYPNBRzeDOg,6215
15
- res2df/pillars.py,sha256=4zB_SCrE8sU444y0DpWO00a2SQa67JZLv3gGk4RwsjY,15957
16
- res2df/pvt.py,sha256=WnVVh8wGz2DVQwmuwllz_TnJdl1AdpI-8LWztRGCOgw,22385
17
- res2df/res2csv.py,sha256=Xu0qHubHlmxzxblwdhRY6H6CLTMTGQvsLQq8HpMBF40,10851
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=v68iKobzSNC_5_1uDBTdK5t2TcYQcPn0buURtxZ9QLk,10029
20
- res2df/rft.py,sha256=2wxqfY7_ItuhaqA3hXeyXCRzVWjxq7apteG88_sjGFs,27954
21
- res2df/satfunc.py,sha256=V_8e_x5OByKyfmke8uZUPRJ_kUnGkp4uwdArpZV1ZaM,13570
22
- res2df/summary.py,sha256=42zn8Lj7QmywYbmf3YQjUyAYK9jerZEt-r38-3TTtzI,31483
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=AHBJ-UUqU-BToLzygezMzM8YVGPBixGNRzxemOHOy84,10455
25
- res2df/version.py,sha256=a7l_eTulmw3DuiEVvjDmjg5F3kTt-dSmgMwVTZEYCc4,704
26
- res2df/wcon.py,sha256=4Fq8JG2GeLJs7GKCC3F3RkkyJMmwn3iESJeXQuY01iA,3198
27
- res2df/wellcompletiondata.py,sha256=u_qD1XiCxAJM_corqHWZH9t2mvO1TIGVyc0l6MUd1II,10918
28
- res2df/wellconnstatus.py,sha256=5MWqtyagl_t9FbbEosTG50FsFdLOatqGR1yRxzl6TDM,4035
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=I8T9HGmTW95mHHjBuZkhTxaYwIPg7CJwbusfJotXfSA,4800
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=cbUr7EjH9WUJvuVeleDQyxp0g_TbXMCCYEpQ_NiYD4w,362
78
- res2df/vfp/_vfp.py,sha256=hezXkWz58RDy9EHC8mcOE3-VmpLy6BGmxOn_f-SBzcc,19392
79
- res2df/vfp/_vfpcommon.py,sha256=iq3kim4Zrs-y47NtEpoSTEyeS2hPXTaKBsfcxdzj2gw,6964
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=xojHI2hcdUFBUslMKu5K2p2etN-8sinlx-HlkINZOs4,22523
82
+ res2df/vfp/_vfpinj.py,sha256=WYaJRSF2LBnW6dqm4mdhZWGizlKBiUe-xcNBGjgqZ2s,22511
82
83
  res2df/vfp/_vfpprod.py,sha256=vohQOu63pQsinGT8wgreeUwxzfwH6S1Om90XB8gfUzs,35669
83
- res2df-1.3.9.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
84
- res2df-1.3.9.dist-info/METADATA,sha256=ayDgYjqnRQyXndwF8sqzAtBxT-I3GDF6sIazkobiDZo,44560
85
- res2df-1.3.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
86
- res2df-1.3.9.dist-info/entry_points.txt,sha256=ctl-_CwayyUVqFMUrwTT3Z3gZdnW6WCaiaLUJ4f_HnY,180
87
- res2df-1.3.9.dist-info/top_level.txt,sha256=U8AZBqrFHm9PMXg0toCfHJ817VfFtdKQpc8JuS5qToM,7
88
- res2df-1.3.9.dist-info/RECORD,,
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,,