From 00a5afc2fc4deb9a2ec027bddc0ccfcc78394939 Mon Sep 17 00:00:00 2001
From: Alina Lacheim <a.lacheim@outlook.de>
Date: Thu, 26 Sep 2024 10:28:06 +0200
Subject: [PATCH] changed MetaModel to PCE in examples

---
 examples/OHagan-function/example_OHagan.py    |  13 +-
 .../example_analytical_function.ipynb         |   4 +-
 .../example_analytical_function_gp.py         |   3 +-
 .../example_analytical_function.ipynb         |   4 +-
 .../example_analytical_function.py            |  15 +-
 examples/beam/example_beam.py                 |  13 +-
 examples/borehole/example_borehole.py         |  12 +-
 .../example_trainingconvergence.py            |   6 +-
 examples/ishigami/example_ishigami.py         |  14 +-
 ...mple_analytical_function_NoSigmaMetaMod.py |  13 +-
 .../example_analytical_function_noMetaMod.py  |   8 +-
 examples/pollution/example_pollution.py       |  10 +-
 examples/pollution/example_valid_pollution.py |  13 +-
 .../example_principalcomponentanalysis.py     |  13 +-
 examples/sinusoidal-function/test.ipynb       | 207 ------------------
 .../example_umbridge_testmodel.py             |  12 +-
 .../example_umbridge_tsunamitutorial.py       |  25 ++-
 .../umbridge_tsunamitutorial/testmodel.pk1    | Bin 0 -> 10816 bytes
 .../post_processing/post_processing.py        |   2 +-
 19 files changed, 50 insertions(+), 337 deletions(-)
 delete mode 100644 examples/sinusoidal-function/test.ipynb
 create mode 100644 examples/umbridge_tsunamitutorial/testmodel.pk1

diff --git a/examples/OHagan-function/example_OHagan.py b/examples/OHagan-function/example_OHagan.py
index 8c7690767..28010a4fc 100644
--- a/examples/OHagan-function/example_OHagan.py
+++ b/examples/OHagan-function/example_OHagan.py
@@ -26,15 +26,8 @@ import joblib
 import sys
 sys.path.append("../../src/bayesvalidrox/")
 
-from bayesvalidrox.pylink.pylink import PyLinkForwardModel
-from bayesvalidrox.surrogate_models.inputs import Input
-from bayesvalidrox.surrogate_models.exp_designs import ExpDesigns
-from bayesvalidrox.surrogate_models.surrogate_models import MetaModel
-#from bayesvalidrox.surrogate_models.meta_model_engine import MetaModelEngine
-from bayesvalidrox.post_processing.post_processing import PostProcessing
-from bayesvalidrox.bayes_inference.bayes_inference import BayesInference
-from bayesvalidrox.bayes_inference.discrepancy import Discrepancy
-from bayesvalidrox.surrogate_models.engine import Engine
+from bayesvalidrox import PyLinkForwardModel, Input, ExpDesigns, PCE, PostProcessing, BayesInference, Discrepancy, Engine 
+
 import matplotlib
 matplotlib.use('agg')
 
@@ -68,7 +61,7 @@ if __name__ == "__main__":
     # =====================================================
     # ======  POLYNOMIAL CHAOS EXPANSION METAMODELS  ======
     # =====================================================
-    MetaModelOpts = MetaModel(Inputs)
+    MetaModelOpts = PCE(Inputs)
 
     # Select your metamodel method
     # 1) PCE (Polynomial Chaos Expansion) 2) aPCE (arbitrary PCE)
