resqpy 4.12.1__py3-none-any.whl → 4.12.3__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
resqpy/__init__.py CHANGED
@@ -28,6 +28,6 @@
28
28
 
29
29
  import logging
30
30
 
31
- __version__ = "4.12.1" # Set at build time
31
+ __version__ = "4.12.3" # Set at build time
32
32
  log = logging.getLogger(__name__)
33
33
  log.info(f"Imported resqpy version {__version__}")
@@ -348,6 +348,7 @@ def set_geometry_is_defined(grid,
348
348
 
349
349
  if complete_all:
350
350
  cells_update_needed = __complete_all_pillars(cells_update_needed, grid, points, surround_z)
351
+ cells_update_needed = True
351
352
 
352
353
  if cells_update_needed:
353
354
  # note: each pillar is either fully defined or fully undefined at this point
@@ -387,7 +388,10 @@ def __complete_all_pillars(cells_update_needed, grid, points, surround_z):
387
388
  if hasattr(grid, 'array_pillar_geometry_is_defined'):
388
389
  del grid.array_pillar_geometry_is_defined
389
390
  cells_update_needed = False
390
- assert not np.any(np.isnan(points))
391
+ nan_mask = np.isnan(points)
392
+ if np.any(nan_mask):
393
+ log.warning('remaining NaNs after filling missing pillar geometry will be set to zero (dangerous)')
394
+ points[nan_mask] = 0.0
391
395
  grid.geometry_defined_for_all_cells_cached = True
392
396
  if hasattr(grid, 'array_cell_geometry_is_defined'):
393
397
  del grid.array_cell_geometry_is_defined
@@ -585,7 +589,7 @@ def __fill_holes(grid, holes_mask):
585
589
  def __fill_surround(grid, surround_mask):
586
590
  # note: only fills x,y; based on bottom layer of points; assumes surround mask is a regularly shaped frame of columns
587
591
  log.debug(f'filling {np.count_nonzero(surround_mask)} pillars for surround')
588
- points = grid.points_ref(masked = False)
592
+ points = grid.points_ref(masked = False).reshape((grid.nk_plus_k_gaps + 1, -1, 3))
589
593
  points_view = points[-1, :, :2].reshape((-1, 2))[:(grid.nj + 1) * (grid.ni + 1), :].reshape(
590
594
  (grid.nj + 1, grid.ni + 1, 2))
591
595
  modified = False
@@ -60,7 +60,10 @@ def populate_blocked_well_from_trajectory(blocked_well,
60
60
  assert isinstance(blocked_well.trajectory, rqw.Trajectory)
61
61
  assert grid is not None
62
62
 
63
- flavour = grr.grid_flavour(grid.root)
63
+ flavour = grid.grid_representation
64
+ if flavour is None:
65
+ assert grid.root is not None
66
+ flavour = grr.grid_flavour(grid.root)
64
67
  if not flavour.startswith('Ijk'):
65
68
  raise NotImplementedError('well blocking only implemented for IjkGridRepresentation')
66
69
  is_regular = (flavour == 'IjkBlockGrid') and hasattr(grid, 'is_aligned') and grid.is_aligned
@@ -222,7 +222,7 @@ def _get_perm_k_part(collection, perms, perm_k_mode, share_perm_parts, perm_i_pa
222
222
  uom = 'mD',
223
223
  time_index = None,
224
224
  null_value = None,
225
- property_kind = 'permeability rock',
225
+ property_kind = 'rock permeability',
226
226
  facet_type = 'direction',
227
227
  facet = 'K',
228
228
  realization = perms.realization_for_part(perm_i_part),
@@ -941,7 +941,7 @@ def _extend_imported_get_fine_collections(other, realization):
941
941
  source_sat = rqp_c.selective_version_of_collection(other, realization = realization, property_kind = 'saturation')
942
942
  source_perm = rqp_c.selective_version_of_collection(other,
943
943
  realization = realization,
944
- property_kind = 'permeability rock')
944
+ property_kind = 'rock permeability')
945
945
  # todo: add kh and some other property kinds
946
946
 
947
947
  return source_rv, source_ntg, source_poro, source_sat, source_perm
@@ -2796,7 +2796,7 @@ class PropertyCollection():
2796
2796
  share_perm_parts = False,
2797
2797
  perm_k_mode = None,
2798
2798
  perm_k_ratio = 1.0):
2799
- """Returns five parts: net to gross ratio, porosity, permeability rock I, J & K; each returned part may be None.
2799
+ """Returns five parts: net to gross ratio, porosity, rock permeability I, J & K; each returned part may be None.
2800
2800
 
2801
2801
  arguments:
2802
2802
  realization: (int, optional): if present, only properties with the given realization are considered; if None,
@@ -2832,7 +2832,7 @@ class PropertyCollection():
2832
2832
 
2833
2833
  perms = rqp_c.selective_version_of_collection(self,
2834
2834
  realization = realization,
2835
- property_kind = 'permeability rock')
2835
+ property_kind = 'rock permeability')
2836
2836
  if perms is None or perms.number_of_parts() == 0:
