res2df 1.3.1__tar.gz → 1.3.3__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 (259) hide show
  1. {res2df-1.3.1 → res2df-1.3.3}/.github/workflows/codecov.yml +6 -0
  2. {res2df-1.3.1 → res2df-1.3.3}/.github/workflows/res2df.yml +6 -0
  3. {res2df-1.3.1 → res2df-1.3.3}/PKG-INFO +3 -2
  4. {res2df-1.3.1 → res2df-1.3.3}/res2df/csv2res.py +0 -15
  5. {res2df-1.3.1 → res2df-1.3.3}/res2df/fipreports.py +14 -15
  6. {res2df-1.3.1 → res2df-1.3.3}/res2df/grid.py +2 -2
  7. {res2df-1.3.1 → res2df-1.3.3}/res2df/gruptree.py +1 -1
  8. res2df-1.3.3/res2df/hook_implementations/forward_model_steps.py +138 -0
  9. {res2df-1.3.1 → res2df-1.3.3}/res2df/res2csv.py +0 -27
  10. {res2df-1.3.1 → res2df-1.3.3}/res2df/summary.py +5 -0
  11. {res2df-1.3.1 → res2df-1.3.3}/res2df/version.py +9 -4
  12. {res2df-1.3.1 → res2df-1.3.3}/res2df/vfp/_vfpinj.py +4 -2
  13. {res2df-1.3.1 → res2df-1.3.3}/res2df/vfp/_vfpprod.py +4 -2
  14. {res2df-1.3.1 → res2df-1.3.3}/res2df.egg-info/PKG-INFO +3 -2
  15. {res2df-1.3.1 → res2df-1.3.3}/res2df.egg-info/SOURCES.txt +1 -4
  16. {res2df-1.3.1 → res2df-1.3.3}/res2df.egg-info/entry_points.txt +1 -1
  17. {res2df-1.3.1 → res2df-1.3.3}/ruff.toml +1 -0
  18. {res2df-1.3.1 → res2df-1.3.3}/setup.cfg +0 -4
  19. {res2df-1.3.1 → res2df-1.3.3}/setup.py +1 -2
  20. {res2df-1.3.1 → res2df-1.3.3}/tests/data/fipreports/TEST1.PRT +52 -0
  21. {res2df-1.3.1 → res2df-1.3.3}/tests/test_ert_hooks.py +1 -35
  22. {res2df-1.3.1 → res2df-1.3.3}/tests/test_fipreports.py +98 -0
  23. res2df-1.3.3/tests/test_hook_implementations.py +33 -0
  24. {res2df-1.3.1 → res2df-1.3.3}/tests/test_summary.py +57 -0
  25. res2df-1.3.1/.codacy.yml +0 -2
  26. res2df-1.3.1/res2df/config_jobs/CSV2RES +0 -5
  27. res2df-1.3.1/res2df/config_jobs/RES2CSV +0 -16
  28. res2df-1.3.1/res2df/hook_implementations/jobs.py +0 -63
  29. res2df-1.3.1/tests/test_hook_implementations.py +0 -88
  30. {res2df-1.3.1 → res2df-1.3.3}/.github/workflows/style.yml +0 -0
  31. {res2df-1.3.1 → res2df-1.3.3}/.github/workflows/typing.yml +0 -0
  32. {res2df-1.3.1 → res2df-1.3.3}/.gitignore +0 -0
  33. {res2df-1.3.1 → res2df-1.3.3}/.pre-commit-config.yaml +0 -0
  34. {res2df-1.3.1 → res2df-1.3.3}/CONTRIBUTING.md +0 -0
  35. {res2df-1.3.1 → res2df-1.3.3}/LICENSE +0 -0
  36. {res2df-1.3.1 → res2df-1.3.3}/README.md +0 -0
  37. {res2df-1.3.1 → res2df-1.3.3}/SECURITY.md +0 -0
  38. {res2df-1.3.1 → res2df-1.3.3}/ci/testkomodo.sh +0 -0
  39. {res2df-1.3.1 → res2df-1.3.3}/docs/_static/equinor-logo.png +0 -0
  40. {res2df-1.3.1 → res2df-1.3.3}/docs/_static/equinor-logo2.jpg +0 -0
  41. {res2df-1.3.1 → res2df-1.3.3}/docs/_static/equinor_logo.jpg +0 -0
  42. {res2df-1.3.1 → res2df-1.3.3}/docs/_static/equinor_logo_only.jpg +0 -0
  43. {res2df-1.3.1 → res2df-1.3.3}/docs/_templates/layout.html +0 -0
  44. {res2df-1.3.1 → res2df-1.3.3}/docs/conf.py +0 -0
  45. {res2df-1.3.1 → res2df-1.3.3}/docs/contribution.rst +0 -0
  46. {res2df-1.3.1 → res2df-1.3.3}/docs/csv2res.rst +0 -0
  47. {res2df-1.3.1 → res2df-1.3.3}/docs/glossary.rst +0 -0
  48. {res2df-1.3.1 → res2df-1.3.3}/docs/history.rst +0 -0
  49. {res2df-1.3.1 → res2df-1.3.3}/docs/index.rst +0 -0
  50. {res2df-1.3.1 → res2df-1.3.3}/docs/installation.rst +0 -0
  51. {res2df-1.3.1 → res2df-1.3.3}/docs/introduction.rst +0 -0
  52. {res2df-1.3.1 → res2df-1.3.3}/docs/res2csv.rst +0 -0
  53. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/compdat.csv +0 -0
  54. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/compdat.rst +0 -0
  55. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/equil-example.csv +0 -0
  56. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/equil.rst +0 -0
  57. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/fipnum.inc +0 -0
  58. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/fipreports-example.csv +0 -0
  59. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/fipreports-example.txt +0 -0
  60. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/fipreports.rst +0 -0
  61. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/grid.csv +0 -0
  62. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/grid.rst +0 -0
  63. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/gruptree.csv +0 -0
  64. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/gruptree.rst +0 -0
  65. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/gruptreenet.csv +0 -0
  66. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/images/injectoranalysis.png +0 -0
  67. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/images/multibranch-rftanalysis.png +0 -0
  68. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/nnc.csv +0 -0
  69. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/nnc.rst +0 -0
  70. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/outflow.csv +0 -0
  71. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/pillars-dyn1-stacked.csv +0 -0
  72. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/pillars-dyn1-unstacked.csv +0 -0
  73. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/pillars-example1.csv +0 -0
  74. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/pillars.rst +0 -0
  75. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/pvt.csv +0 -0
  76. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/pvt.rst +0 -0
  77. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/rft.rst +0 -0
  78. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/rft_columns.csv +0 -0
  79. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/satfunc.csv +0 -0
  80. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/satfunc.rst +0 -0
  81. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/summary.csv +0 -0
  82. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/summary.rst +0 -0
  83. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/trans-boundaries.csv +0 -0
  84. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/trans-group.csv +0 -0
  85. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/trans.rst +0 -0
  86. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/trans1.csv +0 -0
  87. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/wcon.csv +0 -0
  88. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/wcon.rst +0 -0
  89. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/well_connection_status.csv +0 -0
  90. {res2df-1.3.1 → res2df-1.3.3}/docs/usage/wellconnstatus.rst +0 -0
  91. {res2df-1.3.1 → res2df-1.3.3}/docs/usage.rst +0 -0
  92. {res2df-1.3.1 → res2df-1.3.3}/mypy.ini +0 -0
  93. {res2df-1.3.1 → res2df-1.3.3}/py.typed +0 -0
  94. {res2df-1.3.1 → res2df-1.3.3}/res2df/__init__.py +0 -0
  95. {res2df-1.3.1 → res2df-1.3.3}/res2df/__version__.py +0 -0
  96. {res2df-1.3.1 → res2df-1.3.3}/res2df/common.py +0 -0
  97. {res2df-1.3.1 → res2df-1.3.3}/res2df/compdat.py +0 -0
  98. {res2df-1.3.1 → res2df-1.3.3}/res2df/constants.py +0 -0
  99. {res2df-1.3.1 → res2df-1.3.3}/res2df/equil.py +0 -0
  100. {res2df-1.3.1 → res2df-1.3.3}/res2df/faults.py +0 -0
  101. {res2df-1.3.1 → res2df-1.3.3}/res2df/hook_implementations/__init__.py +0 -0
  102. {res2df-1.3.1 → res2df-1.3.3}/res2df/inferdims.py +0 -0
  103. {res2df-1.3.1 → res2df-1.3.3}/res2df/nnc.py +0 -0
  104. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/BRANPROP +0 -0
  105. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/COMPDAT +0 -0
  106. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/COMPLUMP +0 -0
  107. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/COMPSEGS +0 -0
  108. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/DENSITY +0 -0
  109. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/EQLDIMS +0 -0
  110. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/EQUIL +0 -0
  111. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/FAULTS +0 -0
  112. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/GRUPNET +0 -0
  113. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/GRUPTREE +0 -0
  114. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/NODEPROP +0 -0
  115. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/PBVD +0 -0
  116. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/PDVD +0 -0
  117. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/PVDG +0 -0
  118. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/PVDO +0 -0
  119. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/PVTG +0 -0
  120. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/PVTO +0 -0
  121. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/PVTW +0 -0
  122. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/ROCK +0 -0
  123. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/RSVD +0 -0
  124. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/RVVD +0 -0
  125. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/SGFN +0 -0
  126. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/SGOF +0 -0
  127. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/SGWFN +0 -0
  128. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/SLGOF +0 -0
  129. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/SOF2 +0 -0
  130. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/SOF3 +0 -0
  131. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/SWFN +0 -0
  132. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/SWOF +0 -0
  133. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/TABDIMS +0 -0
  134. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/VFPINJ +0 -0
  135. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/VFPPROD +0 -0
  136. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/WCONHIST +0 -0
  137. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/WCONINJE +0 -0
  138. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/WCONINJH +0 -0
  139. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/WCONPROD +0 -0
  140. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/WELOPEN +0 -0
  141. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/WELSEGS +0 -0
  142. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/WELSPECS +0 -0
  143. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/WLIST +0 -0
  144. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/WSEGAICD +0 -0
  145. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/WSEGSICD +0 -0
  146. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/WSEGVALV +0 -0
  147. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/readme +0 -0
  148. {res2df-1.3.1 → res2df-1.3.3}/res2df/opmkeywords/runmetoupdate.sh +0 -0
  149. {res2df-1.3.1 → res2df-1.3.3}/res2df/parameters.py +0 -0
  150. {res2df-1.3.1 → res2df-1.3.3}/res2df/pillars.py +0 -0
  151. {res2df-1.3.1 → res2df-1.3.3}/res2df/pvt.py +0 -0
  152. {res2df-1.3.1 → res2df-1.3.3}/res2df/res2csvlogger.py +0 -0
  153. {res2df-1.3.1 → res2df-1.3.3}/res2df/resdatafiles.py +0 -0
  154. {res2df-1.3.1 → res2df-1.3.3}/res2df/rft.py +0 -0
  155. {res2df-1.3.1 → res2df-1.3.3}/res2df/satfunc.py +0 -0
  156. {res2df-1.3.1 → res2df-1.3.3}/res2df/svg_color_keyword_names.txt +0 -0
  157. {res2df-1.3.1 → res2df-1.3.3}/res2df/trans.py +0 -0
  158. {res2df-1.3.1 → res2df-1.3.3}/res2df/vfp/__init__.py +0 -0
  159. {res2df-1.3.1 → res2df-1.3.3}/res2df/vfp/_vfp.py +0 -0
  160. {res2df-1.3.1 → res2df-1.3.3}/res2df/vfp/_vfpcommon.py +0 -0
  161. {res2df-1.3.1 → res2df-1.3.3}/res2df/vfp/_vfpdefs.py +0 -0
  162. {res2df-1.3.1 → res2df-1.3.3}/res2df/wcon.py +0 -0
  163. {res2df-1.3.1 → res2df-1.3.3}/res2df/wellcompletiondata.py +0 -0
  164. {res2df-1.3.1 → res2df-1.3.3}/res2df/wellconnstatus.py +0 -0
  165. {res2df-1.3.1 → res2df-1.3.3}/res2df.egg-info/dependency_links.txt +0 -0
  166. {res2df-1.3.1 → res2df-1.3.3}/res2df.egg-info/not-zip-safe +0 -0
  167. {res2df-1.3.1 → res2df-1.3.3}/res2df.egg-info/requires.txt +0 -0
  168. {res2df-1.3.1 → res2df-1.3.3}/res2df.egg-info/top_level.txt +0 -0
  169. {res2df-1.3.1 → res2df-1.3.3}/test_requirements.txt +0 -0
  170. {res2df-1.3.1 → res2df-1.3.3}/tests/__init__.py +0 -0
  171. {res2df-1.3.1 → res2df-1.3.3}/tests/conftest.py +0 -0
  172. {res2df-1.3.1 → res2df-1.3.3}/tests/data/eightcells/EIGHTCELLS.DATA +0 -0
  173. {res2df-1.3.1 → res2df-1.3.3}/tests/data/eightcells/EIGHTCELLS.EGRID +0 -0
  174. {res2df-1.3.1 → res2df-1.3.3}/tests/data/eightcells/EIGHTCELLS.INIT +0 -0
  175. {res2df-1.3.1 → res2df-1.3.3}/tests/data/eightcells/EIGHTCELLS.INSPEC +0 -0
  176. {res2df-1.3.1 → res2df-1.3.3}/tests/data/eightcells/EIGHTCELLS.PRT +0 -0
  177. {res2df-1.3.1 → res2df-1.3.3}/tests/data/eightcells/EIGHTCELLS.RFT +0 -0
  178. {res2df-1.3.1 → res2df-1.3.3}/tests/data/eightcells/EIGHTCELLS.RSSPEC +0 -0
  179. {res2df-1.3.1 → res2df-1.3.3}/tests/data/eightcells/EIGHTCELLS.SMSPEC +0 -0
  180. {res2df-1.3.1 → res2df-1.3.3}/tests/data/eightcells/EIGHTCELLS.UNRST +0 -0
  181. {res2df-1.3.1 → res2df-1.3.3}/tests/data/eightcells/EIGHTCELLS.UNSMRY +0 -0
  182. {res2df-1.3.1 → res2df-1.3.3}/tests/data/eightcells/eightcells_duplicated_summary_vector/EIGHTCELLS_DUPES.DATA +0 -0
  183. {res2df-1.3.1 → res2df-1.3.3}/tests/data/eightcells/eightcells_duplicated_summary_vector/EIGHTCELLS_DUPES.SMSPEC +0 -0
  184. {res2df-1.3.1 → res2df-1.3.3}/tests/data/eightcells/eightcells_duplicated_summary_vector/EIGHTCELLS_DUPES.UNSMRY +0 -0
  185. {res2df-1.3.1 → res2df-1.3.3}/tests/data/eightcells/zones.lyr +0 -0
  186. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/include/grid/reek.faults +0 -0
  187. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/include/grid/reek.grid +0 -0
  188. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/include/grid/reek.multflt +0 -0
  189. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/include/grid/reek.multz +0 -0
  190. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/include/grid/reek.perm +0 -0
  191. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/include/grid/reek.poro +0 -0
  192. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/include/props/let-sgof.txt +0 -0
  193. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/include/props/let-swof.txt +0 -0
  194. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/include/props/reek.endpoints +0 -0
  195. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/include/props/reek.pvt +0 -0
  196. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/include/props/reek.swatinit +0 -0
  197. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/include/props/sgof.txt +0 -0
  198. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/include/props/swof.inc +0 -0
  199. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/include/props/swof.txt +0 -0
  200. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/include/regions/reek.eqlnum +0 -0
  201. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/include/regions/reek.fipnum +0 -0
  202. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/include/schedule/op6_aicd1_gp.sch +0 -0
  203. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/include/schedule/op6_icd1_gp.sch +0 -0
  204. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/include/schedule/op6_valve1_gp.sch +0 -0
  205. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/include/schedule/reek_history.sch +0 -0
  206. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/include/solution/reek.equil +0 -0
  207. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/include/summary/reek.smry +0 -0
  208. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/model/2_R001_REEK-0-OPMFLOW.PRT +0 -0
  209. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/model/2_R001_REEK-0.DATA +0 -0
  210. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/model/2_R001_REEK-0.ECLEND +0 -0
  211. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/model/2_R001_REEK-0.EGRID +0 -0
  212. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/model/2_R001_REEK-0.INIT +0 -0
  213. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/model/2_R001_REEK-0.LOG +0 -0
  214. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/model/2_R001_REEK-0.PRT +0 -0
  215. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/model/2_R001_REEK-0.RFT +0 -0
  216. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/model/2_R001_REEK-0.SMSPEC +0 -0
  217. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/model/2_R001_REEK-0.UNRST +0 -0
  218. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/model/2_R001_REEK-0.UNSMRY +0 -0
  219. {res2df-1.3.1 → res2df-1.3.3}/tests/data/reek/eclipse/model/zones.lyr +0 -0
  220. {res2df-1.3.1 → res2df-1.3.3}/tests/data/timesteps/SHORT_STEP.DATA +0 -0
  221. {res2df-1.3.1 → res2df-1.3.3}/tests/data/timesteps/SHORT_STEP.SMSPEC +0 -0
  222. {res2df-1.3.1 → res2df-1.3.3}/tests/data/timesteps/SHORT_STEP.UNSMRY +0 -0
  223. {res2df-1.3.1 → res2df-1.3.3}/tests/data/timesteps/SHORT_STEP_LONG.DATA +0 -0
  224. {res2df-1.3.1 → res2df-1.3.3}/tests/data/timesteps/SHORT_STEP_LONG.SMSPEC +0 -0
  225. {res2df-1.3.1 → res2df-1.3.3}/tests/data/timesteps/SHORT_STEP_LONG.UNSMRY +0 -0
  226. {res2df-1.3.1 → res2df-1.3.3}/tests/data/timesteps/SHORT_STEP_WITH_TIMESTEP.DATA +0 -0
  227. {res2df-1.3.1 → res2df-1.3.3}/tests/data/timesteps/SHORT_STEP_WITH_TIMESTEP.SMSPEC +0 -0
  228. {res2df-1.3.1 → res2df-1.3.3}/tests/data/timesteps/SHORT_STEP_WITH_TIMESTEP.UNSMRY +0 -0
  229. {res2df-1.3.1 → res2df-1.3.3}/tests/data/timesteps/SHORT_STEP_WITH_TIMESTEP_LONG.DATA +0 -0
  230. {res2df-1.3.1 → res2df-1.3.3}/tests/data/timesteps/SHORT_STEP_WITH_TIMESTEP_LONG.SMSPEC +0 -0
  231. {res2df-1.3.1 → res2df-1.3.3}/tests/data/timesteps/SHORT_STEP_WITH_TIMESTEP_LONG.UNSMRY +0 -0
  232. {res2df-1.3.1 → res2df-1.3.3}/tests/test_common.py +0 -0
  233. {res2df-1.3.1 → res2df-1.3.3}/tests/test_compdat.py +0 -0
  234. {res2df-1.3.1 → res2df-1.3.3}/tests/test_eclfiles.py +0 -0
  235. {res2df-1.3.1 → res2df-1.3.3}/tests/test_equil.py +0 -0
  236. {res2df-1.3.1 → res2df-1.3.3}/tests/test_faults.py +0 -0
  237. {res2df-1.3.1 → res2df-1.3.3}/tests/test_grid.py +0 -0
  238. {res2df-1.3.1 → res2df-1.3.3}/tests/test_gruptree.py +0 -0
  239. {res2df-1.3.1 → res2df-1.3.3}/tests/test_inferdims.py +0 -0
  240. {res2df-1.3.1 → res2df-1.3.3}/tests/test_init.py +0 -0
  241. {res2df-1.3.1 → res2df-1.3.3}/tests/test_integration.py +0 -0
  242. {res2df-1.3.1 → res2df-1.3.3}/tests/test_logging.py +0 -0
  243. {res2df-1.3.1 → res2df-1.3.3}/tests/test_nnc.py +0 -0
  244. {res2df-1.3.1 → res2df-1.3.3}/tests/test_parameters.py +0 -0
  245. {res2df-1.3.1 → res2df-1.3.3}/tests/test_pillars.py +0 -0
  246. {res2df-1.3.1 → res2df-1.3.3}/tests/test_pvt.py +0 -0
  247. {res2df-1.3.1 → res2df-1.3.3}/tests/test_rft.py +0 -0
  248. {res2df-1.3.1 → res2df-1.3.3}/tests/test_satfunc.py +0 -0
  249. {res2df-1.3.1 → res2df-1.3.3}/tests/test_summary_restarts.py +0 -0
  250. {res2df-1.3.1 → res2df-1.3.3}/tests/test_trans.py +0 -0
  251. {res2df-1.3.1 → res2df-1.3.3}/tests/test_userapi.py +0 -0
  252. {res2df-1.3.1 → res2df-1.3.3}/tests/test_vfp.py +0 -0
  253. {res2df-1.3.1 → res2df-1.3.3}/tests/test_wcon.py +0 -0
  254. {res2df-1.3.1 → res2df-1.3.3}/tests/test_wellcompletiondata.py +0 -0
  255. {res2df-1.3.1 → res2df-1.3.3}/tests/test_wellconnstatus.py +0 -0
  256. {res2df-1.3.1 → res2df-1.3.3}/tests/test_welopen.py +0 -0
  257. {res2df-1.3.1 → res2df-1.3.3}/tests/test_wlist.py +0 -0
  258. {res2df-1.3.1 → res2df-1.3.3}/tests/test_zonemap.py +0 -0
  259. {res2df-1.3.1 → res2df-1.3.3}/types_requirements.txt +0 -0
