LoopStructural 1.0.4__zip → 1.0.71.dev0__zip

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 (158) hide show
  1. Miniconda/envs/loop/Lib/site-packages/LoopStructural/__init__.py +12 -7
  2. Miniconda/envs/loop/Lib/site-packages/LoopStructural/__pycache__/__init__.cpython-36.pyc +0 -0
  3. Miniconda/envs/loop/Lib/site-packages/LoopStructural/datasets/__pycache__/{__init__.cpython-37.pyc → __init__.cpython-36.pyc} +0 -0
  4. Miniconda/envs/loop/Lib/site-packages/LoopStructural/datasets/__pycache__/{_base.cpython-37.pyc → _base.cpython-36.pyc} +0 -0
  5. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__init__.py +3 -0
  6. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/__init__.cpython-36.pyc +0 -0
  7. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/base_structured_3d_support.cpython-36.pyc +0 -0
  8. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/discrete_fold_interpolator.cpython-36.pyc +0 -0
  9. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/discrete_interpolator.cpython-36.pyc +0 -0
  10. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/finite_difference_interpolator.cpython-36.pyc +0 -0
  11. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/geological_interpolator.cpython-36.pyc +0 -0
  12. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/operator.cpython-36.pyc +0 -0
  13. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/piecewiselinear_interpolator.cpython-36.pyc +0 -0
  14. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/structured_grid.cpython-36.pyc +0 -0
  15. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/structured_tetra.cpython-36.pyc +0 -0
  16. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/surfe_wrapper.cpython-36.pyc +0 -0
  17. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/base_structured_3d_support.py +101 -0
  18. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/cython/__pycache__/__init__.cpython-36.pyc +0 -0
  19. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/cython/dsi_helper.c +3899 -2455
  20. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/cython/dsi_helper.cp36-win_amd64.pyd +0 -0
  21. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/discrete_fold_interpolator.py +53 -22
  22. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/discrete_interpolator.py +61 -28
  23. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/finite_difference_interpolator.py +68 -11
  24. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/geological_interpolator.py +8 -1
  25. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/operator.py +2 -1
  26. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/piecewiselinear_interpolator.py +97 -8
  27. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/structured_grid.py +25 -69
  28. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/structured_tetra.py +86 -43
  29. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/surfe_wrapper.py +4 -3
  30. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/__pycache__/{__init__.cpython-37.pyc → __init__.cpython-36.pyc} +0 -0
  31. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/core/__pycache__/__init__.cpython-36.pyc +0 -0
  32. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/core/__pycache__/geological_model.cpython-36.pyc +0 -0
  33. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/core/__pycache__/geological_model_graph.cpython-36.pyc +0 -0
  34. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/core/__pycache__/stratigraphic_column.cpython-36.pyc +0 -0
  35. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/core/geological_model.py +303 -150
  36. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/core/geological_model_graph.py +881 -0
  37. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/core/stratigraphic_column.py +5 -0
  38. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/__init__.py +1 -0
  39. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/__pycache__/__init__.cpython-36.pyc +0 -0
  40. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/__pycache__/fault_builder.cpython-36.pyc +0 -0
  41. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/__pycache__/fault_function.cpython-36.pyc +0 -0
  42. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/__pycache__/fault_function_feature.cpython-36.pyc +0 -0
  43. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/__pycache__/fault_segment.cpython-36.pyc +0 -0
  44. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/fault_builder.py +127 -0
  45. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/fault_function.py +2 -1
  46. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/fault_function_feature.py +2 -1
  47. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/fault_segment.py +30 -3
  48. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__init__.py +1 -0
  49. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/__init__.cpython-36.pyc +0 -0
  50. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/cross_product_geological_feature.cpython-36.pyc +0 -0
  51. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/geological_feature.cpython-36.pyc +0 -0
  52. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/geological_feature_builder.cpython-36.pyc +0 -0
  53. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/lambda_geological_feature.cpython-36.pyc +0 -0
  54. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/{region_feature.cpython-37.pyc → region_feature.cpython-36.pyc} +0 -0
  55. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/structural_frame.cpython-36.pyc +0 -0
  56. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/structural_frame_builder.cpython-36.pyc +0 -0
  57. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/unconformity_feature.cpython-36.pyc +0 -0
  58. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/cross_product_geological_feature.py +18 -5
  59. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/geological_feature.py +10 -44
  60. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/geological_feature_builder.py +127 -43
  61. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/lambda_geological_feature.py +31 -0
  62. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/structural_frame.py +28 -11
  63. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/structural_frame_builder.py +25 -15
  64. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/unconformity_feature.py +6 -1
  65. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/__pycache__/{__init__.cpython-37.pyc → __init__.cpython-36.pyc} +0 -0
  66. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/__pycache__/fold.cpython-36.pyc +0 -0
  67. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/__pycache__/fold_rotation_angle.cpython-36.pyc +0 -0
  68. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/__pycache__/fold_rotation_angle_feature.cpython-36.pyc +0 -0
  69. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/__pycache__/foldframe.cpython-36.pyc +0 -0
  70. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/__pycache__/svariogram.cpython-36.pyc +0 -0
  71. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/fold.py +13 -5
  72. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/fold_rotation_angle.py +5 -4
  73. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/fold_rotation_angle_feature.py +2 -1
  74. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/foldframe.py +6 -5
  75. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/svariogram.py +2 -1
  76. Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__init__.py +5 -1
  77. Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/__init__.cpython-36.pyc +0 -0
  78. Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/bounding_box.cpython-36.pyc +0 -0
  79. Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/exceptions.cpython-36.pyc +0 -0
  80. Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/helper.cpython-36.pyc +0 -0
  81. Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/logging.cpython-36.pyc +0 -0
  82. Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/map2loop.cpython-36.pyc +0 -0
  83. Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/regions.cpython-36.pyc +0 -0
  84. Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/utils.cpython-36.pyc +0 -0
  85. Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/bounding_box.py +21 -0
  86. Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/exceptions.py +2 -1
  87. Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/helper.py +5 -1
  88. Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/logging.py +60 -0
  89. Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/map2loop.py +47 -19
  90. Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/regions.py +11 -0
  91. Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/utils.py +2 -53
  92. Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/__pycache__/{__init__.cpython-37.pyc → __init__.cpython-36.pyc} +0 -0
  93. Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/__pycache__/map_viewer.cpython-36.pyc +0 -0
  94. Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/__pycache__/model_plotter.cpython-36.pyc +0 -0
  95. Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/__pycache__/model_visualisation.cpython-36.pyc +0 -0
  96. Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/__pycache__/rotation_angle_plotter.cpython-36.pyc +0 -0
  97. Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/__pycache__/{sphinx_scraper.cpython-37.pyc → sphinx_scraper.cpython-36.pyc} +0 -0
  98. Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/__pycache__/stratigraphic_column.cpython-36.pyc +0 -0
  99. Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/map_viewer.py +17 -2
  100. Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/model_plotter.py +2 -1
  101. Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/model_visualisation.py +152 -84
  102. Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/rotation_angle_plotter.py +2 -1
  103. Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/stratigraphic_column.py +60 -0
  104. Miniconda/envs/loop/Lib/site-packages/{LoopStructural-1.0.4-py3.7.egg-info → LoopStructural-1.0.71.dev0-py3.6.egg-info}/PKG-INFO +1 -1
  105. Miniconda/envs/loop/Lib/site-packages/{LoopStructural-1.0.4-py3.7.egg-info → LoopStructural-1.0.71.dev0-py3.6.egg-info}/SOURCES.txt +10 -5
  106. Miniconda/envs/loop/Lib/site-packages/{LoopStructural-1.0.4-py3.7.egg-info → LoopStructural-1.0.71.dev0-py3.6.egg-info}/requires.txt +1 -1
  107. Miniconda/envs/loop/Lib/site-packages/tests/__pycache__/__init__.cpython-36.pyc +0 -0
  108. Miniconda/envs/loop/Lib/site-packages/LoopStructural/__pycache__/__init__.cpython-37.pyc +0 -0
  109. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/__init__.cpython-37.pyc +0 -0
  110. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/discrete_fold_interpolator.cpython-37.pyc +0 -0
  111. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/discrete_interpolator.cpython-37.pyc +0 -0
  112. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/finite_difference_interpolator.cpython-37.pyc +0 -0
  113. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/geological_interpolator.cpython-37.pyc +0 -0
  114. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/operator.cpython-37.pyc +0 -0
  115. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/piecewiselinear_interpolator.cpython-37.pyc +0 -0
  116. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/structured_grid.cpython-37.pyc +0 -0
  117. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/structured_tetra.cpython-37.pyc +0 -0
  118. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/__pycache__/surfe_wrapper.cpython-37.pyc +0 -0
  119. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/cython/__pycache__/__init__.cpython-37.pyc +0 -0
  120. Miniconda/envs/loop/Lib/site-packages/LoopStructural/interpolators/cython/dsi_helper.cp37-win_amd64.pyd +0 -0
  121. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/core/__pycache__/__init__.cpython-37.pyc +0 -0
  122. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/core/__pycache__/geological_model.cpython-37.pyc +0 -0
  123. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/__pycache__/__init__.cpython-37.pyc +0 -0
  124. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/__pycache__/fault_function.cpython-37.pyc +0 -0
  125. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/__pycache__/fault_function_feature.cpython-37.pyc +0 -0
  126. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fault/__pycache__/fault_segment.cpython-37.pyc +0 -0
  127. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/__init__.cpython-37.pyc +0 -0
  128. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/cross_product_geological_feature.cpython-37.pyc +0 -0
  129. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/geological_feature.cpython-37.pyc +0 -0
  130. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/geological_feature_builder.cpython-37.pyc +0 -0
  131. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/structural_frame.cpython-37.pyc +0 -0
  132. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/structural_frame_builder.cpython-37.pyc +0 -0
  133. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/features/__pycache__/unconformity_feature.cpython-37.pyc +0 -0
  134. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/__pycache__/fold.cpython-37.pyc +0 -0
  135. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/__pycache__/fold_rotation_angle.cpython-37.pyc +0 -0
  136. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/__pycache__/fold_rotation_angle_feature.cpython-37.pyc +0 -0
  137. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/__pycache__/foldframe.cpython-37.pyc +0 -0
  138. Miniconda/envs/loop/Lib/site-packages/LoopStructural/modelling/fold/__pycache__/svariogram.cpython-37.pyc +0 -0
  139. Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/__init__.cpython-37.pyc +0 -0
  140. Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/exceptions.cpython-37.pyc +0 -0
  141. Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/helper.cpython-37.pyc +0 -0
  142. Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/map2loop.cpython-37.pyc +0 -0
  143. Miniconda/envs/loop/Lib/site-packages/LoopStructural/utils/__pycache__/utils.cpython-37.pyc +0 -0
  144. Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/__pycache__/map_viewer.cpython-37.pyc +0 -0
  145. Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/__pycache__/model_plotter.cpython-37.pyc +0 -0
  146. Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/__pycache__/model_visualisation.cpython-37.pyc +0 -0
  147. Miniconda/envs/loop/Lib/site-packages/LoopStructural/visualisation/__pycache__/rotation_angle_plotter.cpython-37.pyc +0 -0
  148. Miniconda/envs/loop/Lib/site-packages/tests/__pycache__/__init__.cpython-37.pyc +0 -0
  149. Miniconda/envs/loop/Lib/site-packages/tests/__pycache__/test_faults.cpython-37.pyc +0 -0
  150. Miniconda/envs/loop/Lib/site-packages/tests/__pycache__/test_fold.cpython-37.pyc +0 -0
  151. Miniconda/envs/loop/Lib/site-packages/tests/__pycache__/test_interpolator.cpython-37.pyc +0 -0
  152. Miniconda/envs/loop/Lib/site-packages/tests/__pycache__/test_refolded.cpython-37.pyc +0 -0
  153. Miniconda/envs/loop/Lib/site-packages/tests/test_faults.py +0 -17
  154. Miniconda/envs/loop/Lib/site-packages/tests/test_fold.py +0 -57
  155. Miniconda/envs/loop/Lib/site-packages/tests/test_interpolator.py +0 -88
  156. Miniconda/envs/loop/Lib/site-packages/tests/test_refolded.py +0 -22
  157. /Miniconda/envs/loop/Lib/site-packages/{LoopStructural-1.0.4-py3.7.egg-info → LoopStructural-1.0.71.dev0-py3.6.egg-info}/dependency_links.txt +0 -0
  158. /Miniconda/envs/loop/Lib/site-packages/{LoopStructural-1.0.4-py3.7.egg-info → LoopStructural-1.0.71.dev0-py3.6.egg-info}/top_level.txt +0 -0
