LoopStructural 1.6.1__py3-none-any.whl → 1.6.6__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 (69) hide show
  1. LoopStructural/datatypes/_bounding_box.py +77 -7
  2. LoopStructural/datatypes/_point.py +67 -7
  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/_builders.py +141 -141
  9. LoopStructural/interpolators/_discrete_fold_interpolator.py +11 -4
  10. LoopStructural/interpolators/_discrete_interpolator.py +100 -53
  11. LoopStructural/interpolators/_finite_difference_interpolator.py +78 -88
  12. LoopStructural/interpolators/_geological_interpolator.py +27 -10
  13. LoopStructural/interpolators/_interpolator_builder.py +55 -0
  14. LoopStructural/interpolators/_interpolator_factory.py +7 -18
  15. LoopStructural/interpolators/_p1interpolator.py +3 -3
  16. LoopStructural/interpolators/_surfe_wrapper.py +42 -12
  17. LoopStructural/interpolators/supports/_2d_base_unstructured.py +16 -0
  18. LoopStructural/interpolators/supports/_2d_structured_grid.py +44 -9
  19. LoopStructural/interpolators/supports/_3d_base_structured.py +28 -7
  20. LoopStructural/interpolators/supports/_3d_structured_grid.py +38 -12
  21. LoopStructural/interpolators/supports/_3d_structured_tetra.py +7 -3
  22. LoopStructural/interpolators/supports/_3d_unstructured_tetra.py +8 -2
  23. LoopStructural/interpolators/supports/__init__.py +7 -0
  24. LoopStructural/interpolators/supports/_base_support.py +7 -0
  25. LoopStructural/modelling/__init__.py +1 -3
  26. LoopStructural/modelling/core/geological_model.py +11 -12
  27. LoopStructural/modelling/features/__init__.py +1 -0
  28. LoopStructural/modelling/features/_analytical_feature.py +48 -18
  29. LoopStructural/modelling/features/_base_geological_feature.py +37 -8
  30. LoopStructural/modelling/features/_cross_product_geological_feature.py +7 -0
  31. LoopStructural/modelling/features/_geological_feature.py +50 -12
  32. LoopStructural/modelling/features/_projected_vector_feature.py +112 -0
  33. LoopStructural/modelling/features/_structural_frame.py +16 -18
  34. LoopStructural/modelling/features/_unconformity_feature.py +3 -3
  35. LoopStructural/modelling/features/builders/_base_builder.py +8 -0
  36. LoopStructural/modelling/features/builders/_folded_feature_builder.py +47 -16
  37. LoopStructural/modelling/features/builders/_geological_feature_builder.py +29 -13
  38. LoopStructural/modelling/features/builders/_structural_frame_builder.py +7 -2
  39. LoopStructural/modelling/features/fault/__init__.py +1 -1
  40. LoopStructural/modelling/features/fault/_fault_function.py +19 -1
  41. LoopStructural/modelling/features/fault/_fault_function_feature.py +3 -0
  42. LoopStructural/modelling/features/fault/_fault_segment.py +50 -53
  43. LoopStructural/modelling/features/fold/__init__.py +1 -2
  44. LoopStructural/modelling/features/fold/_fold_rotation_angle_feature.py +0 -23
  45. LoopStructural/modelling/features/fold/_foldframe.py +4 -4
  46. LoopStructural/modelling/features/fold/_svariogram.py +81 -46
  47. LoopStructural/modelling/features/fold/fold_function/__init__.py +27 -0
  48. LoopStructural/modelling/features/fold/fold_function/_base_fold_rotation_angle.py +253 -0
  49. LoopStructural/modelling/features/fold/fold_function/_fourier_series_fold_rotation_angle.py +153 -0
  50. LoopStructural/modelling/features/fold/fold_function/_lambda_fold_rotation_angle.py +46 -0
  51. LoopStructural/modelling/features/fold/fold_function/_trigo_fold_rotation_angle.py +151 -0
  52. LoopStructural/modelling/input/process_data.py +47 -26
  53. LoopStructural/modelling/input/project_file.py +49 -23
  54. LoopStructural/modelling/intrusions/intrusion_feature.py +3 -0
  55. LoopStructural/utils/__init__.py +1 -0
  56. LoopStructural/utils/_surface.py +18 -6
  57. LoopStructural/utils/_transformation.py +98 -14
  58. LoopStructural/utils/colours.py +50 -0
  59. LoopStructural/utils/features.py +5 -0
  60. LoopStructural/utils/maths.py +53 -1
  61. LoopStructural/version.py +1 -1
  62. LoopStructural-1.6.6.dist-info/METADATA +160 -0
  63. {LoopStructural-1.6.1.dist-info → LoopStructural-1.6.6.dist-info}/RECORD +66 -59
  64. {LoopStructural-1.6.1.dist-info → LoopStructural-1.6.6.dist-info}/WHEEL +1 -1
  65. LoopStructural/interpolators/_non_linear_discrete_interpolator.py +0 -0
  66. LoopStructural/modelling/features/fold/_fold_rotation_angle.py +0 -149
  67. LoopStructural-1.6.1.dist-info/METADATA +0 -81
  68. {LoopStructural-1.6.1.dist-info → LoopStructural-1.6.6.dist-info}/LICENSE +0 -0
  69. {LoopStructural-1.6.1.dist-info → LoopStructural-1.6.6.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,160 @@
1
+ Metadata-Version: 2.2
2
+ Name: LoopStructural
3
+ Version: 1.6.6
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: visualisation
35
+ Requires-Dist: matplotlib; extra == "visualisation"
36
+ Requires-Dist: pyvista; extra == "visualisation"
37
+ Requires-Dist: loopstructuralviusualisation>0.1.4; extra == "visualisation"
38
+ Provides-Extra: export
39
+ Requires-Dist: geoh5py; extra == "export"
40
+ Requires-Dist: pyevtk; extra == "export"
41
+ Requires-Dist: dill; extra == "export"
42
+ Provides-Extra: jupyter
43
+ Requires-Dist: pyvista[all]; extra == "jupyter"
44
+ Requires-Dist: tqdm; extra == "jupyter"
45
+ Provides-Extra: inequalities
46
+ Requires-Dist: loopsolver; extra == "inequalities"
47
+ Provides-Extra: docs
48
+ Requires-Dist: pyvista[all]; extra == "docs"
49
+ Requires-Dist: pydata-sphinx-theme; extra == "docs"
50
+ Requires-Dist: meshio; extra == "docs"
51
+ Requires-Dist: loopstructuralvisualisation[all]; extra == "docs"
52
+ Requires-Dist: networkx; extra == "docs"
53
+ Requires-Dist: scikit-learn; extra == "docs"
54
+ Requires-Dist: scikit-image; extra == "docs"
55
+ Requires-Dist: sphinx; extra == "docs"
56
+ Requires-Dist: sphinx-gallery; extra == "docs"
57
+ Requires-Dist: geoh5py; extra == "docs"
58
+ Requires-Dist: geopandas; extra == "docs"
59
+ Requires-Dist: sphinxcontrib-bibtex; extra == "docs"
60
+ Requires-Dist: myst-parser; extra == "docs"
61
+
62
+ # LoopStructural: Loop3D Implicit Geological Modelling
63
+
64
+ ![3D model of Hamersley created using loopstructural](docs/source/images/image823.png)
65
+ [![PyPI version](https://badge.fury.io/py/LoopStructural.svg)](https://badge.fury.io/py/LoopStructural)
66
+ [![GitHub license](https://img.shields.io/github/license/Naereen/StrapDown.js.svg)](https://github.com/Loop3D/LoopStructural/blob/master/LICENSE)
67
+ [![Documentation loop3d.github.io/LoopStructural/](https://img.shields.io/badge/docs-githubio-brightgreen)](https://loop3d.github.io/LoopStructural)
68
+
69
+ ## Overview
70
+
71
+ 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:
72
+
73
+ - Model fault networks integrating fault kinematics and overprinting relationships
74
+ - Model folds using structural elements (fold axis, fold axial surface) for multiple fold events
75
+ - Use different implicit interpolation algorithms (Finite Difference, Piecewiese Linear, RBF)
76
+ - Export models to vtk, geoh5, omf, gocad, csv, obj formats
77
+ - Visualise models in an interactive python environment.
78
+
79
+ ## Installation
80
+
81
+ ### Google colab
82
+
83
+ LoopStructural can be used inside a google colab notebook, however interactive visualisation using kitware trame does not work. Only static plots can be displayed.
84
+
85
+ ### Pip
86
+
87
+ `pip install loopstructural`
88
+
89
+ Optional dependencies are:
90
+
91
+ - loopstructuralvisualisation (wrapper for pyvista to interface with loopstructural objects)
92
+ - pyvista (3D visualisation)
93
+ - geoh5py (export to .geoh5 format)
94
+ - mira-omf (export to .omf format to load in Leapfrog)
95
+ - pyevtk
96
+ - dill (serialize loop models to a pickle file)
97
+ - tqdm (progress bars)
98
+ - loopsolver (experimental solver for admm inequality constraints)
99
+
100
+ You can install all of the optional dependencies using:
101
+ `pip install loopstructural[all]`
102
+
103
+ ### conda
104
+
105
+ `conda install -c conda-forge -c loop3d loopstructural`
106
+
107
+ to install the working 3D visualisation environment
108
+ `conda install -c conda-forge -c loop3d loopstructural loopstructuralvisualisation pyvista trame trame-vtk trame-vuetify`
109
+
110
+ ## Quickstart
111
+
112
+ - A basic geological model
113
+
114
+ ```Python
115
+ from LoopStructural import GeologicalModel
116
+ from LoopStructural.datatypes import BoundingBox
117
+ from LoopStructural.visualisation import Loop3DView
118
+ from LoopStructural.datasets import load_claudius
119
+
120
+ import numpy as np
121
+ data, bb = load_claudius()
122
+
123
+ #bb constaints origin and maximum of axis aligned bounding box
124
+ #data is a pandas dataframe with X,Y,Z,val,nx,ny,nz, feature_name
125
+
126
+ model = GeologicalModel(bb[0,:],bb[1,:])
127
+ model.data = data
128
+ # nelements specifies the number of discrete interpolation elements
129
+ # 'stratí' is the feature name in the data dataframe
130
+ model.create_and_add_foliation('strati',nelements=1e5)
131
+ model.update()
132
+ # get the value of the interpolator at some random locations
133
+ locations = np.array(
134
+ [
135
+ np.random.uniform(bb[0, 0], bb[1, 0],5),
136
+ np.random.uniform(bb[0, 1], bb[1, 1],5),
137
+ np.random.uniform(bb[0, 2], bb[1, 2],5),
138
+ ]
139
+ ).T
140
+ val = model.evaluate_feature_value('strati', locations)
141
+ # get the gradient of the interpolator
142
+ gradient = model.evaluate_feature_gradient('strati',locations)
143
+
144
+ #Plot the scalar field of the model
145
+ model['strati'].scalar_field().plot()
146
+
147
+
148
+ ```
149
+
150
+ ## Documentation
151
+
152
+ The LoopStructural documentation can be found [here](https://loop3d.github.io/LoopStructural)
153
+
154
+ ## Problems
155
+
156
+ Any bugs/feature requests/comments please create a new [issue](https://github.com/Loop3D/LoopStructural/issues).
157
+
158
+ ## Acknowledgements
159
+
160
+ _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=UB0rz0TMsR0fTvEwewaJTcQXyTNQSEi2_Jkyoms_bss,22
2
+ LoopStructural/version.py,sha256=jZXedhX8KUpTuFqDH2e8mjgp06okeyO4Id8VnCVtFpQ,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,101 +29,108 @@ 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=5Gx8CGH--VjYVCBOyaill-f3bevYul2NwVtmgvj9a2A,16151
33
+ LoopStructural/datatypes/_point.py,sha256=iBajMDEod0zU85WjmHGnXf1MmB73DvDWm2fg_jK8IBA,7183
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
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
48
- LoopStructural/interpolators/_interpolator_factory.py,sha256=LSxrf7tEWek_0tNxioGHeWWwu3Ywf8Ar79M6gC75tBY,3468
49
- LoopStructural/interpolators/_non_linear_discrete_interpolator.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
+ LoopStructural/export/omf_wrapper.py,sha256=4vcF4WOQIVEYsWrfATgKCDh8nUybLTbrlXnCxZ_3fkU,3392
41
+ LoopStructural/interpolators/__init__.py,sha256=h-m1FkkRFGCnXWJSWwFKrfgCDtmboAPvJrpXCL58Huc,3450
42
+ LoopStructural/interpolators/_api.py,sha256=EC4ogG2uPq-z_pgNGd_eTieTl92eaZ-rjyoFwXiHL_s,7839
43
+ LoopStructural/interpolators/_builders.py,sha256=B49KsxB8RRN6IHDfGT43nXWe_Av1SVVT8vm2Nh1oEiQ,6758
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=csjHpcDNKufFt4LUOR-ZsBEmQ4YLkFt0qd9KUqXI_T4,15950
47
+ LoopStructural/interpolators/_geological_interpolator.py,sha256=4qPkJKWW1Kqe-U78CLR8ayLdFXq9aJZ2FB5_ntITxHk,11028
48
+ LoopStructural/interpolators/_interpolator_builder.py,sha256=M-nX7qzigW0QYNqSQQkxXAdwKW9BQrL-qSdSUAWtTCc,1917
49
+ LoopStructural/interpolators/_interpolator_factory.py,sha256=WcAbLtxLs4T5tt9ysZb-lorwgVi8utNunHsRCJrJd2k,2864
50
50
  LoopStructural/interpolators/_operator.py,sha256=PZOUzq9OMaJdG151dSLIo7AxRuhTj6-zEAzFZo-EOJU,1114
51
- LoopStructural/interpolators/_p1interpolator.py,sha256=et-8sRX442XVNZK14XHx7GYtkCaW7OSkawn9zzftg3g,8753
51
+ LoopStructural/interpolators/_p1interpolator.py,sha256=4rjj4iaw2c8hOfBS9u8ycxzijYdmvpeijvhYRwUwZg0,8736
52
52
  LoopStructural/interpolators/_p2interpolator.py,sha256=UT-As5RNsmOwHOzO_6FiRcAwlNHfi4ILbJw2LGpwKAw,10274
53
- LoopStructural/interpolators/_surfe_wrapper.py,sha256=OOf8KevdBGRnrYtkw3EPTWR9Iy43gpH4Vj4UrbEiJmA,5909
53
+ LoopStructural/interpolators/_surfe_wrapper.py,sha256=uwqABnixan9bcyU08hbxO9ATO4DawItuGSGj7iAKa9U,6772
54
54
  LoopStructural/interpolators/_cython/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
- LoopStructural/interpolators/supports/_2d_base_unstructured.py,sha256=IPDdXGn8QVPugqVGbepj2rKQjbQinjZtduus240wvb0,11197
55
+ LoopStructural/interpolators/supports/_2d_base_unstructured.py,sha256=maHzpHnPRoo5IOLcp4Si7kj0oaxFox8XYrknwErbyoo,11796
56
56
  LoopStructural/interpolators/supports/_2d_p1_unstructured.py,sha256=okcy56nyjuedmknQn_95V2tm0kdMA-oJcD3U2jU8u0w,2637
57
57
  LoopStructural/interpolators/supports/_2d_p2_unstructured.py,sha256=TeBVtT1PMV7CKzmnFZke37acMoFxouer20cskS7pVoE,10422
58
- LoopStructural/interpolators/supports/_2d_structured_grid.py,sha256=8jG0ASTHtCiEohvsc8TzwBVwJ0iyJJID4SVJQwgk2nk,14978
58
+ LoopStructural/interpolators/supports/_2d_structured_grid.py,sha256=TbAV1iw2gmZ4ovSMj04GLKaDZjbxK7YAceJ4wBYn8m8,16209
59
59
  LoopStructural/interpolators/supports/_2d_structured_tetra.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
- LoopStructural/interpolators/supports/_3d_base_structured.py,sha256=IDORlhwyCYP3paBEd1Dtwc7u6Oszs6CxcaNgHRH6wCI,14539
60
+ LoopStructural/interpolators/supports/_3d_base_structured.py,sha256=x3IuXXryyRR_R91e4BbAN0BsbgMTR8fldfQgQR3lRmA,15712
61
61
  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
62
+ LoopStructural/interpolators/supports/_3d_structured_grid.py,sha256=0H5wh5pBcxqw3crFeXdpnaKMfbSmJNOt-v9-IQa8tSM,17286
63
+ LoopStructural/interpolators/supports/_3d_structured_tetra.py,sha256=5zUNtvEXDvbCHZCu6Fz9WjGbnrMaq-sYJqNUufyLcq8,26505
64
+ LoopStructural/interpolators/supports/_3d_unstructured_tetra.py,sha256=vc9ZffCYk7m1Ae5-H_m1P5OCHgBa9jztrklugMPPiHc,23500
65
+ LoopStructural/interpolators/supports/__init__.py,sha256=V0JjixoBIUZVAo5MmqARR67xDOoQwnb4G3SXeOMRSyQ,1603
66
66
  LoopStructural/interpolators/supports/_aabb.py,sha256=Z-kH_u6c6izak0aHG3Uo14PEKQeZmYlevLDC32Q06xk,3208
67
- LoopStructural/interpolators/supports/_base_support.py,sha256=KgSBW3YhRSX1Tm8h6a-2dQiuJxeKIhqVCmSYgASgMX8,2275
67
+ LoopStructural/interpolators/supports/_base_support.py,sha256=5Cwq16EhA2rx4-DFUmoM5z6DRnDfRLkachBpGyzShdM,2420
68
68
  LoopStructural/interpolators/supports/_face_table.py,sha256=Hyj4Io63NkPRN8ab9uDHyec-2Kb8BLY_xBF6STNlvBw,3095
69
69
  LoopStructural/interpolators/supports/_support_factory.py,sha256=c86NnM4azWhS2ajPApePap0sFI82mZC8siVAU1fCOn4,1175
70
- LoopStructural/modelling/__init__.py,sha256=pPJSZMlyE_xliv0c1C4M5QlqYuBOUTRLQQtmXKQ1xpU,754
70
+ LoopStructural/modelling/__init__.py,sha256=oW7dz6c8K1A0VcW7-mVcyqcENUrtybCb3eVUNXFvMfA,656
71
71
  LoopStructural/modelling/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
72
- LoopStructural/modelling/core/geological_model.py,sha256=izhq1plPWLjJb8qwJbpqf6PPN4ndC1_2-5ujv6x4dQg,66173
73
- LoopStructural/modelling/features/__init__.py,sha256=qTl-jTau-nnSZ4G4Np6JkBcXB01ViXhouUo_-ImoDvk,877
74
- LoopStructural/modelling/features/_analytical_feature.py,sha256=L0GQvOPAk27KNejaqvbLXOJo_jbJJS_V3m4c9Dymheg,2701
75
- LoopStructural/modelling/features/_base_geological_feature.py,sha256=SP-lWDJDdXZY0UAht33sJkOpW-lGN9NZqP2RuZDgyxg,11102
76
- LoopStructural/modelling/features/_cross_product_geological_feature.py,sha256=IOcJBgQeGBOgwymcyyEdsQHHbVs23sYPpl8xavBaPZE,2781
77
- LoopStructural/modelling/features/_geological_feature.py,sha256=pdLum5tTn4aImUhe-47F6jyqbSb73-AIWhegLNG7FP4,9699
72
+ LoopStructural/modelling/core/geological_model.py,sha256=5P1T4eA-GQd5hp3t7pOO4pa7JGqdXXMk5k-OlKv3HKo,66230
73
+ LoopStructural/modelling/features/__init__.py,sha256=Vf-qd5EDBtJ1DpuXXyCcw2-wf6LWPRW5wzxDEO3vOc8,939
74
+ LoopStructural/modelling/features/_analytical_feature.py,sha256=U_g86LgQhYY2359rdsDqpvziYwqrWkc5EdvhJARiUWo,3597
75
+ LoopStructural/modelling/features/_base_geological_feature.py,sha256=t6x2Vdhv9KeQ4xoeXUxAKHXwGiBl_WwHu4XAZBGQTWg,11964
76
+ LoopStructural/modelling/features/_cross_product_geological_feature.py,sha256=9vfqNs9y4VqKP066L0_Cw4fYPYXx4UDCH7cTGdimitA,3021
77
+ LoopStructural/modelling/features/_geological_feature.py,sha256=lh7XzTQZJioda81I9WMKnRgbxWI-RM0vkUpNPfr_i_U,11340
78
78
  LoopStructural/modelling/features/_lambda_geological_feature.py,sha256=pEfLN9HcYGluxRB7LJpcKdYqXP_Mkyo1pLZ3kZZ4mvA,2599
79
+ LoopStructural/modelling/features/_projected_vector_feature.py,sha256=5y1rMq3ZGG4ObSIQBcqFW_E0mfiKlFPoEdWjjnhrpwk,3017
79
80
  LoopStructural/modelling/features/_region.py,sha256=TB4qnoTDQM2VgRjgyODN839fKe3kuRYLllJj0xnDKXo,478
80
- LoopStructural/modelling/features/_structural_frame.py,sha256=I6W-YkQiRADX7xcKMFzDefYGDlXWVAp5nAVRFVcqNow,5062
81
- LoopStructural/modelling/features/_unconformity_feature.py,sha256=-0shSjYdT8IuNDNDYnqJ2niFjFFiBt-Izc-oMBYa0MQ,2405
81
+ LoopStructural/modelling/features/_structural_frame.py,sha256=e3QmNHLwuZc5PX3rLafocmBLNTclO90AXB4BRILCFC4,5044
82
+ LoopStructural/modelling/features/_unconformity_feature.py,sha256=6SAgPkjipRR0Wo4aXblKyT2YuIphZc6ys1rbLXt4Umw,2409
82
83
  LoopStructural/modelling/features/builders/__init__.py,sha256=Gqld1C-PcaXfJ8vpkWMDCmehmd3hZNYQk1knPtl59Bk,266
83
- LoopStructural/modelling/features/builders/_base_builder.py,sha256=cafVl-KImwSZmHxTuzlpnkh1lW9ARJXJLE0NQ4T_ook,3221
84
+ LoopStructural/modelling/features/builders/_base_builder.py,sha256=ImlKZs4sFSrtAAp1NEpQD35AKF_mLEHr7jj2DzSyAd4,3561
84
85
  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
90
- 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
86
+ LoopStructural/modelling/features/builders/_folded_feature_builder.py,sha256=1_0BVTzcvmFl6K3_lX-jF0tiMFPmS8j6vPeSLn9MbrE,6607
87
+ LoopStructural/modelling/features/builders/_geological_feature_builder.py,sha256=Js3NgfbFipZrTmKrIMKsNpRE5EeBxy0_TmGz3ytO5YA,21628
88
+ LoopStructural/modelling/features/builders/_structural_frame_builder.py,sha256=yxHVUqgQHZtAXtgnzaf_ZWTE-BhixoPD78vpQpK7Az4,7776
89
+ LoopStructural/modelling/features/fault/__init__.py,sha256=4u0KfYzmoO-ddFGo9qd9ov0gBoLqBiPAUsaw5zhEOAQ,189
90
+ LoopStructural/modelling/features/fault/_fault_function.py,sha256=5IzVyvv1tS5Z6geMB8FdTZpGrBYbyu38cOH03NACm0o,12797
91
+ LoopStructural/modelling/features/fault/_fault_function_feature.py,sha256=4m0jVNx7ewrVI0pECI1wNciv8Cy8FzhZrYDjKJ_e2GU,2558
92
+ LoopStructural/modelling/features/fault/_fault_segment.py,sha256=mxT7305WNuBDtxBErlZ1RCinoQyoxfs5P5PI3_mKLLc,17882
93
+ LoopStructural/modelling/features/fold/__init__.py,sha256=mOq_K5IHjE3FoK7dhYpljUMGj0gvEX2Fyqtzjd4EYfQ,176
93
94
  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
95
+ LoopStructural/modelling/features/fold/_fold_rotation_angle_feature.py,sha256=CXLbFRQ3CrTMAcHmfdbKcmSvvLs9_6TLe0Wqi1pK2tg,892
96
+ LoopStructural/modelling/features/fold/_foldframe.py,sha256=Rgf5aofN0OVDTZ2pzqLzAGlJUO2rnNm3aFvLSnH77yo,7669
97
+ LoopStructural/modelling/features/fold/_svariogram.py,sha256=uzGaKZ5HGh8xZcsGGg68GUKVjkd5udLy7-4lh0NQc2Y,7765
98
+ LoopStructural/modelling/features/fold/fold_function/__init__.py,sha256=VqMjabsBd5GnPnDMXeKwXqtd0te2iXnvHxpf6jCC9YU,830
99
+ LoopStructural/modelling/features/fold/fold_function/_base_fold_rotation_angle.py,sha256=EC9q-zKX86AoDruXg_6MOD7lo1kVshfFcLlZ25EfFp0,8048
100
+ LoopStructural/modelling/features/fold/fold_function/_fourier_series_fold_rotation_angle.py,sha256=Cjb6Pt6cdRoH3WGqFyJ2rHxnMe6SKvzRayA6hTuwZA8,4069
101
+ LoopStructural/modelling/features/fold/fold_function/_lambda_fold_rotation_angle.py,sha256=U-IL7DETQhKh7a-cHlEKtsIg2kd8JZqO2gWyb_PKB8k,1446
102
+ LoopStructural/modelling/features/fold/fold_function/_trigo_fold_rotation_angle.py,sha256=v-3YkBbsqPdbPZD2ykPB3vLKz3W_BDSF2m0uxtpP2vo,4904
98
103
  LoopStructural/modelling/input/__init__.py,sha256=HhJM3V5b-8_64LiRbF3Bd1pjWhJlcknxMSMPRrqZ0-I,153
99
104
  LoopStructural/modelling/input/fault_network.py,sha256=0uxl7lOySdhMhNXoiOkuiHIXqAz1Ls0j-W65cmdQoP8,2348
100
105
  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
106
+ LoopStructural/modelling/input/process_data.py,sha256=dmA6F-l8nvdH3Ckp5OaAjl3NJoWgm3PuELdXtBRGrz8,26149
107
+ LoopStructural/modelling/input/project_file.py,sha256=WhJkMfDK9uE7MK7HK-YK6ZOBAdwLX5P7ThZgXj444Eg,4604
103
108
  LoopStructural/modelling/intrusions/__init__.py,sha256=EpZK3cHJwGQhPUYIwKCKu8vkNdt_nOgWF0zfhiqDYDA,712
104
109
  LoopStructural/modelling/intrusions/geom_conceptual_models.py,sha256=jwTlhYySUj7z4DEnJoi4AINZB_N3-SW6ONRFL66OsW0,3665
105
110
  LoopStructural/modelling/intrusions/geometric_scaling_functions.py,sha256=PK3qf0TiK-WYIBGG7fYhTD1hwlUN0s75BK8d53SLYuQ,3209
106
111
  LoopStructural/modelling/intrusions/intrusion_builder.py,sha256=1cJjPyRUf3ZDkpwgGJ7TvY-kpqFgG9pXD8yrGfhqwYg,26381
107
- LoopStructural/modelling/intrusions/intrusion_feature.py,sha256=5DFQ1uccX7Rp3PMc_pidw-HixDtKyiRhfLkIUye_Gcc,15455
112
+ LoopStructural/modelling/intrusions/intrusion_feature.py,sha256=ESjtikHFJQzUnowbYiY7UZ_kYdV2QHobQoRJ2far9Vc,15489
108
113
  LoopStructural/modelling/intrusions/intrusion_frame_builder.py,sha256=Q1TPHxREcrO7Rw71nUfACZHfYnISLjqlgkUNTPT324k,40143
109
114
  LoopStructural/modelling/intrusions/intrusion_support_functions.py,sha256=wodakheMD62WJyoKnyX8UO-C1pje0I-5kHQEoDqShzo,13951
110
- LoopStructural/utils/__init__.py,sha256=K6OwdnC8RE-sDhG4GIbVyoJNUD0WnM1VGG6os1l_Woc,870
111
- LoopStructural/utils/_surface.py,sha256=Wc4xLhSjyjNNDWkj9X88R0HKMviU1R206SLU9sHhLaU,5369
112
- LoopStructural/utils/_transformation.py,sha256=7iDPMIBoZ73ZGa_slbC9XzdMQ-ONOxvF7UkY4dJaw54,2443
115
+ LoopStructural/utils/__init__.py,sha256=OJqNSu40SYJeC26IhoBBXDqQOogWjMGA-YokKVRrwMs,924
116
+ LoopStructural/utils/_surface.py,sha256=Slz5CvH1KkMq1ycWHILQ_elNoLmzDFdZ2LdDL2q9Ml4,5962
117
+ LoopStructural/utils/_transformation.py,sha256=lLoH3FlLjR9vVjc1-64ANL_53kWPU7qu8WVsG9K1wLw,4806
118
+ LoopStructural/utils/colours.py,sha256=73FKc2wr4c2UZL1gpyTVUo1v_FAlF7TNteGIdnz7InU,1137
113
119
  LoopStructural/utils/config.py,sha256=ITGOtZTo2_QBwXkG_0AFANfE90J9siCXLzxypVmg9QA,414
114
120
  LoopStructural/utils/dtm_creator.py,sha256=-yqGG0wyEJfTCCDghz058wull1q3zGFASjeu8oDgYnk,535
115
121
  LoopStructural/utils/exceptions.py,sha256=SJboJ7ncMqVX-ib7MMizClwMrFZRHQhjZr2eCnVwnQE,500
122
+ LoopStructural/utils/features.py,sha256=WCatS4lYBrURNvWvWwhOsDVUod9KIPNq3x0OHPbWctU,241
116
123
  LoopStructural/utils/helper.py,sha256=An9NuRH16cASUWq2ZakHc1tZt_AvUpgx8tv4cyWZEQk,6581
117
124
  LoopStructural/utils/json_encoder.py,sha256=5YNouf1TlhjEqOYgthd07MRXc0JLgxern-nyKSZ__ws,403
118
125
  LoopStructural/utils/linalg.py,sha256=tBXyu6NXcG2AcPuzUMnkVI4ncZWtE_MPHGj2PLXRwfY,123
119
126
  LoopStructural/utils/logging.py,sha256=dIUWEsS2lT4G1dsf4ZYXknTR7eQkrgvGA4b_E0vMIRU,2402
120
- LoopStructural/utils/maths.py,sha256=Y6xjNgfWD9TdaJaDuJJ_Uy8JNBzHA1fbVzQ8JPp_kW0,6668
127
+ LoopStructural/utils/maths.py,sha256=8iqdQdB2-bf14SzIzfFxvjWbzmPknqK9DI7CWEcW6XU,8402
121
128
  LoopStructural/utils/regions.py,sha256=LvcOCPudF4u95-GKBOZqXVxOEcR3cOFgFpcs5x43sMk,3914
122
129
  LoopStructural/utils/typing.py,sha256=29uVSTZdzXXH-jdlaYyBWZ1gQ2-nlZ2-XoVgG_PXNFY,157
123
130
  LoopStructural/utils/utils.py,sha256=2Z4zVE6G752-SPmM29zebk82bROJxEwi_YiiJjcVED4,2438
124
131
  LoopStructural/visualisation/__init__.py,sha256=5BDgKor8-ae6DrS7IZybJ3Wq_pTnCchxuY4EgzA7v1M,318
125
- LoopStructural-1.6.1.dist-info/LICENSE,sha256=ZqGeNFOgmYevj7Ld7Q-kR4lAxWXuBRUdUmPC6XM_py8,1071
126
- LoopStructural-1.6.1.dist-info/METADATA,sha256=B_oF9J3Gjg7KBEaDGHma20b0IpW5bZqydSqmDPXY01E,4958
127
- LoopStructural-1.6.1.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
128
- LoopStructural-1.6.1.dist-info/top_level.txt,sha256=QtQErKzYHfg6ddxTQ1NyaTxXBVM6qAqrM_vxEPyXZLg,15
129
- LoopStructural-1.6.1.dist-info/RECORD,,
132
+ LoopStructural-1.6.6.dist-info/LICENSE,sha256=ZqGeNFOgmYevj7Ld7Q-kR4lAxWXuBRUdUmPC6XM_py8,1071
133
+ LoopStructural-1.6.6.dist-info/METADATA,sha256=nwUNFHQGm-gSVIajeYytyRanadnCu2znYwD5gpIGcTw,6399
134
+ LoopStructural-1.6.6.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
135
+ LoopStructural-1.6.6.dist-info/top_level.txt,sha256=QtQErKzYHfg6ddxTQ1NyaTxXBVM6qAqrM_vxEPyXZLg,15
136
+ LoopStructural-1.6.6.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (72.1.0)
2
+ Generator: setuptools (75.8.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.1
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.*