@@ -16,6 +16,12 @@ jobs:
16
16
  PYTHON: '3.11'
17
17
 
18
18
  steps:
19
+
20
+ - name: Install Ubuntu dependencies
21
+ run: |
22
+ sudo apt-get update
23
+ sudo apt-get install libegl1
24
+
19
25
  - uses: actions/checkout@v4
20
26
 
21
27
  - name: Setup Python
@@ -28,6 +28,12 @@ jobs:
28
28
  install-ert: true
29
29
 
30
30
  steps:
31
+
32
+ - name: Install Ubuntu dependencies
33
+ run: |
34
+ sudo apt-get update
35
+ sudo apt-get install libegl1
36
+
31
37
  - name: Checkout commit locally
32
38
  uses: actions/checkout@v4
33
39
 
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: res2df
3
- Version: 1.3.1
3
+ Version: 1.3.3
4
4
  Summary: Convert reservoir simulator input and output to DataFrames
5
5
  Home-page: http://github.com/equinor/res2df
6
6
  Author: Håvard Berland
@@ -47,6 +47,7 @@ Dynamic: description
47
47
  Dynamic: description-content-type
48
48
  Dynamic: home-page
49
49
  Dynamic: license
50
+ Dynamic: license-file
50
51
  Dynamic: provides-extra
