ResSimpy 2.2.2__tar.gz → 2.2.4__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 (204) hide show
  1. {ressimpy-2.2.2 → ressimpy-2.2.4}/PKG-INFO +1 -1
  2. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/DataObjectMixin.py +6 -0
  3. ressimpy-2.2.4/ResSimpy/FileOperations/__init__.py +1 -0
  4. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/FileOperations/file_operations.py +3 -1
  5. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Grid.py +86 -5
  6. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/FcsFile.py +9 -4
  7. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/Network/NexusConstraint.py +4 -1
  8. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/Network/NexusConstraints.py +19 -11
  9. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/Network/NexusNodeConnections.py +11 -5
  10. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/Network/NexusNodes.py +8 -3
  11. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/Network/NexusProc.py +2 -2
  12. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/Network/NexusProcs.py +3 -2
  13. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/Network/NexusTargets.py +14 -7
  14. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/Network/NexusWellConnections.py +12 -7
  15. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/Network/NexusWellbores.py +11 -6
  16. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/Network/NexusWellheads.py +6 -4
  17. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/NexusFile.py +11 -8
  18. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/NexusPVTMethod.py +1 -0
  19. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/NexusSolverParameter.py +9 -0
  20. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/NexusWell.py +6 -3
  21. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/StructuredGrid/NexusGrid.py +17 -0
  22. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusNetwork.py +10 -7
  23. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusReporting.py +3 -2
  24. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusSimulator.py +21 -9
  25. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusSolverParameters.py +1 -1
  26. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusWells.py +11 -7
  27. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/array_function_operations.py +1 -1
  28. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/load_wells.py +33 -3
  29. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/logfile_operations.py +1 -2
  30. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/nexus_collect_tables.py +3 -1
  31. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/nexus_constraint_operations.py +1 -1
  32. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/nexus_file_operations.py +15 -11
  33. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/nexus_load_well_list.py +1 -0
  34. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/nexus_modify_object_in_file.py +3 -2
  35. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/nexus_remove_object_from_file.py +1 -1
  36. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/runcontrol_operations.py +6 -3
  37. ressimpy-2.2.4/ResSimpy/OpenGoSim/DataModels/Network/__init__.py +1 -0
  38. ressimpy-2.2.4/ResSimpy/OpenGoSim/DataModels/__init__.py +1 -0
  39. ressimpy-2.2.4/ResSimpy/OpenGoSim/Enums/__init__.py +1 -0
  40. ressimpy-2.2.4/ResSimpy/OpenGoSim/Model_Parts/__init__.py +1 -0
  41. ressimpy-2.2.4/ResSimpy/OpenGoSim/OpenGoSimKeywords/__init__.py +1 -0
  42. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/OpenGoSim/OpenGoSimWells.py +4 -2
  43. ressimpy-2.2.4/ResSimpy/OpenGoSim/__init__.py +1 -0
  44. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/SolverParameter.py +1 -0
  45. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Utils/generic_repr.py +1 -2
  46. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Utils/obj_to_dataframe.py +2 -1
  47. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Utils/obj_to_table_string.py +1 -0
  48. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Utils/to_dict_generic.py +1 -0
  49. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/WellConnections.py +1 -1
  50. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/WellLists.py +11 -0
  51. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/__init__.py +1 -1
  52. {ressimpy-2.2.2 → ressimpy-2.2.4}/pyproject.toml +6 -4
  53. ressimpy-2.2.2/ResSimpy/FileOperations/__init__.py +0 -0
  54. ressimpy-2.2.2/ResSimpy/OpenGoSim/DataModels/Network/__init__.py +0 -0
  55. ressimpy-2.2.2/ResSimpy/OpenGoSim/DataModels/__init__.py +0 -0
  56. ressimpy-2.2.2/ResSimpy/OpenGoSim/Enums/__init__.py +0 -0
  57. ressimpy-2.2.2/ResSimpy/OpenGoSim/Model_Parts/__init__.py +0 -0
  58. ressimpy-2.2.2/ResSimpy/OpenGoSim/OpenGoSimKeywords/__init__.py +0 -0
  59. ressimpy-2.2.2/ResSimpy/OpenGoSim/__init__.py +0 -0
  60. {ressimpy-2.2.2 → ressimpy-2.2.4}/LICENSE.MD +0 -0
  61. {ressimpy-2.2.2 → ressimpy-2.2.4}/README.md +0 -0
  62. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Aquifer.py +0 -0
  63. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Completion.py +0 -0
  64. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Constraint.py +0 -0
  65. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Constraints.py +0 -0
  66. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/DynamicProperty.py +0 -0
  67. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Enums/FluidTypeEnums.py +0 -0
  68. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Enums/FrequencyEnum.py +0 -0
  69. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Enums/GridFunctionTypes.py +0 -0
  70. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Enums/HowEnum.py +0 -0
  71. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Enums/OutputType.py +0 -0
  72. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Enums/PenetrationDirectionEnum.py +0 -0
  73. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Enums/TimeSteppingMethodEnum.py +0 -0
  74. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Enums/UnitsEnum.py +0 -0
  75. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Enums/WellTypeEnum.py +0 -0
  76. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Enums/__init__.py +0 -0
  77. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Equilibration.py +0 -0
  78. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/File.py +0 -0
  79. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/FileBase.py +0 -0
  80. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Gaslift.py +0 -0
  81. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/GridArrayFunction.py +0 -0
  82. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Grids.py +0 -0
  83. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Hydraulics.py +0 -0
  84. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/ISODateTime.py +0 -0
  85. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Network.py +0 -0
  86. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/FcsConfig.py +0 -0
  87. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/Network/NexusNode.py +0 -0
  88. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/Network/NexusNodeConnection.py +0 -0
  89. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/Network/NexusTarget.py +0 -0
  90. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/Network/NexusWellConnection.py +0 -0
  91. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/Network/NexusWellLists.py +0 -0
  92. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/Network/NexusWellbore.py +0 -0
  93. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/Network/NexusWellhead.py +0 -0
  94. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/Network/__init__.py +0 -0
  95. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/NexusAquiferMethod.py +0 -0
  96. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/NexusCompletion.py +0 -0
  97. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/NexusEquilMethod.py +0 -0
  98. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/NexusGasliftMethod.py +0 -0
  99. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/NexusHydraulicsMethod.py +0 -0
  100. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/NexusRelPermEndPoint.py +0 -0
  101. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/NexusRelPermMethod.py +0 -0
  102. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/NexusReportingRequests.py +0 -0
  103. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/NexusRockMethod.py +0 -0
  104. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/NexusSeparatorMethod.py +0 -0
  105. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/NexusValveMethod.py +0 -0
  106. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/NexusWaterMethod.py +0 -0
  107. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/NexusWellList.py +0 -0
  108. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/NexusWellMod.py +0 -0
  109. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/StructuredGrid/NexusGridArrayFunction.py +0 -0
  110. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/StructuredGrid/__init__.py +0 -0
  111. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/DataModels/__init__.py +0 -0
  112. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusAquiferMethods.py +0 -0
  113. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusEnums/DateFormatEnum.py +0 -0
  114. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusEnums/__init__.py +0 -0
  115. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusEquilMethods.py +0 -0
  116. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusGasliftMethods.py +0 -0
  117. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusGrids.py +0 -0
  118. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusHydraulicsMethods.py +0 -0
  119. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/__init__.py +0 -0
  120. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/adsorption_keywords.py +0 -0
  121. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/alphaf_keywords.py +0 -0
  122. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/aquifer_keywords.py +0 -0
  123. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/choke_keywords.py +0 -0
  124. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/compressor_keywords.py +0 -0
  125. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/eos_defaults_keywords.py +0 -0
  126. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/equil_keywords.py +0 -0
  127. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/esp_keywords.py +0 -0
  128. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/fcs_keywords.py +0 -0
  129. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/fluxin_keywords.py +0 -0
  130. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/gaslift_keywords.py +0 -0
  131. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/hyd_keywords.py +0 -0
  132. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/icd_keywords.py +0 -0
  133. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/ipr_keywords.py +0 -0
  134. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/nexus_keywords.py +0 -0
  135. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/options_keywords.py +0 -0
  136. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/polymer_keywords.py +0 -0
  137. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/proc_keywords.py +0 -0
  138. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/pump_keywords.py +0 -0
  139. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/pvt_keywords.py +0 -0
  140. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/relpm_keywords.py +0 -0
  141. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/rock_keywords.py +0 -0
  142. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/runcontrol_keywords.py +0 -0
  143. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/separator_keywords.py +0 -0
  144. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/structured_grid_keywords.py +0 -0
  145. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/surface_keywords.py +0 -0
  146. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/tracer_init_keywords.py +0 -0
  147. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/valve_keywords.py +0 -0
  148. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/water_keywords.py +0 -0
  149. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusKeywords/wells_keywords.py +0 -0
  150. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusPVTMethods.py +0 -0
  151. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusRelPermMethods.py +0 -0
  152. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusRockMethods.py +0 -0
  153. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusSeparatorMethods.py +0 -0
  154. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusValveMethods.py +0 -0
  155. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/NexusWaterMethods.py +0 -0
  156. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/__init__.py +0 -0
  157. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/constants.py +0 -0
  158. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/nexus_add_new_object_to_file.py +0 -0
  159. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/rel_perm_operations.py +0 -0
  160. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nexus/structured_grid_operations.py +0 -0
  161. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Node.py +0 -0
  162. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/NodeConnection.py +0 -0
  163. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/NodeConnections.py +0 -0
  164. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Nodes.py +0 -0
  165. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/OpenGoSim/DataModels/OpenGoSimCompletion.py +0 -0
  166. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/OpenGoSim/DataModels/OpenGoSimWell.py +0 -0
  167. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/OpenGoSim/Enums/SimulationTypeEnum.py +0 -0
  168. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/OpenGoSim/Model_Parts/OpenGoSimNetwork.py +0 -0
  169. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/OpenGoSim/OpenGoSimKeywords/OpenGoSimKeywords.py +0 -0
  170. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/OpenGoSim/OpenGoSimSimulator.py +0 -0
  171. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/OperationsMixin.py +0 -0
  172. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/PVT.py +0 -0
  173. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/RelPerm.py +0 -0
  174. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/RelPermEndPoint.py +0 -0
  175. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Reporting.py +0 -0
  176. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Rock.py +0 -0
  177. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Separator.py +0 -0
  178. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Simulator.py +0 -0
  179. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/SolverParameters.py +0 -0
  180. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Target.py +0 -0
  181. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Targets.py +0 -0
  182. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Units/AttributeMapping.py +0 -0
  183. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Units/AttributeMappings/BaseUnitMapping.py +0 -0
  184. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Units/AttributeMappings/CompletionUnitMapping.py +0 -0
  185. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Units/AttributeMappings/ConstraintUnitMapping.py +0 -0
  186. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Units/AttributeMappings/DynamicPropertyUnitMapping.py +0 -0
  187. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Units/AttributeMappings/NetworkUnitMapping.py +0 -0
  188. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Units/AttributeMappings/__init__.py +0 -0
  189. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Units/Units.py +0 -0
  190. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Units/__init__.py +0 -0
  191. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Utils/__init__.py +0 -0
  192. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Utils/factory_methods.py +0 -0
  193. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Utils/general_utilities.py +0 -0
  194. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Utils/invert_nexus_map.py +0 -0
  195. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Valve.py +0 -0
  196. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Water.py +0 -0
  197. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Well.py +0 -0
  198. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/WellConnection.py +0 -0
  199. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Wellbore.py +0 -0
  200. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Wellbores.py +0 -0
  201. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Wellhead.py +0 -0
  202. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Wellheads.py +0 -0
  203. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/Wells.py +0 -0
  204. {ressimpy-2.2.2 → ressimpy-2.2.4}/ResSimpy/output_request.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ResSimpy