diff --git a/examples/analytical-function/example_analytical_function.ipynb b/examples/analytical-function/example_analytical_function.ipynb
index e63948ddc..04396bb4b 100644
--- a/examples/analytical-function/example_analytical_function.ipynb
+++ b/examples/analytical-function/example_analytical_function.ipynb
@@ -382,8 +382,8 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "from bayesvalidrox import MetaModel\n",
-    "MetaModelOpts = MetaModel(Inputs)"
+    "from bayesvalidrox import PCE\n",
+    "MetaModelOpts = PCE(Inputs)"
    ]
   },
   {
diff --git a/examples/analytical-function/example_analytical_function_gp.py b/examples/analytical-function/example_analytical_function_gp.py
index 2d94a00a1..a01ec4305 100644
--- a/examples/analytical-function/example_analytical_function_gp.py
+++ b/examples/analytical-function/example_analytical_function_gp.py
@@ -29,8 +29,7 @@ matplotlib.use('agg')
 sys.path.append("../../src/")
 print(sys.path)
 
-from bayesvalidrox import PyLinkForwardModel, Input, ExpDesigns, GPESkl, PostProcessing, BayesInference, Discrepancy, \
-    Engine
+from bayesvalidrox import PyLinkForwardModel, Input, ExpDesigns, GPESkl, PostProcessing, BayesInference, Discrepancy, Engine
 
 if __name__ == "__main__":
 
diff --git a/examples/analytical-function_sequentialdesign/example_analytical_function.ipynb b/examples/analytical-function_sequentialdesign/example_analytical_function.ipynb
index e63948ddc..04396bb4b 100644
--- a/examples/analytical-function_sequentialdesign/example_analytical_function.ipynb
+++ b/examples/analytical-function_sequentialdesign/example_analytical_function.ipynb
@@ -382,8 +382,8 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "from bayesvalidrox import MetaModel\n",
-    "MetaModelOpts = MetaModel(Inputs)"
+    "from bayesvalidrox import PCE\n",
+    "MetaModelOpts = PCE(Inputs)"
    ]
   },
   {
diff --git a/examples/analytical-function_sequentialdesign/example_analytical_function.py b/examples/analytical-function_sequentialdesign/example_analytical_function.py
index 09261acba..8feac878e 100644
--- a/examples/analytical-function_sequentialdesign/example_analytical_function.py
+++ b/examples/analytical-function_sequentialdesign/example_analytical_function.py
@@ -28,19 +28,8 @@ matplotlib.use('agg')
 sys.path.append("src/")
 sys.path.append("../../src/")
 
-import bayesvalidrox
-from bayesvalidrox import PyLinkForwardModel
+from bayesvalidrox import PyLinkForwardModel, Input, ExpDesigns, PCE, PostProcessing, BayesInference, Discrepancy, Engine
 
-from bayesvalidrox.pylink.pylink import PyLinkForwardModel
-from bayesvalidrox.surrogate_models.inputs import Input
-from bayesvalidrox.surrogate_models.exp_designs import ExpDesigns
-from bayesvalidrox.surrogate_models.surrogate_models import MetaModel
-#from bayesvalidrox.surrogate_models.meta_model_engine import MetaModelEngine
-from bayesvalidrox.post_processing.post_processing import PostProcessing
-from bayesvalidrox.bayes_inference.bayes_inference import BayesInference
-from bayesvalidrox.bayes_inference.discrepancy import Discrepancy
-
-from bayesvalidrox.surrogate_models.engine import Engine
 
 if __name__ == "__main__":
 
@@ -95,7 +84,7 @@ if __name__ == "__main__":
     # =====================================================
     # ==========  DEFINITION OF THE METAMODEL  ============
     # =====================================================
-    MetaModelOpts = MetaModel(Inputs)#, Model)
+    MetaModelOpts = PCE(Inputs)#, Model)
 
     # Select if you want to preserve the spatial/temporal depencencies
     # MetaModelOpts.dim_red_method = 'PCA'
diff --git a/examples/beam/example_beam.py b/examples/beam/example_beam.py
index 84b88255f..c9d608f1a 100644
--- a/examples/beam/example_beam.py
+++ b/examples/beam/example_beam.py
@@ -18,16 +18,7 @@ Pfaffenwaldring 61
 import sys
 sys.path.append("../../src/bayesvalidrox/")
 
-from bayesvalidrox.pylink.pylink import PyLinkForwardModel
-from bayesvalidrox.surrogate_models.inputs import Input
-from bayesvalidrox.surrogate_models.exp_designs import ExpDesigns
-from bayesvalidrox.surrogate_models.surrogate_models import MetaModel
-#from bayesvalidrox.surrogate_models.meta_model_engine import MetaModelEngine
-from bayesvalidrox.post_processing.post_processing import PostProcessing
-from bayesvalidrox.bayes_inference.bayes_inference import BayesInference
-from bayesvalidrox.bayes_inference.discrepancy import Discrepancy
-
-from bayesvalidrox.surrogate_models.engine import Engine
+from bayesvalidrox import PyLinkForwardModel, Input, ExpDesigns, PCE, PostProcessing, BayesInference, Discrepancy, Engine
 
 
 if __name__ == "__main__":
@@ -84,7 +75,7 @@ if __name__ == "__main__":
     # =====================================================
     # ==========  DEFINITION OF THE METAMODEL  ============
     # =====================================================
-    MetaModelOpts = MetaModel(Inputs, Model)
+    MetaModelOpts = PCE(Inputs, Model)
 
     # Select if you want to preserve the spatial/temporal depencencies
     # MetaModelOpts.dim_red_method = 'PCA'
diff --git a/examples/borehole/example_borehole.py b/examples/borehole/example_borehole.py
index 869a05320..9eae7ffc5 100644
--- a/examples/borehole/example_borehole.py
+++ b/examples/borehole/example_borehole.py
@@ -27,15 +27,7 @@ import joblib
 import sys
 sys.path.append("../../src/bayesvalidrox/")
 
-from bayesvalidrox.pylink.pylink import PyLinkForwardModel
-from bayesvalidrox.surrogate_models.inputs import Input
-from bayesvalidrox.surrogate_models.exp_designs import ExpDesigns
-from bayesvalidrox.surrogate_models.surrogate_models import MetaModel
-#from bayesvalidrox.surrogate_models.meta_model_engine import MetaModelEngine
-from bayesvalidrox.post_processing.post_processing import PostProcessing
-from bayesvalidrox.bayes_inference.bayes_inference import BayesInference
-from bayesvalidrox.bayes_inference.discrepancy import Discrepancy
-from bayesvalidrox.surrogate_models.engine import Engine
+from bayesvalidrox import PyLinkForwardModel, Input, ExpDesigns, PCE, PostProcessing, BayesInference, Discrepancy, Engine 
 
 import matplotlib
 matplotlib.use('agg')
@@ -115,7 +107,7 @@ if __name__ == "__main__":
     # =====================================================
     # ======  POLYNOMIAL CHAOS EXPANSION METAMODELS  ======
     # =====================================================
-    MetaModelOpts = MetaModel(Inputs, Model)
+    MetaModelOpts = PCE(Inputs, Model)
 
     # Select your metamodel method
     # 1) PCE (Polynomial Chaos Expansion) 2) aPCE (arbitrary PCE)
diff --git a/examples/convergence/example_trainingconvergence.py b/examples/convergence/example_trainingconvergence.py
index bfe8819bd..56cf407ef 100644
--- a/examples/convergence/example_trainingconvergence.py
+++ b/examples/convergence/example_trainingconvergence.py
@@ -11,10 +11,8 @@ import numpy as np
 import matplotlib.pyplot as plt
 import random
 
-from bayesvalidrox.pylink.pylink import PyLinkForwardModel
-from bayesvalidrox.surrogate_models.inputs import Input
-from bayesvalidrox.surrogate_models.engine import Engine
-from bayesvalidrox.surrogate_models.exp_designs import ExpDesigns
+from bayesvalidrox import PyLinkForwardModel, Input, ExpDesigns, PCE, Engine
+
 import bayesvalidrox.surrogate_models.surrogate_models as sm
 
 from convergence import convergence
diff --git a/examples/ishigami/example_ishigami.py b/examples/ishigami/example_ishigami.py
index 72c9dc2d3..c74a6bcdb 100644
--- a/examples/ishigami/example_ishigami.py
+++ b/examples/ishigami/example_ishigami.py
@@ -25,16 +25,8 @@ import joblib
 import sys
 sys.path.append("../../src/bayesvalidrox/")
 
-from bayesvalidrox.pylink.pylink import PyLinkForwardModel
-from bayesvalidrox.surrogate_models.inputs import Input
-from bayesvalidrox.surrogate_models.exp_designs import ExpDesigns
-from bayesvalidrox.surrogate_models.surrogate_models import MetaModel
-#from bayesvalidrox.surrogate_models.meta_model_engine import MetaModelEngine
-from bayesvalidrox.post_processing.post_processing import PostProcessing
-from bayesvalidrox.bayes_inference.bayes_inference import BayesInference
-from bayesvalidrox.bayes_inference.discrepancy import Discrepancy
-
-from bayesvalidrox.surrogate_models.engine import Engine
+from bayesvalidrox import PyLinkForwardModel, Input, ExpDesigns, PCE, PostProcessing, BayesInference, Discrepancy, Engine 
+
 import matplotlib
 matplotlib.use('agg')
 
@@ -75,7 +67,7 @@ if __name__ == "__main__":
     # =====================================================
     # ======  POLYNOMIAL CHAOS EXPANSION METAMODELS  ======
     # =====================================================
-    MetaModelOpts = MetaModel(Inputs, Model)
+    MetaModelOpts = PCE(Inputs, Model)
 
     # Select your metamodel method
     # 1) PCE (Polynomial Chaos Expansion) 2) aPCE (arbitrary PCE)
diff --git a/examples/only-model/example_analytical_function_NoSigmaMetaMod.py b/examples/only-model/example_analytical_function_NoSigmaMetaMod.py
index 9e8e68afb..0525ede53 100644
--- a/examples/only-model/example_analytical_function_NoSigmaMetaMod.py
+++ b/examples/only-model/example_analytical_function_NoSigmaMetaMod.py
@@ -25,15 +25,8 @@ import joblib
 # Add BayesValidRox path
 sys.path.append("../../src/bayesvalidrox/")
 
-#import bayesvalidrox as bv
-from bayesvalidrox.pylink.pylink import PyLinkForwardModel
-from bayesvalidrox.surrogate_models.inputs import Input
-from bayesvalidrox.surrogate_models.surrogate_models import MetaModel
-from bayesvalidrox.surrogate_models.meta_model_engine import MetaModelEngine
-from bayesvalidrox.post_processing.post_processing import PostProcessing
-from bayesvalidrox.bayes_inference.bayes_inference import BayesInference
-from bayesvalidrox.bayes_inference.discrepancy import Discrepancy
-import matplotlib
+from bayesvalidrox import PyLinkForwardModel, Input, PCE, MetaModelEngine, PostProcessing, BayesInference, Discrepancy
+
 matplotlib.use('agg')
 
 
@@ -93,7 +86,7 @@ if __name__ == "__main__":
     # =====================================================
     # ==========  DEFINITION OF THE METAMODEL  ============
     # =====================================================
-    MetaModelOpts = MetaModel(Inputs, Model)
+    MetaModelOpts = PCE(Inputs, Model)
 
     # Select if you want to preserve the spatial/temporal depencencies
     # MetaModelOpts.dim_red_method = 'PCA'
diff --git a/examples/only-model/example_analytical_function_noMetaMod.py b/examples/only-model/example_analytical_function_noMetaMod.py
index 7419d20a9..bae6018c2 100644
--- a/examples/only-model/example_analytical_function_noMetaMod.py
+++ b/examples/only-model/example_analytical_function_noMetaMod.py
@@ -24,12 +24,8 @@ import joblib
 # Add BayesValidRox path
 sys.path.append("../../src/")
 
-from bayesvalidrox.pylink.pylink import PyLinkForwardModel
-from bayesvalidrox.surrogate_models.inputs import Input
-from bayesvalidrox.surrogate_models.engine import Engine
-from bayesvalidrox.surrogate_models.exp_designs import ExpDesigns
-from bayesvalidrox.bayes_inference.bayes_inference import BayesInference
-from bayesvalidrox.bayes_inference.discrepancy import Discrepancy
+from bayesvalidrox import PyLinkForwardModel, Input, ExpDesigns, BayesInference, Discrepancy, Engine, BayesModelComparison
+
 from bayesvalidrox.bayes_inference.bayes_model_comparison import BayesModelComparison
 import matplotlib
 matplotlib.use('agg')
diff --git a/examples/pollution/example_pollution.py b/examples/pollution/example_pollution.py
index f2de52e2c..02b25ec4d 100644
--- a/examples/pollution/example_pollution.py
+++ b/examples/pollution/example_pollution.py
@@ -26,12 +26,8 @@ import joblib
 import sys
 sys.path.append("../../src/bayesvalidrox/")
 
-from pylink.pylink import PyLinkForwardModel
-from surrogate_models.inputs import Input
-from surrogate_models.surrogate_models import MetaModel
-from post_processing.post_processing import PostProcessing
-from bayes_inference.bayes_inference import BayesInference
-from bayes_inference.discrepancy import Discrepancy
+from bayesvalidrox import PyLinkForwardModel, Input, PCE, PostProcessing, BayesInference, Discrepancy
+
 
 if __name__ == "__main__":
 
@@ -93,7 +89,7 @@ if __name__ == "__main__":
     # =====================================================
     # ======  POLYNOMIAL CHAOS EXPANSION METAMODELS  ======
     # =====================================================
-    MetaModelOpts = MetaModel(Inputs, Model)
+    MetaModelOpts = PCE(Inputs, Model)
 
     # Select if you want to preserve the spatial/temporal depencencies
     # MetaModelOpts.dim_red_method = 'PCA'
diff --git a/examples/pollution/example_valid_pollution.py b/examples/pollution/example_valid_pollution.py
index 74b87787b..ea3d45ecd 100644
--- a/examples/pollution/example_valid_pollution.py
+++ b/examples/pollution/example_valid_pollution.py
@@ -23,15 +23,8 @@ import joblib
 import sys
 sys.path.append("../../src/bayesvalidrox/")
 
-from bayesvalidrox.pylink.pylink import PyLinkForwardModel
-from bayesvalidrox.surrogate_models.inputs import Input
-from bayesvalidrox.surrogate_models.exp_designs import ExpDesigns
-from bayesvalidrox.surrogate_models.surrogate_models import MetaModel
-#from bayesvalidrox.surrogate_models.meta_model_engine import MetaModelEngine
-from bayesvalidrox.post_processing.post_processing import PostProcessing
-from bayesvalidrox.bayes_inference.bayes_inference import BayesInference
-from bayesvalidrox.bayes_inference.discrepancy import Discrepancy
-from bayesvalidrox.surrogate_models.engine import Engine
+from bayesvalidrox import PyLinkForwardModel, Input, PCE, PostProcessing, BayesInference, Discrepancy, Engine, ExpDesigns
+
 
 if __name__ == "__main__":
 
@@ -93,7 +86,7 @@ if __name__ == "__main__":
     # =====================================================
     # ======  POLYNOMIAL CHAOS EXPANSION METAMODELS  ======
     # =====================================================
-    MetaModelOpts = MetaModel(Inputs)
+    MetaModelOpts = PCE(Inputs)
 
     # Select if you want to preserve the spatial/temporal depencencies
     MetaModelOpts.dim_red_method = 'PCA'
diff --git a/examples/principal_component_analysis/example_principalcomponentanalysis.py b/examples/principal_component_analysis/example_principalcomponentanalysis.py
index 69cb4aa8f..bc36876a1 100644
--- a/examples/principal_component_analysis/example_principalcomponentanalysis.py
+++ b/examples/principal_component_analysis/example_principalcomponentanalysis.py
@@ -24,15 +24,8 @@ import joblib
 # Add BayesValidRox path
 sys.path.append("../../src/")
 
-from bayesvalidrox.pylink.pylink import PyLinkForwardModel
-from bayesvalidrox.surrogate_models.inputs import Input
-from bayesvalidrox.surrogate_models.engine import Engine
-from bayesvalidrox.surrogate_models.surrogate_models import MetaModel
-from bayesvalidrox.surrogate_models.exp_designs import ExpDesigns
-from bayesvalidrox.bayes_inference.bayes_inference import BayesInference
-from bayesvalidrox.bayes_inference.discrepancy import Discrepancy
-from bayesvalidrox.post_processing.post_processing import PostProcessing
-from bayesvalidrox.bayes_inference.bayes_model_comparison import BayesModelComparison
+from bayesvalidrox import PyLinkForwardModel, Input, PCE, PostProcessing, BayesInference, Discrepancy, Engine, ExpDesigns, BayesModelComparison
+
 import matplotlib
 matplotlib.use('agg')
 
@@ -104,7 +97,7 @@ if __name__ == "__main__":
     # ------------------------------------------------
     # ------------- PCE Specification ----------------
     # ------------------------------------------------
-    MetaModelOpts = MetaModel(Inputs)
+    MetaModelOpts = PCE(Inputs)
 
     # Select if you want to preserve the spatial/temporal depencencies
     MetaModelOpts.dim_red_method = 'PCA'
diff --git a/examples/sinusoidal-function/test.ipynb b/examples/sinusoidal-function/test.ipynb
deleted file mode 100644
index 0ff49e1e7..000000000
--- a/examples/sinusoidal-function/test.ipynb
+++ /dev/null
@@ -1,207 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 12,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "There are no estimations of surrogate uncertainty available for the chosen regression options. This might lead to issues in later steps.\n",
-      "\n",
-      " Now the forward model needs to be run!\n",
-      "\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "Computing orth. polynomial coeffs: 100%|##########| 1/1 [00:01<00:00,  1.61s/it]\n",
-      "Running forward model valid: 100%|██████████| 3/3 [00:00<00:00,  4.28it/s]\n",
-      "Running forward model valid: 100%|██████████| 1000/1000 [00:01<00:00, 775.69it/s]\n",
-      "Running forward model validSet: 100%|██████████| 3/3 [00:00<00:00,  4.29it/s]\n"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "\n",
-      ">>>>> Errors of Z <<<<<\n",
-      "\n",
-      "Index  |  RMSE   |  Validation Error\n",
-      "-----------------------------------\n",
-      "1  |  1.319e-07  |  4.873e-13\n"
-     ]
-    }
-   ],
-   "source": [
-    "import numpy as np\n",
-    "import pandas as pd\n",
-    "import sys\n",
-    "import matplotlib\n",
-    "import matplotlib.pyplot as plt\n",
-    "matplotlib.use('agg')\n",
-    "\n",
-    "sys.path.append(\"../../src/\")\n",
-    "\n",
-    "from bayesvalidrox import PyLinkForwardModel, Input, ExpDesigns, PCE, PostProcessing, Discrepancy, Engine\n",
-    "\n",
-    "if __name__ == \"__main__\":\n",
-    "    \n",
-    "    # =====================================================\n",
-    "    # =============   COMPUTATIONAL MODEL  ================\n",
-    "    # =====================================================\n",
-    "    Model=PyLinkForwardModel()\n",
-    "\n",
-    "    Model.link_type = 'Function'\n",
-    "    Model.py_file = 'sinusoidal_function'\n",
-    "    Model.name = 'SinusoidalFunc'\n",
-    "\n",
-    "    Model.Output.names = ['Z']\n",
-    "\n",
-    "    # =====================================================\n",
-    "    # =========   PROBABILISTIC INPUT MODEL  ==============\n",
-    "    # =====================================================\n",
-    "    # Define the uncertain parameters with their mean and\n",
-    "    # standard deviation\n",
-    "    Inputs = Input()\n",
-    "\n",
-    "    Inputs.add_marginals()\n",
-    "    Inputs.Marginals[0].name = 'X'\n",
-    "    Inputs.Marginals[0].dist_type = 'uniform'\n",
-    "    Inputs.Marginals[0].parameters = [0,10]\n",
-    "\n",
-    "    # =====================================================\n",
-    "    # ==========  DEFINITION OF THE METAMODEL  ============\n",
-    "    # =====================================================\n",
-    "    MetaModelOpts = PCE(Inputs)\n",
-    "\n",
-    "    MetaModelOpts.meta_model_type = 'aPCE'\n",
-    "\n",
-    "    # ------------------------------------------------\n",
-    "    # ------------- PCE Specification ----------------\n",
-    "    # ------------------------------------------------\n",
-    "    MetaModelOpts._pce_reg_method = 'OLS'\n",
-    "\n",
-    "    MetaModelOpts.bootstrap_method = 'fast'\n",
-    "    MetaModelOpts.n_bootstrap_itrs = 1\n",
-    "\n",
-    "    MetaModelOpts._pce_deg = 15\n",
-    "\n",
-    "    MetaModelOpts._pce_q_norm = 1\n",
-    "\n",
-    "    # ------------------------------------------------\n",
-    "    # ------ Experimental Design Configuration -------\n",
-    "    # ------------------------------------------------\n",
-    "    ExpDesign = ExpDesigns(Inputs)\n",
-    "\n",
-    "    #ExpDesign.method = 'sequential'\n",
-    "    ExpDesign.n_init_samples = 100\n",
-    "\n",
-    "    ExpDesign.sampling_method = 'latin_hypercube' #is this correct? \n",
-    "\n",
-    "    ExpDesign.n_new_samples = 1\n",
-    "    ExpDesign.n_max_samples = 3\n",
-    "    ExpDesign.mod_LOO_threshold = 1e-16\n",
-    "\n",
-    "    ExpDesign.tradeoff_scheme = None\n",
-    "    ExpDesign.explore_method = 'latin_hypercube' #is this correct? How do I choose this?\n",
-    "\n",
-    "    ExpDesign.n_canddidate = 1000\n",
-    "    ExpDesign.n_cand_groups = 4\n",
-    "\n",
-    "    # -------- Exploitation ------\n",
-    "    ExpDesign.exploit_method = 'Space-filling'\n",
-    "\n",
-    "    #BayesOptDesign -> when data is available \n",
-    "\n",
-    "    # VarBasedOptDesign -> when data is not available\n",
-    "    ExpDesign.util_func = 'ALM'\n",
-    "\n",
-    "    ExpDesign.valid_samples = np.load(\"./data/valid_samples.npy\")\n",
-    "    ExpDesign.valid_model_runs = {'Z': np.load(\"./data/valid_samples.npy\")}\n",
-    "\n",
-    "    # >>>>>>>>>>>>>>>>>>>>>> Build Surrogate <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n",
-    "    MetaModelOpts.ExpDesign = ExpDesign\n",
-    "    egine = Engine(MetaModelOpts, Model, ExpDesign)\n",
-    "    egine.start_engine()\n",
-    "    egine.train_normal()\n",
-    "\n",
-    "    # =====================================================\n",
-    "    # =========  POST PROCESSING OF METAMODELS  ===========\n",
-    "    # =====================================================\n",
-    "    PostPCE = PostProcessing(egine)\n",
-    "\n",
-    "    #Plot to check validation visually\n",
-    "    PostPCE.valid_metamodel(n_samples=3)\n",
-    "\n",
-    "    #Check the quality of your regression model \n",
-    "    PostPCE.check_reg_quality()\n",
-    "\n",
-    "    #Compute and print RMSE error\n",
-    "    PostPCE.check_accuracy(n_samples=3)\n",
-    "\n",
-    "    PostPCE.plot_moments()\n",
-    "\n",
-    "    # if MetaModelOpts.ExpDesign.method == 'sequential':\n",
-    "    #     PostPCE.plot_seq_design_diagnostics()\n",
-    "\n",
-    "    total_sobol = PostPCE.sobol_indices()\n",
-    "\n",
-    "    X = list(ExpDesign.X)\n",
-    "    Y = list(ExpDesign.Y.values())\n",
-    "\n",
-    "    X = [float(x[0]) for x in X]\n",
-    "    Y = [float(y) for sublist in Y for y in sublist]\n",
-    "\n",
-    "    #print(f\"x-values {len(X)} \\n y-values {len(Y)}\")\n",
-    "\n",
-    "    plt.plot(X, Y, 'g', label='PCE predictor - LSTSQ')\n",
-    "    plt.scatter(X, Y, label='training data')\n",
-    "    #plt.plot(x_, f, 'm', label='function')\n",
-    "    plt.title('PCE surrogate - prediction accuracy')\n",
-    "    plt.legend()\n",
-    "    plt.show()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 9,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "plt.plot(X, Y, 'g', label='PCE predictor - LSTSQ')\n",
-    "plt.scatter(X, Y, label='training data')\n",
-    "#plt.plot(x_, f, 'm', label='function')\n",
-    "plt.title('PCE surrogate - prediction accuracy')\n",
-    "plt.legend()\n",
-    "plt.show()"
-   ]
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "meta_models",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.10.14"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/examples/umbridge_tsunamitutorial/example_umbridge_testmodel.py b/examples/umbridge_tsunamitutorial/example_umbridge_testmodel.py
index 22a0f750e..5f813b322 100644
--- a/examples/umbridge_tsunamitutorial/example_umbridge_testmodel.py
+++ b/examples/umbridge_tsunamitutorial/example_umbridge_testmodel.py
@@ -12,21 +12,15 @@ An example for using UM-Bridge with an explicitly defined model can be found in
 import joblib
 import numpy as np 
 import umbridge