@@ -4,7 +4,8 @@ A wrapper for lavavu
4
4
  """
5
5
 
6
6
  import logging
7
- logger = logging.getLogger(__name__)
7
+ from LoopStructural.utils import getLogger
8
+ logger = getLogger(__name__)
8
9
 
9
10
  try:
10
11
  import lavavu
@@ -12,8 +13,8 @@ try:
12
13
  except ImportError:
13
14
  logger.error("Please install lavavu: pip install lavavu")
14
15
  import numpy as np
15
- from skimage.measure import marching_cubes_lewiner as marching_cubes
16
-
16
+ from skimage.measure import marching_cubes
17
+ from LoopStructural.modelling.features import GeologicalFeature
17
18
  from LoopStructural.utils.helper import create_surface, get_vectors, create_box
18
19
 
19
20
  # adapted/copied from pyvista for sphinx scraper
@@ -125,8 +126,8 @@ class LavaVuModelViewer:
125
126
  self.lv.clear()
126
127
  self.lv.cleardata()
127
128
  pass
128
-
129
- def add_section(self, geological_feature=None, axis='x', value=None, **kwargs):
129
+
130
+ def add_section(self, geological_feature=None, axis='x', value=None, **kwargs):
130
131
  """
131
132
 
132
133
  Plot a section/map thru the model and paint with a geological feature