3
- Version: 2.2.2
3
+ Version: 2.2.4
4
4
  Summary: A Python library for working with Reservoir Simulator Models.
5
5
  License: Apache-2.0
6
6
  Keywords: ResSimpy,Reservoir Engineering
@@ -49,12 +49,14 @@ class DataObjectMixin(ABC):
49
49
 
50
50
  @property
51
51
  def iso_date(self) -> ISODateTime:
52
+ """The date of the object in ISO format."""
52
53
  if self.__iso_date is None:
53
54
  self.set_iso_date()
54
55
  return self.__iso_date
55
56
 
56
57
  @property
57
58
  def date(self) -> Optional[str]:
59
+ """The date of the object as written in the source file."""
58
60
  return self.__date
59
61
 
60
62
  @date.setter
@@ -64,14 +66,17 @@ class DataObjectMixin(ABC):
64
66
 
65
67
  @property
66
68
  def start_date(self) -> Optional[str]:
69
+ """The start date of the model (required for Nexus objects using a decimal date format)."""
67
70
  return self._start_date
68
71
 
69
72
  @property
70
73
  def date_format(self) -> Optional[DateFormat]:
74
+ """The date format of the date on the object."""
71
75
  return self._date_format
72
76
 
73
77
  @property
74
78
  def unit_system(self) -> Optional[UnitSystem]:
