LoopStructural 1.6.9__py3-none-any.whl → 1.6.10__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.
Potentially problematic release.
This version of LoopStructural might be problematic. Click here for more details.
- LoopStructural/datatypes/_bounding_box.py +4 -1
- LoopStructural/datatypes/_surface.py +3 -1
- LoopStructural/interpolators/_finite_difference_interpolator.py +3 -18
- LoopStructural/interpolators/supports/_3d_base_structured.py +3 -3
- LoopStructural/interpolators/supports/_3d_structured_tetra.py +3 -3
- LoopStructural/interpolators/supports/_3d_unstructured_tetra.py +3 -3
- LoopStructural/interpolators/supports/_face_table.py +3 -3
- LoopStructural/modelling/core/geological_model.py +13 -5
- LoopStructural/modelling/features/_base_geological_feature.py +3 -4
- LoopStructural/modelling/features/builders/_fault_builder.py +7 -0
- LoopStructural/modelling/input/process_data.py +6 -6
- LoopStructural/utils/_surface.py +5 -1
- LoopStructural/version.py +1 -1
- {loopstructural-1.6.9.dist-info → loopstructural-1.6.10.dist-info}/METADATA +1 -1
- {loopstructural-1.6.9.dist-info → loopstructural-1.6.10.dist-info}/RECORD +18 -18
- {loopstructural-1.6.9.dist-info → loopstructural-1.6.10.dist-info}/WHEEL +0 -0
- {loopstructural-1.6.9.dist-info → loopstructural-1.6.10.dist-info}/licenses/LICENSE +0 -0
- {loopstructural-1.6.9.dist-info → loopstructural-1.6.10.dist-info}/top_level.txt +0 -0
|
@@ -326,7 +326,9 @@ class BoundingBox:
|
|
|
326
326
|
if iy == -1:
|
|
327
327
|
return self.origin[ix]
|
|
328
328
|
|
|
329
|
-
return self.bb[
|
|
329
|
+
return self.bb[
|
|
330
|
+
ix,
|
|
331
|
+
]
|
|
330
332
|
|
|
331
333
|
def __getitem__(self, name):
|
|
332
334
|
if isinstance(name, str):
|
|
@@ -429,6 +431,7 @@ class BoundingBox:
|
|
|
429
431
|
"maximum": self.maximum.tolist(),
|
|
430
432
|
"nsteps": self.nsteps.tolist(),
|
|
431
433
|
}
|
|
434
|
+
|
|
432
435
|
@classmethod
|
|
433
436
|
def from_dict(cls, data: dict) -> 'BoundingBox':
|
|
434
437
|
"""Create a bounding box from a dictionary
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from dataclasses import dataclass, field
|
|
2
|
-
from typing import Optional
|
|
2
|
+
from typing import Optional, Union
|
|
3
3
|
import numpy as np
|
|
4
4
|
import io
|
|
5
5
|
from LoopStructural.utils import getLogger
|
|
@@ -11,6 +11,8 @@ logger = getLogger(__name__)
|
|
|
11
11
|
class Surface:
|
|
12
12
|
vertices: np.ndarray = field(default_factory=lambda: np.array([[0, 0, 0]]))
|
|
13
13
|
triangles: np.ndarray = field(default_factory=lambda: np.array([[0, 0, 0]]))
|
|
14
|
+
colour: Optional[Union[str, np.ndarray]] = field(default_factory=lambda: None)
|
|
15
|
+
|
|
14
16
|
normals: Optional[np.ndarray] = None
|
|
15
17
|
name: str = 'surface'
|
|
16
18
|
values: Optional[np.ndarray] = None
|
|
@@ -272,12 +272,7 @@ class FiniteDifferenceInterpolator(DiscreteInterpolator):
|
|
|
272
272
|
idc[inside, :] = gi[node_idx[inside, :]]
|
|
273
273
|
inside = np.logical_and(~np.any(idc == -1, axis=1), inside)
|
|
274
274
|
|
|
275
|
-
(
|
|
276
|
-
vertices,
|
|
277
|
-
T,
|
|
278
|
-
elements,
|
|
279
|
-
inside_,
|
|
280
|
-
) = self.support.get_element_gradient_for_location(
|
|
275
|
+
(vertices, T, elements, inside_,) = self.support.get_element_gradient_for_location(
|
|
281
276
|
points[inside, : self.support.dimension]
|
|
282
277
|
)
|
|
283
278
|
# normalise constraint vector and scale element matrix by this
|
|
@@ -340,12 +335,7 @@ class FiniteDifferenceInterpolator(DiscreteInterpolator):
|
|
|
340
335
|
# calculate unit vector for node gradients
|
|
341
336
|
# this means we are only constraining direction of grad not the
|
|
342
337
|
# magnitude
|
|
343
|
-
(
|
|
344
|
-
vertices,
|
|
345
|
-
T,
|
|
346
|
-
elements,
|
|
347
|
-
inside_,
|
|
348
|
-
) = self.support.get_element_gradient_for_location(
|
|
338
|
+
(vertices, T, elements, inside_,) = self.support.get_element_gradient_for_location(
|
|
349
339
|
points[inside, : self.support.dimension]
|
|
350
340
|
)
|
|
351
341
|
# T*=np.product(self.support.step_vector)
|
|
@@ -432,12 +422,7 @@ class FiniteDifferenceInterpolator(DiscreteInterpolator):
|
|
|
432
422
|
vectors[norm > 0, :] /= norm[norm > 0, None]
|
|
433
423
|
|
|
434
424
|
# normalise element vector to unit vector for dot product
|
|
435
|
-
(
|
|
436
|
-
vertices,
|
|
437
|
-
T,
|
|
438
|
-
elements,
|
|
439
|
-
inside_,
|
|
440
|
-
) = self.support.get_element_gradient_for_location(
|
|
425
|
+
(vertices, T, elements, inside_,) = self.support.get_element_gradient_for_location(
|
|
441
426
|
points[inside, : self.support.dimension]
|
|
442
427
|
)
|
|
443
428
|
T[norm > 0, :, :] /= norm[norm > 0, None, None]
|
|
@@ -162,9 +162,9 @@ class BaseStructuredSupport(BaseSupport):
|
|
|
162
162
|
length = self.maximum - origin
|
|
163
163
|
length /= self.step_vector
|
|
164
164
|
self._nsteps = np.ceil(length).astype(np.int64)
|
|
165
|
-
self._nsteps[
|
|
166
|
-
|
|
167
|
-
|
|
165
|
+
self._nsteps[
|
|
166
|
+
self._nsteps == 0
|
|
167
|
+
] = 3 # need to have a minimum of 3 elements to apply the finite difference mask
|
|
168
168
|
if np.any(~(self._nsteps > 0)):
|
|
169
169
|
logger.error(
|
|
170
170
|
f"Cannot resize the interpolation support. The proposed number of steps is {self._nsteps}, these must be all > 0"
|
|
@@ -166,9 +166,9 @@ class TetMesh(BaseStructuredSupport):
|
|
|
166
166
|
shared_face_index[:] = -1
|
|
167
167
|
shared_face_index[row.reshape(-1, 3)[:, 0], :] = col.reshape(-1, 3)
|
|
168
168
|
|
|
169
|
-
self.shared_elements[
|
|
170
|
-
|
|
171
|
-
|
|
169
|
+
self.shared_elements[
|
|
170
|
+
np.arange(self.shared_element_relationships.shape[0]), :
|
|
171
|
+
] = shared_face_index
|
|
172
172
|
# resize
|
|
173
173
|
self.shared_elements = self.shared_elements[: len(self.shared_element_relationships), :]
|
|
174
174
|
|
|
@@ -173,9 +173,9 @@ class UnStructuredTetMesh(BaseSupport):
|
|
|
173
173
|
shared_face_index[:] = -1
|
|
174
174
|
shared_face_index[row.reshape(-1, 3)[:, 0], :] = col.reshape(-1, 3)
|
|
175
175
|
|
|
176
|
-
self.shared_elements[
|
|
177
|
-
|
|
178
|
-
|
|
176
|
+
self.shared_elements[
|
|
177
|
+
np.arange(self.shared_element_relationships.shape[0]), :
|
|
178
|
+
] = shared_face_index
|
|
179
179
|
# resize
|
|
180
180
|
self.shared_elements = self.shared_elements[: len(self.shared_element_relationships), :]
|
|
181
181
|
# flag = np.zeros(self.elements.shape[0])
|
|
@@ -63,8 +63,8 @@ def _init_face_table(grid):
|
|
|
63
63
|
shared_face_index = np.zeros((shared_faces.shape[0], grid.dimension), dtype=int)
|
|
64
64
|
shared_face_index[:] = -1
|
|
65
65
|
shared_face_index[row.reshape(-1, grid.dimension)[:, 0], :] = col.reshape(-1, grid.dimension)
|
|
66
|
-
grid._shared_elements[
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
grid._shared_elements[
|
|
67
|
+
np.arange(grid.shared_element_relationships.shape[0]), :
|
|
68
|
+
] = shared_face_index
|
|
69
69
|
# resize
|
|
70
70
|
grid._shared_elements = grid.shared_elements[: len(grid.shared_element_relationships), :]
|
|
@@ -598,10 +598,12 @@ class GeologicalModel:
|
|
|
598
598
|
* self._data.loc[mask, "polarity"].to_numpy()[:, None]
|
|
599
599
|
)
|
|
600
600
|
self._data.drop(["strike", "dip"], axis=1, inplace=True)
|
|
601
|
-
self._data[
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
]
|
|
601
|
+
self._data[
|
|
602
|
+
['X', 'Y', 'Z', 'val', 'nx', 'ny', 'nz', 'gx', 'gy', 'gz', 'tx', 'ty', 'tz']
|
|
603
|
+
] = self._data[
|
|
604
|
+
['X', 'Y', 'Z', 'val', 'nx', 'ny', 'nz', 'gx', 'gy', 'gz', 'tx', 'ty', 'tz']
|
|
605
|
+
].astype(
|
|
606
|
+
float
|
|
605
607
|
)
|
|
606
608
|
|
|
607
609
|
def set_model_data(self, data):
|
|
@@ -1293,6 +1295,7 @@ class GeologicalModel:
|
|
|
1293
1295
|
fault_trace_anisotropy=0.0,
|
|
1294
1296
|
fault_dip=90,
|
|
1295
1297
|
fault_dip_anisotropy=0.0,
|
|
1298
|
+
fault_pitch=None,
|
|
1296
1299
|
**kwargs,
|
|
1297
1300
|
):
|
|
1298
1301
|
"""
|
|
@@ -1379,6 +1382,7 @@ class GeologicalModel:
|
|
|
1379
1382
|
major_axis = major_axis / self.scale_factor
|
|
1380
1383
|
if intermediate_axis:
|
|
1381
1384
|
intermediate_axis = intermediate_axis / self.scale_factor
|
|
1385
|
+
print(fault_dip, fault_normal_vector)
|
|
1382
1386
|
fault_frame_builder.create_data_from_geometry(
|
|
1383
1387
|
fault_frame_data=fault_frame_data,
|
|
1384
1388
|
fault_center=fault_center,
|
|
@@ -1393,6 +1397,7 @@ class GeologicalModel:
|
|
|
1393
1397
|
fault_trace_anisotropy=fault_trace_anisotropy,
|
|
1394
1398
|
fault_dip=fault_dip,
|
|
1395
1399
|
fault_dip_anisotropy=fault_dip_anisotropy,
|
|
1400
|
+
fault_pitch=fault_pitch,
|
|
1396
1401
|
)
|
|
1397
1402
|
if "force_mesh_geometry" not in kwargs:
|
|
1398
1403
|
fault_frame_builder.set_mesh_geometry(kwargs.get("fault_buffer", 0.2), 0)
|
|
@@ -1798,7 +1803,10 @@ class GeologicalModel:
|
|
|
1798
1803
|
values = values.loc[~np.logical_or(values == np.inf, values == -np.inf)]
|
|
1799
1804
|
surfaces.extend(
|
|
1800
1805
|
self.get_feature_by_name(u).surfaces(
|
|
1801
|
-
values.to_list(),
|
|
1806
|
+
values.to_list(),
|
|
1807
|
+
self.bounding_box,
|
|
1808
|
+
name=names.loc[values.index].to_list(),
|
|
1809
|
+
colours=unit_table.loc[unit_table['feature_name'] == u, 'colour'].tolist(),
|
|
1802
1810
|
)
|
|
1803
1811
|
)
|
|
1804
1812
|
|
|
@@ -274,6 +274,7 @@ class BaseFeature(metaclass=ABCMeta):
|
|
|
274
274
|
value: Union[float, int, List[Union[float, int]]],
|
|
275
275
|
bounding_box=None,
|
|
276
276
|
name: Optional[Union[List[str], str]] = None,
|
|
277
|
+
colours: Optional[Union[str, np.ndarray]] = None,
|
|
277
278
|
) -> surface_list:
|
|
278
279
|
"""Find the surfaces of the geological feature at a given value
|
|
279
280
|
|
|
@@ -305,7 +306,7 @@ class BaseFeature(metaclass=ABCMeta):
|
|
|
305
306
|
isosurfacer = LoopIsosurfacer(bounding_box, callable=callable)
|
|
306
307
|
if name is None and self.name is not None:
|
|
307
308
|
name = self.name
|
|
308
|
-
surfaces = isosurfacer.fit(value, name)
|
|
309
|
+
surfaces = isosurfacer.fit(value, name, colours=colours)
|
|
309
310
|
except Exception as e:
|
|
310
311
|
logger.error(f"Failed to create surface for {self.name} at value {value}")
|
|
311
312
|
logger.error(e)
|
|
@@ -333,9 +334,7 @@ class BaseFeature(metaclass=ABCMeta):
|
|
|
333
334
|
raise ValueError("Must specify bounding box")
|
|
334
335
|
bounding_box = self.model.bounding_box
|
|
335
336
|
grid = bounding_box.structured_grid(name=self.name)
|
|
336
|
-
value = self.evaluate_value(
|
|
337
|
-
bounding_box.regular_grid(local=False, order='F')
|
|
338
|
-
)
|
|
337
|
+
value = self.evaluate_value(bounding_box.regular_grid(local=False, order='F'))
|
|
339
338
|
if self.model is not None:
|
|
340
339
|
|
|
341
340
|
value = self.evaluate_value(
|
|
@@ -91,6 +91,7 @@ class FaultBuilder(StructuralFrameBuilder):
|
|
|
91
91
|
fault_trace_anisotropy=1.0,
|
|
92
92
|
fault_dip=90,
|
|
93
93
|
fault_dip_anisotropy=1.0,
|
|
94
|
+
fault_pitch=None,
|
|
94
95
|
):
|
|
95
96
|
"""Generate the required data for building a fault frame for a fault with the
|
|
96
97
|
specified parameters
|
|
@@ -204,6 +205,7 @@ class FaultBuilder(StructuralFrameBuilder):
|
|
|
204
205
|
fault_frame_data["coord"] == 1, ~np.isnan(fault_frame_data["gz"])
|
|
205
206
|
)
|
|
206
207
|
fault_slip_data = fault_frame_data.loc[slip_mask, ["gx", "gy", "gz"]]
|
|
208
|
+
|
|
207
209
|
if len(fault_slip_data) == 0:
|
|
208
210
|
logger.warning(
|
|
209
211
|
"There is no slip vector data for the fault, using vertical slip vector\n\
|
|
@@ -211,6 +213,11 @@ class FaultBuilder(StructuralFrameBuilder):
|
|
|
211
213
|
)
|
|
212
214
|
strike_vector, dip_vector = get_vectors(fault_normal_vector[None, :])
|
|
213
215
|
fault_slip_vector = dip_vector[:, 0]
|
|
216
|
+
if fault_pitch is not None:
|
|
217
|
+
print('using pitch')
|
|
218
|
+
rotm = rotation(fault_normal_vector[None,:],[fault_pitch])
|
|
219
|
+
print(rotm.shape,fault_slip_vector.shape)
|
|
220
|
+
fault_slip_vector = np.einsum("ijk,k->ij", rotm, fault_slip_vector)[0,:]
|
|
214
221
|
logger.info(f"Estimated fault slip vector: {fault_slip_vector}")
|
|
215
222
|
else:
|
|
216
223
|
fault_slip_vector = fault_slip_data.mean(axis=0).to_numpy()
|
|
@@ -299,9 +299,9 @@ class ProcessInputData:
|
|
|
299
299
|
pts = self.fault_locations.loc[
|
|
300
300
|
self.fault_locations["feature_name"] == fname, ["X", "Y", "Z"]
|
|
301
301
|
]
|
|
302
|
-
fault_properties.loc[
|
|
303
|
-
|
|
304
|
-
)
|
|
302
|
+
fault_properties.loc[
|
|
303
|
+
fname, ["centreEasting", "centreNorthing", "centreAltitude"]
|
|
304
|
+
] = np.nanmean(pts, axis=0)
|
|
305
305
|
if (
|
|
306
306
|
"avgNormalEasting" not in fault_properties.columns
|
|
307
307
|
or "avgNormalNorthing" not in fault_properties.columns
|
|
@@ -449,9 +449,9 @@ class ProcessInputData:
|
|
|
449
449
|
for _name, sg in self.stratigraphic_order:
|
|
450
450
|
value = 0.0 # reset for each supergroup
|
|
451
451
|
if sg[0] not in self.thicknesses or self.thicknesses[sg[0]] <= 0:
|
|
452
|
-
self.thicknesses[
|
|
453
|
-
|
|
454
|
-
|
|
452
|
+
self.thicknesses[
|
|
453
|
+
sg[0]
|
|
454
|
+
] = np.inf # make the top unit infinite as it should extend to the top of the model
|
|
455
455
|
for g in reversed(
|
|
456
456
|
sg[:-1]
|
|
457
457
|
): # don't add the last unit as we never see the base of this unit.
|
LoopStructural/utils/_surface.py
CHANGED
|
@@ -64,6 +64,7 @@ class LoopIsosurfacer:
|
|
|
64
64
|
values: Optional[Union[list, int, float]],
|
|
65
65
|
name: Optional[Union[List[str], str]] = None,
|
|
66
66
|
local=False,
|
|
67
|
+
colours: Optional[List] = None,
|
|
67
68
|
) -> surface_list:
|
|
68
69
|
"""Extract isosurfaces from the interpolator
|
|
69
70
|
|
|
@@ -120,7 +121,9 @@ class LoopIsosurfacer:
|
|
|
120
121
|
names = [name] * len(isovalues)
|
|
121
122
|
if isinstance(name, list):
|
|
122
123
|
names = name
|
|
123
|
-
|
|
124
|
+
if colours is None:
|
|
125
|
+
colours = [None] * len(isovalues)
|
|
126
|
+
for name, isovalue, colour in zip(names, isovalues, colours):
|
|
124
127
|
try:
|
|
125
128
|
step_vector = (self.bounding_box.maximum - self.bounding_box.origin) / (
|
|
126
129
|
np.array(self.bounding_box.nsteps) - 1
|
|
@@ -150,6 +153,7 @@ class LoopIsosurfacer:
|
|
|
150
153
|
normals=normals,
|
|
151
154
|
name=f"{name}_{isovalue}",
|
|
152
155
|
values=values,
|
|
156
|
+
colour=colour,
|
|
153
157
|
)
|
|
154
158
|
)
|
|
155
159
|
return surfaces
|
LoopStructural/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "1.6.
|
|
1
|
+
__version__ = "1.6.10"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
LoopStructural/__init__.py,sha256=fg_Vm1aMDYIf_CffTFopLsTx21u6deLaI7JMVpRYdOI,1378
|
|
2
|
-
LoopStructural/version.py,sha256=
|
|
2
|
+
LoopStructural/version.py,sha256=sWIpFBcO73DLgomFrOsnrVoNZ_1WQXvqT1hgrs4ja8E,23
|
|
3
3
|
LoopStructural/datasets/__init__.py,sha256=ylb7fzJU_DyQ73LlwQos7VamqkDSGITbbnoKg7KAOmE,677
|
|
4
4
|
LoopStructural/datasets/_base.py,sha256=FB_D5ybBYHoaNbycdkpZcRffzjrrL1xp9X0k-pyob9Y,7618
|
|
5
5
|
LoopStructural/datasets/_example_models.py,sha256=Zg33IeUyh4C-lC0DRMLqCDP2IrX8L-gNV1WxJwBGjzM,113
|
|
@@ -29,10 +29,10 @@ LoopStructural/datasets/data/geological_map_data/stratigraphic_order.csv,sha256=
|
|
|
29
29
|
LoopStructural/datasets/data/geological_map_data/stratigraphic_orientations.csv,sha256=RysyqUAIjY6iIDUfTh11n9QUQWXB_qxKnZeN_DqNzlY,26745
|
|
30
30
|
LoopStructural/datasets/data/geological_map_data/stratigraphic_thickness.csv,sha256=pnSmG-wL8-kxuoHo_pgpJrfTmsZOzc8L0vxpBRh3r8A,355
|
|
31
31
|
LoopStructural/datatypes/__init__.py,sha256=lVg64DnynMm58qvYTjLrcyWH7vk2ngr9JGMo5FaiALI,160
|
|
32
|
-
LoopStructural/datatypes/_bounding_box.py,sha256=
|
|
32
|
+
LoopStructural/datatypes/_bounding_box.py,sha256=NwERtFHvrlQqsUNFZm4JgPEjCrxs31GlaDC7DRG6bO4,18375
|
|
33
33
|
LoopStructural/datatypes/_point.py,sha256=sCZiWRdnbIH_P9b52btNrotrttWlE-e4Mr2BBwfAAZY,7710
|
|
34
34
|
LoopStructural/datatypes/_structured_grid.py,sha256=mc-UM1Gh_BjHFItuPE4FF5wvGzJnSqF2MTx_xvrwcTk,5088
|
|
35
|
-
LoopStructural/datatypes/_surface.py,sha256=
|
|
35
|
+
LoopStructural/datatypes/_surface.py,sha256=V3HSvPO-awPMlIG22A1ttUCn1BUcdN-29CiDj6CtF-w,6653
|
|
36
36
|
LoopStructural/export/exporters.py,sha256=BniZu-PqQvHqCU6GIuJQ5FPzI9Dx_T6rI8EW1pykois,17209
|
|
37
37
|
LoopStructural/export/file_formats.py,sha256=0xKyYSW4Jv_4jsXwusg-WO6PNUhZKd6HdWSqGSaPve8,232
|
|
38
38
|
LoopStructural/export/geoh5.py,sha256=jLFKC5EB0azT3PgJPtkJzi3_CG28RLgP2FuENAGCQMI,4313
|
|
@@ -43,7 +43,7 @@ LoopStructural/interpolators/_api.py,sha256=EC4ogG2uPq-z_pgNGd_eTieTl92eaZ-rjyoF
|
|
|
43
43
|
LoopStructural/interpolators/_builders.py,sha256=B49KsxB8RRN6IHDfGT43nXWe_Av1SVVT8vm2Nh1oEiQ,6758
|
|
44
44
|
LoopStructural/interpolators/_discrete_fold_interpolator.py,sha256=eDe0R1lcQ0AuMcv7zlpu5c-soCv7AybIqQAuN2vFE3M,6542
|
|
45
45
|
LoopStructural/interpolators/_discrete_interpolator.py,sha256=i_joZ8HOf_s6Q2L8gHFnhkdtgyED1SjATxRsRd1HxRU,26038
|
|
46
|
-
LoopStructural/interpolators/_finite_difference_interpolator.py,sha256=
|
|
46
|
+
LoopStructural/interpolators/_finite_difference_interpolator.py,sha256=SUU_7dmfhKFh3xfwG_w-yCAzWDMoVNC0qHxDW17ajgc,18117
|
|
47
47
|
LoopStructural/interpolators/_geological_interpolator.py,sha256=hcQuyv1zYakJ7mcDFlLj-YarjnMQvlP6pVbK1KuxBWs,11195
|
|
48
48
|
LoopStructural/interpolators/_interpolator_builder.py,sha256=Z8bhmco5aSQX19A8It2SB_rG61wnlyshWfp3ivm8rU0,4586
|
|
49
49
|
LoopStructural/interpolators/_interpolator_factory.py,sha256=fbjebXSe5IgTol1tnBlnsw9gD426v-TGkX3gquIg7LI,2782
|
|
@@ -57,22 +57,22 @@ LoopStructural/interpolators/supports/_2d_p1_unstructured.py,sha256=okcy56nyjued
|
|
|
57
57
|
LoopStructural/interpolators/supports/_2d_p2_unstructured.py,sha256=TeBVtT1PMV7CKzmnFZke37acMoFxouer20cskS7pVoE,10422
|
|
58
58
|
LoopStructural/interpolators/supports/_2d_structured_grid.py,sha256=Pt9fiXyTS-RTd3mxXr3EUQfB6DhKChHQ5zbWub54nW0,16347
|
|
59
59
|
LoopStructural/interpolators/supports/_2d_structured_tetra.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
60
|
-
LoopStructural/interpolators/supports/_3d_base_structured.py,sha256=
|
|
60
|
+
LoopStructural/interpolators/supports/_3d_base_structured.py,sha256=XsIGQcv0u43ld90lL7K8f3kwmMJuiSnHem-0LrrJZlY,16479
|
|
61
61
|
LoopStructural/interpolators/supports/_3d_p2_tetra.py,sha256=CqGVJRUMxbPQZDhhopNt_s9gVhMqh4YbjQyDZonoyxc,11574
|
|
62
62
|
LoopStructural/interpolators/supports/_3d_structured_grid.py,sha256=x9NoZRsl58iowcObavgb0nY_C335BmcIYgec9REsFpU,17366
|
|
63
|
-
LoopStructural/interpolators/supports/_3d_structured_tetra.py,sha256=
|
|
64
|
-
LoopStructural/interpolators/supports/_3d_unstructured_tetra.py,sha256=
|
|
63
|
+
LoopStructural/interpolators/supports/_3d_structured_tetra.py,sha256=8poHH0UIMWLpDPHZZG39dSSYiu7vBz-GBHqRpGovFCU,26503
|
|
64
|
+
LoopStructural/interpolators/supports/_3d_unstructured_tetra.py,sha256=TjPuvmm51Ct2zxNeeYr2LjBT90PC1CW5rDV1CIBvBpg,23865
|
|
65
65
|
LoopStructural/interpolators/supports/__init__.py,sha256=V0JjixoBIUZVAo5MmqARR67xDOoQwnb4G3SXeOMRSyQ,1603
|
|
66
66
|
LoopStructural/interpolators/supports/_aabb.py,sha256=Z-kH_u6c6izak0aHG3Uo14PEKQeZmYlevLDC32Q06xk,3208
|
|
67
67
|
LoopStructural/interpolators/supports/_base_support.py,sha256=pYzsmeBu4kLaD9ZKsz_dfjVpfuAd00xENqOQC9Xw5QY,2501
|
|
68
|
-
LoopStructural/interpolators/supports/_face_table.py,sha256=
|
|
68
|
+
LoopStructural/interpolators/supports/_face_table.py,sha256=CjBcGeIdIwPo0IV_-uT6SK-Re0qSeSzPAtuoztmvQGg,3093
|
|
69
69
|
LoopStructural/interpolators/supports/_support_factory.py,sha256=XNAxnr-JS3KEhdsoZeJ-VaLTJwlvxgBuRMCqYrCDW18,1485
|
|
70
70
|
LoopStructural/modelling/__init__.py,sha256=oW7dz6c8K1A0VcW7-mVcyqcENUrtybCb3eVUNXFvMfA,656
|
|
71
71
|
LoopStructural/modelling/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
72
|
-
LoopStructural/modelling/core/geological_model.py,sha256=
|
|
72
|
+
LoopStructural/modelling/core/geological_model.py,sha256=bhzdOIbFAHVCnUwJe32GEN2nf1D1cT4KH-JXirZpDfY,66430
|
|
73
73
|
LoopStructural/modelling/features/__init__.py,sha256=Vf-qd5EDBtJ1DpuXXyCcw2-wf6LWPRW5wzxDEO3vOc8,939
|
|
74
74
|
LoopStructural/modelling/features/_analytical_feature.py,sha256=U_g86LgQhYY2359rdsDqpvziYwqrWkc5EdvhJARiUWo,3597
|
|
75
|
-
LoopStructural/modelling/features/_base_geological_feature.py,sha256=
|
|
75
|
+
LoopStructural/modelling/features/_base_geological_feature.py,sha256=985aHq8z5riS7uS04mGBPd8UcPXFv0l_fPAdlE6Ydcc,12175
|
|
76
76
|
LoopStructural/modelling/features/_cross_product_geological_feature.py,sha256=GIyCHUdE6F-bse2e4puG9V2f7qRtDVfby5PRe2BboD4,3021
|
|
77
77
|
LoopStructural/modelling/features/_geological_feature.py,sha256=u6pbKj9BujX1Ijj5eVdhwGDNjrIAI16CpiAn5n8g3RY,11279
|
|
78
78
|
LoopStructural/modelling/features/_lambda_geological_feature.py,sha256=ieZiiMd8HCeVEIl3B406tsysT7iUEGcEUJXALjhjkeM,2924
|
|
@@ -82,7 +82,7 @@ LoopStructural/modelling/features/_structural_frame.py,sha256=e3QmNHLwuZc5PX3rLa
|
|
|
82
82
|
LoopStructural/modelling/features/_unconformity_feature.py,sha256=2Bx0BI38YLdcNvDWuP9E1pKFN4orEUq9aC8b5xG1UVk,2362
|
|
83
83
|
LoopStructural/modelling/features/builders/__init__.py,sha256=Gqld1C-PcaXfJ8vpkWMDCmehmd3hZNYQk1knPtl59Bk,266
|
|
84
84
|
LoopStructural/modelling/features/builders/_base_builder.py,sha256=N3txGC98V08A8-k2TLdoIWgWLfblZ91kaTvciPq_QVM,3750
|
|
85
|
-
LoopStructural/modelling/features/builders/_fault_builder.py,sha256=
|
|
85
|
+
LoopStructural/modelling/features/builders/_fault_builder.py,sha256=3rNfRmMcMCrXMyc_hjltU30wTh041NWD6rShNVI2lCE,25999
|
|
86
86
|
LoopStructural/modelling/features/builders/_folded_feature_builder.py,sha256=1_0BVTzcvmFl6K3_lX-jF0tiMFPmS8j6vPeSLn9MbrE,6607
|
|
87
87
|
LoopStructural/modelling/features/builders/_geological_feature_builder.py,sha256=jn2BiZlzXyWl0_TrsajpFR2wegGOpbuO5yFu2FamuYA,22014
|
|
88
88
|
LoopStructural/modelling/features/builders/_structural_frame_builder.py,sha256=ms3-fuFpDEarjzYU5W499TquOIlTwHPUibVxIypfmWY,8019
|
|
@@ -103,7 +103,7 @@ LoopStructural/modelling/features/fold/fold_function/_trigo_fold_rotation_angle.
|
|
|
103
103
|
LoopStructural/modelling/input/__init__.py,sha256=HhJM3V5b-8_64LiRbF3Bd1pjWhJlcknxMSMPRrqZ0-I,153
|
|
104
104
|
LoopStructural/modelling/input/fault_network.py,sha256=0uxl7lOySdhMhNXoiOkuiHIXqAz1Ls0j-W65cmdQoP8,2348
|
|
105
105
|
LoopStructural/modelling/input/map2loop_processor.py,sha256=T7Fgqd7FNJWylLKvfIniRZBMRMeAoP8iU330-WYU8Fg,7031
|
|
106
|
-
LoopStructural/modelling/input/process_data.py,sha256=
|
|
106
|
+
LoopStructural/modelling/input/process_data.py,sha256=iEq5bj4xqhYUfTd8cBIr03_PIeKBYb4mmKTpRqEbmpU,26289
|
|
107
107
|
LoopStructural/modelling/input/project_file.py,sha256=WhJkMfDK9uE7MK7HK-YK6ZOBAdwLX5P7ThZgXj444Eg,4604
|
|
108
108
|
LoopStructural/modelling/intrusions/__init__.py,sha256=EpZK3cHJwGQhPUYIwKCKu8vkNdt_nOgWF0zfhiqDYDA,712
|
|
109
109
|
LoopStructural/modelling/intrusions/geom_conceptual_models.py,sha256=jwTlhYySUj7z4DEnJoi4AINZB_N3-SW6ONRFL66OsW0,3665
|
|
@@ -113,7 +113,7 @@ LoopStructural/modelling/intrusions/intrusion_feature.py,sha256=ESjtikHFJQzUnowb
|
|
|
113
113
|
LoopStructural/modelling/intrusions/intrusion_frame_builder.py,sha256=Q1TPHxREcrO7Rw71nUfACZHfYnISLjqlgkUNTPT324k,40143
|
|
114
114
|
LoopStructural/modelling/intrusions/intrusion_support_functions.py,sha256=wodakheMD62WJyoKnyX8UO-C1pje0I-5kHQEoDqShzo,13951
|
|
115
115
|
LoopStructural/utils/__init__.py,sha256=OJqNSu40SYJeC26IhoBBXDqQOogWjMGA-YokKVRrwMs,924
|
|
116
|
-
LoopStructural/utils/_surface.py,sha256=
|
|
116
|
+
LoopStructural/utils/_surface.py,sha256=vTVIkhjYC85CPyirtA4aMPi295fpo40QHzYOqeUS354,6140
|
|
117
117
|
LoopStructural/utils/_transformation.py,sha256=peuLPH3BJ5DxnPbOuNKcqK4eXhAXdbT540L1OIsO3v0,5404
|
|
118
118
|
LoopStructural/utils/colours.py,sha256=-KRf1MXKx4L8TXnwyiunmKAX4tfy0qG68fRadyfn_bM,1163
|
|
119
119
|
LoopStructural/utils/config.py,sha256=ITGOtZTo2_QBwXkG_0AFANfE90J9siCXLzxypVmg9QA,414
|
|
@@ -129,8 +129,8 @@ LoopStructural/utils/regions.py,sha256=LvcOCPudF4u95-GKBOZqXVxOEcR3cOFgFpcs5x43s
|
|
|
129
129
|
LoopStructural/utils/typing.py,sha256=29uVSTZdzXXH-jdlaYyBWZ1gQ2-nlZ2-XoVgG_PXNFY,157
|
|
130
130
|
LoopStructural/utils/utils.py,sha256=2Z4zVE6G752-SPmM29zebk82bROJxEwi_YiiJjcVED4,2438
|
|
131
131
|
LoopStructural/visualisation/__init__.py,sha256=5BDgKor8-ae6DrS7IZybJ3Wq_pTnCchxuY4EgzA7v1M,318
|
|
132
|
-
loopstructural-1.6.
|
|
133
|
-
loopstructural-1.6.
|
|
134
|
-
loopstructural-1.6.
|
|
135
|
-
loopstructural-1.6.
|
|
136
|
-
loopstructural-1.6.
|
|
132
|
+
loopstructural-1.6.10.dist-info/licenses/LICENSE,sha256=ZqGeNFOgmYevj7Ld7Q-kR4lAxWXuBRUdUmPC6XM_py8,1071
|
|
133
|
+
loopstructural-1.6.10.dist-info/METADATA,sha256=SwyCi3Rxn8nYQVe4GcIwYo6LkYXQyxDRjH6a_idDpow,6454
|
|
134
|
+
loopstructural-1.6.10.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
|
135
|
+
loopstructural-1.6.10.dist-info/top_level.txt,sha256=QtQErKzYHfg6ddxTQ1NyaTxXBVM6qAqrM_vxEPyXZLg,15
|
|
136
|
+
loopstructural-1.6.10.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|