LoopStructural 1.6.3__tar.gz → 1.6.5__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.
Potentially problematic release.
This version of LoopStructural might be problematic. Click here for more details.
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datatypes/_point.py +5 -2
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/supports/_3d_structured_grid.py +0 -3
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/__init__.py +0 -2
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/core/geological_model.py +2 -2
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/_base_geological_feature.py +21 -8
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/_structural_frame.py +10 -18
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/_unconformity_feature.py +3 -3
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/fault/_fault_segment.py +25 -2
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/input/process_data.py +41 -26
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/input/project_file.py +44 -39
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/utils/__init__.py +1 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/utils/_surface.py +6 -2
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/utils/colours.py +1 -1
- loopstructural-1.6.5/LoopStructural/version.py +1 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5/LoopStructural.egg-info}/PKG-INFO +1 -1
- {loopstructural-1.6.3/LoopStructural.egg-info → loopstructural-1.6.5}/PKG-INFO +1 -1
- loopstructural-1.6.3/LoopStructural/version.py +0 -1
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LICENSE +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/__init__.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/__init__.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/_base.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/_example_models.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/claudius.csv +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/claudiusbb.txt +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/duplex.csv +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/duplexbb.txt +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/fault_trace/fault_trace.cpg +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/fault_trace/fault_trace.dbf +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/fault_trace/fault_trace.prj +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/fault_trace/fault_trace.shp +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/fault_trace/fault_trace.shx +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/geological_map_data/bbox.csv +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/geological_map_data/contacts.csv +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/geological_map_data/fault_displacement.csv +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/geological_map_data/fault_edges.txt +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/geological_map_data/fault_locations.csv +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/geological_map_data/fault_orientations.csv +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/geological_map_data/stratigraphic_order.csv +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/geological_map_data/stratigraphic_orientations.csv +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/geological_map_data/stratigraphic_thickness.csv +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/intrusion.csv +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/intrusionbb.txt +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/onefoldbb.txt +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/onefolddata.csv +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/refolded_bb.txt +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/refolded_fold.csv +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/tabular_intrusion.csv +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datatypes/__init__.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datatypes/_bounding_box.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datatypes/_structured_grid.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datatypes/_surface.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/export/exporters.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/export/file_formats.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/export/geoh5.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/export/gocad.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/export/omf_wrapper.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/__init__.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/_api.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/_builders.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/_cython/__init__.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/_discrete_fold_interpolator.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/_discrete_interpolator.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/_finite_difference_interpolator.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/_geological_interpolator.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/_interpolator_factory.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/_operator.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/_p1interpolator.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/_p2interpolator.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/_surfe_wrapper.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/supports/_2d_base_unstructured.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/supports/_2d_p1_unstructured.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/supports/_2d_p2_unstructured.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/supports/_2d_structured_grid.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/supports/_2d_structured_tetra.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/supports/_3d_base_structured.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/supports/_3d_p2_tetra.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/supports/_3d_structured_tetra.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/supports/_3d_unstructured_tetra.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/supports/__init__.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/supports/_aabb.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/supports/_base_support.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/supports/_face_table.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/supports/_support_factory.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/core/__init__.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/__init__.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/_analytical_feature.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/_cross_product_geological_feature.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/_geological_feature.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/_lambda_geological_feature.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/_region.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/builders/__init__.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/builders/_base_builder.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/builders/_fault_builder.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/builders/_folded_feature_builder.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/builders/_geological_feature_builder.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/builders/_structural_frame_builder.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/fault/__init__.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/fault/_fault_function.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/fault/_fault_function_feature.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/fold/__init__.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/fold/_fold.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/fold/_fold_rotation_angle_feature.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/fold/_foldframe.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/fold/_svariogram.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/fold/fold_function/__init__.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/fold/fold_function/_base_fold_rotation_angle.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/fold/fold_function/_fourier_series_fold_rotation_angle.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/fold/fold_function/_lambda_fold_rotation_angle.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/fold/fold_function/_trigo_fold_rotation_angle.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/input/__init__.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/input/fault_network.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/input/map2loop_processor.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/intrusions/__init__.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/intrusions/geom_conceptual_models.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/intrusions/geometric_scaling_functions.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/intrusions/intrusion_builder.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/intrusions/intrusion_feature.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/intrusions/intrusion_frame_builder.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/intrusions/intrusion_support_functions.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/utils/_transformation.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/utils/config.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/utils/dtm_creator.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/utils/exceptions.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/utils/features.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/utils/helper.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/utils/json_encoder.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/utils/linalg.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/utils/logging.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/utils/maths.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/utils/regions.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/utils/typing.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/utils/utils.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/visualisation/__init__.py +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural.egg-info/SOURCES.txt +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural.egg-info/dependency_links.txt +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural.egg-info/requires.txt +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural.egg-info/top_level.txt +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/README.md +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/pyproject.toml +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/setup.cfg +0 -0
- {loopstructural-1.6.3 → loopstructural-1.6.5}/setup.py +0 -0
|
@@ -123,12 +123,15 @@ class VectorPoints:
|
|
|
123
123
|
def from_dict(self, d):
|
|
124
124
|
return VectorPoints(d['locations'], d['vectors'], d['name'], d.get('properties', None))
|
|
125
125
|
|
|
126
|
-
def vtk(self, geom='arrow', scale=1.0, scale_function=None, tolerance=0.05):
|
|
126
|
+
def vtk(self, geom='arrow', scale=1.0, scale_function=None, normalise=True, tolerance=0.05):
|
|
127
127
|
import pyvista as pv
|
|
128
128
|
|
|
129
129
|
vectors = np.copy(self.vectors)
|
|
130
|
+
if normalise:
|
|
131
|
+
norm = np.linalg.norm(vectors, axis=1)
|
|
132
|
+
vectors[norm > 0, :] /= norm[norm > 0][:, None]
|
|
130
133
|
if scale_function is not None:
|
|
131
|
-
vectors /= np.linalg.norm(vectors, axis=1)[:, None]
|
|
134
|
+
# vectors /= np.linalg.norm(vectors, axis=1)[:, None]
|
|
132
135
|
vectors *= scale_function(self.locations)[:, None]
|
|
133
136
|
points = pv.PolyData(self.locations)
|
|
134
137
|
points.point_data.set_vectors(vectors, 'vectors')
|
|
@@ -342,9 +342,6 @@ class StructuredGrid(BaseStructuredSupport):
|
|
|
342
342
|
idc, inside = self.position_to_cell_corners(evaluation_points)
|
|
343
343
|
T = np.zeros((idc.shape[0], 3, 8))
|
|
344
344
|
T[inside, :, :] = self.get_element_gradient_for_location(evaluation_points[inside, :])[1]
|
|
345
|
-
# indices = np.array([self.position_to_cell_index(evaluation_points)])
|
|
346
|
-
# idc = self.global_indicies(indices.swapaxes(0,1))
|
|
347
|
-
# print(idc)
|
|
348
345
|
if np.max(idc[inside, :]) > property_array.shape[0]:
|
|
349
346
|
cix, ciy, ciz = self.position_to_cell_index(evaluation_points)
|
|
350
347
|
if not np.all(cix[inside] < self.nsteps_cells[0]):
|
|
@@ -25,5 +25,3 @@ except (LoopImportError, ImportError):
|
|
|
25
25
|
logger.warning(
|
|
26
26
|
"Cannot use LoopProjectfileProcessor: Loop project file cannot be imported, try installing LoopProjectFile"
|
|
27
27
|
)
|
|
28
|
-
# from LoopStructural.modelling.features import StructuralFrame
|
|
29
|
-
# from LoopStructural.modelling.features.fault import FaultSegment
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/core/geological_model.py
RENAMED
|
@@ -649,7 +649,7 @@ class GeologicalModel:
|
|
|
649
649
|
for g in stratigraphic_column.keys():
|
|
650
650
|
for u in stratigraphic_column[g].keys():
|
|
651
651
|
stratigraphic_column[g][u]["colour"] = cmap_colours[ci, :]
|
|
652
|
-
|
|
652
|
+
ci += 1
|
|
653
653
|
self.stratigraphic_column = stratigraphic_column
|
|
654
654
|
|
|
655
655
|
def create_and_add_foliation(
|
|
@@ -1809,7 +1809,7 @@ class GeologicalModel:
|
|
|
1809
1809
|
grid = self.bounding_box.structured_grid(name=name)
|
|
1810
1810
|
|
|
1811
1811
|
grid.cell_properties['stratigraphy'] = self.evaluate_model(
|
|
1812
|
-
self.bounding_box.cell_centers()
|
|
1812
|
+
self.rescale(self.bounding_box.cell_centers())
|
|
1813
1813
|
)
|
|
1814
1814
|
return grid, self.stratigraphic_ids()
|
|
1815
1815
|
|
|
@@ -291,11 +291,24 @@ class BaseFeature(metaclass=ABCMeta):
|
|
|
291
291
|
if self.model is None:
|
|
292
292
|
raise ValueError("Must specify bounding box")
|
|
293
293
|
bounding_box = self.model.bounding_box
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
294
|
+
regions = self.regions
|
|
295
|
+
try:
|
|
296
|
+
self.regions = [
|
|
297
|
+
r for r in self.regions if r.name != self.name and r.parent.name != self.name
|
|
298
|
+
]
|
|
299
|
+
callable = lambda xyz: self.evaluate_value(self.model.scale(xyz))
|
|
300
|
+
isosurfacer = LoopIsosurfacer(bounding_box, callable=callable)
|
|
301
|
+
if name is None and self.name is not None:
|
|
302
|
+
name = self.name
|
|
303
|
+
surfaces = isosurfacer.fit(value, name)
|
|
304
|
+
except Exception as e:
|
|
305
|
+
logger.error(f"Failed to create surface for {self.name} at value {value}")
|
|
306
|
+
logger.error(e)
|
|
307
|
+
surfaces = []
|
|
308
|
+
finally:
|
|
309
|
+
self.regions = regions
|
|
310
|
+
|
|
311
|
+
return surfaces
|
|
299
312
|
|
|
300
313
|
def scalar_field(self, bounding_box=None):
|
|
301
314
|
"""Create a scalar field for the feature
|
|
@@ -341,10 +354,10 @@ class BaseFeature(metaclass=ABCMeta):
|
|
|
341
354
|
if self.model is None:
|
|
342
355
|
raise ValueError("Must specify bounding box")
|
|
343
356
|
bounding_box = self.model.bounding_box
|
|
344
|
-
|
|
345
|
-
points = grid.points
|
|
357
|
+
points = bounding_box.cell_centers()
|
|
346
358
|
value = self.evaluate_gradient(points)
|
|
347
|
-
|
|
359
|
+
if self.model is not None:
|
|
360
|
+
points = self.model.rescale(points)
|
|
348
361
|
return VectorPoints(points, value, self.name)
|
|
349
362
|
|
|
350
363
|
@abstractmethod
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/_structural_frame.py
RENAMED
|
@@ -115,7 +115,7 @@ class StructuralFrame(BaseFeature):
|
|
|
115
115
|
"""
|
|
116
116
|
return self.features[i]
|
|
117
117
|
|
|
118
|
-
def evaluate_value(self,
|
|
118
|
+
def evaluate_value(self, pos, ignore_regions=False):
|
|
119
119
|
"""
|
|
120
120
|
Evaluate the value of the structural frame for the points.
|
|
121
121
|
Can optionally only evaluate one coordinate
|
|
@@ -129,14 +129,14 @@ class StructuralFrame(BaseFeature):
|
|
|
129
129
|
-------
|
|
130
130
|
|
|
131
131
|
"""
|
|
132
|
-
v = np.zeros(
|
|
132
|
+
v = np.zeros(pos.shape) # create new 3d array of correct length
|
|
133
133
|
v[:] = np.nan
|
|
134
|
-
v[:, 0] = self.features[0].evaluate_value(
|
|
135
|
-
v[:, 1] = self.features[1].evaluate_value(
|
|
136
|
-
v[:, 2] = self.features[2].evaluate_value(
|
|
134
|
+
v[:, 0] = self.features[0].evaluate_value(pos, ignore_regions=ignore_regions)
|
|
135
|
+
v[:, 1] = self.features[1].evaluate_value(pos, ignore_regions=ignore_regions)
|
|
136
|
+
v[:, 2] = self.features[2].evaluate_value(pos, ignore_regions=ignore_regions)
|
|
137
137
|
return v
|
|
138
138
|
|
|
139
|
-
def evaluate_gradient(self,
|
|
139
|
+
def evaluate_gradient(self, pos, i=None, ignore_regions=False):
|
|
140
140
|
"""
|
|
141
141
|
Evaluate the gradient of the structural frame.
|
|
142
142
|
Can optionally only evaluate the ith coordinate
|
|
@@ -151,19 +151,11 @@ class StructuralFrame(BaseFeature):
|
|
|
151
151
|
|
|
152
152
|
"""
|
|
153
153
|
if i is not None:
|
|
154
|
-
return self.features[i].support.evaluate_gradient(
|
|
155
|
-
evaluation_points, ignore_regions=ignore_regions
|
|
156
|
-
)
|
|
154
|
+
return self.features[i].support.evaluate_gradient(pos, ignore_regions=ignore_regions)
|
|
157
155
|
return (
|
|
158
|
-
self.features[0].support.evaluate_gradient(
|
|
159
|
-
|
|
160
|
-
),
|
|
161
|
-
self.features[1].support.evaluate_gradient(
|
|
162
|
-
evaluation_points, ignore_regions=ignore_regions
|
|
163
|
-
),
|
|
164
|
-
self.features[2].support.evaluate_gradient(
|
|
165
|
-
evaluation_points, ignore_regions=ignore_regions
|
|
166
|
-
),
|
|
156
|
+
self.features[0].support.evaluate_gradient(pos, ignore_regions=ignore_regions),
|
|
157
|
+
self.features[1].support.evaluate_gradient(pos, ignore_regions=ignore_regions),
|
|
158
|
+
self.features[2].support.evaluate_gradient(pos, ignore_regions=ignore_regions),
|
|
167
159
|
)
|
|
168
160
|
|
|
169
161
|
def get_data(self, value_map: Optional[dict] = None) -> List[Union[ValuePoints, VectorPoints]]:
|
|
@@ -19,7 +19,7 @@ class UnconformityFeature(GeologicalFeature):
|
|
|
19
19
|
# just don't link the regions
|
|
20
20
|
GeologicalFeature.__init__(
|
|
21
21
|
self,
|
|
22
|
-
name=f"{feature.name}_unconformity",
|
|
22
|
+
name=f"__{feature.name}_unconformity",
|
|
23
23
|
faults=feature.faults,
|
|
24
24
|
regions=[], # feature.regions.copy(), # don't want to share regionsbetween unconformity and # feature.regions,
|
|
25
25
|
builder=feature.builder,
|
|
@@ -75,9 +75,9 @@ class UnconformityFeature(GeologicalFeature):
|
|
|
75
75
|
true if above the unconformity, false if below
|
|
76
76
|
"""
|
|
77
77
|
if self.sign:
|
|
78
|
-
return self.evaluate_value(pos)
|
|
78
|
+
return self.evaluate_value(pos) <= self.value
|
|
79
79
|
if not self.sign:
|
|
80
|
-
return self.evaluate_value(pos)
|
|
80
|
+
return self.evaluate_value(pos) >= self.value
|
|
81
81
|
|
|
82
82
|
def __call__(self, pos) -> np.ndarray:
|
|
83
83
|
return self.evaluate(pos)
|
|
@@ -114,6 +114,26 @@ class FaultSegment(StructuralFrame):
|
|
|
114
114
|
def displacementfeature(self):
|
|
115
115
|
return FaultDisplacementFeature(self, self.faultfunction, name=self.name, model=self.model)
|
|
116
116
|
|
|
117
|
+
def fault_ellipsoid(self, **kwargs):
|
|
118
|
+
try:
|
|
119
|
+
import pyvista as pv
|
|
120
|
+
|
|
121
|
+
fault_ellipsoid = pv.PolyData(
|
|
122
|
+
self.model.rescale(self.fault_centre[None, :], inplace=False)
|
|
123
|
+
)
|
|
124
|
+
fault_ellipsoid["norm"] = self.builder.fault_normal_vector[None, :]
|
|
125
|
+
|
|
126
|
+
geom = pv.ParametricEllipsoid(
|
|
127
|
+
self.fault_minor_axis,
|
|
128
|
+
self.fault_major_axis,
|
|
129
|
+
self.fault_intermediate_axis,
|
|
130
|
+
)
|
|
131
|
+
ellipsoid = fault_ellipsoid.glyph(geom=geom, **kwargs)
|
|
132
|
+
return ellipsoid
|
|
133
|
+
except ImportError:
|
|
134
|
+
logger.error("pyvista not installed")
|
|
135
|
+
return None
|
|
136
|
+
|
|
117
137
|
def set_fault_offset(self, offset: float):
|
|
118
138
|
self.fault_offset = offset
|
|
119
139
|
|
|
@@ -177,7 +197,7 @@ class FaultSegment(StructuralFrame):
|
|
|
177
197
|
return np.abs(v) > threshold
|
|
178
198
|
# return np.all(np.logical_and(v > -1,v<1),axis=1)
|
|
179
199
|
|
|
180
|
-
def evaluate_value(self, locations):
|
|
200
|
+
def evaluate_value(self, locations, ignore_regions=False):
|
|
181
201
|
"""
|
|
182
202
|
Return the value of the fault surface scalar field
|
|
183
203
|
|
|
@@ -202,7 +222,10 @@ class FaultSegment(StructuralFrame):
|
|
|
202
222
|
# except:
|
|
203
223
|
# logger.error("nan slicing")
|
|
204
224
|
# v[mask] = self.__getitem__(0).evaluate_value(locations[mask, :])
|
|
205
|
-
return self.__getitem__(0).evaluate_value(locations)
|
|
225
|
+
return self.__getitem__(0).evaluate_value(locations, ignore_regions=ignore_regions)
|
|
226
|
+
|
|
227
|
+
def ellipsoid(self):
|
|
228
|
+
pass
|
|
206
229
|
|
|
207
230
|
def mean(self):
|
|
208
231
|
return self.__getitem__(0).mean()
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/input/process_data.py
RENAMED
|
@@ -165,8 +165,19 @@ class ProcessInputData:
|
|
|
165
165
|
unit_id = 1
|
|
166
166
|
val = self._stratigraphic_value()
|
|
167
167
|
for name, sg in self._stratigraphic_order:
|
|
168
|
+
# set the oldest unit to be the basement.
|
|
169
|
+
# this has no observed basal contact and then
|
|
170
|
+
# top of the unit is the 0 isovalue.
|
|
171
|
+
# this is the minimum of the next unit
|
|
168
172
|
stratigraphic_column[name] = {}
|
|
169
|
-
|
|
173
|
+
stratigraphic_column[name][sg[-1]] = {
|
|
174
|
+
"max": 0,
|
|
175
|
+
"min": -np.inf,
|
|
176
|
+
"id": unit_id,
|
|
177
|
+
"colour": self.colours[sg[-1]],
|
|
178
|
+
}
|
|
179
|
+
# iterate through the remaining units (in reverse)
|
|
180
|
+
for g in reversed(sg[:-1]):
|
|
170
181
|
if g in self.thicknesses:
|
|
171
182
|
stratigraphic_column[name][g] = {
|
|
172
183
|
"max": val[g] + self.thicknesses[g],
|
|
@@ -174,10 +185,6 @@ class ProcessInputData:
|
|
|
174
185
|
"id": unit_id,
|
|
175
186
|
"colour": self.colours[g],
|
|
176
187
|
}
|
|
177
|
-
if i == 0:
|
|
178
|
-
stratigraphic_column[name][g]["min"] = 0
|
|
179
|
-
if i == len(sg) - 1:
|
|
180
|
-
stratigraphic_column[name][g]["max"] = np.inf
|
|
181
188
|
|
|
182
189
|
unit_id += 1
|
|
183
190
|
# add faults into the column
|
|
@@ -438,7 +445,14 @@ class ProcessInputData:
|
|
|
438
445
|
stratigraphic_value = {}
|
|
439
446
|
for _name, sg in self.stratigraphic_order:
|
|
440
447
|
value = 0.0 # reset for each supergroup
|
|
441
|
-
|
|
448
|
+
if sg[0] not in self.thicknesses or self.thicknesses[sg[0]] <= 0:
|
|
449
|
+
self.thicknesses[sg[0]] = (
|
|
450
|
+
np.inf
|
|
451
|
+
) # make the top unit infinite as it should extend to the top of the model
|
|
452
|
+
for g in reversed(
|
|
453
|
+
sg[:-1]
|
|
454
|
+
): # don't add the last unit as we never see the base of this unit.
|
|
455
|
+
# It should be "basement"
|
|
442
456
|
if g not in self.thicknesses:
|
|
443
457
|
logger.warning(f"No thicknesses for {g}")
|
|
444
458
|
stratigraphic_value[g] = np.nan
|
|
@@ -469,30 +483,13 @@ class ProcessInputData:
|
|
|
469
483
|
|
|
470
484
|
@property
|
|
471
485
|
def contacts(self):
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
@contacts.setter
|
|
475
|
-
def contacts(self, contacts):
|
|
476
|
-
"""Function to convert input contact to loopstructural input
|
|
477
|
-
|
|
478
|
-
either uses the thickness values or assigns unique ids given
|
|
479
|
-
the units named in stratigraphic order
|
|
480
|
-
|
|
481
|
-
Returns
|
|
482
|
-
-------
|
|
483
|
-
DataFrame
|
|
484
|
-
data frame with x,y,y,val/interface,feature_name
|
|
485
|
-
"""
|
|
486
|
-
if contacts is None:
|
|
487
|
-
return
|
|
488
|
-
contacts = contacts.copy()
|
|
489
|
-
self._update_feature_names(contacts)
|
|
486
|
+
contacts = self._contacts.copy()
|
|
490
487
|
if self._use_thickness:
|
|
491
488
|
contacts["val"] = np.nan
|
|
492
489
|
for k, v in self._stratigraphic_value().items():
|
|
493
490
|
contacts.loc[contacts["name"] == k, "val"] = v
|
|
494
491
|
|
|
495
|
-
|
|
492
|
+
contacts = contacts.loc[
|
|
496
493
|
~np.isnan(contacts["val"]), ["X", "Y", "Z", "feature_name", "val"]
|
|
497
494
|
]
|
|
498
495
|
if not self._use_thickness:
|
|
@@ -500,10 +497,28 @@ class ProcessInputData:
|
|
|
500
497
|
interface_val = 0
|
|
501
498
|
for k in self._stratigraphic_value().keys():
|
|
502
499
|
contacts.loc[contacts["name"] == k, "interface"] = interface_val
|
|
503
|
-
|
|
500
|
+
contacts = contacts.loc[
|
|
504
501
|
~np.isnan(contacts["interface"]),
|
|
505
502
|
["X", "Y", "Z", "feature_name", "interface"],
|
|
506
503
|
]
|
|
504
|
+
return contacts
|
|
505
|
+
|
|
506
|
+
@contacts.setter
|
|
507
|
+
def contacts(self, contacts):
|
|
508
|
+
"""Function to convert input contact to loopstructural input
|
|
509
|
+
|
|
510
|
+
either uses the thickness values or assigns unique ids given
|
|
511
|
+
the units named in stratigraphic order
|
|
512
|
+
|
|
513
|
+
Returns
|
|
514
|
+
-------
|
|
515
|
+
DataFrame
|
|
516
|
+
data frame with x,y,y,val/interface,feature_name
|
|
517
|
+
"""
|
|
518
|
+
if contacts is None:
|
|
519
|
+
return
|
|
520
|
+
self._contacts = contacts.copy()
|
|
521
|
+
self._update_feature_names(self._contacts)
|
|
507
522
|
|
|
508
523
|
@property
|
|
509
524
|
def contact_orientations(self):
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/input/project_file.py
RENAMED
|
@@ -34,24 +34,48 @@ class LoopProjectfileProcessor(ProcessInputData):
|
|
|
34
34
|
projectfile["stratigraphicLog"].ThicknessMedian,
|
|
35
35
|
)
|
|
36
36
|
)
|
|
37
|
-
fault_properties =
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
37
|
+
fault_properties = None
|
|
38
|
+
fault_edges = None
|
|
39
|
+
fault_edge_properties = None
|
|
40
|
+
if self.projectfile.faultLog.shape[0] > 0:
|
|
41
|
+
|
|
42
|
+
fault_properties = self.projectfile.faultLog
|
|
43
|
+
fault_properties.rename(
|
|
44
|
+
columns={
|
|
45
|
+
"avgDisplacement": "displacement",
|
|
46
|
+
"influenceDistance": "minor_axis",
|
|
47
|
+
"verticalRadius": "intermediate_axis",
|
|
48
|
+
"horizontalRadius": "major_axis",
|
|
49
|
+
"name": "fault_name",
|
|
50
|
+
},
|
|
51
|
+
inplace=True,
|
|
52
|
+
)
|
|
53
|
+
fault_locations = fault_properties.reset_index()[["fault_name", "eventId"]].merge(
|
|
54
|
+
fault_locations, on="eventId"
|
|
55
|
+
)
|
|
56
|
+
fault_orientations = fault_properties.reset_index()[["fault_name", "eventId"]].merge(
|
|
57
|
+
fault_orientations, on="eventId"
|
|
58
|
+
)
|
|
59
|
+
fault_properties.set_index("fault_name", inplace=True)
|
|
60
|
+
for i in fault_relationships.index:
|
|
61
|
+
fault_relationships.loc[i, "Fault1"] = faultLog.loc[
|
|
62
|
+
fault_relationships.loc[i, "eventId1"], "name"
|
|
63
|
+
]
|
|
64
|
+
fault_relationships.loc[i, "Fault2"] = faultLog.loc[
|
|
65
|
+
fault_relationships.loc[i, "eventId2"], "name"
|
|
66
|
+
]
|
|
67
|
+
fault_edges = []
|
|
68
|
+
fault_edge_properties = []
|
|
69
|
+
for i in fault_relationships.index:
|
|
70
|
+
fault_edges.append(
|
|
71
|
+
(fault_relationships.loc[i, "Fault1"], fault_relationships.loc[i, "Fault2"])
|
|
72
|
+
)
|
|
73
|
+
fault_edge_properties.append(
|
|
74
|
+
{
|
|
75
|
+
"type": fault_relationships.loc[i, "type"],
|
|
76
|
+
"angle": fault_relationships.loc[i, "angle"],
|
|
77
|
+
}
|
|
78
|
+
)
|
|
55
79
|
colours = dict(
|
|
56
80
|
zip(
|
|
57
81
|
self.projectfile.stratigraphicLog.name,
|
|
@@ -65,25 +89,6 @@ class LoopProjectfileProcessor(ProcessInputData):
|
|
|
65
89
|
)
|
|
66
90
|
)
|
|
67
91
|
|
|
68
|
-
for i in fault_relationships.index:
|
|
69
|
-
fault_relationships.loc[i, "Fault1"] = faultLog.loc[
|
|
70
|
-
fault_relationships.loc[i, "eventId1"], "name"
|
|
71
|
-
]
|
|
72
|
-
fault_relationships.loc[i, "Fault2"] = faultLog.loc[
|
|
73
|
-
fault_relationships.loc[i, "eventId2"], "name"
|
|
74
|
-
]
|
|
75
|
-
fault_edges = []
|
|
76
|
-
fault_edge_properties = []
|
|
77
|
-
for i in fault_relationships.index:
|
|
78
|
-
fault_edges.append(
|
|
79
|
-
(fault_relationships.loc[i, "Fault1"], fault_relationships.loc[i, "Fault2"])
|
|
80
|
-
)
|
|
81
|
-
fault_edge_properties.append(
|
|
82
|
-
{
|
|
83
|
-
"type": fault_relationships.loc[i, "type"],
|
|
84
|
-
"angle": fault_relationships.loc[i, "angle"],
|
|
85
|
-
}
|
|
86
|
-
)
|
|
87
92
|
super().__init__(
|
|
88
93
|
contacts=contacts,
|
|
89
94
|
contact_orientations=orientations,
|
|
@@ -91,8 +96,8 @@ class LoopProjectfileProcessor(ProcessInputData):
|
|
|
91
96
|
("sg", list(self.projectfile.stratigraphicLog.name))
|
|
92
97
|
], # needs to be updated,
|
|
93
98
|
thicknesses=thicknesses,
|
|
94
|
-
fault_orientations=fault_orientations,
|
|
95
|
-
fault_locations=fault_locations,
|
|
99
|
+
fault_orientations=fault_orientations if fault_orientations.shape[0] > 0 else None,
|
|
100
|
+
fault_locations=fault_locations if fault_locations.shape[0] > 0 else None,
|
|
96
101
|
fault_properties=fault_properties,
|
|
97
102
|
fault_edges=fault_edges, # list(fault_graph.edges),
|
|
98
103
|
colours=colours,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from typing import Optional, Union, Callable, List
|
|
4
|
+
from collections.abc import Iterable
|
|
4
5
|
import numpy as np
|
|
5
6
|
import numpy.typing as npt
|
|
6
7
|
from LoopStructural.utils.logging import getLogger
|
|
@@ -86,11 +87,14 @@ class LoopIsosurfacer:
|
|
|
86
87
|
all_values = self.callable(self.bounding_box.regular_grid(local=False))
|
|
87
88
|
## set value to mean value if its not specified
|
|
88
89
|
if values is None:
|
|
89
|
-
values = [(np.nanmax(all_values) - np.nanmin(all_values)) / 2]
|
|
90
|
-
if isinstance(values,
|
|
90
|
+
values = [((np.nanmax(all_values) - np.nanmin(all_values)) / 2) + np.nanmin(all_values)]
|
|
91
|
+
if isinstance(values, Iterable):
|
|
91
92
|
isovalues = values
|
|
92
93
|
elif isinstance(values, float):
|
|
93
94
|
isovalues = [values]
|
|
95
|
+
if isinstance(values, int) and values == 0:
|
|
96
|
+
values = 0.0 # assume 0 isosurface is meant to be a float
|
|
97
|
+
|
|
94
98
|
elif isinstance(values, int) and values < 1:
|
|
95
99
|
raise ValueError(
|
|
96
100
|
"Number of isosurfaces must be greater than 1. Either use a positive integer or provide a list or float for a specific isovalue."
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "1.6.5"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "1.6.3"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/refolded_fold.csv
RENAMED
|
File without changes
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/datasets/data/tabular_intrusion.csv
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/_cython/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/_discrete_interpolator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/_interpolator_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/_p1interpolator.py
RENAMED
|
File without changes
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/_p2interpolator.py
RENAMED
|
File without changes
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/_surfe_wrapper.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/supports/_3d_p2_tetra.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/supports/__init__.py
RENAMED
|
File without changes
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/supports/_aabb.py
RENAMED
|
File without changes
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/supports/_base_support.py
RENAMED
|
File without changes
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/interpolators/supports/_face_table.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/builders/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/fault/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/fold/__init__.py
RENAMED
|
File without changes
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/fold/_fold.py
RENAMED
|
File without changes
|
|
File without changes
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/fold/_foldframe.py
RENAMED
|
File without changes
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/features/fold/_svariogram.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/input/fault_network.py
RENAMED
|
File without changes
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/input/map2loop_processor.py
RENAMED
|
File without changes
|
{loopstructural-1.6.3 → loopstructural-1.6.5}/LoopStructural/modelling/intrusions/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|