subscript 1.3.0__tar.gz → 1.4.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.4.0}/.github/workflows/codecov.yml +2 -2
  2. {subscript-1.3.0 → subscript-1.4.0}/.github/workflows/publish.yml +2 -2
  3. {subscript-1.3.0 → subscript-1.4.0}/.github/workflows/subscript.yml +2 -2
  4. {subscript-1.3.0 → subscript-1.4.0}/PKG-INFO +1 -2
  5. {subscript-1.3.0 → subscript-1.4.0}/pyproject.toml +0 -1
  6. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/casegen_upcars/model.py +3 -3
  7. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/csv_stack/csv_stack.py +1 -1
  8. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/fmuobs/writers.py +7 -4
  9. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/interp_relperm/interp_relperm.py +2 -2
  10. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/params2csv/params2csv.py +98 -47
  11. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/presentvalue/presentvalue.py +2 -2
  12. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/prtvol2csv/prtvol2csv.py +5 -1
  13. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/version.py +2 -2
  14. {subscript-1.3.0 → subscript-1.4.0}/src/subscript.egg-info/PKG-INFO +1 -2
  15. {subscript-1.3.0 → subscript-1.4.0}/src/subscript.egg-info/requires.txt +0 -1
  16. {subscript-1.3.0 → subscript-1.4.0}/tests/test_params2csv.py +118 -13
  17. {subscript-1.3.0 → subscript-1.4.0}/tests/test_ri_wellmod.py +18 -3
  18. {subscript-1.3.0 → subscript-1.4.0}/tests/test_welltest_dpds.py +2 -2
  19. {subscript-1.3.0 → subscript-1.4.0}/.gitignore +0 -0
  20. {subscript-1.3.0 → subscript-1.4.0}/.pylintrc +0 -0
  21. {subscript-1.3.0 → subscript-1.4.0}/LICENSE +0 -0
  22. {subscript-1.3.0 → subscript-1.4.0}/README.md +0 -0
  23. {subscript-1.3.0 → subscript-1.4.0}/SECURITY.md +0 -0
  24. {subscript-1.3.0 → subscript-1.4.0}/ci/testkomodo.sh +0 -0
  25. {subscript-1.3.0 → subscript-1.4.0}/docs/Makefile +0 -0
  26. {subscript-1.3.0 → subscript-1.4.0}/docs/_static/equinor-logo.png +0 -0
  27. {subscript-1.3.0 → subscript-1.4.0}/docs/_static/equinor-logo2.jpg +0 -0
  28. {subscript-1.3.0 → subscript-1.4.0}/docs/_static/equinor-logo2.png +0 -0
  29. {subscript-1.3.0 → subscript-1.4.0}/docs/_static/equinor_logo.jpg +0 -0
  30. {subscript-1.3.0 → subscript-1.4.0}/docs/_static/equinor_logo_only.jpg +0 -0
  31. {subscript-1.3.0 → subscript-1.4.0}/docs/_templates/layout.html +0 -0
  32. {subscript-1.3.0 → subscript-1.4.0}/docs/conf.py +0 -0
  33. {subscript-1.3.0 → subscript-1.4.0}/docs/contributing.rst +0 -0
  34. {subscript-1.3.0 → subscript-1.4.0}/docs/history.rst +0 -0
  35. {subscript-1.3.0 → subscript-1.4.0}/docs/index.rst +0 -0
  36. {subscript-1.3.0 → subscript-1.4.0}/docs/make.bat +0 -0
  37. {subscript-1.3.0 → subscript-1.4.0}/docs/overview.rst +0 -0
  38. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/bjobsusers.rst +0 -0
  39. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/casegen_upcars.rst +0 -0
  40. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/check_swatinit.rst +0 -0
  41. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/convert_grid_format.rst +0 -0
  42. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/csv2ofmvol.rst +0 -0
  43. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/csv_merge.rst +0 -0
  44. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/csv_stack.rst +0 -0
  45. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/eclcompress.rst +0 -0
  46. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/ecldiff2roff.rst +0 -0
  47. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/fmu_copy_revision.rst +0 -0
  48. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/fmuobs.rst +0 -0
  49. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/images/Pack_sim_overview.png +0 -0
  50. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/images/Summaryplot-ensemble.png +0 -0
  51. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/images/Summaryplot-ert.png +0 -0
  52. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/images/Summaryplot-normalizeexample.png +0 -0
  53. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/images/Workflow_sector2fluxnum.png +0 -0
  54. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/images/casegen_upcars_geometry.png +0 -0
  55. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/images/check_swatinit_scatter.png +0 -0
  56. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/images/check_swatinit_volplot.png +0 -0
  57. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/images/ecl-swat-initialization.png +0 -0
  58. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/images/make_check_swatinit_images.sh +0 -0
  59. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/images/resinsight_wells_project_example.png +0 -0
  60. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/interp_relperm.rst +0 -0
  61. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/merge_rft_ertobs.rst +0 -0
  62. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/merge_unrst_files.rst +0 -0
  63. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/ofmvol2csv.rst +0 -0
  64. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/pack_sim.rst +0 -0
  65. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/params2csv.rst +0 -0
  66. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/presentvalue.rst +0 -0
  67. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/prtvol2csv.csv +0 -0
  68. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/prtvol2csv.rst +0 -0
  69. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/restartthinner.rst +0 -0
  70. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/ri_wellmod.rst +0 -0
  71. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/rmsecl_volumetrics.rst +0 -0
  72. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/runeclipse.rst +0 -0
  73. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/runrms.rst +0 -0
  74. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/sector2fluxnum.rst +0 -0
  75. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/summaryplot.rst +0 -0
  76. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/sunsch.rst +0 -0
  77. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/sw_model_utilities.rst +0 -0
  78. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/vfp2csv.rst +0 -0
  79. {subscript-1.3.0 → subscript-1.4.0}/docs/scripts/welltest_dpds.rst +0 -0
  80. {subscript-1.3.0 → subscript-1.4.0}/docs/usage.rst +0 -0
  81. {subscript-1.3.0 → subscript-1.4.0}/setup.cfg +0 -0
  82. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/__init__.py +0 -0
  83. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/bjobsusers/__init__.py +0 -0
  84. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/bjobsusers/bjobsusers.py +0 -0
  85. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/casegen_upcars/__init__.py +0 -0
  86. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/casegen_upcars/casegen_upcars.py +0 -0
  87. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/casegen_upcars/udf.py +0 -0
  88. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/casegen_upcars/udf_arg_parser.py +0 -0
  89. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/check_swatinit/__init__.py +0 -0
  90. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/check_swatinit/check_swatinit.py +0 -0
  91. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/check_swatinit/constants.py +0 -0
  92. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/check_swatinit/pillarmodel.py +0 -0
  93. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/check_swatinit/plotter.py +0 -0
  94. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/config_jobs/CASEGEN_UPCARS +0 -0
  95. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/config_jobs/CHECK_SWATINIT +0 -0
  96. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/config_jobs/CSV2OFMVOL +0 -0
  97. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/config_jobs/CSV_STACK +0 -0
  98. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/config_jobs/ECLCOMPRESS +0 -0
  99. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/config_jobs/ECLDIFF2ROFF +0 -0
  100. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/config_jobs/ECLGRID2ROFF +0 -0
  101. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/config_jobs/ECLINIT2ROFF +0 -0
  102. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/config_jobs/ECLRST2ROFF +0 -0
  103. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/config_jobs/INTERP_RELPERM +0 -0
  104. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/config_jobs/MERGE_RFT_ERTOBS +0 -0
  105. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/config_jobs/MERGE_UNRST_FILES +0 -0
  106. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/config_jobs/OFMVOL2CSV +0 -0
  107. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/config_jobs/PARAMS2CSV +0 -0
  108. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/config_jobs/PRTVOL2CSV +0 -0
  109. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/config_jobs/RI_WELLMOD +0 -0
  110. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/config_jobs/SUNSCH +0 -0
  111. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/config_jobs/WELLTEST_DPDS +0 -0
  112. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/convert_grid_format/__init__.py +0 -0
  113. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/convert_grid_format/convert_grid_format.py +0 -0
  114. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/csv2ofmvol/__init__.py +0 -0
  115. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/csv2ofmvol/csv2ofmvol.py +0 -0
  116. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/csv_merge/__init__.py +0 -0
  117. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/csv_merge/csv_merge.py +0 -0
  118. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/csv_stack/__init__.py +0 -0
  119. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/eclcompress/__init__.py +0 -0
  120. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/eclcompress/allowlist.py +0 -0
  121. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/eclcompress/eclcompress.py +0 -0
  122. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/ecldiff2roff/__init__.py +0 -0
  123. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/ecldiff2roff/ecldiff2roff.py +0 -0
  124. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/eclgrid2roff/eclgrid2roff.py +0 -0
  125. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/eclinit2roff/eclinit2roff.py +0 -0
  126. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/eclrst2roff/eclrst2roff.py +0 -0
  127. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/fmu_copy_revision/__init__.py +0 -0
  128. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/fmu_copy_revision/fmu_copy_revision.py +0 -0
  129. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/fmuobs/__init__.py +0 -0
  130. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/fmuobs/fmuobs.py +0 -0
  131. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/fmuobs/parsers.py +1 -1
  132. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/fmuobs/util.py +0 -0
  133. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/hook_implementations/__init__.py +0 -0
  134. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/hook_implementations/jobs.py +0 -0
  135. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/interp_relperm/__init__.py +0 -0
  136. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/legacy/duf +0 -0
  137. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/legacy/eclmanual +0 -0
  138. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/legacy/ertwatch +0 -0
  139. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/legacy/list_rms_usage +0 -0
  140. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/legacy/nosim +0 -0
  141. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/legacy/runeclipse +0 -0
  142. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/merge_rft_ertobs/__init__.py +0 -0
  143. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/merge_rft_ertobs/merge_rft_ertobs.py +0 -0
  144. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/merge_unrst_files/__init__.py +0 -0
  145. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/merge_unrst_files/merge_unrst_files.py +0 -0
  146. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/ofmvol2csv/__init__.py +0 -0
  147. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/ofmvol2csv/ofmvol2csv.py +0 -0
  148. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/pack_sim/__init__.py +0 -0
  149. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/pack_sim/pack_sim.py +0 -0
  150. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/params2csv/__init__.py +0 -0
  151. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/presentvalue/__init__.py +0 -0
  152. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/prtvol2csv/__init__.py +0 -0
  153. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/restartthinner/__init__.py +0 -0
  154. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/restartthinner/restartthinner.py +0 -0
  155. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/ri_wellmod/__init__.py +0 -0
  156. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/ri_wellmod/ri_wellmod.py +0 -0
  157. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/rmsecl_volumetrics/__init__.py +0 -0
  158. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/rmsecl_volumetrics/rmsecl_volumetrics.py +0 -0
  159. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/runrms/__init__.py +0 -0
  160. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/runrms/runrms.py +0 -0
  161. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/sector2fluxnum/__init__.py +0 -0
  162. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/sector2fluxnum/completions.py +0 -0
  163. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/sector2fluxnum/datafile_obj.py +0 -0
  164. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/sector2fluxnum/flux_obj.py +0 -0
  165. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/sector2fluxnum/flux_util.py +0 -0
  166. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/sector2fluxnum/fluxfile_obj.py +0 -0
  167. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/sector2fluxnum/sector2fluxnum.py +0 -0
  168. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/summaryplot/__init__.py +0 -0
  169. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/summaryplot/summaryplot.py +0 -0
  170. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/sunsch/__init__.py +0 -0
  171. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/sunsch/sunsch.py +0 -0
  172. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/sunsch/time_vector.py +0 -0
  173. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/sw_model_utilities/__init__.py +0 -0
  174. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/sw_model_utilities/sw_model_utilities.py +0 -0
  175. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/vfp2csv/__init__.py +0 -0
  176. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/vfp2csv/vfp2csv.py +0 -0
  177. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/welltest_dpds/__init__.py +0 -0
  178. {subscript-1.3.0 → subscript-1.4.0}/src/subscript/welltest_dpds/welltest_dpds.py +0 -0
  179. {subscript-1.3.0 → subscript-1.4.0}/src/subscript.egg-info/SOURCES.txt +0 -0
  180. {subscript-1.3.0 → subscript-1.4.0}/src/subscript.egg-info/dependency_links.txt +0 -0
  181. {subscript-1.3.0 → subscript-1.4.0}/src/subscript.egg-info/entry_points.txt +0 -0
  182. {subscript-1.3.0 → subscript-1.4.0}/src/subscript.egg-info/top_level.txt +0 -0
  183. {subscript-1.3.0 → subscript-1.4.0}/tests/__init__.py +0 -0
  184. {subscript-1.3.0 → subscript-1.4.0}/tests/conftest.py +0 -0
  185. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/include/grid/reek.faults +0 -0
  186. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/include/grid/reek.grid +0 -0
  187. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/include/grid/reek.multflt +0 -0
  188. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/include/grid/reek.multz +0 -0
  189. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/include/grid/reek.perm +0 -0
  190. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/include/grid/reek.poro +0 -0
  191. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/include/props/let-sgof.txt +0 -0
  192. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/include/props/let-swof.txt +0 -0
  193. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/include/props/reek.endpoints +0 -0
  194. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/include/props/reek.pvt +0 -0
  195. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/include/props/reek.swatinit +0 -0
  196. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/include/props/sgof.txt +0 -0
  197. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/include/props/swof.inc +0 -0
  198. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/include/props/swof.txt +0 -0
  199. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/include/regions/reek.eqlnum +0 -0
  200. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/include/regions/reek.fipnum +0 -0
  201. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/include/schedule/reek_history.sch +0 -0
  202. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/include/solution/reek.equil +0 -0
  203. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/include/summary/reek.smry +0 -0
  204. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.DATA +0 -0
  205. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.ECLEND +0 -0
  206. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.EGRID +0 -0
  207. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.INIT +0 -0
  208. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.LOG +0 -0
  209. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.PRT +0 -0
  210. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.RFT +0 -0
  211. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.SMSPEC +0 -0
  212. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.UNRST +0 -0
  213. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.UNSMRY +0 -0
  214. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/eclipse/model/parameters.txt +0 -0
  215. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/parameters.txt +0 -0
  216. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/rms/README +0 -0
  217. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/rms/reek.rms10.1.3/.master +0 -0
  218. {subscript-1.3.0 → subscript-1.4.0}/tests/data/reek/rms/reek.rms11.1.0/.master +0 -0
  219. {subscript-1.3.0 → subscript-1.4.0}/tests/data/vfp/GasProd.VFP +0 -0
  220. {subscript-1.3.0 → subscript-1.4.0}/tests/data/vfp/pd2.VFP +0 -0
  221. {subscript-1.3.0 → subscript-1.4.0}/tests/data/welltest/eclipse/model/DROGON_DST_PLT-0.SMSPEC +0 -0
  222. {subscript-1.3.0 → subscript-1.4.0}/tests/data/welltest/eclipse/model/DROGON_DST_PLT-0.UNSMRY +0 -0
  223. {subscript-1.3.0 → subscript-1.4.0}/tests/test_bjobsusers.py +0 -0
  224. {subscript-1.3.0 → subscript-1.4.0}/tests/test_casegen_upcars.py +0 -0
  225. {subscript-1.3.0 → subscript-1.4.0}/tests/test_check_swatinit.py +0 -0
  226. {subscript-1.3.0 → subscript-1.4.0}/tests/test_check_swatinit_simulators.py +0 -0
  227. {subscript-1.3.0 → subscript-1.4.0}/tests/test_convert_grid_format.py +0 -0
  228. {subscript-1.3.0 → subscript-1.4.0}/tests/test_csv2ofmvol.py +0 -0
  229. {subscript-1.3.0 → subscript-1.4.0}/tests/test_csv_merge.py +0 -0
  230. {subscript-1.3.0 → subscript-1.4.0}/tests/test_csv_stack.py +0 -0
  231. {subscript-1.3.0 → subscript-1.4.0}/tests/test_docs.py +0 -0
  232. {subscript-1.3.0 → subscript-1.4.0}/tests/test_eclcompress.py +0 -0
  233. {subscript-1.3.0 → subscript-1.4.0}/tests/test_ecldiff2roff.py +0 -0
  234. {subscript-1.3.0 → subscript-1.4.0}/tests/test_fmu_copy_revision.py +0 -0
  235. {subscript-1.3.0 → subscript-1.4.0}/tests/test_fmuobs.py +0 -0
  236. {subscript-1.3.0 → subscript-1.4.0}/tests/test_fmuobs_parsers.py +0 -0
  237. {subscript-1.3.0 → subscript-1.4.0}/tests/test_fmuobs_writers.py +0 -0
  238. {subscript-1.3.0 → subscript-1.4.0}/tests/test_hook_implementations.py +0 -0
  239. {subscript-1.3.0 → subscript-1.4.0}/tests/test_interp_relperm.py +0 -0
  240. {subscript-1.3.0 → subscript-1.4.0}/tests/test_merge_rft_ertobs.py +0 -0
  241. {subscript-1.3.0 → subscript-1.4.0}/tests/test_merge_unrst_files.py +0 -0
  242. {subscript-1.3.0 → subscript-1.4.0}/tests/test_ofmvol2csv.py +0 -0
  243. {subscript-1.3.0 → subscript-1.4.0}/tests/test_pack_sim.py +0 -0
  244. {subscript-1.3.0 → subscript-1.4.0}/tests/test_presentvalue.py +0 -0
  245. {subscript-1.3.0 → subscript-1.4.0}/tests/test_prtvol2csv.py +0 -0
  246. {subscript-1.3.0 → subscript-1.4.0}/tests/test_restartthinner.py +0 -0
  247. {subscript-1.3.0 → subscript-1.4.0}/tests/test_rmsecl_volumetrics.py +0 -0
  248. {subscript-1.3.0 → subscript-1.4.0}/tests/test_runrms.py +0 -0
  249. {subscript-1.3.0 → subscript-1.4.0}/tests/test_sector2fluxnum.py +0 -0
  250. {subscript-1.3.0 → subscript-1.4.0}/tests/test_subscriptlogger.py +0 -0
  251. {subscript-1.3.0 → subscript-1.4.0}/tests/test_summaryplot.py +0 -0
  252. {subscript-1.3.0 → subscript-1.4.0}/tests/test_sunsch.py +0 -0
  253. {subscript-1.3.0 → subscript-1.4.0}/tests/test_sw_model_utilities.py +0 -0
  254. {subscript-1.3.0 → subscript-1.4.0}/tests/test_vfp2csv.py +0 -0
  255. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_casegen_upcars/demo_large_scale.yaml +0 -0
  256. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_casegen_upcars/demo_small_scale.yaml +0 -0
  257. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_casegen_upcars/dump_value.tmpl +0 -0
  258. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_casegen_upcars/upcars_eclipse_ref_lg.tmpl +0 -0
  259. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_casegen_upcars/upcars_eclipse_ref_ss.tmpl +0 -0
  260. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_eclcompress/permxyz.grdecl +0 -0
  261. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_fmuobs/drogon_wbhp_rft_wct_gor_tracer_4d.obs +0 -0
  262. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_fmuobs/ert-doc.csv +0 -0
  263. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_fmuobs/ert-doc.obs +0 -0
  264. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_fmuobs/ert-doc.yml +0 -0
  265. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_fmuobs/fmu-ensemble-obs.yml +0 -0
  266. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_fmuobs/hist_obs_wells.txt +0 -0
  267. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_fmuobs/ri-obs.csv +0 -0
  268. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_interp_relperm/cfg.yml +0 -0
  269. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_interp_relperm/sgof_base.inc +0 -0
  270. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_interp_relperm/sgof_opt.inc +0 -0
  271. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_interp_relperm/sgof_pes.inc +0 -0
  272. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_interp_relperm/swof_base.inc +0 -0
  273. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_interp_relperm/swof_opt.inc +0 -0
  274. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_interp_relperm/swof_pes.inc +0 -0
  275. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_merge_rft_ertobs/drogon/gendata_rft.csv +0 -0
  276. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A2.obs +0 -0
  277. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A2.txt +0 -0
  278. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A3.obs +0 -0
  279. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A3.txt +0 -0
  280. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A4.txt +0 -0
  281. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A4_1.obs +0 -0
  282. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A5.obs +0 -0
  283. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A5.txt +0 -0
  284. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A6.obs +0 -0
  285. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A6.txt +0 -0
  286. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_merge_rft_ertobs/drogon/rft/well_date_rft.txt +0 -0
  287. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_merge_unrst_files/HIST.UNRST +0 -0
  288. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_merge_unrst_files/PRED.UNRST +0 -0
  289. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_ofmvol2csv/fileA.vol +0 -0
  290. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_ofmvol2csv/fileB.vol +0 -0
  291. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_ofmvol2csv/fileC.vol +0 -0
  292. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_ofmvol2csv/ofm_example.vol +0 -0
  293. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_ri_wellmod/drogon_include/grid/drogon.grid.grdecl +0 -0
  294. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_ri_wellmod/drogon_include/grid/drogon.ntg.grdecl +0 -0
  295. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_ri_wellmod/drogon_include/grid/drogon.perm.grdecl +0 -0
  296. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_ri_wellmod/drogon_trajectories/rft_wells.dat +0 -0
  297. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_ri_wellmod/drogon_trajectories/wells.dat +0 -0
  298. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_ri_wellmod/drogon_wells_noicd.rsp +0 -0
  299. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_ri_wellmod/reek_trajectories/reek_wells.dat +0 -0
  300. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_ri_wellmod/ri_reek_wells.rsp +0 -0
  301. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_runrms/runrms.yml +0 -0
  302. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_sector2fluxnum/DUMPFLUX_TEST.DATA +0 -0
  303. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_sector2fluxnum/DUMPFLUX_TEST.EGRID +0 -0
  304. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_sector2fluxnum/DUMPFLUX_TEST.FLUX +0 -0
  305. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_sector2fluxnum/OUT_COARSE.FLUX +0 -0
  306. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_sector2fluxnum/TEST.DATA +0 -0
  307. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_sector2fluxnum/TEST.EGRID +0 -0
  308. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_sector2fluxnum/TEST.INIT +0 -0
  309. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_sector2fluxnum/TEST.UNRST +0 -0
  310. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_sunsch/config.yml +0 -0
  311. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_sunsch/emptyinit.sch +0 -0
  312. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_sunsch/foo1.sch +0 -0
  313. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_sunsch/footemplate.sch +0 -0
  314. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_sunsch/initwithdates.sch +0 -0
  315. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_sunsch/merge2.sch +0 -0
  316. {subscript-1.3.0 → subscript-1.4.0}/tests/testdata_sunsch/mergeme.sch +0 -0
  317. {subscript-1.3.0 → subscript-1.4.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.4.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
@@ -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
  ]
