subscript 1.3.0__tar.gz → 1.5.0__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.
- {subscript-1.3.0 → subscript-1.5.0}/.github/workflows/codecov.yml +2 -2
- {subscript-1.3.0 → subscript-1.5.0}/.github/workflows/publish.yml +2 -2
- {subscript-1.3.0 → subscript-1.5.0}/.github/workflows/subscript.yml +2 -2
- {subscript-1.3.0 → subscript-1.5.0}/PKG-INFO +2 -3
- {subscript-1.3.0 → subscript-1.5.0}/README.md +1 -1
- {subscript-1.3.0 → subscript-1.5.0}/docs/overview.rst +0 -1
- {subscript-1.3.0 → subscript-1.5.0}/pyproject.toml +0 -2
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/bjobsusers/bjobsusers.py +31 -24
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/casegen_upcars/model.py +3 -3
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/csv_stack/csv_stack.py +1 -1
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/eclcompress/allowlist.py +13 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/fmuobs/writers.py +7 -4
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/interp_relperm/interp_relperm.py +2 -2
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/params2csv/params2csv.py +98 -47
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/presentvalue/presentvalue.py +2 -2
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/prtvol2csv/prtvol2csv.py +5 -1
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/version.py +2 -2
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript.egg-info/PKG-INFO +2 -3
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript.egg-info/SOURCES.txt +0 -5
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript.egg-info/entry_points.txt +0 -1
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript.egg-info/requires.txt +0 -1
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_bjobsusers.py +9 -9
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_params2csv.py +118 -13
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_ri_wellmod.py +18 -3
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_welltest_dpds.py +2 -2
- subscript-1.3.0/docs/scripts/runrms.rst +0 -8
- subscript-1.3.0/src/subscript/runrms/runrms.py +0 -871
- subscript-1.3.0/tests/__init__.py +0 -0
- subscript-1.3.0/tests/test_runrms.py +0 -307
- subscript-1.3.0/tests/testdata_runrms/runrms.yml +0 -65
- {subscript-1.3.0 → subscript-1.5.0}/.gitignore +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/.pylintrc +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/LICENSE +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/SECURITY.md +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/ci/testkomodo.sh +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/Makefile +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/_static/equinor-logo.png +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/_static/equinor-logo2.jpg +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/_static/equinor-logo2.png +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/_static/equinor_logo.jpg +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/_static/equinor_logo_only.jpg +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/_templates/layout.html +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/conf.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/contributing.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/history.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/index.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/make.bat +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/bjobsusers.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/casegen_upcars.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/check_swatinit.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/convert_grid_format.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/csv2ofmvol.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/csv_merge.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/csv_stack.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/eclcompress.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/ecldiff2roff.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/fmu_copy_revision.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/fmuobs.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/images/Pack_sim_overview.png +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/images/Summaryplot-ensemble.png +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/images/Summaryplot-ert.png +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/images/Summaryplot-normalizeexample.png +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/images/Workflow_sector2fluxnum.png +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/images/casegen_upcars_geometry.png +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/images/check_swatinit_scatter.png +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/images/check_swatinit_volplot.png +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/images/ecl-swat-initialization.png +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/images/make_check_swatinit_images.sh +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/images/resinsight_wells_project_example.png +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/interp_relperm.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/merge_rft_ertobs.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/merge_unrst_files.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/ofmvol2csv.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/pack_sim.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/params2csv.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/presentvalue.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/prtvol2csv.csv +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/prtvol2csv.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/restartthinner.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/ri_wellmod.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/rmsecl_volumetrics.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/runeclipse.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/sector2fluxnum.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/summaryplot.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/sunsch.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/sw_model_utilities.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/vfp2csv.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/welltest_dpds.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/docs/usage.rst +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/setup.cfg +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/bjobsusers/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/casegen_upcars/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/casegen_upcars/casegen_upcars.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/casegen_upcars/udf.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/casegen_upcars/udf_arg_parser.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/check_swatinit/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/check_swatinit/check_swatinit.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/check_swatinit/constants.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/check_swatinit/pillarmodel.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/check_swatinit/plotter.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/CASEGEN_UPCARS +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/CHECK_SWATINIT +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/CSV2OFMVOL +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/CSV_STACK +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/ECLCOMPRESS +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/ECLDIFF2ROFF +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/ECLGRID2ROFF +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/ECLINIT2ROFF +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/ECLRST2ROFF +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/INTERP_RELPERM +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/MERGE_RFT_ERTOBS +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/MERGE_UNRST_FILES +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/OFMVOL2CSV +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/PARAMS2CSV +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/PRTVOL2CSV +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/RI_WELLMOD +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/SUNSCH +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/WELLTEST_DPDS +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/convert_grid_format/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/convert_grid_format/convert_grid_format.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/csv2ofmvol/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/csv2ofmvol/csv2ofmvol.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/csv_merge/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/csv_merge/csv_merge.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/csv_stack/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/eclcompress/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/eclcompress/eclcompress.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/ecldiff2roff/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/ecldiff2roff/ecldiff2roff.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/eclgrid2roff/eclgrid2roff.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/eclinit2roff/eclinit2roff.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/eclrst2roff/eclrst2roff.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/fmu_copy_revision/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/fmu_copy_revision/fmu_copy_revision.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/fmuobs/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/fmuobs/fmuobs.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/fmuobs/parsers.py +1 -1
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/fmuobs/util.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/hook_implementations/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/hook_implementations/jobs.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/interp_relperm/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/legacy/duf +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/legacy/eclmanual +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/legacy/ertwatch +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/legacy/list_rms_usage +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/legacy/nosim +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/legacy/runeclipse +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/merge_rft_ertobs/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/merge_rft_ertobs/merge_rft_ertobs.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/merge_unrst_files/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/merge_unrst_files/merge_unrst_files.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/ofmvol2csv/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/ofmvol2csv/ofmvol2csv.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/pack_sim/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/pack_sim/pack_sim.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/params2csv/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/presentvalue/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/prtvol2csv/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/restartthinner/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/restartthinner/restartthinner.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/ri_wellmod/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/ri_wellmod/ri_wellmod.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/rmsecl_volumetrics/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/rmsecl_volumetrics/rmsecl_volumetrics.py +0 -0
- {subscript-1.3.0/src/subscript/runrms → subscript-1.5.0/src/subscript/sector2fluxnum}/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/sector2fluxnum/completions.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/sector2fluxnum/datafile_obj.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/sector2fluxnum/flux_obj.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/sector2fluxnum/flux_util.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/sector2fluxnum/fluxfile_obj.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/sector2fluxnum/sector2fluxnum.py +0 -0
- {subscript-1.3.0/src/subscript/sector2fluxnum → subscript-1.5.0/src/subscript/summaryplot}/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/summaryplot/summaryplot.py +0 -0
- {subscript-1.3.0/src/subscript/summaryplot → subscript-1.5.0/src/subscript/sunsch}/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/sunsch/sunsch.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/sunsch/time_vector.py +0 -0
- {subscript-1.3.0/src/subscript/sunsch → subscript-1.5.0/src/subscript/sw_model_utilities}/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/sw_model_utilities/sw_model_utilities.py +0 -0
- {subscript-1.3.0/src/subscript/sw_model_utilities → subscript-1.5.0/src/subscript/vfp2csv}/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/vfp2csv/vfp2csv.py +0 -0
- {subscript-1.3.0/src/subscript/vfp2csv → subscript-1.5.0/src/subscript/welltest_dpds}/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript/welltest_dpds/welltest_dpds.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript.egg-info/dependency_links.txt +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/src/subscript.egg-info/top_level.txt +0 -0
- {subscript-1.3.0/src/subscript/welltest_dpds → subscript-1.5.0/tests}/__init__.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/conftest.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/grid/reek.faults +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/grid/reek.grid +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/grid/reek.multflt +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/grid/reek.multz +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/grid/reek.perm +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/grid/reek.poro +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/props/let-sgof.txt +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/props/let-swof.txt +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/props/reek.endpoints +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/props/reek.pvt +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/props/reek.swatinit +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/props/sgof.txt +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/props/swof.inc +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/props/swof.txt +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/regions/reek.eqlnum +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/regions/reek.fipnum +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/schedule/reek_history.sch +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/solution/reek.equil +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/summary/reek.smry +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.DATA +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.ECLEND +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.EGRID +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.INIT +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.LOG +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.PRT +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.RFT +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.SMSPEC +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.UNRST +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.UNSMRY +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/model/parameters.txt +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/parameters.txt +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/rms/README +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/rms/reek.rms10.1.3/.master +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/rms/reek.rms11.1.0/.master +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/vfp/GasProd.VFP +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/vfp/pd2.VFP +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/welltest/eclipse/model/DROGON_DST_PLT-0.SMSPEC +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/data/welltest/eclipse/model/DROGON_DST_PLT-0.UNSMRY +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_casegen_upcars.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_check_swatinit.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_check_swatinit_simulators.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_convert_grid_format.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_csv2ofmvol.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_csv_merge.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_csv_stack.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_docs.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_eclcompress.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_ecldiff2roff.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_fmu_copy_revision.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_fmuobs.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_fmuobs_parsers.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_fmuobs_writers.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_hook_implementations.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_interp_relperm.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_merge_rft_ertobs.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_merge_unrst_files.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_ofmvol2csv.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_pack_sim.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_presentvalue.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_prtvol2csv.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_restartthinner.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_rmsecl_volumetrics.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_sector2fluxnum.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_subscriptlogger.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_summaryplot.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_sunsch.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_sw_model_utilities.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/test_vfp2csv.py +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_casegen_upcars/demo_large_scale.yaml +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_casegen_upcars/demo_small_scale.yaml +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_casegen_upcars/dump_value.tmpl +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_casegen_upcars/upcars_eclipse_ref_lg.tmpl +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_casegen_upcars/upcars_eclipse_ref_ss.tmpl +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_eclcompress/permxyz.grdecl +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_fmuobs/drogon_wbhp_rft_wct_gor_tracer_4d.obs +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_fmuobs/ert-doc.csv +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_fmuobs/ert-doc.obs +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_fmuobs/ert-doc.yml +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_fmuobs/fmu-ensemble-obs.yml +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_fmuobs/hist_obs_wells.txt +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_fmuobs/ri-obs.csv +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_interp_relperm/cfg.yml +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_interp_relperm/sgof_base.inc +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_interp_relperm/sgof_opt.inc +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_interp_relperm/sgof_pes.inc +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_interp_relperm/swof_base.inc +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_interp_relperm/swof_opt.inc +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_interp_relperm/swof_pes.inc +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_rft_ertobs/drogon/gendata_rft.csv +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A2.obs +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A2.txt +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A3.obs +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A3.txt +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A4.txt +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A4_1.obs +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A5.obs +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A5.txt +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A6.obs +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A6.txt +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_rft_ertobs/drogon/rft/well_date_rft.txt +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_unrst_files/HIST.UNRST +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_unrst_files/PRED.UNRST +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_ofmvol2csv/fileA.vol +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_ofmvol2csv/fileB.vol +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_ofmvol2csv/fileC.vol +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_ofmvol2csv/ofm_example.vol +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_ri_wellmod/drogon_include/grid/drogon.grid.grdecl +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_ri_wellmod/drogon_include/grid/drogon.ntg.grdecl +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_ri_wellmod/drogon_include/grid/drogon.perm.grdecl +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_ri_wellmod/drogon_trajectories/rft_wells.dat +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_ri_wellmod/drogon_trajectories/wells.dat +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_ri_wellmod/drogon_wells_noicd.rsp +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_ri_wellmod/reek_trajectories/reek_wells.dat +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_ri_wellmod/ri_reek_wells.rsp +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sector2fluxnum/DUMPFLUX_TEST.DATA +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sector2fluxnum/DUMPFLUX_TEST.EGRID +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sector2fluxnum/DUMPFLUX_TEST.FLUX +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sector2fluxnum/OUT_COARSE.FLUX +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sector2fluxnum/TEST.DATA +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sector2fluxnum/TEST.EGRID +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sector2fluxnum/TEST.INIT +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sector2fluxnum/TEST.UNRST +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sunsch/config.yml +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sunsch/emptyinit.sch +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sunsch/foo1.sch +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sunsch/footemplate.sch +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sunsch/initwithdates.sch +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sunsch/merge2.sch +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sunsch/mergeme.sch +0 -0
- {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sunsch/options3.sch +0 -0
|
@@ -16,12 +16,12 @@ jobs:
|
|
|
16
16
|
|
|
17
17
|
steps:
|
|
18
18
|
- name: Checkout
|
|
19
|
-
uses: actions/checkout@
|
|
19
|
+
uses: actions/checkout@v4
|
|
20
20
|
with:
|
|
21
21
|
fetch-depth: 0
|
|
22
22
|
|
|
23
23
|
- name: Set up Python 3.8
|
|
24
|
-
uses: actions/setup-python@
|
|
24
|
+
uses: actions/setup-python@v5
|
|
25
25
|
with:
|
|
26
26
|
python-version: 3.8
|
|
27
27
|
|
|
@@ -26,12 +26,12 @@ jobs:
|
|
|
26
26
|
|
|
27
27
|
steps:
|
|
28
28
|
- name: Checkout commit locally
|
|
29
|
-
uses: actions/checkout@
|
|
29
|
+
uses: actions/checkout@v4
|
|
30
30
|
with:
|
|
31
31
|
fetch-depth: 0
|
|
32
32
|
|
|
33
33
|
- name: Set up Python ${{ matrix.python-version }}
|
|
34
|
-
uses: actions/setup-python@
|
|
34
|
+
uses: actions/setup-python@v5
|
|
35
35
|
with:
|
|
36
36
|
python-version: ${{ matrix.python-version }}
|
|
37
37
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: subscript
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.5.0
|
|
4
4
|
Summary: Equinor's collection of subsurface reservoir modelling scripts
|
|
5
5
|
Author-email: Equinor <rnyb@equinor.com>
|
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
|
@@ -713,7 +713,6 @@ Requires-Dist: scipy
|
|
|
713
713
|
Requires-Dist: seaborn
|
|
714
714
|
Requires-Dist: segyio
|
|
715
715
|
Requires-Dist: shapely
|
|
716
|
-
Requires-Dist: urllib3<2
|
|
717
716
|
Requires-Dist: xlrd
|
|
718
717
|
Requires-Dist: xtgeo
|
|
719
718
|
Provides-Extra: tests
|
|
@@ -769,7 +768,7 @@ pip install subscript
|
|
|
769
768
|
## Usage
|
|
770
769
|
|
|
771
770
|
As a collection of utilities subscript has many different invocations and
|
|
772
|
-
|
|
771
|
+
use cases. A complete overview can be found in the
|
|
773
772
|
[documentation](https://equinor.github.io/subscript)
|
|
774
773
|
for a complete overview.
|
|
775
774
|
|
|
@@ -30,7 +30,7 @@ pip install subscript
|
|
|
30
30
|
## Usage
|
|
31
31
|
|
|
32
32
|
As a collection of utilities subscript has many different invocations and
|
|
33
|
-
|
|
33
|
+
use cases. A complete overview can be found in the
|
|
34
34
|
[documentation](https://equinor.github.io/subscript)
|
|
35
35
|
for a complete overview.
|
|
36
36
|
|
|
@@ -51,7 +51,6 @@ dependencies = [
|
|
|
51
51
|
"seaborn",
|
|
52
52
|
"segyio",
|
|
53
53
|
"shapely",
|
|
54
|
-
"urllib3<2",
|
|
55
54
|
"xlrd",
|
|
56
55
|
"xtgeo",
|
|
57
56
|
]
|
|
@@ -108,7 +107,6 @@ prtvol2csv = "subscript.prtvol2csv.prtvol2csv:main"
|
|
|
108
107
|
restartthinner = "subscript.restartthinner.restartthinner:main"
|
|
109
108
|
ri_wellmod = "subscript.ri_wellmod.ri_wellmod:main"
|
|
110
109
|
rmsecl_volumetrics = "subscript.rmsecl_volumetrics.rmsecl_volumetrics:main"
|
|
111
|
-
runrms = "subscript.runrms.runrms:main"
|
|
112
110
|
sector2fluxnum = "subscript.sector2fluxnum.sector2fluxnum:main"
|
|
113
111
|
summaryplot = "subscript.summaryplot.summaryplot:main"
|
|
114
112
|
sw_model_utilities = "subscript.sw_model_utilities.sw_model_utilities:main"
|
|
@@ -11,7 +11,7 @@ from subscript import __version__
|
|
|
11
11
|
DESCRIPTION = """
|
|
12
12
|
Print list of users running on cluster, sorted by number of jobs.
|
|
13
13
|
|
|
14
|
-
This is statistics derived from the system command `bjobs` and `
|
|
14
|
+
This is statistics derived from the system command `bjobs` and `pinky`.
|
|
15
15
|
"""
|
|
16
16
|
|
|
17
17
|
|
|
@@ -77,55 +77,62 @@ def get_jobs(status: str, bjobs_function: Callable) -> pd.DataFrame:
|
|
|
77
77
|
)
|
|
78
78
|
|
|
79
79
|
|
|
80
|
-
def
|
|
81
|
-
"""Call the system utility '
|
|
80
|
+
def call_pinky(username: str) -> str:
|
|
81
|
+
"""Call the system utility 'pinky' on a specific username
|
|
82
82
|
|
|
83
83
|
Returns:
|
|
84
|
-
Unicode string with the first line of output from '
|
|
84
|
+
Unicode string with the first line of output from 'pinky'
|
|
85
85
|
Example return value::
|
|
86
86
|
|
|
87
|
-
Login: foobert
|
|
87
|
+
Login name: foobert In real life: Foo Barrer (FOO BAR COM)"
|
|
88
88
|
"""
|
|
89
|
-
cmd = f"
|
|
90
|
-
|
|
89
|
+
cmd = f"pinky -l {username} | head -n 1"
|
|
90
|
+
pinky_output = None
|
|
91
91
|
try:
|
|
92
92
|
with open(os.devnull, "w", encoding="utf8") as devnull:
|
|
93
|
-
|
|
93
|
+
pinky_output = (
|
|
94
94
|
subprocess.check_output(cmd, shell=True, stderr=devnull)
|
|
95
95
|
.strip()
|
|
96
96
|
.decode("utf-8")
|
|
97
97
|
)
|
|
98
98
|
except AttributeError:
|
|
99
99
|
pass
|
|
100
|
-
if
|
|
101
|
-
return
|
|
102
|
-
# When
|
|
103
|
-
return f"Login: {username}
|
|
100
|
+
if pinky_output:
|
|
101
|
+
return pinky_output
|
|
102
|
+
# When pinky fails, return something similar and usable
|
|
103
|
+
return f"Login name: {username} In real life: ?? ()"
|
|
104
104
|
|
|
105
105
|
|
|
106
|
-
def userinfo(username: str,
|
|
106
|
+
def userinfo(username: str, pinky_function: Callable) -> str:
|
|
107
107
|
"""Get information on a user based on the username
|
|
108
108
|
|
|
109
109
|
Args:
|
|
110
110
|
username: user shortname/loginname
|
|
111
|
-
|
|
112
|
-
from the system
|
|
111
|
+
pinky_function: Function handle that can provide output
|
|
112
|
+
from the system pinky program (/usr/bin/pinky).
|
|
113
113
|
The output must be a Unicode string
|
|
114
114
|
|
|
115
115
|
Returns:
|
|
116
|
-
str: String with full user name, organization from
|
|
116
|
+
str: String with full user name, organization from pinky output and
|
|
117
117
|
the shortname
|
|
118
118
|
"""
|
|
119
|
-
|
|
120
|
-
rex_with_org = re.compile(
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
119
|
+
pinky_output = pinky_function(username)
|
|
120
|
+
rex_with_org = re.compile(
|
|
121
|
+
r".*Login name:\s+(.*)\s+In real life:\s+(.*)\s+\((.*)\).*"
|
|
122
|
+
)
|
|
123
|
+
rex_no_org = re.compile(r".*Login name:\s+(.*)\s+In real life:\s+(.*)")
|
|
124
|
+
if rex_with_org.match(pinky_output):
|
|
125
|
+
matches = rex_with_org.match(pinky_output).groups() # type: ignore
|
|
126
|
+
fullname = matches[1].strip()
|
|
124
127
|
org = matches[2].strip()
|
|
128
|
+
elif rex_no_org.match(pinky_output):
|
|
129
|
+
matches = rex_no_org.match(pinky_output).groups() # type: ignore
|
|
130
|
+
fullname = matches[1].strip()
|
|
131
|
+
org = ""
|
|
125
132
|
else:
|
|
126
|
-
|
|
133
|
+
fullname = username
|
|
127
134
|
org = ""
|
|
128
|
-
|
|
135
|
+
|
|
129
136
|
return f"{fullname} ({org}) ({username})"
|
|
130
137
|
|
|
131
138
|
|
|
@@ -138,7 +145,7 @@ def show_status(status: str = "RUN", title: str = "Running", umax: int = 10) ->
|
|
|
138
145
|
print(
|
|
139
146
|
count[0],
|
|
140
147
|
userinfo( # lgtm [py/clear-text-logging-sensitive-data]
|
|
141
|
-
str(user),
|
|
148
|
+
str(user), call_pinky
|
|
142
149
|
),
|
|
143
150
|
)
|
|
144
151
|
print("- - - - - - - - - - -")
|
|
@@ -950,7 +950,7 @@ Initializing model
|
|
|
950
950
|
low=near_fracture_vug_fraction_dist[0],
|
|
951
951
|
high=near_fracture_vug_fraction_dist[1],
|
|
952
952
|
size=1,
|
|
953
|
-
)
|
|
953
|
+
)[0]
|
|
954
954
|
* self._total_matrix_cells
|
|
955
955
|
)
|
|
956
956
|
)
|
|
@@ -1020,7 +1020,7 @@ Initializing model
|
|
|
1020
1020
|
low=near_streak_vug_fraction_dist[0],
|
|
1021
1021
|
high=near_streak_vug_fraction_dist[1],
|
|
1022
1022
|
size=1,
|
|
1023
|
-
)
|
|
1023
|
+
)[0]
|
|
1024
1024
|
* self._total_matrix_cells
|
|
1025
1025
|
)
|
|
1026
1026
|
)
|
|
@@ -1077,7 +1077,7 @@ Initializing model
|
|
|
1077
1077
|
low=random_vug_fraction_dist[0],
|
|
1078
1078
|
high=random_vug_fraction_dist[1],
|
|
1079
1079
|
size=1,
|
|
1080
|
-
)
|
|
1080
|
+
)[0]
|
|
1081
1081
|
* self._total_matrix_cells
|
|
1082
1082
|
)
|
|
1083
1083
|
)
|
|
@@ -319,7 +319,7 @@ def csv_stack(
|
|
|
319
319
|
# the rows that emerged from the stacking. If you use the
|
|
320
320
|
# 'all' pivottype, then you will get some NaN-values in the
|
|
321
321
|
# MultiIndex columns that are intentional.
|
|
322
|
-
dframe[nostackcolumnnames] = dframe[nostackcolumnnames].
|
|
322
|
+
dframe[nostackcolumnnames] = dframe[nostackcolumnnames].ffill()
|
|
323
323
|
|
|
324
324
|
dframe = dframe.reset_index()
|
|
325
325
|
|
|
@@ -42,6 +42,7 @@ ALLOWLIST_KEYWORDS = {
|
|
|
42
42
|
"EXTREPGL",
|
|
43
43
|
"FIP",
|
|
44
44
|
"FIPNUM",
|
|
45
|
+
"FLUXNUM",
|
|
45
46
|
"GASADCO",
|
|
46
47
|
"GASADEC",
|
|
47
48
|
"GASCONC",
|
|
@@ -66,6 +67,10 @@ ALLOWLIST_KEYWORDS = {
|
|
|
66
67
|
"IONROCK",
|
|
67
68
|
"ISTNUM",
|
|
68
69
|
"KRNUMMF",
|
|
70
|
+
"KRO",
|
|
71
|
+
"KRORG",
|
|
72
|
+
"KRORW",
|
|
73
|
+
"KRW",
|
|
69
74
|
"LANGMPL",
|
|
70
75
|
"LANGMULC",
|
|
71
76
|
"LANGMULT",
|
|
@@ -100,6 +105,7 @@ ALLOWLIST_KEYWORDS = {
|
|
|
100
105
|
"LX",
|
|
101
106
|
"LY",
|
|
102
107
|
"LZ",
|
|
108
|
+
"MINPVV",
|
|
103
109
|
"MISCNUM",
|
|
104
110
|
"MLANG",
|
|
105
111
|
"MLANGSLV",
|
|
@@ -161,6 +167,8 @@ ALLOWLIST_KEYWORDS = {
|
|
|
161
167
|
"SATNUM",
|
|
162
168
|
"SFOAM",
|
|
163
169
|
"SGAS",
|
|
170
|
+
"SGCR",
|
|
171
|
+
"SGL",
|
|
164
172
|
"SGLPC",
|
|
165
173
|
"SGWCR",
|
|
166
174
|
"SKRO",
|
|
@@ -169,11 +177,16 @@ ALLOWLIST_KEYWORDS = {
|
|
|
169
177
|
"SKRW",
|
|
170
178
|
"SKRWR",
|
|
171
179
|
"SOCRS",
|
|
180
|
+
"SOGCR",
|
|
172
181
|
"SOLVCONC",
|
|
173
182
|
"SOLVFRAC",
|
|
174
183
|
"SOLWNUM",
|
|
175
184
|
"SORBFRAC",
|
|
176
185
|
"SORBPRES",
|
|
186
|
+
"SOWCR",
|
|
187
|
+
"SWCR",
|
|
188
|
+
"SWL",
|
|
189
|
+
"SWU",
|
|
177
190
|
"SPOLY",
|
|
178
191
|
"SSGCR",
|
|
179
192
|
"SSGL",
|
|
@@ -291,10 +291,13 @@ def convert_dframe_date_to_str(dframe: pd.DataFrame) -> pd.DataFrame:
|
|
|
291
291
|
"""
|
|
292
292
|
if "DATE" in dframe:
|
|
293
293
|
dframe = dframe.copy()
|
|
294
|
-
dframe["DATE"] =
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
294
|
+
dframe["DATE"] = (
|
|
295
|
+
dframe["DATE"]
|
|
296
|
+
.astype(str)
|
|
297
|
+
.replace(["NaT", "NaN", "nan"], np.nan)
|
|
298
|
+
.infer_objects()
|
|
299
|
+
)
|
|
300
|
+
|
|
298
301
|
return dframe
|
|
299
302
|
|
|
300
303
|
|
|
@@ -186,7 +186,7 @@ def make_wateroilgas(dframe: pd.DataFrame, delta_s: float) -> pyscal.WaterOilGas
|
|
|
186
186
|
.sort_index()
|
|
187
187
|
.dropna(how="all")
|
|
188
188
|
.interpolate(method="index")
|
|
189
|
-
.
|
|
189
|
+
.bfill()
|
|
190
190
|
.round(8)
|
|
191
191
|
.drop_duplicates()
|
|
192
192
|
.reset_index()
|
|
@@ -197,7 +197,7 @@ def make_wateroilgas(dframe: pd.DataFrame, delta_s: float) -> pyscal.WaterOilGas
|
|
|
197
197
|
.sort_index()
|
|
198
198
|
.dropna(how="all")
|
|
199
199
|
.interpolate(method="index")
|
|
200
|
-
.
|
|
200
|
+
.bfill()
|
|
201
201
|
.round(8)
|
|
202
202
|
.drop_duplicates()
|
|
203
203
|
.reset_index()
|
|
@@ -4,11 +4,13 @@ data, ensuring labels for each value matches).
|
|
|
4
4
|
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
7
9
|
import argparse
|
|
8
10
|
import logging
|
|
9
|
-
import re
|
|
10
11
|
import shutil
|
|
11
12
|
from glob import glob
|
|
13
|
+
from pathlib import Path
|
|
12
14
|
|
|
13
15
|
import pandas as pd
|
|
14
16
|
from ert.config import ErtScript
|
|
@@ -27,7 +29,7 @@ parameters.txt is a text file with <key> <value> on each line
|
|
|
27
29
|
In the CSV file, each individual parameter file will be represented by one data row.
|
|
28
30
|
The order of parameters in each text file is not conserved.
|
|
29
31
|
|
|
30
|
-
The original filename for each file is written to the column
|
|
32
|
+
The original filename for each file is written to the column 'filename'.
|
|
31
33
|
Beware if you have that as a <key> in the text files.
|
|
32
34
|
"""
|
|
33
35
|
|
|
@@ -55,15 +57,31 @@ The `filename` column can be renamed by adding an argument <FILENAMECOLUMN> to t
|
|
|
55
57
|
# The following string is used for the ERT workflow documentation, note
|
|
56
58
|
# the very subtle difference in variable name.
|
|
57
59
|
WORKFLOW_EXAMPLE = """
|
|
58
|
-
Add a file named e.g. ``ert/bin/workflows/
|
|
60
|
+
Add a file named e.g. ``ert/bin/workflows/wf_params2csv_iter0`` with the contents::
|
|
61
|
+
|
|
59
62
|
MAKE_DIRECTORY <SCRATCH>/<USER>/<CASE_DIR>/share/results/tables
|
|
60
63
|
PARAMS2CSV "--verbose" "-o" <SCRATCH>/<USER>/<CASE_DIR>/share/results/tables/parameters_iter-0.csv <SCRATCH>/<USER>/<CASE_DIR>/realization-*/iter-0/parameters.txt
|
|
61
64
|
|
|
62
65
|
Add to your ERT config to have the workflow loaded upon launching::
|
|
63
66
|
|
|
64
|
-
LOAD_WORKFLOW ../bin/workflows/
|
|
67
|
+
LOAD_WORKFLOW ../bin/workflows/wf_params2csv_iter0
|
|
68
|
+
|
|
69
|
+
It is then possible to run the workflow either through ERT CLI or GUI.
|
|
70
|
+
|
|
71
|
+
Wildcards can be used to extract parameters from multiple iterations,
|
|
72
|
+
this is done in the example below. Note also the use of ``HOOK_WORKFLOW`` to automatically
|
|
73
|
+
run the workflow when all realizations have finished.
|
|
74
|
+
|
|
75
|
+
Add a file named e.g. ``ert/bin/workflows/wf_params2csv_hist`` with the contents::
|
|
76
|
+
|
|
77
|
+
MAKE_DIRECTORY <SCRATCH>/<USER>/<CASE_DIR>/share/results/tables
|
|
78
|
+
PARAMS2CSV "--verbose" "-o" <SCRATCH>/<USER>/<CASE_DIR>/share/results/tables/parameters_hist.csv <SCRATCH>/<USER>/<CASE_DIR>/realization-*/iter-*/parameters.txt
|
|
79
|
+
|
|
80
|
+
Add to your ERT config to have the workflow automatically executed on successful runs::
|
|
81
|
+
|
|
82
|
+
LOAD_WORKFLOW ../bin/workflows/wf_params2csv_hist
|
|
83
|
+
HOOK_WORKFLOW wf_params2csv_hist POST_SIMULATION
|
|
65
84
|
|
|
66
|
-
It is then possible to run the workflow either through ERT CLI or GUI.
|
|
67
85
|
""" # noqa
|
|
68
86
|
|
|
69
87
|
|
|
@@ -153,26 +171,33 @@ def params2csv_main(args: argparse.Namespace) -> None:
|
|
|
153
171
|
if args.verbose:
|
|
154
172
|
logger.setLevel(logging.INFO)
|
|
155
173
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
174
|
+
possible_metadata_columns = [
|
|
175
|
+
"ENSEMBLESET",
|
|
176
|
+
"REAL",
|
|
177
|
+
"ENSEMBLE",
|
|
178
|
+
"ITER",
|
|
179
|
+
args.filenamecolumnname,
|
|
159
180
|
]
|
|
160
181
|
|
|
161
|
-
|
|
182
|
+
# Expand wildcards if not being expanded
|
|
183
|
+
paramfile_paths = [
|
|
184
|
+
Path(path) for pattern in args.parameterfile for path in sorted(glob(pattern))
|
|
185
|
+
]
|
|
162
186
|
|
|
163
|
-
|
|
164
|
-
for
|
|
165
|
-
|
|
166
|
-
paramtable = pd.read_csv(parameterfilename, header=None, sep=r"\s+")
|
|
167
|
-
parsedfiles = parsedfiles + 1
|
|
168
|
-
except IOError:
|
|
187
|
+
dfs = []
|
|
188
|
+
for parameterfilename in paramfile_paths:
|
|
189
|
+
if not parameterfilename.exists():
|
|
169
190
|
logger.warning("%s not found, skipping..", parameterfilename)
|
|
170
191
|
continue
|
|
171
192
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
193
|
+
paramtable = pd.read_csv(
|
|
194
|
+
parameterfilename,
|
|
195
|
+
names=["key", "value"],
|
|
196
|
+
header=None,
|
|
197
|
+
usecols=[0, 1],
|
|
198
|
+
sep=r"\s+",
|
|
199
|
+
)
|
|
200
|
+
|
|
176
201
|
paramtable.drop_duplicates(
|
|
177
202
|
"key", keep="last", inplace=True
|
|
178
203
|
) # if key is repeated, keep the last one.
|
|
@@ -185,28 +210,28 @@ def params2csv_main(args: argparse.Namespace) -> None:
|
|
|
185
210
|
parameterfilename,
|
|
186
211
|
)
|
|
187
212
|
else:
|
|
188
|
-
transposed
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
"Iter",
|
|
206
|
-
re.match(iterregex, parameterfilename).group(1), # type: ignore
|
|
207
|
-
)
|
|
213
|
+
transposed[args.filenamecolumnname] = str(parameterfilename)
|
|
214
|
+
|
|
215
|
+
path_metadata = get_metadata_from_path(parameterfilename.resolve())
|
|
216
|
+
if path_metadata is not None:
|
|
217
|
+
case_folder, iter_folder, iteration, real = path_metadata
|
|
218
|
+
transposed["ENSEMBLESET"] = case_folder
|
|
219
|
+
transposed["ENSEMBLE"] = iter_folder
|
|
220
|
+
transposed["ITER"] = iteration
|
|
221
|
+
transposed["REAL"] = real
|
|
222
|
+
dfs.append(transposed)
|
|
223
|
+
|
|
224
|
+
if not dfs:
|
|
225
|
+
raise ValueError("No parameterfiles was found, check the input path provided")
|
|
226
|
+
ens = pd.concat(dfs)
|
|
227
|
+
|
|
228
|
+
metadata_columns = [col for col in possible_metadata_columns if col in ens]
|
|
229
|
+
parameter_columns = [col for col in ens.columns if col not in metadata_columns]
|
|
208
230
|
|
|
209
|
-
|
|
231
|
+
# reorder dataframe and sort by ensemble and realization if present
|
|
232
|
+
ens = ens[metadata_columns + parameter_columns]
|
|
233
|
+
if "REAL" in metadata_columns:
|
|
234
|
+
ens = ens.sort_values(["ENSEMBLE", "REAL"])
|
|
210
235
|
|
|
211
236
|
if args.clean:
|
|
212
237
|
# Users wants the script to write back to parameters.txt a
|
|
@@ -214,23 +239,21 @@ def params2csv_main(args: argparse.Namespace) -> None:
|
|
|
214
239
|
# parameters is equal in an entire ensemble, and so that
|
|
215
240
|
# duplicate keys are removed Parameters only existing in some
|
|
216
241
|
# realizations will be NaN-padded in the others.
|
|
217
|
-
|
|
218
|
-
ensidx = ens.reset_index().drop(["index", "filename"], axis=1)
|
|
219
|
-
for row in list(ensidx.index.values):
|
|
220
|
-
paramfile = ensfilenames.loc[row]
|
|
242
|
+
for paramfile, realdf in ens.groupby(args.filenamecolumnname):
|
|
221
243
|
shutil.copyfile(paramfile, paramfile + ".backup")
|
|
222
244
|
logger.info("Writing to %s", paramfile)
|
|
223
|
-
|
|
245
|
+
realdf = realdf[parameter_columns].transpose()
|
|
246
|
+
realdf.to_csv(paramfile, sep=" ", na_rep="NaN", header=False)
|
|
224
247
|
|
|
225
248
|
# Drop constant columns:
|
|
226
249
|
if not args.keepconstantcolumns:
|
|
227
|
-
for col in
|
|
250
|
+
for col in parameter_columns:
|
|
228
251
|
if len(ens[col].unique()) == 1:
|
|
229
252
|
del ens[col]
|
|
230
253
|
logger.warning("Dropping constant column %s", col)
|
|
231
254
|
|
|
232
255
|
ens.to_csv(args.output, index=False)
|
|
233
|
-
logger.info("%s parameterfiles written to %s",
|
|
256
|
+
logger.info("%s parameterfiles written to %s", len(dfs), args.output)
|
|
234
257
|
|
|
235
258
|
|
|
236
259
|
def main() -> None:
|
|
@@ -251,5 +274,33 @@ def legacy_ertscript_workflow(config) -> None:
|
|
|
251
274
|
workflow.category = CATEGORY
|
|
252
275
|
|
|
253
276
|
|
|
277
|
+
def get_metadata_from_path(paramfile: Path) -> tuple[str, str, int, int] | None:
|
|
278
|
+
"""Get some metadata from the Path object"""
|
|
279
|
+
|
|
280
|
+
real_path = get_realization_path(paramfile)
|
|
281
|
+
if not real_path:
|
|
282
|
+
return None
|
|
283
|
+
|
|
284
|
+
real = get_number_from_folder(real_path.stem)
|
|
285
|
+
case_folder = real_path.parent.stem
|
|
286
|
+
|
|
287
|
+
# if real folder is direct parent to runpath, there is no iter
|
|
288
|
+
iter_folder = paramfile.parent.stem if real_path != paramfile.parent else "iter-0"
|
|
289
|
+
iteration = (
|
|
290
|
+
get_number_from_folder(iter_folder) if iter_folder.startswith("iter-") else 0
|
|
291
|
+
)
|
|
292
|
+
return case_folder, iter_folder, iteration, real
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
def get_realization_path(path: Path) -> Path | None:
|
|
296
|
+
"""Retrive the realization path, return None if not found"""
|
|
297
|
+
return next((p for p in path.parents if p.stem.startswith("realization-")), None)
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
def get_number_from_folder(foldername: str) -> int:
|
|
301
|
+
"""Retrive the integer after the '-' from the folder name"""
|
|
302
|
+
return int(foldername.split("-")[-1])
|
|
303
|
+
|
|
304
|
+
|
|
254
305
|
if __name__ == "__main__":
|
|
255
306
|
main()
|
|
@@ -369,13 +369,13 @@ def calc_presentvalue_df(
|
|
|
369
369
|
prodecon = pd.concat([summary_df, econ_df], axis=1, sort=True)
|
|
370
370
|
prodecon[["oilprice", "gasprice", "usdtonok", "discountrate"]] = prodecon[
|
|
371
371
|
["oilprice", "gasprice", "usdtonok", "discountrate"]
|
|
372
|
-
].
|
|
372
|
+
].ffill()
|
|
373
373
|
# Avoid ffilling costs...
|
|
374
374
|
# There could be situations where we need to bfill prices as well,
|
|
375
375
|
# if the user provided a econtable
|
|
376
376
|
prodecon[["oilprice", "gasprice", "usdtonok", "discountrate"]] = prodecon[
|
|
377
377
|
["oilprice", "gasprice", "usdtonok", "discountrate"]
|
|
378
|
-
].
|
|
378
|
+
].bfill()
|
|
379
379
|
prodecon.fillna(value=0, inplace=True) # Zero-pad other data (costs)
|
|
380
380
|
|
|
381
381
|
prodecon["deltayears"] = prodecon.index - discountto
|
|
@@ -323,7 +323,11 @@ def prtvol2df(
|
|
|
323
323
|
and add REGION and ZONE parameter.
|
|
324
324
|
"""
|
|
325
325
|
# Concatenate dataframes horizontally. Both are/must be indexed by FIPNUM:
|
|
326
|
-
volumes =
|
|
326
|
+
volumes = (
|
|
327
|
+
pd.concat([simvolumes_df, resvolumes_df], axis=1)
|
|
328
|
+
.apply(pd.to_numeric)
|
|
329
|
+
.fillna(value=0.0)
|
|
330
|
+
)
|
|
327
331
|
|
|
328
332
|
if fipmapper is not None:
|
|
329
333
|
if fipmapper.has_fip2region:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: subscript
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.5.0
|
|
4
4
|
Summary: Equinor's collection of subsurface reservoir modelling scripts
|
|
5
5
|
Author-email: Equinor <rnyb@equinor.com>
|
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
|
@@ -713,7 +713,6 @@ Requires-Dist: scipy
|
|
|
713
713
|
Requires-Dist: seaborn
|
|
714
714
|
Requires-Dist: segyio
|
|
715
715
|
Requires-Dist: shapely
|
|
716
|
-
Requires-Dist: urllib3<2
|
|
717
716
|
Requires-Dist: xlrd
|
|
718
717
|
Requires-Dist: xtgeo
|
|
719
718
|
Provides-Extra: tests
|
|
@@ -769,7 +768,7 @@ pip install subscript
|
|
|
769
768
|
## Usage
|
|
770
769
|
|
|
771
770
|
As a collection of utilities subscript has many different invocations and
|
|
772
|
-
|
|
771
|
+
use cases. A complete overview can be found in the
|
|
773
772
|
[documentation](https://equinor.github.io/subscript)
|
|
774
773
|
for a complete overview.
|
|
775
774
|
|
|
@@ -46,7 +46,6 @@ docs/scripts/restartthinner.rst
|
|
|
46
46
|
docs/scripts/ri_wellmod.rst
|
|
47
47
|
docs/scripts/rmsecl_volumetrics.rst
|
|
48
48
|
docs/scripts/runeclipse.rst
|
|
49
|
-
docs/scripts/runrms.rst
|
|
50
49
|
docs/scripts/sector2fluxnum.rst
|
|
51
50
|
docs/scripts/summaryplot.rst
|
|
52
51
|
docs/scripts/sunsch.rst
|
|
@@ -155,8 +154,6 @@ src/subscript/ri_wellmod/__init__.py
|
|
|
155
154
|
src/subscript/ri_wellmod/ri_wellmod.py
|
|
156
155
|
src/subscript/rmsecl_volumetrics/__init__.py
|
|
157
156
|
src/subscript/rmsecl_volumetrics/rmsecl_volumetrics.py
|
|
158
|
-
src/subscript/runrms/__init__.py
|
|
159
|
-
src/subscript/runrms/runrms.py
|
|
160
157
|
src/subscript/sector2fluxnum/__init__.py
|
|
161
158
|
src/subscript/sector2fluxnum/completions.py
|
|
162
159
|
src/subscript/sector2fluxnum/datafile_obj.py
|
|
@@ -204,7 +201,6 @@ tests/test_prtvol2csv.py
|
|
|
204
201
|
tests/test_restartthinner.py
|
|
205
202
|
tests/test_ri_wellmod.py
|
|
206
203
|
tests/test_rmsecl_volumetrics.py
|
|
207
|
-
tests/test_runrms.py
|
|
208
204
|
tests/test_sector2fluxnum.py
|
|
209
205
|
tests/test_subscriptlogger.py
|
|
210
206
|
tests/test_summaryplot.py
|
|
@@ -296,7 +292,6 @@ tests/testdata_ri_wellmod/drogon_include/grid/drogon.perm.grdecl
|
|
|
296
292
|
tests/testdata_ri_wellmod/drogon_trajectories/rft_wells.dat
|
|
297
293
|
tests/testdata_ri_wellmod/drogon_trajectories/wells.dat
|
|
298
294
|
tests/testdata_ri_wellmod/reek_trajectories/reek_wells.dat
|
|
299
|
-
tests/testdata_runrms/runrms.yml
|
|
300
295
|
tests/testdata_sector2fluxnum/DUMPFLUX_TEST.DATA
|
|
301
296
|
tests/testdata_sector2fluxnum/DUMPFLUX_TEST.EGRID
|
|
302
297
|
tests/testdata_sector2fluxnum/DUMPFLUX_TEST.FLUX
|