51
52
  Dynamic: requires-dist
52
53
  Dynamic: requires-python
@@ -19,21 +19,6 @@ from .summary import summary_reverse_main
19
19
  from .vfp import fill_reverse_parser as vfp_fill_reverse_parser
20
20
  from .vfp import vfp_reverse_main
21
21
 
22
- # String constants in use for generating ERT forward model documentation:
23
- DESCRIPTION: str = """Convert CSV files into include files. Uses the command
24
- line utility ``csv2res``. Run ``csv2res --help`` to see which subcommands are supported.
25
- No options other than the output file is possible when used directly as a forward model.
26
- When writing synthetic summary files, the ECLBASE with no filename suffix is expected
27
- as the OUTPUT argument."""
28
- CATEGORY: str = "utility.eclipse"
29
- EXAMPLES: str = (
30
- "``FORWARD_MODEL "
31
- "CSV2RES(<SUBCOMMAND>=equil, <CSVFILE>=equil.csv, "
32
- "<OUTPUT>=eclipse/include/equil.inc)``"
33
- "CSV2RES(<SUBCOMMAND>=summary, <CSVFILE>=summary-monthly.csv, "
34
- "<OUTPUT>=eclipse/model/MONTHLYSUMMARY)``"
35
- )
36
-
37
22
 
