resqpy 4.12.0__py3-none-any.whl → 4.12.2__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 +1 -1
- resqpy/lines/_polyline.py +13 -17
- resqpy/lines/_polyline_set.py +9 -3
- resqpy/well/_blocked_well.py +20 -3
- {resqpy-4.12.0.dist-info → resqpy-4.12.2.dist-info}/METADATA +1 -1
- {resqpy-4.12.0.dist-info → resqpy-4.12.2.dist-info}/RECORD +8 -8
- {resqpy-4.12.0.dist-info → resqpy-4.12.2.dist-info}/WHEEL +1 -1
- {resqpy-4.12.0.dist-info → resqpy-4.12.2.dist-info}/LICENSE +0 -0
resqpy/__init__.py
CHANGED
resqpy/lines/_polyline.py
CHANGED
@@ -8,15 +8,15 @@ import math as maths
|
|
8
8
|
import numpy as np
|
9
9
|
import warnings
|
10
10
|
|
11
|
-
import resqpy.
|
12
|
-
import resqpy.lines
|
11
|
+
import resqpy.crs as rqc
|
12
|
+
import resqpy.lines._common as rql_c
|
13
13
|
import resqpy.property as rqp
|
14
14
|
import resqpy.olio.point_inclusion as pip
|
15
15
|
import resqpy.olio.uuid as bu
|
16
16
|
import resqpy.olio.vector_utilities as vu
|
17
17
|
import resqpy.olio.write_hdf5 as rwh5
|
18
18
|
import resqpy.olio.xml_et as rqet
|
19
|
-
import resqpy.
|
19
|
+
import resqpy.olio.intersection as meet
|
20
20
|
from resqpy.olio.xml_namespaces import curly_namespace as ns
|
21
21
|
|
22
22
|
|
@@ -330,21 +330,17 @@ class Polyline(rql_c._BasePolyline):
|
|
330
330
|
return result
|
331
331
|
|
332
332
|
def is_clockwise(self, trust_metadata = True):
|
333
|
-
"""Returns True if
|
334
|
-
|
335
|
-
note:
|
336
|
-
this method currently assumes that the xy axes are left-handed
|
337
|
-
"""
|
333
|
+
"""Returns True if closed polyline is clockwise when viewed from above; False if anti-clockwise."""
|
338
334
|
|
335
|
+
assert self.isclosed, 'Polyline.is_clockwise() called for open polyline (only applicable to closed polylines)'
|
339
336
|
if trust_metadata and self.extra_metadata is not None and 'is_clockwise' in self.extra_metadata.keys():
|
340
337
|
return str(self.extra_metadata['is_clockwise']).lower() == 'true'
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
result =
|
347
|
-
break
|
338
|
+
centre = np.mean(self.coordinates, axis = 0)
|
339
|
+
cw = vu.clockwise(centre, self.coordinates[0], self.coordinates[1])
|
340
|
+
result = (cw > 0.0)
|
341
|
+
crs = rqc.Crs(self.model, uuid = self.crs_uuid)
|
342
|
+
if crs.is_right_handed_xy():
|
343
|
+
result = not result
|
348
344
|
if result is not None:
|
349
345
|
self.append_extra_metadata({'is_clockwise': str(result).lower()})
|
350
346
|
return result
|
@@ -716,8 +712,8 @@ class Polyline(rql_c._BasePolyline):
|
|
716
712
|
|
717
713
|
assert mode in ['square', 'perimeter', 'circle']
|
718
714
|
assert 0.0 <= norm_x <= 1.0 and 0.0 <= norm_y <= 1.0
|
719
|
-
assert self.is_convex(
|
720
|
-
|
715
|
+
assert self.is_convex(), \
|
716
|
+
'attempt to find denormalised x,y within a polyline that is not a closed convex polygon'
|
721
717
|
centre_xy = self.balanced_centre()[:2]
|
722
718
|
x, y = None, None
|
723
719
|
if mode == 'square':
|
resqpy/lines/_polyline_set.py
CHANGED
@@ -466,23 +466,29 @@ class PolylineSet(rql_c._BasePolyline):
|
|
466
466
|
closed_node = rqet.find_nested_tags(self.root, ['LinePatch', 'ClosedPolylines'])
|
467
467
|
if closed_node is not None:
|
468
468
|
closed_array[:] = self.get_bool_array(closed_node)
|
469
|
+
else:
|
470
|
+
closed_array = None
|
469
471
|
if coordinates is None:
|
470
472
|
coordinates = self.coordinates
|
471
473
|
if crs_uuid is None:
|
472
474
|
crs_uuid = self.crs_uuid
|
473
475
|
if rep_int_root is None:
|
474
476
|
rep_int_root = self.rep_int_root
|
477
|
+
|
475
478
|
polys = []
|
476
479
|
count = 0
|
477
480
|
for i in range(len(count_perpol)):
|
478
481
|
if i != len(count_perpol) - 1:
|
479
482
|
subset = coordinates[count:int(count_perpol[i]) + count].copy()
|
480
483
|
else:
|
481
|
-
subset = coordinates[count:int(count_perpol[i]) + count + 1].copy()
|
482
|
-
|
483
|
-
|
484
|
+
subset = coordinates[count:int(count_perpol[i]) + count + 1].copy() # is this correct?
|
485
|
+
duplicated_end_points = np.all(np.isclose(subset[0], subset[-1])) and len(subset) > 2
|
486
|
+
if closed_array is None:
|
487
|
+
isclosed = duplicated_end_points
|
484
488
|
else:
|
485
489
|
isclosed = closed_array[i]
|
490
|
+
if isclosed and duplicated_end_points:
|
491
|
+
subset = subset[:-1]
|
486
492
|
count += int(count_perpol[i])
|
487
493
|
subtitle = f"{self.title} {i+1}"
|
488
494
|
polys.append(
|
resqpy/well/_blocked_well.py
CHANGED
@@ -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
|
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()
|
@@ -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 (
|
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:
|
@@ -1,4 +1,4 @@
|
|
1
|
-
resqpy/__init__.py,sha256=
|
1
|
+
resqpy/__init__.py,sha256=Xqeo9oQvKlNFxrm0jMMGSId0y_cuNRneZohRcEQBgpM,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
|
@@ -55,8 +55,8 @@ resqpy/grid_surface/_trajectory_intersects.py,sha256=Och9cZYU9Y7ofovhPzsLyIblRUl
|
|
55
55
|
resqpy/grid_surface/grid_surface_cuda.py,sha256=rsTBYfB3YQefDWikTf8nwOwpGF4L4pAMPpma99P5nOk,39760
|
56
56
|
resqpy/lines/__init__.py,sha256=zE7j-BeqkOowj_tsZWd2X_fT-RpbuIh17zfEyj2N0oY,539
|
57
57
|
resqpy/lines/_common.py,sha256=nlgVgZ8utHXuHDyzuP0IpkUJViDNmmy7EBqwLzxSI2M,11960
|
58
|
-
resqpy/lines/_polyline.py,sha256=
|
59
|
-
resqpy/lines/_polyline_set.py,sha256=
|
58
|
+
resqpy/lines/_polyline.py,sha256=OjxSKi9vPqFI4GjVkkA9ZDYewu-gu59bF4NNqJ0hUVo,42454
|
59
|
+
resqpy/lines/_polyline_set.py,sha256=3K3z_G9l_3mfjLdCL-YVscyj1FA6DHh1uj9rXPtWFOY,27986
|
60
60
|
resqpy/model/__init__.py,sha256=hbxO-IpCOH_82TZqj6e1FjrWxO0tZu2gj2HCN9x-Svw,378
|
61
61
|
resqpy/model/_catalogue.py,sha256=ZSzLaZWBLgrna6DPPfEQK72hmuRieLrWr5jhj51YIsI,30205
|
62
62
|
resqpy/model/_context.py,sha256=0tLBVMcuuIj3i87Ig8lhFMLHE5GHgEA2PEl1NjKaohc,2840
|
@@ -182,7 +182,7 @@ resqpy/weights_and_measures/__init__.py,sha256=Kp1pPZFH4rS5_PkCERZBEzGoat6n_dSS0
|
|
182
182
|
resqpy/weights_and_measures/nexus_units.py,sha256=y78sk6zb43LnwzGWQFV3g_Bwg5seUbgE1YROSOgu6UU,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=
|
185
|
+
resqpy/well/_blocked_well.py,sha256=VKhgGNN-70CjgFUxa0FX5TyiIbBx0D57K3qqvasfyFU,190811
|
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.
|
196
|
-
resqpy-4.12.
|
197
|
-
resqpy-4.12.
|
198
|
-
resqpy-4.12.
|
195
|
+
resqpy-4.12.2.dist-info/LICENSE,sha256=2duHPIkKQyESMdQ4hKjL8CYEsYRHXaYxt0YQkzsUYE4,1059
|
196
|
+
resqpy-4.12.2.dist-info/METADATA,sha256=eHS5J4k7O7PR2HPIddfVXs1Gn_Jlg0jFo8AEz5iWgWM,4028
|
197
|
+
resqpy-4.12.2.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
198
|
+
resqpy-4.12.2.dist-info/RECORD,,
|
File without changes
|