res2df 1.3.8__tar.gz → 1.3.10__tar.gz
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-1.3.10/.github/dependabot.yml +7 -0
- {res2df-1.3.8 → res2df-1.3.10}/.github/workflows/codecov.yml +3 -3
- {res2df-1.3.8 → res2df-1.3.10}/.github/workflows/publish.yml +1 -1
- {res2df-1.3.8 → res2df-1.3.10}/.github/workflows/res2df.yml +3 -2
- {res2df-1.3.8 → res2df-1.3.10}/.github/workflows/style.yml +7 -7
- {res2df-1.3.8 → res2df-1.3.10}/.github/workflows/typing.yml +11 -7
- {res2df-1.3.8 → res2df-1.3.10}/.pre-commit-config.yaml +1 -1
- res2df-1.3.10/PKG-INFO +94 -0
- {res2df-1.3.8 → res2df-1.3.10}/README.md +1 -1
- {res2df-1.3.8 → res2df-1.3.10}/docs/conf.py +46 -3
- {res2df-1.3.8 → res2df-1.3.10}/docs/index.rst +1 -1
- {res2df-1.3.8 → res2df-1.3.10}/pyproject.toml +9 -6
- res2df-1.3.10/src/res2df/__init__.py +68 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/__version__.py +1 -1
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/common.py +22 -22
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/compdat.py +7 -8
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/csv2res.py +1 -1
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/equil.py +60 -60
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/faults.py +3 -7
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/fipreports.py +1 -1
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/grid.py +5 -5
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/gruptree.py +4 -6
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/hook_implementations/forward_model_steps.py +11 -8
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/inferdims.py +1 -4
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/nnc.py +1 -1
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/pillars.py +2 -2
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/pvt.py +8 -11
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/res2csv.py +3 -5
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/resdatafiles.py +20 -27
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/rft.py +2 -3
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/satfunc.py +4 -7
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/summary.py +9 -14
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/trans.py +1 -1
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/version.py +3 -3
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/vfp/__init__.py +18 -1
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/vfp/_vfp.py +8 -12
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/vfp/_vfpcommon.py +21 -19
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/wcon.py +3 -6
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/wellcompletiondata.py +7 -2
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/wellconnstatus.py +1 -1
- res2df-1.3.10/src/res2df.egg-info/PKG-INFO +94 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df.egg-info/SOURCES.txt +2 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df.egg-info/requires.txt +1 -1
- res2df-1.3.10/tests/__init__.py +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_common.py +0 -8
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_compdat.py +0 -9
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_eclfiles.py +0 -10
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_equil.py +1 -11
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_faults.py +1 -11
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_fipreports.py +1 -2
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_gruptree.py +0 -8
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_inferdims.py +0 -8
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_init.py +1 -1
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_integration.py +0 -8
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_logging.py +10 -6
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_nnc.py +1 -13
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_pillars.py +1 -2
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_pvt.py +1 -10
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_rft.py +1 -2
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_satfunc.py +1 -11
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_summary.py +1 -10
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_trans.py +1 -2
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_userapi.py +0 -10
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_vfp.py +63 -80
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_wcon.py +1 -10
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_wellcompletiondata.py +10 -10
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_wellconnstatus.py +1 -9
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_welopen.py +0 -8
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_wlist.py +0 -8
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_zonemap.py +4 -4
- res2df-1.3.8/PKG-INFO +0 -768
- res2df-1.3.8/src/res2df/__init__.py +0 -29
- res2df-1.3.8/src/res2df.egg-info/PKG-INFO +0 -768
- {res2df-1.3.8 → res2df-1.3.10}/.gitignore +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/CONTRIBUTING.md +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/LICENSE +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/SECURITY.md +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/ci/testkomodo.sh +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/_static/equinor-logo.png +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/_static/equinor-logo2.jpg +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/_static/equinor_logo.jpg +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/_static/equinor_logo_only.jpg +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/_templates/layout.html +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/contribution.rst +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/csv2res.rst +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/glossary.rst +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/history.rst +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/installation.rst +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/introduction.rst +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/res2csv.rst +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/compdat.csv +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/compdat.rst +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/equil-example.csv +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/equil.rst +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/fipnum.inc +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/fipreports-example.csv +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/fipreports-example.txt +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/fipreports.rst +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/grid.csv +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/grid.rst +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/gruptree.csv +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/gruptree.rst +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/gruptreenet.csv +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/images/injectoranalysis.png +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/images/multibranch-rftanalysis.png +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/nnc.csv +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/nnc.rst +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/outflow.csv +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/pillars-dyn1-stacked.csv +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/pillars-dyn1-unstacked.csv +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/pillars-example1.csv +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/pillars.rst +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/pvt.csv +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/pvt.rst +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/rft.rst +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/rft_columns.csv +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/satfunc.csv +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/satfunc.rst +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/summary.csv +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/summary.rst +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/trans-boundaries.csv +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/trans-group.csv +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/trans.rst +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/trans1.csv +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/wcon.csv +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/wcon.rst +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/well_connection_status.csv +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage/wellconnstatus.rst +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/docs/usage.rst +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/setup.cfg +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/constants.py +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/hook_implementations/__init__.py +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/BRANPROP +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/COMPDAT +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/COMPLUMP +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/COMPSEGS +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/DENSITY +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/EQLDIMS +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/EQUIL +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/FAULTS +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/GRUPNET +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/GRUPTREE +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/NODEPROP +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/PBVD +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/PDVD +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/PVDG +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/PVDO +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/PVTG +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/PVTO +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/PVTW +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/ROCK +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/RSVD +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/RVVD +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/SGFN +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/SGOF +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/SGWFN +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/SLGOF +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/SOF2 +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/SOF3 +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/SWFN +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/SWOF +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/TABDIMS +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/VFPINJ +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/VFPPROD +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/WCONHIST +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/WCONINJE +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/WCONINJH +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/WCONPROD +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/WELOPEN +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/WELSEGS +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/WELSPECS +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/WLIST +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/WSEGAICD +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/WSEGSICD +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/WSEGVALV +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/__init__.py +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/readme +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/runmetoupdate.sh +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/parameters.py +0 -0
- /res2df-1.3.8/tests/__init__.py → /res2df-1.3.10/src/res2df/py.typed +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/res2csvlogger.py +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/svg_color_keyword_names.txt +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/vfp/_vfpdefs.py +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/vfp/_vfpinj.py +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df/vfp/_vfpprod.py +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df.egg-info/dependency_links.txt +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df.egg-info/entry_points.txt +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df.egg-info/not-zip-safe +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/src/res2df.egg-info/top_level.txt +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/conftest.py +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/EIGHTCELLS.DATA +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/EIGHTCELLS.EGRID +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/EIGHTCELLS.INIT +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/EIGHTCELLS.INSPEC +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/EIGHTCELLS.PRT +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/EIGHTCELLS.RFT +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/EIGHTCELLS.RSSPEC +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/EIGHTCELLS.SMSPEC +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/EIGHTCELLS.UNRST +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/EIGHTCELLS.UNSMRY +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/eightcells_duplicated_summary_vector/EIGHTCELLS_DUPES.DATA +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/eightcells_duplicated_summary_vector/EIGHTCELLS_DUPES.SMSPEC +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/eightcells_duplicated_summary_vector/EIGHTCELLS_DUPES.UNSMRY +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/zones.lyr +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/fipreports/TEST1.PRT +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/grid/reek.faults +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/grid/reek.grid +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/grid/reek.multflt +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/grid/reek.multz +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/grid/reek.perm +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/grid/reek.poro +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/props/let-sgof.txt +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/props/let-swof.txt +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/props/reek.endpoints +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/props/reek.pvt +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/props/reek.swatinit +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/props/sgof.txt +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/props/swof.inc +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/props/swof.txt +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/regions/reek.eqlnum +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/regions/reek.fipnum +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/schedule/op6_aicd1_gp.sch +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/schedule/op6_icd1_gp.sch +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/schedule/op6_valve1_gp.sch +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/schedule/reek_history.sch +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/solution/reek.equil +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/summary/reek.smry +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/model/2_R001_REEK-0-OPMFLOW.PRT +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/model/2_R001_REEK-0.DATA +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/model/2_R001_REEK-0.ECLEND +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/model/2_R001_REEK-0.EGRID +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/model/2_R001_REEK-0.INIT +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/model/2_R001_REEK-0.LOG +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/model/2_R001_REEK-0.PRT +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/model/2_R001_REEK-0.RFT +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/model/2_R001_REEK-0.SMSPEC +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/model/2_R001_REEK-0.UNRST +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/model/2_R001_REEK-0.UNSMRY +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/model/zones.lyr +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/timesteps/SHORT_STEP.DATA +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/timesteps/SHORT_STEP.SMSPEC +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/timesteps/SHORT_STEP.UNSMRY +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/timesteps/SHORT_STEP_LONG.DATA +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/timesteps/SHORT_STEP_LONG.SMSPEC +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/timesteps/SHORT_STEP_LONG.UNSMRY +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/timesteps/SHORT_STEP_WITH_TIMESTEP.DATA +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/timesteps/SHORT_STEP_WITH_TIMESTEP.SMSPEC +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/timesteps/SHORT_STEP_WITH_TIMESTEP.UNSMRY +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/timesteps/SHORT_STEP_WITH_TIMESTEP_LONG.DATA +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/timesteps/SHORT_STEP_WITH_TIMESTEP_LONG.SMSPEC +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/data/timesteps/SHORT_STEP_WITH_TIMESTEP_LONG.UNSMRY +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_ert_hooks.py +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_grid.py +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_hook_implementations.py +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_parameters.py +0 -0
- {res2df-1.3.8 → res2df-1.3.10}/tests/test_summary_restarts.py +0 -0
|
@@ -23,7 +23,7 @@ jobs:
|
|
|
23
23
|
sudo apt-get update
|
|
24
24
|
sudo apt-get install libegl1
|
|
25
25
|
|
|
26
|
-
- uses: actions/checkout@
|
|
26
|
+
- uses: actions/checkout@v6
|
|
27
27
|
|
|
28
28
|
- name: Setup Python
|
|
29
29
|
uses: actions/setup-python@v6
|
|
@@ -43,8 +43,8 @@ jobs:
|
|
|
43
43
|
- name: Generate coverage report and upload
|
|
44
44
|
run: |
|
|
45
45
|
pytest tests --disable-warnings --cov=res2df --cov-report=xml
|
|
46
|
-
# Uninstall
|
|
47
|
-
uv pip uninstall ert
|
|
46
|
+
# Uninstall package that res2df supports not being installed:
|
|
47
|
+
uv pip uninstall ert
|
|
48
48
|
# Run tests again in cov-append-mode:
|
|
49
49
|
pytest tests --disable-warnings --cov=res2df --cov-report=xml --cov-append
|
|
50
50
|
bash <(curl -s https://codecov.io/bash)
|
|
@@ -21,7 +21,7 @@ jobs:
|
|
|
21
21
|
runs-on: ubuntu-latest
|
|
22
22
|
strategy:
|
|
23
23
|
matrix:
|
|
24
|
-
python-version: ['3.11', '3.12']
|
|
24
|
+
python-version: ['3.11', '3.12', '3.13']
|
|
25
25
|
include:
|
|
26
26
|
# For one of the Python versions we
|
|
27
27
|
# install the extra dependency ert
|
|
@@ -37,7 +37,7 @@ jobs:
|
|
|
37
37
|
sudo apt-get install libegl1
|
|
38
38
|
|
|
39
39
|
- name: Checkout commit locally
|
|
40
|
-
uses: actions/checkout@
|
|
40
|
+
uses: actions/checkout@v6
|
|
41
41
|
|
|
42
42
|
- name: Checkout tags
|
|
43
43
|
# This seems necessary for setuptools_scm to be able to infer
|
|
@@ -78,6 +78,7 @@ jobs:
|
|
|
78
78
|
|
|
79
79
|
- name: Build documentation
|
|
80
80
|
run: |
|
|
81
|
+
sudo apt-get install graphviz
|
|
81
82
|
sphinx-build -W -b html docs build/sphinx/html
|
|
82
83
|
|
|
83
84
|
- name: Update GitHub pages
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
name: Style
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- master
|
|
7
|
+
- 'version-**'
|
|
8
|
+
pull_request:
|
|
9
9
|
|
|
10
10
|
concurrency:
|
|
11
11
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
@@ -20,10 +20,10 @@ jobs:
|
|
|
20
20
|
runs-on: ubuntu-latest
|
|
21
21
|
strategy:
|
|
22
22
|
matrix:
|
|
23
|
-
python-version: ['3.
|
|
23
|
+
python-version: ['3.13']
|
|
24
24
|
|
|
25
25
|
steps:
|
|
26
|
-
- uses: actions/checkout@
|
|
26
|
+
- uses: actions/checkout@v6
|
|
27
27
|
with:
|
|
28
28
|
fetch-depth: 0
|
|
29
29
|
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
name: Typing
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- master
|
|
7
|
+
- 'version-**'
|
|
8
|
+
pull_request:
|
|
9
|
+
|
|
10
|
+
schedule:
|
|
11
|
+
# Run CI every night and check that tests are working with latest dependencies
|
|
12
|
+
- cron: '0 0 * * *'
|
|
9
13
|
|
|
10
14
|
concurrency:
|
|
11
15
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
@@ -20,10 +24,10 @@ jobs:
|
|
|
20
24
|
runs-on: ubuntu-latest
|
|
21
25
|
strategy:
|
|
22
26
|
matrix:
|
|
23
|
-
python-version: ['3.
|
|
27
|
+
python-version: ['3.13']
|
|
24
28
|
|
|
25
29
|
steps:
|
|
26
|
-
- uses: actions/checkout@
|
|
30
|
+
- uses: actions/checkout@v6
|
|
27
31
|
with:
|
|
28
32
|
fetch-depth: 0
|
|
29
33
|
|
res2df-1.3.10/PKG-INFO
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: res2df
|
|
3
|
+
Version: 1.3.10
|
|
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: Natural Language :: English
|
|
20
|
+
Requires-Python: >=3.11
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: LICENSE
|
|
23
|
+
Requires-Dist: resdata>=5.0.0-b0
|
|
24
|
+
Requires-Dist: resfo
|
|
25
|
+
Requires-Dist: networkx
|
|
26
|
+
Requires-Dist: numpy
|
|
27
|
+
Requires-Dist: opm>=2020.10.2
|
|
28
|
+
Requires-Dist: pandas
|
|
29
|
+
Requires-Dist: pyarrow
|
|
30
|
+
Requires-Dist: pyyaml>=5.1
|
|
31
|
+
Requires-Dist: treelib
|
|
32
|
+
Provides-Extra: tests
|
|
33
|
+
Requires-Dist: pytest; extra == "tests"
|
|
34
|
+
Requires-Dist: pytest-cov; extra == "tests"
|
|
35
|
+
Requires-Dist: pytest-mock; extra == "tests"
|
|
36
|
+
Requires-Dist: pytest-timeout; extra == "tests"
|
|
37
|
+
Provides-Extra: style
|
|
38
|
+
Requires-Dist: pre-commit; extra == "style"
|
|
39
|
+
Provides-Extra: types
|
|
40
|
+
Requires-Dist: mypy; extra == "types"
|
|
41
|
+
Requires-Dist: types-PyYAML; extra == "types"
|
|
42
|
+
Requires-Dist: types-python-dateutil; extra == "types"
|
|
43
|
+
Requires-Dist: types-setuptools; extra == "types"
|
|
44
|
+
Requires-Dist: types-networkx; extra == "types"
|
|
45
|
+
Requires-Dist: pandas-stubs; extra == "types"
|
|
46
|
+
Provides-Extra: docs
|
|
47
|
+
Requires-Dist: sphinx-autoapi; extra == "docs"
|
|
48
|
+
Requires-Dist: ipython; extra == "docs"
|
|
49
|
+
Requires-Dist: rstcheck; extra == "docs"
|
|
50
|
+
Requires-Dist: setuptools; extra == "docs"
|
|
51
|
+
Requires-Dist: sphinx; extra == "docs"
|
|
52
|
+
Requires-Dist: sphinx-argparse; extra == "docs"
|
|
53
|
+
Requires-Dist: sphinx-autodoc-typehints; extra == "docs"
|
|
54
|
+
Requires-Dist: sphinx_rtd_theme; extra == "docs"
|
|
55
|
+
Provides-Extra: ert
|
|
56
|
+
Requires-Dist: ert>=10.2.0b13; extra == "ert"
|
|
57
|
+
Dynamic: license-file
|
|
58
|
+
|
|
59
|
+
[](https://github.com/equinor/res2df/actions/workflows/publish.yml)
|
|
60
|
+
[](https://pypi.org/project/res2df/)
|
|
61
|
+
[](https://codecov.io/gh/equinor/res2df)
|
|
62
|
+
[](https://www.python.org)
|
|
63
|
+
[](https://github.com/astral-sh/ruff)
|
|
64
|
+
[](https://www.gnu.org/licenses/gpl-3.0)
|
|
65
|
+
|
|
66
|
+
# res2df
|
|
67
|
+
|
|
68
|
+
res2df is a Pandas DataFrame wrapper around resdata and opm.io, which
|
|
69
|
+
are used to access binary files outputted by reservoir simulators,
|
|
70
|
+
or its input files --- or any other tool outputting to the same data format.
|
|
71
|
+
|
|
72
|
+
The reverse operation, from a Pandas DataFrame to reservoir simulator include files
|
|
73
|
+
(commonly given the extension ".inc", ".grdecl" etc.) is provided for some of the
|
|
74
|
+
modules.
|
|
75
|
+
|
|
76
|
+
The package consists of a module pr. datatype, e.g. one module for summary
|
|
77
|
+
files (.UNSMRY), one for completion data etc.
|
|
78
|
+
|
|
79
|
+
There is a command line frontend for almost all functionality, called
|
|
80
|
+
`res2csv`, which converts the reservoir data to DataFrames, and then dumps
|
|
81
|
+
the dataframes to files in CSV format, and a similar `csv2res` for the
|
|
82
|
+
reverse operation.
|
|
83
|
+
|
|
84
|
+
For documentation, see <https://equinor.github.io/res2df/>
|
|
85
|
+
|
|
86
|
+
## License
|
|
87
|
+
|
|
88
|
+
This library is released under GPLv3.
|
|
89
|
+
|
|
90
|
+
## Copyright
|
|
91
|
+
|
|
92
|
+
The code is Copyright Equinor ASA 2019-2021.
|
|
93
|
+
|
|
94
|
+
Contributions without copyright transfer are welcome.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[](https://github.com/equinor/res2df/actions/workflows/publish.yml)
|
|
2
2
|
[](https://pypi.org/project/res2df/)
|
|
3
3
|
[](https://codecov.io/gh/equinor/res2df)
|
|
4
|
-
[](https://www.python.org)
|
|
5
5
|
[](https://github.com/astral-sh/ruff)
|
|
6
6
|
[](https://www.gnu.org/licenses/gpl-3.0)
|
|
7
7
|
|
|
@@ -39,10 +39,11 @@ version = release
|
|
|
39
39
|
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
|
40
40
|
# ones.
|
|
41
41
|
extensions = [
|
|
42
|
-
"autoapi.
|
|
42
|
+
"autoapi.extension",
|
|
43
43
|
"sphinx.ext.autodoc",
|
|
44
44
|
"sphinx.ext.autosummary",
|
|
45
45
|
"sphinx.ext.githubpages",
|
|
46
|
+
"sphinx.ext.inheritance_diagram",
|
|
46
47
|
"sphinx.ext.mathjax",
|
|
47
48
|
"sphinx.ext.napoleon",
|
|
48
49
|
"sphinx.ext.viewcode",
|
|
@@ -50,12 +51,30 @@ extensions = [
|
|
|
50
51
|
"sphinxarg.ext",
|
|
51
52
|
]
|
|
52
53
|
|
|
53
|
-
|
|
54
|
+
autoapi_dirs = ["../src/res2df"]
|
|
55
|
+
autoapi_root = "res2df"
|
|
56
|
+
autoapi_type = "python"
|
|
57
|
+
autoapi_add_toctree_entry = False
|
|
58
|
+
autoapi_own_page_level = "module"
|
|
59
|
+
|
|
60
|
+
autoapi_options = [
|
|
61
|
+
"members",
|
|
62
|
+
"undoc-members",
|
|
63
|
+
"show-inheritance",
|
|
64
|
+
"show-module-summary",
|
|
65
|
+
]
|
|
54
66
|
|
|
55
|
-
autodoc_default_options = {
|
|
67
|
+
autodoc_default_options = {
|
|
68
|
+
"members": True,
|
|
69
|
+
"imported-members": False,
|
|
70
|
+
}
|
|
56
71
|
|
|
57
72
|
autosummary_generate = True
|
|
58
73
|
|
|
74
|
+
suppress_warnings = [
|
|
75
|
+
"docutils",
|
|
76
|
+
]
|
|
77
|
+
|
|
59
78
|
# Add any paths that contain templates here, relative to this directory.
|
|
60
79
|
templates_path = ["_templates"]
|
|
61
80
|
|
|
@@ -188,3 +207,27 @@ epub_exclude_files = ["search.html"]
|
|
|
188
207
|
|
|
189
208
|
|
|
190
209
|
# -- Extension configuration -------------------------------------------------
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
def skip_unwanted_members(app, what, name, obj, skip, options):
|
|
213
|
+
short_name = name.split(".")[-1]
|
|
214
|
+
|
|
215
|
+
if "vfp" in name and short_name.startswith("_"):
|
|
216
|
+
return False
|
|
217
|
+
|
|
218
|
+
if ".constants." in name or name.endswith(".constants"):
|
|
219
|
+
return True
|
|
220
|
+
|
|
221
|
+
if short_name == "logger":
|
|
222
|
+
return True
|
|
223
|
+
|
|
224
|
+
if what == "data" and (
|
|
225
|
+
short_name.isupper() or short_name.replace("_", "").isupper()
|
|
226
|
+
):
|
|
227
|
+
return True
|
|
228
|
+
|
|
229
|
+
return skip
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
def setup(app):
|
|
233
|
+
app.connect("autoapi-skip-member", skip_unwanted_members)
|
|
@@ -6,14 +6,15 @@ requires = [
|
|
|
6
6
|
build-backend = "setuptools.build_meta"
|
|
7
7
|
|
|
8
8
|
[tool.setuptools_scm]
|
|
9
|
-
|
|
9
|
+
version_file = "src/res2df/version.py"
|
|
10
10
|
|
|
11
11
|
[project]
|
|
12
12
|
name = "res2df"
|
|
13
13
|
description = "Convert reservoir simulator input and output to DataFrames"
|
|
14
14
|
readme = "README.md"
|
|
15
15
|
requires-python = ">=3.11"
|
|
16
|
-
license =
|
|
16
|
+
license = "GPL-3.0-only"
|
|
17
|
+
license-files = ["LICENSE"]
|
|
17
18
|
authors = [
|
|
18
19
|
{ name = "Håvard Berland", email = "havb@equinor.com" }
|
|
19
20
|
]
|
|
@@ -26,8 +27,8 @@ classifiers = [
|
|
|
26
27
|
"Topic :: Utilities",
|
|
27
28
|
"Programming Language :: Python :: 3.11",
|
|
28
29
|
"Programming Language :: Python :: 3.12",
|
|
30
|
+
"Programming Language :: Python :: 3.13",
|
|
29
31
|
"Natural Language :: English",
|
|
30
|
-
"License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
|
|
31
32
|
]
|
|
32
33
|
|
|
33
34
|
dynamic = ["version"]
|
|
@@ -61,7 +62,7 @@ types = [
|
|
|
61
62
|
"pandas-stubs",
|
|
62
63
|
]
|
|
63
64
|
docs = [
|
|
64
|
-
"autoapi",
|
|
65
|
+
"sphinx-autoapi",
|
|
65
66
|
"ipython",
|
|
66
67
|
"rstcheck",
|
|
67
68
|
"setuptools",
|
|
@@ -104,8 +105,8 @@ extra_checks = true
|
|
|
104
105
|
|
|
105
106
|
[[tool.mypy.overrides]]
|
|
106
107
|
module = [
|
|
108
|
+
"ert",
|
|
107
109
|
"opm.*",
|
|
108
|
-
"resfo",
|
|
109
110
|
"pyarrow", # should be removed for pyarrow > 21.0.0
|
|
110
111
|
"resdata.*",
|
|
111
112
|
]
|
|
@@ -138,6 +139,7 @@ select = [
|
|
|
138
139
|
"PD", # pandas-vet
|
|
139
140
|
"RUF", # ruff specific rules
|
|
140
141
|
"UP", # pyupgrade
|
|
142
|
+
"ANN", # flake8-annotations
|
|
141
143
|
]
|
|
142
144
|
preview = true
|
|
143
145
|
ignore = [
|
|
@@ -159,7 +161,8 @@ ignore = [
|
|
|
159
161
|
|
|
160
162
|
[tool.ruff.lint.extend-per-file-ignores]
|
|
161
163
|
"src/res2df/__init__.py" = ["PLC0414"]
|
|
162
|
-
"tests/*" = ["RUF005"]
|
|
164
|
+
"tests/*" = ["RUF005", "ANN"]
|
|
165
|
+
"docs/*" = ["ANN"]
|
|
163
166
|
|
|
164
167
|
[tool.ruff.lint.pylint]
|
|
165
168
|
max-args = 20
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
from . import compdat as compdat
|
|
2
|
+
from . import csv2res as csv2res
|
|
3
|
+
from . import equil as equil
|
|
4
|
+
from . import faults as faults
|
|
5
|
+
from . import fipreports as fipreports
|
|
6
|
+
from . import grid as grid
|
|
7
|
+
from . import gruptree as gruptree
|
|
8
|
+
from . import nnc as nnc
|
|
9
|
+
from . import pillars as pillars
|
|
10
|
+
from . import pvt as pvt
|
|
11
|
+
from . import res2csv as res2csv
|
|
12
|
+
from . import rft as rft
|
|
13
|
+
from . import satfunc as satfunc
|
|
14
|
+
from . import summary as summary
|
|
15
|
+
from . import trans as trans
|
|
16
|
+
from . import vfp as vfp
|
|
17
|
+
from . import wcon as wcon
|
|
18
|
+
from . import wellcompletiondata as wellcompletiondata
|
|
19
|
+
from . import wellconnstatus as wellconnstatus
|
|
20
|
+
from .__version__ import __version__ as __version__
|
|
21
|
+
from .res2csvlogger import getLogger_res2csv as getLogger_res2csv
|
|
22
|
+
from .resdatafiles import ResdataFiles as ResdataFiles
|
|
23
|
+
|
|
24
|
+
SUBMODULES: list[str] = [
|
|
25
|
+
"compdat",
|
|
26
|
+
"equil",
|
|
27
|
+
"faults",
|
|
28
|
+
"fipreports",
|
|
29
|
+
"grid",
|
|
30
|
+
"gruptree",
|
|
31
|
+
"nnc",
|
|
32
|
+
"pillars",
|
|
33
|
+
"pvt",
|
|
34
|
+
"rft",
|
|
35
|
+
"satfunc",
|
|
36
|
+
"summary",
|
|
37
|
+
"trans",
|
|
38
|
+
"vfp",
|
|
39
|
+
"wellcompletiondata",
|
|
40
|
+
"wellconnstatus",
|
|
41
|
+
"wcon",
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
__all__ = [
|
|
46
|
+
"ResdataFiles",
|
|
47
|
+
"__version__",
|
|
48
|
+
"compdat",
|
|
49
|
+
"csv2res",
|
|
50
|
+
"equil",
|
|
51
|
+
"faults",
|
|
52
|
+
"fipreports",
|
|
53
|
+
"getLogger_res2csv",
|
|
54
|
+
"grid",
|
|
55
|
+
"gruptree",
|
|
56
|
+
"nnc",
|
|
57
|
+
"pillars",
|
|
58
|
+
"pvt",
|
|
59
|
+
"res2csv",
|
|
60
|
+
"rft",
|
|
61
|
+
"satfunc",
|
|
62
|
+
"summary",
|
|
63
|
+
"trans",
|
|
64
|
+
"vfp",
|
|
65
|
+
"wcon",
|
|
66
|
+
"wellcompletiondata",
|
|
67
|
+
"wellconnstatus",
|
|
68
|
+
]
|
|
@@ -11,28 +11,24 @@ import shlex
|
|
|
11
11
|
import signal
|
|
12
12
|
import sys
|
|
13
13
|
from collections import defaultdict
|
|
14
|
+
from collections.abc import Mapping
|
|
14
15
|
from importlib import resources
|
|
15
16
|
from pathlib import Path
|
|
16
17
|
from typing import Any, cast
|
|
17
18
|
|
|
18
19
|
import dateutil.parser
|
|
19
20
|
import numpy as np
|
|
21
|
+
import opm.io.deck
|
|
20
22
|
import pandas as pd
|
|
21
23
|
import pyarrow as pa
|
|
24
|
+
|
|
25
|
+
# This import is seemingly not used, but necessary for some attributes
|
|
26
|
+
# to be included in DeckItem objects.
|
|
27
|
+
from opm.io.deck import DeckKeyword # noqa: F401
|
|
22
28
|
from pyarrow import (
|
|
23
29
|
feather, # necessary as this module is not loaded unless explicitly imported
|
|
24
30
|
)
|
|
25
31
|
|
|
26
|
-
try:
|
|
27
|
-
import opm.io.deck
|
|
28
|
-
|
|
29
|
-
# This import is seemingly not used, but necessary for some attributes
|
|
30
|
-
# to be included in DeckItem objects.
|
|
31
|
-
from opm.io.deck import DeckKeyword # noqa: F401
|
|
32
|
-
except ImportError:
|
|
33
|
-
# Allow parts of res2df to work without OPM:
|
|
34
|
-
pass
|
|
35
|
-
|
|
36
32
|
from .__version__ import __version__
|
|
37
33
|
from .constants import MAGIC_STDOUT
|
|
38
34
|
|
|
@@ -189,9 +185,9 @@ def datetime_to_ecldate(timestamp: str | datetime.datetime | datetime.date) -> s
|
|
|
189
185
|
|
|
190
186
|
|
|
191
187
|
def keyworddata_to_df(
|
|
192
|
-
deck,
|
|
188
|
+
deck: "opm.opmcommon_python.Deck",
|
|
193
189
|
keyword: str,
|
|
194
|
-
renamer:
|
|
190
|
+
renamer: Mapping[str, str | list[str]] | None = None,
|
|
195
191
|
recordcountername: str | None = None,
|
|
196
192
|
emptyrecordcountername: str | None = None,
|
|
197
193
|
) -> pd.DataFrame:
|
|
@@ -275,7 +271,7 @@ def parse_opmio_deckrecord(
|
|
|
275
271
|
keyword: str,
|
|
276
272
|
itemlistname: str = "items",
|
|
277
273
|
recordindex: int | None = None,
|
|
278
|
-
renamer:
|
|
274
|
+
renamer: Mapping[str, str | list[str]] | None = None,
|
|
279
275
|
) -> dict[str, Any]:
|
|
280
276
|
"""
|
|
281
277
|
Parse an opm.io.DeckRecord belonging to a certain keyword
|
|
@@ -344,8 +340,9 @@ def parse_opmio_deckrecord(
|
|
|
344
340
|
if renamer:
|
|
345
341
|
renamed_dict: dict[str, Any] = {}
|
|
346
342
|
for key, value in rec_dict.items():
|
|
347
|
-
|
|
348
|
-
|
|
343
|
+
renamed_key = renamer.get(key)
|
|
344
|
+
if isinstance(renamed_key, str):
|
|
345
|
+
renamed_dict[renamed_key] = value
|
|
349
346
|
else:
|
|
350
347
|
renamed_dict[key] = value
|
|
351
348
|
return renamed_dict
|
|
@@ -470,7 +467,7 @@ def handle_wanted_keywords(
|
|
|
470
467
|
|
|
471
468
|
def fill_reverse_parser(
|
|
472
469
|
parser: argparse.ArgumentParser, modulename: str, defaultoutputfile: str
|
|
473
|
-
):
|
|
470
|
+
) -> argparse.ArgumentParser:
|
|
474
471
|
"""A standardized submodule parser for the command line utility
|
|
475
472
|
to produce :term:`include files <include file>` from a CSV file.
|
|
476
473
|
|
|
@@ -543,6 +540,7 @@ def df2res(
|
|
|
543
540
|
"""
|
|
544
541
|
from_module = inspect.stack()[1]
|
|
545
542
|
calling_module = inspect.getmodule(from_module[0])
|
|
543
|
+
assert calling_module is not None
|
|
546
544
|
if dataframe.empty:
|
|
547
545
|
raise ValueError("Empty dataframe")
|
|
548
546
|
if (
|
|
@@ -580,7 +578,7 @@ def df2res(
|
|
|
580
578
|
if not_supported:
|
|
581
579
|
logger.warning(
|
|
582
580
|
"Requested keyword(s) not supported by %s: %s",
|
|
583
|
-
calling_module.__name__,
|
|
581
|
+
calling_module.__name__,
|
|
584
582
|
not_supported,
|
|
585
583
|
)
|
|
586
584
|
# Warn if some requested keywords are not in frame:
|
|
@@ -601,7 +599,7 @@ def df2res(
|
|
|
601
599
|
string = ""
|
|
602
600
|
res2df_header = (
|
|
603
601
|
"Output file printed by "
|
|
604
|
-
+ calling_module.__name__
|
|
602
|
+
+ calling_module.__name__
|
|
605
603
|
+ " "
|
|
606
604
|
+ __version__
|
|
607
605
|
+ "\n"
|
|
@@ -631,7 +629,7 @@ def generic_deck_table(
|
|
|
631
629
|
dframe: pd.DataFrame,
|
|
632
630
|
keyword: str,
|
|
633
631
|
comment: str | None = None,
|
|
634
|
-
renamer:
|
|
632
|
+
renamer: Mapping[str, str] | None = None,
|
|
635
633
|
drop_trailing_columns: bool = True,
|
|
636
634
|
) -> str:
|
|
637
635
|
"""Construct string contents of a :term:`.DATA file` table.
|
|
@@ -855,7 +853,7 @@ def is_color(input_string: str) -> bool:
|
|
|
855
853
|
return bool(re.match(regex, input_string))
|
|
856
854
|
|
|
857
855
|
|
|
858
|
-
def parse_lyrfile(filename: str) -> list[dict[str, Any]] | None:
|
|
856
|
+
def parse_lyrfile(filename: str | Path) -> list[dict[str, Any]] | None:
|
|
859
857
|
"""Return a list of dicts representation of the lyr file.
|
|
860
858
|
|
|
861
859
|
The lyr file contains data of the following format,
|
|
@@ -927,7 +925,9 @@ def parse_lyrfile(filename: str) -> list[dict[str, Any]] | None:
|
|
|
927
925
|
return lyrlist
|
|
928
926
|
|
|
929
927
|
|
|
930
|
-
def convert_lyrlist_to_zonemap(
|
|
928
|
+
def convert_lyrlist_to_zonemap(
|
|
929
|
+
lyrlist: list[dict[str, Any]] | None,
|
|
930
|
+
) -> dict[int, str] | None:
|
|
931
931
|
"""Returns a layer to zone map as a dictionary
|
|
932
932
|
|
|
933
933
|
Args:
|
|
@@ -949,7 +949,7 @@ def convert_lyrlist_to_zonemap(lyrlist: list[dict[str, Any]]) -> dict[int, str]:
|
|
|
949
949
|
return zonemap
|
|
950
950
|
|
|
951
951
|
|
|
952
|
-
def get_wells_matching_template(template: str, wells: list):
|
|
952
|
+
def get_wells_matching_template(template: str, wells: list[str]) -> list[str]:
|
|
953
953
|
"""Returns the wells in the list that is matching the template
|
|
954
954
|
containing wilcard characters. The wildcard charachters supported
|
|
955
955
|
are * to match zero or more charachters and ? to match a single
|
|
@@ -11,16 +11,14 @@
|
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
13
|
import argparse
|
|
14
|
-
import contextlib
|
|
15
14
|
import datetime
|
|
16
15
|
import logging
|
|
16
|
+
from typing import Any
|
|
17
17
|
|
|
18
18
|
import numpy as np
|
|
19
|
+
import opm.io.deck
|
|
19
20
|
import pandas as pd
|
|
20
21
|
|
|
21
|
-
with contextlib.suppress(ImportError):
|
|
22
|
-
import opm.io.deck
|
|
23
|
-
|
|
24
22
|
from .common import (
|
|
25
23
|
get_wells_matching_template,
|
|
26
24
|
merge_zones,
|
|
@@ -97,6 +95,7 @@ def deck2dfs(
|
|
|
97
95
|
complumprecords = []
|
|
98
96
|
welspecs = {}
|
|
99
97
|
date = start_date # DATE column will always be there, but can contain NaN/None
|
|
98
|
+
rec_data: dict[str, Any]
|
|
100
99
|
for idx, kword in enumerate(deck):
|
|
101
100
|
if kword.name in ["DATES", "START"]:
|
|
102
101
|
for rec in kword:
|
|
@@ -752,7 +751,7 @@ def expand_complump_in_welopen_df(
|
|
|
752
751
|
exp_welopens.append(cell_row)
|
|
753
752
|
|
|
754
753
|
dframe = pd.DataFrame(exp_welopens)
|
|
755
|
-
return dframe.astype(object).where(pd.notna(dframe), None)
|
|
754
|
+
return dframe.astype(object).where(pd.notna(dframe), None) # type: ignore[call-overload]
|
|
756
755
|
|
|
757
756
|
|
|
758
757
|
def expand_wlist_in_welopen_df(
|
|
@@ -786,7 +785,7 @@ def expand_wlist_in_welopen_df(
|
|
|
786
785
|
# Explicit wellname was used, no expansion to happen:
|
|
787
786
|
exp_welopens.append(row)
|
|
788
787
|
dframe = pd.DataFrame(exp_welopens)
|
|
789
|
-
return dframe.astype(object).where(pd.notna(dframe), None)
|
|
788
|
+
return dframe.astype(object).where(pd.notna(dframe), None) # type: ignore[call-overload]
|
|
790
789
|
|
|
791
790
|
|
|
792
791
|
def applywelopen(
|
|
@@ -845,7 +844,7 @@ def applywelopen(
|
|
|
845
844
|
"The WLIST dataframe must be expanded through expand_wlist()"
|
|
846
845
|
)
|
|
847
846
|
|
|
848
|
-
welopen_df = welopen_df.astype(object).where(pd.notna(welopen_df), None)
|
|
847
|
+
welopen_df = welopen_df.astype(object).where(pd.notna(welopen_df), None) # type: ignore[call-overload]
|
|
849
848
|
if wlist_df is not None:
|
|
850
849
|
welopen_df = expand_wlist_in_welopen_df(welopen_df, wlist_df)
|
|
851
850
|
if complump_df is not None:
|
|
@@ -951,7 +950,7 @@ def fill_parser(parser: argparse.ArgumentParser) -> argparse.ArgumentParser:
|
|
|
951
950
|
return parser
|
|
952
951
|
|
|
953
952
|
|
|
954
|
-
def compdat_main(args):
|
|
953
|
+
def compdat_main(args: argparse.Namespace) -> None:
|
|
955
954
|
"""Entry-point for module, for command line utility"""
|
|
956
955
|
logger = getLogger_res2csv(__name__, vars(args))
|
|
957
956
|
resdatafiles = ResdataFiles(args.DATAFILE)
|
|
@@ -34,7 +34,7 @@ def get_parser() -> argparse.ArgumentParser:
|
|
|
34
34
|
version=f"%(prog)s {__version__}",
|
|
35
35
|
)
|
|
36
36
|
|
|
37
|
-
subparsers = parser.add_subparsers(
|
|
37
|
+
subparsers = parser.add_subparsers(
|
|
38
38
|
required=True,
|
|
39
39
|
dest="subcommand",
|
|
40
40
|
parser_class=argparse.ArgumentParser,
|