38
23
  def get_parser() -> argparse.ArgumentParser:
39
24
  """Make parser"""
@@ -66,10 +66,10 @@ def report_block_lineparser(line: str) -> tuple:
66
66
  (liquid_oil, vapour_oil, total_oil) = map(
67
67
  float_or_nan, colonsections[2].split()
68
68
  )
69
+ elif len(colonsections[2].split()) == 2:
70
+ (liquid_oil, total_oil) = map(float_or_nan, colonsections[2].split())
69
71
  elif len(colonsections[2].split()) == 1:
70
72
  total_oil = float_or_nan(colonsections[2])
71
- else:
72
- (liquid_oil, total_oil) = map(float_or_nan, colonsections[2].split())
73
73
 
74
74
  total_water = float_or_nan(colonsections[3])
75
75
 
@@ -135,9 +135,6 @@ def df(prtfile: Union[str, ResdataFiles], fipname: str = "FIPNUM") -> pd.DataFra
135
135
  ".+" + fipname + r"\s+REPORT\s+REGION\s+(\d+)", re.IGNORECASE
136
136
  )
137
137
 
138
- # Flag for whether we are supposedly parsing a PRT file made by OPM Flow:
139
- opm = False
140
-
141
138
  with open(prtfile, encoding="utf-8") as prt_fh:
