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.
Files changed (317) hide show
  1. {subscript-1.3.0 → subscript-1.5.0}/.github/workflows/codecov.yml +2 -2
  2. {subscript-1.3.0 → subscript-1.5.0}/.github/workflows/publish.yml +2 -2
  3. {subscript-1.3.0 → subscript-1.5.0}/.github/workflows/subscript.yml +2 -2
  4. {subscript-1.3.0 → subscript-1.5.0}/PKG-INFO +2 -3
  5. {subscript-1.3.0 → subscript-1.5.0}/README.md +1 -1
  6. {subscript-1.3.0 → subscript-1.5.0}/docs/overview.rst +0 -1
  7. {subscript-1.3.0 → subscript-1.5.0}/pyproject.toml +0 -2
  8. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/bjobsusers/bjobsusers.py +31 -24
  9. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/casegen_upcars/model.py +3 -3
  10. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/csv_stack/csv_stack.py +1 -1
  11. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/eclcompress/allowlist.py +13 -0
  12. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/fmuobs/writers.py +7 -4
  13. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/interp_relperm/interp_relperm.py +2 -2
  14. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/params2csv/params2csv.py +98 -47
  15. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/presentvalue/presentvalue.py +2 -2
  16. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/prtvol2csv/prtvol2csv.py +5 -1
  17. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/version.py +2 -2
  18. {subscript-1.3.0 → subscript-1.5.0}/src/subscript.egg-info/PKG-INFO +2 -3
  19. {subscript-1.3.0 → subscript-1.5.0}/src/subscript.egg-info/SOURCES.txt +0 -5
  20. {subscript-1.3.0 → subscript-1.5.0}/src/subscript.egg-info/entry_points.txt +0 -1
  21. {subscript-1.3.0 → subscript-1.5.0}/src/subscript.egg-info/requires.txt +0 -1
  22. {subscript-1.3.0 → subscript-1.5.0}/tests/test_bjobsusers.py +9 -9
  23. {subscript-1.3.0 → subscript-1.5.0}/tests/test_params2csv.py +118 -13
  24. {subscript-1.3.0 → subscript-1.5.0}/tests/test_ri_wellmod.py +18 -3
  25. {subscript-1.3.0 → subscript-1.5.0}/tests/test_welltest_dpds.py +2 -2
  26. subscript-1.3.0/docs/scripts/runrms.rst +0 -8
  27. subscript-1.3.0/src/subscript/runrms/runrms.py +0 -871
  28. subscript-1.3.0/tests/__init__.py +0 -0
  29. subscript-1.3.0/tests/test_runrms.py +0 -307
  30. subscript-1.3.0/tests/testdata_runrms/runrms.yml +0 -65
  31. {subscript-1.3.0 → subscript-1.5.0}/.gitignore +0 -0
  32. {subscript-1.3.0 → subscript-1.5.0}/.pylintrc +0 -0
  33. {subscript-1.3.0 → subscript-1.5.0}/LICENSE +0 -0
  34. {subscript-1.3.0 → subscript-1.5.0}/SECURITY.md +0 -0
  35. {subscript-1.3.0 → subscript-1.5.0}/ci/testkomodo.sh +0 -0
  36. {subscript-1.3.0 → subscript-1.5.0}/docs/Makefile +0 -0
  37. {subscript-1.3.0 → subscript-1.5.0}/docs/_static/equinor-logo.png +0 -0
  38. {subscript-1.3.0 → subscript-1.5.0}/docs/_static/equinor-logo2.jpg +0 -0
  39. {subscript-1.3.0 → subscript-1.5.0}/docs/_static/equinor-logo2.png +0 -0
  40. {subscript-1.3.0 → subscript-1.5.0}/docs/_static/equinor_logo.jpg +0 -0
  41. {subscript-1.3.0 → subscript-1.5.0}/docs/_static/equinor_logo_only.jpg +0 -0
  42. {subscript-1.3.0 → subscript-1.5.0}/docs/_templates/layout.html +0 -0
  43. {subscript-1.3.0 → subscript-1.5.0}/docs/conf.py +0 -0
  44. {subscript-1.3.0 → subscript-1.5.0}/docs/contributing.rst +0 -0
  45. {subscript-1.3.0 → subscript-1.5.0}/docs/history.rst +0 -0
  46. {subscript-1.3.0 → subscript-1.5.0}/docs/index.rst +0 -0
  47. {subscript-1.3.0 → subscript-1.5.0}/docs/make.bat +0 -0
  48. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/bjobsusers.rst +0 -0
  49. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/casegen_upcars.rst +0 -0
  50. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/check_swatinit.rst +0 -0
  51. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/convert_grid_format.rst +0 -0
  52. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/csv2ofmvol.rst +0 -0
  53. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/csv_merge.rst +0 -0
  54. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/csv_stack.rst +0 -0
  55. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/eclcompress.rst +0 -0
  56. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/ecldiff2roff.rst +0 -0
  57. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/fmu_copy_revision.rst +0 -0
  58. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/fmuobs.rst +0 -0
  59. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/images/Pack_sim_overview.png +0 -0
  60. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/images/Summaryplot-ensemble.png +0 -0
  61. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/images/Summaryplot-ert.png +0 -0
  62. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/images/Summaryplot-normalizeexample.png +0 -0
  63. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/images/Workflow_sector2fluxnum.png +0 -0
  64. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/images/casegen_upcars_geometry.png +0 -0
  65. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/images/check_swatinit_scatter.png +0 -0
  66. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/images/check_swatinit_volplot.png +0 -0
  67. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/images/ecl-swat-initialization.png +0 -0
  68. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/images/make_check_swatinit_images.sh +0 -0
  69. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/images/resinsight_wells_project_example.png +0 -0
  70. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/interp_relperm.rst +0 -0
  71. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/merge_rft_ertobs.rst +0 -0
  72. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/merge_unrst_files.rst +0 -0
  73. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/ofmvol2csv.rst +0 -0
  74. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/pack_sim.rst +0 -0
  75. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/params2csv.rst +0 -0
  76. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/presentvalue.rst +0 -0
  77. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/prtvol2csv.csv +0 -0
  78. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/prtvol2csv.rst +0 -0
  79. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/restartthinner.rst +0 -0
  80. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/ri_wellmod.rst +0 -0
  81. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/rmsecl_volumetrics.rst +0 -0
  82. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/runeclipse.rst +0 -0
  83. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/sector2fluxnum.rst +0 -0
  84. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/summaryplot.rst +0 -0
  85. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/sunsch.rst +0 -0
  86. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/sw_model_utilities.rst +0 -0
  87. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/vfp2csv.rst +0 -0
  88. {subscript-1.3.0 → subscript-1.5.0}/docs/scripts/welltest_dpds.rst +0 -0
  89. {subscript-1.3.0 → subscript-1.5.0}/docs/usage.rst +0 -0
  90. {subscript-1.3.0 → subscript-1.5.0}/setup.cfg +0 -0
  91. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/__init__.py +0 -0
  92. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/bjobsusers/__init__.py +0 -0
  93. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/casegen_upcars/__init__.py +0 -0
  94. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/casegen_upcars/casegen_upcars.py +0 -0
  95. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/casegen_upcars/udf.py +0 -0
  96. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/casegen_upcars/udf_arg_parser.py +0 -0
  97. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/check_swatinit/__init__.py +0 -0
  98. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/check_swatinit/check_swatinit.py +0 -0
  99. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/check_swatinit/constants.py +0 -0
  100. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/check_swatinit/pillarmodel.py +0 -0
  101. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/check_swatinit/plotter.py +0 -0
  102. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/CASEGEN_UPCARS +0 -0
  103. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/CHECK_SWATINIT +0 -0
  104. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/CSV2OFMVOL +0 -0
  105. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/CSV_STACK +0 -0
  106. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/ECLCOMPRESS +0 -0
  107. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/ECLDIFF2ROFF +0 -0
  108. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/ECLGRID2ROFF +0 -0
  109. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/ECLINIT2ROFF +0 -0
  110. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/ECLRST2ROFF +0 -0
  111. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/INTERP_RELPERM +0 -0
  112. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/MERGE_RFT_ERTOBS +0 -0
  113. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/MERGE_UNRST_FILES +0 -0
  114. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/OFMVOL2CSV +0 -0
  115. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/PARAMS2CSV +0 -0
  116. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/PRTVOL2CSV +0 -0
  117. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/RI_WELLMOD +0 -0
  118. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/SUNSCH +0 -0
  119. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/config_jobs/WELLTEST_DPDS +0 -0
  120. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/convert_grid_format/__init__.py +0 -0
  121. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/convert_grid_format/convert_grid_format.py +0 -0
  122. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/csv2ofmvol/__init__.py +0 -0
  123. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/csv2ofmvol/csv2ofmvol.py +0 -0
  124. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/csv_merge/__init__.py +0 -0
  125. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/csv_merge/csv_merge.py +0 -0
  126. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/csv_stack/__init__.py +0 -0
  127. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/eclcompress/__init__.py +0 -0
  128. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/eclcompress/eclcompress.py +0 -0
  129. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/ecldiff2roff/__init__.py +0 -0
  130. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/ecldiff2roff/ecldiff2roff.py +0 -0
  131. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/eclgrid2roff/eclgrid2roff.py +0 -0
  132. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/eclinit2roff/eclinit2roff.py +0 -0
  133. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/eclrst2roff/eclrst2roff.py +0 -0
  134. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/fmu_copy_revision/__init__.py +0 -0
  135. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/fmu_copy_revision/fmu_copy_revision.py +0 -0
  136. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/fmuobs/__init__.py +0 -0
  137. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/fmuobs/fmuobs.py +0 -0
  138. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/fmuobs/parsers.py +1 -1
  139. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/fmuobs/util.py +0 -0
  140. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/hook_implementations/__init__.py +0 -0
  141. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/hook_implementations/jobs.py +0 -0
  142. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/interp_relperm/__init__.py +0 -0
  143. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/legacy/duf +0 -0
  144. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/legacy/eclmanual +0 -0
  145. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/legacy/ertwatch +0 -0
  146. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/legacy/list_rms_usage +0 -0
  147. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/legacy/nosim +0 -0
  148. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/legacy/runeclipse +0 -0
  149. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/merge_rft_ertobs/__init__.py +0 -0
  150. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/merge_rft_ertobs/merge_rft_ertobs.py +0 -0
  151. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/merge_unrst_files/__init__.py +0 -0
  152. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/merge_unrst_files/merge_unrst_files.py +0 -0
  153. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/ofmvol2csv/__init__.py +0 -0
  154. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/ofmvol2csv/ofmvol2csv.py +0 -0
  155. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/pack_sim/__init__.py +0 -0
  156. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/pack_sim/pack_sim.py +0 -0
  157. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/params2csv/__init__.py +0 -0
  158. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/presentvalue/__init__.py +0 -0
  159. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/prtvol2csv/__init__.py +0 -0
  160. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/restartthinner/__init__.py +0 -0
  161. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/restartthinner/restartthinner.py +0 -0
  162. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/ri_wellmod/__init__.py +0 -0
  163. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/ri_wellmod/ri_wellmod.py +0 -0
  164. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/rmsecl_volumetrics/__init__.py +0 -0
  165. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/rmsecl_volumetrics/rmsecl_volumetrics.py +0 -0
  166. {subscript-1.3.0/src/subscript/runrms → subscript-1.5.0/src/subscript/sector2fluxnum}/__init__.py +0 -0
  167. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/sector2fluxnum/completions.py +0 -0
  168. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/sector2fluxnum/datafile_obj.py +0 -0
  169. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/sector2fluxnum/flux_obj.py +0 -0
  170. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/sector2fluxnum/flux_util.py +0 -0
  171. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/sector2fluxnum/fluxfile_obj.py +0 -0
  172. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/sector2fluxnum/sector2fluxnum.py +0 -0
  173. {subscript-1.3.0/src/subscript/sector2fluxnum → subscript-1.5.0/src/subscript/summaryplot}/__init__.py +0 -0
  174. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/summaryplot/summaryplot.py +0 -0
  175. {subscript-1.3.0/src/subscript/summaryplot → subscript-1.5.0/src/subscript/sunsch}/__init__.py +0 -0
  176. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/sunsch/sunsch.py +0 -0
  177. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/sunsch/time_vector.py +0 -0
  178. {subscript-1.3.0/src/subscript/sunsch → subscript-1.5.0/src/subscript/sw_model_utilities}/__init__.py +0 -0
  179. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/sw_model_utilities/sw_model_utilities.py +0 -0
  180. {subscript-1.3.0/src/subscript/sw_model_utilities → subscript-1.5.0/src/subscript/vfp2csv}/__init__.py +0 -0
  181. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/vfp2csv/vfp2csv.py +0 -0
  182. {subscript-1.3.0/src/subscript/vfp2csv → subscript-1.5.0/src/subscript/welltest_dpds}/__init__.py +0 -0
  183. {subscript-1.3.0 → subscript-1.5.0}/src/subscript/welltest_dpds/welltest_dpds.py +0 -0
  184. {subscript-1.3.0 → subscript-1.5.0}/src/subscript.egg-info/dependency_links.txt +0 -0
  185. {subscript-1.3.0 → subscript-1.5.0}/src/subscript.egg-info/top_level.txt +0 -0
  186. {subscript-1.3.0/src/subscript/welltest_dpds → subscript-1.5.0/tests}/__init__.py +0 -0
  187. {subscript-1.3.0 → subscript-1.5.0}/tests/conftest.py +0 -0
  188. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/grid/reek.faults +0 -0
  189. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/grid/reek.grid +0 -0
  190. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/grid/reek.multflt +0 -0
  191. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/grid/reek.multz +0 -0
  192. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/grid/reek.perm +0 -0
  193. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/grid/reek.poro +0 -0
  194. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/props/let-sgof.txt +0 -0
  195. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/props/let-swof.txt +0 -0
  196. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/props/reek.endpoints +0 -0
  197. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/props/reek.pvt +0 -0
  198. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/props/reek.swatinit +0 -0
  199. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/props/sgof.txt +0 -0
  200. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/props/swof.inc +0 -0
  201. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/props/swof.txt +0 -0
  202. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/regions/reek.eqlnum +0 -0
  203. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/regions/reek.fipnum +0 -0
  204. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/schedule/reek_history.sch +0 -0
  205. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/solution/reek.equil +0 -0
  206. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/include/summary/reek.smry +0 -0
  207. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.DATA +0 -0
  208. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.ECLEND +0 -0
  209. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.EGRID +0 -0
  210. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.INIT +0 -0
  211. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.LOG +0 -0
  212. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.PRT +0 -0
  213. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.RFT +0 -0
  214. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.SMSPEC +0 -0
  215. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.UNRST +0 -0
  216. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.UNSMRY +0 -0
  217. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/eclipse/model/parameters.txt +0 -0
  218. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/parameters.txt +0 -0
  219. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/rms/README +0 -0
  220. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/rms/reek.rms10.1.3/.master +0 -0
  221. {subscript-1.3.0 → subscript-1.5.0}/tests/data/reek/rms/reek.rms11.1.0/.master +0 -0
  222. {subscript-1.3.0 → subscript-1.5.0}/tests/data/vfp/GasProd.VFP +0 -0
  223. {subscript-1.3.0 → subscript-1.5.0}/tests/data/vfp/pd2.VFP +0 -0
  224. {subscript-1.3.0 → subscript-1.5.0}/tests/data/welltest/eclipse/model/DROGON_DST_PLT-0.SMSPEC +0 -0
  225. {subscript-1.3.0 → subscript-1.5.0}/tests/data/welltest/eclipse/model/DROGON_DST_PLT-0.UNSMRY +0 -0
  226. {subscript-1.3.0 → subscript-1.5.0}/tests/test_casegen_upcars.py +0 -0
  227. {subscript-1.3.0 → subscript-1.5.0}/tests/test_check_swatinit.py +0 -0
  228. {subscript-1.3.0 → subscript-1.5.0}/tests/test_check_swatinit_simulators.py +0 -0
  229. {subscript-1.3.0 → subscript-1.5.0}/tests/test_convert_grid_format.py +0 -0
  230. {subscript-1.3.0 → subscript-1.5.0}/tests/test_csv2ofmvol.py +0 -0
  231. {subscript-1.3.0 → subscript-1.5.0}/tests/test_csv_merge.py +0 -0
  232. {subscript-1.3.0 → subscript-1.5.0}/tests/test_csv_stack.py +0 -0
  233. {subscript-1.3.0 → subscript-1.5.0}/tests/test_docs.py +0 -0
  234. {subscript-1.3.0 → subscript-1.5.0}/tests/test_eclcompress.py +0 -0
  235. {subscript-1.3.0 → subscript-1.5.0}/tests/test_ecldiff2roff.py +0 -0
  236. {subscript-1.3.0 → subscript-1.5.0}/tests/test_fmu_copy_revision.py +0 -0
  237. {subscript-1.3.0 → subscript-1.5.0}/tests/test_fmuobs.py +0 -0
  238. {subscript-1.3.0 → subscript-1.5.0}/tests/test_fmuobs_parsers.py +0 -0
  239. {subscript-1.3.0 → subscript-1.5.0}/tests/test_fmuobs_writers.py +0 -0
  240. {subscript-1.3.0 → subscript-1.5.0}/tests/test_hook_implementations.py +0 -0
  241. {subscript-1.3.0 → subscript-1.5.0}/tests/test_interp_relperm.py +0 -0
  242. {subscript-1.3.0 → subscript-1.5.0}/tests/test_merge_rft_ertobs.py +0 -0
  243. {subscript-1.3.0 → subscript-1.5.0}/tests/test_merge_unrst_files.py +0 -0
  244. {subscript-1.3.0 → subscript-1.5.0}/tests/test_ofmvol2csv.py +0 -0
  245. {subscript-1.3.0 → subscript-1.5.0}/tests/test_pack_sim.py +0 -0
  246. {subscript-1.3.0 → subscript-1.5.0}/tests/test_presentvalue.py +0 -0
  247. {subscript-1.3.0 → subscript-1.5.0}/tests/test_prtvol2csv.py +0 -0
  248. {subscript-1.3.0 → subscript-1.5.0}/tests/test_restartthinner.py +0 -0
  249. {subscript-1.3.0 → subscript-1.5.0}/tests/test_rmsecl_volumetrics.py +0 -0
  250. {subscript-1.3.0 → subscript-1.5.0}/tests/test_sector2fluxnum.py +0 -0
  251. {subscript-1.3.0 → subscript-1.5.0}/tests/test_subscriptlogger.py +0 -0
  252. {subscript-1.3.0 → subscript-1.5.0}/tests/test_summaryplot.py +0 -0
  253. {subscript-1.3.0 → subscript-1.5.0}/tests/test_sunsch.py +0 -0
  254. {subscript-1.3.0 → subscript-1.5.0}/tests/test_sw_model_utilities.py +0 -0
  255. {subscript-1.3.0 → subscript-1.5.0}/tests/test_vfp2csv.py +0 -0
  256. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_casegen_upcars/demo_large_scale.yaml +0 -0
  257. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_casegen_upcars/demo_small_scale.yaml +0 -0
  258. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_casegen_upcars/dump_value.tmpl +0 -0
  259. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_casegen_upcars/upcars_eclipse_ref_lg.tmpl +0 -0
  260. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_casegen_upcars/upcars_eclipse_ref_ss.tmpl +0 -0
  261. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_eclcompress/permxyz.grdecl +0 -0
  262. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_fmuobs/drogon_wbhp_rft_wct_gor_tracer_4d.obs +0 -0
  263. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_fmuobs/ert-doc.csv +0 -0
  264. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_fmuobs/ert-doc.obs +0 -0
  265. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_fmuobs/ert-doc.yml +0 -0
  266. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_fmuobs/fmu-ensemble-obs.yml +0 -0
  267. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_fmuobs/hist_obs_wells.txt +0 -0
  268. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_fmuobs/ri-obs.csv +0 -0
  269. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_interp_relperm/cfg.yml +0 -0
  270. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_interp_relperm/sgof_base.inc +0 -0
  271. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_interp_relperm/sgof_opt.inc +0 -0
  272. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_interp_relperm/sgof_pes.inc +0 -0
  273. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_interp_relperm/swof_base.inc +0 -0
  274. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_interp_relperm/swof_opt.inc +0 -0
  275. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_interp_relperm/swof_pes.inc +0 -0
  276. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_rft_ertobs/drogon/gendata_rft.csv +0 -0
  277. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A2.obs +0 -0
  278. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A2.txt +0 -0
  279. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A3.obs +0 -0
  280. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A3.txt +0 -0
  281. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A4.txt +0 -0
  282. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A4_1.obs +0 -0
  283. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A5.obs +0 -0
  284. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A5.txt +0 -0
  285. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A6.obs +0 -0
  286. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A6.txt +0 -0
  287. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_rft_ertobs/drogon/rft/well_date_rft.txt +0 -0
  288. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_unrst_files/HIST.UNRST +0 -0
  289. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_merge_unrst_files/PRED.UNRST +0 -0
  290. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_ofmvol2csv/fileA.vol +0 -0
  291. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_ofmvol2csv/fileB.vol +0 -0
  292. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_ofmvol2csv/fileC.vol +0 -0
  293. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_ofmvol2csv/ofm_example.vol +0 -0
  294. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_ri_wellmod/drogon_include/grid/drogon.grid.grdecl +0 -0
  295. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_ri_wellmod/drogon_include/grid/drogon.ntg.grdecl +0 -0
  296. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_ri_wellmod/drogon_include/grid/drogon.perm.grdecl +0 -0
  297. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_ri_wellmod/drogon_trajectories/rft_wells.dat +0 -0
  298. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_ri_wellmod/drogon_trajectories/wells.dat +0 -0
  299. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_ri_wellmod/drogon_wells_noicd.rsp +0 -0
  300. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_ri_wellmod/reek_trajectories/reek_wells.dat +0 -0
  301. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_ri_wellmod/ri_reek_wells.rsp +0 -0
  302. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sector2fluxnum/DUMPFLUX_TEST.DATA +0 -0
  303. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sector2fluxnum/DUMPFLUX_TEST.EGRID +0 -0
  304. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sector2fluxnum/DUMPFLUX_TEST.FLUX +0 -0
  305. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sector2fluxnum/OUT_COARSE.FLUX +0 -0
  306. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sector2fluxnum/TEST.DATA +0 -0
  307. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sector2fluxnum/TEST.EGRID +0 -0
  308. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sector2fluxnum/TEST.INIT +0 -0
  309. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sector2fluxnum/TEST.UNRST +0 -0
  310. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sunsch/config.yml +0 -0
  311. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sunsch/emptyinit.sch +0 -0
  312. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sunsch/foo1.sch +0 -0
  313. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sunsch/footemplate.sch +0 -0
  314. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sunsch/initwithdates.sch +0 -0
  315. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sunsch/merge2.sch +0 -0
  316. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sunsch/mergeme.sch +0 -0
  317. {subscript-1.3.0 → subscript-1.5.0}/tests/testdata_sunsch/options3.sch +0 -0