@@ -146,29 +147,26 @@ class LavaVuModelViewer:
146
147
  -------
147
148
 
148
149
  """
149
-
150
150
  if axis == 'x':
151
151
  tri, yy, zz = create_surface(self.bounding_box[:, [1, 2]], self.nsteps[[1, 2]])
152
152
  xx = np.zeros(zz.shape)
153
153
  if value is None:
154
- xx[:] = np.nanmean(self.bounding_box[:, 0])
155
- else:
156
- xx[:] = value
154
+ value = np.nanmean(self.bounding_box[:, 0])
155
+ xx[:] = value
157
156
  if axis == 'y':
158
157
  tri, xx, zz = create_surface(self.bounding_box[:, [0, 2]], self.nsteps[[0, 2]])
159
158
  yy = np.zeros(xx.shape)
160
159
  if value is None:
161
- yy[:] = np.nanmean(self.bounding_box[:, 1])
162
- else:
163
- yy[:] = value
160
+ value = np.nanmean(self.bounding_box[:, 1])
161
+ yy[:] = value
164
162
  if axis == 'z':
165
163
  tri, xx, yy = create_surface(self.bounding_box[:, 0:2], self.nsteps[0:2])
166
164
  zz = np.zeros(xx.shape)
167
165
  if value is None:
168
- zz[:] = np.nanmean(self.bounding_box[:, 2])
169
- else:
170
- zz[:] = value
171
- name = kwargs.get('name', axis + '_slice')
166
+ value = np.nanmean(self.bounding_box[:, 2])
167
+ zz[:] = value
168
+ name = kwargs.get('name', geological_feature.name)
169
+ name = '{}_section_at_{}_of_{}'.format(axis,value,name)
172
170
  colour = kwargs.get('colour', 'red')
173
171
 
174
172
  # create an array to evaluate the feature on for the section
@@ -178,12 +176,13 @@ class LavaVuModelViewer:
178
176
  points[:, 2] = zz
179
177
 
180
178
  surf = self.lv.triangles(name)
181
- surf.vertices(self.model.rescale(points))
179
+ surf.vertices(self.model.rescale(points,inplace=False))
182
180
  surf.indices(tri)
183
181
  logger.info("Adding %s section at %f" % (axis, value))
184
182
  if geological_feature is None:
185
183
  surf.colours(colour)
186
- if geological_feature is not None:
184
+
185
+ if geological_feature is not None and type(geological_feature) == GeologicalFeature:
187
186
  if 'norm' in kwargs:
188
187
  surf.values(np.linalg.norm(
189
188
  geological_feature.evaluate_gradient(points), axis=1),
@@ -198,6 +197,15 @@ class LavaVuModelViewer:
198
197
  logger.info("Colouring section with %s min: %f, max: %f" % (
199
198
  geological_feature.name, geological_feature.min(), geological_feature.max()))
200
199
  surf.colourmap(cmap, range=[geological_feature.min(), geological_feature.max()])
200
+ if geological_feature == 'model' and self.model is not None:
201
+ name = kwargs.get('name','model_section')
202
+ surf.values(self.model.evaluate_model(points,scale=True),
203
+ name)
204
+ surf["colourby"] = name
205
+ cmap = lavavu.cubehelix(100)
206
+ if 'cmap' in kwargs:
207
+ cmap = kwargs['cmap']
208
+
201
209
 
202
210
  def add_isosurface(self, geological_feature, value = None, isovalue=None,
203
211
  paint_with=None, slices=None, colour='red', nslices=None,
@@ -236,7 +244,8 @@ class LavaVuModelViewer:
236
244
  [type]
237
245
  [description]
238
246
  """
