subscript 1.2.2__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 (320) hide show
  1. {subscript-1.2.2 → subscript-1.4.0}/.github/workflows/codecov.yml +2 -2
  2. {subscript-1.2.2 → subscript-1.4.0}/.github/workflows/publish.yml +2 -2
  3. {subscript-1.2.2 → subscript-1.4.0}/.github/workflows/subscript.yml +7 -11
  4. {subscript-1.2.2 → subscript-1.4.0}/PKG-INFO +5 -7
  5. {subscript-1.2.2 → subscript-1.4.0}/README.md +2 -2
  6. subscript-1.4.0/ci/testkomodo.sh +34 -0
  7. {subscript-1.2.2 → subscript-1.4.0}/docs/contributing.rst +5 -3
  8. {subscript-1.2.2 → subscript-1.4.0}/pyproject.toml +23 -10
  9. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/__init__.py +16 -0
  10. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/bjobsusers/bjobsusers.py +1 -3
  11. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/casegen_upcars/casegen_upcars.py +2 -3
  12. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/casegen_upcars/model.py +21 -29
  13. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/casegen_upcars/udf.py +2 -1
  14. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/casegen_upcars/udf_arg_parser.py +1 -1
  15. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/check_swatinit/check_swatinit.py +9 -18
  16. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/convert_grid_format/convert_grid_format.py +9 -11
  17. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/csv2ofmvol/csv2ofmvol.py +2 -5
  18. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/csv_merge/csv_merge.py +2 -3
  19. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/csv_stack/csv_stack.py +7 -9
  20. subscript-1.4.0/src/subscript/eclcompress/allowlist.py +213 -0
  21. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/eclcompress/eclcompress.py +2 -6
  22. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/ecldiff2roff/ecldiff2roff.py +0 -1
  23. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/fmu_copy_revision/fmu_copy_revision.py +2 -1
  24. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/fmuobs/fmuobs.py +14 -10
  25. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/fmuobs/parsers.py +5 -7
  26. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/fmuobs/writers.py +7 -4
  27. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/interp_relperm/interp_relperm.py +7 -8
  28. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/merge_rft_ertobs/merge_rft_ertobs.py +2 -4
  29. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/ofmvol2csv/ofmvol2csv.py +4 -12
  30. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/pack_sim/pack_sim.py +5 -13
  31. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/params2csv/params2csv.py +99 -50
  32. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/presentvalue/presentvalue.py +17 -16
  33. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/prtvol2csv/prtvol2csv.py +6 -3
  34. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/restartthinner/restartthinner.py +4 -9
  35. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/ri_wellmod/ri_wellmod.py +1 -2
  36. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/rmsecl_volumetrics/rmsecl_volumetrics.py +6 -7
  37. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/runrms/runrms.py +4 -11
  38. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/sector2fluxnum/datafile_obj.py +3 -6
  39. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/sector2fluxnum/flux_obj.py +0 -1
  40. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/sector2fluxnum/flux_util.py +3 -7
  41. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/sector2fluxnum/fluxfile_obj.py +12 -25
  42. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/summaryplot/summaryplot.py +35 -41
  43. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/sunsch/sunsch.py +1 -1
  44. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/sunsch/time_vector.py +26 -29
  45. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/sw_model_utilities/sw_model_utilities.py +1 -1
  46. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/version.py +2 -2
  47. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/vfp2csv/vfp2csv.py +1 -2
  48. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/welltest_dpds/welltest_dpds.py +6 -11
  49. {subscript-1.2.2 → subscript-1.4.0}/src/subscript.egg-info/PKG-INFO +5 -7
  50. {subscript-1.2.2 → subscript-1.4.0}/src/subscript.egg-info/SOURCES.txt +0 -1
  51. {subscript-1.2.2 → subscript-1.4.0}/src/subscript.egg-info/requires.txt +1 -4
  52. {subscript-1.2.2 → subscript-1.4.0}/tests/conftest.py +0 -1
  53. {subscript-1.2.2 → subscript-1.4.0}/tests/test_bjobsusers.py +0 -1
  54. {subscript-1.2.2 → subscript-1.4.0}/tests/test_check_swatinit.py +1 -2
  55. {subscript-1.2.2 → subscript-1.4.0}/tests/test_check_swatinit_simulators.py +10 -29
  56. {subscript-1.2.2 → subscript-1.4.0}/tests/test_convert_grid_format.py +1 -2
  57. {subscript-1.2.2 → subscript-1.4.0}/tests/test_csv2ofmvol.py +0 -1
  58. {subscript-1.2.2 → subscript-1.4.0}/tests/test_csv_merge.py +2 -2
  59. {subscript-1.2.2 → subscript-1.4.0}/tests/test_csv_stack.py +4 -12
  60. {subscript-1.2.2 → subscript-1.4.0}/tests/test_eclcompress.py +0 -1
  61. {subscript-1.2.2 → subscript-1.4.0}/tests/test_ecldiff2roff.py +9 -3
  62. {subscript-1.2.2 → subscript-1.4.0}/tests/test_fmu_copy_revision.py +0 -1
  63. {subscript-1.2.2 → subscript-1.4.0}/tests/test_fmuobs.py +3 -5
  64. {subscript-1.2.2 → subscript-1.4.0}/tests/test_hook_implementations.py +2 -3
  65. {subscript-1.2.2 → subscript-1.4.0}/tests/test_interp_relperm.py +0 -1
  66. {subscript-1.2.2 → subscript-1.4.0}/tests/test_merge_rft_ertobs.py +0 -1
  67. {subscript-1.2.2 → subscript-1.4.0}/tests/test_merge_unrst_files.py +0 -1
  68. {subscript-1.2.2 → subscript-1.4.0}/tests/test_ofmvol2csv.py +0 -1
  69. {subscript-1.2.2 → subscript-1.4.0}/tests/test_pack_sim.py +0 -1
  70. {subscript-1.2.2 → subscript-1.4.0}/tests/test_params2csv.py +120 -16
  71. {subscript-1.2.2 → subscript-1.4.0}/tests/test_presentvalue.py +1 -2
  72. {subscript-1.2.2 → subscript-1.4.0}/tests/test_prtvol2csv.py +2 -3
  73. {subscript-1.2.2 → subscript-1.4.0}/tests/test_restartthinner.py +0 -1
  74. {subscript-1.2.2 → subscript-1.4.0}/tests/test_ri_wellmod.py +18 -4
  75. {subscript-1.2.2 → subscript-1.4.0}/tests/test_rmsecl_volumetrics.py +0 -1
  76. {subscript-1.2.2 → subscript-1.4.0}/tests/test_runrms.py +3 -2
  77. {subscript-1.2.2 → subscript-1.4.0}/tests/test_sector2fluxnum.py +0 -1
  78. {subscript-1.2.2 → subscript-1.4.0}/tests/test_summaryplot.py +0 -1
  79. {subscript-1.2.2 → subscript-1.4.0}/tests/test_sunsch.py +4 -5
  80. {subscript-1.2.2 → subscript-1.4.0}/tests/test_sw_model_utilities.py +0 -1
  81. {subscript-1.2.2 → subscript-1.4.0}/tests/test_vfp2csv.py +0 -1
  82. {subscript-1.2.2 → subscript-1.4.0}/tests/test_welltest_dpds.py +2 -3
  83. subscript-1.2.2/.flake8 +0 -5
  84. subscript-1.2.2/ci/testkomodo.sh +0 -12
  85. subscript-1.2.2/src/subscript/eclcompress/allowlist.py +0 -215
  86. {subscript-1.2.2 → subscript-1.4.0}/.gitignore +0 -0
  87. {subscript-1.2.2 → subscript-1.4.0}/.pylintrc +0 -0
  88. {subscript-1.2.2 → subscript-1.4.0}/LICENSE +0 -0
  89. {subscript-1.2.2 → subscript-1.4.0}/SECURITY.md +0 -0
  90. {subscript-1.2.2 → subscript-1.4.0}/docs/Makefile +0 -0
  91. {subscript-1.2.2 → subscript-1.4.0}/docs/_static/equinor-logo.png +0 -0
  92. {subscript-1.2.2 → subscript-1.4.0}/docs/_static/equinor-logo2.jpg +0 -0
  93. {subscript-1.2.2 → subscript-1.4.0}/docs/_static/equinor-logo2.png +0 -0
  94. {subscript-1.2.2 → subscript-1.4.0}/docs/_static/equinor_logo.jpg +0 -0
  95. {subscript-1.2.2 → subscript-1.4.0}/docs/_static/equinor_logo_only.jpg +0 -0
  96. {subscript-1.2.2 → subscript-1.4.0}/docs/_templates/layout.html +0 -0
  97. {subscript-1.2.2 → subscript-1.4.0}/docs/conf.py +0 -0
  98. {subscript-1.2.2 → subscript-1.4.0}/docs/history.rst +0 -0
  99. {subscript-1.2.2 → subscript-1.4.0}/docs/index.rst +0 -0
  100. {subscript-1.2.2 → subscript-1.4.0}/docs/make.bat +0 -0
  101. {subscript-1.2.2 → subscript-1.4.0}/docs/overview.rst +0 -0
  102. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/bjobsusers.rst +0 -0
  103. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/casegen_upcars.rst +0 -0
  104. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/check_swatinit.rst +0 -0
  105. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/convert_grid_format.rst +0 -0
  106. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/csv2ofmvol.rst +0 -0
  107. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/csv_merge.rst +0 -0
  108. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/csv_stack.rst +0 -0
  109. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/eclcompress.rst +0 -0
  110. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/ecldiff2roff.rst +0 -0
  111. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/fmu_copy_revision.rst +0 -0
  112. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/fmuobs.rst +0 -0
  113. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/images/Pack_sim_overview.png +0 -0
  114. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/images/Summaryplot-ensemble.png +0 -0
  115. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/images/Summaryplot-ert.png +0 -0
  116. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/images/Summaryplot-normalizeexample.png +0 -0
  117. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/images/Workflow_sector2fluxnum.png +0 -0
  118. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/images/casegen_upcars_geometry.png +0 -0
  119. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/images/check_swatinit_scatter.png +0 -0
  120. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/images/check_swatinit_volplot.png +0 -0
  121. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/images/ecl-swat-initialization.png +0 -0
  122. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/images/make_check_swatinit_images.sh +0 -0
  123. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/images/resinsight_wells_project_example.png +0 -0
  124. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/interp_relperm.rst +0 -0
  125. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/merge_rft_ertobs.rst +0 -0
  126. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/merge_unrst_files.rst +0 -0
  127. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/ofmvol2csv.rst +0 -0
  128. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/pack_sim.rst +0 -0
  129. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/params2csv.rst +0 -0
  130. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/presentvalue.rst +0 -0
  131. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/prtvol2csv.csv +0 -0
  132. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/prtvol2csv.rst +0 -0
  133. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/restartthinner.rst +0 -0
  134. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/ri_wellmod.rst +0 -0
  135. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/rmsecl_volumetrics.rst +0 -0
  136. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/runeclipse.rst +0 -0
  137. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/runrms.rst +0 -0
  138. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/sector2fluxnum.rst +0 -0
  139. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/summaryplot.rst +0 -0
  140. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/sunsch.rst +0 -0
  141. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/sw_model_utilities.rst +0 -0
  142. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/vfp2csv.rst +0 -0
  143. {subscript-1.2.2 → subscript-1.4.0}/docs/scripts/welltest_dpds.rst +0 -0
  144. {subscript-1.2.2 → subscript-1.4.0}/docs/usage.rst +0 -0
  145. {subscript-1.2.2 → subscript-1.4.0}/setup.cfg +0 -0
  146. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/bjobsusers/__init__.py +0 -0
  147. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/casegen_upcars/__init__.py +0 -0
  148. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/check_swatinit/__init__.py +0 -0
  149. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/check_swatinit/constants.py +0 -0
  150. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/check_swatinit/pillarmodel.py +0 -0
  151. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/check_swatinit/plotter.py +0 -0
  152. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/config_jobs/CASEGEN_UPCARS +0 -0
  153. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/config_jobs/CHECK_SWATINIT +0 -0
  154. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/config_jobs/CSV2OFMVOL +0 -0
  155. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/config_jobs/CSV_STACK +0 -0
  156. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/config_jobs/ECLCOMPRESS +0 -0
  157. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/config_jobs/ECLDIFF2ROFF +0 -0
  158. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/config_jobs/ECLGRID2ROFF +0 -0
  159. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/config_jobs/ECLINIT2ROFF +0 -0
  160. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/config_jobs/ECLRST2ROFF +0 -0
  161. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/config_jobs/INTERP_RELPERM +0 -0
  162. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/config_jobs/MERGE_RFT_ERTOBS +0 -0
  163. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/config_jobs/MERGE_UNRST_FILES +0 -0
  164. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/config_jobs/OFMVOL2CSV +0 -0
  165. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/config_jobs/PARAMS2CSV +0 -0
  166. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/config_jobs/PRTVOL2CSV +0 -0
  167. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/config_jobs/RI_WELLMOD +0 -0
  168. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/config_jobs/SUNSCH +0 -0
  169. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/config_jobs/WELLTEST_DPDS +0 -0
  170. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/convert_grid_format/__init__.py +0 -0
  171. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/csv2ofmvol/__init__.py +0 -0
  172. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/csv_merge/__init__.py +0 -0
  173. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/csv_stack/__init__.py +0 -0
  174. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/eclcompress/__init__.py +0 -0
  175. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/ecldiff2roff/__init__.py +0 -0
  176. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/eclgrid2roff/eclgrid2roff.py +0 -0
  177. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/eclinit2roff/eclinit2roff.py +0 -0
  178. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/eclrst2roff/eclrst2roff.py +0 -0
  179. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/fmu_copy_revision/__init__.py +0 -0
  180. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/fmuobs/__init__.py +0 -0
  181. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/fmuobs/util.py +0 -0
  182. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/hook_implementations/__init__.py +0 -0
  183. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/hook_implementations/jobs.py +0 -0
  184. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/interp_relperm/__init__.py +0 -0
  185. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/legacy/duf +0 -0
  186. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/legacy/eclmanual +0 -0
  187. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/legacy/ertwatch +0 -0
  188. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/legacy/list_rms_usage +0 -0
  189. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/legacy/nosim +0 -0
  190. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/legacy/runeclipse +0 -0
  191. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/merge_rft_ertobs/__init__.py +0 -0
  192. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/merge_unrst_files/__init__.py +0 -0
  193. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/merge_unrst_files/merge_unrst_files.py +0 -0
  194. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/ofmvol2csv/__init__.py +0 -0
  195. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/pack_sim/__init__.py +0 -0
  196. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/params2csv/__init__.py +0 -0
  197. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/presentvalue/__init__.py +0 -0
  198. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/prtvol2csv/__init__.py +0 -0
  199. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/restartthinner/__init__.py +0 -0
  200. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/ri_wellmod/__init__.py +0 -0
  201. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/rmsecl_volumetrics/__init__.py +0 -0
  202. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/runrms/__init__.py +0 -0
  203. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/sector2fluxnum/__init__.py +0 -0
  204. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/sector2fluxnum/completions.py +0 -0
  205. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/sector2fluxnum/sector2fluxnum.py +0 -0
  206. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/summaryplot/__init__.py +0 -0
  207. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/sunsch/__init__.py +0 -0
  208. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/sw_model_utilities/__init__.py +0 -0
  209. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/vfp2csv/__init__.py +0 -0
  210. {subscript-1.2.2 → subscript-1.4.0}/src/subscript/welltest_dpds/__init__.py +0 -0
  211. {subscript-1.2.2 → subscript-1.4.0}/src/subscript.egg-info/dependency_links.txt +0 -0
  212. {subscript-1.2.2 → subscript-1.4.0}/src/subscript.egg-info/entry_points.txt +0 -0
  213. {subscript-1.2.2 → subscript-1.4.0}/src/subscript.egg-info/top_level.txt +0 -0
  214. {subscript-1.2.2 → subscript-1.4.0}/tests/__init__.py +0 -0
  215. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/include/grid/reek.faults +0 -0
  216. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/include/grid/reek.grid +0 -0
  217. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/include/grid/reek.multflt +0 -0
  218. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/include/grid/reek.multz +0 -0
  219. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/include/grid/reek.perm +0 -0
  220. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/include/grid/reek.poro +0 -0
  221. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/include/props/let-sgof.txt +0 -0
  222. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/include/props/let-swof.txt +0 -0
  223. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/include/props/reek.endpoints +0 -0
  224. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/include/props/reek.pvt +0 -0
  225. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/include/props/reek.swatinit +0 -0
  226. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/include/props/sgof.txt +0 -0
  227. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/include/props/swof.inc +0 -0
  228. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/include/props/swof.txt +0 -0
  229. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/include/regions/reek.eqlnum +0 -0
  230. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/include/regions/reek.fipnum +0 -0
  231. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/include/schedule/reek_history.sch +0 -0
  232. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/include/solution/reek.equil +0 -0
  233. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/include/summary/reek.smry +0 -0
  234. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.DATA +0 -0
  235. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.ECLEND +0 -0
  236. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.EGRID +0 -0
  237. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.INIT +0 -0
  238. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.LOG +0 -0
  239. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.PRT +0 -0
  240. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.RFT +0 -0
  241. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.SMSPEC +0 -0
  242. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.UNRST +0 -0
  243. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/model/2_R001_REEK-0.UNSMRY +0 -0
  244. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/eclipse/model/parameters.txt +0 -0
  245. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/parameters.txt +0 -0
  246. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/rms/README +0 -0
  247. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/rms/reek.rms10.1.3/.master +0 -0
  248. {subscript-1.2.2 → subscript-1.4.0}/tests/data/reek/rms/reek.rms11.1.0/.master +0 -0
  249. {subscript-1.2.2 → subscript-1.4.0}/tests/data/vfp/GasProd.VFP +0 -0
  250. {subscript-1.2.2 → subscript-1.4.0}/tests/data/vfp/pd2.VFP +0 -0
  251. {subscript-1.2.2 → subscript-1.4.0}/tests/data/welltest/eclipse/model/DROGON_DST_PLT-0.SMSPEC +0 -0
  252. {subscript-1.2.2 → subscript-1.4.0}/tests/data/welltest/eclipse/model/DROGON_DST_PLT-0.UNSMRY +0 -0
  253. {subscript-1.2.2 → subscript-1.4.0}/tests/test_casegen_upcars.py +1 -1
  254. {subscript-1.2.2 → subscript-1.4.0}/tests/test_docs.py +0 -0
  255. {subscript-1.2.2 → subscript-1.4.0}/tests/test_fmuobs_parsers.py +1 -1
  256. {subscript-1.2.2 → subscript-1.4.0}/tests/test_fmuobs_writers.py +1 -1
  257. {subscript-1.2.2 → subscript-1.4.0}/tests/test_subscriptlogger.py +0 -0
  258. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_casegen_upcars/demo_large_scale.yaml +0 -0
  259. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_casegen_upcars/demo_small_scale.yaml +0 -0
  260. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_casegen_upcars/dump_value.tmpl +0 -0
  261. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_casegen_upcars/upcars_eclipse_ref_lg.tmpl +0 -0
  262. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_casegen_upcars/upcars_eclipse_ref_ss.tmpl +0 -0
  263. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_eclcompress/permxyz.grdecl +0 -0
  264. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_fmuobs/drogon_wbhp_rft_wct_gor_tracer_4d.obs +0 -0
  265. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_fmuobs/ert-doc.csv +0 -0
  266. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_fmuobs/ert-doc.obs +0 -0
  267. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_fmuobs/ert-doc.yml +0 -0
  268. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_fmuobs/fmu-ensemble-obs.yml +0 -0
  269. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_fmuobs/hist_obs_wells.txt +0 -0
  270. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_fmuobs/ri-obs.csv +0 -0
  271. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_interp_relperm/cfg.yml +0 -0
  272. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_interp_relperm/sgof_base.inc +0 -0
  273. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_interp_relperm/sgof_opt.inc +0 -0
  274. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_interp_relperm/sgof_pes.inc +0 -0
  275. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_interp_relperm/swof_base.inc +0 -0
  276. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_interp_relperm/swof_opt.inc +0 -0
  277. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_interp_relperm/swof_pes.inc +0 -0
  278. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_merge_rft_ertobs/drogon/gendata_rft.csv +0 -0
  279. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A2.obs +0 -0
  280. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A2.txt +0 -0
  281. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A3.obs +0 -0
  282. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A3.txt +0 -0
  283. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A4.txt +0 -0
  284. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A4_1.obs +0 -0
  285. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A5.obs +0 -0
  286. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A5.txt +0 -0
  287. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A6.obs +0 -0
  288. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_merge_rft_ertobs/drogon/rft/R_A6.txt +0 -0
  289. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_merge_rft_ertobs/drogon/rft/well_date_rft.txt +0 -0
  290. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_merge_unrst_files/HIST.UNRST +0 -0
  291. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_merge_unrst_files/PRED.UNRST +0 -0
  292. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_ofmvol2csv/fileA.vol +0 -0
  293. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_ofmvol2csv/fileB.vol +0 -0
  294. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_ofmvol2csv/fileC.vol +0 -0
  295. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_ofmvol2csv/ofm_example.vol +0 -0
  296. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_ri_wellmod/drogon_include/grid/drogon.grid.grdecl +0 -0
  297. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_ri_wellmod/drogon_include/grid/drogon.ntg.grdecl +0 -0
  298. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_ri_wellmod/drogon_include/grid/drogon.perm.grdecl +0 -0
  299. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_ri_wellmod/drogon_trajectories/rft_wells.dat +0 -0
  300. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_ri_wellmod/drogon_trajectories/wells.dat +0 -0
  301. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_ri_wellmod/drogon_wells_noicd.rsp +0 -0
  302. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_ri_wellmod/reek_trajectories/reek_wells.dat +0 -0
  303. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_ri_wellmod/ri_reek_wells.rsp +0 -0
  304. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_runrms/runrms.yml +0 -0
  305. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_sector2fluxnum/DUMPFLUX_TEST.DATA +0 -0
  306. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_sector2fluxnum/DUMPFLUX_TEST.EGRID +0 -0
  307. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_sector2fluxnum/DUMPFLUX_TEST.FLUX +0 -0
  308. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_sector2fluxnum/OUT_COARSE.FLUX +0 -0
  309. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_sector2fluxnum/TEST.DATA +0 -0
  310. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_sector2fluxnum/TEST.EGRID +0 -0
  311. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_sector2fluxnum/TEST.INIT +0 -0
  312. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_sector2fluxnum/TEST.UNRST +0 -0
  313. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_sunsch/config.yml +0 -0
  314. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_sunsch/emptyinit.sch +0 -0
  315. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_sunsch/foo1.sch +0 -0
  316. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_sunsch/footemplate.sch +0 -0
  317. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_sunsch/initwithdates.sch +0 -0
  318. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_sunsch/merge2.sch +0 -0
  319. {subscript-1.2.2 → subscript-1.4.0}/tests/testdata_sunsch/mergeme.sch +0 -0
  320. {subscript-1.2.2 → 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
 
@@ -22,16 +22,16 @@ jobs:
22
22
  runs-on: ubuntu-latest
23
23
  strategy:
24
24
  matrix:
25
- python-version: ["3.8", "3.9", "3.10"]
25
+ python-version: ["3.8", "3.9", "3.10", "3.11"]
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
 
@@ -60,17 +60,13 @@ jobs:
60
60
  - name: List all installed packages
61
61
  run: pip freeze
62
62
 
63
- - name: Lint with isort
63
+ - name: Format with ruff
64
64
  if: ${{ always() }}
65
- run: isort --check-only --profile black src tests
65
+ run: ruff format . --check
66
66
 
67
- - name: Lint with black
67
+ - name: Lint with ruff
68
68
  if: ${{ always() }}
69
- run: black --check src tests
70
-
71
- - name: Lint with flake8
72
- if: ${{ always() }}
73
- run: flake8 src tests
69
+ run: ruff check .
74
70
 
75
71
  - name: Check typing with mypy
76
72
  if: ${{ always() }}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: subscript
3
- Version: 1.2.2
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
@@ -692,6 +692,7 @@ Classifier: Operating System :: POSIX :: Linux
692
692
  Classifier: Programming Language :: Python :: 3.8
693
693
  Classifier: Programming Language :: Python :: 3.9
694
694
  Classifier: Programming Language :: Python :: 3.10
695
+ Classifier: Programming Language :: Python :: 3.11
695
696
  Classifier: Natural Language :: English
696
697
  Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
697
698
  Requires-Python: >=3.8
@@ -712,13 +713,9 @@ Requires-Dist: scipy
712
713
  Requires-Dist: seaborn
713
714
  Requires-Dist: segyio
714
715
  Requires-Dist: shapely
715
- Requires-Dist: urllib3<2
716
716
  Requires-Dist: xlrd
717
717
  Requires-Dist: xtgeo
718
718
  Provides-Extra: tests
719
- Requires-Dist: black; extra == "tests"
720
- Requires-Dist: flake8; extra == "tests"
721
- Requires-Dist: isort; extra == "tests"
722
719
  Requires-Dist: mypy; extra == "tests"
723
720
  Requires-Dist: pytest; extra == "tests"
724
721
  Requires-Dist: pytest-cov; extra == "tests"
@@ -726,6 +723,7 @@ Requires-Dist: pytest-mock; extra == "tests"
726
723
  Requires-Dist: pytest-xdist; extra == "tests"
727
724
  Requires-Dist: rstcheck; extra == "tests"
728
725
  Requires-Dist: rstcheck-core; extra == "tests"
726
+ Requires-Dist: ruff; extra == "tests"
729
727
  Requires-Dist: types-Jinja2; extra == "tests"
730
728
  Requires-Dist: types-PyYAML; extra == "tests"
731
729
  Requires-Dist: types-python-dateutil; extra == "tests"
@@ -742,9 +740,9 @@ Requires-Dist: sphinx_rtd_theme; extra == "docs"
742
740
 
743
741
  [![subscript](https://github.com/equinor/subscript/actions/workflows/subscript.yml/badge.svg)](https://github.com/equinor/subscript/actions/workflows/subscript.yml)
744
742
  [![codecov](https://codecov.io/gh/equinor/subscript/branch/master/graph/badge.svg)](https://codecov.io/gh/equinor/subscript)
745
- ![Python Version](https://img.shields.io/badge/python-3.8%20|%203.9%20|%203.10-blue.svg)
743
+ ![Python Version](https://img.shields.io/badge/python-3.8%20|%203.9%20|%203.10%20|%203.11-blue.svg)
746
744
  [![License: GPL v3](https://img.shields.io/github/license/equinor/subscript)](https://www.gnu.org/licenses/gpl-3.0)
747
- [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
745
+ [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
748
746
 
749
747
  **subscript** is Equinor's collection of scripts used for subsurface reservoir modelling.
750
748
 
@@ -2,9 +2,9 @@
2
2
 
3
3
  [![subscript](https://github.com/equinor/subscript/actions/workflows/subscript.yml/badge.svg)](https://github.com/equinor/subscript/actions/workflows/subscript.yml)
4
4
  [![codecov](https://codecov.io/gh/equinor/subscript/branch/master/graph/badge.svg)](https://codecov.io/gh/equinor/subscript)
5
- ![Python Version](https://img.shields.io/badge/python-3.8%20|%203.9%20|%203.10-blue.svg)
5
+ ![Python Version](https://img.shields.io/badge/python-3.8%20|%203.9%20|%203.10%20|%203.11-blue.svg)
6
6
  [![License: GPL v3](https://img.shields.io/github/license/equinor/subscript)](https://www.gnu.org/licenses/gpl-3.0)
7
- [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
7
+ [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
8
8
 
9
9
  **subscript** is Equinor's collection of scripts used for subsurface reservoir modelling.
10
10
 
@@ -0,0 +1,34 @@
1
+ install_test_dependencies () {
2
+ pip install ".[tests,docs]"
3
+ }
4
+
5
+ copy_test_files () {
6
+ cp -r $CI_SOURCE_ROOT/tests $CI_TEST_ROOT/tests
7
+ cp $CI_SOURCE_ROOT/pyproject.toml $CI_TEST_ROOT
8
+ }
9
+
10
+ get_os_arch () {
11
+ uname_info=$(uname -a)
12
+
13
+ rhel7=$(echo "$uname_info" | grep "el7")
14
+ rhel8=$(echo "$uname_info" | grep "el8")
15
+
16
+ os_arch="undetermined"
17
+
18
+ if [ "$rhel7" ]; then
19
+ os_arch="x86_64_RH_7"
20
+ elif [ "$rhel8" ]; then
21
+ os_arch="x86_64_RH_8"
22
+ else
23
+ echo "$os_arch"
24
+ exit 1
25
+ fi
26
+
27
+ echo "$os_arch"
28
+ exit 0
29
+ }
30
+
31
+ start_tests () {
32
+ os_arch="$(get_os_arch)"
33
+ pytest -n auto --flow-simulator="/project/res/$os_arch/bin/flowdaily" --eclipse-simulator="runeclipse"
34
+ }
@@ -58,8 +58,11 @@ running tests that rely upon a black oil simulation.
58
58
 
59
59
  .. code-block:: console
60
60
 
61
+ # running on redhat 7
61
62
  pytest -n auto --flow-simulator="/project/res/x86_64_RH_7/bin/flowdaily" --eclipse-simulator="runeclipse"
62
63
 
64
+ # running on redhat 8
65
+ pytest -n auto --flow-simulator="/project/res/x86_64_RH_8/bin/flowdaily" --eclipse-simulator="runeclipse"
63
66
 
64
67
  Code style
65
68
  ----------
@@ -69,9 +72,8 @@ the linting done in CI:
69
72
 
70
73
  .. code-block:: console
71
74
 
72
- isort --check-only --profile black src tests
73
- black --check *.py src tests
74
- flake8 src tests
75
+ ruff .
76
+ ruff format .
75
77
  mypy src/subscript
76
78
  rstcheck -r docs
77
79
 
@@ -30,6 +30,7 @@ classifiers = [
30
30
  "Programming Language :: Python :: 3.8",
31
31
  "Programming Language :: Python :: 3.9",
32
32
  "Programming Language :: Python :: 3.10",
33
+ "Programming Language :: Python :: 3.11",
33
34
  "Natural Language :: English",
34
35
  "License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
35
36
  ]
@@ -50,16 +51,12 @@ dependencies = [
50
51
  "seaborn",
51
52
  "segyio",
52
53
  "shapely",
53
- "urllib3<2",
54
54
  "xlrd",
55
55
  "xtgeo",
56
56
  ]
57
57
 
58
58
  [project.optional-dependencies]
59
59
  tests = [
60
- "black",
61
- "flake8",
62
- "isort",
63
60
  "mypy",
64
61
  "pytest",
65
62
  "pytest-cov",
@@ -67,6 +64,7 @@ tests = [
67
64
  "pytest-xdist",
68
65
  "rstcheck",
69
66
  "rstcheck-core",
67
+ "ruff",
70
68
  "types-Jinja2",
71
69
  "types-PyYAML",
72
70
  "types-python-dateutil",
@@ -134,12 +132,6 @@ script-files = [
134
132
  "src/subscript/legacy/runeclipse",
135
133
  ]
136
134
 
137
- [tool.black]
138
- line-length = 88
139
-
140
- [tool.isort]
141
- profile = "black"
142
-
143
135
  [tool.mypy]
144
136
  ignore_missing_imports = true
145
137
 
@@ -166,3 +158,24 @@ markers = [
166
158
 
167
159
  [tool.rstcheck]
168
160
  ignore_directives = ["argparse", "automodule"]
161
+
162
+ [tool.ruff]
163
+ lint.ignore = [
164
+ "C901",
165
+ ]
166
+ lint.select = [
167
+ "C",
168
+ "E",
169
+ "F",
170
+ "I",
171
+ "PIE",
172
+ "Q",
173
+ "RET",
174
+ "RSE",
175
+ "SIM",
176
+ "W",
177
+ ]
178
+ line-length = 88
179
+
180
+ [tool.ruff.lint.isort]
181
+ combine-as-imports = true
@@ -1,5 +1,6 @@
1
1
  import logging
2
2
  import sys
3
+ from pathlib import Path
3
4
 
4
5
  try:
5
6
  from importlib import metadata
@@ -9,6 +10,21 @@ except metadata.PackageNotFoundError:
9
10
  pass
10
11
 
11
12
 
13
+ def detect_os(release_file: Path = Path("/etc/redhat-release")) -> str:
14
+ """Detect operating system string in runtime, just use default if not found."""
15
+ default_os_version = "x86_64_RH_7"
16
+
17
+ if release_file.is_file():
18
+ with open(release_file, "r", encoding="utf-8") as buffer:
19
+ tokens = buffer.read().split()
20
+ for t in tokens:
21
+ if "." in t:
22
+ major = t.split(".")[0]
23
+ return f"x86_64_RH_{major}"
24
+ raise ValueError("Could not detect RHEL version")
25
+ return default_os_version
26
+
27
+
12
28
  def getLogger(module_name="subscript"):
13
29
  # pylint: disable=invalid-name
14
30
  """Provides a unified logger for subscript scripts.
@@ -65,9 +65,7 @@ def get_jobs(status: str, bjobs_function: Callable) -> pd.DataFrame:
65
65
  data = [
66
66
  [
67
67
  uname,
68
- 1
69
- if rex.match(hname) is None
70
- else int(rex.match(hname).group(1)), # type: ignore
68
+ 1 if rex.match(hname) is None else int(rex.match(hname).group(1)), # type: ignore
71
69
  ]
72
70
  for (uname, hname) in slines
73
71
  ]
@@ -549,9 +549,8 @@ def main():
549
549
  built_in_functions = ["range"]
550
550
 
551
551
  for var in sorted(meta.find_undeclared_variables(ast)):
552
- if dictionary.get(var) is None:
553
- if var not in built_in_functions:
554
- undefined_var.append(var)
552
+ if dictionary.get(var) is None and var not in built_in_functions:
553
+ undefined_var.append(var)
555
554
 
556
555
  if undefined_var:
557
556
  logger.warning(
@@ -1,4 +1,4 @@
1
- """ Engine part of casegen_upcars """
1
+ """Engine part of casegen_upcars"""
2
2
 
3
3
  import datetime
4
4
  import io
@@ -435,9 +435,7 @@ Initializing model
435
435
  idx : idx + self._fracture_cell_count,
436
436
  start_fracture_idx:end_fracture_idx,
437
437
  start_fracture_k : end_fracture_k + 1,
438
- ] = (
439
- _i + 1
440
- )
438
+ ] = _i + 1
441
439
 
442
440
  for _i, idx in enumerate(self._fracture_j):
443
441
  fracture_length = max(0.0, min(1.0, self._fracture_length_x[_i])) * self._lx
@@ -470,9 +468,9 @@ Initializing model
470
468
  if self._a * self._b * self._c == 0.0:
471
469
  self.dict_info["ModelDescription"] = f"Slab with tilting angle {self._tilt}"
472
470
  else:
473
- self.dict_info[
474
- "ModelDescription"
475
- ] = "Dome structure with radius (x, y, z) : {:.2f}m, {:.2f}m, {:.2f}m"
471
+ self.dict_info["ModelDescription"] = (
472
+ "Dome structure with radius (x, y, z) : {:.2f}m, {:.2f}m, {:.2f}m"
473
+ )
476
474
 
477
475
  x_mid = self._centroid_x * self._lx
478
476
  y_mid = self._centroid_y * self._ly
@@ -494,13 +492,13 @@ Initializing model
494
492
  cell_dz = np.empty((self._total_nx, self._total_ny, self._total_nz))
495
493
 
496
494
  for idx in self._fracture_i:
497
- cell_dx[
498
- idx : idx + self._fracture_cell_count, :, :
499
- ] = self._fracture_thickness
495
+ cell_dx[idx : idx + self._fracture_cell_count, :, :] = (
496
+ self._fracture_thickness
497
+ )
500
498
  for idx in self._fracture_j:
501
- cell_dy[
502
- :, idx : idx + self._fracture_cell_count, :
503
- ] = self._fracture_thickness
499
+ cell_dy[:, idx : idx + self._fracture_cell_count, :] = (
500
+ self._fracture_thickness
501
+ )
504
502
  for idx in range(self._nz):
505
503
  cell_dz[:, :, idx] = self._layer_dz[idx]
506
504
  self._cell_volume = cell_dx * cell_dy * cell_dz
@@ -608,10 +606,7 @@ Initializing model
608
606
  assert len(streak_property) == len(
609
607
  self._streak_k
610
608
  ), f"Number of input {keyword} is not equal to number of streak"
611
- if isinstance(fracture_property, int):
612
- data_type = np.int16
613
- else:
614
- data_type = float
609
+ data_type = np.int16 if isinstance(fracture_property, int) else float
615
610
  props = np.empty(
616
611
  (self._total_nx, self._total_ny, self._total_nz), dtype=data_type
617
612
  )
@@ -653,10 +648,7 @@ Initializing model
653
648
  + keyword
654
649
  + " is not equal to number fault in Y- direction"
655
650
  )
656
- if isinstance(fracture_x_property, int):
657
- data_type = np.int16
658
- else:
659
- data_type = float
651
+ data_type = np.int16 if isinstance(fracture_x_property, int) else float
660
652
  props = np.empty(
661
653
  (self._total_nx, self._total_ny, self._total_nz), dtype=data_type
662
654
  )
@@ -779,9 +771,9 @@ Initializing model
779
771
  )
780
772
 
781
773
  for idx in range(1, self._total_nz):
782
- zcorn[
783
- n_surface_points * 2 * idx : n_surface_points * (2 * idx + 1)
784
- ] = zcorn[n_surface_points * (2 * idx - 1) : n_surface_points * (2 * idx)]
774
+ zcorn[n_surface_points * 2 * idx : n_surface_points * (2 * idx + 1)] = (
775
+ zcorn[n_surface_points * (2 * idx - 1) : n_surface_points * (2 * idx)]
776
+ )
785
777
  zcorn[
786
778
  n_surface_points * (2 * idx + 1) : 2 * n_surface_points * (idx + 1)
787
779
  ] = (
@@ -810,8 +802,8 @@ Initializing model
810
802
  print("/", file=buffer_)
811
803
 
812
804
  print("COORD", file=buffer_)
813
- for _i in range(0, self._xv.shape[0]):
814
- for _j in range(0, self._xv.shape[1]):
805
+ for _i in range(self._xv.shape[0]):
806
+ for _j in range(self._xv.shape[1]):
815
807
  print(
816
808
  # pylint: disable=consider-using-f-string
817
809
  "{{x:{0}}} {{y:{0}}} {{z:{0}}} "
@@ -958,7 +950,7 @@ Initializing model
958
950
  low=near_fracture_vug_fraction_dist[0],
959
951
  high=near_fracture_vug_fraction_dist[1],
960
952
  size=1,
961
- )
953
+ )[0]
962
954
  * self._total_matrix_cells
963
955
  )
964
956
  )
@@ -1028,7 +1020,7 @@ Initializing model
1028
1020
  low=near_streak_vug_fraction_dist[0],
1029
1021
  high=near_streak_vug_fraction_dist[1],
1030
1022
  size=1,
1031
- )
1023
+ )[0]
1032
1024
  * self._total_matrix_cells
1033
1025
  )
1034
1026
  )
@@ -1085,7 +1077,7 @@ Initializing model
1085
1077
  low=random_vug_fraction_dist[0],
1086
1078
  high=random_vug_fraction_dist[1],
1087
1079
  size=1,
1088
- )
1080
+ )[0]
1089
1081
  * self._total_matrix_cells
1090
1082
  )
1091
1083
  )
@@ -1,4 +1,5 @@
1
- """ Supporting functions/class for casegen_upcars """
1
+ """Supporting functions/class for casegen_upcars"""
2
+
2
3
  import numpy as np
3
4
  from scipy.stats import uniform
4
5
 
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env python
2
- """ Argument parser for casegen_upcars """
2
+ """Argument parser for casegen_upcars"""
3
3
 
4
4
  from subscript import __version__
5
5
 
@@ -1,4 +1,5 @@
1
1
  """SWATINIT qc tool"""
2
+
2
3
  import argparse
3
4
  import sys
4
5
  from typing import Any, Dict, List
@@ -323,10 +324,7 @@ def qc_flag(qc_frame: pd.DataFrame) -> pd.DataFrame:
323
324
 
324
325
  qc_col = pd.Series(index=qc_frame.index, dtype=str)
325
326
 
326
- if "OWC" in qc_frame:
327
- contact = "OWC"
328
- else:
329
- contact = "GWC"
327
+ contact = "OWC" if "OWC" in qc_frame else "GWC"
330
328
 
331
329
  # Eclipse and libecl does not calculate cell centres to the same decimals.
332
330
  # Add some tolerance when testing towards fluid contacts.
@@ -356,9 +354,9 @@ def qc_flag(qc_frame: pd.DataFrame) -> pd.DataFrame:
356
354
  # Below a nonzero capillary entry pressure but above the contact,
357
355
  # SWAT and SWATINIT should be 1.
358
356
  if "PPCW" in qc_frame:
359
- qc_col[
360
- np.isclose(qc_frame["SWAT"], 1) & np.isclose(qc_frame["PPCW"], 0)
361
- ] = __PC_SCALED__
357
+ qc_col[np.isclose(qc_frame["SWAT"], 1) & np.isclose(qc_frame["PPCW"], 0)] = (
358
+ __PC_SCALED__
359
+ )
362
360
 
363
361
  # PC is scaled (including "scaling" using PC_SCALING=1), but
364
362
  # SWAT!=SWATINIT, this must be due to EQUIL item 9 being nonzero.
@@ -553,10 +551,7 @@ def compute_pc(qc_frame: pd.DataFrame, satfunc_df: pd.DataFrame) -> pd.Series:
553
551
  swls = satnum_frame["SWL"].values
554
552
  else:
555
553
  swls = None
556
- if "SWU" in satnum_frame:
557
- swus = satnum_frame["SWU"].values
558
- else:
559
- swus = None
554
+ swus = satnum_frame["SWU"].values if "SWU" in satnum_frame else None
560
555
  p_cap[satnum_frame.index] = _evaluate_pc(
561
556
  satnum_frame["SWAT"].values,
562
557
  satnum_frame["PC_SCALING"].values,
@@ -565,10 +560,7 @@ def compute_pc(qc_frame: pd.DataFrame, satfunc_df: pd.DataFrame) -> pd.Series:
565
560
  satfunc_df[satfunc_df["SATNUM"] == satnum],
566
561
  )
567
562
  # Fix needed for OPM-flow above contact:
568
- if "OWC" in qc_frame:
569
- contact = "OWC"
570
- else:
571
- contact = "GWC"
563
+ contact = "OWC" if "OWC" in qc_frame else "GWC"
572
564
 
573
565
  # When SWATINIT=SWL=SWAT, PPCW as reported by Eclipse is the
574
566
  # same as PCOW_MAX, and we cannot use it to compute PC, remove it:
@@ -618,7 +610,7 @@ def merge_equil(grid_df: pd.DataFrame, equil_df: pd.DataFrame) -> pd.DataFrame:
618
610
  # Be compatible with future change in res2df:
619
611
  equil_df.rename({"ACCURACY": "OIP_INIT"}, axis="columns", inplace=True)
620
612
 
621
- contacts = list(set(["OWC", "GOC", "GWC"]).intersection(set(equil_df.columns)))
613
+ contacts = list({"OWC", "GOC", "GWC"}.intersection(set(equil_df.columns)))
622
614
  # Rename and slice the equil dataframe:
623
615
  equil_df = equil_df.rename(
624
616
  {"Z": "Z_DATUM", "PRESSURE": "PRESSURE_DATUM"}, axis="columns"
@@ -630,8 +622,7 @@ def merge_equil(grid_df: pd.DataFrame, equil_df: pd.DataFrame) -> pd.DataFrame:
630
622
  assert (
631
623
  not pd.isnull(equil_df).any().any()
632
624
  ), f"BUG: NaNs in equil dataframe:\n{equil_df}"
633
- grid_df = grid_df.merge(equil_df, on="EQLNUM", how="left")
634
- return grid_df
625
+ return grid_df.merge(equil_df, on="EQLNUM", how="left")
635
626
 
636
627
 
637
628
  def merge_pc_max(
@@ -1,6 +1,7 @@
1
1
  """Conversion between grid corner point formats"""
2
2
 
3
3
  import argparse
4
+ import logging
4
5
  import os
5
6
  import sys
6
7
  from pathlib import Path
@@ -18,7 +19,9 @@ CONVERSIONS = ["ecl2roff"]
18
19
  MODES = ["grid", "init", "restart"]
19
20
 
20
21
  xtg = XTGeoDialog()
21
- logger = xtg.functionlogger(__name__)
22
+
23
+ logging.basicConfig(level=logging.INFO)
24
+ logger = logging.getLogger(__name__)
22
25
 
23
26
 
24
27
  def get_parser() -> argparse.ArgumentParser:
@@ -147,10 +150,7 @@ def _convert_ecl2roff(
147
150
  if not props:
148
151
  raise SystemExit("STOP. No properties given")
149
152
 
150
- if ":" in props:
151
- props_list = props.split(":")
152
- else:
153
- props_list = props.split()
153
+ props_list = props.split(":") if ":" in props else props.split()
154
154
 
155
155
  fformat = mode
156
156
  fformat = fformat.replace("restart", "unrst")
@@ -162,10 +162,7 @@ def _convert_ecl2roff(
162
162
 
163
163
  if os.path.exists(dates):
164
164
  dates = " ".join(Path(dates).read_text(encoding="utf8").splitlines())
165
- if ":" in dates:
166
- dates_list = dates.split(":")
167
- else:
168
- dates_list = dates.split()
165
+ dates_list = dates.split(":") if ":" in dates else dates.split()
169
166
  else:
170
167
  dates_list = None
171
168
 
@@ -198,8 +195,9 @@ def main(args=None) -> None:
198
195
  logger.info(args)
199
196
 
200
197
  if args.conversion not in set(CONVERSIONS):
201
- logger.critical("ERROR")
202
- SystemExit("Illegal conversion <{args.conversion}>. Allowed are: {CONVERSIONS}")
198
+ raise ValueError(
199
+ f"Illegal conversion <{args.conversion}>. Allowed are: {CONVERSIONS}"
200
+ )
203
201
 
204
202
  xtg.say("Running conversion...")
205
203
  _convert_ecl2roff(
@@ -7,8 +7,7 @@ from typing import List, Union
7
7
  import pandas as pd
8
8
  from dateutil.relativedelta import relativedelta
9
9
 
10
- from subscript import __version__
11
- from subscript import getLogger as subscriptlogger
10
+ from subscript import __version__, getLogger as subscriptlogger
12
11
  from subscript.eclcompress.eclcompress import glob_patterns
13
12
 
14
13
  logger = subscriptlogger(__name__)
@@ -71,7 +70,7 @@ SUPPORTED_COLS = SUPPORTED_VOLCOLS + SUPPORTED_DAYCOLS
71
70
 
72
71
 
73
72
  def read_pdm_csv_files(
74
- csvfiles: Union[pd.DataFrame, str, List[str], List[pd.DataFrame]]
73
+ csvfiles: Union[pd.DataFrame, str, List[str], List[pd.DataFrame]],
75
74
  ) -> pd.DataFrame:
76
75
  """Read a list of CSV files and return a dataframe
77
76
 
@@ -250,8 +249,6 @@ class CustomFormatter(
250
249
 
251
250
  # pylint: disable=unnecessary-pass
252
251
 
253
- pass
254
-
255
252
 
256
253
  def get_parser() -> argparse.ArgumentParser:
257
254
  """Parse command line arguments, return a Namespace with arguments"""
@@ -8,7 +8,7 @@ import sys
8
8
  from typing import Dict, List, Optional
9
9
 
10
10
  import pandas as pd
11
- from ert import ErtScript
11
+ from ert.config import ErtScript
12
12
  from ert.shared.plugins.plugin_manager import hook_implementation # type: ignore
13
13
 
14
14
  from subscript import __version__, getLogger
@@ -54,7 +54,6 @@ class CustomFormatter(
54
54
  """
55
55
 
56
56
  # pylint: disable=unnecessary-pass
57
- pass
58
57
 
59
58
 
60
59
  class CsvMerge(ErtScript):
@@ -243,7 +242,7 @@ def taglist(strings: List[str], regexp_str: str) -> list:
243
242
  list is returned.
244
243
  """
245
244
  regexp = re.compile(regexp_str)
246
- matches = map(lambda x: re.match(regexp, x), strings)
245
+ matches = (re.match(regexp, x) for x in strings)
247
246
  values = [x and x.group(1) for x in matches]
248
247
  if any(values):
249
248
  return values