79
+ """The unit system being used in the object."""
75
80
  return self._unit_system
76
81
 
77
82
  def set_iso_date(self) -> None:
@@ -102,6 +107,7 @@ class DataObjectMixin(ABC):
102
107
 
103
108
  def to_table_line(self, headers: list[str]) -> str:
104
109
  """Takes a generic Nexus object and returns the attribute values as a string in the order of headers provided.
110
+
105
111
  Requires an implemented to_dict method and get_keyword_mapping() method.
106
112
 
107
113
  Args:
@@ -0,0 +1 @@
1
+ """Module for file operations."""
@@ -9,6 +9,7 @@ def strip_file_of_comments(file_as_list: list[str], strip_str: bool = False,
9
9
  comment_characters: Optional[list[str]] = None,
10
10
  square_bracket_comments: bool = False) -> list[str]:
11
11
  """Strips all of the inline, single and multi line comments out of a file.
12
+
12
13
  Comment characters assumed are: ! and square brackets. Escaped characters are ones wrapped in quotation marks.
13
14
 
14
15
  Args:
@@ -270,7 +271,8 @@ def __replace_with_variable_entry(new_line: str, original_line: str, replace_wit
270
271
 
271
272
 
272
273
  def check_token(token: str, line: str) -> bool:
273
- """Checks if the text line contains the supplied token and is not commented out
274
+ """Checks if the text line contains the supplied token and is not commented out.
275
+
274
276
  Args:
275
277
  token (str): keyword value to search the line for
276
278
  line (str): string to search the token in
@@ -1,17 +1,22 @@
1
+ """Grid base class."""
2
+
1
3
  from __future__ import annotations
2
4
  from abc import ABC, abstractmethod
3
5
  from dataclasses import dataclass
6
+ import os
4
7
  import pandas as pd
5
- from typing import Optional, Sequence, TYPE_CHECKING
6
- from ResSimpy.GridArrayFunction import GridArrayFunction
8
+ import numpy as np
7
9
 
8
- if TYPE_CHECKING:
9
- from ResSimpy.File import File
10
+ from typing import Optional, Sequence
11
+ from ResSimpy.GridArrayFunction import GridArrayFunction
12
+ from ResSimpy.FileOperations import file_operations as fo
13
+ from ResSimpy.Utils.general_utilities import check_if_string_is_float
14
+ from ResSimpy.File import File
10
15
 
11
16
 
12
17
  @dataclass
13
18
  class GridArrayDefinition:
14
- """Initialises the NexusGrid class.
19
+ """A class to define a grid array property.
15
20
 
16
21
  Args:
17
22
  modifier (Optional[str]): the modifier for the grid array property (e.g. CON, MULT, etc.)
@@ -26,9 +31,24 @@ class GridArrayDefinition:
26
31
  keyword_in_include_file: bool = False
27
32
  absolute_path: Optional[str] = None
28
33
 
34
+ def load_grid_array_definition_to_file_as_list(self) -> list[str]:
35
+ """Loads the grid array definition to a file as a list of strings."""
36
+ path = self.absolute_path
37
+ if path is None and self.value is not None:
38
+ path = self.value
39
+ elif path is None:
40
+ raise FileNotFoundError('No file path found in the grid array definition')
41
+ return fo.load_file_as_list(path)
42
+
43
+ def get_array(self) -> np.ndarray:
44
+ """Returns a 1D numpy array from the grid array definition."""
45
+ file_as_list = self.load_grid_array_definition_to_file_as_list()
46
+ return Grid.grid_file_as_list_to_numpy_array(file_as_list, None, None, None)
47
+
29
48
 
30
49
  @dataclass(kw_only=True)
31
50
  class Grid(ABC):
51
+ """A base class to represent a collection of grids in a reservoir simulation model."""
32
52
  # Grid dimensions
33
53
  _range_x: Optional[int]
34
54
  _range_y: Optional[int]
@@ -143,3 +163,64 @@ class Grid(ABC):
143
163
  def array_functions(self) -> Optional[Sequence[GridArrayFunction]]:
144
164
  """Returns a list of the array functions defined in the structured grid file."""
145
165
  raise NotImplementedError("Implement this in the derived class")
166
+
167
+ @staticmethod
168
+ def filter_grid_array_definition(grid_array_definition: GridArrayDefinition) -> File:
169
+ """Checks array files for only float values and returns a new file with only float values."""
170
+ file_path = grid_array_definition.absolute_path
171
+ if file_path is None and grid_array_definition.value is not None:
172
+ file_path = grid_array_definition.value
173
+ elif file_path is None:
174
+ raise FileNotFoundError('No file path found in the grid array definition')
175
+ file_as_list = fo.load_file_as_list(file_path)
176
+
177
+ new_file_as_list = Grid.grid_filter_file_as_list(file_as_list)
178
+
179
+ # create a new file with the filtered list
180
+ new_file_path = (os.path.splitext(file_path)[0] + '_filtered' +
181
+ os.path.splitext(file_path)[1])
182
+ new_grid_file = File(location=new_file_path,
183
+ file_content_as_list=new_file_as_list,
184
+ create_as_modified=True,
185
+ )
186
+
187
+ return new_grid_file
188
+
189
+ @staticmethod
190
+ def grid_filter_file_as_list(file_as_list: list[str], comment_characters: list[str] | None = None) -> list[str]:
191
+ """Checks array files for only float values and returns a new file with only float values.
192
+
193
+ This works for grid arrays only. It does not work well with extremely large files.
194
+
195
+ Args:
196
+ file_as_list (list[str]): The file as a list of strings.
197
+ comment_characters (Optional[list[str]]): The comment characters to filter out. Defaults to None.
198
+ """
199
+ if comment_characters is None:
200
+ comment_characters = ['--', '!', 'C']
201
+ if fo.value_in_file('INCLUDE', file_as_list):
202
+ raise NotImplementedError('Nested includes for grid files currently not implemented')
203
+ file_as_list = fo.strip_file_of_comments(file_as_list, comment_characters=comment_characters)
204
+ # remove non float values
205
+ file_as_list = [' '.join([x for x in line.split() if check_if_string_is_float(x)]) for line in file_as_list]
206
+ return file_as_list
207
+
208
+ @staticmethod
209
+ def grid_file_as_list_to_numpy_array(file_as_list: list[str], x_range: None | int, y_range: None | int,
210
+ z_range: None | int) -> np.ndarray:
211
+ """Converts a list of strings to a numpy array."""
212
+ # ensure the list of strings is filtered of comments and non-float values
213
+ new_file_as_list = Grid.grid_filter_file_as_list(file_as_list)
214
+
215
+ array_size = -1
216
+ if x_range is not None and y_range is not None and z_range is not None:
217
+ array_size = x_range * y_range * z_range
218
+
219
+ grid_array = np.fromstring(' '.join(new_file_as_list), sep=' ', count=array_size)
220
+
221
+ return grid_array
222
+
223
+ def grid_array_definition_to_numpy_array(self, grid_array_definition: GridArrayDefinition) -> np.ndarray:
224
+ """Converts a grid array to a numpy array."""
225
+ file_as_list = grid_array_definition.load_grid_array_definition_to_file_as_list()
226
+ return self.grid_file_as_list_to_numpy_array(file_as_list, self.range_x, self.range_y, self.range_z)
@@ -332,13 +332,15 @@ class FcsNexusFile(NexusFile):
332
332
  return_dict = dict(single_keywords, **multi_keywords)
333
333
  return return_dict
334
334
 
335
- def move_model_files(self, new_file_path: str, new_include_file_location: str) -> None:
335
+ def move_model_files(self, new_file_path: str, new_include_file_location: str, overwrite_files: bool = False) -> \
336
+ None:
336
337
  """Moves all the model files to a new location.
337
338
 
338
339
  Args:
339
340
  new_file_path (str): new file path for the fcs file e.g. /new_path/new_fcs_file.fcs
340
341
  new_include_file_location (str): new location for the included files either absolute or relative
341
342
  to the new fcs file path
343
+ overwrite_files (bool): whether to overwrite the files if they already exist in the new location
342
344
  """
343
345
  # Take the original file, find which files have changed and write out those locations
344
346
  # figure out where to store the include files:
@@ -358,7 +360,8 @@ class FcsNexusFile(NexusFile):
358
360
  # skip if there is no file
359
361
  continue
360
362
  include_name = os.path.join(include_dir, os.path.basename(file.location))
361
- file.write_to_file(include_name, write_includes=True, write_out_all_files=True)
363
+ file.write_to_file(include_name, write_includes=True, write_out_all_files=True,
364
+ overwrite_file=overwrite_files)
362
365
  self.change_file_path(include_name, keyword)
363
366
 
364
367
  for keyword, attr_name in self.fcs_keyword_map_multi().items():
@@ -367,11 +370,12 @@ class FcsNexusFile(NexusFile):
367
370
  continue
368
371
  for method_number, file in file_dict.items():
369
372
  include_name = os.path.join(include_dir, os.path.basename(file.location))
370
- file.write_to_file(include_name, write_includes=True, write_out_all_files=True)
373
+ file.write_to_file(include_name, write_includes=True, write_out_all_files=True,
374
+ overwrite_file=overwrite_files)
371
375
  self.change_file_path(include_name, keyword, method_number)
372
376
 
373
377
  # write out the final fcs file
374
- self.write_to_file(new_file_path, write_includes=False)
378
+ self.write_to_file(new_file_path, write_includes=False, overwrite_file=overwrite_files)
375
379
 
376
380
  def write_out_case(self, new_file_path: str, new_include_file_location: str, case_suffix: str) -> None:
377
381
  """Writes out a new simulator with only modified files. For use with creating multiple cases from a base case.
@@ -425,6 +429,7 @@ class FcsNexusFile(NexusFile):
425
429
 
426
430
  def update_model_files(self) -> None:
427
431
  """Updates all the modified files in the model. Keeps file names and paths the same.
432
+
428
433
  Warning: this method overwrites the existing files!
429
434
  """
430
435
  # Loop through all files in the model, writing out the contents if they have been modified.
@@ -12,7 +12,9 @@ from ResSimpy.Nexus.NexusEnums.DateFormatEnum import DateFormat
12
12
 
13
13
  @dataclass(repr=False)
14
14
  class NexusConstraint(Constraint):
15
- """Attributes:
15
+ """Class representing a single constraint object within the NexusNetwork for a single datetime.
16
+
17
+ Attributes:
16
18
  name (str): name of the well (NAME)
17
19
  max_surface_oil_rate (float): max surface oil rate (QOSMAX)
18
20
  max_surface_gas_rate (float): max surface gas rate (QGSMAX)
@@ -420,6 +422,7 @@ class NexusConstraint(Constraint):
420
422
 
421
423
  def write_qmult_table(self) -> list[str]:
422
424
  """Writes out a QMULT table from a constraint that uses the following attributes.
425
+
423
426
  'QOIL': ('qmult_oil_rate', float).
424
427
  'QWATER': ('qmult_water_rate', float).
425
428
  'QGAS': ('qmult_gas_rate', float).
@@ -1,6 +1,8 @@
1
- """Class that holds all the constraints for a NexusNetwork object. This class is responsible for loading,
2
- modifying and removing constraints from the NexusNetwork object. This class is also responsible for
3
- writing the constraints to the Nexus deck. An instance of this is held within the Network class as "constraints".
1
+ """Class that holds all the constraints for a NexusNetwork object.
2
+
3
+ This class is responsible for loading, modifying and removing constraints from the NexusNetwork object. This class is
4
+ also responsible for writing the constraints to the Nexus deck. An instance of this is held within the Network class
5
+ as "constraints".
4
6
  """
5
7
  from __future__ import annotations
6
8
 
@@ -26,9 +28,10 @@ if TYPE_CHECKING:
26
28
 
27
29
  @dataclass
28
30
  class NexusConstraints(Constraints):
29
- """Class that holds all the constraints for a NexusNetwork object. This class is responsible for loading,
30
- modifying and removing constraints from the NexusNetwork object. This class is also responsible for
31
- writing the constraints to the Nexus deck.
31
+ """Class that holds all the constraints for a NexusNetwork object.
32
+
33
+ This class is responsible for loading, modifying and removing constraints from the NexusNetwork object. This
34
+ class is also responsible for writing the constraints to the Nexus deck.
32
35
 
33
36
  Attributes:
34
37
  constraints: dict[str, list[NexusConstraint]]: dictionary of all constraints defined within a model,
@@ -49,7 +52,8 @@ class NexusConstraints(Constraints):
49
52
 
50
53
  def get_all(self, object_name: Optional[str] = None, date: Optional[str] = None) -> \
51
54
  dict[str, list[NexusConstraint]]:
52
- """Get the constraints of the existing model with optional parameters to filter for name and date
55
+ """Get the constraints of the existing model with optional parameters to filter for name and date.
56
+
53
57
  Args:
54
58
  object_name (Optional[str]): name of the connection, node or wellname to return. Defaults to None.
55
59
  date (Optional[str]): date in model format to filter the dates to in the constraints
@@ -74,7 +78,8 @@ class NexusConstraints(Constraints):
74
78
  return date_filtered_constraints
75
79
 
76
80
  def get_df(self) -> pd.DataFrame:
77
- """Creates a dataframe representing all processed constraint data in a surface file
81
+ """Creates a dataframe representing all processed constraint data in a surface file.
82
+
78
83
  Returns:
79
84
  DataFrame: of the properties of the constraint through time with each row representing \
80
85
  a change in constraint.
@@ -106,6 +111,7 @@ class NexusConstraints(Constraints):
106
111
 
107
112
  def _add_to_memory(self, additional_constraints: Optional[dict[str, list[NexusConstraint]]]) -> None:
108
113
  """Adds additional constraints to memory within the NexusConstraints object.
114
+
109
115
  If user adds constraints list this will not be reflected in the Nexus deck at this time.
110
116
 
111
117
  Args:
@@ -145,7 +151,8 @@ class NexusConstraints(Constraints):
145
151
 
146
152
  def remove(self, constraint_dict: Optional[dict[str, None | float | str | int]] = None,
147
153
  constraint_id: Optional[UUID] = None) -> None:
148
- """Remove a constraint based on closest matching constraint, requires node name and date.\
154
+ """Remove a constraint based on closest matching constraint, requires node name and date.
155
+
149
156
  Needs one of at least constraint dict or constraint id.
150
157
 
151
158
  Args:
@@ -382,8 +389,9 @@ class NexusConstraints(Constraints):
382
389
  new_constraint_props: dict[str, None | float | int | str | UnitSystem] | Constraint,
383
390
  comments: Optional[str] = None) \