@@ -16,10 +16,10 @@ jobs:
16
16
  PYTHON: '3.8'
17
17
 
18
18
  steps:
19
- - uses: actions/checkout@v3
19
+ - uses: actions/checkout@v4
20
20
 
21
21
  - name: Setup Python
22
- uses: actions/setup-python@v4
22
+ uses: actions/setup-python@v5
23
23
  with:
24
24
  python-version: 3.8
25
25
 
@@ -16,12 +16,12 @@ jobs:
16
16
 
17
17
  steps:
18
18
  - name: Checkout
19
- uses: actions/checkout@v3
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@v4
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@v3
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@v4
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.0
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
- usages. It is recommended to visit the
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
- usages. It is recommended to visit the
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
 
@@ -29,7 +29,6 @@ prtvol2csv ✅ ✅ ⛔️
29
29
  restartthinner ✅ ⛔️ ⛔️
30
30
  ri_wellmod ✅ ✅ ⛔️
31
31
  rmsecl_volumetrics ✅ ⛔️ ⛔️
32
- runrms ✅ ⛔️ ⛔️
33
32
  sector2fluxnum ✅ ⛔️ ⛔️
34
33
  summaryplot ✅ ⛔️ ⛔️
35
34
  sw_model_utilities ✅ ⛔️ ⛔️