2837
2837
  log.error('no rock permeabilities present')
2838
2838
  else:
@@ -2869,7 +2869,7 @@ class PropertyCollection():
2869
2869
  share_perm_parts = False,
2870
2870
  perm_k_mode = None,
2871
2871
  perm_k_ratio = 1.0):
2872
- """Returns five uuids: net to gross ratio, porosity, permeability rock I, J & K; each returned uuid may be None.
2872
+ """Returns five uuids: net to gross ratio, porosity, rock permeability I, J & K; each returned uuid may be None.
2873
2873
 
2874
2874
  note:
2875
2875
  see basic_static_property_parts() method for argument documentation
@@ -78,7 +78,7 @@ expected_facet_type_dict = {
78
78
  'property multiplier': (
79
79
  'what',
80
80
  [
81
- 'rock volume', # made up; todo: add rock permeability?
81
+ 'rock volume', # made up; todo: add rock permeability? (would need multiple facets)
82
82
  'pore volume',
83
83
  'transmissibility'
84
84
  ]),
@@ -159,7 +159,7 @@ def property_kind_and_facet_from_keyword(keyword):
159
159
  elif len(lk) >= 2 and lk[0] == 'd' and lk[1] in 'xyz':
160
160
  property_kind, facet_type, facet = _pkf_from_keyword_length(lk)
161
161
  elif lk[:4] == 'perm' or (len(lk) == 2 and lk[0] == 'k'): # permeability
162
- property_kind = 'permeability rock'
162
+ property_kind = 'rock permeability'
163
163
  (facet_type, facet) = _facet_info_for_dir_ch(lk[-1])
164
164
  elif lk[:5] == 'trans' or (len(lk) == 2 and lk[0] == 't'): # transmissibility (for unit viscosity)
165
165
  if 'mult' in lk:
@@ -624,7 +624,7 @@ class VerticalPrismGrid(PrismGrid):
624
624
  ppc = rqp.selective_version_of_collection(pc,
625
625
  continuous = True,
626
626
  realization = realization,
627
- property_kind = 'permeability rock')
627
+ property_kind = 'rock permeability')
628
628
  assert ppc.number_of_parts() > 0, 'no permeability properties available for vertical prism grid'
629
629
 
630
630
  # look for a triple permeability; if present, assume to be per face horizontal permeabilities
@@ -40,8 +40,8 @@ def nexus_uom_for_quantity(nexus_unit_system, quantity, english_volume_flavour =
40
40
  'length', 'area', 'volume', 'volume per volume', 'permeability rock', 'rock permeability', 'time',
41
41
  'thermodynamic temperature', 'mass per volume', 'pressure', 'volume per time'
42
42
  ]
43
- if quantity == 'rock permeability':
44
- quantity = 'permeability rock'
43
+ if quantity == 'permeability rock':
44
+ quantity = 'rock permeability'
45
45
 
46
46
  if (nexus_unit_system == 'ENGLISH' and english_volume_flavour is not None):
