LoopStructural 1.6.19__py3-none-any.whl → 1.6.20__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.

@@ -6,8 +6,9 @@ import logging
6
6
 
7
7
  import numpy as np
8
8
 
9
- from ._discrete_interpolator import DiscreteInterpolator
10
9
 
10
+ from ._discrete_interpolator import DiscreteInterpolator
11
+ from . import InterpolatorType
11
12
  logger = logging.getLogger(__name__)
12
13
 
13
14
 
@@ -37,7 +38,7 @@ class P1Interpolator(DiscreteInterpolator):
37
38
  "tpw": 1.0,
38
39
  "ipw": 1.0,
39
40
  }
40
-
41
+ self.type = InterpolatorType.PIECEWISE_LINEAR
41
42
  def add_gradient_constraints(self, w=1.0):
42
43
  pass
43
44
 
@@ -8,6 +8,7 @@ from typing import Optional, Callable
8
8
  import numpy as np
9
9
 
10
10
  from ..interpolators import DiscreteInterpolator
11
+ from . import InterpolatorType
11
12
 
12
13
  logger = logging.getLogger(__name__)
13
14
 
@@ -41,7 +42,7 @@ class P2Interpolator(DiscreteInterpolator):
41
42
  "tpw": 1.0,
42
43
  "ipw": 1.0,
43
44
  }
44
-
45
+ self.type = InterpolatorType.PIECEWISE_QUADRATIC
45
46
  def setup_interpolator(self, **kwargs):
46
47
  """
47
48
  Searches through kwargs for any interpolation weights and updates
@@ -21,6 +21,7 @@ from ...modelling.features import (
21
21
  UnconformityFeature,
22
22
  StructuralFrame,
23
23
  GeologicalFeature,
24
+ BaseFeature,
24
25
  FeatureType,
25
26
  )
26
27
  from ...modelling.features.fold import (
@@ -341,7 +342,7 @@ class GeologicalModel:
341
342
  feature : GeologicalFeature
342
343
  the geological feature to set
343
344
  """
344
- if not isinstance(feature, GeologicalFeature):
345
+ if not issubclass(type(feature), BaseFeature):
345
346
  raise TypeError("feature must be a GeologicalFeature")
346
347
  if feature.name != feature_name:
347
348
  raise ValueError("feature name does not match key")
@@ -616,7 +617,7 @@ class GeologicalModel:
616
617
  series_surface_name: str,
617
618
  *,
618
619
  index: Optional[int] = None,
619
- series_surface_data: Optional[pd.DataFrame] = None,
620
+ data: Optional[pd.DataFrame] = None,
620
621
  interpolatortype: str = "FDI",
621
622
  nelements: int = LoopStructuralConfig.nelements,
622
623
  tol=None,
@@ -671,13 +672,13 @@ class GeologicalModel:
671
672
  **kwargs,
672
673
  )
673
674
  # add data
674
- if series_surface_data is None:
675
- series_surface_data = self.data.loc[self.data["feature_name"] == series_surface_name]
675
+ if data is None:
676
+ data = self.data.loc[self.data["feature_name"] == series_surface_name]
676
677
 
677
- if series_surface_data.shape[0] == 0:
678
+ if data.shape[0] == 0:
678
679
  logger.warning("No data for {series_surface_data}, skipping")
679
680
  return
680
- series_builder.add_data_from_data_frame(self.prepare_data(series_surface_data))
681
+ series_builder.add_data_from_data_frame(self.prepare_data(data))
681
682
  self._add_faults(series_builder, features=faults)
682
683
 
683
684
  # build feature
@@ -696,7 +697,7 @@ class GeologicalModel:
696
697
  fold_frame_name: str,
697
698
  *,
698
699
  index: Optional[int] = None,
699
- fold_frame_data=None,
700
+ data=None,
700
701
  interpolatortype="FDI",
701
702
  nelements=LoopStructuralConfig.nelements,
702
703
  tol=None,
@@ -746,12 +747,12 @@ class GeologicalModel:
746
747
  **kwargs,
747
748
  )
748
749
  # add data
749
- if fold_frame_data is None:
750
- fold_frame_data = self.data.loc[self.data["feature_name"] == fold_frame_name]
751
- if fold_frame_data.shape[0] == 0:
750
+ if data is None:
751
+ data = self.data.loc[self.data["feature_name"] == fold_frame_name]
752
+ if data.shape[0] == 0:
752
753
  logger.warning(f"No data for {fold_frame_name}, skipping")
