resqpy 4.18.10__py3-none-any.whl → 4.18.11__py3-none-any.whl

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.
resqpy/__init__.py CHANGED
@@ -28,6 +28,6 @@
28
28
 
29
29
  import logging
30
30
 
31
- __version__ = "4.18.10" # Set at build time
31
+ __version__ = "4.18.11" # Set at build time
32
32
  log = logging.getLogger(__name__)
33
33
  log.info(f"Imported resqpy version {__version__}")
@@ -43,6 +43,7 @@ def find_faces_to_represent_surface_regular_wrapper(index: int,
43
43
  raw_bisector: bool = False,
44
44
  use_pack: bool = False,
45
45
  flange_radius = None,
46
+ reorient = True,
46
47
  n_threads = 20) -> Tuple[int, bool, str, List[Union[UUID, str]]]:
47
48
  """Multiprocessing wrapper function of find_faces_to_represent_surface_regular_optimised.
48
49
 
@@ -96,6 +97,8 @@ def find_faces_to_represent_surface_regular_wrapper(index: int,
96
97
  packed format, which will only be readable by resqpy based applications
97
98
  flange_radius (float, optional): the radial distance to use for outer flange extension points; if None,
98
99
  a large value will be calculated from the grid size; units are xy units of grid crs
100
+ reorient (bool, default True): if True, the points are reoriented to minimise the
101
+ z range prior to retriangulation (ie. z axis is approximate normal to plane of points), to enhace the triangulation
99
102
  n_threads (int, default 20): the number of parallel threads to use in numba points in triangles function
100
103
 
101
104
  returns:
@@ -176,7 +179,7 @@ def find_faces_to_represent_surface_regular_wrapper(index: int,
176
179
  surf = rqs.Surface(model, crs_uuid = grid.crs.uuid, title = surf_title)
177
180
  flange_bool = surf.set_from_point_set(pset,
178
181
  convexity_parameter = 2.0,
179
- reorient = True,
182
+ reorient = reorient,
180
183
  extend_with_flange = extend_fault_representation,
181
184
  flange_inner_ring = flange_inner_ring,
182
185
  saucer_parameter = saucer_parameter,
@@ -64,7 +64,10 @@ def load_nexus_fault_mult_table_from_list(file_as_list):
64
64
  outdata[mask] = np.concatenate(d_elems)
65
65
  df = pd.DataFrame(outdata)
66
66
  for column in df.columns:
67
- df[column] = pd.to_numeric(df[column], errors = 'ignore')
67
+ try:
68
+ df[column] = pd.to_numeric(df[column], errors = "coerce")
69
+ except ValueError:
70
+ pass
68
71
  df.columns = ['i1', 'i2', 'j1', 'j2', 'k1', 'k2', 'mult']
69
72
  df['grid'] = grid
70
73
  df['name'] = name
@@ -114,7 +117,10 @@ def load_nexus_fault_mult_table_from_list(file_as_list):
114
117
  outdata[mask] = np.concatenate(d_elems)
115
118
  df = pd.DataFrame(outdata)
116
119
  for column in df.columns:
117
- df[column] = pd.to_numeric(df[column], errors = 'ignore')
120
+ try:
121
+ df[column] = pd.to_numeric(df[column], errors = "coerce")
122
+ except ValueError:
123
+ pass
118
124
  df.columns = ['i1', 'i2', 'j1', 'j2', 'k1', 'k2', 'mult']
119
125
  df['grid'] = grid
120
126
  df['name'] = name
resqpy/olio/relperm.py CHANGED
@@ -91,7 +91,7 @@ class RelPerm(DataFrame):
91
91
  processed_phase_combo_checks.get(processed_phase_combo)(df)
92
92
  # ensure that missing capillary pressure values are stored as np.nan
93
93
  if 'Pc' in df.columns:
94
- df['Pc'].replace('None', np.nan, inplace = True)
94
+ df['Pc'] = df['Pc'].replace('None', np.nan)
95
95
  # convert all values in the dataframe to numeric type
96
96
  df[df.columns] = df[df.columns].apply(pd.to_numeric, errors = 'coerce')
97
97
  # ensure that no other column besides Pc has missing values
@@ -760,7 +760,8 @@ class PropertyCollection():
760
760
  title = None,
761
761
  title_mode = None,
762
762
  related_uuid = None,
763
- const_value = None):
763
+ const_value = None,
764
+ extra = None):
764
765
  """Returns a single part selected by those arguments which are not None.
