LoopStructural 1.8.2__tar.gz → 1.8.4__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.
Files changed (128) hide show
  1. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/core/_model_feature_factory.py +22 -4
  2. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/core/_model_relationships.py +10 -3
  3. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/core/geological_model.py +2 -1
  4. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/builders/_folded_feature_builder.py +7 -1
  5. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/fold/_fold.py +3 -14
  6. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural.egg-info/PKG-INFO +1 -1
  7. {loopstructural-1.8.2 → loopstructural-1.8.4}/PKG-INFO +1 -1
  8. {loopstructural-1.8.2 → loopstructural-1.8.4}/pyproject.toml +2 -1
  9. {loopstructural-1.8.2 → loopstructural-1.8.4}/LICENSE +0 -0
  10. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/__init__.py +0 -0
  11. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/__init__.py +0 -0
  12. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/_base.py +0 -0
  13. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/_example_models.py +0 -0
  14. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/data/claudius.csv +0 -0
  15. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/data/claudiusbb.txt +0 -0
  16. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/data/duplex.csv +0 -0
  17. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/data/duplexbb.txt +0 -0
  18. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/data/fault_trace/fault_trace.cpg +0 -0
  19. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/data/fault_trace/fault_trace.dbf +0 -0
  20. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/data/fault_trace/fault_trace.prj +0 -0
  21. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/data/fault_trace/fault_trace.shp +0 -0
  22. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/data/fault_trace/fault_trace.shx +0 -0
  23. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/data/geological_map_data/bbox.csv +0 -0
  24. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/data/geological_map_data/contacts.csv +0 -0
  25. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/data/geological_map_data/fault_displacement.csv +0 -0
  26. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/data/geological_map_data/fault_edges.txt +0 -0
  27. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/data/geological_map_data/fault_locations.csv +0 -0
  28. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/data/geological_map_data/fault_orientations.csv +0 -0
  29. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/data/geological_map_data/stratigraphic_order.csv +0 -0
  30. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/data/geological_map_data/stratigraphic_orientations.csv +0 -0
  31. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/data/geological_map_data/stratigraphic_thickness.csv +0 -0
  32. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/data/intrusion.csv +0 -0
  33. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/data/intrusionbb.txt +0 -0
  34. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/data/onefoldbb.txt +0 -0
  35. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/data/onefolddata.csv +0 -0
  36. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/data/refolded_bb.txt +0 -0
  37. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/data/refolded_fold.csv +0 -0
  38. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datasets/data/tabular_intrusion.csv +0 -0
  39. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/datatypes/__init__.py +0 -0
  40. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/export/exporters.py +0 -0
  41. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/export/file_formats.py +0 -0
  42. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/export/geoh5.py +0 -0
  43. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/export/gocad.py +0 -0
  44. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/export/omf_wrapper.py +0 -0
  45. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/geometry/__init__.py +0 -0
  46. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/geometry/_structured_grid.py +0 -0
  47. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/interpolators/__init__.py +0 -0
  48. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/interpolators/_api.py +0 -0
  49. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/interpolators/_builders.py +0 -0
  50. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/interpolators/_constant_norm.py +0 -0
  51. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/interpolators/_cython/__init__.py +0 -0
  52. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/interpolators/_discrete_fold_interpolator.py +0 -0
  53. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/interpolators/_interpolatortype.py +0 -0
  54. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/__init__.py +0 -0
  55. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/core/__init__.py +0 -0
  56. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/core/_feature_registry.py +0 -0
  57. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/core/_model_exporter.py +0 -0
  58. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/core/_model_serializer.py +0 -0
  59. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/core/fault_topology.py +0 -0
  60. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/core/stratigraphic_column.py +0 -0
  61. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/__init__.py +0 -0
  62. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/_analytical_feature.py +0 -0
  63. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/_base_geological_feature.py +0 -0
  64. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/_cross_product_geological_feature.py +0 -0
  65. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/_feature_converters.py +0 -0
  66. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/_geological_feature.py +0 -0
  67. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/_lambda_geological_feature.py +0 -0
  68. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/_projected_vector_feature.py +0 -0
  69. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/_region.py +0 -0
  70. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/_structural_frame.py +0 -0
  71. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/_unconformity_feature.py +0 -0
  72. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/builders/__init__.py +0 -0
  73. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/builders/_analytical_fold_builder.py +0 -0
  74. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/builders/_base_builder.py +0 -0
  75. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/builders/_fault_builder.py +0 -0
  76. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/builders/_geological_feature_builder.py +0 -0
  77. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/builders/_structural_frame_builder.py +0 -0
  78. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/fault/__init__.py +0 -0
  79. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/fault/_fault_function.py +0 -0
  80. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/fault/_fault_function_feature.py +0 -0
  81. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/fault/_fault_segment.py +0 -0
  82. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/fold/__init__.py +0 -0
  83. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/fold/_fold_rotation_angle_feature.py +0 -0
  84. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/fold/_foldframe.py +0 -0
  85. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/fold/_svariogram.py +0 -0
  86. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/fold/fold_function/__init__.py +0 -0
  87. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/fold/fold_function/_base_fold_rotation_angle.py +0 -0
  88. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/fold/fold_function/_fourier_series_fold_rotation_angle.py +0 -0
  89. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/fold/fold_function/_lambda_fold_rotation_angle.py +0 -0
  90. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/features/fold/fold_function/_trigo_fold_rotation_angle.py +0 -0
  91. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/input/__init__.py +0 -0
  92. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/input/fault_network.py +0 -0
  93. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/input/map2loop_processor.py +0 -0
  94. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/input/process_data.py +0 -0
  95. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/input/project_file.py +0 -0
  96. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/intrusions/__init__.py +0 -0
  97. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/intrusions/geom_conceptual_models.py +0 -0
  98. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/intrusions/geometric_scaling_functions.py +0 -0
  99. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/intrusions/intrusion_builder.py +0 -0
  100. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/intrusions/intrusion_feature.py +0 -0
  101. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/intrusions/intrusion_frame.py +0 -0
  102. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/modelling/intrusions/intrusion_frame_builder.py +0 -0
  103. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/utils/__init__.py +0 -0
  104. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/utils/_api_registry.py +0 -0
  105. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/utils/_surface.py +0 -0
  106. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/utils/_transformation.py +0 -0
  107. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/utils/colours.py +0 -0
  108. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/utils/config.py +0 -0
  109. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/utils/dtm_creator.py +0 -0
  110. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/utils/exceptions.py +0 -0
  111. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/utils/features.py +0 -0
  112. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/utils/helper.py +0 -0
  113. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/utils/json_encoder.py +0 -0
  114. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/utils/linalg.py +0 -0
  115. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/utils/logging.py +0 -0
  116. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/utils/maths.py +0 -0
  117. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/utils/observer.py +0 -0
  118. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/utils/regions.py +0 -0
  119. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/utils/typing.py +0 -0
  120. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/utils/utils.py +0 -0
  121. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural/visualisation/__init__.py +0 -0
  122. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural.egg-info/SOURCES.txt +0 -0
  123. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural.egg-info/dependency_links.txt +0 -0
  124. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural.egg-info/requires.txt +0 -0
  125. {loopstructural-1.8.2 → loopstructural-1.8.4}/LoopStructural.egg-info/top_level.txt +0 -0
  126. {loopstructural-1.8.2 → loopstructural-1.8.4}/README.md +0 -0
  127. {loopstructural-1.8.2 → loopstructural-1.8.4}/setup.cfg +0 -0
  128. {loopstructural-1.8.2 → loopstructural-1.8.4}/setup.py +0 -0