384
391
  -> None:
385
- """Modify an existing constraint. Retains existing constraint values that are not overridden by the new \
386
- constraint properties.
392
+ """Modify an existing constraint.
393
+
394
+ Retains existing constraint values that are not overridden by the new constraint properties.
387
395
 
388
396
  Args:
389
397
  name (str): The well name
@@ -1,4 +1,6 @@
1
- """Holds all the node connections in a network. This class is responsible for loading, modifying and removing
1
+ """Holds all the node connections in a network.
2
+
3
+ This class is responsible for loading, modifying and removing
2
4
  connections from a network. It also holds the list of connections in memory.
3
5
  An instance is held within the NexusNetwork class as "connections".
4
6
  """
@@ -27,8 +29,10 @@ if TYPE_CHECKING:
27
29
 
28
30
  @dataclass(kw_only=True)
29
31
  class NexusNodeConnections(NodeConnections):
30
- """Holds all the node connections in a network. This class is responsible for loading, modifying and removing
31
- connections from a network. It also holds the list of connections in memory.
32
+ """Holds all the node connections in a network.
33
+
34
+ This class is responsible for loading, modifying and removing connections from a network. It also holds the list
35
+ of connections in memory.
32
36
  """
33
37
  __connections: list[NexusNodeConnection] = field(default_factory=list)