753
754
  return
754
- fold_frame_builder.add_data_from_data_frame(self.prepare_data(fold_frame_data))
755
+ fold_frame_builder.add_data_from_data_frame(self.prepare_data(data))
755
756
  self._add_faults(fold_frame_builder[0])
756
757
  self._add_faults(fold_frame_builder[1])
757
758
  self._add_faults(fold_frame_builder[2])
@@ -770,7 +771,7 @@ class GeologicalModel:
770
771
  foliation_name,
771
772
  *,
772
773
  index: Optional[int] = None,
773
- foliation_data=None,
774
+ data=None,
774
775
  interpolatortype="DFI",
775
776
  nelements=LoopStructuralConfig.nelements,
776
777
  buffer=0.1,
@@ -816,7 +817,7 @@ class GeologicalModel:
816
817
  fold_frame = self.features[-1]
817
818
  assert isinstance(fold_frame, FoldFrame), "Please specify a FoldFrame"
818
819
 
819
- fold = FoldEvent(fold_frame, name=f"Fold_{foliation_data}", invert_norm=invert_fold_norm)
820
+ fold = FoldEvent(fold_frame, name=f"Fold_{foliation_name}", invert_norm=invert_fold_norm)
820
821
 
821
822
  if interpolatortype != "DFI":
822
823
  logger.warning("Folded foliation only supports DFI interpolator, changing to DFI")
@@ -831,12 +832,12 @@ class GeologicalModel:
831
832
  model=self,
832
833
  **kwargs,
833
834
  )
834
- if foliation_data is None:
835
- foliation_data = self.data.loc[self.data["feature_name"] == foliation_name]
836
- if foliation_data.shape[0] == 0:
835
+ if data is None:
836
+ data = self.data.loc[self.data["feature_name"] == foliation_name]
837
+ if data.shape[0] == 0:
837
838
  logger.warning(f"No data for {foliation_name}, skipping")
838
839
  return
839
- series_builder.add_data_from_data_frame(self.prepare_data(foliation_data))
840
+ series_builder.add_data_from_data_frame(self.prepare_data(data))
840
841
 
841
842
  self._add_faults(series_builder)
842
843
  # series_builder.add_data_to_interpolator(True)
@@ -847,7 +848,7 @@ class GeologicalModel:
847
848
  # series_feature = series_builder.build(**kwargs)
848
849
  series_feature = series_builder.feature
849
850
  series_builder.update_build_arguments(kwargs)
850
- series_feature.type = FeatureType.INTERPOLATED
851
+ series_feature.type = FeatureType.FOLDED
851
852
  series_feature.fold = fold
852
853
 
853
854
  self._add_feature(series_feature,index)
@@ -858,7 +859,7 @@ class GeologicalModel:
858
859
  fold_frame_name: str,
859
860
  *,
860
861
  index: Optional[int] = None,
861
- fold_frame_data: Optional[pd.DataFrame] = None,
862
+ data: Optional[pd.DataFrame] = None,
862
863
  interpolatortype="FDI",
863
864
  nelements=LoopStructuralConfig.nelements,
864
865
  fold_frame=None,
@@ -913,7 +914,7 @@ class GeologicalModel:
913
914
  logger.info("Using last feature as fold frame")
914
915
  fold_frame = self.features[-1]
915
916
  assert isinstance(fold_frame, FoldFrame), "Please specify a FoldFrame"
916
- fold = FoldEvent(fold_frame, name=f"Fold_{fold_frame_data}")
917
+ fold = FoldEvent(fold_frame, name=f"Fold_{fold_frame_name}")
917
918
 
918
919
  interpolatortypes = [
919
920
  "DFI",
@@ -930,9 +931,9 @@ class GeologicalModel:
930
931
  model=self,
931
932
  **kwargs,
932
933
  )
933
- if fold_frame_data is None:
934
- fold_frame_data = self.data[self.data["feature_name"] == fold_frame_name]
935
- fold_frame_builder.add_data_from_data_frame(self.prepare_data(fold_frame_data))
934
+ if data is None:
935
+ data = self.data[self.data["feature_name"] == fold_frame_name]
936
+ fold_frame_builder.add_data_from_data_frame(self.prepare_data(data))
936
937
 
