Skip to content

Commit 08d8657

Browse files
committed
[ENH] Add example generator and initial speed test
Introduce `examples_generator.py` to create sample geological models, including a "two wells" example. Add `test_speed_I` for benchmarking model computation and validation of interpolation options.
1 parent a7157a8 commit 08d8657

File tree

3 files changed

+66
-3
lines changed

3 files changed

+66
-3
lines changed

docs/dev_logs/2025_May.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
- [ ] Keep extracting code into modules and functions
66
- [ ] Posterior analysis for gempy
77
- [ ] Investigate speed
8-
- [ ] Investigate segmentation function
8+
- [ ] Investigate segmentation function
9+
https://chatgpt.com/share/68172f53-4f7c-8000-8f42-205a033ed899
910
- [ ] Create a robust api to make sure we do not mess up assigning priors to gempy parameters
1011
- [ ] do we need to use index_put or just normal indexing?
1112
--- Vector examples
@@ -18,9 +19,13 @@
1819
### Doing:
1920
- [x] Compressing code
2021
- [x] GemPy posterior visualization
21-
- [ ] Add proper thickness likelihood
22+
- [x] Add proper thickness likelihood
2223
- [ ] Speed
23-
24+
- [ ] Time test for torch CPU
25+
- [ ] Time test for keops CPU
26+
- [ ] Time test for keops GPU
27+
- [ ] Options and config presets
28+
2429
### Possible Design:
2530
- Geological Model
2631
- Priors
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
from enum import Enum, auto
2+
import gempy as gp
3+
import os
4+
from gempy_engine.core.backend_tensor import BackendTensor
5+
6+
7+
class ExampleProbModel(Enum):
8+
TWO_WELLS = auto()
9+
10+
11+
def generate_example_model(example_model: ExampleProbModel, compute_model: bool = True) -> gp.data.GeoModel:
12+
match example_model:
13+
case ExampleProbModel.TWO_WELLS:
14+
return _generate_two_wells_model(compute_model)
15+
case _:
16+
raise ValueError(f"Example model {example_model} not found.")
17+
18+
19+
def _generate_two_wells_model(compute_model: bool) -> gp.data.GeoModel:
20+
current_dir = os.path.dirname(os.path.abspath(__file__))
21+
data_path = os.path.abspath(os.path.join(current_dir, '..', '..', 'examples', 'tutorials', 'data'))
22+
geo_model = gp.create_geomodel(
23+
project_name='Wells',
24+
extent=[0, 12000, -500, 500, 0, 4000],
25+
refinement=4,
26+
importer_helper=gp.data.ImporterHelper(
27+
path_to_orientations=os.path.join(data_path, "2-layers", "2-layers_orientations.csv"),
28+
path_to_surface_points=os.path.join(data_path, "2-layers", "2-layers_surface_points.csv")
29+
)
30+
)
31+
32+
BackendTensor.change_backend_gempy(engine_backend=gp.data.AvailableBackends.PYTORCH)
33+
34+
geo_model.interpolation_options.uni_degree = 0
35+
geo_model.interpolation_options.mesh_extraction = False
36+
37+
if compute_model:
38+
# Compute the geological model
39+
gp.compute_model(geo_model)
40+
41+
return geo_model

tests/test_benchmark/test_speed_I.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import gempy as gp
2+
import gempy_viewer as gpv
3+
from gempy_probability.plugins.examples_generator import generate_example_model, ExampleProbModel
4+
5+
6+
def test_speed_I():
7+
two_wells: gp.data.GeoModel = generate_example_model(
8+
example_model=ExampleProbModel.TWO_WELLS,
9+
compute_model=False
10+
)
11+
12+
assert two_wells.interpolation_options.number_octree_levels == 4, "Number of octrees should be 4"
13+
14+
gp.compute_model(two_wells)
15+
16+
if PLOT := False:
17+
gpv.plot_2d(two_wells, show_scalar=False)

0 commit comments

Comments
 (0)