-import bayesvalidrox as bv
 
-from bayesvalidrox.pylink.pylink import PyLinkForwardModel
-from bayesvalidrox.surrogate_models.inputs import Input
-from bayesvalidrox.surrogate_models.exp_designs import ExpDesigns
-from bayesvalidrox.surrogate_models.surrogate_models import MetaModel
-from bayesvalidrox.post_processing.post_processing import PostProcessing
-from bayesvalidrox.surrogate_models.engine import Engine
+from bayesvalidrox import PyLinkForwardModel, Input, PCE, PostProcessing, Engine, ExpDesigns
 
 
 if __name__ == '__main__':
     
     # This model has 2 inputs and four outputs
     n_prior_sample = 1000
-    priors = bv.Input()
+    priors = Input()
     priors.add_marginals()
     priors.Marginals[0].name = 'x'
     priors.Marginals[0].input_data = np.random.uniform(50,150,n_prior_sample)  
@@ -41,7 +35,7 @@ if __name__ == '__main__':
     model.x_values = np.array([0])
     
     # Create the surrogate
-    surrogate_opts = MetaModel(priors)
+    surrogate_opts = PCE(priors)
     
     # Select the surrogate type and properties
     surrogate_opts.meta_model_type = 'aPCE'
diff --git a/examples/umbridge_tsunamitutorial/example_umbridge_tsunamitutorial.py b/examples/umbridge_tsunamitutorial/example_umbridge_tsunamitutorial.py
index c456787d0..0d9912b94 100644
--- a/examples/umbridge_tsunamitutorial/example_umbridge_tsunamitutorial.py
+++ b/examples/umbridge_tsunamitutorial/example_umbridge_tsunamitutorial.py
@@ -19,12 +19,13 @@ import pandas as pd
 import umbridge
 
 import bayesvalidrox as bv
