2
2
import os
3
3
import pyro .distributions as dist
4
4
import torch
5
- from pyro .distributions import TorchDistributionMixin
6
5
7
6
import gempy as gp
8
7
from gempy_engine .core .backend_tensor import BackendTensor
@@ -24,7 +23,7 @@ def test_basic_gempy_I() -> None:
24
23
# TODO: Convert this into an options preset
25
24
geo_model .interpolation_options .uni_degree = 0
26
25
geo_model .interpolation_options .mesh_extraction = False
27
- geo_model .interpolation_options .sigmoid_slope = 1100.
26
+ geo_model .interpolation_options .sigmoid_slope = 1100.
28
27
29
28
# region Minimal grid for the specific likelihood function
30
29
x_loc = 6000
@@ -34,16 +33,10 @@ def test_basic_gempy_I() -> None:
34
33
gp .set_custom_grid (geo_model .grid , xyz_coord = xyz_coord )
35
34
# endregion
36
35
37
- # TODO: Make sure only the custom grid ins active
38
-
39
-
40
- gp .compute_model (
41
- gempy_model = geo_model ,
42
- engine_config = gp .data .GemPyEngineConfig (
43
- backend = gp .data .AvailableBackends .numpy
44
- )
45
- )
46
-
36
+ geo_model .grid .active_grids = gp .data .Grid .GridTypes .CUSTOM
37
+ assert geo_model .grid .values .shape [0 ] == 100 , "Custom grid should have 100 cells"
38
+ gp .compute_model (gempy_model = geo_model )
39
+
47
40
# TODO: Make this a more elegant way
48
41
BackendTensor .change_backend_gempy (engine_backend = gp .data .AvailableBackends .PYTORCH )
49
42
@@ -62,7 +55,7 @@ def test_basic_gempy_I() -> None:
62
55
63
56
64
57
def _prob_run (geo_model : gp .data .GeoModel , prob_model : callable ,
65
- normal : TorchDistributionMixin , y_obs_list : torch .Tensor ) -> None :
58
+ normal : torch . distributions . Distribution , y_obs_list : torch .Tensor ) -> None :
66
59
# Run prior sampling and visualization
67
60
from pyro .infer import Predictive
68
61
import pyro
@@ -110,13 +103,6 @@ def _prob_run(geo_model: gp.data.GeoModel, prob_model: callable,
110
103
)
111
104
posterior_predictive = posterior_predictive_fn (geo_model , normal , y_obs_list )
112
105
data = az .from_pyro (posterior = mcmc , prior = prior , posterior_predictive = posterior_predictive )
113
- # Test posterior mean values
114
- posterior_top_mean = float (data .posterior [r'$\mu_{top}$' ].mean ())
115
- assert 0.0070 < posterior_top_mean < 0.0071 , f"Top layer mean { posterior_top_mean } outside expected range"
116
- posterior_thickness_mean = float (data .posterior_predictive [r'$\mu_{thickness}$' ].mean ())
117
- assert 220 < posterior_thickness_mean < 225 , f"Thickness mean { posterior_thickness_mean } outside expected range"
118
- # Test convergence diagnostics
119
- assert float (data .sample_stats .diverging .sum ()) == 0 , "MCMC sampling has divergences"
120
106
# endregion
121
107
122
108
az .plot_trace (data )
@@ -138,3 +124,21 @@ def _prob_run(geo_model: gp.data.GeoModel, prob_model: callable,
138
124
colors = [default_red , default_blue ],
139
125
)
140
126
plt .show ()
127
+
128
+ # Test posterior mean values
129
+ posterior_top_mean = float (data .posterior [r'$\mu_{top}$' ].mean ())
130
+ target_top = 0.00875
131
+ target_thickness = 223
132
+ assert abs (posterior_top_mean - target_top ) < 0.0200 , f"Top layer mean { posterior_top_mean } outside expected range"
133
+ posterior_thickness_mean = float (data .posterior_predictive [r'$\mu_{thickness}$' ].mean ())
134
+ assert abs (posterior_thickness_mean - target_thickness ) < 5 , f"Thickness mean { posterior_thickness_mean } outside expected range"
135
+ # Test convergence diagnostics
136
+ assert float (data .sample_stats .diverging .sum ()) == 0 , "MCMC sampling has divergences"
137
+
138
+ print ("Posterior mean values:" )
139
+ print (f"Top layer mean: { posterior_top_mean } " )
140
+ print (f"Thickness mean: { posterior_thickness_mean } " )
141
+ print ("MCMC convergence diagnostics:" )
142
+ print (f"Divergences: { float (data .sample_stats .diverging .sum ())} " )
143
+ print (f"Acceptance rate: { float (data .sample_stats .acceptance_rate .mean ())} " )
144
+ print (f"Mean tree depth: { float (data .sample_stats .mean_tree_depth .mean ())} " )
0 commit comments