@@ -31,6 +31,9 @@ from ...utils import getLogger
31
31
 
32
32
  logger = getLogger(__name__)
33
33
 
34
+ # interpolator types that implement fold constraints
35
+ FOLD_INTERPOLATOR_TYPES = ("DFI", "P2Fold")
36
+
34
37
 
35
38
  class ModelFeatureFactory:
36
39
  @staticmethod
@@ -216,6 +219,13 @@ class ModelFeatureFactory:
216
219
  fold_frame : FoldFrame
217
220
  svario : Boolean
218
221
  whether to calculate svariograms, saves time if avoided
222
+ interpolatortype : str
223
+ ``"DFI"`` (default, piecewise linear) or ``"P2Fold"`` (piecewise quadratic).
224
+ Other values are replaced by ``"DFI"`` with a warning.
225
+ nelements : int
226
+ requested structured-grid cell budget. Each cell splits into five
227
+ tetrahedra. For ``"P2Fold"``, a request of 1e4 gave about 56k tets
228
+ and 86k unknowns in the Bermagui validation; inspect the actual counts
219
229
  kwargs
220
230
  additional kwargs to be passed through to other functions
221
231
 
@@ -227,6 +237,7 @@ class ModelFeatureFactory:
227
237
  Notes
228
238
  -----
229
239
 
240
+ - The P2 mesh is larger than the model box because of ``buffer``.
230
241
  - Building a folded foliation uses the fold interpolation code from Laurent et al., 2016
231
242
  and fold profile fitting from Grose et al., 2017. For more information about the fold modelling
232
243
  see :class:`LoopStructural.modelling.features.fold.FoldEvent`,
@@ -245,8 +256,11 @@ class ModelFeatureFactory:
245
256
 
246
257
  fold = FoldEvent(fold_frame, name=f"Fold_{foliation_name}", invert_norm=invert_fold_norm)
247
258
 
248
- if interpolatortype != "DFI":
249
- logger.warning("Folded foliation only supports DFI interpolator, changing to DFI")
259
+ if interpolatortype not in FOLD_INTERPOLATOR_TYPES:
260
+ logger.warning(
261
+ f"Folded foliation only supports {FOLD_INTERPOLATOR_TYPES} interpolators, "
262
+ f"changing {interpolatortype} to DFI"
263
+ )
250
264
  interpolatortype = "DFI"
251
265
  series_builder = FoldedFeatureBuilder(
252
266
  interpolatortype=interpolatortype,
@@ -300,7 +314,10 @@ class ModelFeatureFactory:
300
314
  fold_frame_data : pandas data frame, optional
301
315
  data frame containing the fold frame data, if not specified uses the model data
302
316
  interpolatortype : str
303
- the type of interpolator to use, default is 'FDI' (unused) 5/6/2025
317
+ ``"DFI"`` or ``"P2Fold"`` sets the interpolator of the first (fold) coordinate.
318
+ Any other value gives ``"DFI"``. The other two coordinates always use FDI.
319
+ ``nelements`` is a structured-grid cell budget, not a literal
320
+ tetrahedron count. P2 adds edge nodes; inspect the actual dof.
304
321
  fold_frame : StructuralFrame, optional
305
322
  the fold frame for the fold if not specified uses last feature added
306
323
  nelements : int
@@ -342,8 +359,9 @@ class ModelFeatureFactory:
342
359
  raise TypeError("Please specify a FoldFrame")
343
360
  fold = FoldEvent(fold_frame, name=f"Fold_{fold_frame_name}")
344
361
 
362
+ # the first coordinate carries the fold constraints, the others are plain FDI
345
363
  interpolatortypes = [
346
- "DFI",
364
+ interpolatortype if interpolatortype in FOLD_INTERPOLATOR_TYPES else "DFI",
347
365
  "FDI",
348
366
  "FDI",
349
367
  ]
@@ -66,7 +66,8 @@ class FeatureRelationshipManager:
66
66
  def add_domain_fault_below(model, domain_fault):
67
67
  """
68
68
  Looks through the feature list and adds any the domain_fault to the features
69
- that already exist in the stack until an unconformity is reached. domain faults
69
+ that already exist in the stack until an unconformity or another domain
70
+ fault is reached (that boundary is not cropped). domain faults
70
71
  to the feature. The domain fault masks everything where the fault scalar field
71
72
  is < 0 as being active when added to feature.
72
73
 
@@ -80,9 +81,15 @@ class FeatureRelationshipManager:
80
81
  for f in reversed(model.features):
81
82
  if f.name == domain_fault.name:
82
83
  continue
83
- f.add_region(region)
84
- if f.type == FeatureType.UNCONFORMITY:
84
+ if f.type == FeatureType.UNCONFORMITY or f.type == FeatureType.DOMAINFAULT:
85
+ # An unconformity or domain fault added before this one is
86
+ # the boundary above the features this domain fault crops.
87
+ # It is a stopping point and is not itself cropped, else the
88
+ # boundary surface is removed on one side of this fault.
89
+ # This matches add_unconformity, which also stops before it
90
+ # crops.
85
91
  break
92
+ f.add_region(region)
86
93
 
87
94
  @staticmethod
88
95
  def add_unconformity_above(model, feature):
@@ -793,7 +793,8 @@ class GeologicalModel:
793
793
  """Create a folded foliation and add it to the model.
794
794
 
795
795
  See :meth:`~._model_feature_factory.ModelFeatureFactory.build_folded_foliation`
796
- for parameter documentation.
796
+ for parameter documentation. ``interpolatortype`` is ``"DFI"`` (default)
797
+ or ``"P2Fold"``.
797
798
  Thin wrapper around :meth:`create_and_add_feature` (see
798
799
  ``API.md``); kept as a stable, unchanged entry point.
799
800
  """
@@ -1,6 +1,7 @@
1
1
  import numpy as np
2
2
 
3
3
  from ....geometry import BoundingBox
4
+ from ....interpolators import InterpolatorType
4
5
  from ....modelling.features import FeatureType
5
6
  from ._geological_feature_builder import GeologicalFeatureBuilder
6
7
  from ....modelling.features.fold.fold_function import FoldRotationType, get_fold_rotation_profile
@@ -71,8 +72,13 @@ class FoldedFeatureBuilder(GeologicalFeatureBuilder):
71
72
  if not isinstance(feature_builder, GeologicalFeatureBuilder):
72
73
  logger.error(f'Feature builder is {type(feature_builder)} not GeologicalFeatureBuilder')
73
74
  raise TypeError("feature_builder must be an instance of GeologicalFeatureBuilder")
75
+ # keep the fold type of the source builder, DFI otherwise
76
+ source_type = getattr(feature_builder.interpolator, "type", None)
77
+ interpolatortype = (
78
+ 'P2Fold' if source_type == InterpolatorType.PIECEWISE_QUADRATIC_FOLD else 'DFI'
79
+ )
74
80
  builder = cls(
75
- interpolatortype='DFI',
81
+ interpolatortype=interpolatortype,
76
82
  bounding_box=feature_builder.model.bounding_box,
77
83
  fold=fold,
78
84
  nelements=feature_builder.interpolator.n_elements,
@@ -104,22 +104,11 @@ class FoldEvent:
104
104
  dgz[mask, :] /= np.linalg.norm(dgz[mask, :], axis=1)[:, None]
105
105
  R2 = self.rot_mat(fold_axis, self.fold_limb_rotation(gx))
106
106
  fold_direction = np.einsum("ijk,ki->kj", R2, dgx)
107
- fold_direction /= np.sum(fold_direction, axis=1)[:, None]
108
- # calculate dot product between fold_direction and axis
109
- # if its less than 0 then inverse dgz
110
- d = np.einsum("ij,ik->i", fold_direction, fold_axis)
107
+ fold_direction /= np.linalg.norm(fold_direction, axis=1)[:, None]
111
108
 
112
109
  if self.invert_norm:
113
- new_dgz = -dgz[mask][d[mask] < 0]
114
- return fold_direction, fold_axis, new_dgz
115
-
116
- elif not self.invert_norm:
117
- return fold_direction, fold_axis, dgz
118
- else:
119
- logger.warning("invert fold frame param not valid. Defaulting to false.")
120
- return fold_direction, fold_axis, dgz
121
-
122
- # return fold_direction, fold_axis, dgz
110
+ dgz = -dgz
111
+ return fold_direction, fold_axis, dgz
123
112
 
124
113
  # def get_regularisation_direction(self, points):
125
114
  # self.foldframe.features[2].evaluate_gradient(points)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: LoopStructural
3
- Version: 1.8.2
3
+ Version: 1.8.4
4
4
  Summary: 3D geological modelling
5
5
  Author-email: Lachlan Grose <lachlan.grose@monash.edu>
6
6
  License: MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: LoopStructural
3
- Version: 1.8.2
3
+ Version: 1.8.4
4
4
  Summary: 3D geological modelling
5
5
  Author-email: Lachlan Grose <lachlan.grose@monash.edu>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = 'setuptools.build_meta'
4
4
 
5
5
  [project]
6
6
  name = 'LoopStructural'
7
- version = "1.8.2"
7
+ version = "1.8.4"
8
8
  description = '3D geological modelling'
9
9
  authors = [{ name = 'Lachlan Grose', email = 'lachlan.grose@monash.edu' }]
10
10
  readme = 'README.md'
@@ -97,6 +97,7 @@ LoopStructural = { workspace = true }
97
97
  [tool.pytest.ini_options]
98
98
  addopts = "--import-mode=importlib"
99
99
  testpaths = ["tests"]
100
+ pythonpath = ["."]
100
101
 
101
102
  [tool.isort]
102
103
  profile = 'black'
File without changes
File without changes
File without changes
File without changes