142
139
  logger.info(
143
140
  "Parsing file %s for blocks starting with %s REPORT REGION",
@@ -148,8 +145,6 @@ def df(prtfile: Union[str, ResdataFiles], fipname: str = "FIPNUM") -> pd.DataFra
148
145
  matcheddate = re.match(ecl_datematcher, line)
149
146
  if matcheddate is None:
150
147
  matcheddate = re.match(opm_datematcher, line)
151
- if matcheddate is not None:
152
- opm = True
153
148
  if matcheddate is not None:
154
149
  newdate = datetime.date(
155
150
  year=int(matcheddate.group(3)),
@@ -176,15 +171,19 @@ def df(prtfile: Union[str, ResdataFiles], fipname: str = "FIPNUM") -> pd.DataFra
176
171
  # Skip if we are not on an interesting line.
177
172
  continue
178
173
 
179
- if opm is False:
180
- # The colons in the report block are not reliably included
181
- # (differs by Eclipse version), even in the same PRT file. We
182
- # insert them in fixed positions and hope for the best (if the
183
- # ASCII table is actually dynamic with respect to content, this
184
- # will fail)
174
+ # The colons in the report block are not reliably included
175
+ # (differs by Eclipse version), even in the same PRT file. We
176
+ # insert them in fixed positions and hope for the best (if the
177
+ # ASCII table is actually dynamic with respect to content, this
178
+ # will fail)
179
+ line = line.strip()
180
+ if line[0] != ":":
181
+ line = ":" + line
182
+ # There should another colon somewhere between 25 - 27
183
+ # (depend on OPM/Eclipse version)
184
+ if ":" not in line[25:27] and len(line) > 26:
185
185
  linechars = list(line)
186
- linechars[1] = ":"
187
- linechars[27] = ":"
186
+ linechars[26] = ":"
188
187
  line = "".join(linechars)
189
188
 
190
189
  records.append(
@@ -726,9 +726,9 @@ def df2res(
726
726
  raise ValueError(f"Keyword {keyword} not found in grid dataframe")
727
727
  vector = np.zeros(global_size)
728
728
  vector[grid_df["GLOBAL_INDEX"].astype(int).values] = grid_df[keyword]
729
- if dtype == int:
729
+ if dtype is int:
730
730
  vector = vector.astype(int)
731
- if dtype == float:
731
+ if dtype is float:
732
732
  vector = vector.astype(float)
733
733
  if len(vector) != global_size:
734
734
  logger.warning(
@@ -340,7 +340,7 @@ def _add_to_tree_from_dict(
340
340
  _add_to_tree_from_dict(nested_dict=value, name=key, tree=tree, parent=name)
341
341
 
342
342
 
343
- def tree_from_dict(nested_dict: dict) -> treelib.Tree:
343
+ def tree_from_dict(nested_dict: dict) -> treelib.Tree | str:
344
344
  """Convert a dictionary to a treelib Tree.
345
345
 
346
346
  The treelib representation of the trees is used
@@ -0,0 +1,138 @@
1
+ import shutil
2
+
3
+ try:
4
+ from ert import ( # type: ignore
5
+ ForwardModelStepDocumentation,
6
+ ForwardModelStepJSON,
7
+ ForwardModelStepPlugin,
8
+ ForwardModelStepValidationError,
9
+ )
10
+ from ert import plugin as ert_plugin # type: ignore
11
+ except ModuleNotFoundError:
12
+ # ert is not installed, use dummy/transparent function decorator:
13
+ def ert_plugin(name: str = ""):
14
+ def decorator(func):
15
+ return func
16
+
17
+ return decorator
18
+
19
+ class ForwardModelStepDocumentation: # type: ignore
20
+ pass
21
+
22
+ class ForwardModelStepJSON: # type: ignore
23
+ pass
24
+
25
+ class ForwardModelStepPlugin: # type: ignore
26
+ pass
27
+
28
+ class ForwardModelStepValidationError: # type: ignore
29
+ pass
30
+
31
+
32
+ class Res2Csv(ForwardModelStepPlugin):
33
+ def __init__(self) -> None:
34
+ super().__init__(
35
+ name="RES2CSV",
36
+ command=[
37
+ shutil.which("res2csv"),
38
+ "<SUBCOMMAND>",
39
+ "--verbose",
40
+ "--output",
41
+ "<OUTPUT>",
42
+ *[f"<XARG{num + 1}>" for num in range(10)],
43
+ "--",
44
+ "<ECLBASE>",
45
+ ],
46
+ default_mapping={f"<XARG{num + 1}>": "" for num in range(10)},
47
+ )
48
+
49
+ def validate_pre_experiment(self, fm_json: ForwardModelStepJSON) -> None:
50
+ if fm_json["argList"][0] == "<SUBCOMMAND>":
51
+ raise ForwardModelStepValidationError(
52
+ "You must supply a value for SUBCOMMAND to RES2CSV"
53
+ )
54
+ if fm_json["argList"][3] == "<OUTPUT>":
55
+ raise ForwardModelStepValidationError(
56
+ "You must supply a value for OUTPUT to RES2CSV"
57
+ )
58
+
59
+ @staticmethod
60
+ def documentation() -> ForwardModelStepDocumentation | None:
61
+ return ForwardModelStepDocumentation(
62
+ description="""Convert reservoir simulator input and output files into CSV
63
+ files, with the command line utility ``res2csv``. Run ``res2csv --help`` to see
64
+ which subcommands are supported.
65
+
66
+ For supplying options to subcommands, you can use the arguments ``<XARGn>``
67
+ where ``n`` goes from 1 to 10.
68
+
69
+ For more documentation, see https://equinor.github.io/res2df/.
70
+ """,
71
+ category="utility.eclipse",
72
+ examples="""Outputting the EQUIL data from a .DATA file. This is implicitly
73
+ supplied in ERT configs::
74
+
75
+ FORWARD_MODEL RES2CSV(<SUBCOMMAND>=equil, <OUTPUT>=equil.csv)
76
+
77
+ For a yearly summary export of the realization, options have to be supplied
78
+ with the XARG options::
79
+
80
+ FORWARD_MODEL RES2CSV(<SUBCOMMAND>=summary, \
81
+ <OUTPUT>=yearly.csv, <XARG1>="--time_index", <XARG2>="yearly")
82
+
83
+ The quotes around double-dashed options are critical to avoid ERT taking for a
84
+ comment. For more options, use ``<XARG3>`` etc.
85
+ """,
86
+ )
87
+
88
+
89
+ class Csv2Res(ForwardModelStepPlugin):
90
+ def __init__(self) -> None:
91
+ super().__init__(
92
+ name="CSV2RES",
93
+ command=[
94
+ shutil.which("csv2res"),
95
+ "<SUBCOMMAND>",
96
+ "--verbose",
97
+ "--output",
98
+ "<OUTPUT>",
99
+ "<CSVFILE>",
100
+ ],
101
+ )
102
+
103
+ def validate_pre_experiment(self, fm_json: ForwardModelStepJSON) -> None:
104
+ if fm_json["argList"][0] == "<SUBCOMMAND>":
105
+ raise ForwardModelStepValidationError(
106
+ "You must supply a value for SUBCOMMAND to CSV2RES"
107
+ )
108
+ if fm_json["argList"][3] == "<OUTPUT>":
109
+ raise ForwardModelStepValidationError(
110
+ "You must supply a value for OUTPUT to CSV2RES"
111
+ )
112
+ if fm_json["argList"][4] == "<CSVFILE>":
113
+ raise ForwardModelStepValidationError(
114
+ "You must supply a value for CSVFILE to CSV2RES"
115
+ )
116
+
117
+ @staticmethod
118
+ def documentation() -> ForwardModelStepDocumentation | None:
119
+ return ForwardModelStepDocumentation(
120
+ description="""Convert CSV files into include files. Uses the command
121
+ line utility ``csv2res``. Run ``csv2res --help`` to see which subcommands are supported.
122
+ No options other than the output file is possible when used directly as a forward model.
123
+ When writing synthetic summary files, the ECLBASE with no filename suffix is expected
124
+ as the OUTPUT argument.""",
125
+ category="utility.eclipse",
126
+ examples=(
127
+ "``FORWARD_MODEL "
128
+ "CSV2RES(<SUBCOMMAND>=equil, <CSVFILE>=equil.csv, "
129
+ "<OUTPUT>=eclipse/include/equil.inc)``"
130
+ "CSV2RES(<SUBCOMMAND>=summary, <CSVFILE>=summary-monthly.csv, "
131
+ "<OUTPUT>=eclipse/model/MONTHLYSUMMARY)``"
132
+ ),
133
+ )
134
+
135
+
136
+ @ert_plugin(name="RES2CSV")
137
+ def installable_forward_model_steps() -> list[type[ForwardModelStepPlugin]]:
138
+ return [Res2Csv, Csv2Res]
@@ -12,33 +12,6 @@ from typing import Optional
12
12
 
13
13
  from .__version__ import __version__
14
14
 
15
- # String constants in use for generating ERT forward model documentation:
16
- DESCRIPTION: str = """Convert reservoir simulator input and output files into CSV files,
17
- with the command line utility ``res2csv``. Run ``res2csv --help`` to see
18
- which subcommands are supported.
19
-
20
- For supplying options to subcommands, you can use the arguments ``<XARGn>``
21
- where ``n`` goes from 1 to 10.
22
-
23
- For more documentation, see https://equinor.github.io/res2df/.
24
- """
25
- CATEGORY: str = "utility.eclipse"
26
- EXAMPLES: str = """
27
-
28
- Outputting the EQUIL data from a .DATA file. This is implicitly
29
- supplied in ERT configs::
30
-
31
- FORWARD_MODEL RES2CSV(<SUBCOMMAND>=equil, <OUTPUT>=equil.csv)
32
-
33
- For a yearly summary export of the realization, options have to be supplied
34
- with the XARG options::
35
-
36
- FORWARD_MODEL RES2CSV(<SUBCOMMAND>=summary, <OUTPUT>=yearly.csv, <XARG1>="--time_index", <XARG2>="yearly")
37
-
38
- The quotes around double-dashed options are critical to avoid ERT taking for a
39
- comment. For more options, use ``<XARG3>`` etc.
40
- """ # noqa
41
-
42
15
 
43
16
  def get_parser() -> argparse.ArgumentParser:
44
17
  """Make parser"""
@@ -814,6 +814,11 @@ def summary_main(args) -> None:
814
814
  paramfile=args.paramfile,
815
815
  datetime=False,
816
816
  )
817
+
818
+ if sum_df.empty:
819
+ logger.error("No data to write. The input file may be missing or invalid.")
820
+ return
821
+
817
822
  if args.arrow:
818
823
  sum_df = _df2pyarrow(sum_df)
819
824
 
@@ -1,8 +1,13 @@
1
- # file generated by setuptools_scm
1
+ # file generated by setuptools-scm
2
2
  # don't change, don't track in version control
3
+
4
+ __all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
5
+
3
6
  TYPE_CHECKING = False
4
7
  if TYPE_CHECKING:
5
- from typing import Tuple, Union
8
+ from typing import Tuple
9
+ from typing import Union
10
+
6
11
  VERSION_TUPLE = Tuple[Union[int, str], ...]
7
12
  else:
8
13
  VERSION_TUPLE = object
@@ -12,5 +17,5 @@ __version__: str
12
17
  __version_tuple__: VERSION_TUPLE
13
18
  version_tuple: VERSION_TUPLE
14
19
 
15
- __version__ = version = '1.3.1'
16
- __version_tuple__ = version_tuple = (1, 3, 1)
20
+ __version__ = version = '1.3.3'
21
+ __version_tuple__ = version_tuple = (1, 3, 3)
@@ -116,7 +116,8 @@ def basic_data(
116
116
  if no_interp_values != no_tab_records:
117
117
  raise ValueError(
118
118
  "Dimensions of interpolation ranges does "
119
- "not match number of tabulated records"
119
+ "not match number of tabulated records "
120
+ f"in vfp table {tableno}"
120
121
  )
121
122
 
122
123
  # Extract interpolation values and tabulated values (BHP values)
@@ -136,7 +137,8 @@ def basic_data(
136
137
  if len(bhp_values) != no_flow_values:
137
138
  raise ValueError(
138
139
  "Dimension of record of tabulated values "
139
- "does not match number of flow values"
140
+ "does not match number of flow values "
141
+ f"in vfp table {tableno}"
140
142
  )
141
143
  bhp_table.append(bhp_values)
142
144
 
@@ -141,7 +141,8 @@ def basic_data(
141
141
  if no_interp_values != no_tab_records:
142
142
  raise ValueError(
143
143
  "Dimensions of interpolation ranges "
144
- "does not match number of tabulated records"
144
+ "does not match number of tabulated records "
145
+ f"in vfp table {tableno}"
145
146
  )
146
147
 
147
148
  # Extract interpolation values and tabulated values (BHP values)
@@ -171,7 +172,8 @@ def basic_data(
171
172
  if len(bhp_values) != no_flow_values:
172
173
  raise ValueError(
173
174
  "Dimension of record of tabulated "
174
- "values does not match number of flow values"
175
+ "values does not match number of flow values "
176
+ f"in vfp table {tableno}"
175
177
  )
176
178
  bhp_table.append(bhp_values)
177
179
 
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: res2df
3
- Version: 1.3.1
3
+ Version: 1.3.3
4
4
  Summary: Convert reservoir simulator input and output to DataFrames
5
5
  Home-page: http://github.com/equinor/res2df
6
6
  Author: Håvard Berland
@@ -47,6 +47,7 @@ Dynamic: description
47
47
  Dynamic: description-content-type
48
48
  Dynamic: home-page
49
49
  Dynamic: license
50
+ Dynamic: license-file
50
51
  Dynamic: provides-extra
51
52
  Dynamic: requires-dist
52
53
  Dynamic: requires-python
@@ -1,4 +1,3 @@
1
- .codacy.yml
2
1
  .gitignore
3
2
  .pre-commit-config.yaml
4
3
  CONTRIBUTING.md
@@ -105,10 +104,8 @@ res2df.egg-info/entry_points.txt
105
104
  res2df.egg-info/not-zip-safe
106
105
  res2df.egg-info/requires.txt
107
106
  res2df.egg-info/top_level.txt
108
- res2df/config_jobs/CSV2RES
109
- res2df/config_jobs/RES2CSV
110
107
  res2df/hook_implementations/__init__.py
111
- res2df/hook_implementations/jobs.py
108
+ res2df/hook_implementations/forward_model_steps.py
112
109
  res2df/opmkeywords/BRANPROP
113
110
  res2df/opmkeywords/COMPDAT
114
111
  res2df/opmkeywords/COMPLUMP
@@ -4,4 +4,4 @@ res2arrow = res2df.res2csv:main
4
4
  res2csv = res2df.res2csv:main
5
5
 
6
6
  [ert]
7
- res2df_jobs = res2df.hook_implementations.jobs
7
+ res2df_steps = res2df.hook_implementations.forward_model_steps
@@ -4,6 +4,7 @@ line-length = 88
4
4
 
5
5
  [lint]
6
6
  select = [
7
+ "E", # pycodestyle
7
8
  "W", # pycodestyle
8
9
  "I", # isort
9
10
  "B", # flake-8-bugbear
@@ -9,10 +9,6 @@ markers =
9
9
  integration: marks a test as an integration test
10
10
  requires_eclipse: A test that requires the Eclipse simulator
11
11
 
12
- [build_sphinx]
13
- all-files = 1
14
- warning-is-error = 1
15
-
16
12
  [rstcheck]
17
13
  ignore_directives = argparse,automodule
18
14
  ignore_messages = Hyperlink target .* is not referenced
@@ -67,7 +67,6 @@ setup(
67
67
  package_data={
68
68
  "res2df": [
69
69
  "opmkeywords/*",
70
- "config_jobs/*",
71
70
  "py.typed",
72
71
  "svg_color_keyword_names.txt",
73
72
  ]
@@ -79,7 +78,7 @@ setup(
79
78
  "res2csv=res2df.res2csv:main",
80
79
  "res2arrow=res2df.res2csv:main",
81
80
  ],
82
- "ert": ["res2df_jobs = res2df.hook_implementations.jobs"],
81
+ "ert": ["res2df_steps = res2df.hook_implementations.forward_model_steps"],
83
82
  },
84
83
  test_suite="tests",
85
84
  install_requires=REQUIREMENTS,
@@ -222,3 +222,55 @@ Randomly generated data
222
222
  OUTFLOW TO REGION 3 -87796. -87796.: 58859. : -0. -1594053. -1594053.
223
223
  OUTFLOW TO REGION 8 0. 0.: 21859. : 0. 0. 0.
224
224
  ====================================================================================================================================
225
+
226
+ ### Starting from OPM 2025.10, no space at the beginning of the line
227
+
228
+ **************************************************************************
229
+ BALANCE AT 0 DAYS *Drogon synthetic reservoir model *
230
+ REPORT 0 01 Jan 2018 * Flow version 2025.10-pre *
231
+ **************************************************************************
232
+
233
+
234
+ ==================================================
235
+ : FIELD TOTALS :
236
+ : PAV = 300 BARSA :
237
+ : PORV = 512394984 RM3 :
238
+ : Pressure is weighted by hydrocarbon pore volume:
239
+ : Pore volumes are taken at reference conditions :
240
+ :--------------- OIL SM3 ------------------:-- WAT SM3 --:-------------- GAS SM3 ---------------:
241
+ : LIQUID VAPOUR TOTAL : TOTAL : FREE DISSOLVED TOTAL :
242
+ :-------------------------:-------------------------------------------:----------------:-------------------------------------------:
243
+ :CURRENTLY IN PLACE : 33773363 162535 33935898 : 444928115 : 1056474997 4805914695 5862389693 :
244
+ :-------------------------:-------------------------------------------:----------------:-------------------------------------------:
245
+ :ORIGINALLY IN PLACE : 33773363 162535 33935898 : 444928115 : 1056474997 4805914695 5862389693 :
246
+ ====================================================================================================================================
247
+
248
+
249
+
250
+ ==================================================
251
+ : FIPOPM REPORT REGION 1 :
252
+ : PAV = 300 BARSA :
253
+ : PORV = 82199852 RM3 :
254
+ :--------------- OIL SM3 ------------------:-- WAT SM3 --:-------------- GAS SM3 ---------------:
255
+ : LIQUID VAPOUR TOTAL : TOTAL : FREE DISSOLVED TOTAL :
256
+ :-------------------------:-------------------------------------------:----------------:-------------------------------------------:
257
+ :CURRENTLY IN PLACE : 311274 0 311274 : 79180976 : 0 43833585 43833585 :
258
+ :-------------------------:-------------------------------------------:----------------:-------------------------------------------:
259
+ :ORIGINALLY IN PLACE : 311274 0 311274 : 79180976 : 0 43833585 43833585 :
260
+ :-------------------------:-------------------------------------------:----------------:-------------------------------------------:
261
+ ====================================================================================================================================
262
+
263
+
264
+
265
+ ==================================================
266
+ : FIPOPM REPORT REGION 2 :
267
+ : PAV = 302 BARSA :
268
+ : PORV = 21191418 RM3 :
269
+ :--------------- OIL SM3 ------------------:-- WAT SM3 --:-------------- GAS SM3 ---------------:
270
+ : LIQUID VAPOUR TOTAL : TOTAL : FREE DISSOLVED TOTAL :
271
+ :-------------------------:-------------------------------------------:----------------:-------------------------------------------:
272
+ :CURRENTLY IN PLACE : 4893558 0 4893558 : 13735096 : 0 689110895 689110895 :
273
+ :-------------------------:-------------------------------------------:----------------:-------------------------------------------:
274
+ :ORIGINALLY IN PLACE : 4893558 0 4893558 : 13735096 : 0 689110895 689110895 :
275
+ :-------------------------:-------------------------------------------:----------------:-------------------------------------------:
276
+ ====================================================================================================================================
@@ -5,7 +5,6 @@ from pathlib import Path
5
5
  import pandas as pd
6
6
  import pytest
7
7
  import res2df
8
- from res2df.hook_implementations import jobs
9
8
 
10
9
  try:
11
10
  # pylint: disable=unused-import
@@ -108,42 +107,9 @@ def test_res2csv_through_ert(tmp_path):
108
107
  assert Path(subcommand + ".inc").is_file()
109
108
 
110
109
 
111
- @pytest.mark.skipif(not HAVE_ERT, reason="ERT is not installed")
112
- def test_job_documentation():
113
- """Test that for registered ERT forward models the documentation is non-empty"""
114
- if HAVE_ERT:
115
- assert (
116
- type(jobs.job_documentation("RES2CSV"))
117
- == ert.plugins.plugin_response.PluginResponse
118
- )
119
- assert (
120
- type(jobs.job_documentation("CSV2RES"))
121
- == ert.plugins.plugin_response.PluginResponse
122
- )
123
-
124
- else:
125
- assert jobs.job_documentation("RES2CSV") is None
126
- assert jobs.job_documentation("CSV2RES") is None
127
-
128
- assert jobs.job_documentation("foobar") is None
129
-
130
-
131
- def test_get_module_variable():
132
- """Test that we can robustly peek into jobs for metadata.
133
-
134
- This is independent whether ERT is installed or not
135
- """
136
- # pylint: disable=protected-access
137
- assert not jobs._get_module_variable_if_exists("foo", "bar")
138
- assert jobs._get_module_variable_if_exists(
139
- "res2df.res2csv", "DESCRIPTION"
140
- ).startswith("Convert reservoir simulator input and output")
141
- assert not jobs._get_module_variable_if_exists("res2df.res2csv", "NOPE")
142
-
143
-
144
110
  @pytest.mark.skipif(HAVE_ERT, reason="Tested only when ERT is not available")
145
111
  def test_no_erthooks():
146
112
  """Test that we can import the hook implementations even when ERT is unavailable."""
147
113
  # pylint: disable=redefined-outer-name, unused-import
148
114
  # pylint: disable=reimported, import-outside-toplevel
149
- from res2df.hook_implementations import jobs # noqa
115
+ from res2df.hook_implementations import forward_model_steps # noqa