937
938
  for i in range(3):
938
939
  self._add_faults(fold_frame_builder[i])
@@ -1293,7 +1294,7 @@ class GeologicalModel:
1293
1294
  displacement: float,
1294
1295
  *,
1295
1296
  index: Optional[int] = None,
1296
- fault_data: Optional[pd.DataFrame] = None,
1297
+ data: Optional[pd.DataFrame] = None,
1297
1298
  interpolatortype="FDI",
1298
1299
  tol=None,
1299
1300
  fault_slip_vector=None,
@@ -1387,9 +1388,9 @@ class GeologicalModel:
1387
1388
  model=self,
1388
1389
  **kwargs,
1389
1390
  )
1390
- if fault_data is None:
1391
- fault_data = self.data.loc[self.data["feature_name"] == fault_name]
1392
- if fault_data.shape[0] == 0:
1391
+ if data is None:
1392
+ data = self.data.loc[self.data["feature_name"] == fault_name]
1393
+ if data.shape[0] == 0:
1393
1394
  logger.warning(f"No data for {fault_name}, skipping")
1394
1395
  return
1395
1396
 
@@ -1405,7 +1406,7 @@ class GeologicalModel:
1405
1406
  if intermediate_axis:
1406
1407
  intermediate_axis = intermediate_axis