239
-
247
+ if geological_feature is None:
248
+ logger.error("Cannot add isosurface GeologicalFeature does not exist")
240
249
  # update the feature to make sure its current
241
250
  if 'update' in kwargs:
242
251
  geological_feature.update()
@@ -296,9 +305,11 @@ class LavaVuModelViewer:
296
305
  verts += np.array([self.bounding_box[0, 0], self.bounding_box[0, 1], self.bounding_box[1, 2]])
297
306
  self.model.rescale(verts)
298
307
 
299
- except ValueError:
300
- logger.warning("no surface to mesh, skipping")
308
+ except (ValueError, RuntimeError) as e:
309
+ print(e)
310
+ logger.warning("Cannot isosurface {} at {}, skipping".format(geological_feature.name,isovalue))
301
311
  continue
312
+
302
313
 
303
314
  name = geological_feature.name
304
315
  name = kwargs.get('name', name)
@@ -346,21 +357,28 @@ class LavaVuModelViewer:
346
357
  vmax = kwargs.get('vmax', max_property_val)
347
358
  surf.colourmap(cmap, range=(vmin, vmax)) # nodes.shape[0]))
348
359
 
349
- def add_scalar_field(self, geological_feature, **kwargs):
350
- """
360
+ def add_scalar_field(self, geological_feature, name=None, cmap='rainbow', vmin=None, vmax = None, **kwargs):
361
+ """Add a block the size of the model area painted with the scalar field value
351
362
 