34
38
 
@@ -67,7 +71,8 @@ class NexusNodeConnections(NodeConnections):
67
71
  return next(connections_to_return, None)
68
72
 
69
73
  def get_df(self) -> pd.DataFrame:
70
- """Creates a dataframe representing all processed node connection data in a surface file
74
+ """Creates a dataframe representing all processed node connection data in a surface file.
75
+
71
76
  Returns:
72
77
  DataFrame: of the properties of the connections through time with each row representing a node.
73
78
  """
@@ -123,7 +128,8 @@ class NexusNodeConnections(NodeConnections):
123
128
  def modify(self, obj_to_modify: dict[str, None | str | float | int],
124
129
  new_properties: dict[str, None | str | float | int]) -> None:
125
130
  """Modifies an existing connection based on a matching dictionary of properties.
126
- (partial matches allowed if precisely 1 matching node is found).
131
+
132
+ Partial matches allowed if precisely 1 matching node is found.
127
133
  Updates the properties with properties in the new_properties dictionary.
128
134
 
129
135
  Args:
@@ -1,4 +1,5 @@
1
1
  """Holds the NexusNodes class which is used to store and manipulate the nodes in a NexusNetwork.
2
+
2
3
  It is stored as an instance in the NexusNetwork class as "nodes".
3
4
  """