+from bayesvalidrox import PCE, PostProcessing, Engine, ExpDesigns, Input, PyLinkForwardModel
 from tsunami_model import tsunami_model
 
 if __name__ == '__main__':
     # This model has 2 inputs and four outputs
     n_prior_sample = 1000
-    priors = bv.Input()
+    priors = Input()
     priors.add_marginals()
     priors.Marginals[0].name = 'x'
     priors.Marginals[0].input_data = np.random.uniform(50,150,n_prior_sample)  
@@ -33,7 +34,7 @@ if __name__ == '__main__':
     priors.Marginals[1].input_data = np.random.uniform(50,150,n_prior_sample)
     
     # Define the model - level 0
-    model0 = bv.PyLinkForwardModel()
+    model0 = PyLinkForwardModel()
     model0.link_type = 'function'
     model0.py_file = 'tsunami_model'
     model0.name = 'tsunami_model'
@@ -41,7 +42,7 @@ if __name__ == '__main__':
     #model.observations = data_dict1_times
     
     # Define the model - level 1
-    model1 = bv.PyLinkForwardModel()
+    model1 = PyLinkForwardModel()
     model1.link_type = 'function'
     model1.py_file = 'tsunami_model1'
     model1.name = 'tsunami_model1'
@@ -49,7 +50,7 @@ if __name__ == '__main__':
     #model.observations = data_dict1_times
     
     # Create the surrogate