1407
1408
  fault_frame_builder.create_data_from_geometry(
1408
- fault_frame_data=self.prepare_data(fault_data),
1409
+ fault_frame_data=self.prepare_data(data),
1409
1410
  fault_center=fault_center,
1410
1411
  fault_normal_vector=fault_normal_vector,
1411
1412
  fault_slip_vector=fault_slip_vector,
@@ -271,7 +271,7 @@ class BaseFeature(metaclass=ABCMeta):
271
271
 
272
272
  def surfaces(
273
273
  self,
274
- value: Union[float, int, List[Union[float, int]]],
274
+ value: Optional[Union[float, int, List[Union[float, int]]]] = None,
275
275
  bounding_box=None,
276
276
  name: Optional[Union[List[str], str]] = None,
277
277
  colours: Optional[Union[str, np.ndarray]] = None,
@@ -293,6 +293,7 @@ class BaseFeature(metaclass=ABCMeta):
293
293
  raise ValueError("Must specify bounding box")
294
294
  bounding_box = self.model.bounding_box
295
295
  regions = self.regions
296
+
296
297
  try:
297
298
  self.regions = [
298
299
  r for r in self.regions if r.name != self.name and r.parent.name != self.name
@@ -1,5 +1,5 @@
1
1
  from LoopStructural.modelling.features.fold import FoldEvent
2
- from LoopStructural.modelling.features.builders import FoldedFeatureBuilder
2
+ from LoopStructural.modelling.features.builders import FoldedFeatureBuilder, StructuralFrameBuilder
3
3
  def add_fold_to_feature(feature, fold_frame,**kwargs):
4
4
  fold = FoldEvent(fold_frame, name=f"Fold_{feature.name}", invert_norm=kwargs.get('invert_fold_norm', False))
5
5
 
@@ -11,3 +11,26 @@ def add_fold_to_feature(feature, fold_frame,**kwargs):
11
11
  feature = builder.feature
12
12
  feature.fold = fold
13
13
  return feature
14
+
15
+ def convert_feature_to_structural_frame(feature, **kwargs):
16
+ """
17
+ Convert a geological feature to a structural frame by adding the feature to the frame
18
+
19
+ Parameters
20
+ ----------
21
+ feature : GeologicalFeature
22
+ the geological feature to convert
23
+
24
+ Returns
25
+ -------
26
+ StructuralFrame
27
+ the updated structural frame with the feature added
28
+ """
29
+ builder = feature.builder
30
+
31
+ new_builder = StructuralFrameBuilder.from_feature_builder(
32
+ builder,
33
+ **kwargs
34
+ )
35
+ return new_builder.frame
36
+
@@ -134,7 +134,7 @@ class StructuralFrame(BaseFeature):
134
134
  v[:, 0] = self.features[0].evaluate_value(pos, ignore_regions=ignore_regions)
135
135
  v[:, 1] = self.features[1].evaluate_value(pos, ignore_regions=ignore_regions)
136
136
  v[:, 2] = self.features[2].evaluate_value(pos, ignore_regions=ignore_regions)
137
- return v
137
+ return v[:,0]
138
138
 
139
139
  def evaluate_gradient(self, pos, i=None, ignore_regions=False):
140
140
  """
@@ -152,11 +152,7 @@ class StructuralFrame(BaseFeature):
152
152
  """
153
153
  if i is not None:
154
154
  return self.features[i].support.evaluate_gradient(pos, ignore_regions=ignore_regions)
155
- return (
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),
159
- )
155
+ return self.features[0].support.evaluate_gradient(pos, ignore_regions=ignore_regions)
160
156
 
161
157
  def get_data(self, value_map: Optional[dict] = None) -> List[Union[ValuePoints, VectorPoints]]:
162
158
  """Return the data associated with the features in the
@@ -1,5 +1,6 @@
1
1
  from ....modelling.features.builders import GeologicalFeatureBuilder
2
2
  from ....modelling.features.fold.fold_function import FoldRotationType, get_fold_rotation_profile
3
+ from ....modelling.features import FeatureType
3
4
  import numpy as np
4
5
 
5
6
  from ....utils import getLogger, InterpolatorError
@@ -48,11 +49,13 @@ class FoldedFeatureBuilder(GeologicalFeatureBuilder):
48
49
  region=region,
49
50
  **kwargs,
50
51
  )
52
+ self._feature.type = FeatureType.FOLDED
51
53
  # link the interpolator to the fold object
52
54
  self.interpolator.fold = fold
53
55
  self.fold = fold
54
56
  self.fold_weights = fold_weights
55
- self.kwargs = kwargs
57
+ self.update_build_arguments(kwargs)
58
+ # self.kwargs = kwargs
56
59
  self.svario = svario
57
60
  self.axis_profile_type = axis_profile_type
58
61
  self.limb_profile_type = limb_profile_type
@@ -87,7 +90,7 @@ class FoldedFeatureBuilder(GeologicalFeatureBuilder):
87
90
 
88
91
  def set_fold_axis(self):
89
92
  """calculates the fold axis/ fold axis rotation and adds this to the fold"""
90
- kwargs = self.kwargs
93
+ kwargs = self.build_arguments
91
94
  fold_axis = kwargs.get("fold_axis", None)
92
95
  if fold_axis is not None:
93
96
  fold_axis = np.array(fold_axis)
@@ -112,7 +115,7 @@ class FoldedFeatureBuilder(GeologicalFeatureBuilder):
112
115
 
113
116
  def set_fold_limb_rotation(self):
114
117
  """Calculates the limb rotation of the fold and adds it to the fold object"""
115
- kwargs = self.kwargs
118
+ kwargs = self.build_arguments
116
119
  # need to calculate the fold axis before the fold limb rotation angle
117
120
  if self.fold.fold_axis is None:
118
121
  self.set_fold_axis()
@@ -7,6 +7,7 @@ from typing import Union
7
7
  from LoopStructural.utils.exceptions import LoopException
8
8
 
9
9
  import numpy as np
10
+ import copy
10
11
 
11
12
  from ....utils import getLogger
12
13
  from ....datatypes import BoundingBox
@@ -120,6 +121,38 @@ class StructuralFrameBuilder:
120
121
  model=self.model,
121
122
  )
122
123
  self._frame.builder = self
124
+
125
+ @classmethod
126
+ def from_feature_builder(cls, feature_builder, **kwargs):
127
+ """
128
+ Create a structural frame builder from an existing feature builder
129
+
130
+ Parameters
131
+ ----------
132
+ feature_builder - a geological feature builder
133
+ kwargs
134
+
135
+ Returns
136
+ -------
137
+
138
+ """
139
+ if not isinstance(feature_builder, GeologicalFeatureBuilder):
140
+ raise LoopException(
141
+ f"feature_builder is {type(feature_builder)} and must be a GeologicalFeatureBuilder"
142
+ )
143
+ if hasattr(feature_builder, 'fold'):
144
+ logger.warning("feature builder has a fold - using this to create a folded frame")
145
+ kwargs['fold'] = copy.deepcopy(feature_builder.fold)
146
+ builder = cls(
147
+ interpolatortype=[feature_builder.interpolator.type]*3,
148
+ bounding_box=feature_builder.model.bounding_box,
149
+ nelements=[feature_builder.interpolator.n_elements]*3,
150
+ name=feature_builder.name,
151
+ **kwargs
152
+ )
153
+ builder.add_data_from_data_frame(feature_builder.data)
154
+ return builder
155
+
123
156
  @property
124
157
  def build_arguments(self):
125
158
  return self.builders[0].build_arguments
@@ -1,6 +1,5 @@
1
1
  """ """
2
2
 
3
- from ._fold import FoldEvent
4
3
  from ._svariogram import SVariogram
5
4
  from ._fold_rotation_angle_feature import FoldRotationAngleFeature
6
5
  from ._foldframe import FoldFrame
LoopStructural/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "1.6.19"
1
+ __version__ = "1.6.20"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: LoopStructural
3
- Version: 1.6.19
3
+ Version: 1.6.20
4
4
  Summary: 3D geological modelling
5
5
  Author-email: Lachlan Grose <lachlan.grose@monash.edu>
6
6
  License: MIT
@@ -1,5 +1,5 @@
1
1
  LoopStructural/__init__.py,sha256=9tewNqv_9i7vUYMb1srpOWpf65W-moA2HvrQa9gyafA,2241
2
- LoopStructural/version.py,sha256=I8uXXwavJaLZ9jm7LRGiJ1SesWg2mEPBHjsl8No1pA4,23
2
+ LoopStructural/version.py,sha256=d5oU8Ps6zEkGrR04CFBTRON1Yn4q4FgfElf4dVF75XY,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
@@ -50,8 +50,8 @@ LoopStructural/interpolators/_interpolator_builder.py,sha256=Z8bhmco5aSQX19A8It2
50
50
  LoopStructural/interpolators/_interpolator_factory.py,sha256=fbjebXSe5IgTol1tnBlnsw9gD426v-TGkX3gquIg7LI,2782
51
51
  LoopStructural/interpolators/_interpolatortype.py,sha256=q8U9JGyFpO2FBA9XsMI5ojv3TV1LYqyvYHzLAbHcj9A,593
52
52
  LoopStructural/interpolators/_operator.py,sha256=PZOUzq9OMaJdG151dSLIo7AxRuhTj6-zEAzFZo-EOJU,1114
53
- LoopStructural/interpolators/_p1interpolator.py,sha256=o602nLrUbBQTG9G2nBtv9xUQtlgs0kyT8G1wZuyZl2M,8955
54
- LoopStructural/interpolators/_p2interpolator.py,sha256=UT-As5RNsmOwHOzO_6FiRcAwlNHfi4ILbJw2LGpwKAw,10274
53
+ LoopStructural/interpolators/_p1interpolator.py,sha256=1G77G91hNPSSOAjUK_1Md5vbfHkjUbBL5ZtphBsRMc4,9039
54
+ LoopStructural/interpolators/_p2interpolator.py,sha256=4TT5i1bRrZDjdkg28_z_gGcVnWYnGDSBav1Yr6MIFBI,10361
55
55
  LoopStructural/interpolators/_surfe_wrapper.py,sha256=BwHOR2aV-SZU0IgcN03iZT_T-Z5EVXjDQ7Pr-a6t4uI,6932
56
56
  LoopStructural/interpolators/_cython/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
57
  LoopStructural/interpolators/supports/_2d_base_unstructured.py,sha256=1bOP-BZk1AcBSVRh2IVPCpKSYibwgzbnlC_2xX0xBGA,11879
@@ -72,30 +72,30 @@ LoopStructural/interpolators/supports/_support_factory.py,sha256=XNAxnr-JS3KEhds
72
72
  LoopStructural/modelling/__init__.py,sha256=a-bq2gDhyUlcky5l9kl_IP3ExMdohkgYjQz2V8madQE,902
73
73
  LoopStructural/modelling/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
74
  LoopStructural/modelling/core/fault_topology.py,sha256=bChp5dnfc-4GJRENWxB14mEW_13uBMh5ZYRKbLdjweE,11195
75
- LoopStructural/modelling/core/geological_model.py,sha256=qlK4yI_6ZWM08lfS8ynqD612_VEHFRgVDDJgjzCIrZA,67414
75
+ LoopStructural/modelling/core/geological_model.py,sha256=65iLvmBH4YzRkaa2IUX1nrJ5Ebp_RWrgSMwY0CI63No,67171
76
76
  LoopStructural/modelling/core/stratigraphic_column.py,sha256=lOQb3zWS6EEqSzCMZsy9Q9ncFFkIku_lNjgpHtD7zCs,21860
77
77
  LoopStructural/modelling/features/__init__.py,sha256=Vf-qd5EDBtJ1DpuXXyCcw2-wf6LWPRW5wzxDEO3vOc8,939
78
78
  LoopStructural/modelling/features/_analytical_feature.py,sha256=U_g86LgQhYY2359rdsDqpvziYwqrWkc5EdvhJARiUWo,3597
79
- LoopStructural/modelling/features/_base_geological_feature.py,sha256=kGyrbb8nNzfi-M8WSrVMEQYKtxThdcBxaji5HKXtAqw,13483
79
+ LoopStructural/modelling/features/_base_geological_feature.py,sha256=otphU5IrJ5ES3b_r0m2bszj7urOvzaIoVPwKjNqJAI0,13509
80
80
  LoopStructural/modelling/features/_cross_product_geological_feature.py,sha256=GIyCHUdE6F-bse2e4puG9V2f7qRtDVfby5PRe2BboD4,3021
81
- LoopStructural/modelling/features/_feature_converters.py,sha256=gG6Gxidm4PYV3PqkWi-auefusHB-ZGuVSgORcM9yisQ,499
81
+ LoopStructural/modelling/features/_feature_converters.py,sha256=UPpmElg8K4CY4_9t72aXpLNK0Qt2nY5ABvTdWYcsX5o,1071
82
82
  LoopStructural/modelling/features/_geological_feature.py,sha256=V5Ars8utx-AsEPVgMsoMzHFREeIByodzPPdEwblPGbo,11283
83
83
  LoopStructural/modelling/features/_lambda_geological_feature.py,sha256=GiB19l6v5WvvR8CitATZvCwaOfRyLuzchoXzpNupsfM,5743
84
84
  LoopStructural/modelling/features/_projected_vector_feature.py,sha256=aifVLgn2spmK7GGlO0iHDewf1pFL-QoRzZEePTZwX1s,3017
85
85
  LoopStructural/modelling/features/_region.py,sha256=TB4qnoTDQM2VgRjgyODN839fKe3kuRYLllJj0xnDKXo,478
86
- LoopStructural/modelling/features/_structural_frame.py,sha256=e3QmNHLwuZc5PX3rLafocmBLNTclO90AXB4BRILCFC4,5044
86
+ LoopStructural/modelling/features/_structural_frame.py,sha256=0FA_HxOFnxmEuU9fwvDCZ4kjsQoKGC_IeRGDp-AnFso,4852
87
87
  LoopStructural/modelling/features/_unconformity_feature.py,sha256=2Bx0BI38YLdcNvDWuP9E1pKFN4orEUq9aC8b5xG1UVk,2362
88
88
  LoopStructural/modelling/features/builders/__init__.py,sha256=Gqld1C-PcaXfJ8vpkWMDCmehmd3hZNYQk1knPtl59Bk,266
89
89
  LoopStructural/modelling/features/builders/_base_builder.py,sha256=N3txGC98V08A8-k2TLdoIWgWLfblZ91kaTvciPq_QVM,3750
90
90
  LoopStructural/modelling/features/builders/_fault_builder.py,sha256=_DZ0Hy_-jjm2fFU-5lY60zGisixdUWbAjsOQzMFKigY,25359
91
- LoopStructural/modelling/features/builders/_folded_feature_builder.py,sha256=SuJKnTxcrwTIz3y6Ph9xNKm0RbXSNZEy89vd8epAefQ,7377
91
+ LoopStructural/modelling/features/builders/_folded_feature_builder.py,sha256=sbyTI3McT1UBgTc1TPOrU4ggwcGYBGlCEzVk4stlGbs,7536
92
92
  LoopStructural/modelling/features/builders/_geological_feature_builder.py,sha256=7XhgwPXQZkky4Gnr4Q3t95YlDdtJ6mjBk7dsjzXB2QI,22236
93
- LoopStructural/modelling/features/builders/_structural_frame_builder.py,sha256=ms3-fuFpDEarjzYU5W499TquOIlTwHPUibVxIypfmWY,8019
93
+ LoopStructural/modelling/features/builders/_structural_frame_builder.py,sha256=xWlCybV3Av2JBEk6Y-HRKbSggxUKlUsmfiULaUEBICo,9153
94
94
  LoopStructural/modelling/features/fault/__init__.py,sha256=4u0KfYzmoO-ddFGo9qd9ov0gBoLqBiPAUsaw5zhEOAQ,189
95
95
  LoopStructural/modelling/features/fault/_fault_function.py,sha256=QEPh2jIvgD68hEJc5SM5xuMzZw-93V1me1ZbK9G2TB0,12655
96
96
  LoopStructural/modelling/features/fault/_fault_function_feature.py,sha256=4m0jVNx7ewrVI0pECI1wNciv8Cy8FzhZrYDjKJ_e2GU,2558
97
97
  LoopStructural/modelling/features/fault/_fault_segment.py,sha256=BEIVAY_-iQYYuoyIj1doq_cDLgmMpY0PDYBiuBXOjN8,18309
98
- LoopStructural/modelling/features/fold/__init__.py,sha256=Id6XlE4NSXUEBfHtrqcC7yLByngjMfK2IDKaNGEIFJ8,204
98
+ LoopStructural/modelling/features/fold/__init__.py,sha256=hQNj267TyFTJD1_Pu6XyjogSTrcJ-TSPQdWnMCDbSLo,175
99
99
  LoopStructural/modelling/features/fold/_fold.py,sha256=bPnnLUSiF4uoMRg8aHoOSTPRgaM0JyLoRQPu5_A-J3w,5448
100
100
  LoopStructural/modelling/features/fold/_fold_rotation_angle_feature.py,sha256=CXLbFRQ3CrTMAcHmfdbKcmSvvLs9_6TLe0Wqi1pK2tg,892
101
101
  LoopStructural/modelling/features/fold/_foldframe.py,sha256=Rgf5aofN0OVDTZ2pzqLzAGlJUO2rnNm3aFvLSnH77yo,7669
@@ -135,8 +135,8 @@ LoopStructural/utils/regions.py,sha256=SjCC40GI7_n03G4mlcmvyrBgJFbxnvB3leBzXWco3
135
135
  LoopStructural/utils/typing.py,sha256=29uVSTZdzXXH-jdlaYyBWZ1gQ2-nlZ2-XoVgG_PXNFY,157
136
136
  LoopStructural/utils/utils.py,sha256=2Z4zVE6G752-SPmM29zebk82bROJxEwi_YiiJjcVED4,2438
137
137
  LoopStructural/visualisation/__init__.py,sha256=5BDgKor8-ae6DrS7IZybJ3Wq_pTnCchxuY4EgzA7v1M,318
138
- loopstructural-1.6.19.dist-info/licenses/LICENSE,sha256=ZqGeNFOgmYevj7Ld7Q-kR4lAxWXuBRUdUmPC6XM_py8,1071
139
- loopstructural-1.6.19.dist-info/METADATA,sha256=JO4cMFLRwyWvEv7rH880jwCGDmIVx_JXqnrfpwplljc,6453
140
- loopstructural-1.6.19.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
141
- loopstructural-1.6.19.dist-info/top_level.txt,sha256=QtQErKzYHfg6ddxTQ1NyaTxXBVM6qAqrM_vxEPyXZLg,15
142
- loopstructural-1.6.19.dist-info/RECORD,,
138
+ loopstructural-1.6.20.dist-info/licenses/LICENSE,sha256=ZqGeNFOgmYevj7Ld7Q-kR4lAxWXuBRUdUmPC6XM_py8,1071
139
+ loopstructural-1.6.20.dist-info/METADATA,sha256=WsPEAJMDXd0FITuc_laYIGCvPmBR6vZVvPT2X6pLhRA,6453
140
+ loopstructural-1.6.20.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
141
+ loopstructural-1.6.20.dist-info/top_level.txt,sha256=QtQErKzYHfg6ddxTQ1NyaTxXBVM6qAqrM_vxEPyXZLg,15
142
+ loopstructural-1.6.20.dist-info/RECORD,,