4
5
 
@@ -26,6 +27,7 @@ if TYPE_CHECKING:
26
27
  @dataclass(kw_only=True)
27
28
  class NexusNodes(Nodes):
28
29
  """Class to store and manipulate the nodes in a NexusNetwork.
30
+
29
31
  It is stored as an instance in the NexusNetwork class as "nodes". A list of nodes in the network are stored in
30
32
  memory these can be accessed through the get_all method.
31
33
  """
@@ -77,7 +79,8 @@ class NexusNodes(Nodes):
77
79
  return next(nodes_to_return, None)
78
80
 
79
81
  def get_df(self) -> pd.DataFrame:
80
- """Creates a dataframe representing all processed node data in a surface file
82
+ """Creates a dataframe representing all processed node data in a surface file.
83
+
81
84
  Returns:
82
85
  DataFrame: of the properties of the nodes through time with each row representing a node.
83
86
  """
@@ -144,8 +147,10 @@ class NexusNodes(Nodes):
144
147
 
145
148
  def modify(self, node_to_modify: dict[str, None | str | float | int],
146
149
  new_properties: dict[str, None | str | float | int]) -> None:
147
- """Modifies an existing node based on a matching dictionary of properties (partial matches allowed if precisely
148
- 1 matching node is found). Updates the properties with properties in the new_properties dictionary.
150
+ """Modifies an existing node based on a matching dictionary of properties.
151
+
152
+ Partial matches allowed if precisely 1 matching node is found. Updates the properties with properties in the
153
+ new_properties dictionary.
149
154
 
150
155
  Args:
151
156
  node_to_modify (dict[str, None | str | float | int]): dictionary containing attributes to match in the
@@ -86,9 +86,9 @@ class NexusProc:
86
86
 
87
87
  @staticmethod
88
88
  def reset_nexus_proc_function_counts() -> dict[str, int]:
89
- """This function initializes and returns a dict of built-in Nexus proc functions. Please refer to page
90
- 1013 of the 2022 Nexus Keyword manual for a description of the functions.
89
+ """This function initializes and returns a dict of built-in Nexus proc functions.
91
90
 
91
+ Please refer to page 1013 of the 2022 Nexus Keyword manual for a description of the functions.
92
92
  Returns: A dictionary of Nexus proc functions where the key is the specific function and the value is
93
93
  the count, initialized to zero.
94
94
  """
@@ -11,8 +11,9 @@ if TYPE_CHECKING:
11
11
 
12
12
  @dataclass(kw_only=True)
13
13
  class NexusProcs:
14
- """Class for handling procedures in the Nexus Network. This class is used to store and collect information about
15
- certain procedures written in the Nexus surface file.
14
+ """Class for handling procedures in the Nexus Network.
15
+
16
+ This class is used to store and collect information about certain procedures written in the Nexus surface file.
16
17
  """
17
18
  # need field function to make a new unique empty list
18
19
  __procs: list[NexusProc] = field(default_factory=list)
@@ -1,5 +1,7 @@
1
- """Class for handling targets in the Nexus Network. This class is used to store and manipulate the targets in a
2
- NexusNetwork. It is stored as an instance in the NexusNetwork class as "targets".
1
+ """Class for handling targets in the Nexus Network.
2
+
3
+ This class is used to store and manipulate the targets in a NexusNetwork. It is stored as an instance in the
4
+ NexusNetwork class as "targets".
3
5
  """
4
6
  from __future__ import annotations
5
7
  from dataclasses import dataclass, field
@@ -24,8 +26,10 @@ if TYPE_CHECKING:
24
26
 
25
27
  @dataclass(kw_only=True)
26
28
  class NexusTargets(Targets):
27
- """Class for handling targets in the Nexus Network. This class is used to store and manipulate the targets in a
28
- NexusNetwork. It is stored as an instance in the NexusNetwork class as "targets".
29
+ """Class for handling targets in the Nexus Network.
30
+
31
+ This class is used to store and manipulate the targets in a NexusNetwork. It is stored as an instance in the
32
+ NexusNetwork class as "targets".
29
33
  """
30
34
  __targets: list[NexusTarget] = field(default_factory=list)
31
35
 
@@ -75,7 +79,8 @@ class NexusTargets(Targets):
75
79
  return next(targets_to_return, None)
76
80
 
77
81
  def get_df(self) -> pd.DataFrame:
78
- """Creates a dataframe representing all processed target data in a surface file
82
+ """Creates a dataframe representing all processed target data in a surface file.
83
+
79
84
  Returns:
80
85
  DataFrame: of the properties of the targets through time with each row representing a target.
81
86
  """
@@ -142,8 +147,10 @@ class NexusTargets(Targets):
142
147
 
143
148
  def modify(self, target_to_modify: dict[str, None | str | float | int],
144
149
  new_properties: dict[str, None | str | float | int]) -> None:
145
- """Modifies an existing node based on a matching dictionary of properties (partial matches allowed if precisely
146
- 1 matching node is found). Updates the properties with properties in the new_properties dictionary.
150
+ """Modifies an existing node based on a matching dictionary of properties.
151
+
152
+ Partial matches allowed if precisely 1 matching node is found. Updates the properties with properties in the
153
+ new_properties dictionary.
147
154
 
148
155
  Args:
149
156
  target_to_modify (dict[str, None | str | float | int]): dictionary containing attributes to match in the
@@ -1,4 +1,6 @@
1
- """Class for handling well connections in the Nexus Network. This class is used to store and manipulate the well
1
+ """Class for handling well connections in the Nexus Network.
2
+
3
+ This class is used to store and manipulate the well
2
4
  connections in a NexusNetwork. It is stored as an instance in the NexusNetwork class as "well_connections".
3
5
  In Nexus this is the WELLS table.
4
6
  """
@@ -25,10 +27,11 @@ if TYPE_CHECKING:
25
27
 
26
28
  @dataclass
27
29
  class NexusWellConnections(WellConnections):
28
- """Class for handling well connections in the Nexus Network. This class is used to store and manipulate the well
29
- connections in a NexusNetwork. It is stored as an instance in the NexusNetwork class as "well_connections".
30
- In Nexus this is the WELLS table. The list of well connections can be accessed in the NexusNetwork class through the
31
- get_all method.
30
+ """Class for handling well connections in the Nexus Network.
31
+
32
+ This class is used to store and manipulate the well connections in a NexusNetwork. It is stored as an instance in
33
+ the NexusNetwork class as "well_connections". In Nexus this is the WELLS table. The list of well connections can
34
+ be accessed in the NexusNetwork class through the get_all method.
32
35
  """
33
36
  _well_connections: list[NexusWellConnection] = field(default_factory=list)
34
37
 
@@ -67,7 +70,8 @@ class NexusWellConnections(WellConnections):
67
70
  return next(to_return, None)
68
71
 
69
72
  def get_df(self) -> pd.DataFrame:
70
- """Creates a dataframe representing all processed well connections data in a surface file
73
+ """Creates a dataframe representing all processed well connections data in a surface file.
74
+
71
75
  Returns:
72
76
  DataFrame: of the properties of the well connections through time with each row representing a single well \
73
77
  connection.
@@ -115,7 +119,8 @@ class NexusWellConnections(WellConnections):
115
119
  def modify(self, obj_to_modify: dict[str, None | str | float | int],
116
120
  new_properties: dict[str, None | str | float | int]) -> None:
117
121
  """Modifies an existing well connection based on a matching dictionary of properties.
118
- (partial matches allowed if precisely 1 matching node is found).
122
+
123
+ Partial matches allowed if precisely 1 matching node is found.
119
124
  Updates the properties with properties in the new_properties dictionary.
120
125
 
121
126
  Args:
@@ -1,5 +1,7 @@
1
- """Class for handling wellbores in the Nexus Network. This class is used to store and manipulate the wellbores in a
2
- NexusNetwork. It is stored as an instance in the NexusNetwork class as "wellbores".
1
+ """Class for handling wellbores in the Nexus Network.
2
+
3
+ This class is used to store and manipulate the wellbores in a NexusNetwork. It is stored as an instance in the
4
+ NexusNetwork class as "wellbores".
3
5
  """
4
6
  from __future__ import annotations
5
7
 
@@ -25,9 +27,11 @@ if TYPE_CHECKING:
25
27
 