-    surrogate_opts0 = bv.MetaModel(priors, model0)
+    surrogate_opts0 = PCE(priors, model0)
     
     # Select your metamodel method
     surrogate_opts0.meta_model_type = 'aPCE'
@@ -58,21 +59,21 @@ if __name__ == '__main__':
     surrogate_opts0.pce_q_norm = 0.4#1.0
 
     # Define ExpDesign - this is the same for both models       
-    ExpDesign0 = bv.ExpDesigns(priors)
+    ExpDesign0 = ExpDesigns(priors)
     ExpDesign0.method = 'normal'
     ExpDesign0.n_init_samples = 50
     ExpDesign0.sampling_method = 'latin-hypercube'
     ExpDesign1 = copy.deepcopy(ExpDesign0)
     
     # Start and run the engine
-    engine0 = bv.Engine(surrogate_opts0, model0, ExpDesign0)
+    engine0 = Engine(surrogate_opts0, model0, ExpDesign0)
     engine0.start_engine()
     engine0.train_normal(parallel = False)
     print('Surrogate 0 completed')
     print('')
     
     # Create the surrogate
-    surrogate_opts1 = bv.MetaModel(priors, model1)
+    surrogate_opts1 = PCE(priors, model1)
     
     # Select your metamodel method
     surrogate_opts1.meta_model_type = 'aPCE'