352
363
  Parameters
353
364
  ----------
354
365
  geological_feature : GeologicalFeature
355
366
  the geological feature to colour the scalar field by
356
- kwargs
357
- kwargs for lavavu
358
-
359
- Returns
360
- -------
361
-
367
+ name : string, optional
368
+ Name of the object for lavavu, needs to be unique for the viewer object, by default uses feature name
369
+ cmap : str, optional
370
+ mpl colourmap reference, by default 'rainbow'
371
+ vmin : double, optional
372
+ minimum value of the colourmap, by default None
373
+ vmax : double, optional
374
+ maximum value of the colourmap, by default None
362
375
  """
363
- name = kwargs.get('name', geological_feature.name + '_scalar_field')
376
+ if name == None:
377
+ if geological_feature is None:
378
+ name = 'unnamed scalar field'
379
+ else:
380
+ name = geological_feature.name + '_scalar_field'
381
+
364
382
  points, tri = create_box(self.bounding_box,self.nsteps)
365
383
 
366
384
  surf = self.lv.triangles(name)
@@ -369,15 +387,23 @@ class LavaVuModelViewer:
369
387
  val =geological_feature.evaluate_value(self.model.scale(points))
370
388
  surf.values(val, geological_feature.name)
371
389
  surf["colourby"] = geological_feature.name
372
- cmap = kwargs.get('cmap',lavavu.cubehelix(100))
373
-
374
390
  logger.info("Adding scalar field of %s to viewer. Min: %f, max: %f" % (geological_feature.name,
375
391
  geological_feature.min(),
376
392
  geological_feature.max()))
377
- vmin = kwargs.get('vmin', np.nanmin(val))
378
- vmax = kwargs.get('vmax', np.nanmax(val))
393
+ if vmin == None:
394
+ vmin =np.nanmin(val)
395
+ if vmax == None:
396
+ vmax = np.nanmax(val)
379
397
  surf.colourmap(cmap, range=(vmin, vmax))
380
398
 
399
+ def add_box(self,bounding_box,name,colour='red'):
400
+ points, tri = create_box(bounding_box,self.nsteps)
401
+
402
+ surf = self.lv.triangles(name)
403
+ surf.vertices(self.model.rescale(points))
404
+ surf.indices(tri)
405
+ surf.colours(colour)
406
+
381
407
  def add_model(self, cmap = None, **kwargs):
382
408
  """Add a block model painted by stratigraphic id to the viewer
383
409
 
@@ -416,6 +442,8 @@ class LavaVuModelViewer:
416
442
  boundaries = []
417
443
  data = []
418
444
  for g in self.model.stratigraphic_column.keys():
445
+ if g == 'faults':
446
+ continue
419
447
  for u, v in self.model.stratigraphic_column[g].items():
420
448
  data.append((v['id'],v['colour']))
421
449
  colours.append(v['colour'])
@@ -465,8 +493,22 @@ class LavaVuModelViewer:
465
493
  vmin = kwargs.get('vmin', np.nanmin(vals))
466
494
  vmax = kwargs.get('vmax', np.nanmax(vals))
467
495
  surf.colourmap(cmap, range=(vmin, vmax))
468
-
469
- def add_model_surfaces(self, faults = True, cmap=None, **kwargs):
496
+
497
+ def add_fault(self,fault,step=100):
498
+ self.add_isosurface(fault,value=0,name=fault.name)
499
+ self.add_vector_field(fault,locations=self.model.regular_grid()[::step])
500
+
501
+ def unfault_grid(self,feature,grid=None):
502
+ if grid is None:
503
+ grid = self.model.regular_grid()
504
+ # apply all faults associated with a feature to a regular grid
505
+ self.add_value_data(self.model.rescale(grid,inplace=False),grid[:,2],name='Regular grid before faults',pointsize=10,)
506
+
507
+ for f in feature.faults:
508
+ grid = f.apply_to_points(grid)
509
+ self.add_value_data(self.model.rescale(grid,inplace=False),grid[:,2],name='Regular grid after faults',pointsize=10,)
510
+
511
+ def add_model_surfaces(self, strati=True, faults = True, cmap=None, fault_colour='black',**kwargs):
470
512
  """Add surfaces for all of the interfaces in the model
471
513
 
472
514
 
@@ -481,18 +523,29 @@ class LavaVuModelViewer:
481
523
  Other parameters are passed to self.add_isosurface()
482
524
 
483
525
  """
526
+ import time
484
527
  from matplotlib import cm
485
528
  from matplotlib import colors
529
+ from tqdm.auto import tqdm
530
+ start = time.time()
486
531
  n_units = 0 #count how many discrete colours
487
532
  for g in self.model.stratigraphic_column.keys():
488
- for u in self.model.stratigraphic_column[g].keys():
489
- n_units+=1
490
- if cmap is None:
491
- import matplotlib.colors as colors
533
+ if g in self.model.feature_name_index:
534
+ for u in self.model.stratigraphic_column[g].keys():
535
+ n_units+=1
536
+ n_faults = 0
537
+ for f in self.model.features:
538
+ if f.type=='fault':
539
+ n_faults+=1
540
+
541
+ if cmap is None:
492
542
  colours = []
493
543
  boundaries = []
494
544
  data = []
495
545
  for g in self.model.stratigraphic_column.keys():
546
+ if g == 'faults':
547
+ # skip anything saved in faults here
548
+ continue
496
549
  for u, v in self.model.stratigraphic_column[g].items():
497
550
  data.append((v['id'],v['colour']))
498
551
  colours.append(v['colour'])
@@ -502,50 +555,47 @@ class LavaVuModelViewer:
502
555
  cmap = cm.get_cmap(cmap,n_units)
503
556
  ci = 0
504
557
  cmap_colours = colors.to_rgba_array(cmap.colors)
505
- for g in self.model.stratigraphic_column.keys():
506
- if g in self.model.feature_name_index:
507
- feature = self.model.features[self.model.feature_name_index[g]]
508
- names = []
509
- values = []
510
- colours = []
511
- for u, vals in self.model.stratigraphic_column[g].items():
512
- names.append(u)
513
- values.append(vals['min'])
514
- colours.append(cmap_colours[ci,:])
515
- ci+=1
516
- self.add_isosurface(feature, slices=values,names=names,colours=colours,**kwargs)
517
-
558
+ n_surfaces = 0
559
+ if strati:
560
+ n_surfaces+=n_units
518
561
  if faults:
519
- for f in self.model.features:
520
- if f.type == 'fault':
521
- def mask(x):
522
- val = f.displacementfeature.evaluate_value(x)
523
- val[np.isnan(val)] = 0
524
- maskv = np.zeros(val.shape).astype(bool)
525
- maskv[np.abs(val) > 0.001] = 1
526
- return maskv
527
- self.add_isosurface(f,isovalue=0,region=mask,**kwargs)
528
-
529
- # def add_model_data(self, cmap='tab20',**kwargs):
530
- # from matplotlib import cm
531
- # n_units = 0 #count how many discrete colours
532
- # for g in self.model.stratigraphic_column.keys():
533
- # for u in self.model.stratigraphic_column[g].keys():
534
- # n_units+=1
535
- # tab = cm.get_cmap(cmap,n_units)
536
- # ci = 0
537
-
538
- # for g in self.model.stratigraphic_column.keys():
539
- # if g in self.model.feature_name_index:
540
- # feature = self.model.features[self.model.feature_name_index[g]]
541
- # for u, vals in self.model.stratigraphic_column[g].items():
542
- # self.add_isosurface(feature, isovalue=vals['max'],name=u,colour=tab.colors[ci,:],**kwargs)
543
- # ci+=1
544
- # if faults:
545
- # for f in self.model.features:
546
- # if f.type == 'fault':
547
- # self.add_isosurface(f,isovalue=0,**kwargs)
562
+ n_surfaces+=n_faults
563
+ with tqdm(total=n_surfaces) as pbar:
564
+
565
+ if strati:
566
+ for g in self.model.stratigraphic_column.keys():
567
+ if g in self.model.feature_name_index:
568
+ feature = self.model.features[self.model.feature_name_index[g]]
569
+ names = []
570
+ values = []
571
+ colours = []
572
+ for u, vals in self.model.stratigraphic_column[g].items():
573
+ names.append(u)
574
+ values.append(vals['min'])
575
+ colours.append(cmap_colours[ci,:])
576
+ ci+=1
577
+ pbar.set_description('Isosurfacing {}'.format(feature.name))
578
+ self.add_isosurface(feature, slices=values,names=names,colours=colours,**kwargs)
579
+ pbar.update(len(values))
580
+
548
581
 
582
+ if faults:
583
+ for f in self.model.features:
584
+ if f.type == 'fault':
585
+ def mask(x):
586
+ val = f.displacementfeature.evaluate_value(x)
587
+ val[np.isnan(val)] = 0
588
+ maskv = np.zeros(val.shape).astype(bool)
589
+ maskv[np.abs(val) > 0.001] = 1
590
+ return maskv
591
+ if f.name in self.model.stratigraphic_column['faults']:
592
+ fault_colour = self.model.stratigraphic_column['faults'][f.name].get('colour',['red'])
593
+ pbar.set_description('Isosurfacing {}'.format(f.name))
594
+
595
+ region = kwargs.pop('region',None)
596
+ self.add_isosurface(f,isovalue=0,region=mask,colour=fault_colour[0],name=f.name,**kwargs)
597
+ pbar.update(1)
598
+ print("Adding surfaces took {} seconds".format(time.time()-start))
549
599
  def add_vector_field(self, geological_feature, **kwargs):
550
600
  """
551
601
 
@@ -633,6 +683,24 @@ class LavaVuModelViewer:
633
683
  if interface.shape[0] > 0 and add_interface:
634
684
  self.add_points(self.model.rescale(interface[:,:3],inplace=False), name + "_interface_cp")
635
685
 
686
+ def add_intersection_lineation(self, feature, **kwargs):
687
+ name = feature.name
688
+ if 'name' in kwargs:
689
+ name = kwargs['name']
690
+ del kwargs['name']
691
+ intersection = feature.fold.foldframe.calculate_intersection_lineation(
692
+ feature.builder)
693
+ gpoints = feature.builder.interpolator.get_gradient_constraints()[:,:6]
694
+ npoints = feature.builder.interpolator.get_norm_constraints()[:,:6]
695
+ points = []
696
+ if gpoints.shape[0] > 0:
697
+ points.append(gpoints)
698
+ if npoints.shape[0] > 0:
699
+ points.append(npoints)
700
+ points = np.vstack(points)
701
+ if intersection.shape[0] > 0:
702
+ self.add_vector_data(self.model.rescale(points[:,:3],inplace=False), intersection, name + "_intersection")
703
+
636
704
  def add_points(self, points, name, **kwargs):
637
705
  """
638
706
 
@@ -698,7 +766,7 @@ class LavaVuModelViewer:
698
766
  if "pointsize" not in kwargs:
699
767
  kwargs["pointsize"] = 4
700
768
  # set the colour map to diverge unless user decides otherwise
701
- cmap = kwargs.get('cmap', "spot")
769
+ cmap = kwargs.get('cmap', "rainbow")
702
770
  p = self.lv.points(name, **kwargs)
703
771
  p.vertices(position)
704
772
  p.values(value, "v")
@@ -708,7 +776,7 @@ class LavaVuModelViewer:
708
776
  logger.info('vmin {} and vmax {}'.format(kwargs['vmin'],kwargs['vmax']))
709
777
  p.colourmap(cmap, range=(kwargs['vmin'],kwargs['vmax']))
710
778
  else:
711
- p.colourmap(cmap)
779
+ p.colourmap(cmap, range=(np.nanmin(value),np.nanmax(value)))
712
780
 
713
781
  def add_fold(self, fold, **kwargs):
714
782
  """
@@ -3,7 +3,8 @@ import logging
3
3
  import matplotlib.pyplot as plt
4
4
  import numpy as np
5
5
 
6
- logger = logging.getLogger(__name__)
6
+ from LoopStructural.utils import getLogger
7
+ logger = getLogger(__name__)
7
8
 
8
9
 
9
10
  class RotationAnglePlotter:
@@ -0,0 +1,60 @@
1
+ import numpy as np
2
+ import matplotlib.pyplot as plt
3
+ from matplotlib import cm
4
+ from matplotlib.patches import Polygon
5
+ from matplotlib.collections import PatchCollection
6
+
7
+ class StratigraphicColumnView:
8
+ def __init__(self,model,ax=None,cmap=None, labels = None):
9
+ n_units = 0 #count how many discrete colours
10
+ xmin = 0
11
+ ymin = 0
12
+ ymax = 1
13
+ xmax = 1
14
+ if ax is None:
15
+ fig, ax = plt.subplots(figsize=(2,10))
16
+ patches = []
17
+ for g in model.stratigraphic_column.keys():
18
+ if g == 'faults':
19
+ continue
20
+ for u in model.stratigraphic_column[g].keys():
21
+ n_units+=1
22
+ ymin = -model.stratigraphic_column[g][u]['min']
23
+ if np.isinf(model.stratigraphic_column[g][u]['min']):
24
+ ymin = 0
25
+ ymax = -model.stratigraphic_column[g][u]['max']
26
+ if np.isinf(ymax):
27
+ ymin = ymax + (ymax-ymin)*(1+np.random.rand())
28
+ polygon_points = np.array([[xmin,ymin],[xmax,ymin],[xmax,ymax],[xmin,ymax]])
29
+ patches.append(Polygon(polygon_points))
30
+ xy = (0,ymin+(ymax-ymin)/2)
31
+ if labels:
32
+ ax.annotate(labels[u],xy)
33
+ else:
34
+ ax.annotate(u,xy)
35
+ if cmap is None:
36
+ import matplotlib.colors as colors
37
+ colours = []
38
+ boundaries = []
39
+ data = []
40
+ for g in model.stratigraphic_column.keys():
41
+ if g == 'faults':
42
+ continue
43
+ for u, v in model.stratigraphic_column[g].items():
44
+ data.append((v['id'],v['colour']))
45
+ colours.append(v['colour'])
46
+ boundaries.append(v['id'])#print(u,v)
47
+ cmap = colors.ListedColormap(colours)
48
+ else:
49
+ cmap = cm.get_cmap(cmap,n_units-1)
50
+ ci = 0
51
+ p = PatchCollection(patches, cmap=cmap)
52
+
53
+ colors = np.arange(len(patches))
54
+ p.set_array(np.array(colors))
55
+
56
+ ax.add_collection(p)
57
+
58
+ ax.set_ylim(ymax+(ymax-ymin)*-2,0)#ax.set_ylim(0,ymax)
59
+ ax.axis('off')
60
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.0
2
2
  Name: LoopStructural
3
- Version: 1.0.4
3
+ Version: 1.0.71.dev0
4
4
  Summary: UNKNOWN
5
5
  Home-page: UNKNOWN
6
6
  Author: UNKNOWN
@@ -10,6 +10,7 @@ LoopStructural/interpolators/cython/dsi_helper.c
10
10
  LoopStructural/datasets/__init__.py
11
11
  LoopStructural/datasets/_base.py
12
12
  LoopStructural/interpolators/__init__.py
13
+ LoopStructural/interpolators/base_structured_3d_support.py
13
14
  LoopStructural/interpolators/discrete_fold_interpolator.py
14
15
  LoopStructural/interpolators/discrete_interpolator.py
15
16
  LoopStructural/interpolators/finite_difference_interpolator.py
@@ -24,7 +25,10 @@ LoopStructural/interpolators/cython/dsi_helper.c
24
25
  LoopStructural/modelling/__init__.py
25
26
  LoopStructural/modelling/core/__init__.py
26
27
  LoopStructural/modelling/core/geological_model.py
28
+ LoopStructural/modelling/core/geological_model_graph.py
29
+ LoopStructural/modelling/core/stratigraphic_column.py
27
30
  LoopStructural/modelling/fault/__init__.py
31
+ LoopStructural/modelling/fault/fault_builder.py
28
32
  LoopStructural/modelling/fault/fault_function.py
29
33
  LoopStructural/modelling/fault/fault_function_feature.py
30
34
  LoopStructural/modelling/fault/fault_segment.py
@@ -32,6 +36,7 @@ LoopStructural/modelling/features/__init__.py
32
36
  LoopStructural/modelling/features/cross_product_geological_feature.py
33
37
  LoopStructural/modelling/features/geological_feature.py
34
38
  LoopStructural/modelling/features/geological_feature_builder.py
39
+ LoopStructural/modelling/features/lambda_geological_feature.py
35
40
  LoopStructural/modelling/features/region_feature.py
36
41
  LoopStructural/modelling/features/structural_frame.py
37
42
  LoopStructural/modelling/features/structural_frame_builder.py
@@ -43,9 +48,12 @@ LoopStructural/modelling/fold/fold_rotation_angle_feature.py
43
48
  LoopStructural/modelling/fold/foldframe.py
44
49
  LoopStructural/modelling/fold/svariogram.py
45
50
  LoopStructural/utils/__init__.py
51
+ LoopStructural/utils/bounding_box.py
46
52
  LoopStructural/utils/exceptions.py
47
53
  LoopStructural/utils/helper.py
54
+ LoopStructural/utils/logging.py
48
55
  LoopStructural/utils/map2loop.py
56
+ LoopStructural/utils/regions.py
49
57
  LoopStructural/utils/utils.py
50
58
  LoopStructural/visualisation/__init__.py
51
59
  LoopStructural/visualisation/map_viewer.py
@@ -53,8 +61,5 @@ LoopStructural/visualisation/model_plotter.py
53
61
  LoopStructural/visualisation/model_visualisation.py
54
62
  LoopStructural/visualisation/rotation_angle_plotter.py
55
63
  LoopStructural/visualisation/sphinx_scraper.py
56
- tests/__init__.py
57
- tests/test_faults.py
58
- tests/test_fold.py
59
- tests/test_interpolator.py
60
- tests/test_refolded.py
64
+ LoopStructural/visualisation/stratigraphic_column.py
65
+ tests/__init__.py
@@ -3,6 +3,6 @@ numpy
3
3
  pandas
4
4
  scipy
5
5
  matplotlib
6
- lavavu
7
6
  scikit-image
8
7
  scikit-learn
8
+ tqdm