26
28
  @dataclass
27
29
  class NexusWellbores(Wellbores):
28
- """Class for handling wellbores in the Nexus Network. This class is used to store and manipulate the wellbores in a
29
- NexusNetwork. It is stored as an instance in the NexusNetwork class as "wellbores". The list of wellbores can be
30
- accessed in the NexusNetwork class through the get_all method.
30
+ """Class for handling wellbores in the Nexus Network.
31
+
32
+ This class is used to store and manipulate the wellbores in a NexusNetwork. It is stored as an instance in the
33
+ NexusNetwork class as "wellbores". The list of wellbores can be accessed in the NexusNetwork class through the
34
+ get_all method.
31
35
  """
32
36
  __wellbores: list[NexusWellbore] = field(default_factory=list)
33
37
 
@@ -113,7 +117,8 @@ class NexusWellbores(Wellbores):
113
117
  def modify(self, obj_to_modify: dict[str, None | str | float | int],
114
118
  new_properties: dict[str, None | str | float | int]) -> None:
115
119
  """Modifies an existing wellbore based on a matching dictionary of properties.
116
- (partial matches allowed if precisely 1 matching node is found).
120
+
121
+ Partial matches allowed if precisely 1 matching node is found.
117
122
  Updates the properties with properties in the new_properties dictionary.
118
123
 
119
124
  Args:
@@ -1,6 +1,7 @@
1
- """Class for handling wellheads in the Nexus Network. This class is used to store and manipulate the wellheads in \
2
- a NexusNetwork. It is stored as an instance in the NexusNetwork class as "wellheads".
3
- In Nexus this is the WELLHEAD table.
1
+ """Class for handling wellheads in the Nexus Network.
2
+
3
+ This class is used to store and manipulate the wellheads in a NexusNetwork. It is stored as an instance in the
4
+ NexusNetwork class as "wellheads". In Nexus this is the WELLHEAD table.
4
5
  """
5
6
  from __future__ import annotations
6
7
  from dataclasses import dataclass, field
@@ -107,7 +108,8 @@ class NexusWellheads(Wellheads):
107
108
  def modify(self, obj_to_modify: dict[str, None | str | float | int],
108
109
  new_properties: dict[str, None | str | float | int]) -> None:
109
110
  """Modifies an existing wellhead based on a matching dictionary of properties.
110
- (partial matches allowed if precisely 1 matching node is found).
111
+
112
+ Partial matches allowed if precisely 1 matching node is found.
111
113
  Updates the properties with properties in the new_properties dictionary.
112
114
 
113
115
  Args:
@@ -402,8 +402,9 @@ class NexusFile(File):
402
402
  return from_list, to_list
403
403
 
404
404
  def add_object_locations(self, obj_uuid: UUID, line_indices: list[int]) -> None:
405
- """Adds a uuid to the object_locations dictionary. Used for storing the line numbers where objects are stored
406
- within the flattened file_as_list.
405
+ """Adds a uuid to the object_locations dictionary.
406
+
407
+ Used for storing the line numbers where objects are stored within the flattened file_as_list.
407
408
 
408
409
  Args:
409
410
  obj_uuid (UUID): unique identifier of the object being created/stored.
@@ -420,9 +421,10 @@ class NexusFile(File):
420
421
  self.object_locations[obj_uuid] = line_indices
421
422
 
422
423
  def __update_object_locations(self, line_number: int, number_additional_lines: int) -> None:
423
- """Updates the object locations in a nexusfile by the additional lines. Used when files have been modified and
424
- an addition/removal of lines has occurred. Ensures that the object locations are correct to the actual lines
425
- in the file_as_list.
424
+ """Updates the object locations in a nexusfile by the additional lines.
425
+
426
+ Used when files have been modified and an addition/removal of lines has occurred. Ensures that the object
427
+ locations are correct to the actual lines in the file_as_list.
426
428
 
427
429
  Args:
428
430
  line_number (int): Line number at which the new lines have been added
@@ -449,7 +451,7 @@ class NexusFile(File):
449
451
  self.object_locations.pop(obj_uuid, None)
450
452
 
451
453
  def find_which_include_file(self, flattened_index: int) -> tuple[File, int]:
452
- """Given a line index that relates to a position within the flattened file_as_list from the method
454
+ """Given a line index that relates to a position within the flattened file_as_list from the method \
453
455
  get_flat_file_as_list.
454
456
 
455
457
  Args:
@@ -577,8 +579,9 @@ class NexusFile(File):
577
579
 
578
580
  def remove_from_file_as_list(self, index: int, objects_to_remove: Optional[list[UUID]] = None,
579
581
  string_to_remove: Optional[str] = None) -> None:
580
- """Remove an entry from the file as list. Also updates existing object locations and removes any \
581
- specified objects from the object locations dictionary.
582
+ """Remove an entry from the file as list.
583
+
584
+ Also updates existing object locations and removes any specified objects from the object locations dictionary.
582
585
 
583
586
  Args:
584
587
  index (int): index n the calling flat_file_as_list to remove the entry from
@@ -222,6 +222,7 @@ class NexusPVTMethod(DynamicProperty):
222
222
  def __populate_eos_opts_to_tertiary_keys(self, primary_key: str, primary_key_default_val: str, single_line: str,
223
223
  line_list: list[str], list_of_secondary_keys: list[str]) -> None:
224
224
  """Utility function to populate complex EOS options structures, from primary to tertiary keyword level.
225
+
225
226
  Applies to TRANSITION, TRANS_TEST and PHASEID Nexus EOS options.
226
227
 
227
228
  Args: