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

Files changed (56) hide show
  1. LoopStructural/datatypes/_bounding_box.py +19 -4
  2. LoopStructural/datatypes/_point.py +31 -0
  3. LoopStructural/datatypes/_structured_grid.py +17 -0
  4. LoopStructural/datatypes/_surface.py +17 -0
  5. LoopStructural/export/omf_wrapper.py +49 -21
  6. LoopStructural/interpolators/__init__.py +13 -0
  7. LoopStructural/interpolators/_api.py +81 -13
  8. LoopStructural/interpolators/_discrete_fold_interpolator.py +11 -4
  9. LoopStructural/interpolators/_discrete_interpolator.py +100 -53
  10. LoopStructural/interpolators/_finite_difference_interpolator.py +68 -78
  11. LoopStructural/interpolators/_geological_interpolator.py +27 -10
  12. LoopStructural/interpolators/_p1interpolator.py +3 -3
  13. LoopStructural/interpolators/_surfe_wrapper.py +42 -12
  14. LoopStructural/interpolators/supports/_2d_base_unstructured.py +16 -0
  15. LoopStructural/interpolators/supports/_2d_structured_grid.py +44 -9
  16. LoopStructural/interpolators/supports/_3d_base_structured.py +24 -7
  17. LoopStructural/interpolators/supports/_3d_structured_grid.py +38 -9
  18. LoopStructural/interpolators/supports/_3d_structured_tetra.py +7 -3
  19. LoopStructural/interpolators/supports/_3d_unstructured_tetra.py +8 -2
  20. LoopStructural/interpolators/supports/__init__.py +7 -0
  21. LoopStructural/interpolators/supports/_base_support.py +7 -0
  22. LoopStructural/modelling/__init__.py +1 -1
  23. LoopStructural/modelling/core/geological_model.py +0 -2
  24. LoopStructural/modelling/features/_analytical_feature.py +25 -16
  25. LoopStructural/modelling/features/_geological_feature.py +47 -11
  26. LoopStructural/modelling/features/builders/_base_builder.py +8 -0
  27. LoopStructural/modelling/features/builders/_folded_feature_builder.py +45 -14
  28. LoopStructural/modelling/features/builders/_geological_feature_builder.py +29 -13
  29. LoopStructural/modelling/features/builders/_structural_frame_builder.py +5 -0
  30. LoopStructural/modelling/features/fault/__init__.py +1 -1
  31. LoopStructural/modelling/features/fault/_fault_function.py +19 -1
  32. LoopStructural/modelling/features/fault/_fault_segment.py +15 -49
  33. LoopStructural/modelling/features/fold/__init__.py +1 -2
  34. LoopStructural/modelling/features/fold/_fold_rotation_angle_feature.py +0 -23
  35. LoopStructural/modelling/features/fold/_foldframe.py +4 -4
  36. LoopStructural/modelling/features/fold/_svariogram.py +81 -46
  37. LoopStructural/modelling/features/fold/fold_function/__init__.py +27 -0
  38. LoopStructural/modelling/features/fold/fold_function/_base_fold_rotation_angle.py +253 -0
  39. LoopStructural/modelling/features/fold/fold_function/_fourier_series_fold_rotation_angle.py +153 -0
  40. LoopStructural/modelling/features/fold/fold_function/_lambda_fold_rotation_angle.py +46 -0
  41. LoopStructural/modelling/features/fold/fold_function/_trigo_fold_rotation_angle.py +151 -0
  42. LoopStructural/modelling/input/process_data.py +6 -0
  43. LoopStructural/modelling/input/project_file.py +24 -3
  44. LoopStructural/utils/_surface.py +5 -2
  45. LoopStructural/utils/colours.py +26 -0
  46. LoopStructural/utils/features.py +5 -0
  47. LoopStructural/utils/maths.py +51 -0
  48. LoopStructural/version.py +1 -1
  49. LoopStructural-1.6.3.dist-info/METADATA +146 -0
  50. {LoopStructural-1.6.2.dist-info → LoopStructural-1.6.3.dist-info}/RECORD +53 -48
  51. {LoopStructural-1.6.2.dist-info → LoopStructural-1.6.3.dist-info}/WHEEL +1 -1
  52. LoopStructural/interpolators/_non_linear_discrete_interpolator.py +0 -0
  53. LoopStructural/modelling/features/fold/_fold_rotation_angle.py +0 -149
  54. LoopStructural-1.6.2.dist-info/METADATA +0 -81
  55. {LoopStructural-1.6.2.dist-info → LoopStructural-1.6.3.dist-info}/LICENSE +0 -0
  56. {LoopStructural-1.6.2.dist-info → LoopStructural-1.6.3.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,26 @@
1
+ from LoopStructural.utils import rng
2
+
3
+
4
+ def random_colour(n: int, cmap='tab20'):
5
+ """
6
+ Generate a list of random colours
7
+
8
+ Parameters
9
+ ----------
10
+ n : int
11
+ Number of colours to generate
12
+ cmap : str, optional
13
+ Name of the matplotlib colour map to use, by default 'tab20'
14
+
15
+ Returns
16
+ -------
17
+ list
18
+ List of colours in the form of (r,g,b,a) tuples
19
+ """
20
+ import matplotlib.cm as cm
21
+
22
+ colours = []
23
+ for _i in range(n):
24
+ colours.append(cm.get_cmap(cmap)(rng.random()))
25
+
26
+ return colours
@@ -0,0 +1,5 @@
1
+ from ..modelling.features import LambdaGeologicalFeature
2
+
3
+ X = LambdaGeologicalFeature(lambda pos: pos[:, 0], name="x")
4
+ Y = LambdaGeologicalFeature(lambda pos: pos[:, 1], name="y")
5
+ Z = LambdaGeologicalFeature(lambda pos: pos[:, 2], name="z")
@@ -244,3 +244,54 @@ def get_dip_vector(strike, dip):
244
244
  ]
245
245
  )
246
246
  return v
247
+
248
+
249
+ def regular_tetraherdron_for_points(xyz, scale_parameter):
250
+ regular_tetrahedron = np.array(
251
+ [
252
+ [np.sqrt(8 / 9), 0, -1 / 3],
253
+ [-np.sqrt(2 / 9), np.sqrt(2 / 3), -1 / 3],
254
+ [-np.sqrt(2 / 9), -np.sqrt(2 / 3), -1 / 3],
255
+ [0, 0, 1],
256
+ ]
257
+ )
258
+ regular_tetrahedron *= scale_parameter
259
+ tetrahedron = np.zeros((xyz.shape[0], 4, 3))
260
+ tetrahedron[:] = xyz[:, None, :]
261
+ tetrahedron[:, :, :] += regular_tetrahedron[None, :, :]
262
+
263
+ return tetrahedron
264
+
265
+
266
+ def gradient_from_tetrahedron(tetrahedron, value):
267
+ """
268
+ Calculate the gradient from a tetrahedron
269
+ """
270
+ tetrahedron = tetrahedron.reshape(-1, 4, 3)
271
+ m = np.array(
272
+ [
273
+ [
274
+ (tetrahedron[:, 1, 0] - tetrahedron[:, 0, 0]),
275
+ (tetrahedron[:, 1, 1] - tetrahedron[:, 0, 1]),
276
+ (tetrahedron[:, 1, 2] - tetrahedron[:, 0, 2]),
277
+ ],
278
+ [
279
+ (tetrahedron[:, 2, 0] - tetrahedron[:, 0, 0]),
280
+ (tetrahedron[:, 2, 1] - tetrahedron[:, 0, 1]),
281
+ (tetrahedron[:, 2, 2] - tetrahedron[:, 0, 2]),
282
+ ],
283
+ [
284
+ (tetrahedron[:, 3, 0] - tetrahedron[:, 0, 0]),
285
+ (tetrahedron[:, 3, 1] - tetrahedron[:, 0, 1]),
286
+ (tetrahedron[:, 3, 2] - tetrahedron[:, 0, 2]),
287
+ ],
288
+ ]
289
+ )
290
+ I = np.array([[-1.0, 1.0, 0.0, 0.0], [-1.0, 0.0, 1.0, 0.0], [-1.0, 0.0, 0.0, 1.0]])
291
+ m = np.swapaxes(m, 0, 2)
292
+ element_gradients = np.linalg.inv(m)
293
+
294
+ element_gradients = element_gradients.swapaxes(1, 2)
295
+ element_gradients = element_gradients @ I
296
+ v = np.sum(element_gradients * value[:, None, :], axis=2)
297
+ return v
LoopStructural/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "1.6.2"
1
+ __version__ = "1.6.3"
@@ -0,0 +1,146 @@
1
+ Metadata-Version: 2.1
2
+ Name: LoopStructural
3
+ Version: 1.6.3
4
+ Summary: 3D geological modelling
5
+ Author-email: Lachlan Grose <lachlan.grose@monash.edu>
6
+ License: MIT
7
+ Project-URL: Documentation, https://Loop3d.org/LoopStructural/
8
+ Project-URL: Bug Tracker, https://github.com/loop3d/loopstructural/issues
9
+ Project-URL: Source Code, https://github.com/loop3d/loopstructural
10
+ Keywords: earth sciences,geology,3-D modelling,structural geology,uncertainty
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Intended Audience :: Science/Research
13
+ Classifier: Topic :: Scientific/Engineering :: Information Analysis
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Operating System :: Microsoft :: Windows
16
+ Classifier: Operating System :: POSIX
17
+ Classifier: Operating System :: MacOS
18
+ Classifier: Programming Language :: Python :: 3.8
19
+ Classifier: Programming Language :: Python :: 3.9
20
+ Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Requires-Python: >=3.8
24
+ Description-Content-Type: text/markdown
25
+ License-File: LICENSE
26
+ Requires-Dist: numpy >=1.18
27
+ Requires-Dist: pandas
28
+ Requires-Dist: scipy
29
+ Requires-Dist: scikit-image
30
+ Requires-Dist: scikit-learn
31
+ Requires-Dist: tqdm
32
+ Provides-Extra: all
33
+ Requires-Dist: loopstructural[export,inequalities,visualisation] ; extra == 'all'
34
+ Provides-Extra: export
35
+ Requires-Dist: geoh5py ; extra == 'export'
36
+ Requires-Dist: pyevtk ; extra == 'export'
37
+ Requires-Dist: dill ; extra == 'export'
38
+ Provides-Extra: inequalities
39
+ Requires-Dist: loopsolver ; extra == 'inequalities'
40
+ Provides-Extra: jupyter
41
+ Requires-Dist: pyvista[all] ; extra == 'jupyter'
42
+ Requires-Dist: tqdm ; extra == 'jupyter'
43
+ Provides-Extra: visualisation
44
+ Requires-Dist: matplotlib ; extra == 'visualisation'
45
+ Requires-Dist: pyvista ; extra == 'visualisation'
46
+ Requires-Dist: loopstructuralviusualisation >0.1.4 ; extra == 'visualisation'
47
+
48
+ # LoopStructural: Loop3D Implicit Geological Modelling
49
+
50
+ ![3D model of Hamersley created using loopstructural](docs/source/images/image823.png)
51
+ [![PyPI version](https://badge.fury.io/py/LoopStructural.svg)](https://badge.fury.io/py/LoopStructural)
52
+ [![GitHub license](https://img.shields.io/github/license/Naereen/StrapDown.js.svg)](https://github.com/Loop3D/LoopStructural/blob/master/LICENSE)
53
+ [![Documentation loop3d.github.io/LoopStructural/](https://img.shields.io/badge/docs-githubio-brightgreen)](https://loop3d.github.io/LoopStructural)
54
+
55
+ ## Overview
56
+
57
+ LoopStructural is an opensource Python library for 3D geological modelling. The library has been built in the scope of the Loop project ([Loop3d.org](https://loop3d.org/)). LoopStructural can:
58
+
59
+ - Model fault networks integrating fault kinematics and overprinting relationships
60
+ - Model folds using structural elements (fold axis, fold axial surface) for multiple fold events
61
+ - Use different implicit interpolation algorithms (Finite Difference, Piecewiese Linear, RBF)
62
+ - Export models to vtk, geoh5, omf, gocad, csv, obj formats
63
+ - Visualise models in an interactive python environment.
64
+
65
+ ## Installation
66
+
67
+ ### Google colab
68
+
69
+ LoopStructural can be used inside a google colab notebook, however interactive visualisation using kitware trame does not work. Only static plots can be displayed.
70
+
71
+ ### Pip
72
+
73
+ `pip install loopstructural`
74
+
75
+ Optional dependencies are:
76
+
77
+ - loopstructuralvisualisation (wrapper for pyvista to interface with loopstructural objects)
78
+ - pyvista (3D visualisation)
79
+ - geoh5py (export to .geoh5 format)
80
+ - mira-omf (export to .omf format to load in Leapfrog)
81
+ - pyevtk
82
+ - dill (serialize loop models to a pickle file)
83
+ - tqdm (progress bars)
84
+ - loopsolver (experimental solver for admm inequality constraints)
85
+
86
+ You can install all of the optional dependencies using:
87
+ `pip install loopstructural[all]`
88
+
89
+ ### conda
90
+
91
+ `conda install -c conda-forge -c loop3d loopstructural`
92
+
93
+ to install the working 3D visualisation environment
94
+ `conda install -c conda-forge -c loop3d loopstructural loopstructuralvisualisation pyvista trame trame-vtk trame-vuetify`
95
+
96
+ ## Quickstart
97
+
98
+ - A basic geological model
99
+
100
+ ```Python
101
+ from LoopStructural import GeologicalModel
102
+ from LoopStructural.datatypes import BoundingBox
103
+ from LoopStructural.visualisation import Loop3DView
104
+ from LoopStructural.datasets import load_claudius
105
+
106
+ import numpy as np
107
+ data, bb = load_claudius()
108
+
109
+ #bb constaints origin and maximum of axis aligned bounding box
110
+ #data is a pandas dataframe with X,Y,Z,val,nx,ny,nz, feature_name
111
+
112
+ model = GeologicalModel(bb[0,:],bb[1,:])
113
+ model.data = data
114
+ # nelements specifies the number of discrete interpolation elements
115
+ # 'stratí' is the feature name in the data dataframe
116
+ model.create_and_add_foliation('strati',nelements=1e5)
117
+ model.update()
118
+ # get the value of the interpolator at some random locations
119
+ locations = np.array(
120
+ [
121
+ np.random.uniform(bb[0, 0], bb[1, 0],5),
122
+ np.random.uniform(bb[0, 1], bb[1, 1],5),
123
+ np.random.uniform(bb[0, 2], bb[1, 2],5),
124
+ ]
125
+ ).T
126
+ val = model.evaluate_feature_value('strati', locations)
127
+ # get the gradient of the interpolator
128
+ gradient = model.evaluate_feature_gradient('strati',locations)
129
+
130
+ #Plot the scalar field of the model
131
+ model['strati'].scalar_field().plot()
132
+
133
+
134
+ ```
135
+
136
+ ## Documentation
137
+
138
+ The LoopStructural documentation can be found [here](https://loop3d.github.io/LoopStructural)
139
+
140
+ ## Problems
141
+
142
+ Any bugs/feature requests/comments please create a new [issue](https://github.com/Loop3D/LoopStructural/issues).
143
+
144
+ ## Acknowledgements
145
+
146
+ _The Loop platform is an open source 3D probabilistic geological and geophysical modelling platform, initiated by Geoscience Australia and the OneGeology consortium. The project is funded by Australian territory, State and Federal Geological Surveys, the Australian Research Council and the MinEx Collaborative Research Centre._
@@ -1,5 +1,5 @@
1
1
  LoopStructural/__init__.py,sha256=nlJ0csTZ_xlTZrWvTKiTp3ER_XRQN6iqQ5sR94RD5QA,1331
2
- LoopStructural/version.py,sha256=iaZ7XZ-SdVNT4ZACUYJL_5bHKP1lOYNnZyPeapZHkxk,22
2
+ LoopStructural/version.py,sha256=X-erfDySXG8dR_oX8H_L2S8f9Y_VDgdltPb-jH2ruKg,22
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,77 +29,80 @@ 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=kK2hbI9NCBcR9K6S7FNZs9cbaUPVcT41Okg_MZqObcA,14101
33
- LoopStructural/datatypes/_point.py,sha256=DH-s8GJeomOwRmalqooNqeV5AOaEHOxVeW7a8yrb14A,5251
34
- LoopStructural/datatypes/_structured_grid.py,sha256=OFE7dog3TSBSUDGbSEV7ZPUekG0ToNAkFROw8pcm014,3184
35
- LoopStructural/datatypes/_surface.py,sha256=J40crDWkbGAbaDNYP0J8koO_eWdZucmbXRsGxLPVHDU,5964
32
+ LoopStructural/datatypes/_bounding_box.py,sha256=nTtvNj0UiQWX-61tBH6iWS8YDzHBIqTKWHUxStkKBfU,14732
33
+ LoopStructural/datatypes/_point.py,sha256=rYolPcd134DCj5kvGkTG9_T2S68XOPaBuLfq6-Ud7MU,6140
34
+ LoopStructural/datatypes/_structured_grid.py,sha256=AwSzkoAySU8ZHGbbGTyUoU3fCXuBVQAOD_6th6v0J1o,3665
35
+ LoopStructural/datatypes/_surface.py,sha256=3RLA6-zkWE1L3IvXdrq92Dd5asnI9Lf6ebcNmrMnn98,6445
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=TByfnHul1Rg4oB5KPnD-yCcZ-uNr4cxuYnRB_6mclnA,4253
39
39
  LoopStructural/export/gocad.py,sha256=cQ6v7ZD0CVubt3c2f9EwAYrziu5bEFSWBtx0uade5mg,3370
40
- LoopStructural/export/omf_wrapper.py,sha256=faswHT4k1ZMaJLdZIyxGJp-IlXBdwGREnlcOSooJh3o,2375
41
- LoopStructural/interpolators/__init__.py,sha256=pBxqCCIJ3WS8W179EnFK9QVmIzgzqqt0T3ehu5absWA,2944
42
- LoopStructural/interpolators/_api.py,sha256=m1o5oza7kOXDPgasDqKY1AQE-Tz0pCzuTJXtqgA5S88,4858
40
+ LoopStructural/export/omf_wrapper.py,sha256=4vcF4WOQIVEYsWrfATgKCDh8nUybLTbrlXnCxZ_3fkU,3392
41
+ LoopStructural/interpolators/__init__.py,sha256=HcQ-wOnTKFtpS02Pxd_aP9s6bgjCb7iECYYFzX1nd44,3396
42
+ LoopStructural/interpolators/_api.py,sha256=EC4ogG2uPq-z_pgNGd_eTieTl92eaZ-rjyoFwXiHL_s,7839
43
43
  LoopStructural/interpolators/_builders.py,sha256=6M8__gGDO-dyu3LPIwcPia1knLR5-EH0GBMLSF0Kuwc,6476
44
- LoopStructural/interpolators/_discrete_fold_interpolator.py,sha256=4yfXIKiFTllomWF0nSLDtOk0S6MflkG7uZbvVcGW6KE,6247
45
- LoopStructural/interpolators/_discrete_interpolator.py,sha256=NOIlIosMPozSS63coGM1zwJTioezLuDzbZZ5sbX8Dzk,23671
46
- LoopStructural/interpolators/_finite_difference_interpolator.py,sha256=kwu5L9kTEelB0ibiKTZBtWSZxClJTP9PRMmmlfODbO8,16505
47
- LoopStructural/interpolators/_geological_interpolator.py,sha256=FGyc8AcuTh70kedbMK4QO9KMTdaA81bELh587n8bJHQ,10408
44
+ LoopStructural/interpolators/_discrete_fold_interpolator.py,sha256=eDe0R1lcQ0AuMcv7zlpu5c-soCv7AybIqQAuN2vFE3M,6542
45
+ LoopStructural/interpolators/_discrete_interpolator.py,sha256=EPiEWtx8RuE75xp7umy7Py4vTiFB0xgN3EFnl44ygKM,25577
46
+ LoopStructural/interpolators/_finite_difference_interpolator.py,sha256=oFchMqCSWjRquJmI0rNrtjFhre4O7PLyOLxZFE64Se4,15819
47
+ LoopStructural/interpolators/_geological_interpolator.py,sha256=4qPkJKWW1Kqe-U78CLR8ayLdFXq9aJZ2FB5_ntITxHk,11028
48
48
  LoopStructural/interpolators/_interpolator_factory.py,sha256=LSxrf7tEWek_0tNxioGHeWWwu3Ywf8Ar79M6gC75tBY,3468
49
- LoopStructural/interpolators/_non_linear_discrete_interpolator.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
49
  LoopStructural/interpolators/_operator.py,sha256=PZOUzq9OMaJdG151dSLIo7AxRuhTj6-zEAzFZo-EOJU,1114
51
- LoopStructural/interpolators/_p1interpolator.py,sha256=et-8sRX442XVNZK14XHx7GYtkCaW7OSkawn9zzftg3g,8753
50
+ LoopStructural/interpolators/_p1interpolator.py,sha256=4rjj4iaw2c8hOfBS9u8ycxzijYdmvpeijvhYRwUwZg0,8736
52
51
  LoopStructural/interpolators/_p2interpolator.py,sha256=UT-As5RNsmOwHOzO_6FiRcAwlNHfi4ILbJw2LGpwKAw,10274
53
- LoopStructural/interpolators/_surfe_wrapper.py,sha256=OOf8KevdBGRnrYtkw3EPTWR9Iy43gpH4Vj4UrbEiJmA,5909
52
+ LoopStructural/interpolators/_surfe_wrapper.py,sha256=uwqABnixan9bcyU08hbxO9ATO4DawItuGSGj7iAKa9U,6772
54
53
  LoopStructural/interpolators/_cython/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
- LoopStructural/interpolators/supports/_2d_base_unstructured.py,sha256=IPDdXGn8QVPugqVGbepj2rKQjbQinjZtduus240wvb0,11197
54
+ LoopStructural/interpolators/supports/_2d_base_unstructured.py,sha256=maHzpHnPRoo5IOLcp4Si7kj0oaxFox8XYrknwErbyoo,11796
56
55
  LoopStructural/interpolators/supports/_2d_p1_unstructured.py,sha256=okcy56nyjuedmknQn_95V2tm0kdMA-oJcD3U2jU8u0w,2637
57
56
  LoopStructural/interpolators/supports/_2d_p2_unstructured.py,sha256=TeBVtT1PMV7CKzmnFZke37acMoFxouer20cskS7pVoE,10422
58
- LoopStructural/interpolators/supports/_2d_structured_grid.py,sha256=8jG0ASTHtCiEohvsc8TzwBVwJ0iyJJID4SVJQwgk2nk,14978
57
+ LoopStructural/interpolators/supports/_2d_structured_grid.py,sha256=TbAV1iw2gmZ4ovSMj04GLKaDZjbxK7YAceJ4wBYn8m8,16209
59
58
  LoopStructural/interpolators/supports/_2d_structured_tetra.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
- LoopStructural/interpolators/supports/_3d_base_structured.py,sha256=IDORlhwyCYP3paBEd1Dtwc7u6Oszs6CxcaNgHRH6wCI,14539
59
+ LoopStructural/interpolators/supports/_3d_base_structured.py,sha256=keZnVSK0_wmXCLkWicyIlIV7Wsy2p67OC8B2AOUIMDM,15531
61
60
  LoopStructural/interpolators/supports/_3d_p2_tetra.py,sha256=CqGVJRUMxbPQZDhhopNt_s9gVhMqh4YbjQyDZonoyxc,11574
62
- LoopStructural/interpolators/supports/_3d_structured_grid.py,sha256=S6w0z7GpxS6EaJ-PW18_onnrTUf3U25QxkMw56MI1aU,16361
63
- LoopStructural/interpolators/supports/_3d_structured_tetra.py,sha256=x032Bipt5r3st5JWska8dpq-FU32rnaDQhKXJQqyYCg,26279
64
- LoopStructural/interpolators/supports/_3d_unstructured_tetra.py,sha256=rtMSdy4cg0bSmNtvYa8-Sue8WVhsK57F5YKBiBJr58M,23265
65
- LoopStructural/interpolators/supports/__init__.py,sha256=PU68529KecFJS0QiH6GzWj2q4SaCzkBEZhryO_RNZ3Q,1485
61
+ LoopStructural/interpolators/supports/_3d_structured_grid.py,sha256=iHrZIXQk80vAxkkTzmBRLz3yA6MJEZFKm1RaRrkNlog,17446
62
+ LoopStructural/interpolators/supports/_3d_structured_tetra.py,sha256=5zUNtvEXDvbCHZCu6Fz9WjGbnrMaq-sYJqNUufyLcq8,26505
63
+ LoopStructural/interpolators/supports/_3d_unstructured_tetra.py,sha256=vc9ZffCYk7m1Ae5-H_m1P5OCHgBa9jztrklugMPPiHc,23500
64
+ LoopStructural/interpolators/supports/__init__.py,sha256=V0JjixoBIUZVAo5MmqARR67xDOoQwnb4G3SXeOMRSyQ,1603
66
65
  LoopStructural/interpolators/supports/_aabb.py,sha256=Z-kH_u6c6izak0aHG3Uo14PEKQeZmYlevLDC32Q06xk,3208
67
- LoopStructural/interpolators/supports/_base_support.py,sha256=KgSBW3YhRSX1Tm8h6a-2dQiuJxeKIhqVCmSYgASgMX8,2275
66
+ LoopStructural/interpolators/supports/_base_support.py,sha256=5Cwq16EhA2rx4-DFUmoM5z6DRnDfRLkachBpGyzShdM,2420
68
67
  LoopStructural/interpolators/supports/_face_table.py,sha256=Hyj4Io63NkPRN8ab9uDHyec-2Kb8BLY_xBF6STNlvBw,3095
69
68
  LoopStructural/interpolators/supports/_support_factory.py,sha256=c86NnM4azWhS2ajPApePap0sFI82mZC8siVAU1fCOn4,1175
70
- LoopStructural/modelling/__init__.py,sha256=pPJSZMlyE_xliv0c1C4M5QlqYuBOUTRLQQtmXKQ1xpU,754
69
+ LoopStructural/modelling/__init__.py,sha256=IaIRrSvTezC1_RHZpGiVuxZ9tv8XZ4yRLHC2AgXi0kE,787
71
70
  LoopStructural/modelling/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
72
- LoopStructural/modelling/core/geological_model.py,sha256=izhq1plPWLjJb8qwJbpqf6PPN4ndC1_2-5ujv6x4dQg,66173
71
+ LoopStructural/modelling/core/geological_model.py,sha256=8TFQho3QolAMwb21uWsr_Ys5rSWHOyrXSVBgQPOnoS4,66092
73
72
  LoopStructural/modelling/features/__init__.py,sha256=qTl-jTau-nnSZ4G4Np6JkBcXB01ViXhouUo_-ImoDvk,877
74
- LoopStructural/modelling/features/_analytical_feature.py,sha256=L0GQvOPAk27KNejaqvbLXOJo_jbJJS_V3m4c9Dymheg,2701
73
+ LoopStructural/modelling/features/_analytical_feature.py,sha256=7-wFD_h6XDE89jn_trMkLeL98nHAj_5mj802mWTIp7E,2825
75
74
  LoopStructural/modelling/features/_base_geological_feature.py,sha256=SP-lWDJDdXZY0UAht33sJkOpW-lGN9NZqP2RuZDgyxg,11102
76
75
  LoopStructural/modelling/features/_cross_product_geological_feature.py,sha256=IOcJBgQeGBOgwymcyyEdsQHHbVs23sYPpl8xavBaPZE,2781
77
- LoopStructural/modelling/features/_geological_feature.py,sha256=pdLum5tTn4aImUhe-47F6jyqbSb73-AIWhegLNG7FP4,9699
76
+ LoopStructural/modelling/features/_geological_feature.py,sha256=Migi29Qr_hjIhNYuhclSK4I_MyETwa27lHeClhDKyu0,11221
78
77
  LoopStructural/modelling/features/_lambda_geological_feature.py,sha256=pEfLN9HcYGluxRB7LJpcKdYqXP_Mkyo1pLZ3kZZ4mvA,2599
79
78
  LoopStructural/modelling/features/_region.py,sha256=TB4qnoTDQM2VgRjgyODN839fKe3kuRYLllJj0xnDKXo,478
80
79
  LoopStructural/modelling/features/_structural_frame.py,sha256=I6W-YkQiRADX7xcKMFzDefYGDlXWVAp5nAVRFVcqNow,5062
81
80
  LoopStructural/modelling/features/_unconformity_feature.py,sha256=-0shSjYdT8IuNDNDYnqJ2niFjFFiBt-Izc-oMBYa0MQ,2405
82
81
  LoopStructural/modelling/features/builders/__init__.py,sha256=Gqld1C-PcaXfJ8vpkWMDCmehmd3hZNYQk1knPtl59Bk,266
83
- LoopStructural/modelling/features/builders/_base_builder.py,sha256=cafVl-KImwSZmHxTuzlpnkh1lW9ARJXJLE0NQ4T_ook,3221
82
+ LoopStructural/modelling/features/builders/_base_builder.py,sha256=ImlKZs4sFSrtAAp1NEpQD35AKF_mLEHr7jj2DzSyAd4,3561
84
83
  LoopStructural/modelling/features/builders/_fault_builder.py,sha256=EyDLyovrnxqSk11zWFnViok7lXMt_E-pG2QqgRgvOLk,25653
85
- LoopStructural/modelling/features/builders/_folded_feature_builder.py,sha256=oeJjCnY_L4FXRvH-bPBySWlyups68H0cM1eXjXef3aY,5242
86
- LoopStructural/modelling/features/builders/_geological_feature_builder.py,sha256=uBPcwW87SQVH7nYQIZCXFqCpWrKhI1QJ70WC0rTTdlk,20960
87
- LoopStructural/modelling/features/builders/_structural_frame_builder.py,sha256=jVIV1wUo1MxcpFx6RxBtl8IgXJt2USq7XX1m-NAcMNU,7635
88
- LoopStructural/modelling/features/fault/__init__.py,sha256=tkKhGJDyuzzV4WoXsoknwUBaLY_WmpZYGMCY9NK7dfM,170
89
- LoopStructural/modelling/features/fault/_fault_function.py,sha256=eIZCsGp2-zNgFWjtlmgq3JGRvQ8EeUyU6iVOuVAeLVU,12083
84
+ LoopStructural/modelling/features/builders/_folded_feature_builder.py,sha256=ZIhzQV0ZRFfZF_3zJGMyMPk-xVmCro5k2HJCzB790gA,6535
85
+ LoopStructural/modelling/features/builders/_geological_feature_builder.py,sha256=Js3NgfbFipZrTmKrIMKsNpRE5EeBxy0_TmGz3ytO5YA,21628
86
+ LoopStructural/modelling/features/builders/_structural_frame_builder.py,sha256=1SS_wrnkmaP7NTvTyHGTkuYaaU2Vc-_XmpmxS-CQrwg,7762
87
+ LoopStructural/modelling/features/fault/__init__.py,sha256=4u0KfYzmoO-ddFGo9qd9ov0gBoLqBiPAUsaw5zhEOAQ,189
88
+ LoopStructural/modelling/features/fault/_fault_function.py,sha256=5IzVyvv1tS5Z6geMB8FdTZpGrBYbyu38cOH03NACm0o,12797
90
89
  LoopStructural/modelling/features/fault/_fault_function_feature.py,sha256=1F_xGGRtLZ7mBnXutEGkwWoJImSEPUuxstf0Nu-7k5w,2452
91
- LoopStructural/modelling/features/fault/_fault_segment.py,sha256=3JXRGq2cz3rqfl3OhDE3dWzZE2-g_nihHtmS0muxRgk,18221
92
- LoopStructural/modelling/features/fold/__init__.py,sha256=taSRFnKibB0KdvFlvpJKrL_ZtmFaiQzC_U4qL7n4K9o,244
90
+ LoopStructural/modelling/features/fault/_fault_segment.py,sha256=cAnf8cKYJd-3Mb8Q6F1ZVAuez2jkHZhRN4yAz_aMNfI,16947
91
+ LoopStructural/modelling/features/fold/__init__.py,sha256=mOq_K5IHjE3FoK7dhYpljUMGj0gvEX2Fyqtzjd4EYfQ,176
93
92
  LoopStructural/modelling/features/fold/_fold.py,sha256=bPnnLUSiF4uoMRg8aHoOSTPRgaM0JyLoRQPu5_A-J3w,5448
94
- LoopStructural/modelling/features/fold/_fold_rotation_angle.py,sha256=9kKMQsOmJJGAs5vGDp7FSYgKL71yH04FslILRG3Beb8,4456
95
- LoopStructural/modelling/features/fold/_fold_rotation_angle_feature.py,sha256=SQ7HxlHf_QrnlpK6EJ6lpn4yLcw5t820hjAxRs6EQpk,1222
96
- LoopStructural/modelling/features/fold/_foldframe.py,sha256=sX_Akae4JLlB4rC3oMQ6KEtEX57euqInNLF8hc8-AoE,7721
97
- LoopStructural/modelling/features/fold/_svariogram.py,sha256=uatBG12QUxenNUEiayUlRQMoLREFAc0mxyaZVPIVz5k,6326
93
+ LoopStructural/modelling/features/fold/_fold_rotation_angle_feature.py,sha256=CXLbFRQ3CrTMAcHmfdbKcmSvvLs9_6TLe0Wqi1pK2tg,892
94
+ LoopStructural/modelling/features/fold/_foldframe.py,sha256=Rgf5aofN0OVDTZ2pzqLzAGlJUO2rnNm3aFvLSnH77yo,7669
95
+ LoopStructural/modelling/features/fold/_svariogram.py,sha256=uzGaKZ5HGh8xZcsGGg68GUKVjkd5udLy7-4lh0NQc2Y,7765
96
+ LoopStructural/modelling/features/fold/fold_function/__init__.py,sha256=VqMjabsBd5GnPnDMXeKwXqtd0te2iXnvHxpf6jCC9YU,830
97
+ LoopStructural/modelling/features/fold/fold_function/_base_fold_rotation_angle.py,sha256=EC9q-zKX86AoDruXg_6MOD7lo1kVshfFcLlZ25EfFp0,8048
98
+ LoopStructural/modelling/features/fold/fold_function/_fourier_series_fold_rotation_angle.py,sha256=Cjb6Pt6cdRoH3WGqFyJ2rHxnMe6SKvzRayA6hTuwZA8,4069
99
+ LoopStructural/modelling/features/fold/fold_function/_lambda_fold_rotation_angle.py,sha256=U-IL7DETQhKh7a-cHlEKtsIg2kd8JZqO2gWyb_PKB8k,1446
100
+ LoopStructural/modelling/features/fold/fold_function/_trigo_fold_rotation_angle.py,sha256=v-3YkBbsqPdbPZD2ykPB3vLKz3W_BDSF2m0uxtpP2vo,4904
98
101
  LoopStructural/modelling/input/__init__.py,sha256=HhJM3V5b-8_64LiRbF3Bd1pjWhJlcknxMSMPRrqZ0-I,153
99
102
  LoopStructural/modelling/input/fault_network.py,sha256=0uxl7lOySdhMhNXoiOkuiHIXqAz1Ls0j-W65cmdQoP8,2348
100
103
  LoopStructural/modelling/input/map2loop_processor.py,sha256=T7Fgqd7FNJWylLKvfIniRZBMRMeAoP8iU330-WYU8Fg,7031
101
- LoopStructural/modelling/input/process_data.py,sha256=M02AzLbHd7X6SIvIQG-zXBf71FIzMIjI1ITqwIW9AEk,25160
102
- LoopStructural/modelling/input/project_file.py,sha256=mnK6Ts2z_XquYO_JviM-cXTH8T3YA_ZpqrC2qyLaU8M,3305
104
+ LoopStructural/modelling/input/process_data.py,sha256=Y3wwUigqc9tqaX4EOzAOAigepzbtO6VWFhl_YmF00nA,25441
105
+ LoopStructural/modelling/input/project_file.py,sha256=BYV9KBkAFHubP3QOWbnPjOPpaoyhh4BuZU1I194wJUs,4221
103
106
  LoopStructural/modelling/intrusions/__init__.py,sha256=EpZK3cHJwGQhPUYIwKCKu8vkNdt_nOgWF0zfhiqDYDA,712
104
107
  LoopStructural/modelling/intrusions/geom_conceptual_models.py,sha256=jwTlhYySUj7z4DEnJoi4AINZB_N3-SW6ONRFL66OsW0,3665
105
108
  LoopStructural/modelling/intrusions/geometric_scaling_functions.py,sha256=PK3qf0TiK-WYIBGG7fYhTD1hwlUN0s75BK8d53SLYuQ,3209
@@ -108,22 +111,24 @@ LoopStructural/modelling/intrusions/intrusion_feature.py,sha256=5DFQ1uccX7Rp3PMc
108
111
  LoopStructural/modelling/intrusions/intrusion_frame_builder.py,sha256=Q1TPHxREcrO7Rw71nUfACZHfYnISLjqlgkUNTPT324k,40143
109
112
  LoopStructural/modelling/intrusions/intrusion_support_functions.py,sha256=wodakheMD62WJyoKnyX8UO-C1pje0I-5kHQEoDqShzo,13951
110
113
  LoopStructural/utils/__init__.py,sha256=K6OwdnC8RE-sDhG4GIbVyoJNUD0WnM1VGG6os1l_Woc,870
111
- LoopStructural/utils/_surface.py,sha256=U2cM9nPqAjdgRlFyeejmekJmRyG0mjm7HcGntk0Uudc,5364
114
+ LoopStructural/utils/_surface.py,sha256=8pUn11Pe3ZlYoHkjy06v3QWJ7UJORQ7yWsgwFQptkxs,5530
112
115
  LoopStructural/utils/_transformation.py,sha256=7iDPMIBoZ73ZGa_slbC9XzdMQ-ONOxvF7UkY4dJaw54,2443
116
+ LoopStructural/utils/colours.py,sha256=NOYTN-fh-XTfQdyqRVzO5bdt0kJQrnxH25ZxEnqp8ZQ,548
113
117
  LoopStructural/utils/config.py,sha256=ITGOtZTo2_QBwXkG_0AFANfE90J9siCXLzxypVmg9QA,414
114
118
  LoopStructural/utils/dtm_creator.py,sha256=-yqGG0wyEJfTCCDghz058wull1q3zGFASjeu8oDgYnk,535
115
119
  LoopStructural/utils/exceptions.py,sha256=SJboJ7ncMqVX-ib7MMizClwMrFZRHQhjZr2eCnVwnQE,500
120
+ LoopStructural/utils/features.py,sha256=WCatS4lYBrURNvWvWwhOsDVUod9KIPNq3x0OHPbWctU,241
116
121
  LoopStructural/utils/helper.py,sha256=An9NuRH16cASUWq2ZakHc1tZt_AvUpgx8tv4cyWZEQk,6581
117
122
  LoopStructural/utils/json_encoder.py,sha256=5YNouf1TlhjEqOYgthd07MRXc0JLgxern-nyKSZ__ws,403
118
123
  LoopStructural/utils/linalg.py,sha256=tBXyu6NXcG2AcPuzUMnkVI4ncZWtE_MPHGj2PLXRwfY,123
119
124
  LoopStructural/utils/logging.py,sha256=dIUWEsS2lT4G1dsf4ZYXknTR7eQkrgvGA4b_E0vMIRU,2402
120
- LoopStructural/utils/maths.py,sha256=q8KF2lUoyXIavmlH7s0jeRwkoGG99X40A6co5-tgqfg,6693
125
+ LoopStructural/utils/maths.py,sha256=8iqdQdB2-bf14SzIzfFxvjWbzmPknqK9DI7CWEcW6XU,8402
121
126
  LoopStructural/utils/regions.py,sha256=LvcOCPudF4u95-GKBOZqXVxOEcR3cOFgFpcs5x43sMk,3914
122
127
  LoopStructural/utils/typing.py,sha256=29uVSTZdzXXH-jdlaYyBWZ1gQ2-nlZ2-XoVgG_PXNFY,157
123
128
  LoopStructural/utils/utils.py,sha256=2Z4zVE6G752-SPmM29zebk82bROJxEwi_YiiJjcVED4,2438
124
129
  LoopStructural/visualisation/__init__.py,sha256=5BDgKor8-ae6DrS7IZybJ3Wq_pTnCchxuY4EgzA7v1M,318
125
- LoopStructural-1.6.2.dist-info/LICENSE,sha256=ZqGeNFOgmYevj7Ld7Q-kR4lAxWXuBRUdUmPC6XM_py8,1071
126
- LoopStructural-1.6.2.dist-info/METADATA,sha256=CxK-vbkaxg1TIa1Uwim0KInk_9vy-AHw_Ufv6n5W9ow,4958
127
- LoopStructural-1.6.2.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
128
- LoopStructural-1.6.2.dist-info/top_level.txt,sha256=QtQErKzYHfg6ddxTQ1NyaTxXBVM6qAqrM_vxEPyXZLg,15
129
- LoopStructural-1.6.2.dist-info/RECORD,,
130
+ LoopStructural-1.6.3.dist-info/LICENSE,sha256=ZqGeNFOgmYevj7Ld7Q-kR4lAxWXuBRUdUmPC6XM_py8,1071
131
+ LoopStructural-1.6.3.dist-info/METADATA,sha256=AQ55C8hbLHvryNgxtgqAnp--xB9ZjKWmrBhg3nGGfCQ,5793
132
+ LoopStructural-1.6.3.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
133
+ LoopStructural-1.6.3.dist-info/top_level.txt,sha256=QtQErKzYHfg6ddxTQ1NyaTxXBVM6qAqrM_vxEPyXZLg,15
134
+ LoopStructural-1.6.3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (72.1.0)
2
+ Generator: setuptools (75.2.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,149 +0,0 @@
1
- import numpy as np
2
- from scipy.optimize import curve_fit
3
-
4
- from ....modelling.features.fold._fold_rotation_angle_feature import (
5
- fourier_series,
6
- )
7
- from ....modelling.features.fold import SVariogram
8
-
9
- from ....utils import getLogger
10
-
11
- logger = getLogger(__name__)
12
-
13
-
14
- class FoldRotationAngle:
15
- def __init__(self, rotation_angle, fold_frame_coordinate, svario=False):
16
- """
17
-
18
- Parameters
19
- ----------
20
- rotation_angle
21
- fold_frame_coordinate
22
- svario
23
- """
24
- self.rotation_angle = rotation_angle
25
- self.fold_frame_coordinate = fold_frame_coordinate
26
- self.fold_rotation_function = None
27
- self.svario = None
28
- if svario:
29
- self.svario = SVariogram(self.fold_frame_coordinate, self.rotation_angle)
30
- self.fitted_params = None
31
-
32
- def fit_fourier_series(
33
- self, wl=None, lags=None, nlag=None, lag=None, skip_variogram=False, **kwargs
34
- ):
35
- """
36
-
37
- Parameters
38
- ----------
39
- wl
40
- lags
41
- nlag
42
- lag
43
-
44
- Returns
45
- -------
46
-
47
- """
48
- if self.svario is None:
49
- self.svario = SVariogram(self.fold_frame_coordinate, self.rotation_angle)
50
- if not skip_variogram:
51
- self.svario.calc_semivariogram(lags=lags, nlag=nlag, lag=lag)
52
- if wl is None:
53
- wl = self.svario.find_wavelengths(lags=lags, nlag=nlag, lag=lag)
54
- # for now only consider single fold wavelength
55
- wl = wl[0]
56
- guess = np.zeros(4)
57
- guess[3] = wl # np.max(limb_wl)
58
- logger.info(f"Guess: {guess[0]} {guess[1]} {guess[2]} {guess[3]}")
59
- # mask nans
60
- mask = np.logical_or(~np.isnan(self.fold_frame_coordinate), ~np.isnan(self.rotation_angle))
61
- logger.info(
62
- f"There are {np.sum(~mask)} nans for the fold limb rotation angle and { np.sum(mask)} observations"
63
- )
64
-
65
- if np.sum(mask) < len(guess):
66
- logger.error(
67
- "Not enough data points to fit Fourier series setting " "fold rotation angle" "to 0"
68
- )
69
- self.fold_rotation_function = lambda x: np.zeros(x.shape)
70
- else:
71
- try:
72
- # try fitting using wavelength guess
73
- popt, pcov = curve_fit(
74
- fourier_series,
75
- self.fold_frame_coordinate[mask],
76
- np.tan(np.deg2rad(self.rotation_angle[mask])),
77
- guess,
78
- )
79
- except RuntimeError:
80
- try:
81
- # if fitting failed, try with just 0s
82
- logger.info("Running curve fit without initial guess")
83
- popt, pcov = curve_fit(
84
- fourier_series,
85
- self.fold_frame_coordinate[mask],
86
- np.tan(np.deg2rad(self.rotation_angle[mask])),
87
- )
88
- except RuntimeError:
89
- # otherwise set the fourier series parameters to 0
90
- popt = guess
91
- logger.error("Could not fit curve to S-Plot, check the wavelength")
92
- logger.info(f"Fitted: {popt[0]} {popt[1]} {popt[2]} {popt[3]}")
93
- self.fold_rotation_function = lambda x: np.rad2deg(
94
- np.arctan(fourier_series(x, popt[0], popt[1], popt[2], popt[3]))
95
- )
96
- self.fitted_params = popt
97
-
98
- def __call__(self, fold_frame_coordinate):
99
- """
100
-
101
- Parameters
102
- ----------
103
- fold_frame_coordinate
104
-
105
- Returns
106
- -------
107
-
108
- """
109
- return self.fold_rotation_function(fold_frame_coordinate)
110
-
111
- def calculate_misfit(self):
112
- """
113
-
114
- Returns
115
- -------
116
-
117
- """
118
- return np.tan(np.deg2rad(self.rotation_angle)) - np.tan(
119
- np.deg2rad(self.__call__(self.fold_frame_coordinate))
120
- )
121
-
122
- def set_function(self, function):
123
- """
124
-
125
- Parameters
126
- ----------
127
- function
128
-
129
- Returns
130
- -------
131
-
132
- """
133
- self.fold_rotation_function = function
134
-
135
- def find_hinges(self, range, step):
136
-
137
- import scipy.optimize as optimize
138
-
139
- def fra(x):
140
- x = np.array([x])
141
- return self.__call__(x)
142
-
143
- roots = []
144
- x = range[0]
145
- while x < range[1]:
146
- result = optimize.root_scalar(fra, bracket=[x, x + step])
147
- roots.append(result.root)
148
- x += step
149
- return roots
@@ -1,81 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: LoopStructural
3
- Version: 1.6.2
4
- Summary: 3D geological modelling
5
- Author-email: Lachlan Grose <lachlan.grose@monash.edu>
6
- License: MIT
7
- Project-URL: Documentation, https://Loop3d.org/LoopStructural/
8
- Project-URL: Bug Tracker, https://github.com/loop3d/loopstructural/issues
9
- Project-URL: Source Code, https://github.com/loop3d/loopstructural
10
- Keywords: earth sciences,geology,3-D modelling,structural geology,uncertainty
11
- Classifier: Development Status :: 5 - Production/Stable
12
- Classifier: Intended Audience :: Science/Research
13
- Classifier: Topic :: Scientific/Engineering :: Information Analysis
14
- Classifier: License :: OSI Approved :: MIT License
15
- Classifier: Operating System :: Microsoft :: Windows
16
- Classifier: Operating System :: POSIX
17
- Classifier: Operating System :: MacOS
18
- Classifier: Programming Language :: Python :: 3.8
19
- Classifier: Programming Language :: Python :: 3.9
20
- Classifier: Programming Language :: Python :: 3.10
21
- Classifier: Programming Language :: Python :: 3.11
22
- Classifier: Programming Language :: Python :: 3.12
23
- Requires-Python: >=3.8
24
- Description-Content-Type: text/markdown
25
- License-File: LICENSE
26
- Requires-Dist: numpy >=1.18
27
- Requires-Dist: pandas
28
- Requires-Dist: scipy
29
- Requires-Dist: scikit-image
30
- Requires-Dist: scikit-learn
31
- Requires-Dist: tqdm
32
- Provides-Extra: all
33
- Requires-Dist: loopstructural[export,inequalities,visualisation] ; extra == 'all'
34
- Provides-Extra: export
35
- Requires-Dist: geoh5py ; extra == 'export'
36
- Requires-Dist: pyevtk ; extra == 'export'
37
- Requires-Dist: dill ; extra == 'export'
38
- Provides-Extra: inequalities
39
- Requires-Dist: loopsolver ; extra == 'inequalities'
40
- Provides-Extra: jupyter
41
- Requires-Dist: pyvista[all] ; extra == 'jupyter'
42
- Requires-Dist: tqdm ; extra == 'jupyter'
43
- Provides-Extra: visualisation
44
- Requires-Dist: matplotlib ; extra == 'visualisation'
45
- Requires-Dist: pyvista ; extra == 'visualisation'
46
- Requires-Dist: loopstructuralviusualisation >0.1.4 ; extra == 'visualisation'
47
-
48
- # LoopStructural: Loop3D Geological Forward Modeling Engine.
49
- ![3D model of Hamersley created using loopstructural](docs/source/images/image823.png)
50
- ![Continuous integration and deployment](https://github.com/Loop3D/LoopStructural/workflows/Continuous%20integration%20and%20deployment/badge.svg)
51
- ![Publish Docker Hub](https://github.com/Loop3D/LoopStructural/workflows/Publish%20Docker%20Hub/badge.svg)
52
- [![PyPI version](https://badge.fury.io/py/LoopStructural.svg)](https://badge.fury.io/py/LoopStructural)
53
- [![GitHub license](https://img.shields.io/github/license/Naereen/StrapDown.js.svg)](https://github.com/Loop3D/LoopStructural/blob/master/LICENSE)
54
- [![Documentation loop3d.github.io/LoopStructural/](https://img.shields.io/badge/docs-githubio-brightgreen)](https://loop3d.github.io/LoopStructural)
55
-
56
-
57
- LoopStructural is the 3D geological modelling library for Loop ([Loop3d.org](https://loop3d.org/)). The development of LoopStructural is lead by **Lachlan Grose** as an ARC (LP170100985) post-doc at Monash University. **Laurent Ailleres** and **Gautier Laurent** have made significant contributions to the conceptual design and integration of geological concepts into the geological modelling workflow. **Roy Thomson** and **Yohan de Rose** have contributed to the implementation and integration of LoopStructural into the Loop workflow.
58
-
59
- Loop is led by Laurent Ailleres (Monash University) with a team of Work Package leaders from:
60
- * Monash University: Roy Thomson, Lachlan Grose and Robin Armit
61
- * University of Western Australia: Mark Jessell, Jeremie Giraud, Mark Lindsay and Guillaume Pirot
62
- * Geological Survey of Canada: Boyan Brodaric and Eric de Kemp
63
-
64
- The project benefits from in-kind contributions from the Geological Survey of Canada, the British Geological Survey, the French Bureau de Recherches Geologiques et Minieres, the RING group at the Universite de Lorraine, the RWTH in Aachen, Germany and AUSCOPE
65
-
66
- * Python/cython implementation of a Discrete interpolatiors
67
- * Fold interpolation using constraints outlined in Laurent 2016 with fold geostatistical tools shown in Grose et al., 2017
68
- * Fault interpolation
69
-
70
- If you want to use LoopStructural the easiest way to get started is to use a docker container and a jupyter notebook environment
71
-
72
- 1. Pull the loopstructural docker image `docker pull lachlangrose/loopstructural`
73
- 2. Start a docker container `docker run -it -p 8888:8888 lachlangrose/loopstructural`
74
-
75
- ## Documentation
76
- The LoopStructural documentation can be found [here](https://loop3d.github.io/LoopStructural)
77
- ## Problems
78
- Any bugs/feature requests/comments please create a new [issue](https://github.com/Loop3D/LoopStructural/issues).
79
-
80
- ## Acknowledgements
81
- *The Loop platform is an open source 3D probabilistic geological and geophysical modelling platform, initiated by Geoscience Australia and the OneGeology consortium. The project is funded by Australian territory, State and Federal Geological Surveys, the Australian Research Council and the MinEx Collaborative Research Centre.*