765
766
 
766
767
  multiple_handling (string, default 'exception'): one of 'exception', 'none', 'first', 'oldest', 'newest'
@@ -799,7 +800,8 @@ class PropertyCollection():
799
800
  title = title,
800
801
  title_mode = title_mode,
801
802
  related_uuid = related_uuid,
802
- const_value = const_value)
803
+ const_value = const_value,
804
+ extra = extra)
803
805
  parts_list = temp_collection.parts()
804
806
  if len(parts_list) == 0:
805
807
  return None
@@ -832,7 +834,8 @@ class PropertyCollection():
832
834
  title = None,
833
835
  title_mode = None,
834
836
  related_uuid = None,
835
- use_pack = True):
837
+ use_pack = True,
838
+ extra = None):
836
839
  """Returns the array of data for a single part selected by those arguments which are not None.
837
840
 
838
841
  arguments:
@@ -849,7 +852,7 @@ class PropertyCollection():
849
852
 
850
853
  Other optional arguments:
851
854
  realization, support_uuid, continuous, points, count, indexable, property_kind, facet_type, facet,
852
- citation_title, time_series_uuid, time_index, uom, string_lookup_id, categorical, related_uuid:
855
+ citation_title, time_series_uuid, time_index, uom, string_lookup_id, categorical, related_uuid, extra:
853
856
 
854
857
  For each of these arguments: if None, then all members of collection pass this filter;
855
858
  if not None then only those members with the given value pass this filter;
@@ -885,7 +888,8 @@ class PropertyCollection():
885
888
  multiple_handling = multiple_handling,
886
889
  title = title,
887
890
  title_mode = title_mode,
888
- related_uuid = related_uuid)
891
+ related_uuid = related_uuid,
892
+ extra = extra)
889
893
  if part is None:
890
894
  return None
891
895
  return self.cached_part_array_ref(part,
@@ -877,10 +877,10 @@ class BlockedWell(BaseResqpy):
877
877
  @staticmethod
878
878
  def __cell_kji0_from_df(df, df_row):
879
879
  row = df.iloc[df_row]
880
- if pd.isna(row[0]) or pd.isna(row[1]) or pd.isna(row[2]):
880
+ if pd.isna(row.iloc[0]) or pd.isna(row.iloc[1]) or pd.isna(row.iloc[2]):
881
881
  return None
882
882
  cell_kji0 = np.empty((3,), dtype = np.int32)
883
- cell_kji0[:] = row[2], row[1], row[0]
883
+ cell_kji0[:] = row.iloc[2], row.iloc[1], row.iloc[0]
884
884
  cell_kji0[:] -= 1
885
885
  return cell_kji0
886
886
 
@@ -233,9 +233,9 @@ class DeviationSurvey(BaseResqpy):
233
233
  """
234
234
 
235
235
  try:
236
- df = pd.read_csv(deviation_survey_file,
237
- comment = comment_character,
238
- delim_whitespace = space_separated_instead_of_csv)
236
+ sep = r'\s+' if space_separated_instead_of_csv else ','
237
+
238
+ df = pd.read_csv(deviation_survey_file, comment = comment_character, sep = sep)
239
239
  if df is None:
240
240
  raise Exception
241
241
  except Exception:
@@ -510,9 +510,9 @@ class Trajectory(BaseResqpy):
510
510
  self.title = 'well trajectory'
511
511
 
512
512
  try:
513
- df = pd.read_csv(trajectory_file,
514
- comment = comment_character,
515
- delim_whitespace = space_separated_instead_of_csv)
513
+ sep = r'\s+' if space_separated_instead_of_csv else ','
514
+
515
+ df = pd.read_csv(trajectory_file, comment = comment_character, sep = sep)
516
516
  if df is None:
517
517
  raise Exception
518
518
  except Exception:
@@ -77,9 +77,8 @@ def add_wells_from_ascii_file(model,
77
77
  assert crs_uuid is not None, 'coordinate reference system not found when trying to add wells'
78
78
 
79
79
  try:
80
- df = pd.read_csv(trajectory_file,
81
- comment = comment_character,
82
- delim_whitespace = space_separated_instead_of_csv)
80
+ sep = r'\s+' if space_separated_instead_of_csv else ','
81
+ df = pd.read_csv(trajectory_file, comment = comment_character, sep = sep)
83
82
  if df is None:
84
83
  raise Exception
85
84
  except Exception:
@@ -350,7 +349,6 @@ def add_las_to_trajectory(las: lasio.LASFile, trajectory, realization = None, ch
350
349
 
351
350
  # Read in data from each curve in turn (skipping first curve which has depths)
352
351
  for curve in las.curves[1:]:
353
-
354
352
  collection.add_log(
355
353
  title = curve.mnemonic,
356
354
  data = curve.data,
@@ -444,7 +442,7 @@ def add_logs_from_cellio(blockedwell, cellio):
444
442
  df['cell_indices'] = grid.natural_cell_indices(
445
443
  np.array((df['k_index'] - 1, df['j_index'] - 1, df['i_index'] - 1), dtype = np.int32).T)
446
444
  df = df.drop(['i_index', 'j_index', 'k_index', 'x_in', 'y_in', 'z_in', 'x_out', 'y_out', 'z_out'], axis = 1)
447
- assert (df['cell_indices'] == blockedwell.cell_indices).all(), \
445
+ assert (df['cell_indices'] == blockedwell.cell_indices).all(), \
448
446
  'Cell indices do not match between blocked well and log inputs'
449
447
 
450
448
  # Work out if the data columns are continuous, categorical or discrete
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: resqpy
3
- Version: 4.18.10
3
+ Version: 4.18.11
4
4
  Summary: Python API for working with RESQML models
5
5
  Home-page: https://github.com/bp/resqpy
6
6
  License: MIT
@@ -1,4 +1,4 @@
1
- resqpy/__init__.py,sha256=bCgJboQVKJh3Tfvdixcjr9IwEMz9vrWU8msVRPmQr6M,557
1
+ resqpy/__init__.py,sha256=Q8VnNi88WtbWxJhvhtNNgS1CS7UNFWW6Opjfub5WTXc,557
2
2
  resqpy/crs.py,sha256=R7DfcTP5xGv5pu9Y8RHA2WVM9DjBCSVMoHcz4RmQ7Yw,27646
3
3
  resqpy/derived_model/__init__.py,sha256=NFvMSOKI3cxmH7lAbddV43JjoUj-r2G7ExEfOqinD1I,1982
4
4
  resqpy/derived_model/_add_edges_per_column_property_array.py,sha256=cpW3gwp6MSYIrtvFmCjoJXcyUsgGuCDbgmwlJCJebUs,6410
@@ -69,7 +69,7 @@ resqpy/multi_processing/__init__.py,sha256=ZRudHfN9aaZjxvat7t8BZr6mwMi9baiCNjczw
69
69
  resqpy/multi_processing/_multiprocessing.py,sha256=bnCKfSC1tWwvZmZ7BZqCyje0C93m6q7HZPxNpx8xoxA,7301
70
70
  resqpy/multi_processing/wrappers/__init__.py,sha256=7vjuTWdHnp3rN9Ud8ljpDnt1NbBAyhA08lv-sQ9Kf3o,72
71
71
  resqpy/multi_processing/wrappers/blocked_well_mp.py,sha256=_2fEsSmJVQCnbQIjTHqmnNEugfhN1KvX-o4ZbvtChdI,5952
72
- resqpy/multi_processing/wrappers/grid_surface_mp.py,sha256=QvfyGYVBPf5E_nLWUoG6OHxuvTdkqTPj-_w3Or_OSuI,25270
72
+ resqpy/multi_processing/wrappers/grid_surface_mp.py,sha256=PWIJOmd9EnVfA4LlFdyO6myCZ9pMnxdpFD0nAfD5evI,25564
73
73
  resqpy/multi_processing/wrappers/mesh_mp.py,sha256=0VYoqtgBFfrlyYB6kkjbdrRQ5FKe6t5pHJO3wD9b8Fc,5793
74
74
  resqpy/olio/__init__.py,sha256=j2breqKYVufhw5k8qS2uZwB3tUKT7FhdZ23ninS75YA,84
75
75
  resqpy/olio/ab_toolbox.py,sha256=bZlAhOJVS0HvIYBW0Lg68re17N8eltoQhIUh0xuUyVc,2147
@@ -89,8 +89,8 @@ resqpy/olio/keyword_files.py,sha256=8hifLG00eUmHOylbSQNfPwPQWd05tT14bCmCRHteefc,
89
89
  resqpy/olio/load_data.py,sha256=koFJMo7kcn3wSkvUGCqhdIOb7hTADJaEYhzlu30oOwA,19204
90
90
  resqpy/olio/point_inclusion.py,sha256=yseq-iWdAypOiZg1vbsEmYhouqaYv0_P9kc_ifYHb1A,6628
91
91
  resqpy/olio/random_seed.py,sha256=ZcuaNKtUtVyp236uVQbEyFmb3122JiSsn1uiCCVfDxw,1103
92
- resqpy/olio/read_nexus_fault.py,sha256=vkMr-At7qFZGZ87gZ6QWzgpqwsDHFQf6m3rBTe-Hdrc,5441
93
- resqpy/olio/relperm.py,sha256=VSyqVz_OsjCL9tB7jBnjVdLA4F5yiKYJthIghux8_aI,17135
92
+ resqpy/olio/read_nexus_fault.py,sha256=-KpinYLLWOy6JADCzI8u-J6HJQaiOrjF_ZGLsGCgqbQ,5659
93
+ resqpy/olio/relperm.py,sha256=ONGdaYKv-yHbeXB3SSUvwwqCQO5RijhvmiOgNE_5MYo,17130
94
94
  resqpy/olio/simple_lines.py,sha256=qaR11W5UPgRmtMeFQ-pXg0jOvkJZ_XPzSUpAXqeYtlc,12189
95
95
  resqpy/olio/time.py,sha256=LtoSIf1A6wunHSpDgKsSGEr0rbcSQyy35TgJvY37PrI,760
96
96
  resqpy/olio/trademark.py,sha256=p_EWvUUnfalOA0RC94fSWMDgdGY9-FdZuGtAjg3wNcY,822
@@ -135,7 +135,7 @@ resqpy/property/_collection_support.py,sha256=77_DG-0pzhMWdG_mNDiGfihXD7Pp-CvDSG
135
135
  resqpy/property/_property.py,sha256=JcG7h6k4cJ4l3WC_VCsvoqHM3FBxrnUuxbIK2Ono1M0,24426
136
136
  resqpy/property/attribute_property_set.py,sha256=gATFe-vI00GrgaJNMHSKbM0xmlxIsO5DT1qRSU9snYI,12295
137
137
  resqpy/property/grid_property_collection.py,sha256=37dVQSBSTpX22UfBcpPvwGjd8H3O2MepKpWXYc4yJvM,66858
138
- resqpy/property/property_collection.py,sha256=rz_J3-NSyrPOKV2IzC3hqX5Io_oZf-8KLqdeQ0P9YsY,154356
138
+ resqpy/property/property_collection.py,sha256=02T7q7r82uGDk3FG1CPn7ANZZindcBc4CuSj2xCKBbA,154558
139
139
  resqpy/property/property_common.py,sha256=wf429weNtgf6J4gCNNoRwj64elQvUPI_ZWzg4qI7l6c,35993
140
140
  resqpy/property/property_kind.py,sha256=6SK0La09eisHPYOSgdx69K_Ordrq0x2tz4IAyurVyY8,5557
141
141
  resqpy/property/string_lookup.py,sha256=eH-lbLRbb8JKtO91FTtyuYseRGwPkmsghcXbKUTvVgI,7737
@@ -184,17 +184,17 @@ resqpy/weights_and_measures/__init__.py,sha256=Kp1pPZFH4rS5_PkCERZBEzGoat6n_dSS0
184
184
  resqpy/weights_and_measures/nexus_units.py,sha256=pHqcFbe-8nyqozFgN5Ce-W-UvEnXQ6yiaX3dP1ONtAQ,5434
185
185
  resqpy/weights_and_measures/weights_and_measures.py,sha256=1WnrmhtcyCgY2crClNddmfwtf33JdVZy9wNhqPQIvuc,16210
186
186
  resqpy/well/__init__.py,sha256=v5_gd7sSPRM9q2KsLiLWaw3jbnXFZkou38qeB7_HSN4,990
187
- resqpy/well/_blocked_well.py,sha256=-6_ejZxMFAGpY4cCgKyVo-K8-nVG6nDf0IQY3DlBVSg,192451
188
- resqpy/well/_deviation_survey.py,sha256=d3u31JbBqMCsaz6MUrtZium90wrC3omtm46A755fvgk,23115
187
+ resqpy/well/_blocked_well.py,sha256=xRxCPH8c7NxWO-5EErCsq3-e51H22rjgBeKnXWpw_TQ,192481
188
+ resqpy/well/_deviation_survey.py,sha256=AsjTl56v8qa2lSxKAMn4vhEadqRTzwH98PmOObCBoe0,23086
189
189
  resqpy/well/_md_datum.py,sha256=rRrDQckTJwZtIEh28dlgXj32kcBSu-ZvHFYZOiQsyqg,7154
190
- resqpy/well/_trajectory.py,sha256=GOJsxh1FGEScg4ayQHSuIj05W0S7QNUmvyz8vSaM_4I,52781
190
+ resqpy/well/_trajectory.py,sha256=lt2_MXeRWjsXTMqZZ5n4-fAT0d41RatCG9QUoYopjOQ,52752
191
191
  resqpy/well/_wellbore_frame.py,sha256=rzWsBnM-L2NbSpdk-6F5BKYeaqDWbwrIrlpkPjtt0kE,15192
192
192
  resqpy/well/_wellbore_marker.py,sha256=ZqcZC5Xmta3IJOAaZXZAWAQX9iaS312WjhnJSge8yks,8403
193
193
  resqpy/well/_wellbore_marker_frame.py,sha256=xvYH2_2Ie3a18LReFymbUrZboOx7Rhv5DODEVO4-B-k,20933
194
194
  resqpy/well/blocked_well_frame.py,sha256=Rx8jwkCjchseDZaTttPkA1-f6l7W6vRGrxWtDHlEPx8,22560
195
- resqpy/well/well_object_funcs.py,sha256=tWufc8wahihzMEO-Ou1dncIttrf4bNo1qmLgh3I2pOM,24717
195
+ resqpy/well/well_object_funcs.py,sha256=1O4EVPuTn-kN3uT_V4TbSwehnMUMY0TX36XOUgasTcc,24689
196
196
  resqpy/well/well_utils.py,sha256=zwpYjT85nXAwWBhYB1Pygu2SgouZ-44k6hEOnpoMfBI,5969
197
- resqpy-4.18.10.dist-info/LICENSE,sha256=2duHPIkKQyESMdQ4hKjL8CYEsYRHXaYxt0YQkzsUYE4,1059
198
- resqpy-4.18.10.dist-info/METADATA,sha256=jnRJbRcNGiFk8VVQANkqRuApRa4Y0EQ5I0201HlTRk8,4029
199
- resqpy-4.18.10.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
200
- resqpy-4.18.10.dist-info/RECORD,,
197
+ resqpy-4.18.11.dist-info/LICENSE,sha256=2duHPIkKQyESMdQ4hKjL8CYEsYRHXaYxt0YQkzsUYE4,1059
198
+ resqpy-4.18.11.dist-info/METADATA,sha256=a_Tji4HNp0WYpwc3l1XEunljv4Ze2UpMzTNyua1yd38,4029
199
+ resqpy-4.18.11.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
200
+ resqpy-4.18.11.dist-info/RECORD,,