@@ -81,7 +82,7 @@ if __name__ == '__main__':
     surrogate_opts1.pce_q_norm = 0.4#1.0
 
     # Start and run the engine
-    engine1 = bv.Engine(surrogate_opts1, model1, ExpDesign1)
+    engine1 = Engine(surrogate_opts1, model1, ExpDesign1)
     engine1.start_engine()
     engine1.train_normal(parallel = False)
     print('Surrogate 1 completed')
@@ -96,7 +97,7 @@ if __name__ == '__main__':
         joblib.dump(engine1.MetaModel, output, 2)
     
     # Post processing on model 1
-    L2_PostPCE = bv.PostProcessing(engine1)
+    L2_PostPCE = PostProcessing(engine1)
     L2_PostPCE.plot_moments(plot_type='line')
     # Plot to check validation visually.
     L2_PostPCE.valid_metamodel(n_samples=1)
@@ -118,12 +119,12 @@ if __name__ == '__main__':
     # Bayesian Inference
     # Set uncertainty
     obsData = pd.DataFrame(true_data_nox, columns=model0.Output.names)
-    DiscrepancyOpts = bv.Discrepancy('')
+    DiscrepancyOpts = Discrepancy('')
     DiscrepancyOpts.type = 'Gaussian'
     DiscrepancyOpts.parameters = (obsData*0.15)**2
     
     # Parameter estimation / single model validation via TOM for model 1
-    BayesOpts = bv.BayesInference(engine1)
+    BayesOpts = BayesInference(engine1)
     BayesOpts.emulator= True
     BayesOpts.plot_post_pred = True
     #BayesOpts.inference_method = 'rejection'
@@ -167,7 +168,7 @@ if __name__ == '__main__':
         }
 
     # Run model comparison
-    BayesOpts = bv.BayesModelComparison(
+    BayesOpts = BayesModelComparison(
         justifiability=True,
         n_bootstarp=10,
         just_n_meas=2
diff --git a/examples/umbridge_tsunamitutorial/testmodel.pk1 b/examples/umbridge_tsunamitutorial/testmodel.pk1
new file mode 100644
index 0000000000000000000000000000000000000000..6021864ade548d6adb3202eaa24924932eef03d7
GIT binary patch
literal 10816
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
Y9dlN7$1nA<tv^92<{#oCVVMg51Ca?!GXMYp

literal 0
HcmV?d00001

diff --git a/src/bayesvalidrox/post_processing/post_processing.py b/src/bayesvalidrox/post_processing/post_processing.py
index 0d7fbad16..1b244516d 100644
--- a/src/bayesvalidrox/post_processing/post_processing.py
+++ b/src/bayesvalidrox/post_processing/post_processing.py
@@ -1146,7 +1146,7 @@ class PostProcessing:
             # the total number of explanatory variables in the model
             # (not including the constant term)
             length_list = []
-            for key, value in PCEModel.coeffs_dict['b_1'][key].items():
+            for key, value in PCEModel._coeffs_dict['b_1'][key].items():
                 length_list.append(len(value))
             n_predictors = min(length_list)
             n_samples = x_val.shape[0]
-- 
GitLab