res2df 1.3.8__tar.gz → 1.3.10__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 (256) hide show
  1. res2df-1.3.10/.github/dependabot.yml +7 -0
  2. {res2df-1.3.8 → res2df-1.3.10}/.github/workflows/codecov.yml +3 -3
  3. {res2df-1.3.8 → res2df-1.3.10}/.github/workflows/publish.yml +1 -1
  4. {res2df-1.3.8 → res2df-1.3.10}/.github/workflows/res2df.yml +3 -2
  5. {res2df-1.3.8 → res2df-1.3.10}/.github/workflows/style.yml +7 -7
  6. {res2df-1.3.8 → res2df-1.3.10}/.github/workflows/typing.yml +11 -7
  7. {res2df-1.3.8 → res2df-1.3.10}/.pre-commit-config.yaml +1 -1
  8. res2df-1.3.10/PKG-INFO +94 -0
  9. {res2df-1.3.8 → res2df-1.3.10}/README.md +1 -1
  10. {res2df-1.3.8 → res2df-1.3.10}/docs/conf.py +46 -3
  11. {res2df-1.3.8 → res2df-1.3.10}/docs/index.rst +1 -1
  12. {res2df-1.3.8 → res2df-1.3.10}/pyproject.toml +9 -6
  13. res2df-1.3.10/src/res2df/__init__.py +68 -0
  14. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/__version__.py +1 -1
  15. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/common.py +22 -22
  16. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/compdat.py +7 -8
  17. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/csv2res.py +1 -1
  18. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/equil.py +60 -60
  19. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/faults.py +3 -7
  20. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/fipreports.py +1 -1
  21. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/grid.py +5 -5
  22. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/gruptree.py +4 -6
  23. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/hook_implementations/forward_model_steps.py +11 -8
  24. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/inferdims.py +1 -4
  25. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/nnc.py +1 -1
  26. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/pillars.py +2 -2
  27. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/pvt.py +8 -11
  28. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/res2csv.py +3 -5
  29. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/resdatafiles.py +20 -27
  30. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/rft.py +2 -3
  31. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/satfunc.py +4 -7
  32. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/summary.py +9 -14
  33. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/trans.py +1 -1
  34. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/version.py +3 -3
  35. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/vfp/__init__.py +18 -1
  36. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/vfp/_vfp.py +8 -12
  37. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/vfp/_vfpcommon.py +21 -19
  38. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/wcon.py +3 -6
  39. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/wellcompletiondata.py +7 -2
  40. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/wellconnstatus.py +1 -1
  41. res2df-1.3.10/src/res2df.egg-info/PKG-INFO +94 -0
  42. {res2df-1.3.8 → res2df-1.3.10}/src/res2df.egg-info/SOURCES.txt +2 -0
  43. {res2df-1.3.8 → res2df-1.3.10}/src/res2df.egg-info/requires.txt +1 -1
  44. res2df-1.3.10/tests/__init__.py +0 -0
  45. {res2df-1.3.8 → res2df-1.3.10}/tests/test_common.py +0 -8
  46. {res2df-1.3.8 → res2df-1.3.10}/tests/test_compdat.py +0 -9
  47. {res2df-1.3.8 → res2df-1.3.10}/tests/test_eclfiles.py +0 -10
  48. {res2df-1.3.8 → res2df-1.3.10}/tests/test_equil.py +1 -11
  49. {res2df-1.3.8 → res2df-1.3.10}/tests/test_faults.py +1 -11
  50. {res2df-1.3.8 → res2df-1.3.10}/tests/test_fipreports.py +1 -2
  51. {res2df-1.3.8 → res2df-1.3.10}/tests/test_gruptree.py +0 -8
  52. {res2df-1.3.8 → res2df-1.3.10}/tests/test_inferdims.py +0 -8
  53. {res2df-1.3.8 → res2df-1.3.10}/tests/test_init.py +1 -1
  54. {res2df-1.3.8 → res2df-1.3.10}/tests/test_integration.py +0 -8
  55. {res2df-1.3.8 → res2df-1.3.10}/tests/test_logging.py +10 -6
  56. {res2df-1.3.8 → res2df-1.3.10}/tests/test_nnc.py +1 -13
  57. {res2df-1.3.8 → res2df-1.3.10}/tests/test_pillars.py +1 -2
  58. {res2df-1.3.8 → res2df-1.3.10}/tests/test_pvt.py +1 -10
  59. {res2df-1.3.8 → res2df-1.3.10}/tests/test_rft.py +1 -2
  60. {res2df-1.3.8 → res2df-1.3.10}/tests/test_satfunc.py +1 -11
  61. {res2df-1.3.8 → res2df-1.3.10}/tests/test_summary.py +1 -10
  62. {res2df-1.3.8 → res2df-1.3.10}/tests/test_trans.py +1 -2
  63. {res2df-1.3.8 → res2df-1.3.10}/tests/test_userapi.py +0 -10
  64. {res2df-1.3.8 → res2df-1.3.10}/tests/test_vfp.py +63 -80
  65. {res2df-1.3.8 → res2df-1.3.10}/tests/test_wcon.py +1 -10
  66. {res2df-1.3.8 → res2df-1.3.10}/tests/test_wellcompletiondata.py +10 -10
  67. {res2df-1.3.8 → res2df-1.3.10}/tests/test_wellconnstatus.py +1 -9
  68. {res2df-1.3.8 → res2df-1.3.10}/tests/test_welopen.py +0 -8
  69. {res2df-1.3.8 → res2df-1.3.10}/tests/test_wlist.py +0 -8
  70. {res2df-1.3.8 → res2df-1.3.10}/tests/test_zonemap.py +4 -4
  71. res2df-1.3.8/PKG-INFO +0 -768
  72. res2df-1.3.8/src/res2df/__init__.py +0 -29
  73. res2df-1.3.8/src/res2df.egg-info/PKG-INFO +0 -768
  74. {res2df-1.3.8 → res2df-1.3.10}/.gitignore +0 -0
  75. {res2df-1.3.8 → res2df-1.3.10}/CONTRIBUTING.md +0 -0
  76. {res2df-1.3.8 → res2df-1.3.10}/LICENSE +0 -0
  77. {res2df-1.3.8 → res2df-1.3.10}/SECURITY.md +0 -0
  78. {res2df-1.3.8 → res2df-1.3.10}/ci/testkomodo.sh +0 -0
  79. {res2df-1.3.8 → res2df-1.3.10}/docs/_static/equinor-logo.png +0 -0
  80. {res2df-1.3.8 → res2df-1.3.10}/docs/_static/equinor-logo2.jpg +0 -0
  81. {res2df-1.3.8 → res2df-1.3.10}/docs/_static/equinor_logo.jpg +0 -0
  82. {res2df-1.3.8 → res2df-1.3.10}/docs/_static/equinor_logo_only.jpg +0 -0
  83. {res2df-1.3.8 → res2df-1.3.10}/docs/_templates/layout.html +0 -0
  84. {res2df-1.3.8 → res2df-1.3.10}/docs/contribution.rst +0 -0
  85. {res2df-1.3.8 → res2df-1.3.10}/docs/csv2res.rst +0 -0
  86. {res2df-1.3.8 → res2df-1.3.10}/docs/glossary.rst +0 -0
  87. {res2df-1.3.8 → res2df-1.3.10}/docs/history.rst +0 -0
  88. {res2df-1.3.8 → res2df-1.3.10}/docs/installation.rst +0 -0
  89. {res2df-1.3.8 → res2df-1.3.10}/docs/introduction.rst +0 -0
  90. {res2df-1.3.8 → res2df-1.3.10}/docs/res2csv.rst +0 -0
  91. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/compdat.csv +0 -0
  92. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/compdat.rst +0 -0
  93. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/equil-example.csv +0 -0
  94. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/equil.rst +0 -0
  95. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/fipnum.inc +0 -0
  96. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/fipreports-example.csv +0 -0
  97. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/fipreports-example.txt +0 -0
  98. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/fipreports.rst +0 -0
  99. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/grid.csv +0 -0
  100. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/grid.rst +0 -0
  101. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/gruptree.csv +0 -0
  102. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/gruptree.rst +0 -0
  103. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/gruptreenet.csv +0 -0
  104. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/images/injectoranalysis.png +0 -0
  105. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/images/multibranch-rftanalysis.png +0 -0
  106. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/nnc.csv +0 -0
  107. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/nnc.rst +0 -0
  108. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/outflow.csv +0 -0
  109. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/pillars-dyn1-stacked.csv +0 -0
  110. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/pillars-dyn1-unstacked.csv +0 -0
  111. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/pillars-example1.csv +0 -0
  112. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/pillars.rst +0 -0
  113. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/pvt.csv +0 -0
  114. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/pvt.rst +0 -0
  115. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/rft.rst +0 -0
  116. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/rft_columns.csv +0 -0
  117. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/satfunc.csv +0 -0
  118. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/satfunc.rst +0 -0
  119. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/summary.csv +0 -0
  120. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/summary.rst +0 -0
  121. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/trans-boundaries.csv +0 -0
  122. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/trans-group.csv +0 -0
  123. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/trans.rst +0 -0
  124. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/trans1.csv +0 -0
  125. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/wcon.csv +0 -0
  126. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/wcon.rst +0 -0
  127. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/well_connection_status.csv +0 -0
  128. {res2df-1.3.8 → res2df-1.3.10}/docs/usage/wellconnstatus.rst +0 -0
  129. {res2df-1.3.8 → res2df-1.3.10}/docs/usage.rst +0 -0
  130. {res2df-1.3.8 → res2df-1.3.10}/setup.cfg +0 -0
  131. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/constants.py +0 -0
  132. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/hook_implementations/__init__.py +0 -0
  133. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/BRANPROP +0 -0
  134. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/COMPDAT +0 -0
  135. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/COMPLUMP +0 -0
  136. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/COMPSEGS +0 -0
  137. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/DENSITY +0 -0
  138. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/EQLDIMS +0 -0
  139. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/EQUIL +0 -0
  140. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/FAULTS +0 -0
  141. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/GRUPNET +0 -0
  142. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/GRUPTREE +0 -0
  143. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/NODEPROP +0 -0
  144. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/PBVD +0 -0
  145. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/PDVD +0 -0
  146. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/PVDG +0 -0
  147. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/PVDO +0 -0
  148. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/PVTG +0 -0
  149. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/PVTO +0 -0
  150. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/PVTW +0 -0
  151. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/ROCK +0 -0
  152. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/RSVD +0 -0
  153. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/RVVD +0 -0
  154. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/SGFN +0 -0
  155. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/SGOF +0 -0
  156. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/SGWFN +0 -0
  157. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/SLGOF +0 -0
  158. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/SOF2 +0 -0
  159. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/SOF3 +0 -0
  160. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/SWFN +0 -0
  161. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/SWOF +0 -0
  162. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/TABDIMS +0 -0
  163. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/VFPINJ +0 -0
  164. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/VFPPROD +0 -0
  165. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/WCONHIST +0 -0
  166. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/WCONINJE +0 -0
  167. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/WCONINJH +0 -0
  168. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/WCONPROD +0 -0
  169. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/WELOPEN +0 -0
  170. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/WELSEGS +0 -0
  171. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/WELSPECS +0 -0
  172. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/WLIST +0 -0
  173. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/WSEGAICD +0 -0
  174. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/WSEGSICD +0 -0
  175. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/WSEGVALV +0 -0
  176. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/__init__.py +0 -0
  177. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/readme +0 -0
  178. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/opmkeywords/runmetoupdate.sh +0 -0
  179. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/parameters.py +0 -0
  180. /res2df-1.3.8/tests/__init__.py → /res2df-1.3.10/src/res2df/py.typed +0 -0
  181. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/res2csvlogger.py +0 -0
  182. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/svg_color_keyword_names.txt +0 -0
  183. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/vfp/_vfpdefs.py +0 -0
  184. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/vfp/_vfpinj.py +0 -0
  185. {res2df-1.3.8 → res2df-1.3.10}/src/res2df/vfp/_vfpprod.py +0 -0
  186. {res2df-1.3.8 → res2df-1.3.10}/src/res2df.egg-info/dependency_links.txt +0 -0
  187. {res2df-1.3.8 → res2df-1.3.10}/src/res2df.egg-info/entry_points.txt +0 -0
  188. {res2df-1.3.8 → res2df-1.3.10}/src/res2df.egg-info/not-zip-safe +0 -0
  189. {res2df-1.3.8 → res2df-1.3.10}/src/res2df.egg-info/top_level.txt +0 -0
  190. {res2df-1.3.8 → res2df-1.3.10}/tests/conftest.py +0 -0
  191. {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/EIGHTCELLS.DATA +0 -0
  192. {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/EIGHTCELLS.EGRID +0 -0
  193. {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/EIGHTCELLS.INIT +0 -0
  194. {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/EIGHTCELLS.INSPEC +0 -0
  195. {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/EIGHTCELLS.PRT +0 -0
  196. {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/EIGHTCELLS.RFT +0 -0
  197. {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/EIGHTCELLS.RSSPEC +0 -0
  198. {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/EIGHTCELLS.SMSPEC +0 -0
  199. {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/EIGHTCELLS.UNRST +0 -0
  200. {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/EIGHTCELLS.UNSMRY +0 -0
  201. {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/eightcells_duplicated_summary_vector/EIGHTCELLS_DUPES.DATA +0 -0
  202. {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/eightcells_duplicated_summary_vector/EIGHTCELLS_DUPES.SMSPEC +0 -0
  203. {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/eightcells_duplicated_summary_vector/EIGHTCELLS_DUPES.UNSMRY +0 -0
  204. {res2df-1.3.8 → res2df-1.3.10}/tests/data/eightcells/zones.lyr +0 -0
  205. {res2df-1.3.8 → res2df-1.3.10}/tests/data/fipreports/TEST1.PRT +0 -0
  206. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/grid/reek.faults +0 -0
  207. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/grid/reek.grid +0 -0
  208. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/grid/reek.multflt +0 -0
  209. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/grid/reek.multz +0 -0
  210. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/grid/reek.perm +0 -0
  211. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/grid/reek.poro +0 -0
  212. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/props/let-sgof.txt +0 -0
  213. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/props/let-swof.txt +0 -0
  214. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/props/reek.endpoints +0 -0
  215. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/props/reek.pvt +0 -0
  216. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/props/reek.swatinit +0 -0
  217. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/props/sgof.txt +0 -0
  218. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/props/swof.inc +0 -0
  219. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/props/swof.txt +0 -0
  220. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/regions/reek.eqlnum +0 -0
  221. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/regions/reek.fipnum +0 -0
  222. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/schedule/op6_aicd1_gp.sch +0 -0
  223. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/schedule/op6_icd1_gp.sch +0 -0
  224. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/schedule/op6_valve1_gp.sch +0 -0
  225. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/schedule/reek_history.sch +0 -0
  226. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/solution/reek.equil +0 -0
  227. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/include/summary/reek.smry +0 -0
  228. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/model/2_R001_REEK-0-OPMFLOW.PRT +0 -0
  229. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/model/2_R001_REEK-0.DATA +0 -0
  230. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/model/2_R001_REEK-0.ECLEND +0 -0
  231. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/model/2_R001_REEK-0.EGRID +0 -0
  232. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/model/2_R001_REEK-0.INIT +0 -0
  233. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/model/2_R001_REEK-0.LOG +0 -0
  234. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/model/2_R001_REEK-0.PRT +0 -0
  235. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/model/2_R001_REEK-0.RFT +0 -0
  236. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/model/2_R001_REEK-0.SMSPEC +0 -0
  237. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/model/2_R001_REEK-0.UNRST +0 -0
  238. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/model/2_R001_REEK-0.UNSMRY +0 -0
  239. {res2df-1.3.8 → res2df-1.3.10}/tests/data/reek/eclipse/model/zones.lyr +0 -0
  240. {res2df-1.3.8 → res2df-1.3.10}/tests/data/timesteps/SHORT_STEP.DATA +0 -0
  241. {res2df-1.3.8 → res2df-1.3.10}/tests/data/timesteps/SHORT_STEP.SMSPEC +0 -0
  242. {res2df-1.3.8 → res2df-1.3.10}/tests/data/timesteps/SHORT_STEP.UNSMRY +0 -0
  243. {res2df-1.3.8 → res2df-1.3.10}/tests/data/timesteps/SHORT_STEP_LONG.DATA +0 -0
  244. {res2df-1.3.8 → res2df-1.3.10}/tests/data/timesteps/SHORT_STEP_LONG.SMSPEC +0 -0
  245. {res2df-1.3.8 → res2df-1.3.10}/tests/data/timesteps/SHORT_STEP_LONG.UNSMRY +0 -0
  246. {res2df-1.3.8 → res2df-1.3.10}/tests/data/timesteps/SHORT_STEP_WITH_TIMESTEP.DATA +0 -0
  247. {res2df-1.3.8 → res2df-1.3.10}/tests/data/timesteps/SHORT_STEP_WITH_TIMESTEP.SMSPEC +0 -0
  248. {res2df-1.3.8 → res2df-1.3.10}/tests/data/timesteps/SHORT_STEP_WITH_TIMESTEP.UNSMRY +0 -0
  249. {res2df-1.3.8 → res2df-1.3.10}/tests/data/timesteps/SHORT_STEP_WITH_TIMESTEP_LONG.DATA +0 -0
  250. {res2df-1.3.8 → res2df-1.3.10}/tests/data/timesteps/SHORT_STEP_WITH_TIMESTEP_LONG.SMSPEC +0 -0
  251. {res2df-1.3.8 → res2df-1.3.10}/tests/data/timesteps/SHORT_STEP_WITH_TIMESTEP_LONG.UNSMRY +0 -0
  252. {res2df-1.3.8 → res2df-1.3.10}/tests/test_ert_hooks.py +0 -0
  253. {res2df-1.3.8 → res2df-1.3.10}/tests/test_grid.py +0 -0
  254. {res2df-1.3.8 → res2df-1.3.10}/tests/test_hook_implementations.py +0 -0
  255. {res2df-1.3.8 → res2df-1.3.10}/tests/test_parameters.py +0 -0
  256. {res2df-1.3.8 → res2df-1.3.10}/tests/test_summary_restarts.py +0 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ version: 2
3
+ updates:
4
+ - package-ecosystem: "github-actions"
5
+ directory: "/"
6
+ schedule:
7
+ interval: "weekly"
@@ -23,7 +23,7 @@ jobs:
23
23
  sudo apt-get update
24
24
  sudo apt-get install libegl1
25
25
 
26
- - uses: actions/checkout@v5
26
+ - uses: actions/checkout@v6
27
27
 
28
28
  - name: Setup Python
29
29
  uses: actions/setup-python@v6
@@ -43,8 +43,8 @@ jobs:
43
43
  - name: Generate coverage report and upload
44
44
  run: |
45
45
  pytest tests --disable-warnings --cov=res2df --cov-report=xml
46
- # Uninstall packages that res2df supports not being installed:
47
- uv pip uninstall ert opm
46
+ # Uninstall package that res2df supports not being installed:
47
+ uv pip uninstall ert
48
48
  # Run tests again in cov-append-mode:
49
49
  pytest tests --disable-warnings --cov=res2df --cov-report=xml --cov-append
50
50
  bash <(curl -s https://codecov.io/bash)
@@ -16,7 +16,7 @@ jobs:
16
16
 
17
17
  steps:
18
18
  - name: Checkout
19
- uses: actions/checkout@v5
19
+ uses: actions/checkout@v6
20
20
  with:
21
21
  fetch-depth: 0
22
22
 
@@ -21,7 +21,7 @@ jobs:
21
21
  runs-on: ubuntu-latest
22
22
  strategy:
23
23
  matrix:
24
- python-version: ['3.11', '3.12']
24
+ python-version: ['3.11', '3.12', '3.13']
25
25
  include:
26
26
  # For one of the Python versions we
27
27
  # install the extra dependency ert
@@ -37,7 +37,7 @@ jobs:
37
37
  sudo apt-get install libegl1
38
38
 
39
39
  - name: Checkout commit locally
40
- uses: actions/checkout@v5
40
+ uses: actions/checkout@v6
41
41
 
42
42
  - name: Checkout tags
43
43
  # This seems necessary for setuptools_scm to be able to infer
@@ -78,6 +78,7 @@ jobs:
78
78
 
79
79
  - name: Build documentation
80
80
  run: |
81
+ sudo apt-get install graphviz
81
82
  sphinx-build -W -b html docs build/sphinx/html
82
83
 
83
84
  - name: Update GitHub pages
@@ -1,11 +1,11 @@
1
1
  name: Style
2
2
 
3
3
  on:
4
- push:
5
- branches:
6
- - master
7
- - 'version-**'
8
- pull_request:
4
+ push:
5
+ branches:
6
+ - master
7
+ - 'version-**'
8
+ pull_request:
9
9
 
10
10
  concurrency:
11
11
  group: ${{ github.workflow }}-${{ github.ref }}
@@ -20,10 +20,10 @@ jobs:
20
20
  runs-on: ubuntu-latest
21
21
  strategy:
22
22
  matrix:
23
- python-version: ['3.12']
23
+ python-version: ['3.13']
24
24
 
25
25
  steps:
26
- - uses: actions/checkout@v5
26
+ - uses: actions/checkout@v6
27
27
  with:
28
28
  fetch-depth: 0
29
29
 
@@ -1,11 +1,15 @@
1
1
  name: Typing
2
2
 
3
3
  on:
4
- push:
5
- branches:
6
- - master
7
- - 'version-**'
8
- pull_request:
4
+ push:
5
+ branches:
6
+ - master
7
+ - 'version-**'
8
+ pull_request:
9
+
10
+ schedule:
11
+ # Run CI every night and check that tests are working with latest dependencies
12
+ - cron: '0 0 * * *'
9
13
 
10
14
  concurrency:
11
15
  group: ${{ github.workflow }}-${{ github.ref }}
@@ -20,10 +24,10 @@ jobs:
20
24
  runs-on: ubuntu-latest
21
25
  strategy:
22
26
  matrix:
23
- python-version: ['3.12']
27
+ python-version: ['3.13']
24
28
 
25
29
  steps:
26
- - uses: actions/checkout@v5
30
+ - uses: actions/checkout@v6
27
31
  with:
28
32
  fetch-depth: 0
29
33
 
@@ -11,7 +11,7 @@ repos:
11
11
  - id: trailing-whitespace
12
12
 
13
13
  - repo: https://github.com/astral-sh/ruff-pre-commit
14
- rev: v0.14.0
14
+ rev: v0.14.8
15
15
  hooks:
16
16
  - id: ruff-check
17
17
  args: [ --fix ]
res2df-1.3.10/PKG-INFO ADDED
@@ -0,0 +1,94 @@
1
+ Metadata-Version: 2.4
2
+ Name: res2df
3
+ Version: 1.3.10
4
+ Summary: Convert reservoir simulator input and output to DataFrames
5
+ Author-email: Håvard Berland <havb@equinor.com>
6
+ License-Expression: GPL-3.0-only
7
+ Project-URL: Homepage, https://github.com/equinor/res2df
8
+ Project-URL: Repository, https://github.com/equinor/res2df
9
+ Project-URL: Documentation, https://equinor.github.io/res2df/
10
+ Keywords: energy,subsurface,reservoir,scientific,engineering
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Intended Audience :: Science/Research
13
+ Classifier: Topic :: Scientific/Engineering
14
+ Classifier: Topic :: Software Development :: Libraries
15
+ Classifier: Topic :: Utilities
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Natural Language :: English
20
+ Requires-Python: >=3.11
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE
23
+ Requires-Dist: resdata>=5.0.0-b0
24
+ Requires-Dist: resfo
25
+ Requires-Dist: networkx
26
+ Requires-Dist: numpy
27
+ Requires-Dist: opm>=2020.10.2
28
+ Requires-Dist: pandas
29
+ Requires-Dist: pyarrow
30
+ Requires-Dist: pyyaml>=5.1
31
+ Requires-Dist: treelib
32
+ Provides-Extra: tests
33
+ Requires-Dist: pytest; extra == "tests"
34
+ Requires-Dist: pytest-cov; extra == "tests"
35
+ Requires-Dist: pytest-mock; extra == "tests"
36
+ Requires-Dist: pytest-timeout; extra == "tests"
37
+ Provides-Extra: style
38
+ Requires-Dist: pre-commit; extra == "style"
39
+ Provides-Extra: types
40
+ Requires-Dist: mypy; extra == "types"
41
+ Requires-Dist: types-PyYAML; extra == "types"
42
+ Requires-Dist: types-python-dateutil; extra == "types"
43
+ Requires-Dist: types-setuptools; extra == "types"
44
+ Requires-Dist: types-networkx; extra == "types"
45
+ Requires-Dist: pandas-stubs; extra == "types"
46
+ Provides-Extra: docs
47
+ Requires-Dist: sphinx-autoapi; extra == "docs"
48
+ Requires-Dist: ipython; extra == "docs"
49
+ Requires-Dist: rstcheck; extra == "docs"
50
+ Requires-Dist: setuptools; extra == "docs"
51
+ Requires-Dist: sphinx; extra == "docs"
52
+ Requires-Dist: sphinx-argparse; extra == "docs"
53
+ Requires-Dist: sphinx-autodoc-typehints; extra == "docs"
54
+ Requires-Dist: sphinx_rtd_theme; extra == "docs"
55
+ Provides-Extra: ert
56
+ Requires-Dist: ert>=10.2.0b13; extra == "ert"
57
+ Dynamic: license-file
58
+
59
+ [![Publish to PyPI](https://github.com/equinor/res2df/actions/workflows/publish.yml/badge.svg)](https://github.com/equinor/res2df/actions/workflows/publish.yml)
60
+ [![PyPI version](https://img.shields.io/pypi/v/res2df.svg)](https://pypi.org/project/res2df/)
61
+ [![codecov](https://codecov.io/gh/equinor/res2df/graph/badge.svg?token=3sZBGGu5VG)](https://codecov.io/gh/equinor/res2df)
62
+ [![Python 3.11-3.13](https://img.shields.io/badge/python-3.11%20|%203.12%20|%203.13-blue.svg)](https://www.python.org)
63
+ [![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)
64
+ [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
65
+
66
+ # res2df
67
+
68
+ res2df is a Pandas DataFrame wrapper around resdata and opm.io, which
69
+ are used to access binary files outputted by reservoir simulators,
70
+ or its input files --- or any other tool outputting to the same data format.
71
+
72
+ The reverse operation, from a Pandas DataFrame to reservoir simulator include files
73
+ (commonly given the extension ".inc", ".grdecl" etc.) is provided for some of the
74
+ modules.
75
+
76
+ The package consists of a module pr. datatype, e.g. one module for summary
77
+ files (.UNSMRY), one for completion data etc.
78
+
79
+ There is a command line frontend for almost all functionality, called
80
+ `res2csv`, which converts the reservoir data to DataFrames, and then dumps
81
+ the dataframes to files in CSV format, and a similar `csv2res` for the
82
+ reverse operation.
83
+
84
+ For documentation, see <https://equinor.github.io/res2df/>
85
+
86
+ ## License
87
+
88
+ This library is released under GPLv3.
89
+
90
+ ## Copyright
91
+
92
+ The code is Copyright Equinor ASA 2019-2021.
93
+
94
+ Contributions without copyright transfer are welcome.
@@ -1,7 +1,7 @@
1
1
  [![Publish to PyPI](https://github.com/equinor/res2df/actions/workflows/publish.yml/badge.svg)](https://github.com/equinor/res2df/actions/workflows/publish.yml)
2
2
  [![PyPI version](https://img.shields.io/pypi/v/res2df.svg)](https://pypi.org/project/res2df/)
3
3
  [![codecov](https://codecov.io/gh/equinor/res2df/graph/badge.svg?token=3sZBGGu5VG)](https://codecov.io/gh/equinor/res2df)
4
- [![Python 3.11-3.12](https://img.shields.io/badge/python-3.11%20|%203.12-blue.svg)](https://www.python.org)
4
+ [![Python 3.11-3.13](https://img.shields.io/badge/python-3.11%20|%203.12%20|%203.13-blue.svg)](https://www.python.org)
5
5
  [![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)
6
6
  [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
7
7
 
@@ -39,10 +39,11 @@ version = release
39
39
  # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
40
40
  # ones.
41
41
  extensions = [
42
- "autoapi.sphinx",
42
+ "autoapi.extension",
43
43
  "sphinx.ext.autodoc",
44
44
  "sphinx.ext.autosummary",
45
45
  "sphinx.ext.githubpages",
46
+ "sphinx.ext.inheritance_diagram",
46
47
  "sphinx.ext.mathjax",
47
48
  "sphinx.ext.napoleon",
48
49
  "sphinx.ext.viewcode",
@@ -50,12 +51,30 @@ extensions = [
50
51
  "sphinxarg.ext",
51
52
  ]
52
53
 
53
- autoapi_modules: dict = {"res2df": None}
54
+ autoapi_dirs = ["../src/res2df"]
55
+ autoapi_root = "res2df"
56
+ autoapi_type = "python"
57
+ autoapi_add_toctree_entry = False
58
+ autoapi_own_page_level = "module"
59
+
60
+ autoapi_options = [
61
+ "members",
62
+ "undoc-members",
63
+ "show-inheritance",
64
+ "show-module-summary",
65
+ ]
54
66
 
55
- autodoc_default_options = {"members": None}
67
+ autodoc_default_options = {
68
+ "members": True,
69
+ "imported-members": False,
70
+ }
56
71
 
57
72
  autosummary_generate = True
58
73
 
74
+ suppress_warnings = [
75
+ "docutils",
76
+ ]
77
+
59
78
  # Add any paths that contain templates here, relative to this directory.
60
79
  templates_path = ["_templates"]
61
80
 
@@ -188,3 +207,27 @@ epub_exclude_files = ["search.html"]
188
207
 
189
208
 
190
209
  # -- Extension configuration -------------------------------------------------
210
+
211
+
212
+ def skip_unwanted_members(app, what, name, obj, skip, options):
213
+ short_name = name.split(".")[-1]
214
+
215
+ if "vfp" in name and short_name.startswith("_"):
216
+ return False
217
+
218
+ if ".constants." in name or name.endswith(".constants"):
219
+ return True
220
+
221
+ if short_name == "logger":
222
+ return True
223
+
224
+ if what == "data" and (
225
+ short_name.isupper() or short_name.replace("_", "").isupper()
226
+ ):
227
+ return True
228
+
229
+ return skip
230
+
231
+
232
+ def setup(app):
233
+ app.connect("autoapi-skip-member", skip_unwanted_members)
@@ -23,7 +23,7 @@ data format.
23
23
  :maxdepth: 10
24
24
  :caption: Python API
25
25
 
26
- res2df/res2df
26
+ res2df/res2df/index
27
27
 
28
28
  Indices and tables
29
29
  ==================
@@ -6,14 +6,15 @@ requires = [
6
6
  build-backend = "setuptools.build_meta"
7
7
 
8
8
  [tool.setuptools_scm]
9
- write_to = "src/res2df/version.py"
9
+ version_file = "src/res2df/version.py"
10
10
 
11
11
  [project]
12
12
  name = "res2df"
13
13
  description = "Convert reservoir simulator input and output to DataFrames"
14
14
  readme = "README.md"
15
15
  requires-python = ">=3.11"
16
- license = { file = "LICENSE" }
16
+ license = "GPL-3.0-only"
17
+ license-files = ["LICENSE"]
17
18
  authors = [
18
19
  { name = "Håvard Berland", email = "havb@equinor.com" }
19
20
  ]
@@ -26,8 +27,8 @@ classifiers = [
26
27
  "Topic :: Utilities",
27
28
  "Programming Language :: Python :: 3.11",
28
29
  "Programming Language :: Python :: 3.12",
30
+ "Programming Language :: Python :: 3.13",
29
31
  "Natural Language :: English",
30
- "License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
31
32
  ]
32
33
 
33
34
  dynamic = ["version"]
@@ -61,7 +62,7 @@ types = [
61
62
  "pandas-stubs",
62
63
  ]
63
64
  docs = [
64
- "autoapi",
65
+ "sphinx-autoapi",
65
66
  "ipython",
66
67
  "rstcheck",
67
68
  "setuptools",
@@ -104,8 +105,8 @@ extra_checks = true
104
105
 
105
106
  [[tool.mypy.overrides]]
106
107
  module = [
108
+ "ert",
107
109
  "opm.*",
108
- "resfo",
109
110
  "pyarrow", # should be removed for pyarrow > 21.0.0
110
111
  "resdata.*",
111
112
  ]
@@ -138,6 +139,7 @@ select = [
138
139
  "PD", # pandas-vet
139
140
  "RUF", # ruff specific rules
140
141
  "UP", # pyupgrade
142
+ "ANN", # flake8-annotations
141
143
  ]
142
144
  preview = true
143
145
  ignore = [
@@ -159,7 +161,8 @@ ignore = [
159
161
 
160
162
  [tool.ruff.lint.extend-per-file-ignores]
161
163
  "src/res2df/__init__.py" = ["PLC0414"]
162
- "tests/*" = ["RUF005"]
164
+ "tests/*" = ["RUF005", "ANN"]
165
+ "docs/*" = ["ANN"]
163
166
 
164
167
  [tool.ruff.lint.pylint]
165
168
  max-args = 20
@@ -0,0 +1,68 @@
1
+ from . import compdat as compdat
2
+ from . import csv2res as csv2res
3
+ from . import equil as equil
4
+ from . import faults as faults
5
+ from . import fipreports as fipreports
6
+ from . import grid as grid
7
+ from . import gruptree as gruptree
8
+ from . import nnc as nnc
9
+ from . import pillars as pillars
10
+ from . import pvt as pvt
11
+ from . import res2csv as res2csv
12
+ from . import rft as rft
13
+ from . import satfunc as satfunc
14
+ from . import summary as summary
15
+ from . import trans as trans
16
+ from . import vfp as vfp
17
+ from . import wcon as wcon
18
+ from . import wellcompletiondata as wellcompletiondata
19
+ from . import wellconnstatus as wellconnstatus
20
+ from .__version__ import __version__ as __version__
21
+ from .res2csvlogger import getLogger_res2csv as getLogger_res2csv
22
+ from .resdatafiles import ResdataFiles as ResdataFiles
23
+
24
+ SUBMODULES: list[str] = [
25
+ "compdat",
26
+ "equil",
27
+ "faults",
28
+ "fipreports",
29
+ "grid",
30
+ "gruptree",
31
+ "nnc",
32
+ "pillars",
33
+ "pvt",
34
+ "rft",
35
+ "satfunc",
36
+ "summary",
37
+ "trans",
38
+ "vfp",
39
+ "wellcompletiondata",
40
+ "wellconnstatus",
41
+ "wcon",
42
+ ]
43
+
44
+
45
+ __all__ = [
46
+ "ResdataFiles",
47
+ "__version__",
48
+ "compdat",
49
+ "csv2res",
50
+ "equil",
51
+ "faults",
52
+ "fipreports",
53
+ "getLogger_res2csv",
54
+ "grid",
55
+ "gruptree",
56
+ "nnc",
57
+ "pillars",
58
+ "pvt",
59
+ "res2csv",
60
+ "rft",
61
+ "satfunc",
62
+ "summary",
63
+ "trans",
64
+ "vfp",
65
+ "wcon",
66
+ "wellcompletiondata",
67
+ "wellconnstatus",
68
+ ]
@@ -1,5 +1,5 @@
1
1
  try:
2
- from .version import version # type: ignore
2
+ from .version import version
3
3
 
4
4
  __version__ = version
5
5
  except ImportError:
@@ -11,28 +11,24 @@ import shlex
11
11
  import signal
12
12
  import sys
13
13
  from collections import defaultdict
14
+ from collections.abc import Mapping
14
15
  from importlib import resources
15
16
  from pathlib import Path
16
17
  from typing import Any, cast
17
18
 
18
19
  import dateutil.parser
19
20
  import numpy as np
21
+ import opm.io.deck
20
22
  import pandas as pd
21
23
  import pyarrow as pa
24
+
25
+ # This import is seemingly not used, but necessary for some attributes
26
+ # to be included in DeckItem objects.
27
+ from opm.io.deck import DeckKeyword # noqa: F401
22
28
  from pyarrow import (
23
29
  feather, # necessary as this module is not loaded unless explicitly imported
24
30
  )
25
31
 
26
- try:
27
- import opm.io.deck
28
-
29
- # This import is seemingly not used, but necessary for some attributes
30
- # to be included in DeckItem objects.
31
- from opm.io.deck import DeckKeyword # noqa: F401
32
- except ImportError:
33
- # Allow parts of res2df to work without OPM:
34
- pass
35
-
36
32
  from .__version__ import __version__
37
33
  from .constants import MAGIC_STDOUT
38
34
 
@@ -189,9 +185,9 @@ def datetime_to_ecldate(timestamp: str | datetime.datetime | datetime.date) -> s
189
185
 
190
186
 
191
187
  def keyworddata_to_df(
192
- deck,
188
+ deck: "opm.opmcommon_python.Deck",
193
189
  keyword: str,
194
- renamer: dict[str, str | list[str]] | None = None,
190
+ renamer: Mapping[str, str | list[str]] | None = None,
195
191
  recordcountername: str | None = None,
196
192
  emptyrecordcountername: str | None = None,
197
193
  ) -> pd.DataFrame:
@@ -275,7 +271,7 @@ def parse_opmio_deckrecord(
275
271
  keyword: str,
276
272
  itemlistname: str = "items",
277
273
  recordindex: int | None = None,
278
- renamer: dict[str, str] | dict[str, str | list[str]] | None = None,
274
+ renamer: Mapping[str, str | list[str]] | None = None,
279
275
  ) -> dict[str, Any]:
280
276
  """
281
277
  Parse an opm.io.DeckRecord belonging to a certain keyword
@@ -344,8 +340,9 @@ def parse_opmio_deckrecord(
344
340
  if renamer:
345
341
  renamed_dict: dict[str, Any] = {}
346
342
  for key, value in rec_dict.items():
347
- if key in renamer and not isinstance(renamer[key], list):
348
- renamed_dict[renamer[key]] = value # type: ignore
343
+ renamed_key = renamer.get(key)
344
+ if isinstance(renamed_key, str):
345
+ renamed_dict[renamed_key] = value
349
346
  else:
350
347
  renamed_dict[key] = value
351
348
  return renamed_dict
@@ -470,7 +467,7 @@ def handle_wanted_keywords(
470
467
 
471
468
  def fill_reverse_parser(
472
469
  parser: argparse.ArgumentParser, modulename: str, defaultoutputfile: str
473
- ):
470
+ ) -> argparse.ArgumentParser:
474
471
  """A standardized submodule parser for the command line utility
475
472
  to produce :term:`include files <include file>` from a CSV file.
476
473
 
@@ -543,6 +540,7 @@ def df2res(
543
540
  """
544
541
  from_module = inspect.stack()[1]
545
542
  calling_module = inspect.getmodule(from_module[0])
543
+ assert calling_module is not None
546
544
  if dataframe.empty:
547
545
  raise ValueError("Empty dataframe")
548
546
  if (
@@ -580,7 +578,7 @@ def df2res(
580
578
  if not_supported:
581
579
  logger.warning(
582
580
  "Requested keyword(s) not supported by %s: %s",
583
- calling_module.__name__, # type: ignore
581
+ calling_module.__name__,
584
582
  not_supported,
585
583
  )
586
584
  # Warn if some requested keywords are not in frame:
@@ -601,7 +599,7 @@ def df2res(
601
599
  string = ""
602
600
  res2df_header = (
603
601
  "Output file printed by "
604
- + calling_module.__name__ # type: ignore
602
+ + calling_module.__name__
605
603
  + " "
606
604
  + __version__
607
605
  + "\n"
@@ -631,7 +629,7 @@ def generic_deck_table(
631
629
  dframe: pd.DataFrame,
632
630
  keyword: str,
633
631
  comment: str | None = None,
634
- renamer: dict[str, str] | None = None,
632
+ renamer: Mapping[str, str] | None = None,
635
633
  drop_trailing_columns: bool = True,
636
634
  ) -> str:
637
635
  """Construct string contents of a :term:`.DATA file` table.
@@ -855,7 +853,7 @@ def is_color(input_string: str) -> bool:
855
853
  return bool(re.match(regex, input_string))
856
854
 
857
855
 
858
- def parse_lyrfile(filename: str) -> list[dict[str, Any]] | None:
856
+ def parse_lyrfile(filename: str | Path) -> list[dict[str, Any]] | None:
859
857
  """Return a list of dicts representation of the lyr file.
860
858
 
861
859
  The lyr file contains data of the following format,
@@ -927,7 +925,9 @@ def parse_lyrfile(filename: str) -> list[dict[str, Any]] | None:
927
925
  return lyrlist
928
926
 
929
927
 
930
- def convert_lyrlist_to_zonemap(lyrlist: list[dict[str, Any]]) -> dict[int, str]:
928
+ def convert_lyrlist_to_zonemap(
929
+ lyrlist: list[dict[str, Any]] | None,
930
+ ) -> dict[int, str] | None:
931
931
  """Returns a layer to zone map as a dictionary
932
932
 
933
933
  Args:
@@ -949,7 +949,7 @@ def convert_lyrlist_to_zonemap(lyrlist: list[dict[str, Any]]) -> dict[int, str]:
949
949
  return zonemap
950
950
 
951
951
 
952
- def get_wells_matching_template(template: str, wells: list):
952
+ def get_wells_matching_template(template: str, wells: list[str]) -> list[str]:
953
953
  """Returns the wells in the list that is matching the template
954
954
  containing wilcard characters. The wildcard charachters supported
955
955
  are * to match zero or more charachters and ? to match a single
@@ -11,16 +11,14 @@
11
11
  """
12
12
 
13
13
  import argparse
14
- import contextlib
15
14
  import datetime
16
15
  import logging
16
+ from typing import Any
17
17
 
18
18
  import numpy as np
19
+ import opm.io.deck
19
20
  import pandas as pd
20
21
 
21
- with contextlib.suppress(ImportError):
22
- import opm.io.deck
23
-
24
22
  from .common import (
25
23
  get_wells_matching_template,
26
24
  merge_zones,
@@ -97,6 +95,7 @@ def deck2dfs(
97
95
  complumprecords = []
98
96
  welspecs = {}
99
97
  date = start_date # DATE column will always be there, but can contain NaN/None
98
+ rec_data: dict[str, Any]
100
99
  for idx, kword in enumerate(deck):
101
100
  if kword.name in ["DATES", "START"]:
102
101
  for rec in kword:
@@ -752,7 +751,7 @@ def expand_complump_in_welopen_df(
752
751
  exp_welopens.append(cell_row)
753
752
 
754
753
  dframe = pd.DataFrame(exp_welopens)
755
- return dframe.astype(object).where(pd.notna(dframe), None)
754
+ return dframe.astype(object).where(pd.notna(dframe), None) # type: ignore[call-overload]
756
755
 
757
756
 
758
757
  def expand_wlist_in_welopen_df(
@@ -786,7 +785,7 @@ def expand_wlist_in_welopen_df(
786
785
  # Explicit wellname was used, no expansion to happen:
787
786
  exp_welopens.append(row)
788
787
  dframe = pd.DataFrame(exp_welopens)
789
- return dframe.astype(object).where(pd.notna(dframe), None)
788
+ return dframe.astype(object).where(pd.notna(dframe), None) # type: ignore[call-overload]
790
789
 
791
790
 
792
791
  def applywelopen(
@@ -845,7 +844,7 @@ def applywelopen(
845
844
  "The WLIST dataframe must be expanded through expand_wlist()"
846
845
  )
847
846
 
848
- welopen_df = welopen_df.astype(object).where(pd.notna(welopen_df), None)
847
+ welopen_df = welopen_df.astype(object).where(pd.notna(welopen_df), None) # type: ignore[call-overload]
849
848
  if wlist_df is not None:
850
849
  welopen_df = expand_wlist_in_welopen_df(welopen_df, wlist_df)
851
850
  if complump_df is not None:
@@ -951,7 +950,7 @@ def fill_parser(parser: argparse.ArgumentParser) -> argparse.ArgumentParser:
951
950
  return parser
952
951
 
953
952
 
954
- def compdat_main(args):
953
+ def compdat_main(args: argparse.Namespace) -> None:
955
954
  """Entry-point for module, for command line utility"""
956
955
  logger = getLogger_res2csv(__name__, vars(args))
957
956
  resdatafiles = ResdataFiles(args.DATAFILE)
@@ -34,7 +34,7 @@ def get_parser() -> argparse.ArgumentParser:
34
34
  version=f"%(prog)s {__version__}",
35
35
  )
36
36
 
37
- subparsers = parser.add_subparsers( # type: ignore
37
+ subparsers = parser.add_subparsers(
38
38
  required=True,
39
39
  dest="subcommand",
40
40
  parser_class=argparse.ArgumentParser,