@@ -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
 
@@ -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.4.0'
16
+ __version_tuple__ = version_tuple = (1, 4, 0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: subscript
3
- Version: 1.3.0
3
+ Version: 1.4.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
@@ -13,7 +13,6 @@ scipy
13
13
  seaborn
14
14
  segyio
15
15
  shapely
16
- urllib3<2
17
16
  xlrd
18
17
  xtgeo
19
18
 
@@ -15,6 +15,15 @@ except ImportError:
15
15
  HAVE_ERT = False
16
16
 
17
17
 
18
+ ERT_CONFIG_WF = [
19
+ "QUEUE_SYSTEM LOCAL",
20
+ "NUM_REALIZATIONS 1",
21
+ "RUNPATH <CONFIG_PATH>",
22
+ "",
23
+ "LOAD_WORKFLOW wf_params2csv",
24
+ ]
25
+
26
+
18
27
  def test_main(tmp_path, mocker):
19
28
  """Test invocation from command line"""
20
29
  os.chdir(tmp_path)
@@ -165,7 +174,7 @@ def test_ert_workflow(tmp_path):
165
174
  f"real\t{i}", encoding="utf8"
166
175
  )
167
176
 
168
- Path("PARAMS2CSV_ITER0").write_text(
177
+ Path("wf_params2csv").write_text(
169
178
  (
170
179
  'PARAMS2CSV "-o" <CONFIG_PATH>/parameters.csv '
171
180
  "<CONFIG_PATH>/realization-*/iter-0/parameters.txt"
@@ -173,20 +182,116 @@ def test_ert_workflow(tmp_path):
173
182
  )
174
183
 
175
184
  ert_config_fname = "test_params2csv.ert"
176
- ert_config = [
177
- "QUEUE_SYSTEM LOCAL",
178
- "NUM_REALIZATIONS 1",
179
- "RUNPATH <CONFIG_PATH>",
180
- "",
181
- "LOAD_WORKFLOW PARAMS2CSV_ITER0",
182
- ]
183
- Path(ert_config_fname).write_text("\n".join(ert_config), encoding="utf8")
184
- subprocess.run(
185
- ["ert", "workflow", "PARAMS2CSV_ITER0", ert_config_fname], check=True
186
- )
185
+ Path(ert_config_fname).write_text("\n".join(ERT_CONFIG_WF), encoding="utf8")
186
+ subprocess.run(["ert", "workflow", "wf_params2csv", ert_config_fname], check=True)
187
187
 
188
188
  dframe = pd.read_csv("parameters.csv")
189
189
  assert not dframe.empty
190
- assert "Realization" in dframe
190
+ assert "REAL" in dframe
191
191
  assert "real" in dframe
192
192
  assert len(dframe.index) == realizations
193
+
194
+
195
+ @pytest.mark.integration
196
+ @pytest.mark.skipif(not HAVE_ERT, reason="Requires ERT to be installed")
197
+ def test_ert_workflow_multiple_iter(tmp_path):
198
+ """
199
+ Test that PARAMS2CSV can be run as an ERT workflow/plugin on
200
+ multiple iterations.
201
+ """
202
+ os.chdir(tmp_path)
203
+
204
+ realizations = 3
205
+ for i in range(realizations):
206
+ Path(f"realization-{i}/iter-0").mkdir(parents=True)
207
+ Path(f"realization-{i}/iter-0/parameters.txt").write_text(
208
+ f"myparam\t{i}", encoding="utf8"
209
+ )
210
+ Path(f"realization-{i}/iter-1").mkdir(parents=True)
211
+ Path(f"realization-{i}/iter-1/parameters.txt").write_text(
212
+ f"myparam\t{i}", encoding="utf8"
213
+ )
214
+
215
+ Path("wf_params2csv").write_text(
216
+ (
217
+ 'PARAMS2CSV "-o" <CONFIG_PATH>/parameters.csv '
218
+ "<CONFIG_PATH>/realization-*/iter-*/parameters.txt"
219
+ )
220
+ )
221
+
222
+ ert_config_fname = "test_params2csv.ert"
223
+ Path(ert_config_fname).write_text("\n".join(ERT_CONFIG_WF), encoding="utf8")
224
+ subprocess.run(["ert", "workflow", "wf_params2csv", ert_config_fname], check=True)
225
+
226
+ dframe = pd.read_csv("parameters.csv")
227
+ assert not dframe.empty
228
+ assert "myparam" in dframe
229
+ assert set(dframe["REAL"].unique()) == {0, 1, 2}
230
+ assert set(dframe["ENSEMBLESET"].unique()) == {tmp_path.stem}
231
+ assert set(dframe["ENSEMBLE"].unique()) == {"iter-0", "iter-1"}
232
+ assert set(dframe["ITER"].unique()) == {0, 1}
233
+ assert len(dframe.index) == realizations * 2
234
+
235
+
236
+ @pytest.mark.integration
237
+ @pytest.mark.skipif(not HAVE_ERT, reason="Requires ERT to be installed")
238
+ def test_ert_workflow_pred_params(tmp_path):
239
+ """Test that PARAMS2CSV can be run on folders not starting with iter"""
240
+ os.chdir(tmp_path)
241
+
242
+ realizations = 3
243
+ for i in range(realizations):
244
+ Path(f"realization-{i}/pred").mkdir(parents=True)
245
+ Path(f"realization-{i}/pred/parameters.txt").write_text(
246
+ f"myparam\t{i}", encoding="utf8"
247
+ )
248
+
249
+ Path("wf_params2csv").write_text(
250
+ (
251
+ 'PARAMS2CSV "-o" <CONFIG_PATH>/parameters.csv '
252
+ "<CONFIG_PATH>/realization-*/pred/parameters.txt"
253
+ )
254
+ )
255
+
256
+ ert_config_fname = "test_params2csv.ert"
257
+ Path(ert_config_fname).write_text("\n".join(ERT_CONFIG_WF), encoding="utf8")
258
+ subprocess.run(["ert", "workflow", "wf_params2csv", ert_config_fname], check=True)
259
+
260
+ dframe = pd.read_csv("parameters.csv")
261
+ assert not dframe.empty
262
+ assert "myparam" in dframe
263
+ assert set(dframe["REAL"].unique()) == {0, 1, 2}
264
+ assert set(dframe["ENSEMBLE"].unique()) == {"pred"}
265
+ assert set(dframe["ITER"].unique()) == {0}
266
+
267
+
268
+ @pytest.mark.integration
269
+ @pytest.mark.skipif(not HAVE_ERT, reason="Requires ERT to be installed")
270
+ def test_ert_workflow_no_iter_folder(tmp_path):
271
+ """Test that PARAMS2CSV can be run on cases without iteration folders"""
272
+ os.chdir(tmp_path)
273
+
274
+ realizations = 3
275
+ for i in range(realizations):
276
+ Path(f"realization-{i}").mkdir(parents=True)
277
+ Path(f"realization-{i}/parameters.txt").write_text(
278
+ f"myparam\t{i}", encoding="utf8"
279
+ )
280
+
281
+ Path("wf_params2csv").write_text(
282
+ (
283
+ 'PARAMS2CSV "-o" <CONFIG_PATH>/parameters.csv '
284
+ "<CONFIG_PATH>/realization-*/parameters.txt"
285
+ )
286
+ )
287
+
288
+ ert_config_fname = "test_params2csv.ert"
289
+ Path(ert_config_fname).write_text("\n".join(ERT_CONFIG_WF), encoding="utf8")
290
+ subprocess.run(["ert", "workflow", "wf_params2csv", ert_config_fname], check=True)
291
+
292
+ dframe = pd.read_csv("parameters.csv")
293
+ assert not dframe.empty
294
+ assert "myparam" in dframe
295
+ assert set(dframe["REAL"].unique()) == {0, 1, 2}
296
+ assert set(dframe["ENSEMBLE"].unique()) == {"iter-0"}
297
+ assert set(dframe["ITER"].unique()) == {0}
@@ -5,11 +5,9 @@ from pathlib import Path
5
5
  import pytest
6
6
  from subscript.ri_wellmod import ri_wellmod
7
7
 
8
- pytestmark = pytest.mark.xfail()
9
-
10
8
  SCRIPTNAME = "ri_wellmod"
11
9
  DATAPATH = Path(__file__).parent / "testdata_ri_wellmod"
12
- RI_DEV = "/project/res/x86_64_RH_7/share/resinsight/jenkins_dev/ResInsight"
10
+ RI_DEV = "/project/res/bin/resinsightdev"
13
11
 
14
12
  try:
15
13
  # pylint: disable=unused-import
@@ -62,6 +60,14 @@ def file_contains(filename, string_to_find):
62
60
  return filetext.find(string_to_find) >= 0
63
61
 
64
62
 
63
+ def github_online_runner():
64
+ gh_runner = os.getenv("GITHUB_ACTIONS") == "true"
65
+
66
+ # we still want to run tests on github actions local (komodo) runners
67
+ local_gh_runner = "f_scout_ci" in str(os.getenv("RUNNER_NAME"))
68
+ return gh_runner and not local_gh_runner
69
+
70
+
65
71
  @pytest.mark.integration
66
72
  def test_integration():
67
73
  """Test that endpoint is installed"""
@@ -85,6 +91,9 @@ def test_main_initcase(tmp_path, mocker):
85
91
  assert Path(outfile).exists() and file_contains(outfile, "A4")
86
92
 
87
93
 
94
+ @pytest.mark.skipif(
95
+ github_online_runner(), reason="Cannot test on github online runner"
96
+ )
88
97
  @pytest.mark.skipif(
89
98
  not has_resinsight(),
90
99
  reason="Could not find a ResInsight executable",
@@ -232,6 +241,9 @@ def test_ert_forward_model(tmp_path):
232
241
 
233
242
 
234
243
  # REEK TESTS
244
+ @pytest.mark.skipif(
245
+ github_online_runner(), reason="Cannot test on github online runner"
246
+ )
235
247
  @pytest.mark.skipif(
236
248
  not has_resinsight(), reason="Could not find a ResInsight executable"
237
249
  )
@@ -248,6 +260,9 @@ def test_main_initcase_reek(tmp_path, mocker):
248
260
  assert Path(outfile).exists() and file_contains(outfile, "OP_1")
249
261
 
250
262
 
263
+ @pytest.mark.skipif(
264
+ github_online_runner(), reason="Cannot test on github online runner"
265
+ )
251
266
  @pytest.mark.skipif(
252
267
  not has_resinsight(), reason="Could not find a ResInsight executable"
253
268
  )
@@ -70,8 +70,8 @@ def test_main(tmp_path, mocker):
70
70
  suptimew = pd.read_csv("spt.csv")
71
71
  # pylint: disable=no-member
72
72
  # (false positive)
73
- assert suptimew.iloc[0][0] == pytest.approx(-9.87037983)
74
- assert suptimew.iloc[-1][0] == pytest.approx(-0.65693308)
73
+ assert suptimew.iloc[0, 0] == pytest.approx(-9.87037983)
74
+ assert suptimew.iloc[-1, 0] == pytest.approx(-0.65693308)
75
75
  Path("welltest_output.csv").unlink()
76
76
 
77
77
  # test --genobs_resultfile
File without changes
File without changes
File without changes
File without changes
File without changes