@@ -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 `finger`.
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 call_finger(username: str) -> str:
81
- """Call the system utility 'finger' on a specific username
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 'finger'
84
+ Unicode string with the first line of output from 'pinky'
85
85
  Example return value::
86
86
 
87
- Login: foobert Name: Foo Barrer (FOO BAR COM)"
87
+ Login name: foobert In real life: Foo Barrer (FOO BAR COM)"
88
88
  """
89
- cmd = f"finger -m {username} | head -n 1"
90
- finger_output = None
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
- finger_output = (
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 finger_output:
101
- return finger_output
102
- # When finger fails, return something similar and usable
103
- return f"Login: {username} Name: ?? ()"
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, finger_function: Callable) -> 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
- finger_function: Function handle that can provide output
112
- from the system finger program (/usr/bin/finger).
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 finger output and
116
+ str: String with full user name, organization from pinky output and
117
117
  the shortname
118
118
  """
119
- finger_output = finger_function(username)
120
- rex_with_org = re.compile(r".*Login:\s+(.*)\s+Name:\s+(.*)\s+\((.*)\).*")
121
- rex_no_org = re.compile(r".*Login:\s+(.*)\s+Name:\s+(.*)")
122
- if rex_with_org.match(finger_output):
123
- matches = rex_with_org.match(finger_output).groups() # type: ignore
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
- matches = rex_no_org.match(finger_output).groups() # type: ignore
133
+ fullname = username
127
134
  org = ""
128
- fullname = matches[1].strip()
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), call_finger
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].fillna(method="ffill")
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"] = dframe["DATE"].astype(str)
295
- dframe["DATE"].replace("NaT", np.nan, inplace=True)
296
- dframe["DATE"].replace("NaN", np.nan, inplace=True)
297
- dframe["DATE"].replace("nan", np.nan, inplace=True)
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
- .fillna(method="bfill")
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
- .fillna(method="bfill")
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 filename’.
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/PARAMS2CSV_ITER0`` with the contents::
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/PARAMS2CSV_ITER0
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
- # Expand wildcards if not being expanded
157
- args.parameterfile = [
158
- path for pattern in args.parameterfile for path in sorted(glob(pattern))
174
+ possible_metadata_columns = [
175
+ "ENSEMBLESET",
176
+ "REAL",
177
+ "ENSEMBLE",
178
+ "ITER",
179
+ args.filenamecolumnname,
159
180
  ]
160
181
 
161
- ens = pd.DataFrame()
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
- parsedfiles = 0
164
- for _, parameterfilename in enumerate(args.parameterfile, start=0):
165
- try:
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
- # Chop to only two colums, set keys, and transpose, and then
173
- # merge with the previous tables
174
- paramtable = pd.DataFrame(paramtable.iloc[:, 0:2])
175
- paramtable.columns = ["key", "value"]
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.insert(0, args.filenamecolumnname, parameterfilename)
189
-
190
- # Look for meta-information in filename
191
- realregex = r".*realization-(\d*)/"
192
- iterregex = r".*iter-(\d*)/"
193
- if (
194
- re.match(realregex, parameterfilename)
195
- and "Realization" not in transposed.columns
196
- ):
197
- transposed.insert(
198
- 0,
199
- "Realization",
200
- re.match(realregex, parameterfilename).group(1), # type: ignore
201
- )
202
- if re.match(iterregex, parameterfilename) and "Iter" not in transposed.columns:
203
- transposed.insert(
204
- 0,
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
- ens = pd.concat([ens, transposed], sort=True)
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
- ensfilenames = ens.reset_index()["filename"]
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
- ensidx.loc[row].to_csv(paramfile, sep=" ", na_rep="NaN", header=False)
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 ens.columns:
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", parsedfiles, args.output)
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
- ].fillna(method="ffill")
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
- ].fillna(method="bfill")
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 = pd.concat([simvolumes_df, resvolumes_df], axis=1).fillna(value=0.0)
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:
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '1.3.0'
16
- __version_tuple__ = version_tuple = (1, 3, 0)
15
+ __version__ = version = '1.5.0'
16
+ __version_tuple__ = version_tuple = (1, 5, 0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: subscript
3
- Version: 1.3.0
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
- usages. It is recommended to visit the
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