47
47
  english_volume_flavour = english_volume_flavour.lower()
@@ -68,7 +68,7 @@ def nexus_uom_for_quantity(nexus_unit_system, quantity, english_volume_flavour =
68
68
  'area': 'm2',
69
69
  'volume': 'm3',
70
70
  'volume per volume': 'm3/m3',
71
- 'permeability rock': 'mD',
71
+ 'rock permeability': 'mD',
72
72
  'time': 'd',
73
73
  'thermodynamic temperature': 'degC',
74
74
  'mass per volume': 'kg/m3',
@@ -80,7 +80,7 @@ def nexus_uom_for_quantity(nexus_unit_system, quantity, english_volume_flavour =
80
80
  'area': 'm2',
81
81
  'volume': 'm3',
82
82
  'volume per volume': 'm3/m3',
83
- 'permeability rock': 'mD',
83
+ 'rock permeability': 'mD',
84
84
  'time': 'd',
85
85
  'thermodynamic temperature': 'degC',
86
86
  'mass per volume': 'kg/m3',
@@ -92,7 +92,7 @@ def nexus_uom_for_quantity(nexus_unit_system, quantity, english_volume_flavour =
92
92
  'area': 'm2',
93
93
  'volume': 'm3',
94
94
  'volume per volume': 'm3/m3',
95
- 'permeability rock': 'mD',
95
+ 'rock permeability': 'mD',
96
96
  'time': 'd',
97
97
  'thermodynamic temperature': 'degC',
98
98
  'mass per volume': 'kg/m3',
@@ -104,7 +104,7 @@ def nexus_uom_for_quantity(nexus_unit_system, quantity, english_volume_flavour =
104
104
  'area': 'cm2',
105
105
  'volume': 'cm3',
106
106
  'volume per volume': 'cm3/cm3',
107
- 'permeability rock': 'mD',
107
+ 'rock permeability': 'mD',
108
108
  'time': 'h',
109
109
  'thermodynamic temperature': 'degC',
110
110
  'mass per volume': 'g/cm3',
@@ -116,7 +116,7 @@ def nexus_uom_for_quantity(nexus_unit_system, quantity, english_volume_flavour =
116
116
  'area': 'ft2',
117
117
  'volume': 'ft3', # NB. Nexus expects bbl in some situations!
118
118
  'volume per volume': 'ft3/ft3', # note: some special cases dealt with above
119
- 'permeability rock': 'mD',
119
+ 'rock permeability': 'mD',
120
120
  'time': 'd',
121
121
  'thermodynamic temperature': 'degF',
122
122
  'mass per volume': 'lbm/ft3',
@@ -1,7 +1,7 @@
1
1
  """BlockedWell class."""
2
2
 
3
3
  # Nexus is a registered trademark of the Halliburton Company
4
- # RMS and ROXAR are registered trademarks of Roxar Software Solutions AS, an Emerson company
4
+ # RMS and ROXAR are registered trademarks of Roxar Software Solutions AS, an AspenTech company
5
5
 
6
6
  import logging
7
7
 
@@ -301,7 +301,20 @@ class BlockedWell(BaseResqpy):
301
301
  gi_node = rqet.find_tag(node, 'GridIndices')
302
302
  assert gi_node is not None, 'blocked well grid indices hdf5 reference not found in xml'
303
303
  rqwu.load_hdf5_array(self, gi_node, 'grid_indices', dtype = 'int')
304
- assert self.grid_indices is not None and self.grid_indices.ndim == 1 and self.grid_indices.size == self.node_count - 1
304
+ # assert self.grid_indices is not None and self.grid_indices.ndim == 1 and self.grid_indices.size == self.node_count - 1
305
+ # temporary code to handle blocked wells with incorrectly shaped grid indices wrt. nodes
306
+ assert self.grid_indices is not None and self.grid_indices.ndim == 1
307
+ if self.grid_indices.size != self.node_count - 1:
308
+ if self.grid_indices.size == self.cell_count and self.node_count == 2 * self.cell_count:
309
+ log.warning(f'handling node duplication or missing unblocked intervals in blocked well: {self.title}')
310
+
311
+ expanded_grid_indices = np.full(self.node_count - 1, -1, dtype = int)
312
+ expanded_grid_indices[::2] = self.grid_indices
313
+ self.grid_indices = expanded_grid_indices
314
+ else:
315
+ raise ValueError(
316
+ f'incorrect grid indices size with respect to node count in blocked well: {self.title}')
317
+ # end of temporary code
305
318
  unique_grid_indices = np.unique(self.grid_indices) # sorted list of unique values
306
319
  self.gridind_null = rqet.find_tag_int(gi_node, 'NullValue')
307
320
  if self.gridind_null is None:
@@ -1477,6 +1490,10 @@ class BlockedWell(BaseResqpy):
1477
1490
 
1478
1491
  grid_crs_list = self.__verify_number_of_grids_and_crs_units(column_list = column_list)
1479
1492
 
1493
+ if doing_kh or doing_xyz or doing_angles or doing_entry_exit:
1494
+ for grid in self.grid_list:
1495
+ grid.cache_all_geometry_arrays()
1496
+
1480
1497
  k_face_check = np.zeros((2, 2), dtype = int)
1481
1498
  k_face_check[1, 1] = 1 # now represents entry, exit of K-, K+
1482
1499
  k_face_check_end = k_face_check.copy()
@@ -2737,7 +2754,7 @@ class BlockedWell(BaseResqpy):
2737
2754
  'ANGLE': ('dega', 'plane angle', False),
2738
2755
  'TEMP': (temperature_uom, 'thermodynamic temperature', False),
2739
2756
  'MDCON': length_uom_pk_discrete,
2740
- 'K': ('mD', 'permeability rock', False),
2757
+ 'K': ('mD', 'rock permeability', False),
2741
2758
  'DZ': (length_uom, 'cell length', False), # TODO: add direction facet
2742
2759
  'DTOP': (length_uom, 'depth', False),
2743
2760
  'DBOT': (length_uom, 'depth', False),
@@ -3057,7 +3074,7 @@ class BlockedWell(BaseResqpy):
3057
3074
  if BlockedWell.__is_float_column(col_name):
3058
3075
  form = '{0:>' + str(width) + '.3f}'
3059
3076
  value = row[col_name]
3060
- if col_name == 'ANGLA' and (np.isnan(value) or value is None):
3077
+ if col_name == 'ANGLA' and (pd.isna(row[col_name]) or value is None or np.isnan(value)):
3061
3078
  value = 0.0
3062
3079
  fp.write(sep + form.format(float(value)))
3063
3080
  else:
@@ -3349,18 +3366,21 @@ class BlockedWell(BaseResqpy):
3349
3366
  root = bw_node)
3350
3367
  for grid in self.grid_list:
3351
3368
  grid_root = grid.root
3369
+ ref_uuid = grid.uuid if grid_root is None else bu.uuid_from_string(grid_root.attrib['uuid'])
3352
3370
  self.model.create_ref_node('Grid',
3353
3371
  rqet.find_nested_tags_text(grid_root, ['Citation', 'Title']),
3354
- bu.uuid_from_string(grid_root.attrib['uuid']),
3372
+ ref_uuid,
3355
3373
  content_type = 'obj_IjkGridRepresentation',
3356
3374
  root = bw_node)
3357
3375
 
3358
3376
  interp_root = None
3359
3377
  if self.wellbore_interpretation is not None:
3360
3378
  interp_root = self.wellbore_interpretation.root
3379
+ ref_uuid = self.wellbore_interpretation.uuid if interp_root is None else bu.uuid_from_string(
3380
+ interp_root.attrib['uuid'])
3361
3381
  self.model.create_ref_node('RepresentedInterpretation',
3362
3382
  rqet.find_nested_tags_text(interp_root, ['Citation', 'Title']),
3363
- bu.uuid_from_string(interp_root.attrib['uuid']),
3383
+ ref_uuid,
3364
3384
  content_type = 'obj_WellboreInterpretation',
3365
3385
  root = bw_node)
3366
3386
  return traj_root, grid_root, interp_root
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: resqpy
3
- Version: 4.12.1
3
+ Version: 4.12.3
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=oXHcLatzsUBwZ9LidydxI5skbSYPHyDbDbqjp0RO0FE,556
1
+ resqpy/__init__.py,sha256=nGog1AgOjRmPGcYnc7WedpknkBZCKPZ7rIg2eEW5hoQ,556
2
2
  resqpy/crs.py,sha256=iq0lO3aXzttmJBfuhUjS9IHlv8OV1wuByhFk0b4fvmI,24782
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
@@ -30,7 +30,7 @@ resqpy/grid/__init__.py,sha256=WsfOnR5lHcnpJEx8ZZ3lhd4dImEiieJLM7eFPxMi3u8,692
30
30
  resqpy/grid/_cell_properties.py,sha256=pbyAK2eV9n4teOxm2q5hyBinohEbevFPrCfMcpGiqUU,20689
31
31
  resqpy/grid/_connection_sets.py,sha256=-277bh9pMoeESSzy9oZehL-vc82aMGZuSLQs2KJ4Wfg,10120
32
32
  resqpy/grid/_create_grid_xml.py,sha256=p-jKo1BZ-DlhEYixVzadtY-QsqA8ygcXvMYS_TvQCjg,22837
33
- resqpy/grid/_defined_geometry.py,sha256=0oYZ4Uf2U0GGneSr_4q-FuoyZeb9Af5TsRf79v3sIBQ,32064
33
+ resqpy/grid/_defined_geometry.py,sha256=qkkfiSh8hzhTaW3vEot77mFWgApZl92Cb552b-xyjpQ,32297
34
34
  resqpy/grid/_extract_functions.py,sha256=n_SmfkvEssX09SrlvUMe7y-4eOuVckhL_M6tFTg1bRg,28203
35
35
  resqpy/grid/_face_functions.py,sha256=0I7O6DDz7nJWczi_G2bE3L2XUr4acxREwKygXWEp6F4,16516
36
36
  resqpy/grid/_faults.py,sha256=OmukVoLpdrndqDxwE6Rj7Ul5tj3FUQVPhE0raH2FHpg,12236
@@ -47,7 +47,7 @@ resqpy/grid/_write_hdf5_from_caches.py,sha256=s3gcoilsFCCSw_wjnTjWe1xMHEWr_cesso
47
47
  resqpy/grid/_write_nexus_corp.py,sha256=yEVfiObsedEAXX6UG6ZTf56kZnQVkd3lLqE2NpL-KBM,6147
48
48
  resqpy/grid/_xyz.py,sha256=RLQWOdM_DRoCj4JypwB5gUJ78HTdk5JnZHSeAzuU634,13087
49
49
  resqpy/grid_surface/__init__.py,sha256=iyK3_Vlg9mXffc_1gjvRdKwQE0zicbNXya0tryHkr04,2593
50
- resqpy/grid_surface/_blocked_well_populate.py,sha256=oP1TW5hf1no6WYMZrCgJFV2tJCXHAvap3if3WHMULac,35739
50
+ resqpy/grid_surface/_blocked_well_populate.py,sha256=MQIHf7Sh_XR3cUCfGhvlu4Xl498DtIKH2ffo4iud93w,35843
51
51
  resqpy/grid_surface/_find_faces.py,sha256=WRoc5g-kLtR0JkuT0nueVF8ZgG09YfR3K_aRp2Rc2K8,64645
52
52
  resqpy/grid_surface/_grid_skin.py,sha256=D0cjHkcuT5KCKb-8EZfXgh0GgJj3kzOBS2wVNXg4bfY,26056
53
53
  resqpy/grid_surface/_grid_surface.py,sha256=l2NJo7Kiucolbb_TlLPC7NGdksg_JahkihfsrJVq99w,14379
@@ -130,12 +130,12 @@ resqpy/organize/wellbore_interpretation.py,sha256=jRAHq90tR2dCQSXsZicujXhSVHOEPo
130
130
  resqpy/property/__init__.py,sha256=3dNW6fYT8nrNFA3Ja7Tz5AsoT-SX6VPnXYhnkHKl-VQ,2155
131
131
  resqpy/property/_collection_add_part.py,sha256=s0xXU5aLRqvZoHxbRUNY-ItiNPqmUoEMcnWqQh011jk,17076
132
132
  resqpy/property/_collection_create_xml.py,sha256=x6F7cjdC2y3JmPHi88hkpy3nf1wnWGwEexTj_Dmsf6E,12923
133
- resqpy/property/_collection_get_attributes.py,sha256=H7ftSwkFtOU5gTQffI8ZtMrYsoa99VZ_vPy-Xnh8dek,32441
133
+ resqpy/property/_collection_get_attributes.py,sha256=MlontPfGo00lxt0SpB49YG9PRsi5oXPqduDgCSOSmzs,32441
134
134
  resqpy/property/_collection_support.py,sha256=77_DG-0pzhMWdG_mNDiGfihXD7Pp-CvDSGCV8ZlDjj4,5889
135
135
  resqpy/property/_property.py,sha256=JcG7h6k4cJ4l3WC_VCsvoqHM3FBxrnUuxbIK2Ono1M0,24426
136
- resqpy/property/grid_property_collection.py,sha256=gmRlalqukdVT5PomgLOoPf42z__zqEgNqwx_31aLqow,66946
137
- resqpy/property/property_collection.py,sha256=s9rUiiumxVhL41mKZmo5ZPKBI5gZNUY0avadG3dnWPc,151987
138
- resqpy/property/property_common.py,sha256=RQbQ29OnDlsikW9rN60K7xdsl6qSHUQXU9tGH6GBB0Y,36393
136
+ resqpy/property/grid_property_collection.py,sha256=bLWCTfhmpDsagBaXXb8XXHL46Cy78HL_NGWpPFZAgdw,66946
137
+ resqpy/property/property_collection.py,sha256=8uKEqIzmKlxAQRDrJozaWNzEw8um-HYA1qHvVKIDcE4,151987
138
+ resqpy/property/property_common.py,sha256=pItepusFU94YTNlWJyMj7LRMyRQviBQa0y7ouEs6AHo,36422
139
139
  resqpy/property/property_kind.py,sha256=6SK0La09eisHPYOSgdx69K_Ordrq0x2tz4IAyurVyY8,5557
140
140
  resqpy/property/string_lookup.py,sha256=eH-lbLRbb8JKtO91FTtyuYseRGwPkmsghcXbKUTvVgI,7737
141
141
  resqpy/property/well_interval_property.py,sha256=_6k0NBX2rd2uGjkur37qCslF9Mow14d8LxPGqqp00gg,1077
@@ -174,15 +174,15 @@ resqpy/time_series/_time_duration.py,sha256=bzRf0fynlB68KUYKa0Ih7qwd4ZJnRjl_Y6Ax
174
174
  resqpy/time_series/_time_series.py,sha256=ceCuFbmYmppx0jBitdyjtSKkcLxjZ-qyhFN_HQX-3CQ,10818
175
175
  resqpy/unstructured/__init__.py,sha256=8te-ghWhkDGe0QaLDClvVEkSMtnDtX46K1QODmJU8Xw,603
176
176
  resqpy/unstructured/_hexa_grid.py,sha256=bRzx0PHUtOziEeVk7nZv5aQlogYnqvtbrVMTXsSVcQU,15328
177
- resqpy/unstructured/_prism_grid.py,sha256=9Qy8O5lHpRoKZE7dLn2i6Z03eMaqQ7HlpNWiDCVaGPQ,35856
177
+ resqpy/unstructured/_prism_grid.py,sha256=qXurRLWNIvuqr4-ZpmjMg6uqmtClKrtCNB6e0PDVi4M,35856
178
178
  resqpy/unstructured/_pyramid_grid.py,sha256=qDn7FlhLfDuqJYS88tomwuv5CH7RJd7avl-qK7CUy_4,7862
179
179
  resqpy/unstructured/_tetra_grid.py,sha256=IkRRaxulhH42fE2EysLI9gfUf19YoO3nFA_Uq6CrxmI,12453
180
180
  resqpy/unstructured/_unstructured_grid.py,sha256=OTYOSGrKoE51KpRhn4818tdvmZ-q9nmahk_7wC56mvc,51550
181
181
  resqpy/weights_and_measures/__init__.py,sha256=Kp1pPZFH4rS5_PkCERZBEzGoat6n_dSS0y_KLhuIVBM,1135
182
- resqpy/weights_and_measures/nexus_units.py,sha256=y78sk6zb43LnwzGWQFV3g_Bwg5seUbgE1YROSOgu6UU,5434
182
+ resqpy/weights_and_measures/nexus_units.py,sha256=pHqcFbe-8nyqozFgN5Ce-W-UvEnXQ6yiaX3dP1ONtAQ,5434
183
183
  resqpy/weights_and_measures/weights_and_measures.py,sha256=i3Fv7hZczQmvTtPwzWvQb-XAxCG6Uta_vd4DV7XDwOU,16186
184
184
  resqpy/well/__init__.py,sha256=v5_gd7sSPRM9q2KsLiLWaw3jbnXFZkou38qeB7_HSN4,990
185
- resqpy/well/_blocked_well.py,sha256=8tMhqN53VSoLnf3J7-Xc_wa61yD6tFgvlluW1nWsaPU,189767
185
+ resqpy/well/_blocked_well.py,sha256=BXvg-2vBU1NnNxBp1u_sD_GqV9LJQ6XOkULBSubHrIo,190990
186
186
  resqpy/well/_deviation_survey.py,sha256=d3u31JbBqMCsaz6MUrtZium90wrC3omtm46A755fvgk,23115
187
187
  resqpy/well/_md_datum.py,sha256=rRrDQckTJwZtIEh28dlgXj32kcBSu-ZvHFYZOiQsyqg,7154
188
188
  resqpy/well/_trajectory.py,sha256=9sCGXZedICZK_O7qL-BTxUWGRClIVSRBRvP9RFNYk9g,50005
@@ -192,7 +192,7 @@ resqpy/well/_wellbore_marker_frame.py,sha256=xvYH2_2Ie3a18LReFymbUrZboOx7Rhv5DOD
192
192
  resqpy/well/blocked_well_frame.py,sha256=Lg7TgynfPv9WkklXTLt9VN6uBXWUqX1LI-Xmv_FBqYk,22555
193
193
  resqpy/well/well_object_funcs.py,sha256=LYTcC07ezlBxClfrug_B4iXXZUkXDPgsVufNzp361Wo,24703
194
194
  resqpy/well/well_utils.py,sha256=zwpYjT85nXAwWBhYB1Pygu2SgouZ-44k6hEOnpoMfBI,5969
195
- resqpy-4.12.1.dist-info/LICENSE,sha256=2duHPIkKQyESMdQ4hKjL8CYEsYRHXaYxt0YQkzsUYE4,1059
196
- resqpy-4.12.1.dist-info/METADATA,sha256=hwxHELzI3WNfCutF779UHD1IQHbjXbs8pTUpxHiPDPI,4028
197
- resqpy-4.12.1.dist-info/WHEEL,sha256=d2fvjOD7sXsVzChCqf0Ty0JbHKBaLYwDbGQDwQTnJ50,88
198
- resqpy-4.12.1.dist-info/RECORD,,
195
+ resqpy-4.12.3.dist-info/LICENSE,sha256=2duHPIkKQyESMdQ4hKjL8CYEsYRHXaYxt0YQkzsUYE4,1059
196
+ resqpy-4.12.3.dist-info/METADATA,sha256=Bbw0kBMNEOSJTceHXdEDLpq_qg65BpRq7eRGrffqjHA,4028
197
+ resqpy-4.12.3.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
198
+ resqpy-4.12.3.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 1.7.0
2
+ Generator: poetry-core 1.8.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any