From 7749eca488be2e2665d06e711dd0da75daedcf45 Mon Sep 17 00:00:00 2001 From: kohlhaasrebecca <rebecca.kohlhaas@outlook.com> Date: Thu, 18 Apr 2024 14:47:23 +0200 Subject: [PATCH] Cut BMC, Function for justifiability analysis BMC only runs the BME part of BayesInf, split JA into its own function, removed redundant function in MCMC, added to function diagrams --- .coverage | Bin 0 -> 53248 bytes .coverage.DESKTOP-ATMEKSV.10780.XNWpwYfx | 0 .coverage.DESKTOP-ATMEKSV.12404.XzQmGlCx | 0 .coverage.DESKTOP-ATMEKSV.12452.XgsSHyzx | 0 .coverage.DESKTOP-ATMEKSV.21288.XCZBWtjx | 0 .coverage.DESKTOP-ATMEKSV.21748.XBOljdvx | 0 .coverage.DESKTOP-ATMEKSV.26128.XrTwIHQx | 0 .coverage.DESKTOP-ATMEKSV.26336.XXhjOUCx | 0 .coverage.DESKTOP-ATMEKSV.27368.XKadoIex | 0 .coverage.DESKTOP-ATMEKSV.27556.XfwwABAx | Bin 0 -> 53248 bytes .coverage.DESKTOP-ATMEKSV.27856.XpjNuPSx | 0 .coverage.DESKTOP-ATMEKSV.28136.XQytruKx | 0 .coverage.DESKTOP-ATMEKSV.30088.XBTNpNAx | 0 .coverage.DESKTOP-ATMEKSV.31644.XFWeLHFx | 0 .coverage.DESKTOP-ATMEKSV.32652.XxCzZPCx | 0 .coverage.DESKTOP-ATMEKSV.32976.XFBoIPNx | 0 .coverage.DESKTOP-ATMEKSV.33768.XqlATslx | 0 .coverage.DESKTOP-ATMEKSV.33992.XFaaFKJx | 0 .coverage.DESKTOP-ATMEKSV.34248.XzigTbBx | Bin 0 -> 8192 bytes .coverage.DESKTOP-ATMEKSV.35124.XBfpxDZx | 0 .coverage.DESKTOP-ATMEKSV.35624.XJVIwqYx | 0 Outputs_Bayes_None_Calib/emcee_sampler.h5 | Bin 2783200 -> 4168256 bytes .../diagrams/.$Structure_BayesInf.drawio.dtmp | 449 ---- docs/diagrams/Structure_BayesInf.drawio | 503 +++- .../bayesvalidrox/__init__.py | 25 - .../__pycache__/__init__.cpython-310.pyc | Bin 795 -> 0 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 938 -> 0 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 860 -> 0 bytes .../bayesvalidrox/bayes_inference/__init__.py | 9 - .../__pycache__/__init__.cpython-310.pyc | Bin 303 -> 0 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 382 -> 0 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 368 -> 0 bytes .../bayes_inference.cpython-310.pyc | Bin 31276 -> 0 bytes .../bayes_inference.cpython-311.pyc | Bin 60922 -> 0 bytes .../bayes_inference.cpython-39.pyc | Bin 31419 -> 0 bytes .../bayes_model_comparison.cpython-310.pyc | Bin 15645 -> 0 bytes .../bayes_model_comparison.cpython-311.pyc | Bin 27053 -> 0 bytes .../bayes_model_comparison.cpython-39.pyc | Bin 15716 -> 0 bytes .../__pycache__/discrepancy.cpython-310.pyc | Bin 3806 -> 0 bytes .../__pycache__/discrepancy.cpython-311.pyc | Bin 4795 -> 0 bytes .../__pycache__/discrepancy.cpython-39.pyc | Bin 3869 -> 0 bytes .../__pycache__/mcmc.cpython-310.pyc | Bin 18924 -> 0 bytes .../__pycache__/mcmc.cpython-311.pyc | Bin 35863 -> 0 bytes .../__pycache__/mcmc.cpython-39.pyc | Bin 18959 -> 0 bytes .../bayes_inference/bayes_inference.py | 1532 ------------ .../bayes_inference/bayes_model_comparison.py | 654 ----- .../bayes_inference/discrepancy.py | 106 - .../bayesvalidrox/bayes_inference/mcmc.py | 909 ------- .../bayesvalidrox/bayesvalidrox.mplstyle | 16 - .../bayesvalidrox/post_processing/__init__.py | 7 - .../__pycache__/__init__.cpython-310.pyc | Bin 261 -> 0 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 323 -> 0 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 326 -> 0 bytes .../post_processing.cpython-310.pyc | Bin 28679 -> 0 bytes .../post_processing.cpython-311.pyc | Bin 58808 -> 0 bytes .../post_processing.cpython-39.pyc | Bin 28771 -> 0 bytes .../post_processing/post_processing.py | 1338 ---------- .../bayesvalidrox/pylink/__init__.py | 7 - .../__pycache__/__init__.cpython-310.pyc | Bin 247 -> 0 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 309 -> 0 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 312 -> 0 bytes .../pylink/__pycache__/pylink.cpython-310.pyc | Bin 18654 -> 0 bytes .../pylink/__pycache__/pylink.cpython-311.pyc | Bin 35164 -> 0 bytes .../pylink/__pycache__/pylink.cpython-39.pyc | Bin 18646 -> 0 bytes .../bayesvalidrox/pylink/pylink.py | 803 ------ .../surrogate_models/__init__.py | 7 - .../__pycache__/__init__.cpython-310.pyc | Bin 258 -> 0 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 320 -> 0 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 323 -> 0 bytes .../__pycache__/adaptPlot.cpython-311.pyc | Bin 4921 -> 0 bytes .../apoly_construction.cpython-310.pyc | Bin 2815 -> 0 bytes .../apoly_construction.cpython-311.pyc | Bin 5198 -> 0 bytes .../apoly_construction.cpython-39.pyc | Bin 2886 -> 0 bytes .../__pycache__/bayes_linear.cpython-310.pyc | Bin 14412 -> 0 bytes .../__pycache__/bayes_linear.cpython-311.pyc | Bin 21676 -> 0 bytes .../__pycache__/bayes_linear.cpython-39.pyc | Bin 14506 -> 0 bytes .../__pycache__/engine.cpython-311.pyc | Bin 85291 -> 0 bytes .../__pycache__/eval_rec_rule.cpython-310.pyc | Bin 5560 -> 0 bytes .../__pycache__/eval_rec_rule.cpython-311.pyc | Bin 8182 -> 0 bytes .../__pycache__/eval_rec_rule.cpython-39.pyc | Bin 5648 -> 0 bytes .../__pycache__/exp_designs.cpython-310.pyc | Bin 17477 -> 0 bytes .../__pycache__/exp_designs.cpython-311.pyc | Bin 19240 -> 0 bytes .../__pycache__/exp_designs.cpython-39.pyc | Bin 17597 -> 0 bytes .../__pycache__/exp_designs_.cpython-311.pyc | Bin 20552 -> 0 bytes .../__pycache__/exploration.cpython-310.pyc | Bin 8154 -> 0 bytes .../__pycache__/exploration.cpython-311.pyc | Bin 12447 -> 0 bytes .../__pycache__/exploration.cpython-39.pyc | Bin 8190 -> 0 bytes .../__pycache__/glexindex.cpython-310.pyc | Bin 7185 -> 0 bytes .../__pycache__/glexindex.cpython-311.pyc | Bin 7922 -> 0 bytes .../__pycache__/glexindex.cpython-39.pyc | Bin 7232 -> 0 bytes .../__pycache__/input_space.cpython-311.pyc | Bin 16824 -> 0 bytes .../__pycache__/inputs.cpython-310.pyc | Bin 2413 -> 0 bytes .../__pycache__/inputs.cpython-311.pyc | Bin 2894 -> 0 bytes .../__pycache__/inputs.cpython-39.pyc | Bin 2474 -> 0 bytes .../__pycache__/loss_function.cpython-311.pyc | Bin 13488 -> 0 bytes .../meta_model_engine.cpython-310.pyc | Bin 42392 -> 0 bytes .../meta_model_engine.cpython-311.pyc | Bin 87269 -> 0 bytes .../meta_model_engine.cpython-39.pyc | Bin 42705 -> 0 bytes ...rthogonal_matching_pursuit.cpython-310.pyc | Bin 8915 -> 0 bytes ...rthogonal_matching_pursuit.cpython-311.pyc | Bin 14802 -> 0 bytes ...orthogonal_matching_pursuit.cpython-39.pyc | Bin 8930 -> 0 bytes .../__pycache__/reg_fast_ard.cpython-310.pyc | Bin 11629 -> 0 bytes .../__pycache__/reg_fast_ard.cpython-311.pyc | Bin 19757 -> 0 bytes .../__pycache__/reg_fast_ard.cpython-39.pyc | Bin 11717 -> 0 bytes .../reg_fast_laplace.cpython-310.pyc | Bin 9509 -> 0 bytes .../reg_fast_laplace.cpython-311.pyc | Bin 19010 -> 0 bytes .../reg_fast_laplace.cpython-39.pyc | Bin 9581 -> 0 bytes .../sequential_design.cpython-311.pyc | Bin 87535 -> 0 bytes .../surrogate_models.cpython-310.pyc | Bin 35103 -> 0 bytes .../surrogate_models.cpython-311.pyc | Bin 64791 -> 0 bytes .../surrogate_models.cpython-39.pyc | Bin 35188 -> 0 bytes .../__pycache__/wrapper.cpython-311.pyc | Bin 10433 -> 0 bytes .../surrogate_models/adaptPlot.py | 109 - .../surrogate_models/apoly_construction.py | 124 - .../surrogate_models/bayes_linear.py | 523 ---- .../bayesvalidrox/surrogate_models/engine.py | 2225 ----------------- .../surrogate_models/eval_rec_rule.py | 197 -- .../surrogate_models/exp_designs.py | 479 ---- .../surrogate_models/exploration.py | 367 --- .../surrogate_models/glexindex.py | 161 -- .../surrogate_models/input_space.py | 398 --- .../bayesvalidrox/surrogate_models/inputs.py | 79 - .../orthogonal_matching_pursuit.py | 366 --- .../surrogate_models/reg_fast_ard.py | 475 ---- .../surrogate_models/reg_fast_laplace.py | 452 ---- .../surrogate_models/surrogate_models.py | 1576 ------------ .../example_model_comparison.py | 8 +- .../bayes_inference/bayes_inference.py | 11 +- .../bayes_inference/bayes_model_comparison.py | 259 +- src/bayesvalidrox/bayes_inference/mcmc.py | 201 +- src/bayesvalidrox/surrogate_models/engine.py | 17 +- tests/test_BayesInference.py | 32 +- tests/test_MCMC.py | 6 +- 133 files changed, 721 insertions(+), 13709 deletions(-) create mode 100644 .coverage delete mode 100644 .coverage.DESKTOP-ATMEKSV.10780.XNWpwYfx delete mode 100644 .coverage.DESKTOP-ATMEKSV.12404.XzQmGlCx delete mode 100644 .coverage.DESKTOP-ATMEKSV.12452.XgsSHyzx delete mode 100644 .coverage.DESKTOP-ATMEKSV.21288.XCZBWtjx delete mode 100644 .coverage.DESKTOP-ATMEKSV.21748.XBOljdvx delete mode 100644 .coverage.DESKTOP-ATMEKSV.26128.XrTwIHQx delete mode 100644 .coverage.DESKTOP-ATMEKSV.26336.XXhjOUCx delete mode 100644 .coverage.DESKTOP-ATMEKSV.27368.XKadoIex create mode 100644 .coverage.DESKTOP-ATMEKSV.27556.XfwwABAx delete mode 100644 .coverage.DESKTOP-ATMEKSV.27856.XpjNuPSx delete mode 100644 .coverage.DESKTOP-ATMEKSV.28136.XQytruKx delete mode 100644 .coverage.DESKTOP-ATMEKSV.30088.XBTNpNAx delete mode 100644 .coverage.DESKTOP-ATMEKSV.31644.XFWeLHFx delete mode 100644 .coverage.DESKTOP-ATMEKSV.32652.XxCzZPCx delete mode 100644 .coverage.DESKTOP-ATMEKSV.32976.XFBoIPNx delete mode 100644 .coverage.DESKTOP-ATMEKSV.33768.XqlATslx delete mode 100644 .coverage.DESKTOP-ATMEKSV.33992.XFaaFKJx create mode 100644 .coverage.DESKTOP-ATMEKSV.34248.XzigTbBx delete mode 100644 .coverage.DESKTOP-ATMEKSV.35124.XBfpxDZx delete mode 100644 .coverage.DESKTOP-ATMEKSV.35624.XJVIwqYx delete mode 100644 docs/diagrams/.$Structure_BayesInf.drawio.dtmp delete mode 100644 examples/model-comparison/bayesvalidrox/__init__.py delete mode 100644 examples/model-comparison/bayesvalidrox/__pycache__/__init__.cpython-310.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/__pycache__/__init__.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/__pycache__/__init__.cpython-39.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/bayes_inference/__init__.py delete mode 100644 examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/__init__.cpython-310.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/__init__.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/__init__.cpython-39.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/bayes_inference.cpython-310.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/bayes_inference.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/bayes_inference.cpython-39.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/bayes_model_comparison.cpython-310.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/bayes_model_comparison.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/bayes_model_comparison.cpython-39.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/discrepancy.cpython-310.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/discrepancy.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/discrepancy.cpython-39.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/mcmc.cpython-310.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/mcmc.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/mcmc.cpython-39.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/bayes_inference/bayes_inference.py delete mode 100644 examples/model-comparison/bayesvalidrox/bayes_inference/bayes_model_comparison.py delete mode 100644 examples/model-comparison/bayesvalidrox/bayes_inference/discrepancy.py delete mode 100644 examples/model-comparison/bayesvalidrox/bayes_inference/mcmc.py delete mode 100644 examples/model-comparison/bayesvalidrox/bayesvalidrox.mplstyle delete mode 100644 examples/model-comparison/bayesvalidrox/post_processing/__init__.py delete mode 100644 examples/model-comparison/bayesvalidrox/post_processing/__pycache__/__init__.cpython-310.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/post_processing/__pycache__/__init__.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/post_processing/__pycache__/__init__.cpython-39.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/post_processing/__pycache__/post_processing.cpython-310.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/post_processing/__pycache__/post_processing.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/post_processing/__pycache__/post_processing.cpython-39.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/post_processing/post_processing.py delete mode 100644 examples/model-comparison/bayesvalidrox/pylink/__init__.py delete mode 100644 examples/model-comparison/bayesvalidrox/pylink/__pycache__/__init__.cpython-310.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/pylink/__pycache__/__init__.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/pylink/__pycache__/__init__.cpython-39.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/pylink/__pycache__/pylink.cpython-310.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/pylink/__pycache__/pylink.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/pylink/__pycache__/pylink.cpython-39.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/pylink/pylink.py delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__init__.py delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/__init__.cpython-310.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/__init__.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/__init__.cpython-39.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/adaptPlot.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/apoly_construction.cpython-310.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/apoly_construction.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/apoly_construction.cpython-39.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/bayes_linear.cpython-310.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/bayes_linear.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/bayes_linear.cpython-39.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/engine.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/eval_rec_rule.cpython-310.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/eval_rec_rule.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/eval_rec_rule.cpython-39.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/exp_designs.cpython-310.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/exp_designs.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/exp_designs.cpython-39.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/exp_designs_.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/exploration.cpython-310.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/exploration.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/exploration.cpython-39.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/glexindex.cpython-310.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/glexindex.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/glexindex.cpython-39.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/input_space.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/inputs.cpython-310.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/inputs.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/inputs.cpython-39.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/loss_function.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/meta_model_engine.cpython-310.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/meta_model_engine.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/meta_model_engine.cpython-39.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/orthogonal_matching_pursuit.cpython-310.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/orthogonal_matching_pursuit.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/orthogonal_matching_pursuit.cpython-39.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/reg_fast_ard.cpython-310.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/reg_fast_ard.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/reg_fast_ard.cpython-39.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/reg_fast_laplace.cpython-310.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/reg_fast_laplace.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/reg_fast_laplace.cpython-39.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/sequential_design.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/surrogate_models.cpython-310.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/surrogate_models.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/surrogate_models.cpython-39.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/wrapper.cpython-311.pyc delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/adaptPlot.py delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/apoly_construction.py delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/bayes_linear.py delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/engine.py delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/eval_rec_rule.py delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/exp_designs.py delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/exploration.py delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/glexindex.py delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/input_space.py delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/inputs.py delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/orthogonal_matching_pursuit.py delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/reg_fast_ard.py delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/reg_fast_laplace.py delete mode 100644 examples/model-comparison/bayesvalidrox/surrogate_models/surrogate_models.py diff --git a/.coverage b/.coverage new file mode 100644 index 0000000000000000000000000000000000000000..a8668b517c6b0d1fd1c307cab579d7b1f1f43492 GIT binary patch literal 53248 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 literal 0 HcmV?d00001 diff --git a/.coverage.DESKTOP-ATMEKSV.10780.XNWpwYfx b/.coverage.DESKTOP-ATMEKSV.10780.XNWpwYfx deleted file mode 100644 index e69de29bb..000000000 diff --git a/.coverage.DESKTOP-ATMEKSV.12404.XzQmGlCx b/.coverage.DESKTOP-ATMEKSV.12404.XzQmGlCx deleted file mode 100644 index e69de29bb..000000000 diff --git a/.coverage.DESKTOP-ATMEKSV.12452.XgsSHyzx b/.coverage.DESKTOP-ATMEKSV.12452.XgsSHyzx deleted file mode 100644 index e69de29bb..000000000 diff --git a/.coverage.DESKTOP-ATMEKSV.21288.XCZBWtjx b/.coverage.DESKTOP-ATMEKSV.21288.XCZBWtjx deleted file mode 100644 index e69de29bb..000000000 diff --git a/.coverage.DESKTOP-ATMEKSV.21748.XBOljdvx b/.coverage.DESKTOP-ATMEKSV.21748.XBOljdvx deleted file mode 100644 index e69de29bb..000000000 diff --git a/.coverage.DESKTOP-ATMEKSV.26128.XrTwIHQx b/.coverage.DESKTOP-ATMEKSV.26128.XrTwIHQx deleted file mode 100644 index e69de29bb..000000000 diff --git a/.coverage.DESKTOP-ATMEKSV.26336.XXhjOUCx b/.coverage.DESKTOP-ATMEKSV.26336.XXhjOUCx deleted file mode 100644 index e69de29bb..000000000 diff --git a/.coverage.DESKTOP-ATMEKSV.27368.XKadoIex b/.coverage.DESKTOP-ATMEKSV.27368.XKadoIex deleted file mode 100644 index e69de29bb..000000000 diff --git a/.coverage.DESKTOP-ATMEKSV.27556.XfwwABAx b/.coverage.DESKTOP-ATMEKSV.27556.XfwwABAx new file mode 100644 index 0000000000000000000000000000000000000000..e1f7e6f75f5aa9a7a33884193b67b7cc22082200 GIT binary patch literal 53248 zcmeI)O>f&a7zc34ZmrmHpcX+O1VIsAHpi&r&d8zIcG$8lhhhb~Zow`C=F&2qXtg9q zlJjyH2DbwO4A?gq_MP?-b}M$-X{TNGJd$YHNnG?+)cXsuElVUt{`iozqqN^Vee5Ml z48q8liP$sl7^Z1_DuiJeReG$^LvI%C+|qC8)tuR1v|BaWgTL17Z;g88SHu2(?TNix z|84F4)j#Tf^_SJ(Em?Kx1U3jj00I#Be+x{W)-7jq(|qw`B6~xXMAB7J_PqA_*9ZHD z2jX!5v&RP_J0^B&g0|gVu`i<VOpH_{2HsE!FX(%&OuXPoB*#jp9>=QB3mqM!rH&J} z)BL>G_4<@6QAbq7DDr$6U5MxEqLn7dua>CuBs)NbDDNoX6k;dO-V~7<s7M8_inChm zc>QLr`SPcl<*cupmnv<Oj9mIzoofvpD4OzUKn1yB)aTmwA{n^HDsBlmZJ`@dJ<pS@ zwNdClNJ266g0z`I>?K|p2z9R9aiaP+Hn7ELdLz8q)=*i`xIxddocXn8bc)P3<jj-j znFmz4Ak?fyM!qy<PU{?u{T`A3F!o2>Ig}&2a1t)cxhQWE=8b*hzPX_<i}ucSrzYnf z&2o(c?_{i|o!=5g&Q{utAZ!V41VzAms}<+Nb<?1zROj)@kUnp9<v0n`_g(7zZik-g zKi^%kob7G%@+1uu=IQplB%bb6=YnQ>ctPm!`NeU=qhvlvcoYqXA{?YchI5Oob10f; z$IJtbAtN4WBFqy~P2Xy?ab>9vqBjhC^RbpjOsr^t&|ILC4aR}XLnY=mxZ$aa<dJIU zXR~SHZ3hyCPN!ON4z?GC&NKwNo#}3EvRSd5tu6CKH4US@xAGTjE`)SX-Y|{oQ@)b% zIMNfz>n2H^qnIW27|G92b9SwYv%j^dIeEHnC*N6_Shp-^W5b+eBZB88e%zjG1Rp7e zz?FsI&8t6>$+5UzcRoxNZ``gpA8#zGI9H+D;pfWB?@DQvFE>+tpC)~Nl;^6<M~W(c zsV;U;<&b8Rk@O-OvNQ*0D}dmHeMyOBFB~Un{PNp0JbCRY>YEi%yw~=Ws+lII;r&$@ z#~v-KylllE>7$}?EMuO9;)dvj;ZVsSTN^0HqnNJg#Uic4^;PMUqKx>0%Q!l1q;=AZ z3s3WhH0bpBq8;CtK|f!wcp1)0rMaI6CtoL<L@1+Z(4dTIh+ZjE7n+~t8B3Sn9+3%` z>dSsM+__U`N<2GO*NV$lqc3El63<tHlcbeN1M5u2!i^N2q_wo!D8DWYxVO3;e&%n< zEBsMzvTa(<{rl!*oDarqp6SN4sQXe^JAYf63z91*i+FiL6E1z)nT->+o8jQM*%f$l z%X+YvDd<%BXPsJ;zu=qpzXttag8&2|009U<00Izz00bZa0SG`~`2@;l$+Y<Uf64yS zu>YnfY!H9|1Rwwb2tWV=5P$##AOHafyqf~`Qu&^(|HR`1+bnN6`5ys1Z11)AYSgNd z{mQUk+5fzo4MeRW009U<00Izz00bZa0SG_<0uayw_3}Ma{}!NBD{ocvUjn56!2ga; zg;xkb00Izz00bZa0SG_<0uX=z1eQ^N@Bh<(`iBhy5P$##AOHafKmY;|fB*y_0D&bI z!2SOv?p!nt0uX=z1Rwwb2tWV=5P$##Adm~-{y#zi0uX=z1Rwwb2tWV=5P$##Ah7%b zxc|TWeT)`D00Izz00bZa0SG_<0uX=z1aSW!F#rJwKmY;|fB*y_009U<00IzLegWM7 zU;aKu3n2gj2tWV=5P$##AOHafKmY=`|Bo1e00bZa0SG_<0uX=z1Rwwb2rRz<?*A`; aAESj3fB*y_009U<00Izz00bZaf&Ty)+a0$6 literal 0 HcmV?d00001 diff --git a/.coverage.DESKTOP-ATMEKSV.27856.XpjNuPSx b/.coverage.DESKTOP-ATMEKSV.27856.XpjNuPSx deleted file mode 100644 index e69de29bb..000000000 diff --git a/.coverage.DESKTOP-ATMEKSV.28136.XQytruKx b/.coverage.DESKTOP-ATMEKSV.28136.XQytruKx deleted file mode 100644 index e69de29bb..000000000 diff --git a/.coverage.DESKTOP-ATMEKSV.30088.XBTNpNAx b/.coverage.DESKTOP-ATMEKSV.30088.XBTNpNAx deleted file mode 100644 index e69de29bb..000000000 diff --git a/.coverage.DESKTOP-ATMEKSV.31644.XFWeLHFx b/.coverage.DESKTOP-ATMEKSV.31644.XFWeLHFx deleted file mode 100644 index e69de29bb..000000000 diff --git a/.coverage.DESKTOP-ATMEKSV.32652.XxCzZPCx b/.coverage.DESKTOP-ATMEKSV.32652.XxCzZPCx deleted file mode 100644 index e69de29bb..000000000 diff --git a/.coverage.DESKTOP-ATMEKSV.32976.XFBoIPNx b/.coverage.DESKTOP-ATMEKSV.32976.XFBoIPNx deleted file mode 100644 index e69de29bb..000000000 diff --git a/.coverage.DESKTOP-ATMEKSV.33768.XqlATslx b/.coverage.DESKTOP-ATMEKSV.33768.XqlATslx deleted file mode 100644 index e69de29bb..000000000 diff --git a/.coverage.DESKTOP-ATMEKSV.33992.XFaaFKJx b/.coverage.DESKTOP-ATMEKSV.33992.XFaaFKJx deleted file mode 100644 index e69de29bb..000000000 diff --git a/.coverage.DESKTOP-ATMEKSV.34248.XzigTbBx b/.coverage.DESKTOP-ATMEKSV.34248.XzigTbBx new file mode 100644 index 0000000000000000000000000000000000000000..00020484238401dae7e558e5d5f97fb6fd041d2d GIT binary patch literal 8192 zcmeI#%WA?v7zN-N5ek7)cU^jxEnYT#0aM9ND7LOEQU90$&A?=;YhSld;h&Uj+;lJJ zFhe-ZCGhR$Yq@YyQ221nBi_uwSZij0F~;ib>Fm<<epmF{^#5YbwD^70UH0kQ=wK*7 z0SZun0u-PC1t>rP3Q&LocPMZf+K1=S$X<S8zB$O&pCsgaS=ZZAj`>aP%|Ekrm0^{> zFEZRL;w6D*GQmeB2>v`q^ay%o*ddkzy}5S2f-l<o_XoI2o2#+gOxyF_E>}g_OGsXu fx4Az0846H<0u-PC1t>rP3Q&Lo6rcbF?pWXo?EXFK literal 0 HcmV?d00001 diff --git a/.coverage.DESKTOP-ATMEKSV.35124.XBfpxDZx b/.coverage.DESKTOP-ATMEKSV.35124.XBfpxDZx deleted file mode 100644 index e69de29bb..000000000 diff --git a/.coverage.DESKTOP-ATMEKSV.35624.XJVIwqYx b/.coverage.DESKTOP-ATMEKSV.35624.XJVIwqYx deleted file mode 100644 index e69de29bb..000000000 diff --git a/Outputs_Bayes_None_Calib/emcee_sampler.h5 b/Outputs_Bayes_None_Calib/emcee_sampler.h5 index bd7c2effd1b69997af86c87a8380da8ba2b9ad3d..5637f5df39ddfcc500900dc3628b1a6fbbd2c415 100644 GIT binary patch delta 185572 zcmZ_W2{={V8!&vwEJKD2Q4vCsv6NCvku(XF=F)5?sWdq%MM7qkNHiG|A(GtNQ06IP z=6OD|V;;W!^yEC>`|o|bu5~#b`>fwy`|P#Wz3#oY4oVyWOPeDEsBjoOM}ew$IF3}T zO-Tr4=cCqZvHkN;E+u80kZQn%iH1AN2yq6VkiO0_@NH9S*s><V!aK_di-K=RALEcy zR7<Uw)({V7Y6~x7GcovGfrnA>el5vhV=dv}71}((vs!$?pEV_e%e8rf1+|5xJ$C-t zY{$ap|Ndk{!Sh<O=6`<6_UE^3hJUu&wy@QopT>WF{z2Kc|NDQBh0iVg-#D0}xgz+E zwup$)pHKYxq=#YfM@@;~tJ)%b3wvT5jI{sR@x{UW@SWz?T+Gg9jBg~%Yw)M?U}H_W zZU0jb+rt0<?CHXudn~-aQ2Rm)wgqcwO7bmiZ4fN0B|-2Ap3{~J9>eAJTEhRRmH3W~ zX)hLKW9{vqT`&x$XiKoO?F??$T6$kj$4gF!fERYWaNva#FI;%x&XCjLkvh$xvPB`h zMq22CS9A~$UU>1shnGco;m3<WMs$$icJJ`rK|GrlnTfAw`{y5l%}Yr}2rrBAB8(T2 z3?&&+eO?|h{8wyjQsJ}&DM^Br*Iflsyoljt30}nUB7qmljJpa_L~lOLAfDf~IS1$R zpzvrJAzm-DL@B&1#fvmvWHQVWmznT}Zw%rQ4G#+9+3J;vSD1-cn5nQNBU3?~SKEu) zCyN(3ysXTi_Q`Lw49BbG<&d-1506M&ww6QALq8)zK~$WOG2p`?obt|_q970>C+y|T zuZWjbcu~sm=2zah>Gz47p|(X~FTpEWQ4}v?cv+H>tSBz5#UbapCVYA`CthFXns8P9 ze_o8N2|xb(g`8^m<KHh1s)m34{lZ%{eE9c^Y}Ig?E&psxRn6G5h4X`SY%)>|wz^Wp zQ~tu$sYQhmtl_G~6B4f!^+F#DzT~=EqSr|+d`@T{1%k%G<pLw<yW4xB;;rDfuJSy* z7pE7+r@RTSbX`fbI8#kwn)kwOzFFdv&10<1A6}aJN$VMhk*f5)2Sm$}>6V$CXip}X z*$B@j8?+!Rf%an|yC=|#ot=|*XY)Zqz}9cWJQeZg_j|(IWbpKF=&y|I0s{;34-2sx zWHHfs@|!>(EKMx)cK9@ngtv9i(G07INHlYQ;CAx~kW<^?cK1^SdRqLE%U+2FLmMtI z%Itek-cs4`-^|zyjHGKvTDXSc;KYjI<BeqG`K5mAg{A56Ys=wfBWp>Z;_iRxm~$C= z(_e7kDyk2XEZF-iK5!U#dwcHgqG!S)Cr>kjv2n1{-kG1XtqQE&wx4OuB+}s1>%&jA zB)gD2?*LYyGKY>DENU0u)eY3iOY5xd$C1Tutp?7Ojc_k?_0u|~Q5G~bf72kH-ot_x zrJPn=(mf1GO=`STqvL?({cIP@8-OPT<&5ouG&s_@iQ6?Ro#lM+RXtNk)R~0<_eVz} zk599pQ{RZGbTuY8OGLoe-N|TOZXhM^S33&|Smtf@sD}o}6T|Ejg-8&gXdq~5J^&uZ z>z{c=R712EKW$SV2G4gaKRRtlN53K5c^F>)c$P7SPPO^Sf1mDvWnXQkh?k_sAUj^z zD*bsFs#UuqWgpVSf^OO=zCGbbhq-y0318SKSQ#z5#s0AaN*MXoF|yTgc5xTB$E6B+ z-;&esW*bAk%#Sj{FQ-^geD;Aazt}q9m574dl568o<z*_)lUj`IHh5;dGo$|FaQ*&{ zQePpeMyl02UIMogr=RumL&1*kcgynbf4$GC;4PA09{uxN{s2n&nB$(XnTa|~Da`Kf z=HQ0++mxk!XhBAMtD(c{8CQSbFQl+?^I3rqCTrWWlN6h)w(Y?vPHV%~i?XBHhvv~H zv#TPrwLP$}Vi`5MshIUyMP37mYchkZ&$_$ij{W*I5d1D~CGpjF$EUV0I+5H~>aOzJ z@8JJc*Sd{WoaWWv(L!C^(RnttyhAAJi*(+z-VTVil~yshJ_{Ab8awkiyHW3sSMHVg z`xr0(i6bhxXu;|5TqjT~5Dyh2V^3ca=ZL6+wE4ta_BQD2{(kYfVG%4q-5aWdjJM6B z<XvtKmrxhdbvl|Vxw#%*-{V!;A;*q+p0=@V@*hNOC9Rt?O!5AB=?F)cTq1Z7cz8dZ ze+nnyfQFk%18{6v5~<h0L~UN{u5)lTL;M#m!;3eYA=|$`X?s1f7n%Cy9zK0+64~?r zkX|2Fhm!XNlw+&P(E>E$|1FI))XjqSk_CB8<164GRpOz&)l=}`m!a-|)(z^?N7sG) zHp7BK%KF?_%6x~Cta~qZn0BI=gK-aaHn154a};Ii+^<8o<x>K9RA1C1zP8pEj}&;Y z1xWpylkNIWc5GwB$|vs%iy+!l)?(1(Bm6#@f~}fWcrwF-uR4qM2R~^(!{a8ZmA|%r zFnAn)?VaJ_URg~IKHZ{4>^y8{_};!6t__|1TF^j4#~$qCR5PU^4sp>*9;XzD84CL3 zd9NBRU2n65r=0<|*7ahji;CR6c(Mk*_d||B+0)K=8gy`t2MRlUfiBat2Lj_~pv3Gs zqpY(VJRVqI7tU%yeq+>KH~ao`m<2V$`_GVxNMO}b75=O=7+`CZ(9tbHs)N}5=g+8M zbUDw5E4dk!cR%AZrjElYvguJ7r76(Q<mmeH@CUpWH!^+`$b^VOzZz}9UMR}7;as}C z0(tuvS1lXP1)IS6-EVv7=nsSp^jwt^f4)bjSN3rziPxjueFFRicZpQc-2P(czM6)= zAQh32C=TBom@D`?FuHaUgd{DmiyF1Ui4%KPL|!TR3p#D;f1)nD58X3lYAfyegv@Hg zw1RWLqMhH4+Vt5{VWz?{{;*IV>>BI|zcxk#Zh?TiWMa)69Frdo^1qo2MYVc&jH>C7 z6X1DJcvBm^pE79LpPL4b5%;re@>^Lgs&?5C%$7k#Y`fs?&POki@GbN0V~JVFsp;Ai zzx`BDQxL`|Wj&C(VczRi1r<h1_$I3}=KpfIA*YWx{T%On&vzuqH2DIX`_QR~Q!QX7 zaar`}+g7xqDN6i<^#s~`+#uCI;59tCe`AUG)eb~0+t1i-IRa(R+wzaa4#1l6p37Fp zhoSz?y|{Dv<1FZ4XRP(@qs?$u*WGP9*8qf^Z$E7)-Ub6?`j(TzonX<fae;TBHxDHj z&6j)M9!3{*gzoNrJpi0f+2Z@v+RzWN+wHWGE|}ZAIR|qZ08_&&Pu4#jVnHS@T77Ma zaj>py==-_(Lf{-LAC|b?3glf1FH9o4AwZ?_m->hPf4f9DrX^v;6Ha`YC4OKyyl^o= zi`($m1C1po!cS>Stl_~HznoV7(H^cLOjs#_wOLuv+}qHLyhwYy?}MQJ(7^Y!L->z> zHZ;8Q-EB2@b9nea8_rm7YmPkAjCz!luH2y3fp*y55xKx{bsY(LqV$6#QG!xAWEPt; zTnaEGynig4&do&GYEQRx7>vTxpYes}lvc>oSaZb5g8{dgI~7{p7_7PsjBmWQ{2T;_ zqLys@8dD7g;g^>$%AbU7gt_pLl}zAGl{ztznv1TjNq5Y-TMyb|1V0Yj7Wm^3Q8}DT z<tvy3y7Lm-2WRV{XsNlb#*$f><u<>$fy!h-6Dv3#o*65HbFqgrBTRcBAoq-XF2^|3 zYJ_Z}htYto(5TdW7(;K&oI89}>mj+1eNt~@F5+G1BzflM1j})j%F47+O#I^zXF+Po z>Xk7f;|OyST%ns=gKAYEjx#?C)YcO<9-Zt4^RE`q_o|G8FYg16x?U0sD)TAd9#=yK zLrZ$k)|Ou^NcE!o@BxVlpf1UuI@no{YK*m_R_GD11&8vs+2-*4ABTuTK~;HQ_s{mh z?$M`L!Zr@VPN#Re{*E*V6t~Os>Zw9}+ZSK$wW2}osV^bp`x}sN!MIHC>=0@cFZ|w6 z%!YCAtaWu>)PO#Cls&b!83n2s?_|1vKC)gxY`d|%1z``Zh*b&q&`)kk<M&(=2)6a4 z5flc&p#NepF)@Mx?rREe8Zqlpz3d(vbv(@EMK&8gZfW`p+FQTsLVJBFD%nn~id;Me zY=_)DH#R*$;l2SzW7j*;iczb@@67QaZAOLCc77N>@4Ei}gwG&oKAf%y$Z3O@HcO57 zed$L+1KiCGI-RiQt`yh#-dYO!JsX5u84^5r23C;wmQ7@a_Zt$<@LW4>|I9k1Dtx~Y zVHa_`T_{Oy?<m-2lC<NlQqj!8K&PlT)iCOPX^oX-F03EaxSG;MhcJf&i+r|>qV}yk zRX$zAXp$r9cE#6uWPrt&lT(@i<2?CzOMd_qt@!pewwwm^-TFFp&pW|dV7_LLFBPnw zw<MmJq=INyn}$Q<)Ph3<!SiZkVmSZ;A`aHdgM%!nLSJE<@9iGsxqjbzJEtk+otQSo zzONK<iaiRpe^`eSvn(FEa8JNW!lL?it`6W_GCDu_xe-)MXGIFFC@|)lBUWFGe=fXu zH?{f=Ja8@NDqGjcataG~Kl98_VDGQ0Y8sri_apyoj16|;a4q3b+7kO}PKg99G z6MpJDEHU<>f$+7`&^ftMRO?`+sVrB^g3kQ1G3VbrgPd%(UE1+14wgS5HA<dofs*<s zKSEt8z?Rtk*2{4S$#Pp`GlE@+>cJGa-^y-aCVnIACK2y59!=HB*0d5ZE3G8uMNPws z#%<ioPnMwu_uKb(=?#G9lHsZK1EugRe4R}BEpCIi=n8*>90f3A#s!H7rI0*&!@%<v z84ApYPkdTC{(pyXhkW8euwH#REO8IpfAr)8bbN97Ml5|%ipoBzXjX17fr+6)pH#6_ z&{RIh_xaT%Vw-<up>013cEVh-ePX3>J8Qji_>BQbGBMUV_=;e#(4w$6j_V`S#*j(e z;i8JPT3BbdR(r{@@6c|@dEIs+2WED~?ws;uI=c33Xq(%f8uatvChl>LSkSc7JXz#= zgU*6NWckPhqY5Ncd*9ApyAv#r_ljuZq2g+#+uVsM4QK%}t~c%`_;sR1ZC?i?)_jM3 zlvUq+#MrT@iJTijUc;y;u&rrde9fQ1-|9NyDNoUsm+roM%EITb6PEHE`~Fs6Hm@aI z){U@+=uBK*z;HzY{Tm%(9j1Y;pref|@fBKkXFx7&l#W_FeZlW?Arh7%-SzYR3MQ5H z-p0T1qi6AOZ1D^k#gNbMc)&S`7JoTrxg@+6oS$ZRZ}Ovo!|b*nwuMvRO{chh&8kNo zn)COxmEvH*3HnlfS$@eUMD(O?^7|mxhS;LcAGZBb4~o8JOgHv479>@B`%)T{iCk25 zR=?RxM}p$dPI7h*{{_`jN6OA0>q4h4w+p?}X$S7IEe9rg7*Mj|^Txm!GDvwGXRzOG zL8GQYec$cNpk-rm#S4KJB3fus@6nn2Z_@jaMW=FPgy}S*^OU`pT`~fDjDy&C-}SOu z6jOYxJuklz?HJfH*{j^ag5)v;GIE7Jp$+%P-D1_6SWx=8H3xU>Z$u$oW#)HUsqkIS z|Le7U3VO%?zH|3!A{A8~vI*^oX@?%(l>~#;wGe+V{G<332iDbnG~-5n6Z$Of?ssLh z52kV-ec;u^5B-?xmVh2Wh5n1o*&CbDd7U8vbLBd?&r}{0k!(Y6_hL$;G$sqWNxJx$ zZ$~dGyKsW~NW2|>PI&eEdX)X^5OGLAQqO9bGZz((ISo$#WPse_2+k0P7=-Cbu$%M8 zfy-FHHXgZZcp~=vKCe;(xII=r*VUX4B4txNsbz!USK%EZq}Gev*^UN|?H@yrss0L^ z>e|7ZCZc{tzMRz{DcKhF_I(X3N7MPc4zb9&4RK#KctG3!6Rg$szj4#a@LZ0ged_=P z-lx{+{J2&F&T4h9HmsgzLDjo#PQNQ)Gsv#Kev{PFfq2<eODQW$fG@s@p4u=D9al#` z@uFZ*o*Co2%Si<`Y7Eyo6I<AJv3TvpsScL&R8wzlT*k^i2n)V79?jklX0H-N^5&;t zqtnv#H10060L8bnB{eqG{@bJ8StSq%ypL+&NwXst7G9M|(BwI?(qD=|=nQ|ENLVT4 zMNk$lSPe+DXt`3nTX;nxL7Q9sCRT=3hI4-)$g_U0Kd!ylJtSQB13}vaYqkh_tltM$ z%`{^C9}goRtpW@A@<tdD73%T1(TUu+Fl;~rKO`SM_vHtDM^Z=T_D$a(hp^TBkHn1o z5f=4B%R7o43rvw?)wNe&`%C`bNkm;Uv}n`W3Si@ie)p&<38FvwSru&Tg%_y`+g~O1 z{8g8U_LGM`!L9I5T`%Oy+yo1{(RX#m(Sjcn2z#*6owF+f<Sso{a6gcQoTDxo#5Od5 zH+RC3j|B{5wMFSgWY;ug%E@f^-PV9)qTXfm^!)r?*Nn`O`u@&Z6ihRmxSfNq7y1?T z`tVpp{|u@-DPDy<?yd54*?bc%)TMs7uGEq|4PoKQb5q$h=t5rC_XoNCzw63;*(@=X z)rpcHProR7K7`y}O*ifh!8=PFXWWMJpGaz|NpGk&hqYf<GuN8wR7^u}qP1m<O)sl1 zJW3GO47X}0Y~(nit`;8APFTfp<gD612|D~mm|FPo?{`Yn{z=f`@64%%Z|?YK8|}6K zB<S!L7uSYA{{7DLwHbQ`xq5ktMx`|;G6+;SsCMq$4ObF)#9VkY|A_>hvDt&0d1w%P zbqJ-Eksz`w=~^>|3SUO=7hL-~4jz3zyy_gBn6%FIrT6{$u?_NByL9Zy;1V|IXePpd zp!*5R>LnzwsXlQ?j+25fcLvVv)}laI?Olc3ZzHfie>ZG2B@<bY)u3%~KOY(TH|{Rs zcu9qZx12`GM`?dS>+VJFs{1;^g8IZ7q&`}b!Ex=XibOjGyxC{dp>9qAgXhBi&jU!n zTz1M~kqzFjF5dGRccZ|9qj%Zj0EJ0p$1a**UcOp`!Gdht4maKk<iQ?)&{+A1N@79T zyTeA(lBf{4R6Kq8B|6kZd29FPlR@jpfywnh@jTHt&vd8h5m>n=sNaG{hBrHl1E%Ci z@GtbAGt0B*+>Q@o*l&l3L(X0oR5ablupp%y}cIE!uVbtZWD`#(^_@mpB&TMDGy zHs3o|J_3U3mnn$_BOqQ*lgj;pe?>lQ?Ke9)Fr)UxLgrs5U;%o1QJ2HmQV6qC41Q31 ziVSOy_$OCIlObj-fIt*+qO+jv^+H8Koh0bd^t#7?k@^=T9ri2C5kJ%mkn1Y>?ELd| zFn)A?nDJ5y>kbOZxbuM<%T#n(C3KAp7sf}(`yHuJ5Hjtz)sg}kx5VexxQ&5f4kWx3 zA;YL)EU`)`ga&>0WXJk1k{~|e)I6nQ1kBe-g+#>v2hpD{dj7DF4O{b2Y1`FfJlK^; z>$u?tb{3SN&eRDAq5w}QKi3IGJfKWqKbQVvoCR(7H4RT*N{7W83Iy!6$)Mh{b7n)< z2;9#nHgRxi;3plUQ@~u04VwwmI};yG_zN0uSl@ZliV9C7IoUh#6~xD>z_(7GRQSbt z^6PZo2(W9>9$a`zh6QNv`xoFu83E73_pVLgC+p{u%%N%gq+D>ct@67zzQ!HmpB7n^ zXir_#n}*0Ml6z}!)1grG#4h$T6bL+!uflvz0d4I4i&eEFa8><mqI?1cz7h_t+7e8M z^OI(&tJ+2&Bs0=i1K$yu8}_g%oC?pjRhHT-GhqQz?6k?)T{sB~j{N+ZtK=F6NHGrW zy|77|1Wu8gz;PD?B(G=ZYt)SVJ9`knTv@Ix+s1$oHjWI<&uo~UX6*aI$0Sgw2$?bO zn}#O}t5i$yw6=emz)AJAap-D|Dd>!u08X=!;CfvVOw*p0xfx%PnREx~_Wl}y8~X|| z_H7K<+asS<5IPC9j<<~+=o6s4A)@f%7!^L5&)9ho3D~z|%F=D^BqHqFQoZ@j^(jz# z^VmKE|HjC5x1{gkk&@J#ks-nC5m<}t?qvD1VZz7B?C%0;FgSXgSm{fK4Arveq`fqF zrgG<4^%p8+yH#BAQJsSA=U)nR;iHTEz@fy4L!1i`%i&D-k0Ij6(aV7S<fCiEahT}P zy1kh;0w+2Lp9q_e!vb`mG^pqJEh@wjF4x<}Qow?<P&apg4x+c>jJqAUG5MWqS4L79 zp#8<-ke=-fTuRccox4f`VS&}Yt&S70VRMeD_i8G1EIJi_?Gzuj-ZJneIrl%u)KO@i z5E1X)3(x~Q&lnE|4OH~D3@=Nd!=BIm#eu)(U;%nN`F+_d1{?OJ^(%4dOA<6#CJXNu znrA^jN85EQ@ZawiUVD7mauTaS9A9d`oh}`L$1iQKc)Xy2oN7@>o*fzBa_D_x`4k;? zhDxNkZs5RtUFDk&_K`qJ_lSqydIBb>RbF=vNMQIeo@94n66{M)dDlD9V1v1|(%pl+ z*zq@}Yj>G4A-K79R?V6T_62QWL3JY#KC^7Ir`;Hg8=SCS8BBtM&tm%hH!)yC@y|z! zpBH1gF6C{X@j+lHL5X-}eirYP1}QK5Y4||wIK1Y<iYb^FG~{ljQb9L+(1XW;3;U2P zQGcbG2Ar$d+lvpeVe2~&7#rWAz(q=uZ1CP$7SwQi+ST<wodp$C9_HPb!-T#q*WPW$ zovDZyi|5ykLi{<C<r2n|@bVk+@LWjc2n$N)ykAGx;lk1bgXXO!*jdoD_;W`6%Q-M7 zv~+8K9|6~IKpp=|WkLGX^_LD>PQjJRXEslcjRE(MPh(naqaf-d;TWn$1~1LZDK`!h z=tt3Cy&s)`1*e0U;r7a9d>-xuJ95_v(V(s^rS@>aJp62@xN_mc%0`)@@EM-}Ag{=G zb6d5hp+fXta$D;x9LRJoe2;gl9|OuVf|B^ULiq`=1(^gJx0q?o-=2fAD2KGXpX^x2 zA7`GTz42Er6-HEfI$BfMFe$0LPkff=@Uu4JaKrRz{H*=+9sSN%5My@RXX+bG0#VCq z?tUHt+gMHPnu{cXnb*dyRvi*>9u;0!szC=%4z4Yp*7(oy*OxzZjX+0|w76~p30}&U zD+FBN!)EIqdSM&z2`o*&{O&d~@OmnoD6k>Jgw^16(f0%_9)<clT%f^E!4tPH-y>kl zn&jABFX5xZ0<@yrFwae%0XkyQV@lC<sQ+-;ZN=76a1tXeajqf*&ux9DT{p(zTZp|! z>2?yl-ujFv6h#8f{dyXS#Z)-t=x)TcBw$5i0=63XFtq@Y-MH`U#Yde5=L4f=vkx}% z$05=|I`Is%*k=~1=C6c)P^H0|Q(MVvK2F1ibkp<O@y`2X+$Vy&a|A-=HD5%%robDO zr73aTQ$SIYmv(waXF-u(4_tYZr(pN(n#1MzslLxC_P}J$0z`+yj*A^Tjb=gZsD}7k zEh^ZEDDK-rv?5^6@%PON@H1fn`bN66N5YK`yRyiQlC3m2EU}WQ{fGwGC!#{Y0|K`0 zbxD}@6DDLMm7tszWOytn{Gqu4-!Xx!Zvv}kSx}mV$<cy@KM?LboGd#TRE*C*-eGR{ zO31*58rq2DSt>*x?RYAwP6g8DLBaj_p}KwJ(p#=vZY*i*uN=MWbl5^`!sz(8w*YNR zYsy)l^Iwa+iFSw9<7w94Ey5uli`a8sIP~d5P{M6C{2a=-d{B3W1htHjlMankn79+c zCzt=*A^u;Xx`AjxIaLxYK=r{puhW(=!01Q(;!-@I^<2lDX^yW@2)8cSTwRG@!QI0r z(t^M5xAe96qR9~!H1(jsbq@au_g1=MDy3XldD`f8jT=-LF7P@hf06`s1H^wJm-956 z%J<yZ`?R|jqZ3rHlfCIAFGhiLE4g%E_XuE~#Z9Su`{^(}c)#wf2Mw-xO+I}0V+5{A z-L;p-BVjc<*IUhf6j-JeQom={93&B>?iYwtVYjSr+EGO+s2nJEx&4C%J4Mdl@Ow+Z zT(Z}nSWm%&BjVV%cK>J+3leQAE-td5u^{T9=~Fg%=svBW@M0+r3IC{Y>6yeYX~;NC zDhP363($V+@L$ih@JU^wLs$Us4L3|Woy)~}v38!i)0>9L5Z{<%c36o5K_UmrD(l6u z1xHHo!0pU{Rf{o0#YDr&^CXyZ;jfFqzq@}&hY`w)qS5_i$VC;5h&3b_PmqYR>K%a{ zt{r+0_R-)K-8|up4*@ecr|h*uh7P8W&$54hM1s_9hbMCI-k!0dwNLpz11`S3;WLNF z*Ds%rIhW#tU8T#6`R$Ss2u|S~lfe5*`38=w?X*#F^yxO}cO${jI>w&pt`Q=<JKFAM zFhYYTOP%DuE+=5xtvrJ11P0VkOw*?EPFb+C@aBqpbkGnTUVdYC6uP!OxI!&pKqcGc zuJcPMklSJ+MpCA*pjD;QBEIwZ7jW?NCILLR(PQ{!69u2LT~_FDG1AF!;-+1OQ30Ng zc6;hdmc(O+QKxrVq^%^Nde#elO2%9Cd_3`-1(gN)-=9AO6*Ly)XH<3Sv?3YIt8Tps zyEp+HZ$3-xNympRFM94o*$BKyK2R(yO9rvYn1Lna8IVopH4Ic6haUdq&$+;WkHlFC ze}O58`NrJ0jffAlsfT#E4<vA60^X<0`o-zsY@FSYzMcxv=MUtx>-`5w9<4E}Q)B|u zv+2VNJj(34vcILkjs)6+{pZLT6Ch!9K7T-(3Y+F`Mc7QSVH0SPUi}qzY|+Kqh)qWS z^tC`y{}uCKpr6NS>rV&qeWA`o*Uuz~d3VXgQIG^O8+V#2mrue1)bjjHjsQN8l7bGd z@8qLES2lC|qKFCLQsXbswx;|A&8!PQpuik~H($=m`QkH;pu&aCE~lvgJx#mIoc?xh zd&?5fEW^)r_2wk|z@icOx-@I41Rhjq9^;z4Mw|d=^ADSe({$i7^?!ZFVG2af<m9xq zb7RW>Ph1!Ak)T?)P{+V$8Vsy`Jjy+&P&=}A>qq>^Jhk(^`_h@pYS4gtM&8-6F(BG} zDN@1XQCFR5*|e4s;7%lZ*~Oolfby?bqDQXKVLUYYNBYDB?0fg9!lRVuFDOPYsPHl# z)aY|cy?uZW=tkzwJCARpLX;)%cI|ysxcms%%6SMF|DJ=IoA8tFydck-uTfO!O>Vtc zImv|4HJn_&_<bK`-RA5DH<+-87?+tD)y~F(Do4(1ZIQ!2P+PxssD%L&3SM8c@c>rx z12fA;oCeAp0~KH5Etg6$ilrnm;IhmrpIN-Z2etBhT#w;1!H8dr{udg4sa<9N8KF@a z=-;`gND_zsIM(!I$J6ogGEkdKY0Xi*p3-{?cd7U)k}u9t$#$9s+ctc^>X^p(Gdfse z(rhk2W*~G=b@C^RDZnqkRNN~Vg^IOmJw^pgnA@v<)8i}^xH?s3X|Z(34GVP2SVVyv z?lu~ETnu=m<9J+kY8;-gSt+Mp&4ICpoA^Izrh;=^f#<<>)6k<E+AMsP2}Y;w<<)IC zu}R}xE&+VW_*`-?&Hc_O5q>&03WkkPSkQRSHrxE<Q4sV^>*nt!Llx<0E4dZFlulc` za@E|#U(ma?$Ey9LC*gR?NlPhwh4H`8qD|Y{=vVLsLtKJFV+ekG%AW@P>kvobpfS_* zR3Z)dO}Z6tIgsJN5pJ!uYuK^lF}xO;^5a0u^6?GT9R==d)V8I@RLBYL%p1Vx1#SNq zv6u43Kt5SKGuD<3ySZfQN*O*g((_A?KODekOrwhB6j3UCbo1l6$Uy;(v5Uu+PgB6# zK0bI_{f|S$Au3lTPi6W93tHb_7JKp|3G5BrOW)$1jcfa*9&!2%_}B4Ies!D$`cH{o zpKDZDa!_+t_wo$reRhktc`?O;_{W7>W$`|6WXfz!(^@iYRY|cphC6m~H{H(#&cWhE z1s5l0@p>mVsu9)X@m~J)u3PPP{5$>wX%w$e5L0Exu62BVc~6D{(b->rsV(8cf|d3^ zjygNXg4`~oPY&Yo<J}KUw`vUNuvf7~`-vkPrlIQIq0X3uISY{wqhoj&mnVZYET+Jx z6J5Ds_|zV&L_L!yM!;}~_!|n})qXV|pNbct8Rh(LHBmM!l3jt<!=DUEJZpyY`bOZ< zLr7Ncrh!{94@K0I4SO$=c3@HE7z_Gv;`)871LM%RV&|&Ybrcp<sdyKeix9BWbqSy6 z)=}V240HN;+#+m7nfNa>9p@-05%C`ssi*B$b)Es1N$dQS9Y*2MeA*QPHVGfh4|7<v zli^tH;ho=;CZS}K&((S_e!<G@l0^4)21H){_OK&^53|{{bAQSf3KUyZDqyj*FqQMm z&`+2I#*rp1)2s04$*wqN3m&Ca5cP`qEx(RIYHws&$JtSsAjsX*3Y`I3uCSA?9zNH< z?^;<Lk1zhT$AjAj|Aww=KQ@u^Cc#Apr|-|R>{!l5U#XpV#RgHQ$Mmc56~q;fJFjP` zz_Ci?Grv0%6nY|~_JrV9)ARUZje@BlMJhVU{$>xJJ9>TjNuwMMK3;Dx=AB{w86Ao) zX~dTbQ(@)#w@X*n;ZyU=nnzOsTo{k6;5E`F8fbjkv`nIO67ELt<0!*d1dlt4GEx^a zVK!l2GWHA)w(?zAw4fvf@=`YJ_@}+>zpO7mljgyKyNa&V;-jm>yTgt=#A#5B5LC;1 zHv7L05sRiwKrudFq)Q*IbgY~Q+y08d!ekE2F?Yk!eJV37X!A$fYY#RWjQ3S9-GMI^ z<F_g9A-&<ozMLRyh~sIL1<3gR1|fc(F<9EZzHZx_F&I#CCYQ*~!`m-`cOK4@SWcE$ zSb=XgzGqr#(VZ!hqb!J{!!2bBkGB&VOrPc9E!Yug;x)E$3R(?B%6su-;JfY1X+`fQ z;DD#gEAKnAEQr18g~tiJ*E7h{wD&wDC<)kKq5NtZ{)MKY{5ub23qH)b{-E_<+suRE ztH+ZeM1DLm(R5R#`Tqy0rBEM#*-m3Yo79)>yoBFy!&O@;Q5eaNEkJduQSUXU@Jx+d z!8*~rQ5Lj|ed!yAD>Qf@pMToy2s`#ow<gEUodgd@bQkyIQKq)sxOz4|!4aO;A0i&g z$HzPC_I;)=DbONp@~$Oz95%g-GMf!%#|mSz)j9AKO*(TB%eqTpL7x1=<_-AFmsZAB zR{NX`mu*k+r14BchWNURA1CnM@3iK=0N$XSk5@3s?n#IW>1Vp!!WV<r+NNl)$t<V! z+&f~_WHbjBW6t;FEk2{U`1Lt|z^CFbj>$KTKaPWsLq<}CJ_B5qo898XQ{vX-(4-aP zf>=#!_x*oHlVjNqkNNSwA-!oyt9TLzrY~8s<7*%Z%G{1}a4;DV!qxG<>?sLGj=sLG zE+mE}oVVrJfQO66<9+yN@$Hzqh`BEsSB`^rz<{HXG8^{)f;uZ!ygHgqf)8S8FXHtH zn5v}84o*)J#G2i^8gUz+2_Bj}dRjFCJt8KVTD1g>*Qz7u+&g@c_crXx5g!t`ul>Gx zN^}(JFKkzEIK|I$Dv8AzmB+&7fiHy5^+6t<F=ji9WvnB?{>by6M&yOD5BmEgSK$?J zU3v0H51#0K++o*fj)!x?UuHymH&4O>v}%#&#B)3hEY^|xbr$dB;GEcGiLbc|17b79 z@$6>hABWd7HR5a?6}Vs6q@2{oV~6iiwqc}P0j%DEl-82UfJ60f2AO{3Kcj<&y;DNg zohh(7XTMu0Wd<rgVU<@LNWeeHdD#%}?QW-J4qx*oV7m=1BhMO8VeQt|k$>Lz)?3tI zVn~7}M#*RX;Stz&+Fr-u&K%rw{Jf?OkEtY1xJ@~h(m`rb;aNBQp0gFv^OASv@uXo! zg|}GLBp7}4KjXF@zh+T?<9o`C3yB386=?GL<3U>5r3l_^Jom;XapNi1HWIw85#ma& zz*AWQ=RGR%rA|u>r?{ssepyu`UvOC)^DoGv|HnAv5+|k;O_A(bIt5etp2z>mQ?J{| zUnY8w1M_6xZ(5d39D&P;mYIw3b9e#zAYhx|H~1fPe_6VA@@@RG>J__<#-Hh+s<C^$ ze>NH7a-1JE^i4wZdJE?a20O;{>Cw+xH44PDS%sM4r}_dEXE^Amj)%<}a}Tdf9>#}r zm5&ocn)nsHXY_Z~#Gn5`JU=$8ncB_4d66DtCALXOUL$s5>o?|K5bwE`belOUoO(EB z(-n)~&R3bPHN>2OG>Q6^nH$DIE!TW@P6NNV68Md0Nel^c)>Ubn;EUgdBUig)0O=Cw zaMnxJjJTS@jujp9<MeJ|LhO3;FzHG<t3_`894{$&!dz_|ce6|Re~^kMHlc{Os5fc3 zlVu;CSpNg9JwYxxcaH*xDYplw7fr&w{?u17_yy^k7r8&BKN<s}jy?%`DjuV3yAhK8 zmJA*1-V-BsxrktHO2O4B`1RU!X&v2PRt#8s?|tNe907}{^1j(m9s!=BPT#Q=cy6gF zTr2w*8Jrd9O{PbvaOXL#_eSVE3*tK<`N%hh2A}o9M?>+<G;Q(rxSO%0f1uya#n#Nl zHRB^7=g)4W(>4PU$B4(f#qi~PBK=v0KK`A_<(#oxfhYGmvZP7xcTj*maf73`Jf3lR zsRAZxqcDEki`NTJ?5@6Fe(Kfa90<pRMDD}0lhOK%Z^+=`-U6f+q&hsdhr)tF)wY>0 zKSKr6rZ>@#c9TKIeBeRQ`EeK`+MU{Zn?4SeFNqC{Jjw8x{R#U9V-9Qqk~I%HW#Pbw zoxYTEXW$baFD_A)bH7P~`}V_1nZs;YOX8%;dOS|--1YO!C$0(5pGj%FgP-O3Z)Ub$ zz_XkSP=|HZ;(iVWT-)&4T>BCO+OB_5ES2ZLq;^#%s68Q3VF9A26_kY*{}~-jygWpo zn0%muLe#!>4%TDPa^d?8br~9n3~jkI`G^YFj0@9k@EiGR{2L``2S{Lg!gf-<Q4kv` z^*Z+j59GBhQ<s$$i~hbk-91-q%fxS9&){xou=S#{>WaBPKSymCfumvOlB@CD25HwV zPl;py)s=lEKJ1kg?f<CjXRl*d(q}vi@TV^F(}WDa^E8OpYepOKe8y<pbnP+xs@UR? zyNfR`!_BKVQzO5LVIiM-nHj6;|3_VsLD%&>g#WASs0P{j5uQ7FyY$6$AAa&3P%)9P zE}DS6uY`RfBlrcig1GFByiEAN)%EH`ss-T<zCK7^7R|kf3gR>F+ne#WC1^ZZ{%(i_ zzH_Gz963M9s*8@XX$EbYX4Q3QpU&dv)ndPo*AxD*@sPy~xUbM)@+O@DwX5zLU&8aA zW1S{ZzIa$D87gH^<24SaU(}`WsgS@(RnJN!i;dMrKAVDNc?X34kGhueq%W$9Bw*7` zCtdsS%bd3N+#k*3J^54s^@=~9>`muBFTil8{Z*IwW^q|5{Eps#?hL4vc(QoMZhV{a z!MFrtyp!J0?Wn-}&|69Ka8Ep&=oR7fs@|RgeSZ44lK7^9y6)Sw-UtWQ=H8%qd=~{6 zr={u0n*6)2p7AxuqVTg#&GfU^D-Jp|;g1iv;jww7yWD|`Z6wIsxA>7RemXDIwRxU< z&GK;$%=qXFn>Y9z_EI;nDCZmFcU`{S*Zi)v;e!PKVbvs428?mX{wToLYJ-_UJyR#i zP;u~kfH}UBS*XjX+g$kcFAhxCwovt60*zJI?>htVN7PIR867?xQYjpnzUu!zz>|ro z|N8(>=BWC=5AbBFX#D#CPv!}Ye;?q<4AA)Z0iMhPjej5D$(+#m_W>T_djZD))sSM8 zX{}m*F|Z9R_O_h;s#}esU&n>N9DNNPvfL&1!4&Yn<)QC@-(}qMhIg-Vb}xGSO)-Xi zu@21@Zg`pUqaImzGHk`)bb^}Nt=;F72?i-P2aoeOP(f_lR(~a~N%Z!|Cuh;JMr50L z^k=x+07NV95?O2WmWUMD+J+|1#6jXJW&y#s8a$I+Gw&pIvLIh2?;Q_xDKK);uHihH zhTm_yVX0sJ57@%)VC}9vjiRlgs1?s`X(~0JKAFX4@I^bSRZ935D&aDaAl(@T{aM3H z8CqYFibvy9u@MZ(&DH2f$2|kiMT;&6?<P`UZ;MwDc7={yoE&G`wOb)JU21wWp7hcU z*zb0V+yxTXHxE!(PW=U0aiq-Y7rllBh?`+gT=P5^iB8#Ub>eTw!@nbL!a6<3xc|-V zN!czqoIql`cBdb49@^PlCs~d9$j=(MiIVuO5~ugbUmL~OR_h-Mgz7Q=f;@gw+w;t> z!~N4&ErHksD?Lm%46^65Al}&cEwiz`=$_Ff#jR2uNGi9RWIURWLdRaU#L!C-)|jBh z<@OXT9z54|x1+<88qrtJOZt%1y9-B&7edIaL-)p*{biL{H2PoYUEb3dHD~dwz&d7a zwm$}u;wwk*rB^!<+vP7jL&m8v8kWsrjz)ovR-hf)83)t)ZxqUGra<WH)37A#TC}&9 zE%FYti{)5-59lt;`U2K^1frpVW(yqNA@FIlT`^jKW-3!Ej>xv4_o+IcT#9KZc`v~- z)~gV({jV`U%`r&!n;Da7^+W4F_Y5nFPr*I8^ma3kPL!u^dOz_;1=x)oZMaCELZkcM z>7NL}{(*iwOFNXq&yE+d9HAe?52xtqy)0-h{KCT*7Yl)Vc)fg|(kyfs^BcYqO=m$8 z^R~^Z8Z<<%=E|_#QUx1ROCO&#oI<+EW-GMH>Og2u=*`sJR=Ae(u7H1e29mN3ls^*m z0|Ylc;>Z}SL6=v%3(1|Np`o?EMB3bcLLrgIxlj5P8@2#h&*!)Y4om>=X7)36U*}NP zj|41TqzX>defdbcJB0>&clb>(8bMPg$iUsP8w4c8Zt0sxqcYOlfYHz*7PK^e_U5(% zCYo4WcU3xo3I+-juAIC-fL(b{n7UCfT5yiMqXiHRD1So%!Gy3-`84=d{!B6GGZhpq z2!zS6FHpdgshG7uD6sWCv?1KfN5sf!mGOtONaDel*b*8A0>&3bJPC{aCz4N=C8l<! zme$wPVf5|H+o&@HjPWZi%4Jg@3~1=?EtX|K)hW+WG5%Dv^^(?s`Ez5)y~0LT9}k>Y zFs~(kel~?R=dzbX@^?bXxuZ&jPNNX*q8(|nJPGAc2E4zrPqCg6bNR-YYwQ_dIZQR5 z4BOcbB3Lyqch>sQ0@x2r+i3M1Sb!dyIZbaXo@7CqCt3+<<6ZFlN4a{M{v-rY)QPFP zUn4QXNug=KaTe6nZg5A=Vu%Hq91D!gV6?!G66^i_&<Jc6(vCWz=TUNrJa$^0IF2rS zAyk!zj>D@{_s*&_xeV;(D$WInb+8~cx5IYoA=NBMAl-9qrN$iUQk#CaXtD=pB4RJ> ztl+{DQs){<SK@0N_2+7$M@m`Hqi&rs?~hD$#y<S;<e5q6a`v7(bAj_;hloQ1ju~(K z?%=m<_}oY~Vw9s?hh?{?WG7((!uE*ouQ?upZdUwEUL;Mx=C5#=XFC4}@tep_+8K?a z{}<Fjq#)nUYL*kK?6)MpqXX$DZQvko*W||*ASsJXrb=%iEI`z#;LtIpG6=djZr+iC zfikcB$g+E*$a|Obu5Q&)^zm2>Q$b~l)gq2dCdXGj>SRGnt++SazV1f19D}7&eHLNC z`)|m6vZA5|XYZYQqFov`0hr!T{gW{-Q9-8Jw?nIcK&kmh1v7pI!d(0(TQ!(0XvNyJ z<Lnwd1}>Ku?c2{;3%!wR_Q&BV=p?&YHTAVU$ms56yLIo!;C~?lt*`ERZ4p4Pn4!j* z_Td-PXIDg26hPcLVhL^BkA_Zpp4P4YKxIK54St;Y{u~Ap>GeMhldIs!je)l>rG~&l zV7wyjDj5mHezy>BoPcIkMLQ8$8Y;*yvz*s!0u_-B5l1p}VDiw-{SId1U>nM@^2Y7Y z(DC4oNkAtVd8-inatTbd+VS~RNaP$`BW5-p8Q#o9$x{XyF;b0C7x}|=pr#kfQnf$s zYbT?yQ~ZpjeKd%3T+UH(j?F-F;6rNp`d_ed-;t^Mgk118>lLgyKMQ7Bu|fr2sVwM1 zvxABA$UHiGVzxcP1HU8V?TA-F4FhGbm1=V@XoNjU@gu8=13+Y#j^ZCOA|p}n_#4h2 z@Nqz2S?Orm9C~Omh6!$~hsLf>S!<gSv;YOxC5ZUC!~xU4*2(fR9hD@S?@CmqAk&{G zUw3j4Fo_+mDm^=?D7ww1%ObT0DKH-&Tq=g=|Nb~5B`dXCj<OsgDzHCx);F{Ucw7?` zQD`p<;_bWgIHl+<gtXla4w`TI3p#e9qw>*g7t+hkUF@RRgXHwRu8tP8fv#B9DyO3z zXhp%`!-#4obQZgBR0*Fz6R$}J4Z^bFfRcZ)xN-X*2Y>kHnCtk>D4{p7RRo(bA@w0a z-gQehc~Md9rR!BzI(*pBEvYq|M*Gmr&7Gg#7xf~60-j{o$Qt;$z3i|}Z8r*NDQi5q zxf)LJ@Hr4FCXnXQ4vOR_0Jo{7iT97-58D0tijvzD%-s~9Lz<GijEqk%x_CG$wTgI> z&VuY$FE(HnHK54Xw`=TO$w<FY=gv0;d>{$ine;B%5_OpLA>-&&v;e6w4_7T;TZ%f= zH++_l{ERH$>?(EGjo;?;eeZUOU0q=P&@$eNvj^S$Xp&<v(1yCZj%PKr@nT5jw&X#f z3Zz}GE=`2xbw~hllH;Bf!NwQI^x3=h(X~^%9OD&!vLNZN{LA>&8(EN<bHQn!Pa`nD z?r@dybU!pHXKq_0)P)k;KL}fjcd($vagW30dGipT)?(+Nnx7~s>vQad<a{9elWTt2 z)}z{^<wS0mE7dH>w^QhNIadKHd9<2uvLXgOsud3L(;S8<L38ur-JM|k;L&X--dSYw z!nc9Dqmc#GiiF<lwQELg&MQ+*IO~u>iNrl~zGN_2N}kQ`u0vL%0=fQ&N>H#`(8`Fh zY1DE~Kc!-ICF-anDs*OQyg}n%+dc`Fk>OgVE^52e!h#H9(hdd6=fT3EdziF!snMfW z7Bp?WV)eM%2Vf4KsqnMtKu@S0xfL;uXlS$e$4iYI2DOn6OBJU+qu7H%>Do30DA{O* z(aePme1WZt3Xk@{5~4I+PAz8~vGMI_ba2gOK{ww{?RjcCfG!1^1|91Cg&MW**?ky^ zhFbRBPuIU6K?WL*T;ezU(cWE4eGHPPP_E>Knz&_&NR!VzdrIX!@({V?SX=c1@dhSr zu#~BQ_d+@KHZNz8R+xIQKk8sP#IDsF*9*FiAtTYczJ>}CTBclU^<qsq%9N(J?QEo? zds*SqHCgHKzmWUdx9@dQexi;@|Ag0RQ9upWJo8hp43;fd&wQUSff%h3NvmpGSWs26 z<jcD}lW3^b>@>E9fqY_ahjrg05s?i&;oZZgArzgJf6>9T4tdsVtMh5iqf0M}OpflT zL832g#tn})q9qDJ$;XyfqcwKZXKHt}!r^B9y%+EYa5KekTfaP=ix$431!%J8?!=%E za{*#Gd%1LaBtH(J-6k_?o&Cf)WTn~GyLEE`)EbnE=V&#dnC{8ZjbGA{lW$M-_OJ%X zEOXD<d43RK5$j*CT^<cPih8|<E>A$;jvZDf1xL{W6r!v3^ONZyVrPi*oDQWS4+8}Y zIh%|>&>T{|<eY8#WC$#GS(+ye4gBj6aj5c`(1su1hoA^ExN_6FAN`tlyjaZNh5ldA zH`rILGC7QjwG>-ycGJ-^j&dG;_yqs9=s&2^W9PoDz7y!7c8Sa_GKP!?rEAW89EP;? zH#(98e29+SS4iyFZbiXO$7`733@B^7(nrvvvsxtDwQRKcZZGn=9Xzsj$taRbnpOY0 zI++C-yz?=&FVBMos7Gg!<LrHWQenOjPQBL4g8b7H?-@0={N?b!q!6EaM)V@HG)Bt~ z-!$}4(SlBspF-CtQxPeGBdkNG%igS@n3TbSItG>qsp!{$QQ)FO<M{J<&U|ih^jv%r zvent9d2tl&`z)+3pT~iT9_vk35uu?wJN672uk1m0=fhWXUdTn8_HJ+C(U?YrF(S=5 zWEqJCnYk=sx8O{Lb-O}%OYi_B-j?m+(bOLB9(yf#D6AWNzn{veb!Q-bd*7{JK994Y z)#B_)IWzs}g>8M<bB`g!7OuQ+m5KwBn7BQEWMUlYbU$8UnAMGJWr>fcS4^W&`&+Xs z5BH&U#Q%XlXmzb&boWAZmvf{}@u$C_`q}hCsZTvfpr~QYw|Ep)=;WW?h(9sfXldA7 zT|9?gGBpD}xOO7Ns}^qRQj;h#4o$3G)rJ1IL7y^yY6kdGfGF)@E}D??9vyQ?XyeD9 zQQdoxGB|?YS8RG;gUQb9L7(}|gtu)OMWLCd*-Lie5B@dycsFXyu%IH3#8<_c6DVyu zY^L<n{|}Nea#j7>3imSkvCh>@7_c2Ct!{}!{aehp&^(xk7{)wtzIcuZJ>-natC}rn z@2l(<6>laolQDZ(t=-9jItq|MS@bVtR5AQIKb4I9jnt2DWe+05o;hx#eg-;w$$MBc zsfPvab$Yy{*)0#QNrsBHH_%a+lj-^jK{l*HCTlDdRiU-*-p?-K@qpF+D(TWx{0|mH z-R7LTxn~ruDvno>!vBzf?t8<$_h0d|zK^p1w&73Y8SNN2vxR})UUSx$S=|d0$GS4M zlP6)>ZcU{M>n3Om8YcJk;LqK;FMBMzbpWh|f69DWSB)&{_I)gH9z|2-orl*l+ELZP za;H@}Q-~7g(($CF0&QV((Y6z#8_<dsc5#_;O^A1nIJvvJ1{R>*ueVh?OHD$CVgPfi zY76vUp`6fC?m(PIwP9&r`oQJL{IURN4Arh_%`$gkqPlO|%Q9>ksDw7N<4oxkGSgjS z+JG-{KQ9ssX<yooocHN&oc)=MHY&>U^1IZ)m(<Eu;?J{VU``U$KA=N~n5o@qEiywa zNVemUV6#F$XvT)_kWx;>1BtVa{3{r!V>hk%dc_D5nk3L8wMOv=?ANZeQ7Q&a@4ewa zRLLmX#E|RIlDDvWG0MvlZ-miE^VJRR<1A;zOm^<}`hG}RxrKOflQILj9B@Bk6ij15 ze!8kN2V?q>LZv^aWyTm<G3g(+qJe_eJibxjuqO|E&*-r+zBHnMi_$B{JR?A=WL9$t zY5^rB{Elz^32?h%jXgV&4@YhdsDE(jh01UCMTxtnP}}~j9k*KOVDPS#*Zgn}_{S5? zZOq=$QU25s89w(hB<gBmw;mfn<mV+z_cxaT=N*@ntB2ZAV)y$Eah}Z}XXjve)*>A( zKoZ57&%<4cKmaT~?yUOBf_zL}WHgERUG{1`=HJisp_l?%;i`vYh{-o_zzIKs3(jJq zXwMe|dI3DYzWS>;|0pU-t5Td@oe2R)X2o-pYvEojZLsLZFiemwI{m9!q0Bz7^Yyw~ zbU<!v#r9R>NLM}S&hXNH@V4X#<kTBP{q5%;+u*4(WkYm`XJ`zOOqQ~7KCVUvli!Pm zT7yygEv?FDY)qCzym^SYX3wf>NX*z-v*<h(3S%#Iyc=r;gOvHGpoSmtsrTxelCumn zwd#v2akwAYQni|WJG{}dq~NgS%?xDpoc<&3%@k^QQ&@E|br2PdtjX&wFF-o**zSN> zA8Ks8wR`QmXtdyLY@AgIZ>GSKiEiISs}>?08NR3O6qyZsnmBsfZ_to&+<kp7nPKo< z<#bwgERh9yA8vhf)N2x%1_ow*+c$wH>`7%ymNkO)PToD={Hb`%r*(|$Pz@40_rR{1 zy&8_5s%XjjG60_QB<?#M&7cxSpWiC*3vu(>nhLa0&;{EP8F>%l5DfH8?0s&P1{rIN z?3Btz(ZEw)GqoENEJ)hi_Jx)c1K30h{pr1psAy&i`#jhQIXB#H$u=~zpaAmmc8ib? zAeBf7Tu!M$RUx~UhxCxqMgcq5P{|e;Q$(*7BD&DI!<(<Gz8OPl`?pkJ#JEYsOeRJj z5uQQ^{dEr~`AmSvY=Pl&|F5tBd6o#fSYNJVLEM#ILOFpQ;Jt&<*S@g{X+)n-XfGwB zY}x3ouP>B>s6(FW>*Q7z)co?HI)ONbl40awiQ*W`VLQR8OpH(QMAFgC?~*q3!1g0^ zE)iSnK<Ou;uho4BysswmWIY^&GL0qfO-gv$v+Sn*<zIs=$Sv6@^VNLwUr@H%hP66^ zL+G^U9?A3gEzm{*PxaXNnh^Ddgq^)}7rxF&$h$k=0RDW(h`L!jhvC&n_F_dvIt%)y zZv4H|pbzzkXAw-d{sbiEdFV?dl?6$CYjd0_AI1Md#QzC(>^lGPojrye^^BFw2AaV2 zF&pPw<x+@>t7_h#LWN_a8c#i+v;yJf*6p{Q$58DNqV9d`j5-+Ow;En=RshM99mlh- zlTc}oWy-?`{m4BdEXQrff6)4ACimv|G$^K78$Y3!p`ebUl_G1Jz-qDh<1vQ{I93q9 zJAQi=sAS1)T29LcwF$lokL}~g_N%E|#W(z!%8%|JT*(;lhAqW-Qt&@vK}?l9TsSt4 zUSH~hj*p}NA6<9iPvzS60h|(2GDI{PBB@lOB*~H_38_p;qNGVBMG@V`NHT>aMW!Um zJm=cxnQflg>}{UsnfE@=$?o%<^FHSfIN#58Yv03lt@T^*U9mPkex(l*o|@2c6Y%33 zi)P-l>LnnR>%{$8um^eFDY4V(EJBm^Ml6qlD<RK;@72XE6-b(*@TgE?8vMSJgk<Ch z=%7=Ipwf;U7#yc5e<M8xC)R%zxg4`Zb!^xIAGZ3o112A3<i62;oC@iej+Jl0H>GsA z3_B-Y6`)AsvAUoN62yEt9AdCAh`zZN8Zf#~gY2-;fP{T2tU}W~=DYW<9j8KvFKZmz zVKxaJ^a}E(jRR03aENJamVzRLQ(4&x@CNR`|BH`+Z@ifBF<qbuEv07u#7O2S-#HqG z>b{<?)pg56k8Ax-9^vi<zGK1nh;>UaTD)?M)pit^c6NB|k*xn$<j)bQPv3Jq@N-UE zqvHyJ#Yi>Czo0R<2YAL?_H|lxphJV7UCKVMk&W16GheVV6hnhY5?_XA;LZ4GIfngJ zFO2Xjm_H&cf$FbCZ*}4XsFZHn_T<<f=+cQda3XsYZp1UGt8ZUG>ZxyemTW4}w$q<1 z>W+@V#EUp<+k^NP-ORlCqn<UgvjJ7j8aK01T;&aR#)H{Z$E3!b^rIJ>qC$iuep(uf zS7<fF$U)2Rqp!jc2=Y{J+Ih4Ott3cilq^+Ip&;hxO)ez7dHOd*D*qw6?qEI26(_Ik z?IxlECazhUgF~=;JtMRH{LKIFV0c>6j(0PXyNyTTd02~XDPBNV`)V{^hD<~sTh%@5 zPECXK7rVp#0p0(Crgw_ID5Q)cImK7KrzS_KQ1J^g#)$932i@T~;w||Ig{Ipd-*lPo zUrtS-@iy$usRmeuXw1*@&k5ayd(pdZeF&U`-d*M4aYrkWOPx3}B;hxy-;n;icHD|u zA7}}eSr@Y4ZOLJ3Io}&QL8~oTh3CjJs=lJZ19%SA>VmqDNw6Pv>IIFK>2seXW<d02 z_2#4AKhQ>beyqpd3BN7!866X(YeN=tnzwG{P*98xGRPE32F1PC!rM1?Q=urmx`(=v zJzyNoO*oA2|E@w;hn`3!<NfXbgjzTR*M+rK{ssM)qhF}#lP#MLF*?}akg@aKk_%7j zp)ox9+!1m+co4>ipB<|}tI+X#MwVVGiy*7zR@1c)FP8B!SGFr1qps-A;<uxj25l&D zWm~2j^DK0Rv^?0t--U!}dGy_wTcMN1E~c+B8M2zU6?fUy!IidW6Zdm^z!tNKKIV>R zW`sOz>0;y|p;c&@`wO!^ULiQDdj}eoW09TVwn5YUQTQjc=0pNK`O$=wZL)US9BTl| z+YYDDSIKA<S~U3P@bqdE9Cf|N`Yo*r_3pK7?yqY>v?rQsg*z4i8~!ZgP7^wbM9ZE< z*-w5(S`!reJsM+Rb>C=|ueJt}k~`^O#~eK5ZkBD4Yeb51cO+x_$asUoK#8kiGJ0~Z zduZYep2zYVT5y*x%WCOBYK2OBB}D6x)pw=q-wx5q%4vqzelJ@2r-OmR<%UNxLp7)- zP=C)M+Ii@Wdbvd@x*SbwGz(}S>q5_KYm|<Sex*XJXB4ioogzW*{Ii$omP8ck?R`|q z;Sc2NJHljFJA;g~gLm@CS0N7}<+fxz3263V^KnaqTB>tyjxO6^0Bb=y#vSTLc=gRC z6&(vNfmkXeP_e!Ezyb*dZ;KJUd22ySg=~q{S0j!*i#<#GmLOrc7KxrGBi#z(>w3m& z_<(V)T#=83T~7<9Y49$j)dlIZY>P1y{|+bPJ-=9KFCf>E;E_eI=D!^bzjTW0jCJf~ zDA3Ex&FfU0g;+CR=KEV^gV*>@+3lSxP+}cdnK;;r2EDJ}J7$3=%J76Z*(bz<{AI<x z&4gYmw5@5=`cFE|@VVWeMKNp%WtuqdQY5ycxS85V6zM?-;bu1ONNxs_MUyN4&T7ag zV?B>$pKGK-uCDZ=F6)}m5r$rC?U5cRWRczwgOx&6+*~g|EF+Vz2A9vx&cUgD&p1dg zNicWuy$B^4PXqf6&0nW`6+{|=dHIxA*VFJ_lx;pQODWB;ap*&PWlAB{k)>BpwT!Pq zT9Sb6)nM#{(C}v}&UcHckYGuY*NgmlSeN=u(M)I&EQQ&>ePEeHT6gi>*lQ%j8Rguw z=T<*(i|!DbFe`$z>9d`kyNh67gs_&<L;)NbD{(%UJqBtV7dIb1-Hd2n$B5WYbyJ-U zHPfbcEo%sZCD`APJYzg@-ggC<WP_gieV;;-nyKr_+dEMq1MPa98GO^h?N(A*b`@gP zZd<v(z6~~vOw6l`SAiLC%a%7QW6<%ua#7Z`5ydPSKIF9eiB=c13Ux7=y!H7x2=2jr zd%kqh$+AAKOUM>oL5!Fh{{rpn66Df!q0IWnC|tTrxu)}@2z^%F&MSJf0b;z@7&6<J zp&vCFGPmL<p_ZYYEPk_#3fX&LJx|t-!YU*syF+o|?Ihe>oOy4aLMy92@r&Jyk%mxI zzBnJflYqo`-m$K`&<lQ#e)v@n)FLeD;-b|!X9p}A=Xf>+c2Xf4)@>b*o3&weMFWdR z(=&FC{|h=Dr&?dIZW<uW(yKvZ6nRMIHn%-U1OIhia$L&2uzdIAxwCuf(7js|o^7eE zpka94t>oAk${r7Jt|{-wAnADh!d2TskUg+N!??8^Ous+B&)+=`yF#Yh`Oec2o=81D znWwi1*-w~d-UcmDp^HHhTYMwaA-M{FORMhywT~wnp1J=*6`!OfgYm7r=N%tZZ;`r@ z8#;DPUKro=<Kea|+Y<>pHYMw52G@Z8c<Ya`Bs|sSpO9}{x!c>41(0B24sJKY6QMSD z3Ff>1fdWpOi<bT@MyEr|wJ)CRgQ+tCQ!=smG3>6$@7HBWAaB>09(1J^{NDRgYOhp5 zNnOL?%QM|@f$g|)@ogG{EYJA!PxtY}vFw@QXIR%1DE7s(w!H2`oeers?A$FVb0LcD zQfxDLc~qr{X%wI}O;2i>?hk>zgUxF$yiO+V=-Sdkl}^a9R`s@XZGgVS>y1YQt3V{@ z{tYGJek!DUIsMla{CtV?E7tsE`zV}WPwVTuGLAl!yS}X5-H*K339m5k1v1EwdzH5_ z)*!X**$H(${ouV}(c;==yjYBtJIQ^V1fred3I+9LAgW%UDKMCbOeyQ%?=k)Z#l)c( zStA3mjcfDm4Brlr-Xd)tJU4_=(&N|093rAhwUY{-B4k*OdgdsFf9$L}+=qT)zLeg2 z<PqwvO!01pepZr%*Zx{qRNmN@axD*GDQ`pXtKz?k^6GtqcwfsZM5Dd8&!{6EI`@QQ zA1)1}@Ey|SzVmqYN|cW6bB$WqCHYPK($N7F{^F6PG)*_ST&fzfY-mQTx8vCE33Y;> zQEA5Js|^rz58F(4m);5WY6x&2&m5sbAC7!FspB^U^To}Ac`B_Cs+e<q@4XQ!)VY21 zo)K09oi-nR+l~z&iAwT@w--C0)$?F<kX9u!bIPQ%7_Nsiq`m^3+<MS$kn3eJZ$QU8 z!uTX-$6>KfFkFk3h<0KZcSv$bP{3_a?xqeNSC+f}A-De&5zz=nck0Q<179h#^#y4A z7bNN<$G#b>MA6sTq>{h1Q=vyrWK&NTyeRq1^&L@Z{ZuF-_*ND7;vYx1ZjbI#KrX`M zSkH<z{HQ@p_l4h1nKuJLGxWh--6k};%ix*xN+Xc0ye$2cD)D5%7E=qSCP>SbG=KE1 z7K%2~a^1$;^^R;RkH7q(4MadnQe%5DJbxp#{`B2O{A;Ius{b6m(```X{b@}${%Y3y z{M|$;;+1@}hDN<+)xnVPo$7aDV%1bAZ>1oU!=ee4OO1>go!dZmZ3DZ2em%0>ZFJsM zm;`+LI(LR2Ac7_FkV(E)3z+DCI=<;kDfnGqAq~#ep@25QZZ$&+DztQuwR+PDeaG&H zoZ3!AubTVVGg9+ma7Tuc>!uo*`$%G&Jd9Q1l|hji*ADklp~B#bWIvY<NZZihm%yI| z5@$@-^G`Gb_w9#Q$I8mV<ZINY@`@HXEJ3r&TDBi=O86=2PS*!K*DW}<6}F-++uL2y zwgS-a*gb-mr=#KvBxO6dA<%)?fwj`DR41I-Hgg+RH3Y`XAIPPzC=e7DdxDmXhbS3I zp~{SQ*j-!P{=VveLry2V=<O$)LAQv+_t81<Ul5_UXx$pmLf}64^18?EVGuLYW7!hZ zLUkOX^lxD2^*VqYyXOFpcq?^9`laKApNxB8qGZMYVO9;w-CNJK$G-$9GYmKH8)QMO z^QHLk%zo%9@=8;UCjmOqpKC2Zgp-%&G|l*XA?p5jcaE8MSeMnWZn<2Ep6lM&ASzxD zbZ4v+WCWAJ;-2b*jW_$z_&H<Dr&b=13H5uJOj~&l(Rd{@W*Jq3A6YG1ezFw$DfE{$ zDFaaDMee?)+z)>A0gUekvOtNgjw?E{AD*pIs1A`LfuxXy`O=$FbnbJ~i#z)$&~S4n z&qLP$6k!vX_4IH#+QyMxwgJD=lx4@Kig8uwhIbm-lcNGe9kHyEy3lSalzP_k-22cO z=yu9#P06hWH7OoF@e8969q?f&6#pMcIBO3T(+;30?XAVz)Ox}9Xf83hm;ezSxzZi< z3rKQh?-$pm8PGOQULUAhgNG|MZK36?LZXg;JGpMfRzh?n7~j{`Z*XZ8y0PC7O-JFL zlK3vD<&>KE>s?J~`rX;G(s2~P@Su>xq!S|SFNz%cl1zn+Qu-*Y-2)K3e&-lh4EbNs zp>La<3eOFI6u+^jOWG)?`U^|+<+OnINxpAq74Z84=j&9;R6k&=5PRy++MkbWfJu5X znOQdTU(jQ|7Kd<6655hre^ZR70v$g*eR6|$FGwwj1wRpOgCAQnV&()FU?@M6c6ojT z-mIvKRT*``;)%gu-YGP)t4_yBE5<rcs)NC24y8&-!Flv4tL(Jl`aw9^cbXjU(S&T) z%p}p3;SZ%JHSR6LeW1_e6l0Pei$>SV_3T$Jhac)vMi%%PAREh$*Dc}$RH%4t_glA- z8I*RgkI30Mf%K)%><Q^hNAYjD=wyBWICU9m59di(J(7AFW^ocP$K91!dnOjY^bMbh z-`))8qKp*&)8c0<;Umhqmk~VrKOuv{!Z!og@aXNx%i8*Saq!YDWTGi}83lA)8~M7n z7ygF+IL_ZKj_bWA{Ow>k^zg#PQl_gFP_<{_>DAx?n3BS8xtsCm$={c5bw%`)p}sG8 zagv93TCl<EWkAc3DHUc5Xe(dP&%#gLP>_+N^e&TxRE8eh6nj606ojsx_`#707I))a zzD^NPq2##^^tb{Qf4r{O#7+S#3(ikiWa9!A`jTH7!OcrUi1}2&dSM{(Uyw;_fK^fd zIAD*<lHzX6P@zY%5}KbF>Zp)v#F9`39<02HUP_p3PWlh@|2ab#0W)n%tb{dOx~@#> zgK&w{P2B(C9Ligg?`24vq(T`6S*&t(HHf3bUjOUbDv(Vrpgdjl0bV&<;uXBE?w^qK z&!M-BGz+l0pahbhctlk->U?Vd^7c|K)j9S9do?;b*9BFl9R0+KW)O{l(X8O9Fo<|O zmN{-Q37d}ZRAINMr$P-H&;8q!O3;(_qkD8cXMmm7eoFV;3Kino?nM6KM*bJXDzz_i z2>&%K+!@om9X*H2Z9J3jh*d%a_8a1OsAqNfNGBDdvDQp^pXLe&(-(4l?5AM=c4<2$ z%39gXQL|}8JB#k`J*f4-eHo?sb;!TdsE6!uhIT}rM5~aYz$>18T~#Q{5h8~6*1@|w zt+O=0`anp<*THPI11tx|j@}*}Kv=eu{I%V7mFS<4#G%=XZ)TUM5Y2VvP>t$(Pz)tU z?d$16BH5g7W_YYyi$sBcp>h=p^4)tl>PH9kCyhOIHf?~MH{;&hP06sSD*aa0w=pE= z==kYLVI_J@^389@PtN~q6ViXrOZ$sf^&pj;TSD7i1OA^m8(z*1p|pncr=#@9fCyvO zG>4jzNA<MSs96t+VjEG-b*@I0Q4$IE^>`E7H^-nswgD7G5YH0)l=MGCmW2l+UFdHk z<Ug=gMtn;*(03+9>P<9bh`5}SbY40ICQA%o>fS2DGhj3&&e)QvP;kl36*Hl6l(vTu zDp=NyTCB5VOLS|{V(8+of}mz3>!<Qzmgytnwd$ns#C0Iq4x-(By*=bRDTvt+x*_8B zj!z*~-JmXU+B8<C1`;&;2#u99$m7Q+i6>eZ2|aib-6_#mgXT$*3rSxmkXhG*?kLM1 z#C^8t+S~jRScN33-LI70`HW90h*xVJ??yDNBKd?gWhB4D_O;G~b{IYQ)c3qe7np={ z6fihvqo++@o_UAQq7(OK-#X*3-lC6-G@j^mpyAm=9}h+K|LtHnG%LKxB&xFyM%HSS zeqYmqY-$q2PF(6hHVg|tD_KfV=MF;MZc98wGfZo=b`1rLZxbB20`aWM5oMuwp9<lh zkZe=+h*`lD6{;ie%@VMqppI(}S8g2ag<iB*|5`vN+IYN96vIY4kZ%97|3&L=6xfw> zUND4=mYHfTHyvmMSB2sWgOVfAQaya~Yjhhj{F(Q2G7{f4{l=mab*vkWmb2<FEKH$7 zL6uI9;2M<2$)?BS(vA$YFYTV-`vVyjqhHoB6y&`=xcK0gPO4*bE(2REzw!Yc;bNok zC=9}+BQKW(-o6n?nSXuXjg}Bhr@+YOK7q*JX>&yi=c$kq9qCH#w+3|E?QudO4&8CV zh7S*PBl)?+W1AYY(Z??gwVYe=dx3CYBkLW!FOa7tb#Uu<_^0FTf?)xng9~UC`sk*1 z^=0ogiezfy!3wHT_D_4K)9N|MubeG4Nur+$>E=wHdGfIlnN=jDJzgdw<<u!#MnSv@ z;D1B^<@j~p@OL@Ygo-eId5`(SwWvz-e!S(S7U(QXyS)>Cxk#r!X<@b(PjK$J^|Pv@ z9&r}lGSKhCk5+#}A&Po8?ZP`iTcUTU>S;aPA;d)QZ0SOkeyl%}24|@Ysu4&lxvo2i zY!)_t-1#OCJ>OSZ;mtw<y~w*Uo@HZzv4*=eZ`>UU!@4`mCciWy>s}JwqbU5@Es^LZ zTQG_UZ`1Gnsu+QWj;GIRM)B7v6Vs_3vau-DabS~d;v5nwxo-W%7w<r7@z&X$Fo@KP z?)ATBX$8s9UG2`irDzrE(B#>wnb!?>tY2q-q-_Q<{`YLyvrY_^49Cd@<Nar%oLxWS z3VtD1^Y0e|Uev-G`@`|4)AL{zGCw(3v*0m`uDvdH$)Ov>pZQEI4tQ;SzC0h=5jjX* z(PqjQ@?d^9{4Dg?>Lt>!3ZccphiMDLgNTNsA}rtC4r13SuMOFY<$=CQU1gYsC&=>s z)L_|7M^G0fntj4Y1|-^)Ppg@Zql4Aw4V!QG0;P3Y?ij}$7^z!`g=|@ZRcNL5+J=(I z7O<MQ)LUH8jTB}Ba}tcFkTTKiy}i!|pt};oyp}SKf2@eUloi9jxC7}=GtbZx)b4Qz zeZy!dkRriE?8gU%7%81@5gQx<ry}K@*$xZ9CjClMlYa%;#)h~I*S5p#(tB_9kRp&A z_cl5%Sq1+KI`YVUf%jDt+E;ecB{h|Xz{kG-J?pz@#MYc6k*`etF9-Vz8ePk^+vNxe zy@<|vqxz~3YMwG>-gT$IA|@)ZW>+;xFu>^NtkHk1sDWRB_BBHztU}Jmgez>z;~=%! zr<5Sq1(dw44@t}Q)CH|NdA$D5=`8zT%W^UHaRPcEIIlj_A+-v`(%$#^Nem!eA3wgU zTzFvj?@K4TNnOjwuMw_0l?vOhpGK}+Q5XFSh@g-t%jKEe4|IpW#vgI51-Wf*1VP~* z2zPI#+3ik7t58NkDU-Z1{^k2J(7WnfIb3qP<%+_{C_4hvkP|oTL+Rhdi_F*JIg9(B zotk+a1E=VwGr0!n2#ZH5ru<E7A)NALMf&*|3~v1>K>64J4dt!3I$3jprjYV}*ZXUr z(}}IqTJD0U*NhVbx78v8e5a%H9T669GB(^Ssz-!}ui}f>gisyb2TCc<#59P))Ju<j z#4D19-pX(c@YGQuyG#+0MV4wXroE#3LZ_Gt#WCf5pY9-2A+fA`o%d+)#*NEW5*D@i zcB{5a*CLY<3VY?NDil157z^skRydns=`Jl<eJ`HJ6%rlxf&DuaWxoBa@VpnWhmzZF zFzoArTR%MZE8@R~)fLgyMKi?m_k&xHMXG>z75dT4qqv_~18MXRznKK!lRFru%PAU7 z=)O@+`fmC$#IW{LTmt@heb~0aLvMdK6=F1siE{@Ee70Nj=EUOxAW7!7G;2h{Xq2bV zd3A)LRcP?W)z6Z-8Hlm+;Mu{o9cXdk=<QQ?@o5h#0t-(zH&CI>!@-_09JO#ZBHy5G zeJ2$%ELFV~C5F$E`3)&*RjEQ~D?T0KQmE$bII0ul%zD0HJO$L;19?<Nv05s$>1w9_ zN3S}h%Xg~L74Iw&p<^!8PtJnu3ceo0fg!|aWiv`S-U7_|d*Aq*;U5>9t%x77cKAFm zN_ocKfLJB4pzf_PR48Kd!w5?Ki4<RUGJCfFLZXvB1!2vxNLE8$Z~0^n{Kvs?NH-~B z^M1U=w=$JssTyzSqnHnlc?-3`XNkQxW%0%=*0oJKTP@l_R!ZbpQA!>>???PzTQX6i zuYXhHCHxJ?hrf_GSp~sw&wnbB#|xJvBo3_f;9ogU+IL2TX29B&v&XeROjDihGcQWo z8Sv~it0PCTUv14`qvX0mcfJdZk9*97MNmNQ>W?S%S-J2dH?Qx)%|iHbqf(%_d;rEu z1<o`?G*h9QaufLnHj}B4B~z=f|J51fp8Vm~rBb|e_cui2&y(uE-yZ1rB6v2x!H3|a zVXu#$CV^160=DH^d_J)2*cf)zPeOyn-YvlxzUxVfR+7)F1COZPqs|q5NWih~*&)C? z$h>@vnsO@Pr9`?i?V&!TbF+*ghZT>&t>|uje7qkG_J6KmE6In&0A7*HM?0yI=v7zC z1i5A??91jkw{8L$J~}t<I@|)guVP0=v`8(Gd$Y+o^ZE)JHeTCeceVj&>f(5FXu}a< zN`O~BDhx*7CdR$ESOGJT$fb+-^B8P+T6&bZ7)aas91ocG!0;~OXAQkJ@OVo8@$_3f zdKzP$N$wc|qV{xfb#@Iz%C~9FjCK6W5yGl0ZH_M20G+1knJFRxZ4^`y+fF6|2dQ^! z)@&z|E0dl?`}(Mmp`%`v<-R6hJ%$N>-kXTLOYbYkMvXwTnjfz!sUE&;6YIMSy|5y` z)Yf1^NAPdDANIzj31sc|UfZ<`pXOv<q+&i91ED>SWzdN#z?8pSefZt05mq7bLz(%0 z^j%;s_+VWhMg#|*f-#q2A{Anx_1F=4a|SvW1VzKVhM*xT={7}o9pUYqu@?VC1DL1| z8aMvRfQQESXa{OKA-|m0?7)vM@K~SArr2K&g;|nSzw)c$Ae+WiZ$u9UvMCe0ce;`w zHt5sAv;&36^sJrS>_9K<(m&wh@L&Q?m^~aj%`*d&ygtq^if2)ZQqTQ+^?0?r_rp{4 zJMcFq+0EgZXFDLS^zu}|MSKI=-H`pW?FblJs5BlCiU+}q#zUK8`aygFok=xogkYk% ztkv_z-wxIbm%a^45hL)DO7pwcsivLymir67Q}|d4o{;7{;`kn)GT+taR(wxThUT)x zIea)nWD(yjI(#LoQ1)Z3u-!|E@XPJ|wsw4^&?@A)xj>&@pcC1A*+HiuFc0%i>MyT9 z?+1cs3E|#K;@=L2Lob(RyS1N<f$t`Nfr+wqn07F*YNsQEg?{+hhTuH#wHmM#dNc$! z%7Q)3rUj6oWYkOJIs{(>7mh!7AcEXfou7+B0~K1-;8*X(E2;ai4@<t2M0l>WI3{IM zNp<{po^ouh>wu`B>{x8$1~QQD+_gS@FAMA|+eB-nmcYvLA}1sM{=c#H!p`~o<KVz; zM@%||KVE-B<=FvS2UDiOVC=x>GjyH6>T@;rdqytER8}R%22&8jb9x~k;uuu5ggkjI zONPOMyOI(Y@ap#tLyk!29JK13on*s;RisH&DB@S3vCp<_D81=s#eu)iuR^M`64N)6 z$S`hQedmUFCo($T+xS*(6y0Xj_7f-0fh6<P^^ONw@HyvA?eH-Er@VSMbWaqC3egsg z{4&-i0nx*zBeQQ3Joe;sT;?o6egT-0al&x|$`P}-)+3Dr=RIl931c$I_Ef}(s<;4! zMQGR4rYdxA=ZRk@&yIoXeX-qLlBH1Dztr!teiBRu^tU$MoIp3sh>Di@ETp>%IqE^? z_$!Tqd%w5g7?>!^Pgo@<!{WAkJ>5SGLG1l0w=2VQuuaJ+@|h+XCNX{<u8ny=5vRDz z$vNK|#AhM5Jbq#rss}Ggv!^$~BFk>~Yqx1+S0NKe7HwtA0oe7pZV=<_g~{03@1j-X zAo{EI)7kMBR46dTl+rr`(}hW_hA<24wo<VPML6`^84P3&?&qU`hxMrS_s=7Mr39ur zc`1@$*XB^cbz6F&(7i0s@_ZBeUr?IL>9fZ^w*Cu>G}<*$quUHM-uY?@+lvr;;M&Fy zTMB^3h<C(9dI|=4v9D8y{x}||#qt#HAq*;5n{IOM?g#&)oXU1vCm^|vKBmZ*MpiUu zrkVG4709SsUJKbV4;+i{OFyO7KvP%)y>f6hMCF|%Ku;ag-zwq1-JFQjZXa`ok#Ptu zNG}=R{|CBb!|mdsUWQhkvC8HLA|lJcyngA7T`k@T5fQfLZiYw-6&fU*I$ShZ32GPG zr7zajLd&_IPFHRafP>a^m`kD_ZCuQBFJS8h()g>7x|^~=MOB;rD!%hQ9Mx9TikDvm znO)$!5RimcA+Ery!Yt%P5P30Cp0gtt7A^9R+Lz;3<Sz%qp&qk$qQe2TFk0`lRIFL~ zFDT09!UfKA^*~>J#CBi8D9A9XS<m3V0{QVtIxds~JNKD7{g9rARY*yTrn0G&2z*BB z4_<M00nOwExjC9>l<>8Q@#X1ypgb6k=~*O$*!L&a*fU8A3iMo_-IqQEE!zs21HU$d z=OBaVmt%d9=CxfZ&8PziG&_^(Hdv#7LbLM;d~cbm{{>xORtX<u>xQQaU48xE>p=C% z)wk274QLv%dR)evh2Pu1d*$@0<1YvM4-|31;If!;F`T}t@@fKaN@0y91-NI;QCGzA zqxuRSxCJrQSHk=#J>c5Vcl4Zn9IQfWL7ybnB~;>J*e2YP`02(fWb$k`XJLId)ZBUd zVuMd1Fg5RYPsZO5ghwt~GpHwl-3+GFJ<U5rg@~uuMngt36?zJ1fBaRsm@Y4Pc4t&K zDD_&r$*_$@-Hmppr%v{wJb4bD`_*I66p-b!)v6p=?|ilgjeIzh#Z{<Ohz|(T6i?cC z!XKF)u{Gz?_~VRi?ebJ*s=_xRM`((g_3<~Kl<7s`qDo|Z=vlrIkpSIg6B(iLIdJ{) z*Sx5$lj!ZQnZsO6GoY?z+<(g^2?RTN4;Q}92VJG2LKoFy^opKqGM~@{4(s^cpPp}m z(sGfkBIYh&G;b*6$Zmp&-%jY!To)P7c8H05R9J1Bgs|S0K98LNX-I94lpTB71R8Zp zd+u{#8U(L9xn6po1^I!V%%O7l%P7O?nN!;M&@_LMOVtX^Xcelsz4?%3TsL@0H>V4o z#q$=%+=cyE#)0R&MG9MBC4L+;zG!ykGh(%sf6vEXiH3Pv1zK;;qW{{2TwlS7Orv|K zgSEID0v!6Kn!(q$bwekH2QE1&=*O?|K(*G+rh0Wfa76Ib_quKPv;OzID;lP)&E{6c zuw0+&t%F(+x7fa-m!my!b(Vc#YaIn8S2ON>`F#vzF3_~M-}vL4(r~;eZP|oDfNjjV zYU?Q!WU-QyTU-WH1%_+hG%iEpc0bGYZ>m5^dZ}CcRzF&Wn$x$QRSWM$^`z)CSMUix zZ!=F8*;?W?z9kwh=lLcfL`2cJN~{Zpy!Hk4Z=XWa>uT9$i1_%%Z8<};OZeoE`HTY` z%f#OfeiIs;-#obSMm{Jl=3HUMcf2-Ct9Q&DuZNm8vhHX>Kiapi?5A~jFKFqE6$$Be zA`e$l&Eqx2=%%*@{gC|#aEp<qc*gONOS_@hUQ9!<tI;gBf^!-jNTj>M&^}0A&_A8+ z0b*U-Fucn#Bk8>G)QM5VRuS1-@MfF}5#9yVSTU933DWPx?oseA=6^tenQQn@E=;4@ z-P`Ie;9U?c4kkXi>!yID`QX9%{dmLK?*-i&-M@9>TLXkQ-AKnyPf(pB?5VNX-W}yg z#Lg;Tu>+4<{S95)xJH1uVHsI|RNCiF9tK4cOPpQ8T0&IQkCK}+190tEQOokozo9#5 zo%VjcEVK#{rnI6@29Mx3shpu6^K$grMqM(vbr9{ntVHg?kLg04!!Wm>+B5{h^nqRb zje@9<B(GZKrHg~mtyIEZ)Hwxomt?<?7DlKm(!S=k{=QQg_$mGrG3_8CIf-pf-77;- z)4iSLS$HLqXZJjG#^S%A|2VQ}&BarIS6KdDkOC7HqB`3(0uw&lFW4r{{tKd!)qk-+ zKm_TW<*la2dQi~F<d3^}d(|qW{Zwd;gZKZ2Hsv2MNz|kxC@}s1&H|R^t8_B61Fb?d z%nP@g-{PZke?t!1+D$t%@#Gno#~;gF29aGSo2dNF|6IENtcb|)LDb-LBdjwI>I%8L zhR{~HU&^Cn1jaI%4(s*ILY&m)+RA<1Aenkxo5li9OGtH$<?U}rG@<VWzxY`Iw&>AV z)pf873J-2j8P~%rB6Ve>v@g*Rj88GBajhwZ8=E7NhIXzY91Q;)kf7NJ(i6kM0!%c7 z5nb_DC+a4_VynDB^M_d|5jmRAbCOJjNMGY}iJDVr%Z}NYwnGHCIGxD7fxZW3PnpWw z;AvsM9gMJi%jx~8l~VkWXh#%d{~7{K`h_P`XC6_ZiuHnzG-~h+fHk(fw&`skDW;(L zg46^x=Zt$EXU`&!77g3;i9P7li5GG8m+_si)Mb;!0WzpF@~4H+;-BQd7o;ZJCd0C) zhw3PN8eJRXjYR?7Wy5bZ4{FgWq^JTMyWiqBl=}n6JRQgo#PD{Dj?6L@iU^t6AH8)3 ze%Nf>I*z~VGaQXBJgd=$9DJh$MhEc-(=C&YyX@1@s}Bj3%TqmgO^Kyv%kB_3$(o+k z$6AL-+n)~ZoSOo^7vmQnVEFls1ovhemyQ7{B;9tLxH8*^Rv{<b@74HJMabvL>D+#& z65VV6c;o!+7|Lbd7dmH@iA<JFVpAPTP+@O)FuAD)j2B8yXfPI_$*gmZCN86(<g2a4 zOzB43@XV5ncpIk<>2R86#UkRk7k>;p!9(~Lbm@rkxuW$XDs*HmW8%#!G8LLt5ZW*H zsTv#>6M7|HQjp~9T~lowji5N{^5v0A4=OEQylsgWI6e*UT4#_sg2pc<0Zm0E{Pe1u z$w3p4;%$EBg+x2x4)!1D&g&=plbY(#DwJKEt^a9LANp0}b|W*q0oqPXd73nKAoJoW z-TZS6aQ3QLRf2mr+L=nPa`jp#SaydKcGS!vfnQ6K_T(zKJ!C@bFEt6?#Z@eu=$jyU zT=018R(!D5Z-;mlvKajF#36Ca{G!0i2&mI=;f`hOK(7lTtS&ZpAX5FV7n_^&;X3c+ z#hQZ)sM$46>EcB)6_ULke(#oKF4Ui>!fuw2!_Bm`!&`O!Ks0KJ8dgnOXcdZzbzRxY zl?M9j7}d^h|KnI;#)CB)p4Bkx>KNejcm=h6IARj^y$QB#*s3(GF^O(WW+e%FBPhT6 z-00nbY0wG2ZpnAJ5voBmm<QkS_HEOD-T$Es2@cp!-=V`xG=4+eYt}bz7$cz4qdzyi zc~FKj%&T;bQ%2CWlB&MDDHA9vs7+?-V>4iWlhqW(Blu_3Zz%V9<VqiYh^&7yZ8)H< z39Ui_Snll?!3Bsfb<ds48u)pSbK>p%mTY8jpa(v+W#ZG{7!Hv1YN?Rd!ANtNO=IZd zy)9V^ukq5$-%dogPcQ#I0{nLHu%~S_-5j1BXl8@Zn1V?S>Sj51=SNs2;$~S038ZU5 zdICNh+wc&mM&I-N>dFW;hwnF;f761TKFKpqZWu@Zgz&(48OPcQlzX~(;A&nEc=KB3 zYo1$#q%8;D^VE@0Kw{B;pW~HCjeB!P#3D9~V2`gPNxc@ezsiuH2$Rs+_t??5=6D!^ zb+XU%IT9L4atw@+pFmo!O)IyxdZ;V<C$vTBfaT1`Nsz2p35t532Yfu6Vsx)o|AvN< z?9TPMF2zGshfu}MMS~3oqJKgj<aR&NCtuLkX9~fE@4I0YN|ArfW$n`qc~&t`rY=na zKB($a#~A{Y#w2733=|?&!)t|Jcs8;eYozB_u`%@dUa5EpPZuJqZIuI65-97<cC&v- zK}USpmS@7ok<_mPO<43bBCJAjoykOFIXtF%`%9-uzg8-AWTBzI0x#8Ag^m<<WyR1? z5YZw_f!2Ezy=ZCuX=6&JLb81n@^HTy6>8^|QV%?aKc2hN_IPZf0R8q4wkL!-QM@l1 z%cpzO0x#3&th;>sp(-kLbD3!)Aa%~0S42q2CUxR?tam8dsCp;bw7mvd_QansRB1qL zMD+*p_=;p*kNtS7;|&!{ePN_m)96>J!nXJI!*E3T-JQM&GK@NV%GOWgec?AEZfuXL zfZJw+Ih^>Rha!DNdHqZ-5S_6owO{9YkV&~}+1}e<5gn@PlfkDvs$5MAD|w9n%|w<I z*k67^i<#?poJ=8tm)6}T@o)G<p320GUw8<K-}3iOYA;$q=WgZehvz6L`|xu2EPgha z^Xj&|mDV7f+O1H2QeX%;Jng@(pKC!6cU1=_TGawwb?C(qCVVs|_8T$@5pWxL+X8Zz zwjAI5r3#V)$u$`14-}OZtDG1=1gbAXMuV^p6tOLHVeR=2FwtZeCO^uCk2X#Gzwq-T z!L<dQ>km>;O`S2*mDp;a|1le7ZIF#P<9$v%yfluE^4M8AhxNjfA_cm&R$YMkmk#hw z7!IReX`!L8)Nx>BV?4KJT{k3QDDTUD3fk6r{?zV+10X`&IC1a+o*iVmu0QN*@4p}` zvvaw3D)Ny{MD+3Sum&W->lL)|41P-5ec;lPZVMzl{^g34deN-3+)m2u1i0xcI#};* z!7HJELvI?p-fsHPjgOp;+>qOw2CLA%;pGBtp(!*z-*{ZphX@`H!UU&F`1hUq-9FU* z5sf%X`)=LZ2_mW;;)z%5sgUJUm9{T0`XOa&nl+n68|=skA|52+8(4EUHo7wRLPm?r zvmfdh0X08jKIBR00h5yv=4<N6$Zp|<&)Kp{Fj4z>K`t&9(IkJ}n7qXdR-uU*uLFFa z>!DrX+gD6~2KDOc#O>oN2mO{S`xf=_^WYa}W*aq%(JsTiia{!apdV&AHMbN8v6k2f zgW5QFycR-zMqNnuilf&jEXxbjn39EOnLH86)97_$YdrG0*&ZsIj~AtWPPKo(E(Xti zI!qrz+lS1b+;~zpJ_%BfrHkQx1B7Ouh|)_VqMA^Vqb#*uka~zCR3{8S<xFEfb<YC7 zlJShE+5IDdPisw?%C#8u6fcL7tEoa_7=4>}3qDEoQ12!zQL7dBPAmL8P!fg|jJ{0k zeC$CxxKqekV-q0rc;oA*#9AtpQg}z{U?c^+FF4Qrj37`Uv9-!f!|~mS&uc#XYgjBC zvhb3Od{%=J@I3AVkH?_=QB?bN+BVQBy}r8!-)~xVbWYG?Ym8E-!At0QQpRL9j3%=i zN2U~`!1S1Pn)n-!=%R_ztUli1$}F#I)7Jx?WJf23XbL(~<6JaNQ-EmX?O5mze?w!O z8zzDlC*Va>m(H<G?a<#_|L&a=37nb3hk|1%=qbhC$1-9X_=-QYnoAR?PG|yFbh-o8 zfp3SNBqs|#;d5e^D^I-{1dE;toSf=Hb#=LoGa)%h(pdA5qERq>*Dvw-#ybh}Q}oea zGAJN&ds7JZtQMt2Y#i5>E<&=p?bs>8IMi)=m~!Ymg$i|Sd4CdEW<c0*Nt?c~1t|{^ zg&piFKpW#Mu1bE74^ICFbo6UdGW)S%n9!-rSH(-U77{KP%iQlkkrPcMOTh-z5U(UO z&%OXDQrin2E%t%#JEJ1i@it_;^yT6HM*P_zg`a`ECPK{70*zk^H6Tm$9gf9YeQBcB z3NfhT@ByMjrf4X_PPhqHQ+5wRfLf`G;nyw@WZrLRY1e?X4b*~|JIYW=m)@rjymK(D z{5>Fn+)stFB$>w#vQJYXlf#?)$D*q7Htw*~es8CdNqyIWZE;`Vnec(d7g;e-{${)P zHT;g4oOGCyS1=4v(;V;fl#HS0N|U?+{w-i2zMku}%N!JDOHN&~>jPn-J$9AuZLkWl zT4Xh(N!3BjY;@3x{i*+gND<=`%j_j6^vP>Y4=pmtX_U%{E8=b1Pa4NBLMa?_{4o;0 zuLU*}O>G0c=D}V~(SYs*HU_hGhfcZm<M~a}StX8p@E3(=;z<w8@zU&9XASk*azI$I znm+f&0y6eX7|d|O$C9qN1-Qr-;<1+8_eA~1K{j~!9-Qc=LW?h~Q`X`A1d0=BUHZji za7;@H-3y$6&-xC1Exe;t=b-iakvI(B63c(iSrjdfZ;kzicAQ=|F!rcNS&Xk2MNU^C zOqyMgYYJb<Z>VYw_p50Aa#)3!OzRA*%xPp5nIm#s`}1JOXV=fi9lJpJQp;DLl0_h) z4fWYRS)k^ia-tOCU@#`m{{HJZ6!A{}7k2q>AqtMn;99s<g$Sm*Q|ZDdz-mj4g|l-n zIOKZ!$v<v}@6RvSJt`lCwm{O(#FuMi3vVwf>vj^rYg66&?f^0ssyi=kYI8as2*H!4 zts*VRgM&pklW_=n_~DazzBeKVscSsnFE^tH*o8%D{y7M0C19mSnawcjr@y?rWbj`Q zv5MnNhEXA6x^joc-LIAkDX%CSNCmcn+WmV&!pBnK!W%ZzPoaOHl(oGZ`=8_Q4?ZV! zuA))6pKao*?oEW*AL~Z0u@1sMuKs}oj&t~eu)kMS!FsXwWM~!QN}GFVjUT<`>pM7V zb1i~HmG27Y5?+qwJhmaZJq035LS;?629TLgb9n2GI%IQC?cKI9Un(Tqc2Y~;f()kp z8{O~joP?Sm<@`Yje?fmc5lwFV*K+Dn#<h%{16~A_kNt*Z8QijUh;cyJ?AhiZV+v6x zEgZ@{#u1;{V!8s$4`gKSbNp;?AL0v>NS?_VfN0%BI>0L$SD`N^sW*?`UZ6tx{qMg^ zuO%U4W~^r*2cb%y3pHbUbh6WXj97hN*Haz5N9I)E1)phT6y-L%3$I#t*}O3;O#Tm~ zuW?`8N?;T`4r`B)&&2`H4w)wlDf6J<YmaR^ybM16<+2t<U1-x4+Xr-_O~@ImXkpf; zl}-LBWgaI$fjeR;1#6zygAGGsI)l)Aq<v&YBI`rNe{VvrjvOxzcKsEI|HD`vZLXfy z-|!`y1ZkSGc!5VHiZf|YSyt(X82X%dsXx=9K07V)C3yl2efxtROW{S#r^0CI`Kn-` zRD8Dz=URfNkxRj1M<=v?c)XVpkx;_{`>j@ZbW_SF1^%<|@QluU#*r;^6bz+orsaOr zl!b!qJhV=+lmOS!F%B7>37~mxbe{K(6>{dk(P;3bj|$ls2fFgpxT96*+N<08{zMW? zO8ErdvL_*z(=9I7@UvpI`nzW?t&Ii3WT&(Y=P05vq4iiee;lbl%@N73CjWM@32^S9 zyo)|efN#!1pUnQ+|9>48=Zy!DtU@kjodzm0YYAP8vi^ejPmcah3j4kdO(?~YMXvim zHa_nDYGULj{Jh{dRBEz#P~ce!xbEWOpT2+>s7epEGS4jlvDxiwnNS%hKRhb?;qn5I z0=m`Mu*>~09)4ZGrF;mjLgp-{cX#2h;_{VRBy)>g^kGfJbMfW`bZ1Lz=l%0U#J_gQ zFN6V)2A6Vevu?}(7nD*bzA-E=5fm+5H>jr1!O9jN`jbN)U_;-^*6EEWtaVzye?E^7 ze!(5=FG%PW@pymO5ORJ^-?h{gg<{;XM})(bROs}Zm4xH&y&#$Z4}V_%h4Sxg9y^Dh zbj)VC3U3T7K&ud1x&RRor2iNC%b~GEM?yxQfsNZ2V~v}3=!RG|mf*;NZ@ESH2ap~O zp@Zu-N-}cb$8k!!4Es-{07K=OD8j<OA(qmvNkVZ86?!J;v{3SN4WVhlWhDzgl2zP$ zkvQ<J8s8ItK~w#>3FP<44=XMAqJq;NDRiElXgJ~Yu_NkT;4h9jI!bJz0O7gZor{^X zp#E?;hY>$eSY46L(<__Q-F;EIY!!LMX#fTLbj6B2SwX9i%(JH{qvoxM+fb~fE4d2M z!Q9hHd^UpKCq9STS_-na*Q3}g4dN%E8|5A+^-`VQFB`jFyzB!-?DyYDw}fqcUOx@} zLM_XoM_Q3|?yW~odua)?)?_1V*Ib}n{mPcHrwWh4<+I=9UV+zo##%<}OraEhQ*Nuy zZp6LQ=DmGqFBNhbwYDBIm<9Uu5^;XX0qTNk#BMmJhBTrNtsiQqb?fj4+;7OH+9Q?j zlM_68RjoDTR6&KZ_p-gf(|b{b*Q0_4gLW!pGg7qqz*rxwLX;@ijQBlOAb*O--9UUA z=r4E;hMj6bcPyJPWd|iw7bL6MwBePf?W%)Op(CO>zIhH^$js#Id$$u5G|H*FhRd%R zaqI9Hq(A5b(}S^ElcyJ8FshPoVyPGZuG8aw)jS1Ehq5%nvdG9U(y3w-UgM!D<2z?3 zM@!&)`#613-XFPEFz<@yC_rD8c2$jk89_FO{Phy(@kFKRn;PqVu}(z89~W2TZVjh2 zPOrTyLxDIwGtwO11^rJ*{^*?-zhp_M?VK%B<E>hhU=k%4t3pd4?HlSiCmaMGGpbDt z-gvmp+cvXb*Qcq_^Y47QpZC<FC?QYZ`3q#!tGRw}+pSozyLeY0!yZh*OD1%0eE!dh z8p<~xpcQIC;knnN7<)RYkjUQmo3$*PVD^`Y+%K(a`1wQN;=U4mX7}$E)rokrFj)^H z4?@zl#QUYdJtHu&VO=v&zQq-|$Kp{<-pTD5*@M(8H`;suI#y+fkjv9tTcz7%w50s& z>HwLZz@aK-CHu9F3N0@kZ+N*djN&}sRsS^%w}|a>-`c8P^o&jXh>#cF&}P6iO~8vx zvUST;*KHU9|6I*fr6WTy=ycP0bZ`iSC3k(uwjfZQZ!x1MM&GU>Z2LHf(FrIu!>fkd zqCArwFlzFpH&J2`6)9u<9x@YD=-v~<j~eM!aL$WQ?&dbU_A4&$zT53-D)cZ!)OSNB z-jb7?+ww4}1g`i^2Wjr<M61wzTBxVDCH`&UV$DhOs2u`JoCxZ7#*hrcNRw5r<EY)V zsq5>*E>v@(Sm=&o1JpPTzm?{wqe5}2Q{?)PL0E+nZxxSo`W1j@oW!mhtwZR@c&)KD z-x6vV@$g-zR13z})0qsTNKlS?7nskIaOiJ`CN;!db88Y14)kx|qwkDdvCa49ncI7* z(8KKpox<^dpx$d0vMN>;;E_;XusdZ6F>N_*BZH@8{<5ln_ojpdf{w~$)#MIf;IS3o z-1P^NZ5-BqD*O%c%4GCu>Q#ZhMP+gQNFw@W^x<Y#^bD*zSj?%nf!%h6@YwaU=9au# zfO*a6KxKR<%hF=93-5eig^FA5Z#TeO^cI)e)SHd_QBPKczMSMZ%9!BrIm%uFp?pol zHP325!A!eSVRIH3lb`RinjZ(h;8Gna&K_8G79Z^Se$S{G6#Q+qkIOb=RHzJVVvKE~ zfDNx^T1rzF$O}0h^i&^2#>JldQ%ms1G`-2M@92vlLR68K`E(-iMLr~Q5k1gtnkU7s z%Xq5p!HlcNMOxwBsri#rGBxlq^ghGdW7Y6otT^(xPCMFArTXL6gI?sD5R$yEm;?@a zSc?i9Udc$~YCyPaiGO7LhIk_QWbe)X0^tFQtqUa#^y}Zh+QL~1s}PMtBb`oT9qjrh zz;^g+F=Q!gU#K{SpZCj8jOgO`hnfdwrp%YCkc?|yw`tfYWW|)x$#wp5m`ZA2Efr28 z;@58lW>`uX8gKKSs@RY3-^TTeSDeZNf7Ykc&*{b?I`2t%GG2(#7O6jw{jwN}R0Ozc z@Wj)gPv*i8Ul$@fwYQ#5qy4Bz&3~P~?=YCE&mH)s+DBbbokQxDy#v!oOSI?WzN6JB z;7ZZnbcZ(JD{!t?G$=<Btb6LP;!F}1is{4$5ErMRdGxeYO{D<TE%jVIW0RrOBPS%g zlSGAF<&E#m;SJ`*-SoVnwS#CCGAE4MrbacR9<f4`J@b8F;Ar_d+_edX4v7>nmv-Qx zcjq70a(95D{dt?4&)ZSNr~`Iw5>F=)y0wvSi&Yy)Z~EFRG~JH$H1+*MJ11eV)G%ZL zukVS8y<*9DWf(=XZBI|x(T~axU%CI%xQYtdl-`Xqp$kHjxr>wUzvFd3mxBy>W$=IX zCzoXDTYe#?;M`^5scML^ZFL{QH#hz`*xwM}Mtk}L{lQ@G@~PhP)(j%>T6w6m^&-CS z9D|ph7r+iby(jb`J+KOu9}c~G1K(u$D4iYny`va}*Ns|_v=spN!+YP_wlzR@2p)6p z-vNBwJ1<8M{8^Cn?#&gqu9u-z#}sqkt190#hz4`Ws(VvQ;jtm{=e{+au(%x4ai2RI zA!YSfDJQ$&<Kw}X@9^Uno5bXuLYzKe@u9tT?s6-X7t2oBPW3_1jav<EuZO8uE>)~? zt9wr$^8FFRBX2m1tQ}N4w(TCLIy7om>0%y6<C)Onhf4Qb=7QD8E*3|;d2kh?G5Fx1 zDdPq2haMlQqH6_9@h=Co?sQS1U=+5!CSVfQ*almDQyZZ|+9eW+*M0G^U0hQMj;AW2 z^U^_ujkNhFdzszl-quX;aCKAhA@;#@HrdXx#25^`w=Z1hTzm`DH?oWjKeqyTP_S%| z>;Q;v8>hHePa=y0*NYY%ho}(ut@|zwjQHHc-_Vj*P9B426&^TRe7LP0|C8-~{Bk)I z?<M>V=`&Y+>Y>j@vS)NmqXxpzsx!i1vo@X)8w7vt17%H`f1q_1PGdXVI}xj}=W|oz zQ7Y8hE8vdZZv(MQ47-L}>QPWu$K&@m{NOgP)RYn<t*qch+75LVBG3papHB%n4N_kh zOAPQjK>ts5O=eAl&@S=9LK1IMF=N*jd&xZrjMlkpt+3Qaw5Hy5n`t)Q>-BWJ;#unq zI^}g=<H-Ituwk7`)|3r`gfmYLy?LKYg|hF`mL+r5LPTTV*R7F-XceN^dS<(Q9)+m7 z&($~Fs!@+Y$q5xbd|&x52zO*(E9ZIa3xHL}TV~_{#+KCz#e9NaY@c=@K0bx0E5ilI zxc!ao*K5o0@)(Qbi48U2eRf~$JA4;ZVdXB-M7Rws4UA@Zv?f6&KX=$M9e)=5h8Fud z#HA}MP;OXvyX9FTbwPX{17a#d-N3m&Pj^mv8C|dVxOw1s7MlOyiwU1OhhGZaSHA7! zN~r05)Zv;yLfFmyUb!WIAetvl!aLu6hSa-?q5Sw;?JC3=CGY8dCY}nJpLE?}C*KQJ zapB7;g)2xMZMk$>E)f}xEA#Sy!8@kpWLpm&&w$TE9k+Z2{&KLtA#Oh1afx@s;NgDg z>g$sQz}vppCwXNBbl$o>Rm!hLtB}a{x%XMzbx4+ddiDkWSY3rkT<ji9iZyWY)eawK zJj{sI_-6Q)zEto^=<tidXR&V`=l^;ov;|h3B=~vBfuRR@vENW;VIOmf5fO2$J99a2 zdo40NK{O!H$Dk+?8XC2xA!KK(&6Rj?66qDOTx7q|4L8c24Vm}h!Nc#}Y}V(Mpy5o- zw`86HwDx$lL(hRG_-MZ+-3q_8chCL$c4h=`^Zf0oZaeqzZD%E@x?LJ3c2*-ScaLLi zASE0vJtU>hOb#Q}TVWEa9t()bcDKk)dIeH`8iu?rt_N@N{FkA<6!=zmexo*fCvuyw zv7jBRg7xWq*7SHW!YZ`r*2w(%${grp)*AXO0qE3`bPox$64b;c`@?Y`;hzq^I~BL^ zieD421v;KPH<VWmmd_nC0?%{-GV3^2Trq^qn%|G|i&j%1iiWZ|g{1(fP_rGgB*Rw_ zS-wo!d%YD@JLmGkG>fTF>Q6HPJN8Ay^hiad=jc4d+<Gc^iM<JyMws{w_h1w_ctq;_ zUTwT{No(NF`nwhIZmZJNF5gK|JNBc%R4D?T>H6``du$pOThzCST#A9`I>hA|QZ+m; zKA0KjT}g$S8a)o?rp;5K%M|yh(;6KRjcsWxQYV3Jj={1qKL5}6*Q2Y<r<&nfg=qhC zY-SR+q_2J8be#yRkj?#%U#oZBL~WlRCND>qgNKkYXM9QxQdu|<Hk`SLR-wC68-@Rm zu=kFqy8j>lZ9<3^rKnJf&_wm5%u-Q8T8fkv4O%!#Nkk|SWmPJa(X#S**<_FGz1KO; zIrjcOudbXv*LD5gx8Gk^*SWbp?ytw|^_-7cgX;)h2ujm<?^lXcZkh{PZ>wa0h_fnJ z{McRo24RlMf$WO&qGjmGJDo3ar-#vB9MWH)L<=ciV;@{ppeFsg@0MIBI<<ZG(z!_n zD6nbY2iu8Z<agI7?poL|F5l<GZOT>vPtErytzc#%jFdZ-w0QEsU8W<|%>nO<7o+V< z`zjcq25bA#l}-t0#X=diwby15{bk0g@5%*#aY(;FMh$vn4VC#Y50b66&uP0tMH6Jc z%-phksLZL2@p+B=NUvqS<39QgHa84D*}e*IR{sKB+qAr3`YX<ms#)a|`?&)#xsSFL z`5Z>`3b8sUEau#aBcOjPbhnB$>1}&=5FJLzo79&#F+iq@qoMChTS0cBC4cB{C-UlF zZa==O679)bo_=-31QNSkI_I;u5jpccD|jjQ2ekje{TsdX2?$s(AAb6NF=#CmRxXjG zqusK7y}{x`C_^T)(%rosjw#1}%lOd?Dx{gSnui}2L6oHG?L%+Ks90<oc*y0b`L*!< zhvHPEe|sc;`5A0_j}ePCUNwNiCf52Ynb)9s&<*Pl-6QuZAm=#kO+geD8Q;CWdRu2J za&))7t&7cW9EH7~Wz}%s<+qoVQbMZXl$4oWDA9*>J$=fp1wSEDng6pC19AhhZR(n$ z-NqdesDdvVygJd=1M8;teZ%EgLitKxl+$4z6koN=@9I$sT5fZg?egt5G`_a?gjaAK zjFdi8d-Grfykn2bmL>lI5w7dxz8ZufCjN$;gF(p*&Oag{OJ{D{_lo`i;e<8S)-P#r z&2Ccem_#~MHnLd#tnUK)ro_FED?5>ZW0FWnbuC<!-SwS=PJxRq{#nMjbNaI<x5vU* zy5aNbg{H;nqo9=OA@vDIR+VX6oOzqYq{0-`@hwQ#1q9e@1$@5bAZp!Fdy}<!(DClM zYe-Wki2>>n63s}&)opHV+*KbpRRvDIH>;8*hJiILy=Q6JFpO#@T)U6WCwfU|^QzY~ z5#_8KjwI*TA>u(}PKqur?f)Aj$ChSlw7DA5HQ4m_s^dsXrroh#*c`ugQeIU~lLFX* zcWc)&Tn~tP>+G^FQWgUgW8E!P<~IdB_7-QJaN@!w3JZo@E>R(QL^fu#Kp6uRW}x7- z&i)&+R$wmvBHx0_i%d*T9Li;Y4%Lo4D@Y|nifj7nZ#Xb@la+LsyiXO_2`oqu^9A$| z4he&LZ!G2$z`fz#h55D|#Sx1aGVfkUmzYC##a0FjWwJmk#Cl2KsaoLpscDlF*MZhg zrc>97Qb0u7mlB4%rR11pEFgSwOz;E0k?wb8Aon9YK(@IaiD>wSy{Auti-JoKr*;L* zbIN?Aq_(GbqBJwNMI=jc4wbuaxZ72=av(hQ$CK}wjsF1+1lXR<+SkPZ=@*&X3YE0M za_=RjS2gqCe}VdM`$mFaFVgUB$Xyu4q_Rq@(NlPI6wPz?+$$iRR(R2gX1$gao<vm0 zGtjdBQeKDL9=zb45vQYh(4qxmwoL6kVE)7-n2$0JVJ1Ix4;_ET&`4ZUQ$<ny52(kf zTPG%R6xWF#KKY6?0QU$^d+Sy@D%NefzGi9+{9;ekoY2G7bSg-W+ha3F(3(dQo0mN6 zg3_6vkCpVMAg$3#@&wNa_}n~Gm-fhx0lGTWP&4?n2N_+@IH>b&8hz)f_E_$Q%X&F} z-5@RB0WXp~kBwkQ<W+CIvx7$`f!9X0#4k7#PFDQQ8GGTvn_=1xU7y`a5}G~mg2d#U zwXuSQ7%%-$mp5PssTEs7Oq8d=?L%|Xc3hGv>-jtVGxP}tXsL5gwAQt521x(mpw#HQ zX^_+8G;dOE!lC*l-6u}qI`I;VZA;a=pl(2~U{<mfUi{{ib|#MY3F3mcsw8Jt|2ZHn zNz`!IjSI?GYO9&K;bnGSqs?a=I;@^|fv;kUgu!k6DgFm2@a4V2gxVYiNaf3VnNFs5 z_#AkTOxsEY*B4&|C5I+qo}+wdd@#B>Yo0?w5<<z|bvTl7*ffyPaHga9IL^)>nD~!I zh0hGKcbV5i+BFID=iLLaaS@edaUJJ_9`(1o3N#RzP-{6XJ_j$@TH}^tYseAO-DAT~ z(h<`+$z{h?$5G|F8&Pf=HRz~AWkFM5H`=Zy%xt%o)C;i-yCSfY8M$BL?3@*yK=Yuo z`e;>hM?0*#!f|Kq#}?3!yq60?WVmId9po$C4K4}aYwqCm%C_8Ai7a27`}Z64`a_M_ z^5J%ru@l+b3C@Fhf&MUeLIm0w9K!u`j~nS@J*Ycu2=IyMge}|Giaej~2CIhYmwkS? z26*-&YR6SO#B`|EuG-}(?7DSHPTHmuog6x2t=K?CW8zW#yJe_oQ%>XdV;4%H_@3)+ zkBMf`l{loU$==HVbzLfO(oV?(3rBUGj7xMlRDLM-t4=L&m8xGMiS^{8s)<d#I^Ni( z|MiQ^-YvoC-=N9SFylyE>#>G~Z~F7$a^MsFAQmb_fsiE2dmZ$C<lcC@P{(Zs1s)?0 zOLeuw<VfywZH|9}{^GP~WiI)4_bccs+T6V3QHad94v`uUw*F*j^luPxVPD?Vnx7yj zH^=p2>mQJGu1LKFe-8t+-~GhNkJTkm6n^oxUU42;m+<aO=I8II#!$aB*Rl}t4GMJ? zm6fAeQhqnr)d9qGd~iqTH7ZgwB{4<BzRHK{*(Rs`)RzB%?A%t49PRCZemi1y!E-vi z^^1L=(A)|>7Y&(9-hE_%d_139@2$he%O^z*OAj_9!Y#mgr~5}V>|$(rHX9eUQ&_GX z%U%Lv*-0bs<zK@g51)48WEXNL{eE??&D$;bn0~-=UB4I;P27C^H>e=3KWqK|D0E{v zD_hW(Ksa}~oING69ir+T;spwERTJ9yGp{r}dwzqSi9gof@S_-lQiU>pQp;eW*RW*% z20Rvib7B+%OkSKHfR(H~c2~<wfpq+i7NO?&6He0G+_#&gLr>0U*TEUQOGVe_q17$_ z0U6xBvLfzQJDLZ@WS2}8UMfeg&Ab*z_jfZu{-*<C+^fm3AC+Ia5jq4OJm)#b1Pb9f z7xo6(F*qa!=x|4E<*~YMhDK_UUM^pz+tAH?C*6I8ZSYR{g+*;w9=gD%)zZ!0hqj8+ zB#&?JM*jvq%{iE`M6a9yqH^t`v>twkTIyQPkeWMSo+EH`pX-j#qzsq`$^7(`D;%T2 zu&0jyCwet}@iE&OeVu~tC02Z-a#9!|wYeaszSBb>M);|lKZ`^zA0E=Yhi#!nKJuDm zcRAt{`pBoC)dla)3>FpX|3v4%-1gxP#1Hh1n&9$^igw06`QUwg2%2$?@)43!3zYgF zoU~;Ag7!N-SiG&j51B1(m5eE_2exvRP^*{yFm>!H_27oLi0MG4OUS2lz~<`r=4nC! zG9ay>ULMAEBOd4<M>td7MdgPbS1}3t>aI)JSxqxQ8~2|1a;+Fg!ENv?Fx^5%Nr^9C zv986f54Y$<lICy@f8f}*ZzrGj!ab3DQ4gYVz(8!&9tvM3+LVP-i*XTIdEs;A6X#mt zsZ30=t!pjPtrUEutZ0GVujt%x%zr`NhIg{A;WW*4;B}oMUWZ04fAlZH6?R^IFqRAq z8-T#+$ONX&WK_C*6RDUlIT!8e0JBmY<JoiEsQ;DdcLpd<tLIzh)DH$|^5K?T{sNpc z#F^H_^|BL|N-N_weeFmx>SXP^)&``U*E6lYhYEH@`j1$GN+4%Fuf;CSHuR!EQB@^q z014zwM!ZhL;X6E6L@fmhU^0MoE0SHU0=c+^O^1j_q4N<z^w@_(DDB>jW4AS^aFrNI ziDv17@O;%YZjKgYXmr1*Ho1iXTD&{GE^lcKyxWl_ze=nP<z+T~3)zW{5Whk9eMMB; zurs17y0Ba5F&PE8C|CaIC`0QwUU<~s=tpU!e}R&3Y&E%*){aXuFWVrL)rwQ+J}p>g zQV!6WGO^IL7QBni74NFHBgLuNH5+S2(DyCM`_3AUAk(v~Gu<oOQF+xvw&%taL@3Ji z*c*I@6UPgZZ1nn(kxF(u-(U+6S4)B?auXr<Y+$blPVpxdBzxUfz+Md5;0G^9If~&^ zqQI93`7U5Pl&>j3sbql2riSm5yoXRzt&IT(F3)E*GHN6lN@IY`%Q6-?;Gpxg9;*W_ zv7In2My5MJA9yjRJR9L_L76Qfu4Om6(dQ`ROuw-Pcto~|_FbGq0<J=vXm;#UD;F`^ z$8~%ZO=ULnJDeIqRS%}~YpBgAYf-tgHO_cj{=>p*Z}&&IzDo4q1il?Hd5teywmS=q zA6qI2wzPxq)Lw3@vyBYUT~<Exmh)6NE4+VM6l)3Gh}yevEGPr&_H_-rf0;u0=Lc83 zZ6u8#E|F4Moi{(xfyr|-hpUH>NjbCYpjsuoStZkt9yB3ls}{T6NBe-;WkUbDc?-yK zs~Kh)mNP)bb+^wJlly>U_TkLS$zm`WI1ur|c@RDxxc<q*bQ*PTY!co5xDT0o-|bH5 ztHRyZCP##yVl&NO91;dCJI(p>aZNcg`o4|kXr2IX^~xS!@2ZD5W=Bb4R~;&?+sqkG z%Z7Q-PQ&Gw%!I;Vsr7l;<Be_5?JW}%SA#1jdma070Otekzxw>+mFF$!8+UO{3n#uA z?P#;qB20mhO<i&8Nd;1LnRu}pw{`f7L;4HEJNVg4O}YZru9DQS=`9C}-uNQjnHDgz z`@noMs~-I?P?!@Zi@9SVTJWCE6Tmlu)b8=U`aIo?W{pB`M<kacEvJ3iNur}j!jWuv zH3Lt}o~`!fxVWv~`c~d3+*DSVK1-?z4D1EB6Y+`8dM*C}<vh&xG{6y%ViPj#dyK!s zk;@8|729!u%EaT$M&WmedtI^Xt<iFHB{qW8|7sYiFSfoLgKL9)*0{U(Y#h!J`~&*M z;Xcb`)O)ZJz4IwjQ@Y-P-yG@hSLbW2@kFtNhT0@<FXP@uFhDLptlU+4Qc<V$gp-r@ zA5h)fMDJ|w!T*4k8YD2u+#v(?M)t+Sm94;XWNDG^&VI%xn&%vBR`-?6{Rw+Xx%Ud# z3ntJ!XqrvmL@2rsMNPe)l8nU_P$gWpC9C4gX3cxjf>V7AjpFK_vro6tVRw8es{pN< z0ZJ}<g4@eZp?mk|m>%Qv!TTQNJfQYK!wXw0ZW$bq@=nNo;8`imb4Y><zDuv#+=LvN z-kOnX3z3Lp^zjt_T0~?YSZl*E1OE%evWZ|0eKUdts?&^RaY>H6CEG%d8>WNU5u1gr z{u78gt(3XOJ_l}@?bP6rY(>tNBb|$?yU~w|^u&jh9K_zXRzhfJ2MMuv1(!sLjx#`E zRQtN6`%55*6x+xxJ`82&&@Q>YL6o}J#nNCg6|En8;&a%yg#pUDz1jjuIS_YR5nb`e z53(=eiGA-NikmP@4RL5f7X=N@-gx^JQL|lX3ATOkir{YFnLr1pFRp{>mvC8K?Ne6| zH9w#+Kwkxz*kgHcX~vd4oPMrNa8YA+TlAeKG!HsjXx&M?#q~kAnuStbDCl)ri1NTU z9P{-r&}81n9j_B9kf$BdXZkH4l6z8~yuI2AN8}s>;<vP;UmOw!?b*T|#f_6j=RxNC zCbrP)ac0x%Fi>?JMUSebx;t^b2x^;rmHxLR&}G$|Yn@F%{#P=^^n$yvX|Az-HgyKJ zd-%OqlWajBi@xHeryk@C!WLxSZ$rDv*Z0-n6wTRyILmYD&0y_kk@d`>5{xEFa!5CJ z6@gc`FIU~@G;)bBs(T%d{kiJCT6#Hd(39+%9uZiAlFNM0rnR+0#aHJIJkFzFav(yl z)2|+-LB*N;aGV7_lA+G6TY*mY8;{m{H6gzc``5Dfh8Un7(c)ZbcZwMthZlTbEafIp z+|W~!OqWYOx~Q{vXERSc*iG|tEPq!3a8lnyhI<G$cUPk)_&~Dqc8^e8G_DC!kto8A zJ=$Aruk#MM;p(=JQL_0y0)2iQyK!q|C(MJo%}Sd??Pkz;%yK~o`)v4p=RJ9qUmb86 zd}<U{%L4am-kU`w8L)0ODb8%hVw?f$JfFeE>GcQn^s>aymD;$tn9Vzj9*!JbpvJ-Z z^QRW@;e7k*`JoTcuPNUk7KknAT<lldxa)z~9^U@&XA2~5u9h~?_yMUo)#))Wux-$w zPUE}tICy-O>%x8-G|yQ}$~|PpZ`+HE8d7!g6tmINx{N5reYvPpe^L8a#eOi6DI`}F zw4r5wAC~RK35OnHv*h4R?Drvx_|J*710gRHu+GpOjE-w*EUPD@RQLK#!PozQqzjXn zcYG;_Rj2Q(3R?A{MHgK^ZCilL^BXHAt?6z>qy{BgBvp7AZf`PK_UP&$GW}6&8S6ZY z3he?zy53@k@^8>2iOWpBunoOm>Nl)t&!n<s?0Ll#Tpdw*ug-cYml`w=QhNW@bH52L zIxFGPpqJRg05!gG4jB#~V{rbj5mL+V(CVQ<rE0WmgDkmQiG~75i=MuU9z$Q>v%TL@ zRE{29J*aMqTiv^JL>t9s4I#xgpN6+y)6f}n(V)Si6P?d!%f6r94ZiVWTFFwvvqxT4 zAsZj&0LP?0hO8IwSYOSZuR_AlRlSQ=;xX`BR#%l%8-+%Nfs{!?c3VDbT186b^7va; zx?@J7m}duCb)El79A`gzv2rS<?!X9&=r}60pSuNx_4NpK;K<A)-S6Zbm*6CaJ!!FQ zYGhdIN1fKpDn@OY6D!$PwEcRn2HPEL<X7T=>)*19g{^)HOpc;WM%%3(rdKdzorvKc z+~wWHkmbp|ZmC;p(LZESD0}1%Y->f^US+X+t?ozjvi911@GZ2dK*r+V#UoX^(7Y_k zu)K3#`gHKI4k-42UJU>DxgKOC4RQT-bhXs^u@c`3xb5efnDoZbzhyPucyQ*tWfPj0 zb?>4mvEy$0Kb|Y-#0r%KiCrk`Y=th-S%OTS4zk5uDMmp-N$+Faexe&A;+vE_8c|$t z#z|)FB!;X#LC*WnM6`fO<iWz`sor1j>x9CU#*hpulJ%%nQ5+~lVT;wA*2vZTN0y7h z0k7HQSlAHj&AicS7$>fr7s?8?19|VoD|WDV{F2q;Bcd8`fsC&0*ndphD;cFeSZG$9 zR)s`pCv0XuVsoBStnmuoTwFcjZ&?P47G*d2hTyeOzO`U=Gt{jWwY;ztpE2?HD&^au zcIW#5Vq2@0QBa+NONz^VP(Ry&?6WoV0cYM#jKUYXd=Ba{cE514DIK^}-{+l3{Rv^0 zb||U5E=7Hb!?=Ru-(zB4)_Q9<9xu;AB*1K&6@MES-Z<nc<9C3L?!S7Iw|QMPx^&FR zHg9t$h{UyNO=W!tlUlFqRJ}AX>B~H!u$}nFb8$G`KO-gHhS-#7x>w#&8M3M>8zn`I z`;eoJc#M+|&b=OEUu1OYIuITmMEkN*B+$WZeBsu|U$P3*jTe@%m!cgi?`6BWdl|A! z=g!ziAD%=~=hH&IMf^lBJF5k5jyHnwf~*&%l^NiE?=ZVU3W3t}`|kg!OZ+8^BgLj6 z@b&=O6O;6q^sXDtvdVNiW#WbAw=AEWo39Q(0aV#>)I4@qCsK)h<oBBECaT)#Wd4|` z23-_5c<*UzCHm{#fB0d{xfwT=Q~01Q%<e`;p<8y}6}G|+%YMr;vR-do<{Xa1WRv`Q zu;bD_$){Awst+_e43B4A??U^RTgZJ*{##b(<Cjm}m8j^n^sWs54LB8K5pBq0Q3-OX z_=$t%Sye=>>eJJjaY7>{!%6UnKR7=4IG(k01Wbl=wz4=RAhCNq*^jV|<ge$V2AFs@ zBD^jvSz)m=9{03NHMc3-JAzJXK9%4)%c*kLWVJ=I=ueyoll^(e(N_?}oe8S_6krPP zes)Uk8rov-;^9!y_)FGQEN4&V@>w)}YHUQ-5eLk?cs0F%g~pI2nVj>IYEg-(<pNJ@ zt5ZQo;<R?0?FiJoE>1fyl8g7cZ@_u6;g_ualh51gdnb{~2Za+yvs1xo>f&hZ^FcJB zIaZ*nIgOs}NNFf_szc48>YIHu0PJ|5oU)rvL#GvrFO=6b!D*2WTH4qC|4&)F){b7@ zo{LMI)k`ann=z^E9zU-q)JQ=_iv?12Q!?OOyfsNm9Z+`t$nDhi^$>6Gq?2ve_e)j| zd!$qvuHn&j2M0TZ<8`6xvYx#~1}cd>vheOZ78Uhd`;<~r1{kvPq&%;9Z;wU~73|)` zME_Hk<tygxt5;Fc$vOq*RkG#C{f1+<rrTGBEV-{WK22;mg~v3727PJZUNh-_d|x%_ z6yz=4dZrc{mX!N=`*-|$u2J`q)#<qYY#b@ksq$?v(mf`0`8y7dNN2qn^KNt)eJ+6r z`qN=_?Lh=BDl-qQuWs+Za4QXf(sOpbZX1kEU)vqpIPpuC?EVP8qz2rV)M$;78BPN| z_wz`(2s9y63#l;Go*}gO+ImyczENbi{8I>rO(2SsJgsQGJ_m;xiZOi{9frHsVpg+` ztSZ08eH%$tRcM4EONIYq2T9;AQV`xfP;E(P$THh$ysBpPcjWeNUu)3fR8UY)Zw7h# zKV<pq9@6rb=s=Q|ty<a^Q>f=op&?hqLx!wZFMYor;~hmS0xx_%ZBm0i+Ml+Wh%bf% zibq10CJjK&BdhhQ_h)|Tcui3C-49h<yUkwkzSuivmCxnjtQ=h>NL6V4SP$<Iy0>;k ze9r1A^fWg2NLoBD5ERpOi`~GBAxrM~1HD66W`D_|)UB+n;lSg3aiU^KChpt#KV-S^ z?f7yd;tk>w%MAP2{{gKMPwadvgBy@E$i&&y|NUG>=L8;}V8d0?Yt<zTS?AClI!W?L zTLqf>qH*xF5E(hn-K`iknMF+d6^|abPDYEX-<PM%l_A=_+^kI(Xkg}k;q}_$o?p-P z!JOBwPqvLAtK|k)`y0Dxln_bmY3uAoI*G#<oP;@5f>!s6TAj&2F5Ed^D4)w2vK&9{ zDb!Et`X$S5PxF_DZMcBGkxs&bbY>N5px{7#`eT%!u`bQikIs-~CzyD|lGFh;_BLCU z?zW;<!wkiOIWkaAmOh9(LHi}Ee_0E&MN0D@S+Y56{KG=gvW*+NXYnC^{<-`v>^sVu z(gWMAw9h4d?L$j?JRhiLQvV^#uAXdGzNQ0NG?X|Uw_sDb9kP9k!L}UKXQb7tINXO) z9Zs0syE1|1WhwBb5AJ(`bF>fU7DZ+Zfq)u>4t@Mv$I=};>7&$73|VHkuBF9FmY|39 zv+)9W?I~}!h#Wpc{f{g|`9*4<h1;OVHJl*m&A)Wix#msFJn#vPs>iZ?y*7>RHaO*^ zE~!ME&ib;8RPfD+``X)^*QOY<W_TsW;!1jv%c>RPX4oC~e`T4z96OP*s~Y8P*sz4D za1!~&6l^RAZbQ{|EV`v~<49+L?9Ly1@$d8R%d`4YVNX9pR?*hsPyE!DU(Yo!>)Y$t zk!5N_=)-H?8<`ai=%Q7vL-5=r8d6wvkH;6!eTlvM{4VsujR?CSZW<Z&9lY4L@^mX) z<m{aB2>Dx9Wwo5q=OvlwD2bm`wsDvt>qD*1;apsBV_ue-qq^s{>Na>R%z5rf0TuOj zmz&1!E{DiB{PtECyMH~G+3V(pu(QLkW!Ja!IUX&j^KEPt1XB=ioy3~@IXt&EHK%`R z=|TQ<HW!1@7I4&zOt|FVf_!Z5v=yE#g}z+zFF9r8f5>tfV0Jqq&;rW}ZpK7-j-b}^ z@JFIOcs>0evgn;}x2?0UfZbPONsf8rzhqsBSS81V^DtXZrApR0w!jugoq?&wNfi0j z)b3709oo4s_u~q+e3Ur+GE79S1!h&EJ3kjl7eT`uJle4bWGeKs`qOIA=*^w!GV zt+1T8$2+wMSI$$kHe1w`jg&O+2q#81BRSdu&W?_F6d}7PN$X`dR3Bv37jW-I#YZ<? zs<=sqCZX5)N#}php(opNeT5of!NK!K-st{BE|$HA?(#o?tlFKYoblLbiM5D3lk^IS zsRX?7*J*&qa<>u_`3KNj_H)u3i@QL8tiA1{{ot?X>dHU&Fz`|<3>fq_s+M4D{BK!T zx-0^c9omssW#}}=mli|>65oGn4ME6HEq*5r8sfWHVbY&Z{f8_QQ}kT7Bn-YA$<K-E z_b_D52F@Pg$gM#3-wcNm*7PCM?OU$$^G?I1kez%FCk9X)eP^f8=_c4dyNr^ZLI3q! z`jJIt-`JjlmQc;|@lJea3Ev&DPOt>!l(G;@GV9P_=jV+V9skH0S~Q+ol|)8%=H|*O zOK_c*|0B!pRYCXK)oF-c#F{M8(}wcLzBP*ME=Om39Z|E)07F)E;E>?{_F0@%6rjEi zUmE9S-3$5Iw2Jcgc|xFcNqjqQA}}vY%h%(Jn_)de*7v2kgK4up=)|2JqLrOf;Q7eq z>Wig)3|T6Oyj<74_?M1`tmiA9)=?R<zErvS?b_CYJZ?^^eC_K;(q8L*6<3a-mKmSC zQRXRNk-z4YIa!aSVz<2(F6@VkvGlpeZ}NZ1no&8c6nqS~Yq5AOb55ZJxa(8nyB}9F zWZjRc99Z*Y1bx<<+POTI4qAz-Axit38M1a}1qLfk<-@0NRJuCAq?vgqD|NeEKyWj& z1S{22E@0y>HvEqexq$v(zm&@bc>el@Lq0&c<*&a{k`L(r^~)vs0MB2)M96<T(97P* zMdI4KHpPv?OdRqri`(Q(g;pJ24`CKEm}-9uxsfpdYI==f`!A9~!+VdL{CXNZJ?-K= zcb}bbAjJsePY=V99}1J^ic_F;`OzBDei~GNPLA7gmIAk^r(IlnXb`pcX|3xZ8Rj`Z zHW<Ec?WV)XeL;@xU&$l}Na*yfwxk6V2I$=Jb1C<|*olie1}6qrPB1_!tM;)Tcs~r! z9mF4Y^pHVi^^Vdze8Vtzup~~tmJIc`xK|%3XC^l6Or-PRA|67l<Xam%2cVJP#hWI_ zOk|{NIXb5__?ttb!93`})jN0dZY&`#dtZYDvmrRTnj=$V8y!TB=oDs&k-=@tTCr1M z6JVHOJ*$pOhRlOH&mSYb@u0!QU45@+ACuv+d#BNxeKc@WQWnq79RTI9MO$a?(7@G3 zqNYG|4EQH>7MxwpO9-gVRArFfOo5Hfb)_6dGJHJ6X69Tp@E=fP^sW&7$q~?%?}<?3 z!EsW*L6c^5p~<=7|A0<kX`SM&ABGopS7w(5E+QIFom!@qHpAc?Q~tc@eAWQiG!4HY zZ9Y2=2`)LE@5;$=?a}Qodson5$Q5n0PZ<D3jt^7!k_TWO<lebr|GE4D*jrb}!t{U& zQ9NRoFW@o4wJ<aK?V=f&2MIGjlyW{yfxQ`n?(`o6&?MGx{^P<p$d|7l4HO-Mv9J8= zHnIHTkbZ%(SFHDl|39F@Cr2s6y%cz{C1vLkTv?`Sx;(rb$4P`J%dI!N%*W7Z>BUpL zZ)eG{LqUbo<4=Ja=_SrG9Mk^+8LGp<R2YE8SqJR=rpOR3THjDyLWkZ&(w$kqw-kWF znbP_LgP<nStSE|aQS}pYs$10O!29)4k25E6z-};e&bgWa*rh&@JYqfwhg@#8Jy=GE zmBU6?!kehT$up)`nK1|(BxDTzOR3PNwd%39!XWITSst^}r9;Tg{1;PdR8aTf&0T{3 z`y|-_b-tm2Eh$8EY_|a`@o>`Ya~ua5{Eb&=XY~C6afQ7*vgI}%zBRt-;xVAX%M!&C z2Ei1#tn5JQx`Evi&SxzG9#bIRxY_fr-yj2&yq{7dvXBb;?e}-Y(+9xzH>b^f%*3*K z03PrQ_@8Mb1F3^tDXN0!?N6b&@k^#SrNBXW?PMbrgfi=&Y2#9Mhp83s(~GGPEYYVZ z*-r<xWJ=HiRWdM-@@;H4BE$E!om-BzV%KvWwp&;H0g+<8u8^KlfqGnc(-X-_xb-=| z-_VQ(a94Fttr#6_!!MHuP7RYlEquG-i3TeCSh#52I(I5;;MvE2{|g;{EPrD>HZlM$ zRpjJp%^?OzE3kV>ydEyh{b6lWw$3CJN?TNU$I)SiM?Fbm!7#iTXY*Q8G7Nq#+hzfS zR`1)I$eTiiZM)y9*?p%lI8PUDav8BE;Xf$mN~x*FyQRw>RM|EREPgjW*Ub&VOU;GB z-rolppt?4pq7AR;5c*QkFKFx!DF4n2lj|KcIJ3Qz&HEz-5@R?8y+X+hkXsO+?*42t zShZW;wZi@tU&D5XjWgr$XaVzbI;jL}Ca?BpVD}IXPwkSK`#ui;1|4}96jQx^6gX~~ zi=XSG!REF%L#=pv&VxQYOS+|anT`wg4_T&X;GS`p9!G_Ir@=|n0~YdLG>CMZVm}%> z4A<NX(?4CML8XP<{V4mvUmVi^)rc$=IwG-%$^acve3eSV)6!_dW!P1X0<3lcZgv_p zINoE|If;MwGUk7^F^UF7hcB%V&%>ERovsIOJ|2UyCT)reg~|XOw0Xrew~h>Nq`vp| z22&y2h`WpZ=^zMg7bQjSIY@&!6D985c<_uS2Kv4}J_x~Y>E1IoRIqlv@?tao1V3O= z*^#^n7&y>;LknwOIq^X7StJtyWb;8saVmr*_8s!8p+ZPde54qj=Lsq*x8()!Z2B;| z(pqW=b_`uy<i|$`_@QztW`xY(^huJQUoa^jfKR7sT!(!Jp>N5zaHXaxuv3pu7{VIP zgXC84?UPF)gCDVd;nLIr7`M)1=^7$KUG~X`8dt{t11j8837VNhFzlPCs~k&#Fv&y~ z*1cqS@_3W5JXRoLFzJk~BrBmsB5#edKZRe_Z;fpEmubb|h34(UwJH;lR485}*hoZC zK%v)gyUePQ|9~vWI*-y~Xz)Qp$j_~B5K?B>o;Zt_=nJP3V@M}y43L_GoguAj24dH( zQ$28qi)bK4kAA_M6KUhkb1^1E_|=Jv&#t${^L*fW^}Sou;Aa&t{qX(}+|e&zX^K~> zPSw|ZR(LSYgUU!_0z;p0D--30hl{CH*k8xH+SYXl4it19OWQODhOMC=c^tV2>SXKZ ztL$XBq+zK$#zBFPvZ8zsng@VB6?BU4&KQXSDqHzgFuRoowHux_rI^hC@8*{GS($^- zemr=xQ5a7vs>ZQRDpZg<cM4v-9Akjq^&GpsPI?N&cd}}8;ayE`Y^|UUu8pZES9Kw) zk^zD@aUt2|mj^+*u}bA_0uAE&j)n%3N!WcLdNuF09xlFRQ0>lw4<KauEl!SS2ElEw zu#^_>2m^G*GN;*eU;?HuvMgVGf(#FDTLn){QlK=)O6&+8q*X{dyS)f!+x3V$wgq5N zQslKDeDlAf%;Ig`JAvCDhvcq7gRnfxq(mZy3ZymFVN<w)JyZ&6y<fbCg|NQ1eZdRd zGix4{93E-p--Y|$tZs6WJ3#{uiA8(w50ha$>gdzxmqVa`>Oz;$HvH*$zlvKa;ttd= z3c@N>=HTt_pX+S!<}(k9Sa@(^4<5{RO`D<>H?tBt$!!gqF(dGL<mW?DoXrfFen0Xo z|11@h_TStaZ9fbP5-JWRPfmhvc=z&?1vn-75z1MOTiMQoj&4|Yqr{&I5!y0$T_k9* zQp`zk0JktOf5Ml45D(s|milyK1ukOmsJ$}(Bn_M;KK>XLrZYIFsLU2ODn?*KiZx02 z8kv>IQ{TgL+F=yvC(|n*Rt<xCHd+6sHyMHjZzf3xQlWprmJ#zU<IrAyG3z#NV<Elj z5?YAg-1Km%?(*IR4A5=93x1r426c}_-AEUxuux0rf{OwfJSV3PpRQ&m0x0`#ZpC{< z;p|0@=+{idktEW=7d9^VEXTyRLJ)_Z|NnuE)x})p(*|H3v{~KWKsRX?VmHSaTHq7Z zhDDZoXT5R8z`sDBUg(~&z`N<166wjT<rMg&ea5JHWDK^D++Rt4nIyyWlswmf8Zz9} zS<W++&P5z=t`ItsJ^<f7i5>GgM+05CxE0cV_!B8aDdgi&)%C1%7vF7UA-3#yaI7H> zLCaw3=#TY7K&v=2mu^mm^?QbMw0OxdQL%8g8=oC#WWpb8m>7WbIXjBb=m3L5ii^~B z|EWL702QBjB$|j<IN|a0jl1xmnFo2RFMF0+g16&;fo2b^QSfRXfa6J<?GEBu(0%4| z<|e!V8E<XX(0om0fYuO4Kl?ilf=7ASe*dl5PA!)?b0rI(|Mj_a<Hr*561nn*TVftN zL4U-&cn+UX=0V{iGRzmI>5wQdIbw>_Q+H&X*KKXXS>+EZRrU&!A>hNo<6KP(3A*1% zM|lnlq11WhkSjl4C#uDBZh7EsSkPwTI9_s{o$KD$rs7I;2^%l8$lx*dXnLhW73qJ2 zl9z1m+2VmWAr<8vhBwI2ZC^ikv}Gyr^3~7S>*?%7izM2W@Qnt`k50jMf((`Cq(V}k z;8(86y0xR63Vb5tJ6Gbg^xJxk84pFsF!D;Us9A>sao5UyFG~->!V~g?L8MH4d|q0r zIoeMJWsOTchj&pKAP;Zemro4X34;rKigV`7M6H{4+RcUmxOFXa;S2iMe?a*k0{7)e zvJj*h>#L+6RA~9SC0tQ=2ppApRv8QrKtbqN?}~0JTuM&x8Np-dFNH{dX*3TyvX$EO zNOS_E+2r%j;Rn->zyB;okPcOxMWxK1xKHA5jq-MESt@sA682YYmEd#5*(B4o`Zu%i zUhvw!%NB1c8~B+7bFYx$zGcNeuZ0vyFMZZh@QsJT=~mj=xl?o+%2sfawB?KOnjLqf zrn`dz8+$~O`thLqH)u7JVfm&h8a%Rgn0vrV#kDkFZ!w7;f@`YJqir@*alrN^ABUTN zK=f(#tJ^rnAoRKD$){Kz2L0k>vR_=Hfyc%l4(ac2BzN=Olq23${JWwB%eIdJOG1is zJV66qwSnT>U4vlCUguXxrbE(-<;{`A0A!f-ta;$fL(GFh4j7GWygdTW+Wm4#SfNWL z8>gG`;LFsPO5f%{W+=32TYa%!)d(1zw+(rU699!sq4~>n7SMs$UiRT-4GOTamf!vk z7`*MPP&B@F&x5v)2Gg?2Ct>2$Vei*66HwX09-h!Y0Q<@Xb(OB;zB|TV6>aroDE;JR zm4f$-hC^}+BI#rBCi+JFQ%MZ^&Cv)mynpKC9}Y?O{VMIEU4KBDm+!6%e!xvQEi1d= zX3I=O(#{T@J4*)NfpVU~M|c7HDbX&!hyub#K6_lp3)H_sVT;zw4PphhyJ$J-c2XcT z(a!MX=0O0#ehn#ncAQse(wiri<L)>K=0TrY)~$<uF^EIdM(gh4#JczHu1^c`Qd_*- znb!&L>&X6+Q2ho9n58kVIIK;Bc~I;1q3B@GF}Sy8#fQ0blhD-mJ;hB6XAvp(Y|X)G z5byN!pZogH!nOm4ol5i<5YdKfgC?Q|;SqDrl4K9k2qe{J-9Okg08c6m6sPdgsC1w2 z({a3#N$}o1DiSaT)u9GKd$&$N%G)!i*5jkvrN>&{4%cxae)7$jj3gSct@qt6kEh+g zK`wi_<WJ%^^fw3>YG(B?<C($J_ldrnL<kkyqY`zCNO)~ueW9C&-wv<wd0#$MDbk^R zonTrJzUQ00Ysa0*Mj&DH!EZe}qwrBfGnKM;68;T38pHDQ9UkTOMNjtLV#f!I-QB12 zxp7v(Z;)Jgr&0rc(5*rV_KEltYDzUWbS}oZn7SEFBq2OXqxqv&uEHAIXYNntWS;_u z+)Dis9BePUZAWI-<}t>r<E{Rgtcv%Be}g`g5=^@uj6&iCpS+?ed=>LMl@^0<!OQdo zC-}<-V6DGKah&xG{5&^k(uhCh4bEdtd)~1Sl54w22ElO@cyxyP&?J?{0L^WW;ZVh! z%B8#KFPkajl`Q~7B!%!AfE9+KW9Nrl{RXID=g9f#YJ5^YD1kYS_UcwSKJ9K<s( zHMYZV<ir^{t7&r<!rd=Zv<)xGlDhKO195F8(QiFu{a6-aX(35s#Dxi;PJe?suNeLO zX!r;8A#`h#Q5uZ_^55Q)aYGj;V!dccnUG{B#0_iKtitns9wZ!0IbPy51`Wr>-)^Rn z;hbl9?0026Hrlr-7vY*K%a3o1Ic7(N+O6RyTJgPO59ue9do2#{=<=JrN)Due{>xQG z=kvzkOG8h%(=iHs*Ak96b8Z0x<d$9iHSsAkv6sTM&Vi4E=pB{_TiHj3&QXe@l^F}c zXSprZ=))keX9*ql>%~T?4XUok@F(LA<Eom&(|Dev)$Wuyv2qqjS4SV|na7O7^|TK^ zAMYl^rU-8z!w77>`VI0N<4Kp${x67}urg2#U)eI2i`gpIkAr%9;}gK!?C8P0w_GqV zxZcQ-4PU`_>%<Io<+2esnGBVM#>c?;WO33Pyn_DUU>(xy3r0u$e5b%nC&1sHorf42 zx{(`&gC#bMmTU~6O+l~l9s5yysEF9T>J_K(9Q<5c$a>gm4(MS{D;MBOQ708$E_Mjv zo3Uvuzd+0keA!=%PU8)%ZN`X4`Zx=*BftFNy083%*z#rS7u1ItoGGQ56DRm-Bxu{O z(cpCecZz(bZ}Vp84=9$$akx&Fg_sAqUg+wS!&ht1N5^e$6*3bX0@<;Zc;=|S_=a=H zm>8fZL3gG!NB)48RmxNp>Qg~u_wLG5xNOnpRMK8mJV3QZgOqZlNK8a_Bez#z789}H zhtsVoV?pApurrTYE|meg+N@=zzlOp9iB=ld+`q<71o{n*EOMj6<16HGYsJMxO2*q; z0Zk*YHG9~ef=|%%AmhZeW8%{@z}%Qu-_glT_@B*K#`;p=Zw?8AES<H@B6OJvw>_M@ zwBqn-=7H%qg(PNT9&~S;$`c>_eVgUgiY&~yiI0w9c27A+8K6;ri?Z&VDfnL?COI>U z*_{*yNB!l_z_<AR7|8p`iuBE91q0MvrnUSno`UnB+2fOB>6c_sy8AxYhnWl)Or+jB zt(yj)kvmR;5jd~zN22dJdlrU9j+tk*f9|3&KrfZk7n);p>>1;o-#}f2Fm^a5ZR<G- z^PF8z-AN1BZ!;6>_VMwX@W{<kh$kOFc&cy=F1yAu32U`gm=7w<FhEW>bnd8%E+(9v zNIPzYQsAC&g5et`W<rbOIH%)T8u+O_+j(Ut(|<s%FBD~q@mP6Vc5l>q*$^nNwpiVU zz09`?Ny}9QImf|NrI3Z(H_8C5?@$O1y~<DE0(8$du~8sqvT5Ol+F`IxRyR<Q8-YNp zE;DWq4F2MqcIxIB=mZiQS5FQ?v146a9k!e;6K?H}4Q3*g`R%0iYX^W@J7;{=W(0hX zl1fH<r$H;&u;t-f4#I~tGQg~%J_8$>O=C@O<3^4R&vxiwOI5YWpqG^O2$ZC@jTsnC zLQqzv{SH?yV)|8{SWxO9m`T3mq~ncdsmKm1|MTobq|8J0_jtXZ2laWKy5{G=Ntk7y z;jUP<fVgq1C?jt56l@+1yKfaS2x7xi?*2=Lfm9&4-H2n!2<U}>Bkejd1+97YZ{)=} z2qpW&1LqfGOI5iXuej(i1LPOTe(fRNNG_YM8{m|mfH&K&%BlvA0Kef03+}Dl#Ac<% zwj4INbBL^m?*bPZP%IN;n5su$o^!rH2xlTp&T~k_pvp|b@Iwl42{J1we5El!$r5`E z-e3#&7O@ttNPIN^H|WHIM1!H#G&u1&cdz>yY-&qX=#_p-g`*U{iBr$1@VsMdLY~bW zZ2WPKEFi^9tlJv9%Z!ZIi?2UK==etc_nRZJ6W$XS-ao*Hg+p8s%02>gc+{(Ncp`Ze zz7_9RNOxOKXzH^_yWpevXDPcMyqPpOD{k6$%aZ~rN`d*+*n)Ov*V+YTD=2X0>}Af& z2bc**1McE!eBX0Awb4>B@y{o+c7Au{3Lb=$OD`Y1F^%toQvTVKq@@!KQ1gT8L>6q} z7NmSNcHfLosv8p*T=c}{4C|sNwD5{$sqHN<Trj`@i96bwYC4iZq>6s?9sc%~Ro`F9 zX3xUKbV>h<&bV1;b;_{05e<@(rpybisqnflI#qDRa>7Zz!OkoJ#~(CK*^zjwuqHP> z$3yWBm8avxsfR%gq8qdK?f#?DnEW|$6FfNQL6@2`V+E!00_5Cq?@$fyuY7f(9Oobv z4n;0pydIx&=0QS5rzHjOx{+r)uu<_0_7P-ETl!&l&Mxyb>d=ZoaOL+P3G83_2UMK2 z;L!Ue*kiSG&2dHis)Dw-7JW1wfrIqf9wY1l<Jofc#uHsOV(EarY-`vc1Eh3sTz5){ z3Mn!V+K5sLWS_YgzX^LkZt%Uby*)>Pz8QzcGF(k?HvgT_QY%*C<d>ds?tC&hD3VD2 ziuk1aHh^Nh`0yB{Hp`lst5X>uAC7bOZ}`a!(2qU9eq{e2kc6X*uLr(%d9yej<igex z_Q`ZECTw2y6KA#}aS0I1#INE0KiDjzeRkU-d=Wj|awcZDegGVHX`SA$jvZX2jZ%^# zzDz{n<6C;gTz^0Z`8YMH*uSk%xK`G^dJre-tEz0lW|xz#0nwex!?5P@F4t@LQ~8bP za?<Xy5Vt<rUS`9yMbCOeOdS5ZsB|v-47_K24E%n`JsodG{i>Qm!>j~avU`VT<)2SP zdK^@=SxjLL?zOL8Vp%y1THj1<2Exct5NG&+S8NOxIkqM4!8U<^gI;g?spo2hyNzz_ zY_r90FfefOCZ`a5pe37yCv9aW^m0VZB6a_O<f~ph<-5#Gn5;+^la-x>ZEHEb8=|oj z;^=i9``L@Q^-%BxZVp6&R{aX5IDZb}0_Rq?5B3yzKNuTDx`&Td<*`jI_-LNae|7W6 zGgLq)k`<nQ83StA<Ar0B1B_2J5BkY_)L1xUW*)@g+>o?PoiV`OBb<+|k5(aZ5PoC# zS$ZYO!1O+C*ZJ;2SR2&0*$<mr;*HN9*E>B3q)Nlko@zR5bZtHT*R4pLV$p1-%}hv6 z99ZLfZ3^Z=>_5jlwv}Q_H}{)U!2;uOah2wHC_bkB4dNi0^LCe>6T-H?lg2_eALxH` zNEp-`cwWR<b_5nvl)2)!(1F!rI^+qq;r}lXp~zp9);$DT3C{d-*qia--uj(YSkAve zE8j{QWv*r>oCW#01jg`6YO)!cUX8%3x}|l}%SPeZUCsBTbX6+MFlAI}`%FUydHo{s zu5pG&7x(6jn#a>X#bAgf!FdYaJHBkS#M5dX6r*Ra5x<lS^Ps%1O!3vrhT+~t_A3F& zbOy+=MD%L%&i`^;KOH7T5ZI2>>@_SgQ;5&xte)4Z@O|#!sT1SIwE1tuLHs<!!&}gR z^IU&x)O>y+Q^O4k1O#h8^L3tqp(^t$Dbx|z{lMea=)@E-8N3{h6<9<JhdvEYyD$bE z3#C!TX&TT6Kfjfl!sgiJ+(E3hEJUq4seOyD!!Sc53(jY>Yo!BF3kD-ASto&3tJ8no zf(|<S2Gxjh8U$H;^HN?<!j<>>wwazx#60NDtLVfXCOCoT(krV)xX*?@Ep12{PtO(2 z9;c4uVi1w8xkuJ&(SUYt`{$M-79xLTqElHnwz!l21u`Jq4$Jq_!5BDlZ{lP3zd_D< z_Q?c^26njQw4L8Hi0{dEbn&J@=Kk2ndaF2yi)hw40N?*=Dd*f;@yW_5VscT;5dQyv zahxk&TYdRH1|+r7YXOsZ!MGVbKI$&SOz1xjIjTryCGI?|QnY+bg9-VC0;^M};A-Hp z#a0fuF51Kwb(TO@2FQ^o?D?hL%*2#TLZE{H*624VDuZ?AiY*nkW*si31<!(lhy1cv z`0^pabes8b!VH{T7k`Rg$w4B@eX>eBrKq4cy+1Vd`wX}{_w0+t5pDCJ9Qhv`Rr3eo zQ&81aouebbv0vJdGDe4j$&cw8yQbirsNDFe3v>pkwa+_u19n(bp43Q3rc6L^0pD?i zE#eyu&x3y_84jeMQ&-04f#RYYdBxxHs}ySge#*0K3ibr<d%m@w0x};rzRCp}D1Vg* zJ+_YmhkwL7tkj-_1G{`u*@Ea`($BVXNSlRF_l&vviG>Q2WM)r$Jsf@!`B7r;*bw{- z7xSnTpg_5W)=nPoX()L|oXU2?Ci|wYSF(>-2wK2!X*Tv1!kuql%}J*Q!LsL?<uWGR zhB&n@=N@*Y&x0s=Y#y?onTc;|_cjnpR9N@YhBfptj`i!@%o43J1Z!GmKXzgVbM9!n zjdbt~th#h>Qr&$L96S$Kv-`6UD=L>CYsZ^Uhi~8YSC^@fq3adSlQRJ7tn0GYxKbbj z6={+L_?ZaRQbRwM)JfnW@fm-w8)krrV8ipP9ERYal%gyT-dwsxcceS4oCG8~b!F(# zFj(EIP<k6R1s6k#%#tk0u*$$jUz8JDO=fG>%HqEdOwzxbdJC7ds|ktW`u2wtbk^8* zU+xeD<pz`Z_HDp^o88-_?@}fhplQx8n}@N{@mAbYU$3A!*d8WbdU9q2@*~`q9b80) z9*qO5ngelDrpCn8DfpbQuPPw_z;5hlPTbU<v!0pAxn+w3P|09<^uxi9L^?b>*dAJp zScsLJ{`Bd<DF|_2CVT*!Wy6+{Jl4LrIRRhP%uGJ1&Vj{CmEB82>2Ug^{FTx7Wa!v# zpnmx}6?P?y<V8qO;YRiI4^i0YFb^Vmae8!}A;TFN*JK5C3IjA<_)*8#b{Yyiu6jpc zzp?i2IuV0IbD$pmsf1Z{lELXG-496#-b@C)_piRlUY>&Rd;1RU#TKzG{ue4gr&B;m z{y}}1JMJ8^dtim}6)KFbm8zk?p}@hNq%@is6LEv*h;`)UA*hIw8}iJfL(wf;x#BGo zAhyOrM5|{GhNC#FBE%?=*1`5F8!t#^K0X;zJ<|*hN%T%nGW&80>=$GX-HB6;HrPD9 z;)yjDuxS{4ifwr-ui0vII!(gGL4iA5Wkc|m>3ix?END?>Ao~^U`#UfDoR55)g}A@l z=uOHn9VY5N6~AAFy(&LR>qV+)ur}VM;xfM4&2vhU*^`&_V{@<ivuB~IR1(|@KY5vi z&*e%SGH-X0$G|JGphEok2q?N$J3hgKXdZO+fM>07CNq&Lx>5c12ovG<gFLYTdo?^4 z=-k!H8ijJ&?$iRjClvWbED{&QUJmb`dI9-ipfdS;?vSTKyobs+X>5GlW@;*UhZ(o{ zOk14L#e<EIvAbJilJP!W`!m7%#<OWi+9a+=7yJW~CFzve8Bc@9D!Js<`07Lp^nG#W z6b;@KEOh0R!}ZXAgML`Qv+clVLEj>e`#%D(S0z$ZUKWS)3x$)Ll=1F2{p6`oFb@ru zd|SNJ$$1WJjVw6yNwqjEYI(79rw9v?q`Uoel@T+M$6|Q+N$&sybiLN`=1|Wcjm{>f z6+9zT;p>eA_vW5KIC=TS<^^X*AkMEhvld4|ojNZZy!{ZB0U|r|a%|s+fsZxnK7E;m zd5-zHtqP=l_*=#pYw9KJz)R>B-s>(+6lmtU-lu`<<s3ODYWv7<80_WT(D(I|@cmZw z{y~-@259%*9X{i0{tME7DyS5?bO`uPFRqh1I0+J+ISI6;LGUr$wD`ay8hk3%UPRz1 zh|Qi>q$7s-75OHozcP9^$pAGj(fvMx9nx!bnrh><@#szb7~Wnr%Frl`%}!VE`850+ zBy#AvQ8r!?eUsjv*(FGYp1xNbqVWxiGpehsxN;oiA|lUvSy18r=Bswz*i+u;OyW1Z zK1P8+KXsONDQxK=&$f-f!4Yn(Lw(zK(c#q8s+W#=Qw-4cx6<ci7EI!@qsQWtUXX#i zphQ_`bPx)baH<sK;^-!|^Za~tG8Bg>dXd(WA?i`6cHwp=;!ZdF?cO3XESR=2&0!^D zJ3`=wwd6^VA@OS<l*B}s3R+r&CHBiC>^*U1(Ga+5Zl2W0o(4w_@~R1EGAw%3xyb=9 z#Ut$D{C3!@p}$hRd3+t-_ve@{W>;blmoJTFVfic=xcde?pBVs8LnZH09=tHQew-)| z8H2VDtk^Hb#^6{zt>`Fn!Uk)pk6xdzZkhT6Qs$>3Y?LbG@tV=bcHP%)G5vaRRM2@N zrRuLc3O`+Q`lL?I!Q7#VJPmBwm<P3-Zg4}P;|!1}MK0*Az%<0Vy-ww>9fGG<TunIt zvX+HAfAz+n;2%avM}@)NOp#>ZSYb1<mXD1Pj@5CGz{~8WB}vRO*qp-rh2;Z*t3Ou9 zUk{C1#!hTpT5-?l(<pTDXl*>LiLYCWjuw_wEg=N!^7HeKU<>M6#Bp3@0rAi{Trl)5 z8Ri;1XT=WFafJyrzMLKS7?!okO#I41g15F_sGk@hf$Uy6Tj4AU@P!8yG<ecMJR<Jt z7!y08&~P*^N@NNa*^Q3x_&=bdHZnF=Y-3PDzu%#u#7YF@PA9Iz<*Sw3AD+<0MO#m- z3OA7M9D&r^0#CGg`H212np-smaoIB6Rpl$NX?C9Dn;R$^Z$QGwqu(IgyA=y0@x5(c zBb8Ed*!yT0jOtt7k#IiT?brOz7u!%6pu2frn?_Tq4A7+UslylWgIbXG`Kw_6-+k_n zM((6xSQ*VPl#s&2Q0N~V5`J}lq1(CKo{z%PM^B!8>K+3&{Ugj7y!g(pep=@;4*q@m zx$H!*;?RFUBd|<*LTCbp%6W`-?;B%)o_laxMqqP%7sss81H8sOKf1&~iAV519D(@q zWh7_PAOlpo(S6%rArosvQXbUcU{Z%O<%eoSD6sy-s)fBc9B&@v8+k>Tvy2YR65p>= zjA<YpXBh3YoCXW4hQp32aS%DedkStuG86L(aqk>TP{tL?ZBlG649YMONlF90c{p-v z$X$=bd0lr7c-gk6o8F|tL;e94b~`#;wHUw1h4%%0w`RI+C5-|4I#V;VUXu<i3uafY z!6SMe^fZz!cmL;M_%}#u=cts<PRd`Pe{ePrKaOz3Tm4lF(%+yq;Q;UUql55cy@=V) z`&38}_<rOhF1j-h+ST}Wk{ZiO<d+5>(`g?84dx5Ybi;9mMw{+iyBxp=O+RVD61jXP zB8_Gm@ZlL95Zi`l+_;X))#sKa1P;qt+A1@|DLx1ZS07wRID{*dlYS~zmj{x;TwKBO z4)$KpgV>MX?ozCu1hse9Z^h&5*@iW7b_ol{;NKw2(}J(1c<{2SHmHBbX%H?q2OmC$ zuWR!l!IV#BoYX;hx==aip$U$d+^Btt6^H$_aZXagjadm&j8*BxEUr`Z{{PW+=J8an z-Tya_WvqmZ8A>vRD2YU(85yETDHKws$Zd>D(x8k*DioDjqU%<PWGsqg2#MG;+stou z9$Vk1^Lw6u&hzS=SMPn@``*{J)@Oazy1u(r1w)Gc%Io!YtykkHv;6f&?)OA=PG|N} zcrY`5GWU|t14KgItsjP_R#K6;RGAkU<doSY%jQfsI%0t0O-1&Pg7Rf37?ao{07Dxe zjJV|;6To+D*k&=%$%+5P!BEBMNZ7A>BGPvnQ&SOS!Q*g8kq31I6!_UxgAVavX`^kj z7gRMEAU184sSFSsh3{<Iv>jZnebIqeN@V|lf+KE>o&3dw2h~-Y;ATX``%_gq88ku1 zyvj$9p)||jEW7#PYk>tuMqh9Gj33gOKxZ27Y_x|*%>Z3I^Fq76l#J>pI@LWus;hVt z|KY`LBINvDmv?!w;V>ubp#C=ssyUYT>$xkaCz<JA-$9JuerJfsb~z+93kxdVe1Y=} zh@8$>zP29qWW`7CI!<{&*7XkugGWcXwN2p2aSGB^XjYa7_sYB5x|;*RJhrCoSM;<i zC$6wxxJ1>LjDozEI;|c8gE4bev>}L*<;qXrx@(Rug2X2}_UXXU>*KDYwI`DuS4^{; zxmiX=wnFQ(i#SJ7=B?(zLUFKYc+UUGhm9<um(+ssmyi}guj&k@VhJR)juxuC!X9Lo zx|oWsw+Luo*XkoLj5%<r>LY4FyexQT)l_zR8aSW2Dig^krx62mOwVtImz9nZ3cif8 z3sF#&X55USG#PPw#uogv__Lshi^`WZL6poBScduBE&)e!;s;?_&p#j^+Ia<Zodx$- zD=WPe$BK&`2omB|nMDOZ2ls?_l2J2T;8FqD5gqSSPhNl=z?!0Y>!KaFVuVv$EFp5{ z<$o}9*=zzOZcAzPl^`SLuivkBfR4=IymPH^JG+7(_n~3`0j-+2&_2({iBl9Rf|~W` z(cu~gi3c7O6fcpXHVICb2couHmmVcT2tKVeevph#Ur#UDY5;2Ix*XrIqzUv=NA~T< zCK7tQ`pVwBpdI`Ty6!Z(<LcH?^ujm;n_4Z1H!1k=u^MpVHQ3`gf5RJ~REr8|yoEXU zH#`wZ@hkz!chC>^LWmuEgrcEROhA>(j#nvr&7cc%Rc;RX)J4z{f;EX*jE)#9dTN9F zKh&N<SL0J2WMAXOyI*81Kd;DzC)s7>Sc3BXZE!Qq>O2*_6mvX!iUkxly0*!2j#p%K ztWImU9*iwzfP&TvTKrbN87mSm3Dr}8`;z|#4QRe@dl@l@%9nf*(QuhSt9g5(#$aEV zIXRxV8dTJRu5aUHJ`&h&)(=YUC8M}%^Z3<)lPFSAC{W@U4MWyO9|(z1T<%!IpZo=K z^QW9AV^td`QRhCTK-cG7_<iD-|8xZ_PP(8fpr^!&GeFwSPMhkw;a70;thjhT85xy5 zl37C;K`O#*8Ra15m4~de>a(VyJNmn3-k+v|8}^}fBd8#RQ4_j9IHLHq1C;jBG5Wti zy%%h}4b52b`$K7GpT<m}@!Q;CzW)bwK_T&DVK@O<HH1Fmuce}Hr>!gW%)r&|U8^n$ z8`C7);g8Y1L^P`>EqfQ{q*}if>T(dKBCZhXk&t07Tyem<ThodOPdk+KBN5v_hu(gO zY+iZ`42V(nJ?4<DJm>iu#sj}o)18}cVtWZlpPiq$3!KdRE;qQmP?<r#+Y+U}O_R|F z#q7-8*GQ<Hn@#L6)C>ZDh`wDZLt6y(jo#W`ylf0{+Z*1XYtxZVw;+>h^)!myUA;27 zdlV6ihN`f0V6V4kH(zlijfhs~59!?WprOE^qR+a{6KJpTBUPyqu;V_8?2vy-K!%Y^ zL*9ZQE#`C3qhs?Qkdet9mBW1yXxhG(-2<NT<({;%fp$8&-qT8^6A8#j;kHQAS_;yO znNf{^WQW0_M<!x9&%H><y5NGP;z}|y=a4=`Xd|Mz{pwo=Gzln0Q8SIzhmJ1ad#Gi# zj}>Qtl#U6~f_k8k{O<C$CA{OP?1X8pEO^Oo$~=yJ{GEut<}2wga~VU+bIvuWHbY^n z>R`+U$QL8e?Y}n+l3bMRsj%-LY`fWE(>d!Q=F`66oe)kOTLhIZaqibE8AY=#MGsFw z=R$P(x;dllKOp&C?U+ds*mEyLXxpCvPp2Pe$#dvEQ+#>mLoww1BC;Ogl+(}|5kKt1 zeVl}(d<p5HaU}E+ZjcZhoJ1$Yla%_02<S7$6L{dfGX>e~Nx!7nNkg7FLDt>;L{vA} z^Wqrjy$(-(1dZ&;{{qSQuOi-7BqH@4;k_Nf&_A#Mx?xq?LH|KVZq5x?ULT?@f;LfB zn2B8f!&&RPrXh44bVBeW#rOlDc1-;0ej~n|j5gqREHs(n5e)=K{`v;375rAq8ka#F za8m24)FcV1*hy{PLW7;K<9ysX3LVAr&Q>fx4lirO*BW*ZqD0&_dS+HYOi4I59O6kw z22oWv9QX(*`<{$+@e=})N|ia{kV9l}Fmx*ZvUWGzmCFE?e|yiW2zgy!DQfk1CL@-4 zR^y`w;Dbb`?(YQ&PJGvMJhGR7hHesCzOEx99p}>*^KOFzR(Lg+Uyp>eoo0E$cT!P$ zQtgHlToh#SVXaZ-Fzhdb{Nel?2`HAMp=<qJB5Ie@8MF|<z@6f7=5<FE1eFUQv*r5V z2cb@LR&fk#oPfGd;d=feu-l*KTDmR)>N(eaRw?#wB%>H13)74dIDY-p@9!+8A`i5j zOB1xdP2xdG+rV4K@(4!VL6m!3R8E#Pe-yP<u^i6c_GdwHKDK_!82Ek#d6MMc`B0Fr z7fKsXfUhEYQXn{#j0|*>j;)3L;D3Pv0{z?D;DhaVdX$$Aq1)e}^4@y?sQm=gWw3RZ z<r=6H-`!$StVv$vwA68MW9oHeG&H0nSZ(+RL<qm{IG_nn<kVw2e-#n6mY4Lmz>asS zn!K5F8g!w#b%#$l(9rq&WbLNMWF%3mf9gXIfcm%lJ#wd__G_W`3Q=I`3=*$jr%yyL zI3#)Zn~;!BOxso(sG=M$L-%gajv^DI6<GgHS324isq@?c4x7`TSUs$Qi0Fjau{~cQ z$M@e~870(3L)R|y7Hv|cp~`)Nmds#WI+x2Fx!#I~{7c1Zj@=|9dF{A4*USl|@77_~ z=}19b$~I{<5GUD>w5Dx%0}Tk?5+~%~NzbGkznnfyM3Y(XZ|w!m;O1V;!ukFTWf630 zL#a=3Fcbb(eKK4N8jSj@&TCA-2IRh-u*47kg5J<)Mh3f}A>n&_wL2W6H-}8_cl>VG z@!{)jS;LC^PRJ@Bc*unBS~a#p3c6xu#@7$&Y$F2bKOBD4v*jbS`@B)k73>P2qqo=s z$a7QahX%0N<gOn6`8!q<C)GtBjhIHan5D^0EYK?=9&|?q5(ow;uWN^UH$0iapCQBt z&{Xy}NH^rtR7?U5rB6FrHB8abAyG<4o;DOCb`gVHlxgT8-MSMyM?)9`^g@WY_FO&@ zJ?MYklsWis5WU9rbwmdlwI)~P9c?8bnG<a9z2c~d=a@KFZwEVMX2Jx=M;83DTl}te zAxLH|jXU2!mkeokXf9?SH_qTFx_??O^kR{Np}?pty%XLnIM-DF(t{*02#a_OMst$U zz%^r5mue!S1pKP!<fWnYqItWLpieO7I<bCh2>}I-xxt+o(<o!VG85Z1+9D`K&LDky zk_j)E4SBPQI)lPZ<}!Prw`}QkX0b;f{%~#|6J9;y0om{Qp>4J2PtuXuf$B}E@aQ?1 z9;KaD1wpE9{E-^$d_j}OiBg^P{|Snd$%}k-YZf`NSXmds?_FH&E)R1q2Tpz4e*Dl; zP{98I{o(k$yl=1;6!3pI7=U)iOfD4$g-V*gqjCU&bNOuTvguVUIOEYVR&-wUWzKjh zGrmjuFy~k+J1&{we(>NWR{YbF197F$a3HgcDjETC!Sq`>_Ym478Y9?HxZ$hJKXlEE zhYcj2`IZtgxMiPPc?zULXGPHlnh{2{gwSf?J7RnJKDEh;3s;~>>%E3^{%_Eg2#=e$ zS|^c4dC!kC(1^qUN#~r+=H!H|b^&yK`T4g!%c-bNyX(`kd*pvW|3A*f&_L`#{2EB9 zR=G4bfcrJKGvj^=wB<hS4OBb@?Klij#PCqM5hSBp;WTUYjYK5zE|P@~`^DGYOft>m z<NpFJ|B$&NwUh;CEXb^q|9K6RcY<ARV&B<FiyVU;SXBItMhe<-LH?j{9}_Nkpd!!^ zwo(a>o4Ywz&L9gdt2A*du;MI$&Z-0m@PNTg;#TRk_g?VdH|82U<Z~>7mb{zY_Gt`y zKmG#ARBpXh3%`ciXWrp;pf`&Vb_=*dp-KW<0KJ&uOU$D~GP(eY;hdN`2`g0Exj{a- zcoyB>b*)uuxd2W)Lf$dR#*EwT7WeH+;K0wR@mMA7CLss2NvK}TAqGfXkI%&SBoT2Y zYfc$L_#GbF)@MFJMH_fFe=hn(Mz310bIMhXA<X1z%}r_e3jPM2w^<U~I>WvQ(y)6S zt$C7!^2XWfZ~mep+(7s2kuEY?bxm->0{s049&dim{SCy*p!cJnE|JhyV<yj=Iutba z{@w>k-YHbNd^-CgbU?II1EcDoa{gZ;B)`Apl@IWkkG=oF>0e7k?i+3Im_Pt|<>F)S z)0&WmCGXigCI&hG-Ew99WExt-v5g0dA|f5LG2wL9Nu(!sNa29x7<&0Ld(U%FMn8nD z4kf!l;+gHC;0DDk!;Muw9)&cN-@9*H864^NPDJc)g9^#_3kg}N8=w+$dFeaSYiP6R zvyr3B6%dfIc!63GnX(9)IN9T8^JEHL{3SKCXD<yYQ3Gp;VBzgK#q>&PE%bW?xm{0( z181&G!Z8YRfoq@49~;2eci5YyN`(zh(%0Fh%3yfUbU5&WDT|04FV>Z88iZev{`!X3 z9UwwH<lNvd3Mz;hO_+b>!x=O^_A1~wbUVqO?(3&rBrJjy26Al=!wZ@&e-K;kNJCb( z>IH`Z)S4F({1y~6OAXh%%X2A+@79AuwNQ%vw!^T(#SJcaWUW!jfY4hAul{^$Jq3A_ zIVjmOWB=h`0E!YRR(Io|q3tS1{NuFXH*4}{Pq`8WO($Wugf0`1j#u&<s{!bg=WV{m z5BiRXsHymaQVJ?F*ZXDyV)fsk^<8r_JDlbhL21H$m%^;5Xy@oM<q}USO2!<lr;|ZF z>CTG6^1wuvwwJhdVjT_5EH8VKJxf9B``Nvh<dKl=*{qK7dt<13g};1%92w0Yw+`fw zSb<jukF4-nN<$wXCGLBfK9A0)BtCiliimFbofWkO)qFfvEd2rmBMgv*M{o6R5VCp4 z$L|+IqRZg)A5_Bzcfxm<YB?M)wFK;TIY#e>if52)fyCQd4_^Fw7RtOFF@v^IT0E>r z!SAyGn){$wwl@VzE9`muy#N$a_vl@bJq_)Ar>&tX0xoFg*)>t`DQJjeZ=uL9X8cp2 z(>5p2f&S(g+{LaLUK)ezh8IA`cXxdWI?RNhe&`dCdK2`XwD6M`prk5o=Zi`eXp11~ z1*TIjEf5(uKUpUx1Kku8RSjN8C(-`~{Wr(^L8B*W8e0Ca4G9N-bwGE6&+^a%5K^0L z2-E%n!A0{5?{ez#Q6#~A)@_w132h$y(Ox<|vj`e}H!OeZE4=+N(-*X$o9fwK>vtc2 zP*F~u$wBu!%!>;OJ*o6yat8bZGrEn+5Q1;$&`{&K0!O@=iJyh-1j5+F`|iGluVC{{ z89K3*gzCIk%3C~{LBl&O(=tgD&;if$baY}29dqtYdgunV-aYSy?|@WSW&F#_U77{& zCw)5Cn?XlAxss=Tfjh3CkyCPuJ~XKR7#x2HaU=s|M{<b{W2d6!J>9L6++-9c+hf)c z3r^?>`^>FIXaco8%{<5nRV<aZYxgohYSV_RfH{>2iy%jn@^ru433QzA(~8u_F?3ef zc*Dp?GIE~D>He%Yx(NEZV`MKCKuY5M;R1mq1_+hbc$PDn(UE=20jDkSvt_sao;5Cu zf%U#<=+Yhd14Gs+_55-{{7X@}{_R*QiWaYNBP<0k_>T1-mxNJKU~!n$-T*L{lyA4W z<iLhAK&zBim#IK(A0X`$NZ18G<FBvR*plba(kYeGHjv;>SG{=O2fpD=m)6f(n39lk z!6C{^pC!1aTD$cv%$kA-MzblWAy;2vQukz%n~qj;%g2wv9oP<BQAwuZ9QgQ`cP770 zB}F3@FRhP4SF>J1v5Fz_e}am2m2?a^$cXKWlIO2@Zv6eFQ&xRYq7AeUcDbhpDf$25 zV821Ny6<0aZiaHolC|P${h;k@uN^>s6ts476Fu7ldjCUSmE(gG|60-006bxRHfa&` z3_DyN4ia3jiLuyxIt87HpI3H;4p_#57@WI54yC;8hViwTZ?XPSMJlQ^7hNxF2iZ!{ zX}?ks503Qxh={0xaBAVvRo?Kky<AN~uWy8nZOWgA8!YByw$Bofm*!0Dc{>mzHHh=8 z2#^`?`?gCSevUb=WEUnn1u;O9{1!FU(9~R*aPW`-1hCANp>x@D;J^yOo?6X@f*!-; zaW#N#0<9UQ+ug1L3nlB*op+do@m|}{7L`ALzl?ACWTAc!af196n0g=_>U>HbJYYW> zhuV$d-Ld#IqF2xa8Sl;cM!7FUl+NTLv2K)rjyKmbKXxS{FY>I)eo(*|oE4KViljS1 z{J<W$*S`cu(jLCZrDR@6p%*~f{FFLTcX%QaPw&ck`~j(jUfa{O?+-}thsd2<2cQ7O z_Lb?QDj8isd`iCXfkZdWjvWBa@GW&HN{bhKzi~VJmby-&?H8NS?;fG1YCp0=6cu54 z{t^vO;gOB@q;FpVwP41IDl39(qa|s`mF=|kNn0W+|GA@r0txB!qdYbuaIP~quM~0z z`wo9KJ-}egB-%C@<ID`ls}A>wqbL{r3Kl>%7ndAO28I10e^2{RHuQ^rtWNj^PojQb z%2BroC_*woBMlKGA>s()-EpJLLy&^@jLc`)@Q$Jk-p_Y*!A`>f*=~>FP-=mR85y<K zuF&ns0Lke*3z3tD^lAabBehh-7W}^xC$MP&@Ch<F<+DR;@*u+gezM?&Ju4(34A98e z<q|dWBy?)Ub-E@rn4p|pvn%ID5SqJvdBsOMy1MtYSo<0<qwFmFfI$W99{niql|V95 z;tQN)f)5yqo1fVQx)B3Zxmjpu8~hsV?H$WpU}MAC0`_)87WK)vXTSPVNa=rbFaRA1 z8Y5Kbjw7SKR?g8bI{G=>KpapYqkXT^2j4+^)&R4^<luSuHOv?W53YqNaR$d(w$nzC z6G4ml`2dXM;C&*DjuVlQZ2H6mj4WQ&$~N`|`pQ)OQ!`nhsVU{TZc?f$6VBkce69<h z@ft^WH9DrT2U28|_1M{UK7)dEbgw*!y8uG;VBZBnaI<t|^y{_kf$0S)sWGctXoz6o zWT*nMAOpm+uUYiG9CX1ffCv}vI&8nsgy&V_a+|?d%mDR7>wo)Q+#L1`3MOu$ps@N) zEBK+EyS}&p+xkKqWY*w2nFVkIP_NMYebrFi(5g7LoF97l=ALD;WEG8~n^GwuCZO-G zvh57jSVu%HwZ$d3PmaRn+%zSrWzY+hYxGKOXcSQ;wo|6yl*<oeofw9Yo&h3#mMyC0 zhr0iefWfM%Nwh>w!(d#IjO^cG*FHw;l2JiiuR@|1Cobb58;6IG5UtciSQczJ&kHZ( z-VpPRu35=t29+@$yPQqR(9h!@?)F~X6`EE)SpB@HO-1XcQ|<R0A)}SnCC!syN+<fg z`+5wTRrVjVm{55`L=TymhFpjK&Edn&h&Ehkgn2NNQBU(&po6unhF6gVlxv^!#G4fq z^i+d(?(!SzB8Yw9Mt9#2=$Pn_C6`0gJp1|bc9H%uG+(hXpXvsxXKCzhVIL~e2`S3d z+aiSTBL(1<pdC)#-{j;A8sUZaorc?>Qg-y17wIdUAz0=)DeFD&VAB5rXo>l!id#1+ zh}QVh`WYGg!JY4Ia`-?}UjUs9UPrgv%Y?7kc&bGc>b}cEb1K$96vl1F1uFX=kWf<o z&rjCy(m4;dCWeYoP}5wr#0luMJM$|u<U8m=9w`q=sUYv{y?Cbmg$WfyLT<=^Lk1bm z$>h_&!jyw+dkzG4f>F5i%S4i4%oJLs@FViMI1}D;CbiZylo{u4V|VPIfnuWf=#kH0 zPCJtR?CjfWG7@wvw)@rtr8VpI&k}0K(377#e3anlSidD?n==$6#+ygox8bnEx;;=) zsUt0LU>wVE4nJY*_bJ5E-j-y?N<lBT>WD^fqaYWKhPo!u_%h^V^)b){k9U5$)&mCR z0+XMd-(V#SP+iX_YZY+MwwSOP_|#7>g2FDJRggSGLFKRIu_cNuxH-Mepwa+BJ3YhX z4e;Op!@&R~JX0z;H#Ck|xeGbggu`5j5xs~&8Ay>Dj4!=k0|lsljYB@^aC=-xy7Wpz zuu%}VX+3*BimX3MMV^PAKl8Wj=H-#3MNoCdL{lPs(7LDDvL@`HgeAKU%z<l$!I3=L z5XcH;n`h2pI@mi|Fb~+%oDYJyc$KVF&X2L--CwK3cp?7RT+PPUwRRGn5w+Z3+YT1Z z1<<P7nfK;X=FwM*et-~Ives8T7wM9K8e)0^={d+Q9X!wZ^&KYAk1O|+I91@D^afuC z8>cB`deY%>9qcO%&fG3x%&7!KL<T6~UZ*$COh8Hf(RZ^To@aov=o%g7J0Q1zv01Fi zmxAba13$kVnLrWpvUj>DFiULu;R`=lfc@=rbFn+7QQ5wAPE}*%MbHMdsJ3;9&>vcN zU@qY83@UIOZt;T5O7SRGc69gb2+C4W%{HxuQ5&E7HwA!I#xzQE#13|>lV9@ld|W^m z?p3>YHfJ1NQ95{j)inY-sF^>|?=g+m`K_(-F`q&8{Td06Ihk?4*EeQ$62VidrnH^h zJdS*(wthVU+M&r>uF1nthGlxGq9()6f?qgn==oHGf(~P~hsJv0kU&xDHPKKSi^wu& z<r5e~+xyGndzfK|3O#y>a0Pt43!p$h_YdS;8e%IqJ~asb-<F4KxAYcFBGVK*>l914 zZ8*R=(dHQw?$_oRk~PePi;A?p4lxJN0_WM?+u5(c6HXKQ(G62=5hi4zo3ZjXGzSaY zun9qq7EFGSYcWSc{|glTA(lnP{of#GshUmRPyyF6<z?c9jYfpy4hJ_#@q6b4yjGgb zqNS(Pj~}@Hhtn{tx|N#%=YQQDWxQRAhB9iNo>yEkh0@d`jrYxS;YW5J5Ksma!JY5i zT<>LB@Eaj_upLk>5g8T~Fpef7nZlP_S#?Ngw{Fap5Ey77ZOW2W+%bt(%OdqFkgPHm zbZVVL`kQ>hBIiM=g7+gYc6^{ha_Rkb&<SD9BwCgTTPXviwc^6L9t|Rj3z5do!ba0} z_rp#vIKQQCHH<3lB%zFB83*7>V6<)CH`*LtR<%pvre8t%zS+ILZ5GmVlfmWGTu?$7 zpe!*Ss~HtG{8F<P`7y+dOe9y!&Fi5*{5J;!kZiv$?_DwxaTH1_aElQC1)5I(=1nsr zAr0L-PHj{=deGe^#RlPdlfpZR)ey;OPON$8x)FMQ7eM=8#FS{v!3?pRMyF)&fTi2S zqWBoZ|C;B1guI0XTw`-8Lr{Bc&si&mvFK0{dxtaiI^P^>udO`G2j}}s_FN(#*lKI= z`gQH~WaN3mFZ{QS_HWSX1a*B*$O-=jv1ufSR<u&kwl!y13f4jiZtDph2RIux^d#o6 zLeH@CaO&fSZU1nve?Y<OPIBz^gzQvt%!L9?De2CcViyOQ7gzM7aXH8KD+Cluoosw> zLq%7u%6^Q4-pc?DNwPorsYXOu8U4$0pt`{T<#9y(;NvEsx5}>lZ=oE+-4RpCsso0# z7016%!WNunj-40Z<3EZRk1nyE*;-*0c@fm(;Pa1jasG5nO$sCo8q3eHOG6AdrL>Ip zl}<zQ#)_i^#|f0XvE?=IO9Co;UgpuLPC#c;+;$g3?06nu+V2b5byx-KK;z9noIFLl z$7jJEMa0-St$Qfb$eXsk=MiXhEL=QOOCWX&<#+6p0PEb9&wEOCZk|P?c(0W6OPKJO zF9qkFA;6Hkx3=^WlxbZ>GCdtGKsn_^#}{9)<tvWndzX%o&=$8RK4$S?L^j>HJ`w($ zxWMTXu4dZ?4#={q2inf?l41>orqs<azaa#(9(DN)eqWzs(_E8t$oK43GYYsC(v-`t zl!44v;<mkhEtpdUuGR$n0$&FMbfhHll?@Ygy%<;=aEH!Gg`a}AVxLW*qm9+fws7dM zY~KFS4k9Scfc%s_@N#c4EU|uWz>NQw2<al%lDXWJic)<lF7}jg<EM+B@XYW*HWP1N zUjE|u(W$Kov$WB)@}tT#a0fuwjl&UVT46qzykIeJ@E9U_)w3P-g3Ne&|2o2MGU{^7 zdFBN!8l9lr`%nF-=tQ#Q-nHvtc59=3FQ3LAPRedU-eYtUhT4B#kE>^&M|}!XGIF^D z)F`Ezy+w@!kNvdztQgFG!w+~imduSVf(9J*Ye<Tt=;Q?M^EGG;U0d<drw95*df(a= zBDntABU$#4;$4tnOPnsQzdVP=&J!K-d&y8^VxP`uXT$CL-Y8GPaH{`sU=v!ot+d2n z17^7heyNQF#p}(rEnPS`8k^N#nVp8N$Rg`wi5J1uR?O9@`YDovu4X+aiGw&9IQGhV z?86v3996BX&pC^hum6x|dm4TLMB)#%%6U|~#n{BydUSC?e{<Z--uOCWAd_g(&iL)z zF@X;7hrJ23oLmI?3Osyjgu~h1Uaw;gqZ$4NmECW9eA$%=&tx)c>fjhdZd4k}7V-?b zmT_asNS3y^Aj6uL`H*-L8Voehu7F#L862x=b$#r2Z8ykt`qry$^hMA~f$JKD0^n#| zzII=-2MiRVoL2rhA%Hu++>kyzKtsZ|(`rPIxqpH79OHU7$_d>P3!tRBjMBc&F;w}! zxiz2$qNjN3Sfc?Qd5<5>O@cDr)kHh&y>%TI?isz++P)k@>IIN^(7P2Of}_Y@Cv>UZ z?l~kP|IpD%n7+88Pp6o(=$Qm$s^!CT4m_g;2MyA=NZ|F_%U>L(LPR`syw1E!{tNUE z=UQ&!Lv3(aGB}=vSkP^K4m#@lsggdtnHm2Zw1MCnZVlV78E&cQcn_i?KI*dL&|bv= z4d&Hf-wj5j|Ffe10<i_?#kdFx;hu&6e@-tpr09~ehk_WO@LS3nDoVsfP@UMXij6Qx zR7s(EP<uHY)opXTTAuOGqx%PxlmK&EYDh?}iH9~`xD?MaAh;xh84ZQ9=ZM%d<EbLz zU(~^_M|RhqT2VTSScHc!9(hGZg!SlxHY^M)&^TDB1;X%-QstrLw`Y+=<_Gs32>dz? zm3`}B-%nHhvRk)n39hj#H@)fwwB)AA9Vk@d!aLVq6O?>3gTxDV9_fM(7^aU-xAuU< z&H(uqH*z(#%%N4g+Lc<!Fq$o)>1nVC6{$JCm7lSkXK*lF&hPl9oK)ye`sDCKcpE<+ z*q!`q6MQlTXkXU+nspg7$n15@nbRl9XvrC&pQY@ObTmxP$^<dv_u4he<w|KNA&2|^ z>PHmBTI+R$&4Plaj1RQpE;I%RKM-5J<Fhn$OD=G>Zdz7+;57!rV%0lCwFila0h0f; z>ixyr6y)yt@>sMU<Otd$dB3)EEP^cVUCGs3$%L=zCRQawtbe*?HOKV`aKTC>`)r0e zUn@!lYk$BH+WgWL(s8XcL~Uz{KLiI+X)21*;ekAHpyqg?*Bo+)dUsL?gZd3?UG~Z9 zZ}78P07cS&^1XdOiWs1H8(xw<xMY_-qWaug4dUZH9gPalDfC>cS>XzlR7Z?wU(l~Z z8%CtaDy14IN=0{H);A|0LZCJO=qq@+D`P|=ZE5J_*5a;aXyddk+0b;okqviH$c({k z;h^~&v}ZK1<icC>B1k8WlrqQ<^FkLurze{{^q~-Cxlwil!Gel%*&^Aeo{-Q)`HiWb zXd1HqG`uUL1RPJhe$?@Pg$XHTuTPq;C!#B5%ngw&(}?oSO62r8Xx|<U#Qp(=Hh*Z{ zr3F@r1yIb{8#-#XqbMKk(`<q6=5gmGcAu;%Xk+)su1%pN^hCY!l&~gDLK7MfV4a7( z{gizl(q_RMOT~ZKfMKyWJ3mFX6lM#2wi2;|K9IB`FL&+t5L+y8E_ENuStmP+0!*>z zL0!;{INYDsH45I%1C~l-z7R-KmXsN_LbS5&%n^Nlb5{IpRprjx>R?n@0L|OJ-q{D$ zj`FVl>v>Nn(VOj`AyD`OQtQ`FJ`OK21N1c2E{66MdXDn<)&E-ghw}!DIDhn81bDSc zuikKmbK<*wJlB|kw%7e&CF$VhS%kZ=ym<o6O1d{#dSc$dX;!kUeE{-9zG~ghG*G-# z^J7E0Kvq4Mvv$L^-D8LWa&U}o=wc<HHYwAlghB$CQ3j9Q`aF(I&2LYwemR4fuf(kD z2Jabmt*|FE3ub^bK<vyZTpQusAIY1G;S~hi>;lM8Ln^Qh(x{^aYqz+H(a;tqu`AZ_ z1SDrTmY#>GscT{!llk%6_3|IknNqpjJv$~5Nn$r)5M1yKP8bJ&{X^If7C0DwuPm7- zU@HZs%<9KC6v7-}`iuQXU=Q~wd#&CCB{_GQu`*`Z5#v^G2{MH$=F^0zrJHv^Gg6N@ zb=jpU^f!q3ttk7-_ZcK-@x|5@S}>9W-*t!Pu;QOt*M0d3o)Y`A7azjK!S*MAS0=>` zW<nZYk8BX?BO+rhvoEh8<Q_~dWS8F!<ydypL{UB%E@C?-Yb*<uG35xkV^_g)v9O}Q zK}W|zjYN0Npvh-idOJWnkWA>ytP5s<#!>AK$rwqTzR0nV&L_RVAU^vWw1<1v$sb-y zc7;>qm6I^hVqrxpwz&HF3F!N*y-I8SHjU0L5g=a#?<c`U(?j9}e8;?UTQ%yZPyn}h zec`!D6jE_EHY=WrILFgGH15EJ#G0Q?Nnq(b+8vqgy?+|T1{od1Dt{3cK__bY6W@5v zqBK1jt8R1hB50MR$F|jA)nI_`dvm>;2I1N($#+&J59SFOw-kuLTww;tgWJjCKD_-5 z&>iJWmyn22v?fGfA{#m<&ZZ^=Z1#o%ck>DC=R7zRx34f7UAY??%q2599)aCnd3EZI z>IO0j9w;l&1IavH`>eUt2O?5lclNz$6pU^Tb{IE>6|sIhEY$=ce%n%=yK+qUIdb{l zaxf+e?=3ezvYmq78U@|AqEON0`#i(%K0%LQuEd%mD0-~eRK<H&8rn6tV>fuTqF@$4 zWS^)Y*zI-h8Yh2OBcb~jj1=8hjiVTuB#yQ46&1XC5^)tWUAY3)({4Od$kIx|(j116 z2n2TBJq6l7chQqKul1o&MG(Ie4z)q1uWUYk%SMq$bd1?-z$ns<TxJ<!1>?Bn>MwLb zh3!V?PmVe@0=kbafJO(T4x6ci6N1El!qEyE&^{z<$?yLI;$0)6)mk-*&PNRqb96z| zk9(SU63R3)cPG+k!R4Z*V7A)^>POE5(w}sJ4|wCZLp{5$KyR^@VEYD0W?~Mg(2n;{ zA@$(v?phGcX1hP$O@Br~n2cp*z2Wk4#QFA&uFs80)OTs-vFk?)+UqVD_6y?mf)Biu z%P}-m96Q5$1j1;oeY3YEgZ~XmG<_4f8cgU_OWs!7CBvi)|0Nr@fHsH@kFYx_!`7?I zJ|#U%LoXafMYkTDM*U~F=hPL!gunnzPbM!t18@5o(IGi^sLwD!+jk~jI(ughHJF>M zJq2|g1CIpn(5VrmLEClg_lTV@m+UF}6zCHu%emLT2WkNepxTV;DuHbfvV}(|5uC_K zB}SMtu8@K(6GGcgAEzS2-tXV^=ivN5s*mTk?xv!~?vnI<f?$^)n(7}@hT)N$Wy>x? z!da$ozk4IRWDHQjrVe(RJqh*Rd1tHuuD6nl{Vnec2<TN$bsWn+61s4=JMc5)h1J<v z8(#2_B7up*z)sMaat^s0JY<_h+TXur5elei^M@@G&wh_w9xaqJ?tv7`gztle|3`>U zLz0iKfjlop*3YsACf^)v&QRpCfD9-uCNuHl49dzq(-wCf8W@ri)^>r&SR3M(s`8G4 zE(`}#vYbeWcU@8`kqjj^2f^dQ@ay4Vx<F_EIkuU0u6j2VE5^!_L`Hb2C~}H>DduVn z9#7KB&vWn}zUyBpx-*A{J|~{^DK!U^S@7`m>1pVMS^&8=3po!%k%GmbsDCraFAUJK zv3K9aU<g5-npNs4P&<C;Te|EhCc=F2!qdxo$I)`%r5?%$$;eUSOY3TB+9F5qye1a) zG8J45_HyPMd7v)ylTXJif`GnY0SS5#@%WB$-z$N?aINHUwwWCW(;t~G&w>6EOJW!P zVg_R6jqU^+ctV<P;?r+omJrjJZFGni47fU-J-7cpbXIW}ZmI%hjpu&)m*nty^mfW= z=O)-O8JyWm*f+o7^(5qJ-u6uqG<nexv6uJY)O!#RoAH25MNO8TldP~&M1&4W3c|~_ z`n=|)`fJmuVuub@BMh8PY$R8$Um&Sp-)ty!3Ur^(KlghjPok)e%g*XTg^U4$amVdP z1eox9K8;WK_mWYjg`9+C69G{%mo%lzB4hsonf_WSdT8kwVqqdKaRsZ^kN!A03aFN^ zyR@>F27{0!<5iPT#e%PO#>X`TXee$#uk>aTIHsrTOrJi6<NVX0p9htImW>};`zRX@ zw-vm1+o09=VApH}2Gx|2RKN2~@Reh+Th7^6&CrmKs*gue85D>_J##E?l2B`Nc*dFv z0um@ukA4=yjB6Ixef)gt4`|!lxuaGIbBiFC_fHf2V~HsAyOh|yHPCuLzXEH3l&)gc zI#Uvqbxns=pPYmpQG>qWOWxrzwB~9UfA27u5U2_!1J^WQc>LA&eH*Koamo?9_KIHE zv-uT66pxV+12pOvo?j;jKfAtL>F(b_ruhp*`Is?kdKn^~17#Aw;7O&NI<)!(%!N{x z=~K7~y0P?@)u#KQ@D!`T+3euSg6AeQW%Q)L`JciS(siu}-cIG4{70{|;sSerJoW>J zG-=DvNvbdb>9#V3d;7EEg8?!X^_9?Kaaj8Ns67D{dCbhI9)}64f~#u+dnk*bb&0di zo1vdz%|zH)6{`t!ZT|y<=bxsK?c~D;yY=Au(*=(I_FG}B7zCMIPt^@qz+u1u72M4I z$pK>;WNf&+Zkd6!cI%al*>=bQ7eET_o2t4>VFKa;DB^UvVs0K6uEd;EbW|CnyvUY- z&G{6hnDs!!Sd0zNmoS;=g)o0ggnb|gq`SA@cJS|IX2A=WcOAv-pphv2lH3WxJ}?`U zudvbXoI*SAyFPskF<boDr(;peK-2L!`>H^A9F?T6bVyKHil6>+VSgsXeEhFz0`Cm} zfId3}^EkssW7;EXKDG(&&JI2D{+Tr$=EUu-&}oBF@3$<|!=dPTABF|Kf_l=@Gmo&% zhe7jWzTDKcbNA@KK&;=aH*J6qNJvl(Dj>mdf`t`H&P9m@?;@j*yWiaLYy;z>+{beN zCx1X07mxFd{Q!eX!kqXgrf~%El;~DCJCGbxYzmczR(cR`k5|H=i*)QiE2?%g>v6It zBJy3^v=lP*Y?Ua{5+Yb}r_NJr{h=Qqo|h{=2=rdn<D2Q>XbgEY>~o73heSlT#HJPA zat3Hw<%tjCo1jFW(dXbD1Gmm3^xxRt^BeRZ&YMq3r3b)IC{o#1aTYAyYp?~7uluBC z6dV$2c5|O};7oYGu}TEjnnr6bs4dwK-x+cIw#UQDQS|iKs{ZwjG~~N!jQSWHjSSF< zh?J+9OstEbnsSwrtFOV%|LDZjPB<;4gHn8rZwugojn@w)*??ZKz`;z+_zX8fcj^+n zR%#Wv)}MA|Ne_De0X5f2M&yBJ^WwX-{5AL>r+oWVUq!RvDfW-o{`6tTzi%wO{IL__ z`^(p}UW}8_p{FLZ9L+qqb$9#)2QauX?=@Z93oa=|$uARK@T9gqH@_;@4O0An{#TH- zHCqb1(&OIt+oSQhw&mj-yck@LJ+GWIXHogx>n*jpWW?oKisj3Luao<SXtyd2JvsHg z=-cl|cI=Z!x%M=wI+NyqnFHRRua!PG^oXb|TkE_;6F)wp^w4CZ7_{IdW@Ki8N4R=R zUgH=%jbu+%(K^@z4)I^+61fPK(2$QMXR4OKWV3M(mM!O@?5^i;G2%6a?%q}FdJSL4 z-u|`52Vs>AP@I`WL^d4R43L4(CjT(7-yLiIC9e#{<~I_h^_@^F7ECOEY6msn%Fhpa zPl!$+Jf+#h7XH5dTN0KP!YH@@aIh)#=GDu(UPy})^Ba@rt3lJ1|KXGY14tO4j!XCC z`;-OnvMX6TQ{X3eG-t4JfJj0v=3eK-1R($OlnhQPCoh6(<tP`OLtzpc^VT1Zkoi)Q zqE)9(vEo%>??p1w;L4xoO4d9o3vO`iU}g`d4&yhwKj`d!O-BsSyZ&RgVGxQRzAX6u zBRC(P1z$_1KsoIg`vbEe8fb=x`R3Zd3;eFRaGVt`wD}u!{`HRy;o$wqja@ew)z6Hd z7&biaKS)O3EQ?zmZ;zqV-+Osd{P^+T9PBr!=v0Q^`WzS%HQ|)98_s-8rpr(X+OQd* zj%k&q4)BIqXq=MU0#9m1i$lmwsB}P-^Wc#M+=Q_JV&4Dt?5nK*Kj=5dG|ctdZ{=%P zWy1jq{4@2o2zFb3Ie;#;B@tuks90KB=`7Uu?5<Jas+18FU$jv*c^P!P{ROg7+WpHB zI${_r%3?mWsk?P4UUaZYvRi_HcG+o+_g;k(&5;zl%uy1uII;GK_x@3|<8DFD5Y&c- zMT;djfnen-iy7~?w};y$AJGj&44H8URwYws7Em=7R#bdg0)GQP9WzM*V(YarL=5Bf z%#Yw)1PMM&y|mQ@EE=2dp5<@^zj)t$-5*!!NaMSG+zpW6pVF&;ZGu~q&g3<0`jkvv z<aCw<d)a;m`3746RjdiV=LO1@{+{^wV-8@K-pU-Bc##J;DwuhkEe<u?E5d0>#zbVr z-VtxuML_j8!|HR}=a3LVY_{2khB{lWsy}*6T?ECw`<ScC%8Yk~lxK9t(H0lvN`F&g z`<aAhcNtb&h(S9h161JA%DxA_lktq}ig}&TY`6fTxD<Ae&rKn_ET26WACnhB4ac{3 z4?>p&19V&Y-El71#DuQg>CUU0L(xe&mT6l+nv1-%G~*kzc`qy|z*WNJ_q4194z>uo zI~PN~f>Y70w*ujM;Q#5ZvK0_s1KX^k(f-{XRP<=ojXjw^S@5=t%LiBssfetby|dkL z4mpMNo^S`J^V}xc1Vi|}TXtG2pMS-JixA%Z^oO|7e}|p!2uN}lQz|Y*z8^<?w@>7& zfiXS7Bz3$f5d&pQOZnvQB!ggAE@um#ExgC)A&)!fzd))d2*(FnAY@O?lDj?t4J8MQ zR@Hyu!S}RnH8q8IBty!&^$_SqyV}i(+Dn;m2FQ?YR;Uhq1ji?woO!z-GY$%MpN9|n z+V~0W5_WSI`H-dMW}wBEu_9O7Dg9+|hCef3&nZ+wSp<Feb-wNjjcS%=&%6!>fK6Au zFzAEU)Z&WlWVGD!Wx-W9&-1zV1_4EN<#GpbgLNbL68n+^V`%4Lr}*VNVM@-zlT-L^ z*p591UFX#{O4ApxR56{7@i`H_9G5tlf_cMR%>cPPa&Dlyj-xU2iUC!dX~e3h5F7^P z(~7%-GNUrk<)G@oxgAU<MF~yS2O{A@+iv;G)nTLP@!RO;!hRTJ5%^_A?EL@XypCL> zD#M4ro}I>MmjuX2O=89OFR*v-)>V>l8-g(tj~*H5ip?y7cmxi93IeC3Oq9rT!WVEv zuoY`2O3p8WZn*ZS2h`EfHmTJ-&5_`Ad^<Um>J1B806pmAkUzg1w1VP~Ap|h3@A|wl zOTKgx$!);GrZ1~aqiCW^i8{!pLI+vL$l!#!Vo2hC&P`ebc_~JHEZ2qGjut@8bNR~a zj35hAj52krr6ZZ`M%7W$?D(C#=L$`_iBQ6mkoV7q3Ha)kvGt!}oY#i`a3a|+{PJvq z9kxa4n*khRxmZNfhk$G_AS|qiZ2IN7h2bC2)3BCDO^tA2h0A1u0}PcShS7wgU`pl* zHG}wz&%o!G6A_0x;h#36foYtSMbO3Q{RRghJ-cGXmmFvclNCLkk{Te2dhEpP>K@62 zGdNhx)hlLs`#_)hbheUb5;EFjcINHhrqBnMnUWItiy0v4VbzB%npCi67c;xEjG>tb zW$fhZDWo5p9^(bacEzmc^3nn@E@;$0+6V8{W6mNe^<l7H4y>JdCk~TV7dSqAvWHIz zlhNv)gB~j-K!jj`+RJr#bS_a)tmgHG)M^Tfn|fR^1Qu)~@!B8bVbe(BArDHnffha4 zx$J0|7xQ$4_U#KiLJhl@`MUz<(1|y0St5oY-^Tac=F0*vnGW&YCvPI6PCZ_K8omm9 zroyZpOGi=pt^@cccyj$L{mJ!S82lf%^>dzAq1Sf-bVr)+ZN|?L#4RN)c@+dGm(Q7* zmtqKupa!Mj*gYFaNMFD1sm@s_vy1InrV80nA-|B-d)ObuS2(!%gNWIg=*be&Lq~;s zt-GWn|8TNmLWSC-=Fm?E$rdUGiQsBx4X@0vFhowe_N}BG0XbzwKcuHkAmt9$%r;O( zF~QW4XfFavwcXO**#spv<KyCnPN4TZY`l_gG=^Mk;=VuFHiopXCEd_%qAo6|-s*N1 zzataAqe#v<+K-5w`3jN*p~3b3#sgw4?+8fyL{S083o#x8bVtnCu>-2&oSoId>|3Fj zSbsdt1_F;wO@{@3aDX>#0rViN(;)^L%#G!fzQ#jZ#Q=Q>k8FRUL`E7<PSY*;X((mb zo5sTl8Y4%)dFOYCh}YGX-i8X8>m~o}YT(++Iboc<GSD6s`}3>LQ8EgV)Mb~)VbAAE zRdjnXgXY`V_zEq-YGqCSa*q%0i+Hm;XANArN8qkYlRN;|H7$VBxGtZ>;j5ybmFFA< z@lnzNli3ShklI{YF*d(VEX>Oj*b<3oXG^}N9f%u$IM{zcpB0Cvjo`4LY6Kl#p2dW# zwyHS>_rg`5vY)Gu8^W{{(z(j<?Nr17Jq|h0wH-u;n_On$@_x{WdTZEX-42Ka!$>DB z{7A_EQxz@=UXLe{pLmjB#f$|lVOjSxwgAM31x^z7D`u8+D;+I+@pZ&60V0>9>mNND z`R!E5W!u6J<GGbiw^yf8(C)f$Sv4rXys?~&=z+tk^n#Qb59mi7-D;0xp($l@O-gY0 z+VMru-FQK<U68a?Hu}$zz<97<BTC^;_S7Or)GF%Qo8O_HmD3UFRx$WlnIE~m4_s^v z&{u)|haUpS`)O_8IylE&f_F~JK7kpL3m|j+tInz2Ge{)TxgjBGd=XT%-ldTU6V_{V zgQgUPf8QS$V!vSvywr1{65@j}=xp7yqsjAB^m<uu&bKOXLfu)Kt#k%JzPq>3PC{Z? z*um~-cZ-I4e|X#q0K?GAIOP#6cXScts`%u1Ni%o@7C@{5-ZzclUAS{Ht$B$N6qaIk z(pX`qV}Q(8d$?WVgK8>|{X1bWw=y{IeVs`xB)HQj!#Sod^vdiaNVB4ce=`J$UXJ@i zEkY+2K{SzJl;8+&_hFATHV+cw7U8hbf(@u&_Rafyygc}w7WHLL5IK1auD`h#7NjNO zr#%m4*_ii|nG=?yC|KQFRur04UW~WTdxDGR$;kob3s?u3M=eyd-}_D@y?5S9Ye_I4 zY;;}ZPCK~8aP~0QJ_sz{_6PYXK|2luRIS}@{sFw;$v5V2ZEywwdI6-zo61c1LPv*R zd@Q&b4Z_n4`;0V^$^U?W!=%w#_XIvLgEMT{+JLo!B&PK0y5zhT+zTOpDnJFcSd9Yj z{-KBL_&Li4snAp~oc!qTWdarSv8c*CD}1nR($D6k`=(JcAMYEZwPTAQ%@p}_5q&U6 zY<QQ=7f`?$An6ZxDQq2(aw(<T@>+7>e1Z8<@f-wXZ>EKD-G@Ed^`pDk26Z9|NL!k7 zbOHua)Q9b2bNd4tX;9Q>g(u<3+_C2w3n*d>phxm6+LnMXhyk*9Xcm6q3;Dz6w~`~@ zIPt?zX>qfVNA&Z0B;&WJXwTi-A}JtXjd$0mJm-eX$?CEHfYzCuBy|`-YII3xR8b$S zQitv6qOqKKM&rj1*Qbbx0owViW~3V$7GjqRmxaNx$^f~bDTiO6^{olX_F4wRjIxV^ zb54B)O~KmXxFcL!Yj0t6_tFN42NpPd(W>=>P?Fz_Er9HGR{o@qgVlN>rN|LlDGDX7 z)+&OY6QpEkP+mhv=t1z?!Gp6XxComr{zXAX>P#p1M2(}V_RHmmVHg2v@~CvP-53fe z`I4A8KtklrHW4#9AmjS)UpKW1+;9sVJ)e6~H1LdV+}NW<gw}to#xz5!6n+**SnsuO zae-^v;yga_rnBNd8;zK@W^mxA!`F%0x<GlA|Jq&*=K0m+e)2u&PC@5>bePQ_gDp0B z=J^NcA7p^kR#u)8gi%}^hWF#!U`G`Ux#l()2Wn^;tK++we{nE8xoIm$MJhXfdet`C zS+GcF9{Jq!{5}OmZ|G&4fvni3QNi99#x*cNula4+ayEkjaRGEg!0^5pf=f(#?%OMv zKrfl#>D;~xFb!{ELHk~RMH4I8@Z5>|V>}yJaQ$y~oZov$P$STOqUH$k|A}oI^};^S zp?iY6J9HbMy(YM}Ti$2}ZR{dvJ%_>+FFvYWLz_p*^rj2?Ag2oGPIh(PA|iz$VzU$2 z@);lzRS&|xAy79LK)4gO$sG=x3jwj){Sx5z#GU=RuhnPKTd8$e3O^W?HA8#*u=W}B zct(y}co;PO1<;O;6oubAV)zLTQ%(e(jsikmyTMLh=@aT@kJxYq=uGv+b@?zy@Oq@* ziBZr6j8jis5q|{3C>KD3`=Tp<3tInxfFm=&o|_Dooms{8#M{Ja^qYhI1`UqKyAh$a zLLM&~O5069!n^O4=*qG#f;t50vSZ(7(96y00rLlD5cy4!+}=xIE)}5ul3dA!{|a8Y z|En!r)9C)VY$=4@IyUNShGB3O17sO788ZR`)^T}N$Iw^o`0K{BpKMqE;b8xO{N0&t z;(eg?VgclBrJ~oGPDfnROTC=o&mYxLJ*8cl@l#F%+aGq0pvy_7T=(6;>Gl_h(7S@u z3TlM~iAm?|LZHPn?C`N&ut3Iw+&^5Ry@gPY!6D6H(?-j{NOneSwWmT5c@gyW#yhDt zOA4CUg^fPRqoDqSb(bGy!kn1zQp`*+oUHX)`^a7+GLl|JAQ&9|15!~C@IJPi1<$eU ze0b|U0bKMEv7!wV=$V4M&uN({v~^dV@_8Bv)+r+yHU*=|603Z6_(3rNnH3q-$-Wvz zJ^mpAI`Fe<7#5tf)Tg7OoXMB|q9l|#YOAd|3AZIDj23Q&GAsi`@t?PSa1n-%QG#36 z{DeL~>`PGB0CYZe4VfU2-8QtWbo0D9jxHtZTdO<5WOYY3d7Z;F^yW23C>!iA7^O$^ zMGGXGY9VSIDHLd{=?SiNfLh%~-zSOWdJ?+sz<iSp<WvUen5i_kxCC6Y6u5~+h8<EY z`!?(=7a7s?w8fVR%_HWtz@4XHzhHp;FP${EhOIlryF57X8|;V+oc|IbePzo9^dO1o zmyG`4K0S#9Wa?iv!a%akgU642g|Qpg#+~)}pv;z`ke#2_OG4uN2P1DBgP_A&+bKAP zj(j&h*spPdhMLGni|_4V!q=(4xVaXbRZ{zJ96oTG8+SLEU(pWlfslm}%NOXpIdot8 ziUD+8Oj-$=3=Dt>$pA_0Pv!a+4C9%F1FO%#Y?tH{)?cK|XORJ)=Fgo<bLfFxjpuHV zPl)pLv~R9l_{!%8&K+eXquXTy`3{Cmiy#LlllBl}657Vae?G^Eh#u>h_Qiu7FRU@R zp%`XKu905(GuD@c%+0kQu&H8j1>*u}wXvh;o(xv}g6F3xFIVW2_i@my51&B9lOkkY z9%w{e0Oi~(JNgRjbV^BEt+KDf*GKY|Uj`vN1GHV?R@%K%I#O8nMXv;mscDj1s*U7f z3~QV(YZ{0Y|HZ)oR4h}dmv);Qw@ul1{s=f0l|?5npNr<e<L^EWF#vP&k7udl->X1M ziyJfZhF$Zc#svd!0v+W%Owav&TS{(|@C2E60<AMuogjmUWY-+0?{g?PxUkB9tq@_w ztqp6B><RqCdCTJbR=JXbMzK0YEaRpSZq4npa@YWV375WODNsoK8<ch<tMjE0C|L`j zz03IL_dkWkmCox5_6`uD{|}Jjon;lJgH&|R`E&wW&y6pclMc_EnqTC^kZxhk!yvP) zKACXA+I#}V`75A3Y-H4^wp15Y!%(UPP&%!4FlzfKI@n?4VV=N@?|oS$QwDD~<H?C8 z^owi+0gD0pRe9n?Q^-6T$-CongrAOXy8I|EgWGk(RM=&ROw9NZ^A#B;Q1DFKfsOPC z!X;6&OI3FEYtxWj_QzTlS62MmOCmp?&m7WmvXs06Z!ZJnH&rt75+<Q6pIpk9#KndW za2C`3%4U%anZmqE3q;4)WkQ3{%=}Jp*No&H7F<BwjpKn7M8G@#!}&GtdN=e3blSgd z;W{@Bkv1k2Cm%b(hllD4Jc<DjvkI4N{#G{J>7b*{5R_nA!-t<2aI!3dRz3=Sej$mr z2#VD!4no;%_?A~%4&nA7!S~l`znO!v%?+0;(u5(xKGnA(4}y^11<s94O<x}MOruAs z$9E)Wa^l#u?sa2Z0SXeG?%H?_wpqrC>_Tj&9du}jU+GzotNtYVU!Z(SNJu_7AQ&Lx zXR$9gaSCb_?_EjNpFjn<UN;q1vf>QRY;fC>3-Cl1I2cNI-@C~LoQ#tXJtOS4O`>}Z zou=K;z4Z5r`Z5dMTVz0P5y2}~n9xyv)zvCLcvrl<x9n+z>$kO@)hy#s<HQkNZYmDc zkRS=ylOG}K@n1D3&qQFtw~yYox&r!=z^0!86hkWVZLTv~?u?D1XoK_T%fWV|SfH8x z5M#y}AW5vpTnYlk)?hIwXXx!~+gw7s;s9pUmKXFDJ~XsLLz(4wd!?$6)R$)v(K0~P z?AGFXIKVcxtyY^AV}QU7b9b4n`c9}DE^y8s4rCg@AZLFZ;&E|9Jr#Mgw0!^E4nqa_ zr_Xt2(a^rU)#|@Jp||)XWL@EHKd!F4Wk1}6{JxjEib);@ltp&lh=yD9!sXY$6PSQn zul5M}0i^KH&0lg|DyA-i?kj&<x%n70Gt6A7+Q~hQ=DtonAXmaxF1GS1R_X#9%%L;V zmg-=Y5?p`i3S=pNgP4T81NgySTfg>}`8SyVQM#h*vc@1C`CmVN^HV<zCi?oo*8pxn zW7+1%odi$JdFl7tRiRV=1^Ug|%<Wu!9C`p|uM2JDi6<cO)nS<D#2j&PMSp_^Mt>!= z!;HA35Wdla*ZzREy}^Bx;YxM}=uE(^EnNLD_xAwVPs56UPGf=od7!3TEQ^bI0dnmA z?TSe~hhgHzLo{A5Gm64C2*ppr41p&fF!|d--UM`VPviv^UbuMTFVM>1sFSy$Wsi46 zsXEkf8f{6|7JP3D-ArY3X_XM5GC<@F{jHDh!R6Haf=|<YA;8pqr~MfIy$k8YDtoSR zWLp-{9`FgAlP{NWGK21PLSIjQ&kzL-VhfK>|J%-R3xDwWII^kc#7-`Pv}K+@>Vq1g zD&^D4-&Twf+sTWQFl^vst;=3}PAXC;*=KXKoVExutU6)c36Zq%4Y98;Hp8IOh;%tk zXy;^nMNvoCjo!mpc1ukD$S^k~A$xgd%hZRV&03E2ITsfskfE~tyGSr@rzVT93qt6> zL2<=(uUw(l%K%li3Hd%UC!(5{*w84LRT!YeRmo->tLcboW8R!*63mfUSNR}48P1B@ zEv--faIi&CxeAwJCJYT>tmu>~iL+XYf)dSbewpXO6qD-r-*XQVkVR<Qp^vb$-S<!{ z-5^gze}m*?^lz*J4Uhqn6VeE+f+S^pKBN3{AQ%}IIQOS+)ub<n^Pd3<Q!qXy3I^lY zl|o{@-Xt{8vUIzh`WSls)Y0KI4ThC3tms?(V*~PbFeGVydC&{Wmq=q?V>J9sBNg{% z@;gJhb}C2c$ub(^NH-d~_??Knoqjx#1_k}P7Tzfg-PT1l%QtpznL+#_T&ioaPtYVt zPmG>`jU>PP{n)H04SAeB5IUv;7sp9<h?XWnBLdFcybe}i)@<YM1t9Mwepy#QYA@q) z7~2JQoyrZ3{bN-`wDwE3e+&G3wJ`k_w;EQQ0n*|g&WXJ^jb@7TH1|PmV8{KfZHJOz zAE935#`;uYpkR94U9rSbBxGI@y$?2$C9^}7#=KCc{}IMoAWlYW;x3bP)F31mnH`gY z3(FM(zx4(JXzp8~RPOx0LDm&l2E_?vq-x+JCD{+d2)fp0rh_$WI(cVPhBO^z#UHtL z1agU>`aX<znK3jWQ?a}_@OVxrop|jAFCPOWH8L>!G8!(FS^$ZSe&|D=W)P7$HQol} zI9qy6IHq-=kKi+h_haa)Zd&htgcoMP?vvc|QmPwj1Xo2iUYa7KjiIZlOj@J=kFM{I z=W>7lHzQdIp^y=YGNO!fYf+I=Nyv&MqbOw*?^L2lQbv?fR@ou4UhnMez4zXG&)-#f zJD=0}eg8O*<2ZFa@B96J-LLz4UDxyZypXs1YkYawI>PM7b9V!4rgkrm$NuI$SpAPO z6N}+7Yw|kBb3bVbCB+y$tAVkb-jTKBcjl(hYb1SC<T(r+{=WD^0nYXWAmx;UVv8Wf zulOn)9We!*5v`kVs^7ubg$<xLs+C_np#tu2ps%h9zJN~g_b%%}wWU(WDNPAfl}Wh2 zfId-7yxaya36=q=6on2bL>0-0HL5_-fHO?#bJ;i|QTZ%)^xz~CHR-wTdUOqSj^`wL z19`Q)o-ybt-z17Vtz^p#UO(!0yw(+<U;H3umai9Fl;Ra~Rg0+L<-?Qw{9p%=-VX2G zGiVP5Zu4%3@$b-VD3L7dSVvF=)%A(0rUH+k$I0b9C15(a0Tgarb|x+zsFaF{d@Mjl z_{pf;aD;tf6KDq`L!2p)&Kvxl4s=vaq0HBPmm~#YxWVhWv%@c-tvhq`rX5KCiaoat zC<7<dv{5(fuq;f+HkTZz7loFZw|iu76U91`*j^=Re-Ga0vYFOy&%jvFxHD@U6mMal z4`?&~;)+z888O2racQ<-dJVE;bzDTbG}9D%_Q29d4~h^3pwT(5d~>@6^ku*BM>W`b zFKW@pzF`EtfW-XyTq#mKb;xXz<Z1APS2Rds(VK#T5*N$)4&G(-@)8-lc=Q;u&wP=o z3N?F^BDWvaFzIq`QnTy=d?n8jgPo+p*d|cR6M@px&;uZvdl3Gi3Z`gZxPE~iCT87z z9&x(=2Ps~lmd0b{>@*T(p(0*7JdUp2na_MwOpO1Hg99Mn{*e=hpo3jt&9sva$OG{L zBQ=ZgI&Mbp^f7}leuZ9B=>{lU2|(KXxR3(ac&^FwqGyTF)lB;2Q?i!~&yc)lchcAl zN*uc<Sri5is{x-h%BYC&5`%f7ci?e#UwUDG&Kdkhc}~_Z`L6uN!TkcVefspfk|kU~ zn#Ge7a3HxmRM&ce4r+9#);kt}sPumU<;F!FCwV)HSSe(zXx3H`?adtCuP#6~`|R1H z2|J$LhsX9FU)GT6liQQIg9~W)q)1kB&<v8+YE#IB*|G%+EjUHqfEjp=W~WpGv-xiz zJ_)Y6WAIY3x*1Y(8CLVjTRU_ZuqBv!`Z*{Pc0~Dpt7-=0F?5-S`|-sq;F#<mkkt>~ zAm^2iE9S3H{x8sP9OE)aI*uqPcDmX)?N*zDPY(CzqhroZRJ7Ly6X`o&YIs)v0g@C7 z<{#*WE!Ua2?7^vjfOgX?MSi?9{~sU~9YM#_esgHGT$q6g6t9jCvqHUrnoanM2sl?n zJ2Md!H@k4lK4PBWf=2)nukf_ffMfSJPbMegFB2%_$eFsMaM(;by_Q`gF}-<5frjd> z&qJ1xQhc23Q+QbsfV@`uGhIQ*z!Z6t1qb=T?YDv2l!`OxNLVeA{&Qmd2<<@V<T_+Z z8#uV1`PZkTps;+<WFV%;ANah-{FZvZjHBiACnAitkmLU^AZ=}i7p5btNXn)}@|PtC z<?gDRUqJ;oi$7%f3FgLf&(q|cgEp;%Xp+C+52%Ky6&gogg1G{?+avA3oFQND9vd+P zCZsH_6Mr@n@g~r69{*Hj100#^$C~C(t)f{h^>QBN99qxuR=j#}4k=jnC0WDEg#gt3 z>40W406EART;4A?i44!$KU0T4pZ#t*JI(-1i560B{D4Ar#LKM7GSXReFLK8tCxc~l zraO@<lNT6|#T*M%)E!`<xB*0T$8ilgOe1=`9ezY^z=~yiT$2kOG6GP3h69Zinn5b) z!uMB)p<~V%S;6K6Q?ma8!XMLN;syd^B=au4?{|T!V>HZ>0;T?)EVoKk1)+TN3kL^4 zwcF|RBW<QOf#j)v8c+K|(@{lup!O{Agc*Bf^}sJ;E2WE{1T4lPc2$XX*a@$Gq<AO} z&ggIaczOI0Io`G*W~bFFaLJ|qZs9Bltu`i^RvBna%YF0+bg%$rmAMDQt#Ifov#L7M z15r8CwIvBhlmJ^OZwGU%92tK3Xma!JzEwm`v@EtC&H*##WJ~*CN4q$|WpbK%3emle z8@a*>>?ao@!|9z9NOteZ7jXxmu%K9&QVLzpVA~xMbFgFnH0s^E|NhD*(0hILsPj;g zBj7l=@vXjeBgUU{HN?#d=|g@#E&o{%Jic6RTn#jU4P{ESb&acb8NIL&_PPKGiCXz> z7ZXwtl{^`}{2e;lZh05)`ie}TXZ4=xcYxVEZmf0@Up9pZK!=Hw)ee0n!|%<q+QSS* zr{t?E#L3VNjlCgt=K}vIN~qBxDrO!<RbOyQZ|zSJ;|V~+CZ#u(K*>%3%KgZtJO{<b z-TDht<p;p$H?32G6S^cP<E5h_poiCZssD*~A2~iND4@fE83g9>mBimcZZmwyHNE!X zC?b39li^)Ehl(dfQ}xt{@$KD>=S3LC5CJC<M>77o04O$5%k%CTJOIop{oMw-AcFUj zQqP*qBJxF=++ZdswJ4B?*n;4&QFrU0{DE1-dh4nKNf8JS!wNNju^HG^wI5SJd-hFa zv-FtKKS1?1i}TO)pe27s&C^^4)>?FRjn7#)e!rn^mFtK1|B6@1$Vbq7pVFOBQqG=5 zoK1ILaTbx|^>1e@(8J-B0Q8;bx=kWn$St)c@}Du3_`<j!*B_}&qYKZktbKJKM+6}M zVt2AVN5G6)O!2|p_uwV80d!PAe7LX}j^P_P|67DSbMm$E^bClPcQHwsWxSt93)haD z6+a=u52kwcEa||<)ph*-Qz$a@y*&CL7EZ7iw^cb(y&}UOHZ2f*44u)S!><doGN;k& zggs|^_+!>O`C)j)H7AAB+S8k{zNb1Tjsoq9%OUa7qrLycqIjQi@-Xirnz>vQVgrRq z-!o3shM|9ACGFB>&jtGr0n5^x)DNeTN+V~EkuK;-+XhaPLQ<n(XOUF{$<W=xH(wM} z7SJ~5T?1Ea=1@fS=L3~^u$5(YX}WxC^7nNOi<bpGd<n_+My!3o7h5h95#fzx-5NcC zLQaTP|IWk3c@BoKZp4b=D1Jp1{qI<1#x4r{xnRbe*)S~k3`o}-u^KVH@=S*@q+Qt0 z($@)^sf}3IVng)y^+OB#+(Pr7;(y2TxRiI}6Qr)`2MpQ_;8bwjBBj?8>ZyOniXGzJ z=>R=gLabq7TN#R@@Q(eTd$bq4Wzk9u%>mm85?|QE$(lZ{DW-wCeg2633>-37tZ(a? zo&){P{?|Dn4UoZXT$h?_!l!h&2GzNNQi0-`-=9})h7r{O)N8Hfdz<CngH2D|L*dE? z<Nt|On$~`=5q3kpM=?97!&lL2QHa^ElHG!p$lGilNZnygq<;xkaQHBTMgsS6T!Kot z^s4NY1Q0;TNxf9Q@@@)kt&{S%fyNdgR=x`pTS?P0ierA!=amj4Vua)DT?_wwkGlLK z#&+^EXx&=AP6smSV*xe0B`x4{8}{-r2Ibv-|BD~ig-6lb<yFp6AlGU(&zRvBz|TxJ zigzot84u)MvX4gpjz!*fse~O0B4|Z0<Fh*Wq1T)``+aQzt#I^UyeG#IdqsF+DLhO& z<?v1`u;0B&?BJ0A4eUE6HtvIvuKc=3!gU$-+?{HH&oaq@?z2n}=wLTujhr&j`vU4w z##5)`<S}p{FCWnV44+dQzjkyr&>GdHGQ|?0Q}ipAEIu+NuXz*<T+8k3Qeh_ZMyy<M z<;J*^B>3frPyA{o!7RLsWoxm`1gZ`#lqKE?OoPFpC5>4ygF{aan!;!EE7o&qp|Hih zFb?BP+(mzRnE7;ie_!|{q(mFBbSQJ5MnYNKSxd0V1?Uzgl)E4PVyb2^#hu8t8b@lH zUm0KigyS>BqKvnz^M>jL9rstYr$9_-%zl3SD5P72SeFEDaA!cJj5JjA#|LO!a&NEa ze@_h7jYL1MIluw*RGZRPrysv!aVZ>dvP`);hi+1(opoLVGG*p2H~IqT23WZG>9W(~ zO>fYjX%K{QBQx7n-63S!Q=+qVv1`aHWbsKmd`y)W%ZA&b)b#7Jj$bqJa)4F^XL0bL z0C;F!Z0c#{Rb53>ULlD*w;AzGYs5C&>c$X#Jz2jaoHFqp5)tY8^T_P1c;YYmV}#27 zJK<^*zhiNF;|7?olH+TZ)ibwO!5Nx5p(yy${AMg-%-Xs&9$01aUuSf{y{`LI=cS!9 zYe;M4P3KW1uuT{m*y3>DPpr?nqQWmeli<HpT<6;ffA(X>?3Jp9SyUILW83zH6fg1Z z+DR^8uNQHCT@nW37`H4@o6#`PDH$0qEcigFwU*=Q-k*QA!oOolThoo4U<aR%_dUYf zpHbq+yVE~(n9d@hCkJT8m_S`&%O`F>0*_@GvF9%fw{%6GYe~oc#Hvd{=gh#uBd!&r zcZX#peAq)hiws_RpK95Ip3&eZ=FAWJo}Sr^rS?f{>JC)R(t0cxp2Iuoe`A>r+$$56 zo&zlspXhOH43RObcv?ZaM~FpJDjRDK<)W#pF~!lK-e~l5aow&2ZKQX~$|t~v%rl1e zhJf9l$1#hHJH8F<XXO-*^WTHQ%Jq|tu|jZKA2CQv3T#+G6<>^rFCJe(7VNsl9+yVZ zO4w9u6Fi1OvZ4_^(DTgUIN@cv1YW4HCYAynFNnvlpngNCZUaz(l18+<6qvvm(|0mH z>BpAQT+TsGn!YtOHJ5@r3@`B1k#FBIY!pTx$c6i9ts$w;Y5_Lq>3+wuxaYZBhkSK2 z*0J+^3P)kx;O|F0)!MhX8B3v*O)8=X`tcXLC~@#Ta@>AYF#mn&U$J&xE=VoVn?x@P z=8kibkm48e0`6-3Ppppp*9UjL0`8Bf$CY*Gair>;t3m`S*foKZdz}x=Au0X^3YmPe z-`5pO-{zMSGKu;ai|>q^Z^IMK=r_HGZQq7G<oOq}CB!v(U&5k{1b<~Q#@b|Y6wx%w zzkUh#N{DsaUGkt~2Knz;qD(>ciCXi>lda3vCT1P|U$J6#;KXjh;n#dc%|-?)tVJJ+ zv-Qm8P|$tRQwF>L#B!KTE|skUW$ue})Y|%6@cUHtUt!*3NSZA>q`_(iv67cmKmAOO z&%G`%|7)%lTifS=yNAJk{^LF2_-~7dquHJ(=hL58#|I|{T*xfg%WlMaKKPQ|7uMp| zsnyzG3K&bEoV8ZGv;#kB<cqXn4PRU)*F2{APppBZFp*r6Ke3uG_q;u34*9V!|GUbN zZTPJ@B-sw|*>BBL_~EUyxEbrfmo&kfa8^41^oYv|C=hx?X_1}<SNdqZqRLnK^S}2A zxuOJeZKr=?DaqKF3c)^QQgY}`6y)%P>*89mxECb~n%vv&pSZxe^!3-1UO$Ew{uS%M zzK{okuqKF83?=r5(Bo?ytfvJ<z$MZC8m{;*B#jYSq7>hV@q}204ol}$mOz&0t+z9x za0QKws0LqK|MLu;EpAXvhk;duSSn3tEq@k*5q*jkwKeQL`6o%#p1lCt?#6WyV)cF> zap;2As5`ZAbsCg?emz4|pJkcuLZ_V5PXE}h3R3)z_J#1!pfPm(E4O)M#~MO{yA$_O zk#1fWu}59;X&|`0*D)tL1l_p*jdeKUQ<Mgn;Tmc(9khh0z0yq9H!`8(Usbh_?_(zs z{)DfKytWL<W-Mt}Cs&>hAX09`k~8hI`S|V6brE7c&|gc52f6aM`$tq2BqtCb*~<?X zz>40U!GK0XW(CzHNBa0bnL&aUlu6@#GpL?h0}F=YT|(~UlL9!1{kq3SFH?GVsI{_A zQnt>+fu0bn?p>FbD)?;>VzCWuZO{Wc#De3^S$6t))cjIpoA+5rjm?!Kqe1%oD^@<a z84--7L=7IL;}aiYs7UjoQ|#$k#Erjxb{HmCT^oJ*a4RSk%7YIYu+dB+k&fr@NuW@K zIP%QZ=YU9z>)5?s`zQS(#FApFO|Zy^smAfLeaCWE(UNZ@Q3B}v{;yceuOrgZo{XVE zz2&)5g+F^?=RF$bn;^qfOplomfI|n@d#d@TAtd;FHe3d(<S@#o$@HV)RoMHUlj-)C zPoTUK)9vMPQ>dC#)-?pA!S92#q=;d#@vnP)wW2n`1oZ|H%0%{SN<bA9FsR9f_w=eX zgU%J86zA`0Y-@s(nX2YJr~Oc2W$ifssTw5W6x_;n-*+yfp|cfIH>&?ULrQ7g4~aFw zaFOSJL?k#lzKd!QJP7-f^D*5oF|anwqvIa<W`Y!1Da?fugSPbX>)pyAq!T>Cl#>Hz zAJzWCf>${(R~4?SXU(Q-oA@NUEU?$?2NdH8vFO-sf;^?bTZ8;*{@y4UXErtUvXFlT z8NQdEa)^QolHw(?(J3fd|4*!%bB?CGzj#%nj7CY&vLM7_?ZUjHfv2^vOSO6gta4{% z?b!zy$najc8jctvDDrTop84rKfdW``I9dZ2e_xjeuBYG<><i@yKLn$aCeUHcRw{PL zbKV~^@c%VdTUq($TYV6W6Jp`Jf1Kn18<vl1EWs=4v;T@E&a~Pi3`Ej<JTcXdyC%_t zwbd)^!1cXpasIdm(adJ7Q(w}z{2bqc&kES}BOcC-gjh;s-H8D}?fvz6S+g+4Ft)$| zyNy^KGw+i7w*x_WBbHXe#jdkSQz*>*K!*4@DgIFlu|5V49E4aBuSb2zGXCUWqDR?A z#zB2Sh(%5{VtvI61a#k?Ms0yMVau+fFn%^7JeA3e(Pv&#JcZ$*5PNPg(;+S!cKHhI zZC$te2jFx4>$(oUKVM$y07tm%X~%pjfGF)rAs3xGwizpPo-LoVd==f2QRus&vy39Q z95K>_jvpZwgY~x@GF#w5g<ut&UM%#a_|yEa6WHH~uuzh^>Pf<nRC_kgzC<jq6Z%|i z-%!9ml<?2i6x%mcETW{UOcK7!GGqrxRnJQJ3LgFSgM);x_U|7OBz)a||IjPpoBsO; z*2BKTzkfJ?*mu{lUw_!?aEjtFvKY2c@fhzL{kw$}rSGk8x9pqtedWU>O7Zp!U*P+r z_%}DK1t@xN3;C|muKUjWFbUATZS&h*w|f$!G+w6qk`VT$+?oq_!Ju+{R;?E?wkWf^ z%gkYc-pcBM<Re%>oZFpSJ@aU!B3bDoLn)?wY$YrB=`2#cNxvE|*MjY<_UX;`9>Lx# zbS|1*%R$W4rZ11IPhgZe{ZCPNJn&@i-zv)QLUI?z@-OVD#^Qxl3cmFAqAHD}UP@8R zSc4VCtfW*04)aLwFL|N5fc6NTwsrbihEePuWs2dLL>(y+gVdHi*zLzH^*_faG4c8G zA5RAdk)f?W-AeBmmh0rR?#`NweDqqkjze9=q?Lmx*RllTb<v7Qy4Q!+z5HzXKa<M& zrP+QAdX)+)vsa3*z{W^dlF^6pa0OCb@|n3Fi~BXxhDdYE;jT@f7H*x3CG1^j*2d9D z&~_f<&Tl@+%+-LtB(9s^2d^vw(8Ibpukf0lO(5RvufbV8eMq5UtHbo%JPhnkZeT4L zK%Mr~$5epeKTvG@o@-YM7I<8A`C!!|CK4dhSc+>~MoG`*Kc{OfZvtH_Tx;J0XIb0E zXEia3@z~85Bp*Hrb!`HDYVQua5A}i+!`-73z!cP3x`@=Q29T@S`7L)GD-la_nEku= z2z>~;SxdWh0vnc<>${Xof_Hz_&sR(}k1@Eu%C->eKnsTQw{hMDv*@9y(M5`fuQAfF z^pbbuZJR(-YBgFXVW+#)u+KyRXlZ&Ks;$j?J5hIVyxv36N+jRZQK0;;5@Q}_m(|`q zjpb5ZAiB{6j)EIN8nl6jj(E4BW?2_H8}fN%GQFMg`1QR1#UcOw9l@hCA)JE$$wW!K z1zxcx?CQQ{MNH>7C{;qw-_8xk92_6m-Q6~eMa5+~M#;=#9m?ag-QB*2i<$Og4(7WW zU+BWuMN+!X!@r2V)jeXe&t({~y_obmrBsPJ^xu*9_ci_}2HVQxHZjR|-yjGgpSz`G z;=3_Mh#{?dZ~H2IwR5MpI?;Wt*o-mnx3g(w@4)7D<gapk`ItO_vNhlC*n4Evm#&0~ z6(?bJv;F4#PVAAn>U@An_~wQEC+NY>2d;d17$Imy(j9gK|3NJ6IPL!JB^`vID0J%D z5AV)yY<KeMRBgdR6q(L0tX`Rk5pZnn1D;l{M52qlGEW0+7I4@V{fyQqk~Z``)}&o( zz6^D205N7IeQcIr!^ERpbmY1_F?k}xEdow;=&H3lT89n=0f?n_$BdoGPt-wgL%xuj zfFAW-JE5iOh9-nGw%ksuN9XMM>l1EHV(lqgxTT*qAxh&Wvbh}<i26mKY=IrF8#`>) zeof%<0ybc8`Q}tvHP%s`Jap+^7)AiP`mI^(sAC%z9$$Aup=cOAs<iZYZ&-uEtL=9s zoO46OJ3=J-*Se8{&$Slfmou9{j~Y2k8rL3Sev5I}vSr#ZKFNXYxAfLAtD||IcHuRc zwKk<5gP>Rm7JBqRM(&3#_`iXI2gvy~_f{fLHT5kzFCu?!;lI}1Dw7B?MW=@9$w>1` z-}yBrwZlcK{?jF$-RP0Ci4A>P3-+)p$a?Zh6{>>wRJiLR_MI-$%I(@1c6{ZrB;F($ z4G=XjA3E&oxX#3eOE5kRKJ@eGXew#f_h<Pil<Aaw*y~wDY$|a<kfs+s+%Y=Fbg~Si zoeGtdu+2eEw7JvUwk&VPB%-+aCh8(gu%O~4<6x@8T8m|qO5q$Zac+1p$2||Ti?2|U zoq)js8#s@GCF023vrs3s&GQ#Ri#QaRnVz=gR4d9=tZTa|RP-MpGXE>$9e#b-neL}P zWWfnoaLo8avmfc0=|1KMQ>Om_o%6Xn#RYZBmYi5V_mm~XH}kIXqEI%H#(lji0#c}Q z;|ZN6sW$Z1XW{c?K@!@1@J?PkE3RYnj)cAIrAUuYVyAu@a4kiKV2|u$X(eLPu&gJ7 zExsyX{FW>jOXXUCMVb!!sn$cbTzWET)^YhiK<ST%@0R;_AkSomxrD6u$j^9x&4uE2 z)MQ@e`RvLlR^T2&rO&j8v3TrD_QHwe04+(1Ph(3brp-s(_mX=EG4JZU7@<&&;j|UU zJ~0j>qFWa;7ni0tff}DU7AG-upvFSayn0+eVsW@THWJm2Uf{xSgk#;PklIt*???l- zV=Umv<*j3XfB@&kS1I<b!tGd+<#?ejb0?Y`ycc>jD6s~!8|xSv1z-Zu${kLQeMJd~ z@!7kU%PaZlE%oP16MU_}vyeF9@}dXbioo6-zcTn|LHgoFne{1raY1QJ7l(cM#h48! z@N_}T{Q2#^ui!s+p1hl9E3l;*<tnG#k$O3S-5JTv@nc%>r8vYaK%SZ#8hpi9;t(?r zF7>DK^qpKhMza6>%@*=mZ2Prlr*dGE`c-`?P#bSW(FS5Iw;#cbww2t}Af7p_hd=hN z-9#-S8kY9S)Nn=G!+pUMA1hJ5h>_)F_98m4|FJ_G`y4uRG|gfq@dp-UrN}@<R)xG| zl-P((TMz*!zxMN~^tvS+I?Fmh^6YvYVz%vdE-hO@p=;}3*vS?*flm2}=-oPBf-s6h zD{Lw~DE=La`9eC6LQ*KY>V~G!o}EQ4v+Z~+%%db?t92zRZ2WQmnB))aBLflJ)u#*C z1`wLqxn}!TJbDv{_O%|LTOe)`!{4UiIQ*j;+oxcZb1f|cWw@D)Wz%;fe1!k*uls;0 z+*<T$o&%WX8$f9uXHOfR=t2IiKTWmFsyBg3d3{Wdvn-;}ptmA)awUHOEn>1iCaT)V zYcNI=T)N7=Hta%?_*4mwu><)(|3vE|IEZE|y7oQHoI+#j%Ho`nmDrshjK;#;P~&jn z4}U6MiG^N%xJ83z7$X4DOCGh#WB-C(ZsvXS+!H#F7c_#6aCKNi7xm52)n-h*SCcO; zt_9n@=IFKOb}uS^^DVuGy9dog$4z_$yS)7s0%N$J&zdm(w57`WH=U@1m$a*Tw)#In z6P2u7TSCH+E<Y`$r0Xo2DDfxjku1hON)9gFD(b{84A;@94|QQhb-g{djy-6|-TYjS zdk@mJ@b_VG?nFPDwl`Rc4q*(XlF7cK&FCY?Nk*=!5eyRG#87Nh*jN7~@gs@>jxnW@ zg;ZY!V_3`g^~~Ryyshw6IYrF1<^H*!tty(nb;iux@+Zu^M}?GTkZJ0u*yno_*vh5X zw*$i}(TwYj{rZ=GpwP5Nx_EHV@v*o__2L-37Gx<ZUUUs(i==@M%hK1e;A2`z_;_F0 z8_e7|egBr|tBatJSK!|I@z}~{EE*%BxgA*uWzd`%-V50zAy(N@p5yKhd$82nFn+V! zOW4G@F5Agt#aJ*EKYf);Ev94^Y7<JcfC?WDzgr;hKxB+F>x17K&_3nW?FB&n|8`}o z9q!-?c7|=bz%D)$hqOt**ly)+*aRAIOi2B_FouP>9{wUTRE_1E-x_WSpThRoU)8jh zL)fG97D}b+PtoohlC^VIz|5#@Hqh8pj7@P0_0VwDYy$lp<C{Mkzlvq{r*rOolZmd@ zpL#RKU5ebFfBxZV4aOO7*Tb&a<A$&~^|FKYL|s^Los2*NBZ-{n=^kFwt0_n}V@Q#0 zxClLoIehE96_8<av6~G`MVQ_Wdh*vH{V0As{H#wv86p5lcL;n47zKe_JAY_;;U~<0 zIa==R5g0T2q;Hqv>AC+u4i13yzEG${Hk5*6@{4EbM;Fk5w1}JNsUnOrV;8>dZ7%AN zax|%oO+ib6o(?Y@CNTH0rX6}+V1Vp6D<SdWBj(Y{!_3z)j1IUKTsdYyBuBWR{asXf z=AULU7B!n%<?MRIcdDI}mAL>Zy()I+5hTSII>X-g_S-kicz=*o-b@4brN2aGdukV0 ze!PD<^QnImsB-B@j$=zBCR@}n?YgfUU6PKdx=`AVG0n~i(LAfi2tY(rdaDb}m6)X) zmXJ`KkAj5DTJpegpVr--BTjl4qa3U6q}ty|uzvY<_DhV$dSUI`5T{aT<%J*R%x>|; z`NP`pxbSR_Ze`53-=A4vOMFshv00EWa{#j#1xwAt8%eXXzA6FC0yuFOOY+AI?MT{e zyL_0_G`j46&Z9aXjyRS5dUNMPkWh}j2wzDaisU>O_DQk~J5yfgD&M$(<YrEM`{>n= z<$l*CUr<@bD8r|tPtyZM>|G2)s8=s)sp3fwa9KiE-feSHac#ujsmdo*Q+90PSaO;P z+}8Yt!$h8B1spk$j5N4osEC~VQJt->jF?6x_O`1;%>k%nOEo*!6&)tAi26@{y808C z-@LKdv_U({E))EIo2~}E-P&WaH<T355g)Tdx~Cblw2ITO$>~E)uZ8>UzX4%_?fQGX zL^g&e53e}RmxxxhA9Plb0GYO;bDqNkSA+3{y=iF#MkWF1EH_p6W%*vrwwPnjt=cwZ zlOW{wh`ekQNbcrU`xvi!tT&TYxBUwYRpV=kcQTJbB4?9urhyS)4>}qoTHJxsG6p2r z9}L1Qg!aJ`yiG`qjFjOM^8j*q5Sx1VRX-+DsM2!>cYO|%KfjgA*rXjrHy#Mh3Hb+z z-hflrps0Nl2w#aRc|KKPT`{sR{TC}y!_gy8=YVkeHxMm}^0%)pi~j}!oah@n4w)3! zVcS>{_mKxBsG<ApgR9Aj^N6Tx_U`zpFifd9mW>vim4pIy=mHq4kbGg$p?cEJO(3o# z)h$nryO5hbe{oId7`od3GM0350lDexNeE<iVKOmSU!I>?#@-&Wm5Q-%-pDZYqlg#i zkA_<H{NVVB*`5<q*5U<!1(9-Qkt5q2`zsHwcc8w^lb$z%hmhon<j<7D#h7ZhHiPSO z29mBWn&OQB*9EUKpG>73OqoNnk|lr8SGb&6N`kD3i-i7J1s3^j%F=!&8CgG)FK5!J zz({#y%gkiJL1E)B1^2hyilCfA($~^HlKCEsAr?Hts7lKwCew#VdGG0w|LnlHhn5SP zN*hpz*S0%PCps|tJ*B~B1~7I;$2^&dw-A$G^)h^$Irk@od_RU>pV=4lfaG@xkq~Rv zZOU#oZ4`UUeW9K%5>7(-CW8H@UlC*P<WBn=kc#Vl@8^x_{ZFjjF-~9P9lCy(iw2$+ zjWlv~W5f36NI9m4G5kY?Pdw*>5ao|slQ+JFV@Y$F#PZYiNaA5W8-vFT7T7|Rev$_q zt^#fMX9?6};oLkS!_xJ?V~Jg@JLjg?fj!GFGYp8Wz=rCQ*3*0|Faz6#IO*;ASO*Vm znpVLWAr{-~Z4to-mr+M6Q_o;vHTE({g5*%?(C=8Pdza~ED*G^dYq9dMg;q?V&+ce4 zYZG>f*lj_|srWy!3j7(~MeSHdCvIt~1{~_$j0I;PdJ$j!c4A3VS9I7npq+Rxsq6IN zUu7xyf&Yl_@bBMfANf_5g5SJ4;w#hf>(AuC|N8x#dH7$ye<LWFqBuz2ONsj~|7dQu zABH0cS;>0>kJ(NmmF^`-(5z|inoEJ@fTi#rdohb~l)r1$&`AJFx^Wq*!!QeFdQP9} z%}z4B>Jj(DtL;>HBTrXxN>GIPPM@Gke>#o0ESM&)*?>PfQNGY)kfE-!i|%f90j}Gt z&@;b=x6R%iBi?ZfD5nIVC)c_Iwpf8CEig`RH?-L`N%C1(p8>o7FQ7=Nte+8-K-Am- z%FD{BCAtO9?hnn`B7v0mnQQPnBUn){ywTmqBtMR3If|#Q$G~hAiMGM@K<I^T;PB{N z4aJq>Nbny}Sm%p1Aj53{dG4+csJ}&l4|VLQKlAjTJ7PEC8KQ>Qw(?1zoc+)cvZwp{ zX4HBV4Q-!etKkN>{|z9E?G2iV@O!oASK9P|EAa>DADjt)mIswL81cVxZ~*j0yw*(y z*t+%GI~#?+fQC8LMr%7%-v0*LfBGE7jP3*~N?SR|{0K&qUM(bj_Xu2qsk57}-W*3G zZPN!ACP?wjJVv=I;E78BDp#s|o*6`g_tFL5IGBC(?Zf=}y%b>jANZsOM|yI46X?v= z!d~@fqac!8H*cN?;~l5n{1KpGd+TOcZay%I<_$9I^s4>=YIh+LFM$#~0mz(UU+;Su zz-;bu(O<j>c#zk7soIsMki2}Iuq-f7GE=7ll(ps%R@2fh2W!kRMi)mXls}0c)yI4Y zc?x%8ugn_-RGsE9l@l7b!6I_wj$WN;-%?scir=nrpCwO$6dzl6jh&gAbQ6fF;`DW+ zs~}T+D%f8CaTG;gO~PMKpWg%$4rtn^0n{JcyWLWX;E}+5Ikip04Lmcgarp(q0HmQy z7A9W_;{^T>pc^{Z$TC39qoaBLv=yx8oa5RCGPW>UdQy|-HCPOk)hg^e0n!x$P_J|d zqbP9Yu7?IIZF@0>qUa7Z@j(5LfYa9TNPPsFXxnicca;6mvnj`71<70fV4H>A7N&ZM zk)?wJq#UJq^ABKXGEUqqgRaoy)(H8_u-cEkx!<M%)+4KxB;2n#V3kt`$sWsrsV>Wx zZ%&WFoE+~s%^%EjhyWy6Yo!uLGLHy2(l_%@h~Ah%EEfb%NV?pI@Ag{2%jj_!EsxVP zr(OA7GM^B}#YIglJi0uC9%W$Lcs>x}zbWj(+E0KPp;G&i;<{y|J*N5d7d!IKO}!&Z zq4P+G_}p_t+yXe>8*09?+KwMiq)6qfnL+6$>mOs^kD<5`llP~;Pb1oP2`%TBi%9XV z!=4*I7tlTGgZq6Y!0LNTWlb4O+1x5FRr=fxMsw7zdlc*3g07yYoOTA-Xyht58#`W| zK?22IacS5Xa_;ih6OUa-CfpxS&8mZDXhyiv7ABz3#ifKP)=hx1?E$?o`bqTG^}}WF zp+&USkIyq31gVd91=wfMkQ0D5aVmB0(=v{LkqIt}Z^j&~Ia@+6%j`&m_UjG9tAUD8 z7~KHM)mLV-?}V1`fm%@}pl$lrXF5Lx)nisj4b#>8Tk!Rl5(1~74KymW@Nmy%P)X>$ zHpXCoJ$an?<71-*Bx7NH@EqUR1`w2>cI7*$>%m~N4V;TKkJirNZonOH00rG^x7rSU zT@@*9Q3i0vd|p#3xRkMq2taB1OKXDdMEI-b2M>k85~b$69NY`eXat~JHE+CVLqYjA z^i|6Tj4TO26CZ@M6oIBD7WsZ>T{ev8r9Z{62UZv>ueUJn`42FZE>mf6-$jZyI#JMl z1@^U!w61JMeq#LN6C|fgp}8`Z`@s9|#YHrsw5#C)>m<7UKB~wO?yyd5(j?y%ge*2M zYPq1XllSD-;alJr&}YZLU07ib%~}(?$KXa`elWXK92k*3*6UfJ=B2|Qe(ND<3i5rj zA#a?c{tyv9e41));t9Cp#0FK{P(n^j|7P0rFbpQz08)K@zW$oeBw91^vA4Roj#>hm zyt|ZvBW!9W+Yi%J2tZ?ZgA+Im{sB^pJ9|e4W=3}VD=3_UX<2Kzm;35hrcqj}${QMq zMbssLOVyYMx&<XaU9`UyF}`fIyPAiL3~v=7<;Yx0f+qmoGWS5j*{dkzna+zny`yM< zQIxkZu=fae6u0M`wxstQ+Q&m(f87c8zk`WiFI0gqG^-i5EfUnvpUUr47lCZc=0ldv z={aPXu;-}4GA-T|H+J&=cCg$Rebn<Pm}?T9erMhGL|`4=a8@P`0>8lJ>mH(Az<?zH zv5^m(drHnD^*3VW+jZBFNv37CJt*Yj^<;0J0Yw}`h*<R<*zQKz({fSMB6=@9Xr}U! z3U9iB(;HtGAU8gNbm_To<Xs@bv(Sl?=!f}_{s-uHH5TX5aQ117%pyvys1?{IMvQ;Q zo77SbOHT{4-bUgB_G5J24lMho5b>U~slM@3$lR14pOOjhfvpM?&o#i1)3Y%=l$Q$6 z@?5~V{4L}J`@)Ue)WMpZV@8_=mY~K(U)PiL#Q4){uQWJdzRv#BEi;#Z9-v*d<Z9pw zxdQ=6qGkD{*z^?ev+|C|EQ9Zf?`|o9*cr5DxJyBZ7Bm%&!y48m^Jr(wfvVT;U{7l@ zqD%rg!p@b~wWIJx6c|d2pNJ;H(-=9{=>>q=d;^H{RDbWQeV|6!xS^_=-k68LC;5W| zQbewDuJGm56?9&c44-KPe0T0aeKH^pY&%b#bRRf-_lDQCu*Wc<Dbn(380-=vidSaH ze}Ws>fjzSt4lt&8188e$hMZ{l5^4z>*v|$;pJF!OnqJ^1+P&nLx~H&$N~SJ_#ytiC z6GM}M4>(JnzAiu_gwr6#JDZ+UkP{f&1d^s9KXf1;Y^p;zf(IL6x^Tgde71;5^e{L~ zNU)a(e_mN6s>WazF@2&jQTaHIj$T}e{$<AeH;|{k@=Podthir5fP=Wnx2uCJhM4Gp zm^9Tm;yzK=fZGjZY!#!U2OS|tu!vpypa=UI0m#L`$xj9zwnnY>LSb+UCji|UiFKU; zJuKml=9<XJr6Gr?ZBXGJ(j~`J358Qg0FYGTfsV1%QIwxvHpB*R*4^8`o8i~T5#Dq- zL%`rS4(|6I{S9=PmBKSQ0A5KOKtJ+JN49BBqtoS67wu1ho#qD6B~?<BUN|62KF(=P z<{C$=JElGgL6SlMQhP^IUI_c|sn_ZvyJ0A}SkAG@%62e$pV6zTwH!y6S#f`WSbX-a z+eVS&wdZ`5Vpu?SmiRQ`pwI*wdOy+}O-h3&05PN~h8GEqqoJ=$1}%@rQ1!Z1CyVqL zvXw7Lrk97NwZIk+!Mu62L&!n+A&_n^4s`z11C6wWBBiTWBFNmpL}30p5&lU~fr%wN z#3VR#MPHXCNI*A$cF(caNr6ofgU1VE-De<GJjgw5ND9+oayu-T0H{!o?|a&ASR0QA zqxqwjH-Xx>d3ls`{!$JE8sT4pma6!bxmw{C{NutHY!W{Dlnb314<X;oY&l8mqREIS z;II&YB6k|F4SyI%_fvhYe*^{4pWT6jwz!=Jp5iQZGX<yRF;qt@qMaEBPFPJQv2D;o z*y2T8-{ee;?@L(l650v|b$j|d9gdG9l^?uEwBTv~{*+7Rf#Njc{CO+u1`jwS?DorQ zcL5tm_sS6KCa~`v^E3&C{9Gj_#c%k`EMmV!n;8Cd6h+)w3w#(gh6DT7({21<GLjH7 zB@{^mmcC!qclPy-BQ3t7Ey`J-u47&}&1DMd>2+PY`h4&kKG}`$d=4zK^G7V0_`#4M za*@dfUfBeofRf9djE{-&9y%o^hnN=7O!BhB6?kP=?<p%d1fNrktC*M^>>?@mg!tV~ z!tQXP>Ps>!HCXVPl#91On)_j0-Ih2Tln)y~L37$H7Omi#vH`?PCGvzQd>ru>%pSqP zG_KT)Z70u%&7&0|scZXT#Uy{ECXa@1{$VEF%>CLG^l?fc>Y&LKTD<xoq6^MkDjzaD z$rt94ka_l{KHL|`Z`0zG%8SYH(ZO@cZICVc&{ldUfjM!7EQi?gk8!jY7gsJOPK<YX zdXH$o^(>Ma@fW7@8ABa`FFeiRuvQh;!u~FH0r`8fgu{l5IwQ@__Vf|q;~&;i9(YZJ zk9lA_D@6~Z{jA#DZVav=wKLmjq^ze9DeG(#ZmT`)ck@Rg?oW&%4}GyoHz$%!APQE> zBZZL8=HIa<{p<)9e2etE^<Kk3dXAS{m*4#th)0@#mnO8gbpi_>Rb|6=WSS<vqXZOL zJHoU*;X?n$`9dp#>-YkB^ugtxqAML>X7uP>)+`!Du20+^o8S8fh|4>$H`j0pi62;$ z-n~MCcjl#L<>`h|FAtWgo<CSdPP?}>`}YEi$K+5{p4S+{=<l%#?FM(ojT^f8K=`7N z&pdK|LnC;ZWDGrP&ws_71O6jfxb;!yOAAPHn+Rn(ylS#?>F}{jkm(-b7SoF&{SS~> zI(wD?P?MfN@!-e@S-<Qh*@h@cTr+asr@vhS%3zTO)sA{1e3#>-uJ`B|x=$STv?KuL zRaaDX6okzn!@c_NufWr`S6S6lo_7}EaV)aM9~M>+;f^#c_78ZoO(H2bo*sP|O4ZR^ zOnnS^XV1pO9kqHuydocb@p~{BR4uVxZaX)N2tbZ^*{2^Dj-gRcB8djbuyb|ixnw{= zRpfAKc>#d&8#rsj0Z0P4X1uQIFLyA(*!MNM;wvmaC(x5o>IdJ?Od(yBVoP&5P(=Rf z<l^@9?-_C8gac0^)9KW+ODJ43|1`JT3>tEz*SrKe>obL{uZ>_cBPC`DVth7*jAhIe zYhk5ye!qO6xN!=lR|cov7@bE>&&7`%8X?7dj7smj3iP#m>oYoG`<9WBA2#s~=yrH2 zKG_u)GQ2yjg<1PB37+B8F_M_$GdMJm7Z@xAqFVyc7P|s5pZhb2V}2{0<AYHobdOe@ z_9M(?$$R|7WOm^{Ktkc$uB~kcrP>oa(p~UH{SCzR!y;<%8mN!i*7{%AL5J-1L?OEa zY<s_P!0Mtn@}g8Iq^%W&`%C+wa<cCO-mgiV1b@6x-$5Eo9@olKm#rdZP{G%DJBL&_ zji06&8wMg(c1zf3f7u)ot$3{DyiSB~(z$E(jUNc3bEKpkxN&s%S-5+C79@L?Cld<x zzzr@R6dxIaVUi}@RU|PRI5+_E)kzpIjb7LUlAL$v`OFRl4#^#FG~&Su@sRF^w{k1! z))^%W9cnP@RNwQc1m2iiE-7i5>Z~Bk^%8Ntpw&&Ft^Lg%XC*<UEN3uxGI|_+&}gMv z0G!?|?xcoS>u9Kp;Y?%{`0<hkoWy-g0s1G(yfvK+>DdO*GXrwP@64olsfJjZC8#wi zy4d+IO_1Sl&hXLL{UpK@?kHZd!HruL+$EoX`j7zB(&K~87oydO@ao&MNJ~B}qql3J zA;oc{Xu>Oru@UyurB;~-w6UY;yzepXfE(b)VnB}j4b&R<^&JyvZ3#fbp3G_&<YAhf z3#XY9Y_ww%iw_pz6rOiBv0^{??dEx0aMm*+!UyjUGvxs<bpnv`r}t8^qEl$De#`S$ z@DLJ!DAjPb1BqaDc<Ox1Qx!<`H*RRy6ZZ#*R8ww+(-J%~P8_%Agv4{<<)Sk+kok5w zrPI9MKZ8ovyQv%umyx)|<FH>NQX8)?yCr;^MPx+-hPLqc+E$#0RTifa0cds`N5uI_ zm`r}^2KUFVMdV|vF%s}(6k&1Q>^^KDddO3xO@~x~8>d#hWZ(mC^1Cdm%lW6!nOe$I z!Z1ridR<Fv9`;Km`(~oCyOSvYqqEl_0RIj2Vor8^KfL=G_a*ZkXj?-$Omd3l0F*Sn zOShkH0+n$Gnr6b&m15&}w;BvX$s|4{Ih>tBJG25vE?R=5elVB4MAv^B6`honb_Y?u z<Ep3sS1|tivpbMkU2q=um_T;SUOHbzW>Iuv9M3sWRUWastuO$@$?`!FTpskf?>r|K z$b}Puu$%YYF-U8>?>zHG@)UT%pwpxez<WM6BM+P4fcKB<9KQA;1^#q`Fl#In54+zC zJf47#nhDjK$E5A*-#9pYScY1tTO<^AO!x1Qc)N}Y$ynH`QlMkCx6(g3czF|O{^xF| zY6TEtl{QCqJcF7(Nmz8$%ocnGLx6o8932Tjb7^hwlIX#|&~$2RL-HIte@MFK#qb(3 zt_nD{^m2R?$K8&Co8$~`8GS#smo*IbL&6;eNjdKFg?#(^qReHPV`J#K$2tBm;U%Pf z{H1ey%_s`0?Cp~dTtE+dSF`y+6-NLvr|e9B0}taN(>L`VO=GAg+^b9N%`*A}w2U}+ zxk$yR!#HvEf*V166nOblvv<GaKu&iXAAWE3e}IPQhqguD19{&D(3yhV;c<}aHKiZi zV-^9mxDBBCppG}V;xTmcbo*T&IQ|oWK3h{HyaTcz*?5L%+9K#pi>W_l!ivdwMrtW; z2i|rQoR6_3B0PH|X*n)$=Ol{7owKC^7bO<5yX)?6=aIZs$hj&%pm1idTpPoK4-K7M z^gJB%2|zy-u1e6R&mxE8ANg}($yz*o7vn9zh(gk+4k&(ud^y;-qFDlJQ2OLTq#28- z__Dv+UdR{w7P_nLR^f%UfwOQ&5of%QksMF+GDt=PfGBovAz{&iffZ+xEiVPb5R_TN zPp!X-Sfi=#ay%1gS*o|X(03aiAIEMd91QN<Z{lWI<RI;vN|{~=B*jNbZ@c>$fMz0C zFRWNkBS{a(UIlZQRd`47H;&NpAjPbKc@*2a*MDLa^35e&pYG`41yu0FG>QJ_>i-Ee zK$+W`b8Q^G+hL&@&q|CJiBYnbf^4W-v1()jGH%(U2ThwpptOU0gT-J9<75nvXFl^9 zVpMYH)gpqqwo*p&8eX$V!Sh*bofsvaa6{a<7b=P6#H(n3vyf#598HX#OPldBL&w@7 z9VJZA;o|~~N)MMq>1P`a-2@zK!^}iDo3lXDMR9gw5stM4pds>-P^=h|k|KnvAkiJ2 z`gFV*G)8j$xpk6nMiKW0PBXrHZ4kDz^d=;-eFuCMS_1(LACA!A75uN}4p7gaLF-3X zbd4eR|D8L`+>tza-5Qd%tF+EtU}qD$>rx0U+_(2Dv7BA};7F+}J(2c=7;jojW0$A~ z3bQ74##iiPNO@I46GsPQbq_LX69J9*PO3NORn;{VkAGY`I0`<kbWBCp#HP`qqiYfG zd%z1Ouu!3%bqVRXj~Z8dFQSKhUiak_pelJID!Fl|7<jL20AXennO7~w(7}7T6*~Rk z-4Gm;%j5-~N*c=APn^e4f~2|WrDw!=cRIx(Sy>o~rdt@0Of&Z%pw~}&Qe~cz;n&|@ z){x)6gaY<v?v>*P_lv5c<%j@M`~&CWG8Gcse}NR!&W?8_{{!^M?p1MY#w_Yo?IEFM znMOU2FR%V`p#GXr_vudCA|iHOx`nDq@Y}cpuO&gn|3Ny1djp)@2te^kftgutaMDO& zIl&K>x#>HJXIK}<5%ptT$!r`5WC?eawj^JZYrKjcEOVxM)Gwe0-vw%6V9@;ybag+& z(kg6U7t?I-1h2p>HcF?jGrBA2o$<)G>!EXqmanK);1YZ#=19q#avUa^mGka{0|Ws_ zDeNq!e;<secOE~AYlf*)L3e3>ltu$3{<%>dE69TgcXWWyH4X;_^HC!K_8Tmdn?Tbq z_OlyQKtScaPivqG`JnTVkiW?^YFLoZ<A$a8q=TA4on#Sp4ms9Pw}7NWHtvT>5R6J( zU8fcUe@ADbRUWG4ag@u@gKOt^qQ_^2nUNl19z$DAb=vE9P9uvVOD)SEMEJN;IXaQg zFhET2g3%c${dc>@-!%-IMTXP?k8i;#aYTw~ZB-D=Vm5$i-Tm^1tS6CP*XdQJIj~86 zC&M{z^c(0m4z-$f87maW-kYQyzW!zf4H@FzJ~(<8ihq)s2TmD{AtrUAFY-{>F!mSb zehb4rCcBANEFjS|n{|%u0_U>Nr!Di_;ZWvrfr5R<<SJTmbMNo@bw~8v^ggf+!5#eu zTJYIfK@Sfn0f>=3aGDsBnaCT?_iet7Bh&In_^&WV+Zgv3ka7&?m>k&R{S9<KSXw6# z9!rVQ0%5reU=)q}!uA;v;dwO@o)1FZB1bOKsnc&B-L_~t`xWN;##D|*-&ccamm5Ih zB<tTqK2M^1w*=ju>;>2Jqs{IHU>wczOvA)X@#X}YdoO)(UY`_Cdu#{$vA~Vp;Y^84 z{}boi<EZee_^{X6Ih5zu(Rv<+9Xu2Cr1KvE|9R`L2E%8j(bihL6#2_hG`xpis_Ymo z{!GQuU9rC7C|ba<S1oS)@9s4Jj2RbQ*BBBkovDo+0x`@+taaxiVJa|E-}?5IASdj! zJ~fiOkKF!=bxvMF{e|_!zhWH~_AI+xJh>U`kpK3;C9o%uV`epxvWIE#m+aB2cjKF} zrsz+Q_^>kIzrJXDo(}!S|GloO$rD0)s*}j~<~HeW5Hsbic=nk>zEd$K?0z<L427@^ zgdIi;2s`ztm?9KbeNLq8C>(D7f3br5CM+1Ct>~0xw`VIH?BXnx8$0~Q&|KQWg;e<O zIkzu6Eo>GyV-@;gBjyj5He)Tn&UBV|$?*I0dN?)0H_|zU0?V(ZvD_O+*UfG?FhT4~ zx2!TdAkERs-O@b<@A9~*uq>rl;GC;*G*OhFX!9Pk54P?zR-*k^tjV_QTU7kB=;MQf zmA$ZDFViZd+Ci#CYxC9b%bO{bl3XeN6oij|$9h&KrXUpeM+nC_6h-dfIf1y3WlLK_ z`>0*(G3lZTG=+~p=p=?d-MP24m80jtR#5x}t$j3PMJ7W{CpAg&msdNA1YnI!<uks# zEb~VsR`;{}e1HVFK_1ntGJ*&CUaWyJ9{wFts3M&Yy)ZgepXMI2vCUZNq7-$ChNSpf zH$$#@c%GydcKDmXH2Gfw7kb4L;Tc?0s4(Ms@EgZ5biQWbeO48u(K9woHBdMHJJ!t= za{*5n225T_N>^hJhxv_I@LmLFfaNY)vNuYsE~Js$rQX!BK7Ng-OzGG~dnSQ&fL-d3 zie*4e>W_+Lz**{#ie=!t)E^bgz^K$870UpZ^dA+=fV%V_70bYL>E9|ADjeB`MHNc3 zd90=&g<VFx1sQ~HZyXwF#ex_^aFgX-h-JI!+?}YO*y96VdHGelF)iB3L2`9CF?|~J z7d$zHMX~gH1?`{3%Fivk2HfjGg+J$usQp{98Q$`1Whs4F#`KwG#99U{%0D>TKZX4= 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 Bg-!qf delta 4905 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 diff --git a/docs/diagrams/.$Structure_BayesInf.drawio.dtmp b/docs/diagrams/.$Structure_BayesInf.drawio.dtmp deleted file mode 100644 index bb32f9077..000000000 --- a/docs/diagrams/.$Structure_BayesInf.drawio.dtmp +++ /dev/null @@ -1,449 +0,0 @@ -<mxfile host="Electron" modified="2024-04-10T14:28:07.605Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/22.1.11 Chrome/114.0.5735.289 Electron/25.9.8 Safari/537.36" etag="Yia9ahrH6Vnw8ZCcm-TH" version="22.1.11" type="device" pages="2"> - <diagram name="Class and function structure" id="efOe0Jku58RX-i1bv-3b"> - <mxGraphModel dx="1686" dy="1114" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"> - <root> - <mxCell id="0" /> - <mxCell id="1" parent="0" /> - <mxCell id="xary-zVek9Bg-A1b1ZmA-1" value="_kernel_rbf" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="1070" y="200" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-2" value="_logpdf" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="860" y="130" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-10" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>BayesInf</b></p><hr size="1"><div style="height:2px;"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" vertex="1" parent="1"> - <mxGeometry x="-80" y="280" width="1270" height="820" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-24" value="if self.bootstrap <br>or self.bayes_loocv <br>or self.just_analysis" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;labelBackgroundColor=#ffae00;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-9" target="xary-zVek9Bg-A1b1ZmA-13"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-9" target="xary-zVek9Bg-A1b1ZmA-18"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-42" value="if self.name != 'valid'<br>and self.inference_method != 'rejection'" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=default;" vertex="1" connectable="0" parent="xary-zVek9Bg-A1b1ZmA-31"> - <mxGeometry x="0.5646" relative="1" as="geometry"> - <mxPoint as="offset" /> - </mxGeometry> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-32" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-9" target="xary-zVek9Bg-A1b1ZmA-22"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-43" value="if self.inference_method == 'mcmc'" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="xary-zVek9Bg-A1b1ZmA-32"> - <mxGeometry x="-0.0958" y="-1" relative="1" as="geometry"> - <mxPoint as="offset" /> - </mxGeometry> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-33" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-9" target="xary-zVek9Bg-A1b1ZmA-19"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-52" value="always" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=#C2C2C2;" vertex="1" connectable="0" parent="xary-zVek9Bg-A1b1ZmA-33"> - <mxGeometry x="-0.112" y="1" relative="1" as="geometry"> - <mxPoint as="offset" /> - </mxGeometry> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-34" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-9" target="xary-zVek9Bg-A1b1ZmA-21"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-47" value="if self.plot_post_pred" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="xary-zVek9Bg-A1b1ZmA-34"> - <mxGeometry x="0.2399" y="-1" relative="1" as="geometry"> - <mxPoint y="1" as="offset" /> - </mxGeometry> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-9" target="xary-zVek9Bg-A1b1ZmA-20"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-46" value="if self.plot_map_pred" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="xary-zVek9Bg-A1b1ZmA-35"> - <mxGeometry x="0.4183" y="-1" relative="1" as="geometry"> - <mxPoint as="offset" /> - </mxGeometry> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-54" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-9" target="xary-zVek9Bg-A1b1ZmA-53"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-55" value="if self.bootstrap" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=#FF9A03;" vertex="1" connectable="0" parent="xary-zVek9Bg-A1b1ZmA-54"> - <mxGeometry x="0.1816" y="3" relative="1" as="geometry"> - <mxPoint x="1" as="offset" /> - </mxGeometry> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-57" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-9" target="xary-zVek9Bg-A1b1ZmA-56"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-58" value="always" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=#FF9A03;" vertex="1" connectable="0" parent="xary-zVek9Bg-A1b1ZmA-57"> - <mxGeometry x="0.7182" y="2" relative="1" as="geometry"> - <mxPoint as="offset" /> - </mxGeometry> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-60" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-9" target="xary-zVek9Bg-A1b1ZmA-59"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-61" value="if self.error_model<br>and self.name == 'calib'" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="xary-zVek9Bg-A1b1ZmA-60"> - <mxGeometry x="0.3024" y="2" relative="1" as="geometry"> - <mxPoint as="offset" /> - </mxGeometry> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-9" value="create_inference" style="html=1;whiteSpace=wrap;strokeWidth=2;" vertex="1" parent="1"> - <mxGeometry x="405" y="539" width="110" height="50" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-25" value="if len(self.perturbed_data) == 0" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-13" target="xary-zVek9Bg-A1b1ZmA-14"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-27" value="if not self.emulator" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-13" target="xary-zVek9Bg-A1b1ZmA-15"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-29" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-13" target="xary-zVek9Bg-A1b1ZmA-16"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-44" value="always" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=#cdcbcb;" vertex="1" connectable="0" parent="xary-zVek9Bg-A1b1ZmA-29"> - <mxGeometry x="0.4722" y="1" relative="1" as="geometry"> - <mxPoint as="offset" /> - </mxGeometry> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-30" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-13" target="xary-zVek9Bg-A1b1ZmA-17"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-41" value="if self.emulator" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="xary-zVek9Bg-A1b1ZmA-30"> - <mxGeometry x="0.6143" y="-3" relative="1" as="geometry"> - <mxPoint as="offset" /> - </mxGeometry> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-62" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-13" target="xary-zVek9Bg-A1b1ZmA-59"> - <mxGeometry relative="1" as="geometry"> - <mxPoint x="340" y="680" as="targetPoint" /> - </mxGeometry> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-63" value="if self.error_model<br>and self.name == 'valid'" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=default;" vertex="1" connectable="0" parent="xary-zVek9Bg-A1b1ZmA-62"> - <mxGeometry x="-0.3906" relative="1" as="geometry"> - <mxPoint y="156" as="offset" /> - </mxGeometry> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-13" value="perform_bootstrap" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> - <mxGeometry x="40" y="310" width="110" height="50" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-14" value="_perturb_data" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> - <mxGeometry x="-40" y="560" width="110" height="50" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-15" value="_eval_model" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> - <mxGeometry x="1050" y="660" width="110" height="50" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-38" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-16" target="xary-zVek9Bg-A1b1ZmA-1"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-49" value="if hasattr bias_inputs&nbsp;<br>and not hasattr error_model" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=#ffae00;" vertex="1" connectable="0" parent="xary-zVek9Bg-A1b1ZmA-38"> - <mxGeometry x="0.3126" y="-3" relative="1" as="geometry"> - <mxPoint as="offset" /> - </mxGeometry> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-39" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-16" target="xary-zVek9Bg-A1b1ZmA-2"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-16" value="normpdf" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> - <mxGeometry x="650" y="390" width="110" height="50" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-40" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-17" target="xary-zVek9Bg-A1b1ZmA-2"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-50" value="always" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=#cdcbcb;" vertex="1" connectable="0" parent="xary-zVek9Bg-A1b1ZmA-40"> - <mxGeometry x="-0.6073" y="-5" relative="1" as="geometry"> - <mxPoint as="offset" /> - </mxGeometry> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-17" value="_corr_factor_BME" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> - <mxGeometry x="650" y="450" width="110" height="50" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-18" value="_rejection_sampling" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> - <mxGeometry x="400" y="990" width="120" height="50" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-26" value="if not self.emulator&nbsp;<br>and not self.inference_method == 'rejection'&nbsp;<br>and self.name == 'calib" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-19" target="xary-zVek9Bg-A1b1ZmA-15"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-37" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-19" target="xary-zVek9Bg-A1b1ZmA-1"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-48" value="if sigma2_prior is not None<br>and if hasattr bias_inputs<br>and if not hasattr error_model" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=#ffae00;" vertex="1" connectable="0" parent="xary-zVek9Bg-A1b1ZmA-37"> - <mxGeometry x="-0.5544" y="-1" relative="1" as="geometry"> - <mxPoint as="offset" /> - </mxGeometry> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-19" value="_posterior_predictive" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> - <mxGeometry x="675" y="590" width="130" height="50" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-20" target="xary-zVek9Bg-A1b1ZmA-15"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-45" value="always" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=#cdcbcb;" vertex="1" connectable="0" parent="xary-zVek9Bg-A1b1ZmA-28"> - <mxGeometry x="0.0517" relative="1" as="geometry"> - <mxPoint as="offset" /> - </mxGeometry> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-20" value="_plot_max_a_posteriori" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> - <mxGeometry x="495" y="790" width="140" height="50" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-21" value="plot_post_predictive" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> - <mxGeometry x="630" y="720" width="120" height="50" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-22" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>MCMC</b></p><hr size="1"><div style="height:2px;"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" vertex="1" parent="1"> - <mxGeometry x="1230" y="425" width="760" height="275" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-36" value="Note: Arrows indicate function calls, beginning calls the end" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> - <mxGeometry x="10" y="10" width="190" height="30" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-51" value="Color meanings:<br><span style="white-space: pre;">	</span>red: wrong, change<br><span style="white-space: pre;">	</span>orange: seems off, look at again" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> - <mxGeometry x="20" y="70" width="220" height="30" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-53" value="plot_log_BME" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="220" y="980" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-56" value="plot_post_params" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="660" y="840" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-59" value="create_error_model" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="35" y="840" width="120" height="60" as="geometry" /> - </mxCell> - </root> - </mxGraphModel> - </diagram> - <diagram id="ME5gyYpVqUByTnAIOcMV" name="Parameter and function interaction"> - <mxGraphModel dx="2049" dy="1366" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"> - <root> - <mxCell id="0" /> - <mxCell id="1" parent="0" /> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-33" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-1" target="K5oJ7VEt7dPmeK6pba1f-32"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-54" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-1" target="K5oJ7VEt7dPmeK6pba1f-53"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-61" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-1" target="K5oJ7VEt7dPmeK6pba1f-60"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-1" value="engine" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="160" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-3" value="Discrepancy" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="240" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-71" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-4" target="K5oJ7VEt7dPmeK6pba1f-60"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-4" value="emulator" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="320" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-37" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-5" target="K5oJ7VEt7dPmeK6pba1f-32"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-57" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-5" target="K5oJ7VEt7dPmeK6pba1f-53"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-65" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-5" target="K5oJ7VEt7dPmeK6pba1f-60"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-5" value="name" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="400" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-47" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-6" target="K5oJ7VEt7dPmeK6pba1f-32"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-6" value="bootstrap" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="480" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-7" value="req_outputs" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="560" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-79" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-8" target="K5oJ7VEt7dPmeK6pba1f-60"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-8" value="selected_indices" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="640" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-9" target="K5oJ7VEt7dPmeK6pba1f-32"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-55" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-9" target="K5oJ7VEt7dPmeK6pba1f-53"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-67" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-9" target="K5oJ7VEt7dPmeK6pba1f-60"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-9" value="prior_samples" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="720" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-36" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-11" target="K5oJ7VEt7dPmeK6pba1f-32"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-68" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-11" target="K5oJ7VEt7dPmeK6pba1f-60"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-11" value="n_prior_samples" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="800" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-38" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-12" target="K5oJ7VEt7dPmeK6pba1f-32"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-80" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-12" target="K5oJ7VEt7dPmeK6pba1f-60"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-12" value="measured_data" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="880" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-58" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-13" target="K5oJ7VEt7dPmeK6pba1f-53"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-13" value="inference_method" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="960" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-14" value="mcmc_params" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="1040" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-63" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-15" target="K5oJ7VEt7dPmeK6pba1f-60"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-15" value="perturbed_data" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="1120" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-45" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-16" target="K5oJ7VEt7dPmeK6pba1f-32"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-77" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-16" target="K5oJ7VEt7dPmeK6pba1f-60"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-16" value="bayes_loocv" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="1200" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-64" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-17" target="K5oJ7VEt7dPmeK6pba1f-60"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-17" value="n_bootstrap_itrs" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="1280" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-18" value="bootstrap_noise" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="1360" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-46" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-19" target="K5oJ7VEt7dPmeK6pba1f-32"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-78" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-19" target="K5oJ7VEt7dPmeK6pba1f-60"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-19" value="just_analysis" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="1440" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-20" value="valid_metrics" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="1520" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-52" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-21" target="K5oJ7VEt7dPmeK6pba1f-32"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-21" value="plot_post_pred" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="1600" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-51" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-22" target="K5oJ7VEt7dPmeK6pba1f-32"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-22" value="plot_map_pred" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="1680" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-23" value="max_a_posteriori" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="1760" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-24" value="corner_title_fmt" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="1840" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-34" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-25" target="K5oJ7VEt7dPmeK6pba1f-32"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-25" value="out_dir" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="1920" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-50" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-26" target="K5oJ7VEt7dPmeK6pba1f-32"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-66" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-26" target="K5oJ7VEt7dPmeK6pba1f-60"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-26" value="error_model" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="2000" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-56" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-27" target="K5oJ7VEt7dPmeK6pba1f-53"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-72" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-27" target="K5oJ7VEt7dPmeK6pba1f-60"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-27" value="bias_inputs" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="2080" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-41" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-28" target="K5oJ7VEt7dPmeK6pba1f-32"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-28" value="measurement_error" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="2160" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-44" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-29" target="K5oJ7VEt7dPmeK6pba1f-32"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-81" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-29" target="K5oJ7VEt7dPmeK6pba1f-60"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-29" value="sigma2s" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="2240" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-30" value="log_likes" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="2320" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-82" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-31" target="K5oJ7VEt7dPmeK6pba1f-60"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-31" value="dtype" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="2400" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-32" value="create_inference" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="400" y="20" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-40" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-39" target="K5oJ7VEt7dPmeK6pba1f-32"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-39" value="n_tot_measurement" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="2480" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-43" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-42" target="K5oJ7VEt7dPmeK6pba1f-32"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-42" value="Discrepancy" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="2560" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-49" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-48" target="K5oJ7VEt7dPmeK6pba1f-32"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-59" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-48" target="K5oJ7VEt7dPmeK6pba1f-53"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-48" value="posterior_df" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="2640" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-53" value="create_error_model" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="560" y="20" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-60" value="perform_bootstrap" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="720" y="20" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-75" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-69" target="K5oJ7VEt7dPmeK6pba1f-60"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-69" value="__mean_pce_prior_pred" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="2720" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-76" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-70" target="K5oJ7VEt7dPmeK6pba1f-60"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-70" value="_std_pce_prior_pred" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="2800" width="120" height="60" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-74" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="K5oJ7VEt7dPmeK6pba1f-73" target="K5oJ7VEt7dPmeK6pba1f-60"> - <mxGeometry relative="1" as="geometry" /> - </mxCell> - <mxCell id="K5oJ7VEt7dPmeK6pba1f-73" value="__model_prior_pred" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="40" y="2880" width="120" height="60" as="geometry" /> - </mxCell> - </root> - </mxGraphModel> - </diagram> -</mxfile> diff --git a/docs/diagrams/Structure_BayesInf.drawio b/docs/diagrams/Structure_BayesInf.drawio index ddabd26ef..783474b98 100644 --- a/docs/diagrams/Structure_BayesInf.drawio +++ b/docs/diagrams/Structure_BayesInf.drawio @@ -1,20 +1,25 @@ -<mxfile host="Electron" modified="2024-04-10T14:28:03.443Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/22.1.11 Chrome/114.0.5735.289 Electron/25.9.8 Safari/537.36" etag="3hqTB6OXl10kbEaaeQUl" version="22.1.11" type="device" pages="2"> +<mxfile host="Electron" modified="2024-04-16T13:25:41.772Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/22.1.11 Chrome/114.0.5735.289 Electron/25.9.8 Safari/537.36" etag="kqhl2wKZ6XE8FElsZ9Hq" version="22.1.11" type="device" pages="3"> <diagram name="Class and function structure" id="efOe0Jku58RX-i1bv-3b"> - <mxGraphModel dx="1686" dy="1114" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"> + <mxGraphModel dx="3387" dy="1125" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> + <mxCell id="xary-zVek9Bg-A1b1ZmA-22" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>MCMC</b></p><hr size="1"><div style="height:2px;"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="1270" y="360" width="770" height="380" as="geometry" /> + </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-1" value="_kernel_rbf" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="1070" y="200" width="120" height="60" as="geometry" /> + <mxGeometry x="1020" y="200" width="120" height="60" as="geometry" /> </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-2" value="_logpdf" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="860" y="130" width="120" height="60" as="geometry" /> + <mxGeometry x="820" y="140" width="120" height="60" as="geometry" /> </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-10" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>BayesInf</b></p><hr size="1"><div style="height:2px;"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" vertex="1" parent="1"> - <mxGeometry x="-80" y="280" width="1270" height="820" as="geometry" /> + <mxGeometry x="-120" y="290" width="1310" height="680" as="geometry" /> </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-24" value="if self.bootstrap <br>or self.bayes_loocv <br>or self.just_analysis" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;labelBackgroundColor=#ffae00;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-9" target="xary-zVek9Bg-A1b1ZmA-13"> - <mxGeometry relative="1" as="geometry" /> + <mxCell id="xary-zVek9Bg-A1b1ZmA-24" value="if self.bootstrap <br>or self.bayes_loocv <br>or self.just_analysis" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;labelBackgroundColor=#ffae00;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-9" target="xary-zVek9Bg-A1b1ZmA-13"> + <mxGeometry x="0.2902" relative="1" as="geometry"> + <mxPoint as="offset" /> + </mxGeometry> </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-9" target="xary-zVek9Bg-A1b1ZmA-18"> <mxGeometry relative="1" as="geometry" /> @@ -24,7 +29,7 @@ <mxPoint as="offset" /> </mxGeometry> </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-32" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-9" target="xary-zVek9Bg-A1b1ZmA-22"> + <mxCell id="xary-zVek9Bg-A1b1ZmA-32" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-9" target="HiMKSJFquRK0mIlwyRFI-5"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-43" value="if self.inference_method == 'mcmc'" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="xary-zVek9Bg-A1b1ZmA-32"> @@ -32,7 +37,7 @@ <mxPoint as="offset" /> </mxGeometry> </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-33" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-9" target="xary-zVek9Bg-A1b1ZmA-19"> + <mxCell id="xary-zVek9Bg-A1b1ZmA-33" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-9" target="xary-zVek9Bg-A1b1ZmA-19"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-52" value="always" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=#C2C2C2;" vertex="1" connectable="0" parent="xary-zVek9Bg-A1b1ZmA-33"> @@ -77,14 +82,24 @@ </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-61" value="if self.error_model<br>and self.name == 'calib'" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="xary-zVek9Bg-A1b1ZmA-60"> <mxGeometry x="0.3024" y="2" relative="1" as="geometry"> + <mxPoint x="67" y="1" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-54" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-9" target="HiMKSJFquRK0mIlwyRFI-51"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-55" value="always" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=#FF9A03;" vertex="1" connectable="0" parent="HiMKSJFquRK0mIlwyRFI-54"> + <mxGeometry x="0.8253" y="3" relative="1" as="geometry"> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-9" value="create_inference" style="html=1;whiteSpace=wrap;strokeWidth=2;" vertex="1" parent="1"> <mxGeometry x="405" y="539" width="110" height="50" as="geometry" /> </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-25" value="if len(self.perturbed_data) == 0" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-13" target="xary-zVek9Bg-A1b1ZmA-14"> - <mxGeometry relative="1" as="geometry" /> + <mxCell id="xary-zVek9Bg-A1b1ZmA-25" value="if len(self.perturbed_data) == 0" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-13" target="xary-zVek9Bg-A1b1ZmA-14"> + <mxGeometry x="0.3402" relative="1" as="geometry"> + <mxPoint y="1" as="offset" /> + </mxGeometry> </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-27" value="if not self.emulator" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-13" target="xary-zVek9Bg-A1b1ZmA-15"> <mxGeometry relative="1" as="geometry" /> @@ -112,14 +127,14 @@ </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-63" value="if self.error_model<br>and self.name == 'valid'" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=default;" vertex="1" connectable="0" parent="xary-zVek9Bg-A1b1ZmA-62"> <mxGeometry x="-0.3906" relative="1" as="geometry"> - <mxPoint y="156" as="offset" /> + <mxPoint y="121" as="offset" /> </mxGeometry> </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-13" value="perform_bootstrap" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> - <mxGeometry x="40" y="310" width="110" height="50" as="geometry" /> + <mxGeometry x="50" y="335" width="110" height="50" as="geometry" /> </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-14" value="_perturb_data" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> - <mxGeometry x="-40" y="560" width="110" height="50" as="geometry" /> + <mxGeometry x="-75" y="460" width="110" height="50" as="geometry" /> </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-15" value="_eval_model" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> <mxGeometry x="1050" y="660" width="110" height="50" as="geometry" /> @@ -129,14 +144,14 @@ </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-49" value="if hasattr bias_inputs&nbsp;<br>and not hasattr error_model" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=#ffae00;" vertex="1" connectable="0" parent="xary-zVek9Bg-A1b1ZmA-38"> <mxGeometry x="0.3126" y="-3" relative="1" as="geometry"> - <mxPoint as="offset" /> + <mxPoint x="-103" y="31" as="offset" /> </mxGeometry> </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-39" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-16" target="xary-zVek9Bg-A1b1ZmA-2"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-16" value="normpdf" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> - <mxGeometry x="650" y="390" width="110" height="50" as="geometry" /> + <mxGeometry x="650" y="455" width="110" height="50" as="geometry" /> </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-40" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-17" target="xary-zVek9Bg-A1b1ZmA-2"> <mxGeometry relative="1" as="geometry" /> @@ -147,24 +162,26 @@ </mxGeometry> </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-17" value="_corr_factor_BME" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> - <mxGeometry x="650" y="450" width="110" height="50" as="geometry" /> + <mxGeometry x="650" y="385" width="110" height="50" as="geometry" /> </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-18" value="_rejection_sampling" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> - <mxGeometry x="400" y="990" width="120" height="50" as="geometry" /> + <mxGeometry x="280" y="890" width="120" height="50" as="geometry" /> </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-26" value="if not self.emulator&nbsp;<br>and not self.inference_method == 'rejection'&nbsp;<br>and self.name == 'calib" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-19" target="xary-zVek9Bg-A1b1ZmA-15"> - <mxGeometry relative="1" as="geometry" /> + <mxGeometry x="-0.0559" y="15" relative="1" as="geometry"> + <mxPoint as="offset" /> + </mxGeometry> </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-37" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-19" target="xary-zVek9Bg-A1b1ZmA-1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-48" value="if sigma2_prior is not None<br>and if hasattr bias_inputs<br>and if not hasattr error_model" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=#ffae00;" vertex="1" connectable="0" parent="xary-zVek9Bg-A1b1ZmA-37"> <mxGeometry x="-0.5544" y="-1" relative="1" as="geometry"> - <mxPoint as="offset" /> + <mxPoint x="1" y="-5" as="offset" /> </mxGeometry> </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-19" value="_posterior_predictive" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> - <mxGeometry x="675" y="590" width="130" height="50" as="geometry" /> + <mxGeometry x="690" y="589" width="130" height="50" as="geometry" /> </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="xary-zVek9Bg-A1b1ZmA-20" target="xary-zVek9Bg-A1b1ZmA-15"> <mxGeometry relative="1" as="geometry" /> @@ -180,23 +197,455 @@ <mxCell id="xary-zVek9Bg-A1b1ZmA-21" value="plot_post_predictive" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> <mxGeometry x="630" y="720" width="120" height="50" as="geometry" /> </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-22" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>MCMC</b></p><hr size="1"><div style="height:2px;"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" vertex="1" parent="1"> - <mxGeometry x="1230" y="425" width="760" height="275" as="geometry" /> - </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-36" value="Note: Arrows indicate function calls, beginning calls the end" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxGeometry x="10" y="10" width="190" height="30" as="geometry" /> </mxCell> - <mxCell id="xary-zVek9Bg-A1b1ZmA-51" value="Color meanings:<br><span style="white-space: pre;">	</span>red: wrong, change<br><span style="white-space: pre;">	</span>orange: seems off, look at again" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> + <mxCell id="xary-zVek9Bg-A1b1ZmA-51" value="Color meanings:<br><span style="white-space: pre;">	</span>red: wrong, change<br><span style="white-space: pre;">	</span>orange: seems off, look at again<br><span style="white-space: pre;">	</span>light beige: has been removed" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxGeometry x="20" y="70" width="220" height="30" as="geometry" /> </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-53" value="plot_log_BME" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="220" y="980" width="120" height="60" as="geometry" /> + <mxGeometry x="150" y="820" width="120" height="60" as="geometry" /> </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-56" value="plot_post_params" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxGeometry x="660" y="840" width="120" height="60" as="geometry" /> </mxCell> <mxCell id="xary-zVek9Bg-A1b1ZmA-59" value="create_error_model" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> - <mxGeometry x="35" y="840" width="120" height="60" as="geometry" /> + <mxGeometry x="45" y="740" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-1" value="_check_ranges" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="1595" y="280" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-2" value="gelman_rubin" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="1350" y="250" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-3" value="_iterative_scheme" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f9f7ed;strokeColor=#CCC1AA;fontColor=#CCC1AA;" vertex="1" parent="1"> + <mxGeometry x="2055" y="620" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fillColor=#f9f7ed;strokeColor=#CCC1AA;fontColor=#CCC1AA;" edge="1" parent="1" source="HiMKSJFquRK0mIlwyRFI-4" target="HiMKSJFquRK0mIlwyRFI-2"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;fillColor=#f9f7ed;strokeColor=#CCC1AA;fontColor=#CCC1AA;" edge="1" parent="1" source="HiMKSJFquRK0mIlwyRFI-4" target="HiMKSJFquRK0mIlwyRFI-11"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-4" value="_my_ESS" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f9f7ed;strokeColor=#CCC1AA;fontColor=#CCC1AA;" vertex="1" parent="1"> + <mxGeometry x="1350" y="100" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="HiMKSJFquRK0mIlwyRFI-5" target="HiMKSJFquRK0mIlwyRFI-8"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-19" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="HiMKSJFquRK0mIlwyRFI-5" target="HiMKSJFquRK0mIlwyRFI-10"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-22" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="HiMKSJFquRK0mIlwyRFI-5" target="HiMKSJFquRK0mIlwyRFI-2"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-53" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="HiMKSJFquRK0mIlwyRFI-5" target="HiMKSJFquRK0mIlwyRFI-52"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-56" value="if opts_sigma != 'B'" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=#FF9A03;" vertex="1" connectable="0" parent="HiMKSJFquRK0mIlwyRFI-53"> + <mxGeometry x="0.7377" y="1" relative="1" as="geometry"> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-5" value="run_sampler" style="rounded=0;whiteSpace=wrap;html=1;strokeWidth=2;" vertex="1" parent="1"> + <mxGeometry x="1350" y="534" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="HiMKSJFquRK0mIlwyRFI-6" target="HiMKSJFquRK0mIlwyRFI-1"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-6" value="log_prior" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="1595" y="510" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="HiMKSJFquRK0mIlwyRFI-7" target="HiMKSJFquRK0mIlwyRFI-9"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-16" value="always" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="HiMKSJFquRK0mIlwyRFI-15"> + <mxGeometry x="0.0246" y="2" relative="1" as="geometry"> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-7" value="log_likelihood" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="1760" y="539" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="HiMKSJFquRK0mIlwyRFI-8" target="HiMKSJFquRK0mIlwyRFI-6"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-17" value="always" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="HiMKSJFquRK0mIlwyRFI-12"> + <mxGeometry x="0.4587" y="4" relative="1" as="geometry"> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="HiMKSJFquRK0mIlwyRFI-8" target="HiMKSJFquRK0mIlwyRFI-7"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-18" value="always" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="HiMKSJFquRK0mIlwyRFI-13"> + <mxGeometry x="0.6826" y="4" relative="1" as="geometry"> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-8" value="log_posterior" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="1480" y="610" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-9" value="eval_model" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="1760" y="400" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-10" value="train_error_model" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="1450" y="420" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fillColor=#f9f7ed;strokeColor=#CCC1AA;fontColor=#CCC1AA;" edge="1" parent="1" source="HiMKSJFquRK0mIlwyRFI-11" target="HiMKSJFquRK0mIlwyRFI-3"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-11" value="marginal_llk_emcee" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f9f7ed;strokeColor=#CCC1AA;fontColor=#CCC1AA;" vertex="1" parent="1"> + <mxGeometry x="1870" y="620" width="120" height="60" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-25" value="Never used!" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#CCC1AA;" vertex="1" parent="1"> + <mxGeometry x="1880" y="680" width="100" height="30" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-26" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>BayesModelComp</b></p><hr size="1"><div style="height:2px;"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="-1060" y="370" width="850" height="410" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" edge="1" parent="1" source="HiMKSJFquRK0mIlwyRFI-27" target="HiMKSJFquRK0mIlwyRFI-28"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-50" value="always" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="HiMKSJFquRK0mIlwyRFI-35"> + <mxGeometry x="-0.438" y="2" relative="1" as="geometry"> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-27" value="create_model_comparison" style="html=1;whiteSpace=wrap;strokeWidth=2;" vertex="1" parent="1"> + <mxGeometry x="-1030" y="539" width="160" height="50" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-36" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="HiMKSJFquRK0mIlwyRFI-28" target="HiMKSJFquRK0mIlwyRFI-29"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-48" value="generate_dataset" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="HiMKSJFquRK0mIlwyRFI-36"> + <mxGeometry x="0.0097" y="-1" relative="1" as="geometry"> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-38" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="HiMKSJFquRK0mIlwyRFI-28" target="HiMKSJFquRK0mIlwyRFI-31"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-46" value="always" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="HiMKSJFquRK0mIlwyRFI-38"> + <mxGeometry x="0.0708" y="-2" relative="1" as="geometry"> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-39" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="HiMKSJFquRK0mIlwyRFI-28" target="HiMKSJFquRK0mIlwyRFI-32"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-43" value="if justifiability" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="HiMKSJFquRK0mIlwyRFI-39"> + <mxGeometry x="0.5085" y="-4" relative="1" as="geometry"> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-40" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="HiMKSJFquRK0mIlwyRFI-28" target="HiMKSJFquRK0mIlwyRFI-33"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-45" value="if not justifiability" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=#FF9A03;" vertex="1" connectable="0" parent="HiMKSJFquRK0mIlwyRFI-40"> + <mxGeometry x="0.3566" y="-3" relative="1" as="geometry"> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-41" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="HiMKSJFquRK0mIlwyRFI-28" target="HiMKSJFquRK0mIlwyRFI-34"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-44" value="if not justifiability" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=#FF9A03;" vertex="1" connectable="0" parent="HiMKSJFquRK0mIlwyRFI-41"> + <mxGeometry x="-0.1917" y="-1" relative="1" as="geometry"> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-42" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="HiMKSJFquRK0mIlwyRFI-28" target="xary-zVek9Bg-A1b1ZmA-9"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-47" value="always" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="HiMKSJFquRK0mIlwyRFI-42"> + <mxGeometry x="-0.4883" relative="1" as="geometry"> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-28" value="compare_models" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="-740" y="539" width="110" height="50" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-37" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="HiMKSJFquRK0mIlwyRFI-29" target="HiMKSJFquRK0mIlwyRFI-30"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-49" value="if perturbed_data is None" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="HiMKSJFquRK0mIlwyRFI-37"> + <mxGeometry x="-0.0507" y="4" relative="1" as="geometry"> + <mxPoint x="-1" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-29" value="generate_dataset" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="-620" y="420" width="110" height="50" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-30" value="_perturb_data" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="-350" y="420" width="110" height="50" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-31" value="cal_model_weight" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="-830" y="420" width="110" height="50" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-32" value="plot_just_analysis" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="-740" y="690" width="110" height="50" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-33" value="plot_model_weights" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="-880" y="660" width="110" height="50" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-34" value="plot_bayes_factor" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="-430" y="585" width="110" height="50" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-51" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>Discrepancy</b></p><hr size="1"><div style="height:2px;"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="360" y="1039.82" width="200" height="130" as="geometry" /> + </mxCell> + <mxCell id="HiMKSJFquRK0mIlwyRFI-52" value="get_sample" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> + <mxGeometry x="400" y="1079.82" width="120" height="60" as="geometry" /> + </mxCell> + </root> + </mxGraphModel> + </diagram> + <diagram id="sQf09xvhinkT827TE7Va" name="Function structure Engine"> + <mxGraphModel dx="1436" dy="968" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"> + <root> + <mxCell id="0" /> + <mxCell id="1" parent="0" /> + <mxCell id="JXjM7l_erEiZMkSmYBvl-1" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>Engine</b></p><hr size="1"><div style="height:2px;"></div>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="130" y="140" width="1390" height="690" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-2" value="hellinger_distance" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="1340" y="50" width="110" height="50" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-3" value="logpdf" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="1050" y="50" width="110" height="50" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-4" value="subdomain" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="625" y="50" width="110" height="50" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-5" value="start_engine" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="250" y="680" width="110" height="50" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-32" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-6" target="JXjM7l_erEiZMkSmYBvl-5"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-6" value="train_normal" style="html=1;whiteSpace=wrap;strokeWidth=2;" vertex="1" parent="1"> + <mxGeometry x="170" y="420" width="110" height="50" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-7" target="JXjM7l_erEiZMkSmYBvl-9"> + <mxGeometry relative="1" as="geometry"> + <mxPoint x="335" y="335" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-33" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-7" target="JXjM7l_erEiZMkSmYBvl-6"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-7" value="train_sequential" style="html=1;whiteSpace=wrap;strokeWidth=2;" vertex="1" parent="1"> + <mxGeometry x="170" y="310" width="110" height="50" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-8" value="eval_metamodel" style="html=1;whiteSpace=wrap;strokeWidth=2;" vertex="1" parent="1"> + <mxGeometry x="190" y="210" width="110" height="50" as="geometry" /> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-9" target="JXjM7l_erEiZMkSmYBvl-18"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-19" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-9" target="JXjM7l_erEiZMkSmYBvl-23"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-20" value="if len(obs_data) != 0" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="W5_FOelZ0qj-h3Gb0n3K-19"> + <mxGeometry x="0.8137" relative="1" as="geometry"> + <mxPoint x="-57" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.25;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-9" target="JXjM7l_erEiZMkSmYBvl-24"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-22" value="if len(obs_data) != 0" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="W5_FOelZ0qj-h3Gb0n3K-21"> + <mxGeometry x="0.7684" y="3" relative="1" as="geometry"> + <mxPoint x="1" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-9" target="JXjM7l_erEiZMkSmYBvl-25"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-24" value="if expdes.valid_model_runs" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="W5_FOelZ0qj-h3Gb0n3K-23"> + <mxGeometry x="0.606" y="3" relative="1" as="geometry"> + <mxPoint x="-16" y="3" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-9" target="JXjM7l_erEiZMkSmYBvl-26"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-26" value="if mc_ref and pce" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="W5_FOelZ0qj-h3Gb0n3K-25"> + <mxGeometry x="0.7094" y="-3" relative="1" as="geometry"> + <mxPoint x="-31" y="-3" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-9" value="train_seq_design" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="315" y="310" width="110" height="50" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-12" value="util_VarBasedDesign" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="670" y="648" width="130" height="50" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-13" target="JXjM7l_erEiZMkSmYBvl-3"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-13" target="JXjM7l_erEiZMkSmYBvl-5"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-38" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-15" target="JXjM7l_erEiZMkSmYBvl-13"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-39" value="if method == 'bayesactdesign'" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=default;" vertex="1" connectable="0" parent="JXjM7l_erEiZMkSmYBvl-38"> + <mxGeometry x="-0.6235" y="2" relative="1" as="geometry"> + <mxPoint x="289" y="2" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-13" target="JXjM7l_erEiZMkSmYBvl-21"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-15" value="always" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="W5_FOelZ0qj-h3Gb0n3K-12"> + <mxGeometry x="0.7865" y="4" relative="1" as="geometry"> + <mxPoint x="-91" y="185" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-13" value="util_BayesianActiveDesign" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="1020" y="680" width="150" height="50" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-34" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-14" target="JXjM7l_erEiZMkSmYBvl-6"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-14" target="JXjM7l_erEiZMkSmYBvl-21"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-16" value="always" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="W5_FOelZ0qj-h3Gb0n3K-13"> + <mxGeometry x="0.197" y="-3" relative="1" as="geometry"> + <mxPoint x="-1" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-14" value="utilBayesianDesign" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="880" y="730" width="110" height="50" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-37" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-15" target="JXjM7l_erEiZMkSmYBvl-12"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-42" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-15" target="JXjM7l_erEiZMkSmYBvl-14"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-43" value="if method == 'bayesoptdesign'" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="JXjM7l_erEiZMkSmYBvl-42"> + <mxGeometry x="0.6143" y="-3" relative="1" as="geometry"> + <mxPoint x="3" y="29" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-15" value="run_util_func" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="660" y="450" width="110" height="50" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-36" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-16" target="JXjM7l_erEiZMkSmYBvl-12"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-41" value="if method == 'varoptdesign'" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="JXjM7l_erEiZMkSmYBvl-36"> + <mxGeometry x="-0.5992" relative="1" as="geometry"> + <mxPoint x="-197" y="62" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-44" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-16" target="JXjM7l_erEiZMkSmYBvl-13"> + <mxGeometry relative="1" as="geometry"> + <Array as="points"> + <mxPoint x="965" y="590" /> + <mxPoint x="1095" y="590" /> + </Array> + </mxGeometry> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-16" target="JXjM7l_erEiZMkSmYBvl-14"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-16" value="dual_annealing" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="910" y="450" width="110" height="50" as="geometry" /> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-17" target="JXjM7l_erEiZMkSmYBvl-18"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-6" value="if exploit _method is 'bayesoptdesign',<br style="border-color: var(--border-color);">'bayesactdesign' or 'varoptdesign'" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="W5_FOelZ0qj-h3Gb0n3K-5"> + <mxGeometry x="0.1312" y="2" relative="1" as="geometry"> + <mxPoint x="17" y="-2" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-17" value="tradeoff_weights" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="980" y="210" width="110" height="50" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-30" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-18" target="JXjM7l_erEiZMkSmYBvl-4"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-18" target="JXjM7l_erEiZMkSmYBvl-15"> + <mxGeometry relative="1" as="geometry"> + <mxPoint x="790" y="280.0000000000002" as="sourcePoint" /> + <mxPoint x="690" y="499.9999999999998" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-2" value="if exploit _method is 'bayesoptdesign',<br>'bayesactdesign' or 'varoptdesign'" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="W5_FOelZ0qj-h3Gb0n3K-1"> + <mxGeometry x="0.1579" relative="1" as="geometry"> + <mxPoint x="-15" y="49" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-18" target="JXjM7l_erEiZMkSmYBvl-16"> + <mxGeometry relative="1" as="geometry"> + <mxPoint x="680" y="205.05882352941194" as="sourcePoint" /> + <mxPoint x="805" y="779.9999999999998" as="targetPoint" /> + </mxGeometry> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-4" value="if explore_method == 'dual annealing'" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="W5_FOelZ0qj-h3Gb0n3K-3"> + <mxGeometry x="-0.6061" relative="1" as="geometry"> + <mxPoint x="270" y="46" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-18" target="JXjM7l_erEiZMkSmYBvl-20"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-10" value="if exploit_method == 'alphabetic'" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="W5_FOelZ0qj-h3Gb0n3K-9"> + <mxGeometry x="0.8144" y="1" relative="1" as="geometry"> + <mxPoint x="74" y="-1" as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-18" value="choose_next_sample" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="610" y="210" width="140" height="50" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-20" value="util_AlphOptDesign" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="330" y="210" width="110" height="50" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-21" value="_normpdf" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="1340" y="430" width="110" height="50" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-29" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-22" target="JXjM7l_erEiZMkSmYBvl-3"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-22" value="_corr_factor_BME" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="1130" y="220" width="110" height="50" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-23" value="_posteriorPlot" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="520" y="440" width="110" height="50" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-24" target="JXjM7l_erEiZMkSmYBvl-2"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-24" target="JXjM7l_erEiZMkSmYBvl-21"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-14" value="always" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="W5_FOelZ0qj-h3Gb0n3K-11"> + <mxGeometry x="0.0929" y="-1" relative="1" as="geometry"> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="JXjM7l_erEiZMkSmYBvl-24" target="JXjM7l_erEiZMkSmYBvl-22"> + <mxGeometry relative="1" as="geometry" /> + </mxCell> + <mxCell id="W5_FOelZ0qj-h3Gb0n3K-18" value="commented out?" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="W5_FOelZ0qj-h3Gb0n3K-17"> + <mxGeometry x="-0.1477" y="3" relative="1" as="geometry"> + <mxPoint as="offset" /> + </mxGeometry> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-24" value="_BME_Calculator" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="1340" y="220" width="110" height="50" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-25" value="_validError" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="520" y="510" width="110" height="50" as="geometry" /> + </mxCell> + <mxCell id="JXjM7l_erEiZMkSmYBvl-26" value="_error_Mean_Std" style="html=1;whiteSpace=wrap;" vertex="1" parent="1"> + <mxGeometry x="520" y="580" width="110" height="50" as="geometry" /> </mxCell> </root> </mxGraphModel> diff --git a/examples/model-comparison/bayesvalidrox/__init__.py b/examples/model-comparison/bayesvalidrox/__init__.py deleted file mode 100644 index 8e865af80..000000000 --- a/examples/model-comparison/bayesvalidrox/__init__.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -__version__ = "0.0.5" - -from .pylink.pylink import PyLinkForwardModel -from .surrogate_models.surrogate_models import MetaModel -#from .surrogate_models.meta_model_engine import MetaModelEngine -from .surrogate_models.engine import Engine -from .surrogate_models.inputs import Input -from .post_processing.post_processing import PostProcessing -from .bayes_inference.bayes_inference import BayesInference -from .bayes_inference.bayes_model_comparison import BayesModelComparison -from .bayes_inference.discrepancy import Discrepancy - -__all__ = [ - "__version__", - "PyLinkForwardModel", - "Input", - "Discrepancy", - "MetaModel", - #"MetaModelEngine", - "Engine", - "PostProcessing", - "BayesInference", - "BayesModelComparison" - ] diff --git a/examples/model-comparison/bayesvalidrox/__pycache__/__init__.cpython-310.pyc b/examples/model-comparison/bayesvalidrox/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index beaab3c798a63fcfbc361982388fdf10830a787e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 795 zcmZWn%Wl*#6m>Gm%w#4reNc%7iwY!=W|MT&9YUy-LJ>tHAvWGvZenJv`VrYl%kVku z_$5oMSn&(2uy5%A!BI}mJ-L3IBkS30g8WGCJ!aoxguaL3@8LD{+`qQ*P$P`$sE$P> zV;o0;55zzwI02rBR1WbFcq&G6jK{!-B9jw50X`B_nd2PzSj^-c&w*!RNABX?2(3^( z`4Zv1diowM^3Ul}aa0`ti2Ux0$n7sTZ@IcU)8>Yn`a;)Ccs09VExjvtw#7@e;)?nI z>A7mU)|2^C+jePm#jNFO6_gXYVfI{oWQM6KG#`KhtG&>&p@v(nygohUwlb`ts@g0v zHznkn8OyaI#DtJc8XyZW2#^FA1{ehxdw93lHz92|Yc|5$C~iM6-95COF?vN?Mr811 zi@pHsx<`Gvkly|69Kygd?CtLV*T_Q*77pqT8y^K}wpkRt8jkJ`FGD<p-{n*EYVhWs z^wi&7V1rcK5FrEipx<2o$ra*rBSNSUgnUKjAVe47=bKWhwyeqz)~8;YE4>zLN^N<n zt4=c2+VT}|Uw4<~nb0>&+OA93=b8#$8~v#y-UM$6@tM2vQ-8EhuxH^`*|2;P<#8VU H^TfXZNO$QO diff --git a/examples/model-comparison/bayesvalidrox/__pycache__/__init__.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index b1f65d567bf46826c3f2f76b1c730caf924b8f43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 938 zcmZuvO>5LZ7@q7$vb)(`Yw-(uC|-mph8`3|#e=Qdg4G4_5(2|CnQn*9N0>>f>#6_3 zyBG1~U&(RFX~C1Xg?j4AnXy|*=;Y;@=Y2AH=Y1dYeKZ;Xy$*vvc%u!#FO#fR>w=s~ zO}>H@L?Ct27Ij!FYB`3tX`6MTj^!QNWp3nJ-lZPvMLo-1+Gm4kV7W(qHjIXr_vna? zqp{_EdX23`YYv!#bnwlIuBZM75DdR`x5BOP@oz`pA2`+eWcHTu<JUrdLNeVKDW+QO z@8cY;689CK5{|Xp-Q!u2Ycie)l~1Hduu_Cijq(!Bu-fB?SYn=-!#AvAi);&)AxV_r zTK9K|N+iw@Pi8^C@*zCIQW3!+l-eyIT?58J*)h;H;2G!{=xcZvtV>_-)hL@$-F^6P zv!7RYRUxIAq8vkJ#!+EYuyw23O*zDNPJ7`MZ;6>*+3u>%OwSLqO9R42Zu_k^4~!>} ztV{_TxgDsw*HAA`+1_Dt>6{(B+Grk5|C?z&t2_u1r4arAXWAif{(k#u{84F#V|gr& z=n+CH-VsT`Fwa%|hUB}&L2Rp@AWBjxKF3NX4F&2UNDiSk`n>mCw^mU6Lf+B!&2OZB zYFM@%$61VTp85;$u&l=%JSpq301wJ~%)$M#9&_-ltjAT#ZV75J2an2nEIYpMF2M>; KJ@d$0y63-0cOXar diff --git a/examples/model-comparison/bayesvalidrox/__pycache__/__init__.cpython-39.pyc b/examples/model-comparison/bayesvalidrox/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index d5ebaedb4c8b77b5d7dbd0a6945f09079d8b10e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 860 zcmZWm&x_MQ6i(8gY18gn1P>k-JqSG{?6T}dM8vK_!Ae02G6aU%%(M=jnS`07Zujif zf5Mypf>*&mqE}D;3!Z#4b*sh+`SQIlZ{E!N9vKXJ9;^>vzS3`j=Y6-q-wQPF8N8+d zpdRw5PXpo000q9~4bhNI)O5TlTC$DWj<-Zdc2U>ywg_bp^&IbrzKl@hcvlSM5Dgs< z#gRNl$G*4nXz!Dc?$G`lZyepUPLtE*;)f5XkNw?fzJ0~j`em-)6HRA1WdhW2#!7M< z936reYQ+_U|E;MisuIX>o||&6^Nbn8)ygW*$(EU^S~AU4W|Qwa#Z{Z+vLKq9T!G%d z<R;UsAS&CA!(AWa4bz6_3S(_e(k%<2g@%Qug|>x`g)YGB@km>@(V*B0Xd~Hw+;;T9 zR9fdNQZg)UUnZ#wt}c35mlFxy@AqKlT6Slnd;cYJYlCqYMJEMVfs2C|NiB9)M<-X- z9?Wn3Nouj{4Lz!<zq4E$I6Ii=JV5vB$@Gt}&c0m-V<H5`pFJH}>n!~IIC-2d3^<-@ zw$9H|TFL5qkFkU?Ya;j!DPbP*l995~ES^s0@#SK+czd2)q*oOeG|nVhvy>EtNO@MI z3?P=vbjcMFnwd(JW^?uq+bmtF)LnH0m8s6JQw%=v5@Q(KuKNVKs|0&$M{h;|%^>ps Gd4gX;Q2|8& diff --git a/examples/model-comparison/bayesvalidrox/bayes_inference/__init__.py b/examples/model-comparison/bayesvalidrox/bayes_inference/__init__.py deleted file mode 100644 index df8d93568..000000000 --- a/examples/model-comparison/bayesvalidrox/bayes_inference/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -# -*- coding: utf-8 -*- - -from .bayes_inference import BayesInference -from .mcmc import MCMC - -__all__ = [ - "BayesInference", - "MCMC" - ] diff --git a/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/__init__.cpython-310.pyc b/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 430b9885a8c8bd658da24bbc4ac1a6a0a74f69e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 303 zcmYjNJ5B>J5cMx4LJ1UHffU=|3m}9D;!`9-LNwc0j&0Z#_8Qq<AV=W{T*)mJSD-+Q z7ez4AJilkZnbFwKX1fT29n8%eoF7H}4+7#8G9ChGq_IT~*BBR0EOE4^z^P^rq-J__ zi>jSZ4Au(gy)(Hn@w&S=!F0;N4O=dji%?ny3b3k1d4F9@qTRZN*UX%9YVhQ-5Yk#9 z-ccBr!UA74cU|I&-$fH550AdFjg*m}d(}JBrN}Sabk(o<h4n8tGBtb{^DJ$vgMa;1 ie?z$d-X<ZAo;G=M?7Z%+IVo$z@;g&9#e@<(`ThY0HBIvX diff --git a/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/__init__.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index 72c63a98588c54dfec12536a99537cfa3a67e0cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 382 zcmZ9Hu};G<5QgnIX`xkNf=57#Ks*3K9S9OIlm)RwmP{HSG{R0IJ3;NnTU0y&;t6<- zj#XABwn*JNafzq|J)h3MeV<Ri-v@&p!FZT|!W-^i&0!PHuUH+Sm=j4PRYcQ}(ndSV z(JW-BnRK6=(3RdD@jKrXVV_oe7tsvtP5KB1(irf@9R;JnFl-wa%dPKK`{M=@$%bmX zm8)YNw@lR)B2r3-53<51WNm^oes958Zl1G=nnaQ1mswnDNDIralH$4?^LFS<q!MYe zDTisKa|M<ci3SNdq!QsRXv+r|=qV|LIL&A4opYVZQo+#l(L(b*JH%2mN@?98^khMf b|K^e$F8(J{-oeuC)gJ42Uc1dQyEx(pNH1+* diff --git a/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/__init__.cpython-39.pyc b/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index 287257c1ca9b3f3a6d7e176e006ad432f8c685bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 368 zcmYk1K}rKL6ow}=(^{m}OStJ`3Ps$Ah&XP#s0cD3Lm;G+HyWDE49TRlE<J%4@Bm)H zt+$x1E3e=}d}$GVkT3tA{CT|a(P%%wdU|^o&$xeh^S?qg7r5*ZLIi@SK$DyhuR|5; zD34G_BEApvSoCg#asQKGbWFN~OTGa+t4c6X6@Vx4Je{Y;w=@yrdfe*{7e2(~Z)$s+ z$GXtPHq-4f#+731H86eu(BtbRJ*AliW2u2<J*C2Fx85<)vI4`EeB`aHtE2?pIs?fp zy-BXJd3JX^IiU+Dl}HNBmq2;bC@PDF0wU2REoH@(0qaz2SJMaPQ^r+vJLw8L3sbLm h?r(0&P|KFFNwet&XSx<n!MXpX9Uz8e7=<MK{sG1iY1;q* diff --git a/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/bayes_inference.cpython-310.pyc b/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/bayes_inference.cpython-310.pyc deleted file mode 100644 index e89dfb5e6b3a873ac2f40dcc2084aa52caaedcd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31276 zcmbV#3v^t^dEVZ~KCu86PXgd;DUl)}k^o6bltfFSC{nT&krXX4wnRx@E^rsXE*87s z>;*}{cl`)uOG?66PMkD}kCKJcxW`VKrcKhknv*sUw@GuHo}QD}&1sL5CUMnAnn#n< zs<GJb`{&-fy8viO2D!6y=lRdvnSZ|d|9@udy}g+j{(k1I1Erq-8;kuHK6L(Bcz6__ z#(#$6#2lj<yJX0>dC8P->yjnk_N6$!&1zyPaVcRityN7fr7oq!Z&cGunM*x^KYJ-F zd3rDP$#?&ye)-N_%E|Y@r2+XKyflb!yE?Qqd}(-T<kE=bk5@;Rwq4pL{zP?bY5dZ7 zQ0~Oi_Deg&pRDd&+I4AH5WagUe`yc=DJNaMW9iOIcN($x$DEAQ^K#7TxnW+~>ln|* zCbMs%jj{8ShHtx9oF#n68*b5UOq%}SQmI%gG_I@^Rmmxol&UK~rH&OEvvpNM!ro<7 zT2}ShQln9>%`@kPqC2|)PwIj*ccD06YP@Nna0J-rPM<qH%bGg>M)2?`K8-KKDM=rr ze+~4l=~#~K#PQ9434D_H#GTZ9%t_-rGjAY8-05+$b0bc#)AzD*$#(jk+{-b%kpX8A z-w9{P8OC?gIpB;s+mIsVj5*^7NjsCygtHwX8E1#H6Cpj$E@wBsvrgXGgYRDF4(CpM z_c?o=efaKo?sE3yJLj0_v%CGi$BL_^#*?+Vk}B0^OT}jfVzEpff2Z=Z)ncQOckB7( zlA5clrMx697i;-bwPJO(QEp6SGCHm6s`AW=TWZMT;pk5u&z0Qbxw=!T=1=77GZhJA z4GhmONd$sRv+k5cIpxMIUPrMuySgF6#f4J7GgjxygSNbjs785ysd%h$C|{l`O-YDT zF3#6MYra$ifdO@_x;`iISBnbGnJwj)iip21C4r=ss#}&Qx0J7;;V7V5UMyA13-!9A ziL4cuN}#UcszdquvRh^?QNu{5ySiLrHN~K-4&_T_5UKLB#cFv*6`3V};PPocU7pON z30L8DBs?nUz~v7y@bctTUfN!oD}uIsxskuTUvlohtjQ^X=Aw&2PUL6m_39Qhg|94s z4P@k_^arAsvqc>j)k-O-0HwNUY;pPaH9Qt2;mZiyy_xbSiq%F~tSVh8)K}c)6}N$c ztL28f1?g-$qu8Cuuu^KcB`2@5ad^&@@+%F5gySHpI_k%bop-)o0|ogf=koL&$``9u zJzh$4<yusBBPvk_X;fM;?C=&?t$qQGQWXOj%%xm&%HSht4ZgQ(%_)iCfKjXZWw5)# z{P{3H+FB~kE`;+#`bhdRBE#tz4ebV97O!p+xL#vLm6kC2^UL*e4V?@Is5`4%V~eB0 zy8EnATw1P5BZ^8DSK0B6g(3#@0dP?rcPL*gEEiRAsWEw*R~8o1@rHDz-(+k=?T83t zh`gJyIJUr1#cQ?voT@KL6j=96afU;rJc|y*Xvzy|CAXxaf`Ye(rm(-GVNZ?}v7V@P zczx)uEgE)yWoZVJm>m-I(R*p$eMk5gOeyjqjKHuQ45wP%&4=<|hul&9BJYyH>^s z#W)8;F3)p>&J;P~!9qG;Vr>&~^X03hnjWFSU~mfHF~xT|JZI}Qw^*)WO_WZn&ooNv zs%Bj*W%JzD?=R}}@?1xIzz#d}2U9H=5_)~;dPh+y?RV8R<;vljRah#y3v~x=+L|4o z$_EL^Ad1TvE!WFn_+hJ->)<D<j5w?<dL1Kg4hRd^yoj2pTGUor-rNQIRfz)%MeM(P zD1U9Cj7ba}QgeizM8!m@^Z)=cQ&@7(71d(>YX0;BdOd#*y<f_oE~;uh7$saiY8(fR zGA8J1R9M74W>zus1;k*5AW{hzh^5)3*<ilD%Xcs91O{M3cy1ZMDPo6VpP-Kd*dUB7 zBIhz|27kSXiME+bX~@9Qe?jmC5_M9?l~zXET)kSYUqi>7Xy;(AM;>{kGsB6GM)fk5 zfBP|H-H=i3KM^qb{GFh;?3S^b2Xk(7##-T8vAS4N4dgm{<jA2sGPP$_5SKqN%l9+6 zRd$YvATwtAhWtxK47`;k88{j#X?nH0zgC!8Q8m<jY*S7~9LA84;y2g3RKHqct(<;R z=Q##M@2j*lTf&$ThSg?>Vcq)$@3i4B%8?~n3fd62x$3JWHB)bt!c6Ed9a47N!!xX@ z8D;0lD7&Sl2G*52Sb1><1k2(?<{XY0AR;XGvQ8Ik9N7vJ8Qizr?mV(gB<HGqNJdRp zUJT0(d=uQd9N^3u0^dTlUZ1^+DRCRv6b<#WrQ+4nVf61|0FV4>RR=T{a3<_<^H>j1 z4mf<&=*xnqG?{0ge){x>^3v%JmS{pc!7!i?@P_P3PXZy5kXsmJRMg{F%MRgs{=j4B z9-j;#X(0k>g|e#%LEdQ%i!$(KXiU1fB}X+<>g=wL7tn4Lnt=b<V*#O}8GMm$-6eJ| z)#iaYgO#^y5x^o6wW(1GUJSMy?uwcLm<pDv%^)NqTv|#jf?~G<BHxY`D;yx)$LNCd zTd!U(ytEPR7Hai!gFt_-S}$&e2TozpW{PU*D)u*Mc2I{Ni(F~htWBKo$kdVhg1Raz z4Yv@&uiFpAZ$q;3T)8+?u3~E49zw~u(*r^_6kHrtdG?#Y>$3s0<_nW7dVvq}Y1$)R z%%xO{BMfV-EHBp;P;Uo^K01}J*5?ZtmS_un*kQQ~OX16prjy?Gm4aa$je%oR`KQjF zLC&XEs@0j|?Be0GrSeP_@9+$ejGE_|j}qTA#RaIqy<L5I^+f*38h5Fh`XDe$ONJA& z28`0nFYFJf+#kO4<!aq65DOF_3?P`e4M(_ubU@P~W?*6feNdNY3E);6tLoTANgYeY z<#$sBUx)6caD#Len{ftW+pHtPy6d$zuMgIksNuynt>yfIfK>uV<}V{<p(rgD^i#$z zG(yeMsEx|$?7Yq$+{RMSaa*IXbHU=*NzfEf3Pm&fFJnMEe1J574;Wm<tHp8^s2*GS zjvkHZ;Y$qi>d_8SPOYR0ZrQDt3Uf>DZ3(%^6kHoIRH7xa{X)AyAYYi?q%E%kW7eYT zmoYXW7Rq1N)ouZH_D>x{Qy?MX>UaL4AD0dL6Xn*YjhLT~;GarEV)XSN{vrN->7;LA z;`lcEWX(bWv)d3G{?TvZa~hw<t8hHSixpy?3D@u}xTa^rwY)f7+e^TWdr7znF9kR0 zrQxQ$4BWKW12^Mk;r4j_aI;=7++ME_Zl9Nf+wTp)&3S`x2fQJ;gWfRQA#Vikur~^K z#EC(SWSpNI_0#7<Igj6SrY*zqQ=zcIw<$I8(-HIbdph?2elA3@;U3yg1~|=6M;kN0 zw`(8c=OPFi>;n9r4lwEWMJ!*|62GTo74vfdT%pWD))BwI{VZ(V@9pBwes32`Md@8U z17buzhx6OdZJZl^ZsQ=G+~(V8_MC#$E#~)h2)EP_LewxF3K!KV9gYAsMrWMP1fA`4 zcF@^HXE&Xlbn<le(7A)oopkon*+=ItIA4mXNqoIkoL;KA)3eiDEF06<fh<%Pip9qC znfk13KO58UFS{RDnVEh9fE<$1g=y(V=?rY9^b_7%uo>9+Jhi;)rwWJ%C@*{h6*dmR zNn{enyZe_h*0#yQ0S2$7lv818vy{q)fA_-Ej}L|3jbDOb{8g(GYZ{(WF`6b^vuSx| z#j4n^@hM(OG;O3vI>rh*iy^HPp3{!GZoX<2lC^zn3C344&G?67wX7X;dsdGbG5%wC zGyZ(6W?YMTamR3sPeI)4S)VfJ%yGmPl9Ds)Sn`y{Q?JzX3@GTsQ@>;1G?1>>%`wg$ zs0`jP8<*XI)*zqPC64J@L+ddozG$i{at<TMNX>?Cls<RctCo{MzMqg%#@z86rurmu zjXBBj*lV$xMgMCt#KtNU68nR%#O4eN(qB$7thIeTb|!X%we6@4t)<<atz8V4`gfq! zX|#Ix>X&t^b$d}xteI%n*hCLDQ*QoM^M-LI_R`{uW;5N)cuD1ZDQUCsWSZ<*p{m&< zz8>k9G1Rxm>#0n5neo`V(ahFPB2Q+~Z2TEhRVI+%P~XsD>aRDYKHy|gGs@7Zqf&Ng z>MD1*ciu2xHyYzkZ!_fy4TZf(+sl-dOeNdwMecoGFW(dE2R}@BnTKLwT8|@OtZ>(r zUs}u1*V+#^ExmI9y<>;{g3w9Sa|+*g2j2%@x75enLkKy110w!K(4n4r)oM*4r1w=l z#tzpKVG6u~X?dT0q*%R%R7ZmEa12<%bFy+2Due!;M(dc9^Q<`&l=or$-sAN-12+xy ze}6NF=X+7ceO^D@erNC|#zNt^yR)(n&m51_b0(hdcZP17%>niT!%)&-hkvNUKiuIT zLD~mE&3|RB@F#<MN1NL`j?4!=jLgD`j`sX9Qn5Y!KHhpC-23o(aNPv8W5_kunaeYr zVd;fGNBIvm$7_8UVdFK9oQLsAIwQ{LP0rCr819~QP+R42CHwi<8yJH|%zYH2QTiS3 zG*u<e#7+B5>~-U%hf&|eYZ&jK-&AbJgU#(SPabJ*$J5=fn+@hYh}Z*Y@u^phb-X<p zt&h2<5!2f`vyQRj<T&TYF?X6f+|x+;xVK~7z|&4VJ>gjMhPQKD%-eYb6g79fV!Q&* z;B4o-bMxLV&J=|2#>no)$S@l(N?+|jt4&oyE${cXd%I=y9q`7Toj2p&faWsZ#GLt1 ztj4z*q(S_yn|60R==lIXPvQ-KTW8F83?WbPov))^SkosSA}?cKd;w$gEbC+_W`l)w zAF<AEwC9|AXJrWK&a*XFV@UmXPJZifl>c<=f<vyBUWf8)Jl4!_NyP_c<n8hHfX-*U zJ?qByn3rFSH}62sq<07M-HDi^-PAK2V|1^#S5r9_10o@nTTx@FlkT(59`|DF+t*{m z?C*W>f5_XnZhU4}^DdT-&xgIcTIVp%;+5wr&x6uS-kp^fynT4T{Wq<3>8IxY4?}fo z$L!b*%K%S28hhPp9Jz*(#(&S_qp9)sgPy(kjF2Yx#mY-mzTHH+*Uc*_ZvZ3qBOdy( zP>?>i)I|^6zHoWVKDN}XM}A+tP1}@*(OZ}aO8VHVmL03G+{^a^BuWjlvUcpn__EaZ zxz4K=df<R}pjASuUN0f5++2-wM{}5clJdv779lL@+0I=u%jRlvjE(tqu4{9cZTn@8 zopcWH+cA)Sp;9hXBHyBW68Yy^)phhaX5&d`Qogxbk-OPy2jY(e-ywGk!#k<|3-3VX zIBGp!JC2!>75e^)Wn)dAtZ^NMFIs)g%2H2EufWYoZ*mJRc{ll$clSGSNwl`Mj<@RE zjg_|l^D*ZjYQpy$cJrWHuPl29!BGy~H1Xa^m4%i(>DjF-uUJ@H4?9zs<4XAYSmlmN z;|90_XZt$)!mYTZy0x+%^K7Vqr@vr0;|RIx96^~!onvLgxd;EooqO@`zMH+xLqW@J z_2U?=d%Q!HYwO_r?jg^<VQ5!YfWxelVX_MEZ%%oKy(w>sc%(V)O}DP2?W^7t=MU&m z-jt*pXdaPtM>eE8qSL)@U->LPO?R#JQT7OH#~PoK5<TZ0mWBAAL<=53FZ>(lc+g|_ zzhO0x))L|K8)oyUcc|5L9$*fX@-gQ@@8IWS-cj`Ki8pNLea=JdPn7d<l=CNe1D{}h zc%FPcuAX&2S^1924Lp%!7b=3QoQGv}z6{zvwH^asKh~UfKV5kRDPH!bok!4zCvRef z4#EludlX@(oX2j)LBn+GRp+!&Gu?X4IYXcOoyhfw^SJZGO$+`<@$VG<^JeoNZ@Thb z-aXFyIh#?#1EA^w=K~vB8$7eM?%M6z2ztMpZ43JprQJknFQCoequY!f)st)A6YVvh zb&CqBJMR4>j2-MN^Z0wF1ff=~EfNis?@{({=!|VKv@B613*h!z619tuv|>@h^L|2M zk6vF=gxp_(A;c_HP<~w0+5SMVE2FY1u&;<O)*#vK0_fblCh_6cror7xIp)P)>LEmT zV=V)~6TqAU@B7RvuuhQ8$)x3*wPoy*t|-^fL;?z0b(m8}d}EO|8M58vRz}?o$Im=O zk<4s;Y59>qW>u_rS8VN`?w*)}l>x-8?S0GCL)AK((|Ba6o!>W3`EluW-+0V7PWwG# zJyH+>40{1mjfU*uzhubHjO3ihHWzVmheiOtt(MSH=?hdbU4XRcOQt0Bt;N#nS}xk4 zicIoEel7o49l|AO+C%*mMQI>wmKuI&l^Pe(C2^6g`nFSQ%=+<SW42uG>S-G-PT(Uw z&8?pFbU!8u;UP9cucFTZYA8Iwre!?V(c`+?ZFL{A`9|3{D(X1A=y022Q$MTaQ3Y=1 z8<JRhT|K~RFgO~lI1!sL61T8}*ESi*oX}q1YPim%p+3mct;MS2_n>=2A>KSf@%KMY zzR7onzRW=67f7Zd7J(AWkIS|b-J6`PS67y54d2MDO-B|d+H)b2&ox$-mY`|h5WjY8 zL%_Ru^!uLHmI?(KM+M&~fQnQJ1HdiR7rXkO)bkxk|8sLb&yk*Ka*W3+*ow0EE7oT_ z#<{Hqk<L#)N&PhkGz2P8zm;J>(hxboq$#gNJ%wcG!2S4Y_ddov_1`k)DI}6HzvDfP z`6&OS_4Rw?@7GU$9hKnkYbWP*$bUaMuSHeAb<$7GK|k3jua(|p1D{Ydiki&&2?*^< z)rOyjCZOh)VMgHhP|2eua|n+lbbd;bE*BlY7s?L^PTYlpTe|N0S)FF_8ugEUzlc>h z_Oua$pVa}SS_7hRzjqEwo&r_X^%d2?I9q~HXTeYD@1xFIZaNwc1$3-i@Y97*CN*ik zNqNefIXG{bQ`2wRQ_IdA=2v-s!Nu$CnVG3y2aA|pC^aw~ZMN5s&#O|YM$S~c4h~qa z!kjD)0|^I{eFiG4we&f$YNBq&RvwC0O*$Wg<Hx1ZYyFTv?=5`v=#l1L(c!EOT@Wh< zE#8N6hizL+UVQpop2b*xdagKI(siXv&b;=jPoPN9m0SRCMpv(8rjfb;+X1&Q`57%$ zN(nJf&s6+WXtLoa^icNWGKu~4<JXtZlxSMur@>-_sm+e@bHM~Gh5A$xJ^2aDLg?oF zzEh#;*W+SU$8G>iqh!j@fxkLb%!Eb*GK~F98Af*0h|iXMbJ_9JXYgj9fF%h!7V@PM z`cl+6{y?n&HV3(0WX0n5NK8Rk02|#XqIx}XZ1Q|X8IW&-vo_Qbc-1jF_b@Ph5zJT< znJz)6ORj<%MYp61OaacM{4}h&3c{-V_*w~SJ`6@`v2@rmGNe$ote$4!BApY_8)a?2 z1#Oqe-~8S}z}rRis0DKmGY7|-pHwC3D!;FU)=+q<h5G(ruq??66Rf2@Gv#6fqmXt| ze!pIU+S1mfD5s7d7m=aASF@)`R#spK;>FLFpmo3!B)SKGr~o#+F)*h|;n>v`t1~3E zr_c`f_iQd+(sz^{haWl_@<2aXtJm0#BD(Z#@)*vTm741(AY24@_N}$@GSjIg&O8hA z0#C&nsrIeX^<_U(t=HzA`U-RbetuK+5UHvH<_4_asCDu!$X~U@lTt>kzL*)l?xN%O zGWNP}fjqx|gKFDP&n~ZkjgU0^0*vVV9`KY|43e4*ly4*J@Ga8VBZH>UScWRjH!k|- z{H&}-Gy(I|R4mbmq2VV39g{y4cu;&qtZzZnrJe<iT7(OECAwOzgraT*HW#j91ynjz zh;#;eDgqz)No{+Gs+=;&DXv2N4Yf|VGN$;T>em{6ibw%AngAl0LV6wZN7~vS85LTO z<(nAv$hio`7WpX{atU1+M@P<=)Mb*H&~j`)<<<+BO3SMvP9_*at5eW;7Oq#zOMZ3+ zz3CL(6&jPF>#BVBRagu7_Pi=Pem_%^qXrC?0{^Q}=Ff|q+8-?h^7L*!m7;tX@N=Pj z%(v84EH7d2y7eX0zB0pXsILKRkX&?1eDpJ#Dy~i1zbbrK5szZcDuK;8VDDI{L{iSa z=@RbizL~sNue&0yj|*c}pF#=hH98`h|4|m$7jcooT(vl_-e6!7Y^hLouB-R+X+ZFC z0q-rec2yS`-dpS9c<FPeE))R$0lea?1w8oaRhhf=_MzoxBg<5DJ(>S$j4}1wC`$bf z9gZ+&T_~dWC99v2CmD=>8Ww^|v&AH=21p;qkY)j3ObsY)z`-#i#kLHdz(CPYb3q3A z81nW?t&CaGMM-gXwzLe@Fcy?>6#IkpVyWp$2qwS4g~B(M^@v9T!ODJ$W<&)nT<WWA zLz;>e-4jWSU{sAMg256k?&?1=nYmh)CD%8vm;Dr9qG+8gr1bmsdoI9OlRFiSUa>^q z&yG4r=R6&OR<e`GZQLV#0r8Ddu(m{&%8L~KWi0XCGOetUH8O^IYt-(uGIq}BGy9Cb zc*aPX8Hr1nj7JWn9Yk6iX%lgN=Zvgnn;C=+8pCGF95ifm*vOf-nKDoYN<bNgX$_-J z(-=$U5Rck#W$j@rXN;LS+qO{ht-h2E*quc^{Fkx^Ma41<3PI_u1irIY%1D^D&D^#% zXqu?OCI#O}B^i@rc~+k>Y-H_(nRt6NffDg=_-#AMx(DC3Q=>?qxRtt<LL6%yi;sco zL5rb-pcCa9_N`oe3}t}|q)wrQ=G&=TyKZGtCUWHLgq^Tbpl1y27(@9fq|I3=leIB^ z*v!}|(3-(NwBKMmb9_QOcbKDA*y2=tIMIhtQi5K&W#7uiO_X7xRuli|3;!klccwp! z(m)&D2WiWqo%Y))D}xrNOoW&j^gVLjO4;Z!E5UH~GD<`L8;Q3wHr^6)+iz!Wonrz$ z$h4r{T-*H)d(2rfukf!Io*sNo<J0&EwoV>)2T)QO9(H6<TG^gmp@2NzOnA0yweY-d z^v4iqI@muz{R%~IB?0ACtU{G9RK0jQg<L6}x{}iAn@JbqScE|>1F>(6N-xK}X+e2n zwR#|6GS)?y^=u5!Pzgi$hZ04sl-gVx(?h%or3q8sFd-1S&}8XZD4r9N%W!+$J`ciT z5i;G|%pkTO0!94$l<8$CY=RiK$LnznsJ1@l#Oe2};aD?^l)3JdpdD&4P;9Y3*m4M` zv%|4<?4sHwJ`}sM2oaZVIlgtvq4-WC=0z_Bp-Q5d!OV?B8iC*hrUx)MpqaCnJZ@A9 z=ed5ucBy-#u5AuN>B$@xN|y;CL7A<tV67EtO<k2`|JH5z3bxtK4FllIQ~*!Sw5`!D z(~gQ(Be3GmA9D_e#A#DDCE^}fsF2#IEjTbiVTL2riZKOI7c5%44?uK?jV{o5o91+z zBuCf_N9B^qLu7>07!GVkBBUP0vj?7TBYbUG6~$_xp|=w#h3GGeW6rY(2u*`@+PrK? zI>>w{=@v}?0G|UgrKh@TxX@+tC1x#cYf=$qsYfvTM1pgE{vW>d*Z=X{%!QMaLn_bE z@1k>)4)+ld1T_Fm)#n%>h+mZLUtv^2zW_f|gmFm`yRT!|)XK&*d<E)9n9ZlNE;&#X zFt~3O9Y+aNP3W^Glf8NYiq<3SdT3)-5F0Z;h2>c9DE>|tLpTSt!&N%d?hQYI)%-~; z<`xl$NL%7kjFuTh!ZO7b?Kw<~#zXKVhRJWikHOOtSZ%<yWj(<P0lsVBB1i8-=xD&z zZ9I)(O_+#-_wCrg`?~f&vlNGff5f^3Uc&ekJT3%L&`#JcMI)9lC$K%R0<t}RC%pJN zB<Nro39`qrSTpG*TS?bwrKo?OGr`!X2Tg%Vq=sW&0$La_o9$$1aR((-(qI_Ia11%q zURs#J$H8%<!9vLi4=~BZC4ASXee#i^{nqD#0N)~$@s3gZ?k3lD%!!N7UwAwsf^*`` z<IkRc=E(~epM3g!n@w;tgv5H^LF&4)+<pSi!k8TP#E#C{mFaYS<LRfsK=U?DdZ&p< z5Dv;vooq+D>N;DW$K((Dw4<LcLXh>nc>nYG;O}d{`gQGzJ*qCkH<{6M#pd3|Pt7jW zv5{C@)w9vU=286|Qb8^WHs@OoV162D3XOX8DrF00<R_N%jq7^TZJ|GWqvjiDA*dmw zww%&c$N;L#3q`$K1C<*lh@XUw@I1DC-^)qThvHI0eKG+?jlG6#tc`9Q_By$50iky- z_bKG1Y*a@5cf*6_lgqs&OFe8zV23h{C$q(c)utT^m-t#r?7ZSGM*a<2d=VDN0!_=W zN@^R9YTgWB!rCa8Yv@#92gYw`VK7ge__i1<VC+^J)?g^rh<zAVE6+j)!GF(-AB*F9 z=X`ja0v@a=jr<dJ1v#9fEs#6j-Mbs(;qjJW@XE=V_jHtqb0VsW41BYRCC%R3a|OFB z48pCA5Lwt$i07o`p%ytj#uF1*IRl$z?!fi_XBjJGwF<LdER#52(yoD}P-)U(6S*HR zdw)mgywhyaHRv@jJS^5VWn^y|9CG71OV-K1^RiY@<j374+M({pYf~>`IAOGNU#ecF zL;FDWopi)hOtz-7?hI~jpq9(^Kn_#D?wPy($&_A$B-{I0ij@4<@WBF4c83A&QZvL0 zWi2(_FnQEZBF9g0;!p{Z7zDNl-Y3FOa6RFE=$08D#A*UmZYRD0)NZa#Y@ASS@l)4) z;#^GPBlD>R57&)qY{_UsOYdS9t;YzV0h_sQ#ND{8F$qr~B<6)F)(I(CP9|xMg>?a7 z(Tm@}DgpbY1gx%XbsnkWPJ$|uW{;a_CA|!xB_QuM0CU(6!I~15lXGSqu$(@?*(Z?> z_Lb{K4RiW_n4<xJ9``a>bCSjLR>zw2WTQ^gWgJ=yjwa_J?!s7x*c@i_IEGRyRXbk& z2OyJ%C3KZm+K|1%=A5<xI2$AaZ^X>4)a2k14vxW^7F%Uif|)DL@bk0vqJkVY8b%$* zplCfDuzskW^l2~Rsj2)~N@LsgQ6$u^BPwc%Ra`62&sPHkeGO+5@*oA!3&p`$U6tmk zxWd6D_ZkG}`L1e$lZhSe6zOYW4m8uUyBb(M2f7e6J~*=rnr9ANpKMQ!h)aA^MEe|= z1HkO<&NUXE<7t99fN31dXmpgm0P(RROVFShrJRB6BkBdt&9lX&8K;=X=^zDpB&@3C zK%zeW(3S8#wvc6qe>&?C^e@Q6I!6oXyhwy`P-z~*={zc4!Wn3s9aAt6=biw_UF&YU zhzLv6nO(?-c)E-SYIx8v6zj_f>kz@~y4t+(ofsWn7X(dLsodcS>v!t=Q2N;@JlB1` z>M5BG`NacxKhNRBOVktr@!*HnGmkwXFdqJ_?sJ^)FXHR~k;M7QjGu2TV#=u6)O>LT zXXGdp*Ju8x^i*r8hsjF0MEluu<=VO8^=G93B6+ufQCn-!Y+Nvj#vn<Y_N_Uk>w1$g ziR_bo0pxhj@82+Fq<Ft?sf+~%a#>BBpL(u<5ClNRCc_INS3Qs*%M|Tt0a9@_Gv{a8 z{TM|Z5p|$C3z|2uUWn~=vkJ)jM`XcN%4EkWQlU5r0wtTmnJi%bfi2l?JNqpAB>dxg zLI5vp*F(XCF@P`$7~>I^n2re`lk*ZZwQZ(qWV{FkyiWnbq$m-9A>JOaPnwAuVv3o> zQ%^Iy)(=QS)6A5chO9#Tfdr!$=9VL3g8QU~Ejo5{y1+=4`7Lb_+8={?r1-tQaolm? zWrdx?=)ICvi`YJxFfv_)5qzBK9cw6df2`S$l6$>=EF8HtwyKYD%>hu6(e=A=x8KWB z!qFUfJ|?MiFqj_*WE+%WuphqY<|w_;?R3yLkbg)TnA;Cv$;ho+%|XDjLDZSNGLCYF zxO6m!P<oF@PhM#b>)g$eHce8x0fWk{3zK}uhT-pDiZ2dx;J-vVnCMqVNi&SmhR0*A zZMb^^TO^Ur03^a}F70rmly;H;knjbDQ`@{)YYe9S+t$ryuC{9p@*k!Z^Pn-bo@UVF zuN$iXk^F~uJ{Fik=e#l0JK<%y%|dIw)qab$wv*<Ky#y1xVJxKo41G1E`^rmVNlh0= zv9pZ0!Rf$IV)I50%LPu&21XPiu)-R%gh{tinu5J_sIv?t8c_xBZjt#Wz^?23|AqtB zTM!7|-Mv;tl#qXSpU3ZD)01+tW%CUJQSMNR0FF!<eiY79J4u`-6qw_xC+l&54}dMc ziBPLkVY(%_?W{mc-9#A@0-FGhfZc^_eJDf;FY-9lMQ?FxajK}V|M<wU_R^%eCmJXn zxW!?9X=^C_3o4aNA32r}_ANZYO~iusZb42L6+Ci=J4R3&(T{EraTuRxO5AQ#cn1Se zlGqbr&~=?`>O9p-!n!v#kQ4=P>UQnuyjEhvuu?FHz$OMFga~I+Sx;OLj;*eiY<1Ve zyBJ%Yd!nxLAkNgSi9+8AHDC*UR%8hweVgu|=tc)f90+VW_ex(6m#p)G0n``qtf+#2 z^A`RDEW8Ok9-G|Jv2l`vHlJq7SLpmSogbznazK#?ic!HfVg>Hv^+}z(`6%aeM8wBp z{UK2?%OHlGnU?NB*C^5iEe`wvCQB^98e(=)llNmR@f-{LA;wvy)si|+TrsY31yx@( z15mpW==XL_HBlgntWU{Kja8v%^x2`kOm87K%s|3(RnYCNxT5&-`=O|Zptc58EcgM` zwLP@G&{GITI~e@u1i>lntzv!(LQ7g<Kp%)YAT(*f07mN$nJuJ|9quOrRHJRd3dc6! z6!o)6ltF(ruEUes1w{)~EKtMPeYR=uf{JDb)MU9hR9{dBK?P))P|75*VZ^r4N+c&B zmQ2M>n<_Rcaxzfiq>#f#>OOwo+F|2c1eXjSv`jqf{8UtBZe?t2IyXvj0(*omvE>j6 z#D_1pt*@at24c(CAaJZ$*k;<TID|L}tl<#YxJd{ovHhgh26m37JVQ_^&wNUAJBqbB zLrj7^#2V0w06E<2#Vgqg4z2(};ZR-$XaEQ*+3J@gJlMRxj3X^HEOu<H)i~N$$pKH1 zmH}u}?8+dtD{&qNdCkCqCm#CCNp54#02V;*SAoQW+*ye+5tEb{=yZaZUMJP;bAd^; zCI>hThf9QRpd+BA^iV)`3n+mh*aXu}0@n;6-H4ZHje0mNp^r#ubc7=nDfGvnH|QoS z+j?S)mikE?JRI-_w-Gt?UAgY{VQtU6^-#nyHZ1Hkq|mo)<hAXGtang<WB!wS^6&g@ zP4fPB7;jKa@)9)3qcL8GDV_{aSZUG#QcZF08GirM(B+6s=4qLKdJt1btcq}c7DM81 z0flkQVD0{m;)@QW4_c@c>Q$%1)HE`?6Mm!~MIpDPTa`df$NZVo#HBP%&pf+<s$T_F zY5{59Yk@sjZf;ZNzYfdP$`g^&j%oHuk&|ycujNmiBYrm8X~7IbeFZ_<AWL|saLms! zY%7-gYm5-l)oHf*AM;VzFqxr<ebsLujJ7;;P}l6I-==;_eTWHgZC$6#Dn-kKGnCc8 zga|*Q8%K*UKYNkpT{@uQ=gzD8oV>ti_5D76GW7II!V9M#57Q2X0Uf<1=0Dd;v>ue5 z8O#y&wHqInddd4i37IlAFq4*=C!sW(RTVlMQT}kJolrPreh@v{xEIk0Xr`&hr>1_G z3=hn5A_0vJ^w$Y%!U98tZ_pey@?r;IegZ=3JKx2i?BaDhQB$<b`%{nx{vzTu^15bR z_>4upH1>E&a4INaFr!mmvXa2j$TY&Km@(xzS_Yys?#CcFgMK&k^}0P?TDZzjgRAs4 z`*HLLoTC!QQ?5CHy`Uk_%+ag;0pA=9_JVz@F9v%-Nx3;)v={8fZV_cOe{)Fty&>-P zyaCw@4kK^BHw^klKovxQ5b!ymg9qA#DsL368v_?5Z=;_(wVXTPjokouckE#t(sa|6 z!Qt5USaU*lj6+P@+}^Qc9Ck;%0ogHbmmOojH-Teb+k+kBgwQb35i$Z^Ix2$27<lNo zw;gp4iaWAyX~80PksDKtNs5Uu#g*$<4x=3F0qWM%t!?;>Ay;-AdIRm<f#-1^U871& zIUIxd#Dou>*DOiq_(Xe-E18jtOe&&g0Y+`aBvVx&l4v|-(h6*9BPN;p7g@kM>pD!I zU?)La0-$7?=NS9*bg1W<+^L1qL_RXh1xtaWYSKhj{XWJK{Ak`G<~-5t5=$}6JyD-R zNF?Y;3;Pw}k$R5K^K>rJ5e@7M^kJOAs4D_NTL1bKtGUJ)YqhZCC*jb_N?44BNlDEK z0xS7Q=jsm>HqP*`a&|w10y(=mzagZ-3<sEj6;K}_PXvTui;}T&CTviw9UV{z_Cx?c zu&sGJo8WimZSyZud89RQqM+-FM;xBsup)IW5A5><KBw_%oDIY~O=AtW3CPqpF`#il zXt4P=F_3Y|rDuj`FOkaTIcq=|L+x|p(A?rl#13LE(m03|DRmQW+OeRGg_f4Gd9Vio zK7<LL9ZZRYi}SbuB9z2`F!Uo&++z-&VKW}&Q<T#|PMI+A2So1f#v!<gVs*I)>vs}3 z^$MdHF9BT{*cUZraz@Q^a8p91Cu|McMqmX%)}||rt36E0+p(-06FwzvA*)NkmlLK( z%>wiZV=+uZ7^pa+T^NgnB_X6oD9L(hgy9Sq^cSQYWwmK_dOd3NAV@>(fR_XuggKAY z2BRLZogS3a=Ov>w5Gy(Ti%75jW)qdr3JP^$&Uj_0H4Ju`!I@1PtpLM-K~8ot4u3Do z&3V0*k+5W#*^E}UL8vBg8A7PtDBq}zfoZ0|#{0lfAUMOxFyqRoJ5kvVc4Okq9gg%& z4zB&r2%o_=gW^<PFc#dHrgz<eW^QE}q6a81u=N(>;_mC&He7wT;nu&-UEn+IHMt<` z``<!4m#IkR5zz`bnU4$&L*YQEHu)x%pI^($9!gqpBCi=LSVpY;o0wYaG5Fpx4zKa< zi@7N<ByBm2V?Yz#AupVuNFS2smk^iceP6f(a5cY{6suf>+0^o^jc(3$ggJV#MGH5` zpyE6zSQ`vYG(*dNL_7z2!rky7{Jy6Cm^K|(KZPJ|<tqIBSrnshm=J52&oTB_==>J5 zT18l-;K0OuO|$S{kU+?~h3O-@S`}TU`ekO3MMRXAukmr1i4)LL!7Nw3&XCW-nat@G zV1NNPSUZ_M4``uhumhcixZh7wxQ@LkxP80PnxrIU?}*Z87_jA4ONEX!I2MRg3mdyd z+xC*64&*J!|925KZi7v-+Y(t5dsQko`%IcP_Q8M>Do&Wk(9E#Um@sx>$C`s{!^Dtg zHd$+sCN`-)7!tzB)6BwL6T4a~3)4~TWF=Rhxpv1!_8m=^$PT=Vfzv1{LT(Sl1LPK5 zgMq!KSpl;K%Z5yz%%*9<IL3z24elwHBdtJSP8|Esy+}!>k6Vjx((EAaiqV0as-z)f zKIW#dcSTy-6T%MBz;y~eO<R@;?pk?eMz~DGc~u6|_5m-lY(qI~gTPggzgNIAEB!!_ zi3+Zq;WKuiDKO^*@+Sjy7sHM=DJ2Z5SCDGRNkh$Ahi@2&6BM>a)^Q&+c9Bg9BVD7- zOl=ZW0l$HT_6QDzzM)1|rSpFVzOfDYe}wtxs0!94u=H^$A?x&ls<b-+X*&)vt6xFP zc5!#KcEZ2Q!*O>YMrbj}I8CkHV2gHxf#z{=7uQB$Cw&Kc_0Gy(L6|>-^xRGFbMM05 zImgQcB>aob0sTx30d~o~jC1$54rpJ1f`_~zV9vX|!5eZBL30=>CN+lDy$r^DPU!8I z%M=cWwBv$`!$^C#P>qtk!PY?>cW-M4lGus&I|I-T^ow=?z7Flcp+Gw@Qp-a-AZcac z3$+7>p&d9C0EEFvJ1_$6!2Z^hrZ><KP)9KcDitU*oFSod7Vm7DV+7&iXWMc41Fq$u zPkLnB8<Dn-JHwPdKw^OB$`M=^FzAh-9TsE>k{0@cKfLlgsAWh-2u2M`{WH(P_#eR` z-3g5RW378UTzAq04oBSQVJ>zrpRvT=*E;S^IHQoQ>~Qaw!`2V1U`bQI?(Jwj=xjrt zon3FUPrprXXXOO0PqImYGsYQ(W$<TeNpDBxgfkAkjf6=VtasOzW$cnNQe9>I9_Hxw zZP;CGqWbUOk!n-zde2mwSNgsss%0bxEjO<m0o6OUpxOkWd#AoO)#|rEb@^MOT1HGn z^>;ZikDA<B{Fhh}A`I{>ju-`cC0Wi7i<w0mK7`k?;VQU5z#3ddE(SAEF|=lZWtCV& ztnj{hfjI3PILDY@aOUpI!+aFCU$!;fQYlXm>$50RlITSKg4|uZx$?Fkj3l=66|UjX z4h>490wMskxe(FL)K}X2A;K{Te{qj0nyHJ4TGn09yDnbZAC?&v7L*-5zY~nxpkYui zaKWZo)J63Y-1F)%1JZDCkamv#lXQCNOw)N34(|I8`bs^)Fe(eQT>fdIjSF-Lp5$Ph zC>7osncnKX_(t)qw7?Kp>P*ARk$Xu$6^6WJKYr%<>9w8H-CfrGYTg>&5G_4A`MwTi zg`ko@Ad!DaXM)c6(D@9V2sdeKu+NcjqB;$ozDgfA=CGfH6_P&9ND;R_kM<?{zL(CI z>Bz4BpVCK@E=9$K?wx-^-%rr_A{{yYWY6M4MxHq<Ez_q3cb{go=u~8bzs^U2ks=om zk$?coA7ezM0Z}3*IK!|*bUuhi`1Uf63iD(dBziEHz!m2J#J;_7A8NIqz_h_nK+s(0 zA0daI4bJe)tNO|^Hu3t@KOsJh2`6`VAWD%N^s|?ws{~+5FY%x!E+1$gpOiyQ`Xps9 zU!iz;EKB`A68R5wq$h^jv9#BhLCwRn+B6&AT1seh=7Cb!r@#V6tUmk<H7VM!rb(3a z?+kqxNKXRQK^p0&$Op(P{0w~s=@s9WknFr#E`)=Qr|y=Y-w0xVA7x!5i2WOQ5(7Bt z1Lz6~gPdMUStewN1hs^;Cg3U0@?>DWNBi&$!7e^H;bYoH_Esj&XUZ>lIw`?ZK8(GU zLEa2b+TctP&KBuYJXxMQ;t3?A+X497R?v(B4(szvS#!|DIU%F(mib4yLm8n&V6l`o z3S|z?Sph=B8XcxAl$ii%zo$4Te)evJ*L-8LAC#A>d2JWKrc^qMk4Q*p6%2q8-7~ip zz(zbxVQ7;Jc?h5?ZUa*%X`hboy$DTKQq6dck_z}>Zy3jIa<Epcq@(+6Ao0LWH!$JA ztzSKmQ5co1$W#)wjN1!IK^*xQ3$PBjlyLhYw@A=`0{{f6VUFWu1Oz83qy=OjfJ}ln zIszQ&IDlTjUfk=Lc5pjeGlSb{vR}X<9o(Ikbw?msAZ()147U%tHy|VhupMn}gOz2U zI|gdUD-!}=e>ng`0t5hMlY}vVu>xmc*fI)<Kn4&K_f7)PW%(l~xC;uKg&<~7!X?%j zK>V=W_l3;>;&&jY#5>zy5Q6-)=-(KEd$)9M-2BD6Ufi94xIOrxloTwg2SVQs6OegV zYd7xW8iZJurw2yRo;@(hA^aO{-QjExe0MrKyd0$;eD?Y(d!?60z0t}(XD5Gf1zUq{ z2*0bfe;txBZ(HlYdJJHEv~o8}g*i>-pf^@IM5ULL2fbsJ!{XmF7IW?ZWWDqAwzJn8 z=Jy*mb2<CmDg02&K4-sk;HKqF>fUKhOX<CpBe?19Zs#DuCFnfL&?~Qay{%*P33NHM z_SI<RyujnIvd99yz`hjM6$i!+0!+eR(kRZuxC7^L#1b$}5FSg1L10uKAprK+a+P`K zZLR_8$sZ6?1K1a^cvcn7sHqNn%5Ql+7gK)qK1{&#T2%cAyt1&b4Q4LT#3H;xyRJ@T zWLXz}j&q*Jk<vG2d}H3nu7j#QwZfnQSZ^1=OAA*U1yS-9)KwOG7gDVC?tQ-SQ6y-7 z<fG@Bdr?Z0SrWKa1O{@xS-qw{fq*sh@Zq)oc2bmv#BqJ`17W24IXF-c;i~e6y9%>J z=KA`JpZT@FJMiMIlWGP}&^fYfbuW_>aJ-eeScc)v3yqi7hJ>y>?f^cAccLG7h@s(L z#N{eDHIF0cVy08CsXi1kj}QL-!^ySeGv}UtJpXVW7s}o<x0cTAedZ&__Tt%(&s1S{ zzyrRu(pnEz$C`5pmvKCN6l$qYBCq-mIDQHjU<kpygQ9H%DV<=?AW~gp+Usy8@7V}V z1Z}**c)4^`;6#Kw)bBAOM@QCtIY@2c5jVYH<Y;LVaR+|C2}gfncdM^RkP8iP<xp1` z*IptM*jFN)C+`BmJ{9)rYm7<Y2r!I#H=q%K37!wfNn+e05?ClJNKFE8au0o29+6$2 z821y`<>WZ;2*Ft|IdrW4QWC&?_G%F_FaA7<KLA_Y0)D>0!PO^ngx>Xs$~9bKjgwqa zH}ZV6Je=amd0Q?&F_(|v?8;FAFY14>`afgo)-0}x{S){COAy`FZOFo2_OlnF#mkvf zeH=%>LFYH=e1#5?4elbAJ4+I{U<PAY6sc;Mv7*v=KTE<<amvte*qk><(Ayh%33Pn( znPVCSdqN#fR;wNsF^Na*h>Yyd@puB=*<i9n58wsh0VG~ntao5R2aLD{z<~qFP+8o< zfn!L;02u%nAUOlbKx#Q&i=)s;X#+d}QoL=$8ia=i65p7>QD{+;zy)l9e2o$}ee4;B z32r6+A(bRZ$eL^WHZAl#;7?&;=PlS>EB$uR%ngF9^m7;mSp8x!b%iznYihR`&4f0= zsMr-z9=>kAv>mIUg%fQ!Gq4_mABT7;GIOkT<8|{h<lLh1pqT|$M~c?6yyq1HhKpQd zTfM*u3EVA*XSWZ^N!FHp!{i#)Os!?zTnj5WR(YH2l9-O9Au_`&;J+Xi=AT%9($LZ5 zV1kNu9eFclXbP~3_IODg;?<>O+oj+q$a<&}Z4Ehn5beQ`1gVB$#zCXh9;biaa7Sqj z!lSxg57dcxsz3<}4FOj2bsMW+sx{7aD582Wq*_z4xlY{kiarQv<B5vit!WEr>Wyf^ zJ-N+ZXGm!34QT2WntHdU3GL~{ZEk&N(RL5*gPCs%m;!elLe!OWhJl0z&;z_*G%dZj z(@O``p&z^67{!%6tz9r}*;b|^bpR#prr<~4H|lH$!bvzgZo(1)0>nJ9)qsaqR`xg) z7v4cXl*VI34^E!zI}By+l#wzB74=YSud_$c$G*y4^Wf&ZNs>R|hC3M(FbE!O0WSy| zNmTX&zYGy6fc8n^o!XZ-_x*bxF_i<G-xQ8p-wmuY0;A^1+s2N%iOSt*?}&5IImG)A z1%oAkff%;a8x_nJ_+Wf|$eDJI$enyTANn=uDcpyMyAbb{IL^F7mBWky*4hSLQ?@x4 z)HLSYCuLytLD=>c%(*G&xb$A4HO)iw-M#A`3F<VP<LJq4&i&r_I%Xt#9e&(VNPoLu z2b>3ak09RKQQUl*aZUtt|9v=JH-S42gJ%j9fy0kE4{@$~6PT~iWWs&;jRbBLJV~^M zdqjJ??h!Q`2RrW(y)x|dLh$tH+Q%cb)kbd-jDkKa6avA5GlFefndC;re9Lf)>)h;O zLqjc*mV6i-QGFJ?e$7+|)%TI<b5$wl_QUu6@SXRKCw$%lgnO~<i^ciIMfC$rMWdW2 z*378~CR4t#szoB!!b(Y&Pkm`eTwkgKjSjAT6EyT@g4O*C<|knDW6DJU4yXxy`%{Js z7J=G_iy00<M-U6viL=FJUNECo`CNk3FCfQTMqcpMr0v_VuT&5v=$o}H{BVGuSgR|* z4^?AzxUy)e^p<fDxB3Aly-CGN009Nish?+}Oi(v#`eg>-k}v#N1>oNeRyjxKUm;vM z^!*Bb1g*YNSN|LjYa{1qoXfR)3gW!*-2#RYGipru3Fah7RKJKY-(0Ng{xhyYoW)37 zXe1pF-3`X=erZ+x5{sbNYc2EOefhmF?%SI`{Un;Ofie=cHXt{p6-1&~fO^&`D8(uX zk~Jd!CRp!>nW!z~`5GVJr1Rh4;9xuu4uAuZ?@u#SWK~>XwUFrzlKCTajxp@>bjI+= ztDA5b372ZU&LC<5wf-=H%?eJKsplE;Cv<MY;nhUEw8_t0E!Qy+1luKW9t(FD;R+*S zT;527O@hRv@S5vt24WZr!sN;@f1JQAxF{yLR;?h2uc2NgL5U?9U^t}%D1YpX9=w8L zKgcrv9oz6*bVQrENZ-Gw^V@WiOd>)yg1X7=TKW{BI9%w2n{9XpPl_I1hM<9&fUNj+ z9O+s0jX4SuXX_ZHxbo*Yf-_#lh95BvulM48QE3+wPcC@U*Xn2y6(SO{O@M(f6tGbs z;4iMQC@kPeA-Y5?Y@z{z-z9*s3`j|Dc$QZ5bpmMt*^i$oJntt!ER2#d=lQd#YKSe} zfCK*u&HYj0z`ubfm4VO(=#N+1z>qDtT)?z=5ezS3;k7pqC_%u3>s#<i+yc4-0;FLJ zuWP|oGbZhRY2zEFLmJ{pln8rZxh{vXu=oW^%q4kg0Yz89jBne#!i6~U8`%Ujw7gh{ z7rOu@BE_x2xM^xScA3!Cq725`piRDUT@MjxUz{~l6qdmSKQO%!krix{L2C;7+pIZe z@}isACwKil4DjCGLd-<;NtWIrW|}n5%W+<OpPwAyk0x*g6bgO@x46}v75uVE!Os>7 z{E?*~CRr#r_1Qu}9puOwWzT<szT@<Xs8&R&Kg+OHhW#Razf0%$=@6eQzMPI1Ca+G= zdk-S0Pi~xmlZxRQh|6d_T27bWK<)o0bw}*u{Fiz#bt1DPbue=j{{GbQ)KjUCz;`BF zQY>e3A1?Nj%fe)a{{e#34}u~Zi1T(4J;6-`Q<GnY*w~^!EB-0Wxngx57GLtM_DjY} z9l!cGgKNV|_yI9h6HcT4m<0<v`BnP<Eeq)nkN#m3$)7Kh9i8m*kXfG!)aU-N(-h8t zVy9#<<BC(xS^k(u6rtyTT)tEs6#Kh7V)?U0uv%!~N*D1IaCd;>F0`wRW$q?1VfZE6 sQ}rQI%k@QiYpd7crykOy;1RSw*5DiB6-oT31*Y1sU46Y#BuGvEe~!;zbN~PV diff --git a/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/bayes_inference.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/bayes_inference.cpython-311.pyc deleted file mode 100644 index 88adfbcabb95e11d86659db42240c5fa87390c2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60922 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	EMv8BNhHu5uAA!0517A;$EENiSQO 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 NgdP9%fU~T-{4Xm=U#tKC diff --git a/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/bayes_inference.cpython-39.pyc b/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/bayes_inference.cpython-39.pyc deleted file mode 100644 index a37330680c29bbfdba5a1bfd98041dda24957604..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31419 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 diff --git a/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/bayes_model_comparison.cpython-310.pyc b/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/bayes_model_comparison.cpython-310.pyc deleted file mode 100644 index 57322b839ff7d50ea32d3b36ce011c09cf91e232..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15645 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 diff --git a/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/bayes_model_comparison.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/bayes_model_comparison.cpython-311.pyc deleted file mode 100644 index f8cf9ea94d01b774b2d634e4e0caa06ef9bf6843..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27053 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 diff --git a/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/bayes_model_comparison.cpython-39.pyc b/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/bayes_model_comparison.cpython-39.pyc deleted file mode 100644 index b58f792ac36504c702205afc34228600f9bbba77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15716 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 diff --git a/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/discrepancy.cpython-310.pyc b/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/discrepancy.cpython-310.pyc deleted file mode 100644 index bc71688a4cae4f74ec3a67838fca659881c520c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3806 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 I`#)>`7Zrzs-v9sr diff --git a/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/discrepancy.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/discrepancy.cpython-311.pyc deleted file mode 100644 index 5301d0c093a62cd323cbd18cdf99d5eed93ad76c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4795 zcmb7I&2JmW6`vJFnG$8ob=;zM+-T%TwdhDh>|9zQHXvEHD<@V8+eHe2&1$$iBu85A zvNKCb)JI_yKKP(RffjHNJ@}BMDUw4EJ><`j3<41r2oRvB+!)xs<ka_OcZa0q0?k?) z?R>p?@AuyOy;=YL<jD~NPo?mJpZO6X|He-G3??tne*rH~h)Z0{BXw)VvhaPt8>nYi zG8P#iw~3p1MBKqo2MGBbe&c6l(6#Q9LiStiE*Gq5<mOgmkt<R4m6NQ|f6^V#DRiF@ zPF5_JtPHr;O2$3mW*=D~Y3LDI$-09eFBjz(g>ocsFyCphFLQ*9P<VO<spB!FXeE$z zfwka7=2PKUxa7XWX`P3)z%A-cA9CvQitsrNYn)1+u7RDBGf#vq8V0n?DgS+wdHB9r zV<Fw-)B&0Gz~vrgzDt>w=5o+WXuW92Wu2C$X^A(K@B*Kf3PlRXIf1W)%cVZB5_n#) zDSTA5&ceA7EoO4E6!NXGT-j;u**p4uC(&kak6xoCSXy(Kw{v%Ix&(TMtU%u~2hB`Q z#$q;WU~s<*aMHbxc9!j(pc#UwQUR=NNUpdaDy<Nrz$+E*KtHHxZR(t<rsQ>4L%EcI z3>qApE_~)VP05^Ak=}wCCF%`NH~`xW6`{rmu!|9PwKS$+J7umbLb1W=ZPrxUJ+4rR zN9m>rYjm5-08WOba99<V`heU9li*5+$9l0)iY;y5eNnA5u%?Tj0Ub2z;<XHTB{REk z&(M<I2X09bTk<ss;3C8y05E25aH#}15o`qDMOm^Cx-)1?P*z-S=ss-(!Vk4}==rV_ z1uX&e#&0bRy#OfUDBF&A!+FdgqNM;TU}U+8hsC&POg5O;<fvY0+Q{sQ1#l~(_G-NJ zuEcbV$u#6>17azSy4^IadV&qX>sio^L9Hof;Q#fc5nD(>e*htu=0TMP4YU=IfzV|e zOn9v9@x-r}=?8k2&d<>gF-X?^VABT(UEyMOb`7SWT^t;-j{y<LFs-QYUEbi(Ksfh= zwn~67XDlRVH2oiN%8Wju!6ZYHkz$(zH7InG4z<K~$mt{s_X^iaz=w7A(Nz;JOMAAK zV$u|p*D2A}1PBD}P18XikcdH#q8}dAAiOjOZ3@pr23y0}^ja|y#u72xn~+a3WDuUh zZ!|-iC=c<jQ(6ndb;3__V1~AWCiOX(26ULPC!-B1AUWzxR)G{iH^J!Y5=vZ+*|<oT zgD}qA5GfQeF)CBgHSj?<1`Og?JxɇS=mFBHHiK$l47sD~?9HGmVeV&Ft6I8s%T zxG5yZ10eD5d>AJbS6aZVd30ARjD>{GL0+%vF+@|3;|LHVuy_sF2z7bc2ENsR1u-yy zxGp&mokmRR0_{!|&;^@LuO`90uv#cC0rSMBLz*{3^h;F+&4$hkBQD`pT5i$RyI6{f zALzA3AHq+q&QQ*rT0&uo6m%QJML=t8gU6AA_8oIy6aAoVe94Iq&;`80Ks)r>>ZMDo zu^6B##|~Q!4$uK<86_X!P~smy5GpALK>vYXg#Bp+xU_1bKs6hUKq8JRpcN+L1A4HU zgD7x-pCth3yG#`qS;%f-(wSr5OQ_+cROxdW)TkmanuwwpO|3*%Bj`A(B*th5>39n{ z^|5|?)D!F66SW|4!TC@rz}lpWBFd?U=K(S;KO#{swSU=3uUmL0!Yfe*exJV$%@eX~ z?GhW_;%9dNdY0*BpqE~u;9>?>Bx|{liH1!uN5jTB(MT7@!eBJ0xL1+GAWGsjQ0Adg zs0XV1efh>*={Hc^R7tJ}HLu2)DlG<16R!fQbX$bKYL-i7ykJ2=60QukN=iB}jp%vX z+`dYvN>b^IjaHPiVNQg$y?qw*E}cn7-$jL9hvp$UI(PB$;Qp!f&-qE{jXj2c&taN4 z1_9_~;a8(~9Y&9#N7f8>uC=cB$*~akB#%4rDXjS1tooxBo=E2i+3nfizYhFheCUE# z)=bYf(tAgr4t1q=-*zo`@QZB!RocQ+jkGnR4V(zq-}nh%OWz1t)0cYe_w7UX>gQ#> zyRz-kbWMn`Cl5$5Xsn$|NBgC?L+gk+k#-eMwa3y`;Y9jI$Pbm-f5Ia9-IYCv{WT-| zDSWaVe_pNa?!Y;-v@4<i1dHrnh1~{I$fXnP&tSTtgWKHaaQTA@#o($7r6;XRy|o}A zmfmuu$t5mTMi$Pe1#9*=&j5qqidXRrB$2rnCR~CU`|J4P0U2w~F!gQL4Ec7d`y8-T zd|k!e_$)W;Whk~lap{_ALl{)?P^A|}Tzrp*P3a#y%N(TZ`&C=t4CdfQCz)nfRbx;R zri~gi)VK8^s$jOF_+CU)b$X1Im_6IqZZO{u;8O!WkdTM@X1a8Sf`5>K8#35{FD|eZ z>u4`@DjJedK!W<W7~SxNny<4hyWw!#<yDEyP&g9}8$~ryMyJdb;wF9#NeudE*nHYX zV;VUqpLYDA8Re@<%-A;<BkQ-(XfG~NR)s87(P%aK60+A_9_1w4v|T7_QT7hdVi;vS z?nlFSliQVw2C>9PS<t@9qaoJ78*L#YF?r=#R4AXW74DWo6#-Cr5@$xLJWL{B`zO7e z+Z|tkb!r$ec}O~xoPQH}_nZ9K{`J4!dzK$R$d7-0h8|3;9-d+CGwfiL{bz`rpM1Lb z@$%uhciQLP(KKDSf`8h%pC9E$_fLJ5yZ9`3@o4nNPp@<`WcbbR$iVQa7ua-kGeUkg z@wesng_*~L?c6z#N2l83SN=KquVVY^(&6}>_V}Gx+y$5$9eW(^|Dip0=`cUt&QE_f z|13Xyke@yJ>G{Wt`%7PsPkwU$v$J2k(Jss%PA#;j77oX6w8w9Bh;{O=6}NxNADuq? zm*KBY(`TpY)3YDH(VqC_mv6NvZnY=gJ3Re<`}F$<`sbUm*V<$BAV(!q4gicXCy{=a z3qx4D&<(a7jo3DP5H~%1AGK}#zk+1ugl)TlW7`s0Q%*ti52A%>XGp9Ix<SfOi2FnH zuQPBZo9hs4Dpn>t)gk@O=yZ0XLykAGc$8eoMtS9kMysfUOd_L4m-{Mq5x(tZP=(w< z3%I9>aEXQRhZyyhj_p{-%doYp_xHJXV|%a5S(w1=QB`O<8OyRdIbvNnAg}lS9Fh5h X{-4fJ*|I?YSGV8k@fZJNRx9#f#qvjs diff --git a/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/discrepancy.cpython-39.pyc b/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/discrepancy.cpython-39.pyc deleted file mode 100644 index f154800917aeaef9c499abf13d47fcca6ffc639b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3869 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 C(w;v6 diff --git a/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/mcmc.cpython-310.pyc b/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/mcmc.cpython-310.pyc deleted file mode 100644 index 1d2122246d54ec5697803cbce28900e077b2306a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18924 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 W6YnAs1G%l!A8`@AH@FHoxc@Kt+VTSc diff --git a/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/mcmc.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/mcmc.cpython-311.pyc deleted file mode 100644 index 6177da43e7573677803782f2472399b0cb79a672..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35863 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 diff --git a/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/mcmc.cpython-39.pyc b/examples/model-comparison/bayesvalidrox/bayes_inference/__pycache__/mcmc.cpython-39.pyc deleted file mode 100644 index b9fe4689524895c2149048d489b22b08e85026df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18959 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	o4MB>fKYEXpNq!HIDoLFs zbZm#Lw+=~nYogqp;;|`Q>fx+2U4nK7nyt7T;FhByw+8zbIz_{_b;BXcFW$Unjcx|G z%RV4n0C?n40HPOz-?m;s4DBvYy<I~|i{M>vQh(faq2LoLy0{(T7$Fnke$nw=@Zyou zNT{!9{$gI;O!E6DV?K-9qp}V6bJo1O8W%{<h$&aAScS-P6L}kyeal;Qn^h+7M%cww zI0;zSqz?g*7{Cmk7VsU2`-BgH1qB_s<wN5r>{%#8Wh7q}ZN@5Wa8?~lu;KVt$7>+! zy9dQAxJ_P!y94>_!(G4P!mPyL>d(u?)%*&ML33Gn?9;6VI8(?5ppeL~`n76Tmg%_r zM>Vk5hbu5>`)>Wn?9tiYcu%9tRd@Mt&4yWtAI41+XnGG5R`3p=UsyQIZ`4-dQ{L_3 z%b{<%WgV3>G|iD&oixqDe)V}OXF53&!#f=nTF)|l5srVeK+7MgmE)}<szL2`9AjK^ zj1d~)UZwTC#Os98`5>^U!1_?t4IvI5i@7C;H(gaD;bN#Mnl%n*RWj*c=YFnFGCF^k z@-kArT#$^5GzAOiFfw&}KLO5Ae)#LlKOwmt&t(`{3-A$xp%|@t*F*KKpO9FO+Jztf zdYBM1dl&=%5(?ZV3`~Poc7e-*sfvtGL+XG&29C!t2GrKDz`DKG?fLtEitdYqWjmk! zh!Ded7C&zaZ88;p$Pj~oJ#qV~30g;ZnCwd8Z3=H{+pO=QXQb~FT0a>V-iO3_XlMoE z5%6V(>AMu-DS|ZA1^t9cfo1zA75JX(n+E*bC0{Zay}<(=cy>s>AvWwM$R{4&nWZ-T z=w(09CiX$oI3oHR4MsPUTMGQpN1{<^P%=a%gFc~?lqJW4F;Q}8TS)~94ETr#!@&py zw(p>4GazsD9pLBE!64oJ0)-hzdL|e|`ULcm6Lb>{sguEYXGEm$M47%|l5Ay_LEI5D zf+6sT>ASE}fuih0I*ETn;I+o#^{lsdMJYSul-*E{ARk&*++GNfj@VwPP)6Z7KLAhW zUGOsA4Y6+r=$*kbTiNzL^f?ynW4N=hr4B0as89M36j>jMl*pSv9_}Zw0odkb3?B7k zM9ZEK?RMIH0&U`k2g`1y(dMLV5#bQ(4tIKnkAJFd1s3SvsQm$sOAKrTXlG!@#;vOb zvRjiX^t_}cK);dRwB!0<z1}s9E!!UGklV$uU1a9@9dsoyTC)zvmzApR9zM$Ejvs%K z;g6M^S@!%3FC3YDVea_RA}f|=j=gZ?e-~|axz4L^UpXJoi4e$T^4tXfOBaz~c)%M? zhCs`L<kclI!fgmB2;MY@EV$l)`R%#OL@mt=rz@%*dA<p!s=Po^;0SDL8Z>SmWWU=i zG>8qfO2hh`W-pWMM<%jq=%APF<#M%*n_?Xi^9!1X=L(^vpE~Z#C{qKQ&~*ljop!uO znxCDSp&ME>U;2Cz;wGC>p;}$T03H$Aqtk=K5g!|@#&q}S^z;L-Ok&Je{>8ugPrv&I z!SB7aGJST>fBmE5yG}if-QnuVzmJlVw|^F~P=)6S8m?7ae@i^TBoISD#2XHT9WI4+ zxRPke=rrH}!1-e(x(UZB@KGd|ikws_S&$msoa=B@HR8Fb%^I!~O1_3}9uj+jTZ&D) znup8{x>5D+e+I`uVQ+-YPOA;~BJy>r=2H9_qER`bJxN$0R$UhA*Jo!bm_sl}vAMb2 z&M=F~KvnH77fN+bl&Ob^3E{s+lTVTBB{--sRj6$gK>4Xv1~*(GbijqkT@MYqOB?FU zg%*SA7&I2{Q*=~#6bp_N0*M@Bm_*N{WG_>R;X-s;)}4X}s~o)J%(4gm7s;V{!zTBc z6}YufjPInmeTHhe{gR>zQRZFIDK$z?GUC978lQnHj9Z-*;T%Q{@q#=n;loG{Txqxl z6=afG=Wgkm4R1hwezp*5^RxKPh5Zufy~5E#sZ9Px(%S~FV!^XcsRZX<nCA<1N$S;` zp>}f)vqw&-)<X4KsJ<R%VPNezDe-9<|6vLaQIJOf-=SIq_Klgs9Qh^6<Ngpq4@W42 ze8LD83W5*%KGApbq*BJo0Yy5-?12f8%z@<4LM}Re`nWcx!L0>`19CcnV+kBk#^6RX zqK-g!nt=p1{=h&QS&5CrK0HSr7>0)0CYcx}1ds4&??sZvIv<iyi6;>}!nZIdQs9Gr z3-u$O{p5unfZntRV3C8xZbI3uv<Gp|uM-~%QgkzHg>HC}p#ju27yv~ag?E1%&oNl^ za6>D|tf|3RkX|!h!L1_xZZO;)4@N<6l}(-KpSWE!*!u=fVkj6UpLg^)iPmIppDepA zcPHu@_$7i#qLVO!bl!K$_X$XkYX<*QKe-93q)^Dhhh{hV*c()5OvX?eeSueyTmoq9 zwi)4m7(7TYn=CVg_sALKr@>o{Pb$H%kRiveUqfyJ=9g<CZ#0-d-e{ah>yW_wf8Ni) zw?7-~K&if91f~^8u8>DF!6<qG_Yrxcq+4BE;w2ypc)LRQkicfaHv&iij6E<D*x$>b zpu%hVEf<lg*%x0to+GiVgXT#7im`X+T=bY<x~RQtFlen_s!M>DD3AJyfj$}sp-XZO zA-p(m&vyx&q!Uqim2W(ZRt2t%U^CC3Ca@w52!tOaLjEizXx)T)XhMWq<p>r3BOKjO zC#Q)?di@FoCn<P|g6qiTA5lPf2Pndx4^!|&C2x@2E{TOMQo&0U2(T7VPOvRO{S}J6 zLBSDf<`iOZ5#+Q2<cO^SM`_hL&=?{NaNEVJHz#L80~f;%`{N2k0JueCF*tcAl6A3G zrI-N<T!u*E)XNVc5Pkv;?E!D^okT??C0z)}S&y`zfOW_OgaZt9O5KN_zy|sr;0xp- z978xpW=Jj4)jWc<w<$)+&O$$QsCcB#y`xp2qWMsfS5ZIEN^l%t+HDh-N4TrqAv+2w zX`q;a5{E9UkbM!(VWhV4elalasB6%2;To_O7`Id?HuW(8G=L%z7+~cMmKs;Q_kCCo z5r>+G!U=Jm38l?7g{(F#0kAW!pYY+_b_c);)lLdZQq&*?(x$N`E(h(#B`sku`3Nf( zAN0sUfDXSE<NfGg0>G811&e+u0ufyBM;u%pj9=hS<0h`jn;-(r$ZfOM@x<>I=`yxL zuKzzNrN_hga$@>T@LLagUOh%u-)_toEboFOl0BT)7jbx4sd#V%<>xzOwRd@Y+Iz%1 zi73w~9kh$$phfrG#BF7gxNx{c93D$B+D%3tCeQ?`qspd&n|SbHqys^DW26bhI}U&* z8AEV`gcNWGL-lc+2mcrX{y}!_6P@oS(A-18WeU>hT)H%^;B|>WjRvNuN1^O&Jt4?w z#6fkPuj2NI>)b`nkidRHDje{tbTkVj&`XT<BZ>(;RigZqL_lH))G@9pK}AEl1zw_8 zov*s#aNWUw6d+Ee<H#(ByGlJ~sKGhJF4CBV!e9jct_d=Xz_@C_Ul%OJ9++HPeZ8~T zrkf>Tj~xvz-~~5?bzcc^dlPc`QD|ok{I39*_u*_HG_m9au%>uNNh`~6BN22Jex%SM z=o<Xs7L@C_S&v;v*lQSBd_Kf|pN`}L4INy#JgeMs^TWT6z#Hxn0Z64~UpQ3v>T<r^ z=|=<b8jK(y?wk%M3>cD9Hab27<N?`*VA&z6!qbdceeww3*1+pXApAgMY;fp7g_oxF z$UwgcYKrJ%8P_YeH4cYI=qo>G8Q|;VM>N*D%5h@~cZnS90)z=jlW{XwrQ9QqA<iWB zB0ghJVOzz$K>P!pP%TOlloSs4UJnd(0pSl(!KXttfQT||z^Z0ylb|gbHL})k^TNxi z7jpXiJU>8v4$(iWAZuiy5M~Nw$!Jz7-d89<eO!%lQiTHkXGx*J$q$<UM+)v!@Rt<4 zPr;v2@F4{Pgx*5if)<Js&uN4`l(IW?0^Je(gyR8x%_mL6{D$%k<xTUnIcv_C$IN_Y zE>kiOnTI%)&5iSGct99y)*2fUQpuJ>F8p<7d%Q?5!|*1fiyE*1L3JvwY$WBAlRYDR zq9?y|(Iy{73M4Rr<yYi2n=JnMNn;~VHy3bWMm(hK)h9EcUa_ky9IFqr6ir$%GzMZ} o%BioH@vmdVz#ljJ&^#&E`(*-Yff7ij5OM`L21pko1Ye;4FZJUE%>V!Z diff --git a/examples/model-comparison/bayesvalidrox/bayes_inference/bayes_inference.py b/examples/model-comparison/bayesvalidrox/bayes_inference/bayes_inference.py deleted file mode 100644 index 1898a8ae6..000000000 --- a/examples/model-comparison/bayesvalidrox/bayes_inference/bayes_inference.py +++ /dev/null @@ -1,1532 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -import numpy as np -import os -import copy -import pandas as pd -from tqdm import tqdm -from scipy import stats -import scipy.linalg as spla -import joblib -import seaborn as sns -import corner -import h5py -import multiprocessing -import gc -from sklearn.metrics import mean_squared_error, r2_score -from sklearn import preprocessing -from matplotlib.patches import Patch -import matplotlib.lines as mlines -from matplotlib.backends.backend_pdf import PdfPages -import matplotlib.pylab as plt - -from .mcmc import MCMC - -# Load the mplstyle -plt.style.use(os.path.join(os.path.split(__file__)[0], - '../', 'bayesvalidrox.mplstyle')) - - -class BayesInference: - """ - A class to perform Bayesian Analysis. - - - Attributes - ---------- - MetaModel : obj - Meta model object. - discrepancy : obj - The discrepancy object for the sigma2s, i.e. the diagonal entries - of the variance matrix for a multivariate normal likelihood. - name : str, optional - The type of analysis, either calibration (`Calib`) or validation - (`Valid`). The default is `'Calib'`. - emulator : bool, optional - Analysis with emulator (MetaModel). The default is `True`. - bootstrap : bool, optional - Bootstrap the analysis. The default is `False`. - req_outputs : list, optional - The list of requested output to be used for the analysis. - The default is `None`. If None, all the defined outputs for the model - object is used. - selected_indices : dict, optional - A dictionary with the selected indices of each model output. The - default is `None`. If `None`, all measurement points are used in the - analysis. - samples : array of shape (n_samples, n_params), optional - The samples to be used in the analysis. The default is `None`. If - None the samples are drawn from the probablistic input parameter - object of the MetaModel object. - n_samples : int, optional - Number of samples to be used in the analysis. The default is `500000`. - If samples is not `None`, this argument will be assigned based on the - number of samples given. - measured_data : dict, optional - A dictionary containing the observation data. The default is `None`. - if `None`, the observation defined in the Model object of the - MetaModel is used. - inference_method : str, optional - A method for approximating the posterior distribution in the Bayesian - inference step. The default is `'rejection'`, which stands for - rejection sampling. A Markov Chain Monte Carlo sampler can be simply - selected by passing `'MCMC'`. - mcmc_params : dict, optional - A dictionary with args required for the Bayesian inference with - `MCMC`. The default is `None`. - - Pass the mcmc_params like the following: - - >>> mcmc_params:{ - 'init_samples': None, # initial samples - 'n_walkers': 100, # number of walkers (chain) - 'n_steps': 100000, # number of maximum steps - 'n_burn': 200, # number of burn-in steps - 'moves': None, # Moves for the emcee sampler - 'multiprocessing': False, # multiprocessing - 'verbose': False # verbosity - } - The items shown above are the default values. If any parmeter is - not defined, the default value will be assigned to it. - bayes_loocv : bool, optional - Bayesian Leave-one-out Cross Validation. The default is `False`. If - `True`, the LOOCV procedure is used to estimate the bayesian Model - Evidence (BME). - n_bootstrap_itrs : int, optional - Number of bootstrap iteration. The default is `1`. If bayes_loocv is - `True`, this is qualt to the total length of the observation data - set. - perturbed_data : array of shape (n_bootstrap_itrs, n_obs), optional - User defined perturbed data. The default is `[]`. - bootstrap_noise : float, optional - A noise level to perturb the data set. The default is `0.05`. - just_analysis : bool, optional - Justifiability analysis. The default is False. - valid_metrics : list, optional - List of the validation metrics. The following metrics are supported: - - 1. log_BME : logarithm of the Bayesian model evidence - 2. KLD : Kullback-Leibler Divergence - 3. inf_entropy: Information entropy - The default is `['log_BME']`. - plot_post_pred : bool, optional - Plot posterior predictive plots. The default is `True`. - plot_map_pred : bool, optional - Plot the model outputs vs the metamodel predictions for the maximum - a posteriori (defined as `max_a_posteriori`) parameter set. The - default is `False`. - max_a_posteriori : str, optional - Maximum a posteriori. `'mean'` and `'mode'` are available. The default - is `'mean'`. - corner_title_fmt : str, optional - Title format for the posterior distribution plot with python - package `corner`. The default is `'.2e'`. - - """ - - def __init__(self, engine, MetaModel = None, discrepancy=None, emulator=True, - name='Calib', bootstrap=False, req_outputs=None, - selected_indices=None, samples=None, n_samples=100000, - measured_data=None, inference_method='rejection', - mcmc_params=None, bayes_loocv=False, n_bootstrap_itrs=1, - perturbed_data=[], bootstrap_noise=0.05, just_analysis=False, - valid_metrics=['BME'], plot_post_pred=True, - plot_map_pred=False, max_a_posteriori='mean', - corner_title_fmt='.2e'): - - self.engine = engine - self.MetaModel = engine.MetaModel - self.Discrepancy = discrepancy - self.emulator = emulator - self.name = name - self.bootstrap = bootstrap - self.req_outputs = req_outputs - self.selected_indices = selected_indices - self.samples = samples - self.n_samples = n_samples - self.measured_data = measured_data - self.inference_method = inference_method - self.mcmc_params = mcmc_params - self.perturbed_data = perturbed_data - self.bayes_loocv = bayes_loocv - self.n_bootstrap_itrs = n_bootstrap_itrs - self.bootstrap_noise = bootstrap_noise - self.just_analysis = just_analysis - self.valid_metrics = valid_metrics - self.plot_post_pred = plot_post_pred - self.plot_map_pred = plot_map_pred - self.max_a_posteriori = max_a_posteriori - self.corner_title_fmt = corner_title_fmt - - # ------------------------------------------------------------------------- - def create_inference(self): - """ - Starts the inference. - - Returns - ------- - BayesInference : obj - The Bayes inference object. - - """ - - # Set some variables - MetaModel = self.MetaModel - Model = self.engine.Model - n_params = MetaModel.n_params - output_names = Model.Output.names - par_names = self.engine.ExpDesign.par_names - - # If the prior is set by the user, take it. - if self.samples is None: - self.samples = self.engine.ExpDesign.generate_samples( - self.n_samples, 'random') - else: - try: - samples = self.samples.values - except AttributeError: - samples = self.samples - - # Take care of an additional Sigma2s - self.samples = samples[:, :n_params] - - # Update number of samples - self.n_samples = self.samples.shape[0] - - # ---------- Preparation of observation data ---------- - # Read observation data and perturb it if requested. - if self.measured_data is None: - self.measured_data = Model.read_observation(case=self.name) - # Convert measured_data to a data frame - if not isinstance(self.measured_data, pd.DataFrame): - self.measured_data = pd.DataFrame(self.measured_data) - - # Extract the total number of measurement points - if self.name.lower() == 'calib': - self.n_tot_measurement = Model.n_obs - else: - self.n_tot_measurement = Model.n_obs_valid - - # Find measurement error (if not given) for post predictive plot - if not hasattr(self, 'measurement_error'): - if isinstance(self.Discrepancy, dict): - Disc = self.Discrepancy['known'] - else: - Disc = self.Discrepancy - if isinstance(Disc.parameters, dict): - self.measurement_error = {k: np.sqrt(Disc.parameters[k]) for k - in Disc.parameters.keys()} - else: - try: - self.measurement_error = np.sqrt(Disc.parameters) - except TypeError: - pass - - # ---------- Preparation of variance for covariance matrix ---------- - # Independent and identically distributed - total_sigma2 = dict() - opt_sigma_flag = isinstance(self.Discrepancy, dict) - opt_sigma = None - for key_idx, key in enumerate(output_names): - - # Find opt_sigma - if opt_sigma_flag and opt_sigma is None: - # Option A: known error with unknown bias term - opt_sigma = 'A' - known_discrepancy = self.Discrepancy['known'] - self.Discrepancy = self.Discrepancy['infer'] - sigma2 = np.array(known_discrepancy.parameters[key]) - - elif opt_sigma == 'A' or self.Discrepancy.parameters is not None: - # Option B: The sigma2 is known (no bias term) - if opt_sigma == 'A': - sigma2 = np.array(known_discrepancy.parameters[key]) - else: - opt_sigma = 'B' - sigma2 = np.array(self.Discrepancy.parameters[key]) - - elif not isinstance(self.Discrepancy.InputDisc, str): - # Option C: The sigma2 is unknown (bias term including error) - opt_sigma = 'C' - self.Discrepancy.opt_sigma = opt_sigma - n_measurement = self.measured_data[key].values.shape - sigma2 = np.zeros((n_measurement[0])) - - total_sigma2[key] = sigma2 - - self.Discrepancy.opt_sigma = opt_sigma - self.Discrepancy.total_sigma2 = total_sigma2 - - # If inferred sigma2s obtained from e.g. calibration are given - try: - self.sigma2s = self.Discrepancy.get_sample(self.n_samples) - except: - pass - - # ---------------- Bootstrap & TOM -------------------- - if self.bootstrap or self.bayes_loocv or self.just_analysis: - if len(self.perturbed_data) == 0: - # zero mean noise Adding some noise to the observation function - self.perturbed_data = self._perturb_data( - self.measured_data, output_names - ) - else: - self.n_bootstrap_itrs = len(self.perturbed_data) - - # -------- Model Discrepancy ----------- - if hasattr(self, 'error_model') and self.error_model \ - and self.name.lower() != 'calib': - # Select posterior mean as MAP - MAP_theta = self.samples.mean(axis=0).reshape((1, n_params)) - # MAP_theta = stats.mode(self.samples,axis=0)[0] - - # Evaluate the (meta-)model at the MAP - y_MAP, y_std_MAP = MetaModel.eval_metamodel(samples=MAP_theta) - - # Train a GPR meta-model using MAP - self.error_MetaModel = MetaModel.create_model_error( - self.bias_inputs, y_MAP, Name=self.name - ) - - # ----------------------------------------------------- - # ----- Loop over the perturbed observation data ------ - # ----------------------------------------------------- - # Initilize arrays - logLikelihoods = np.zeros((self.n_samples, self.n_bootstrap_itrs), - dtype=np.float16) - BME_Corr = np.zeros((self.n_bootstrap_itrs)) - log_BME = np.zeros((self.n_bootstrap_itrs)) - KLD = np.zeros((self.n_bootstrap_itrs)) - inf_entropy = np.zeros((self.n_bootstrap_itrs)) - - # Compute the prior predtions - # Evaluate the MetaModel - if self.emulator: - y_hat, y_std = MetaModel.eval_metamodel(samples=self.samples) - self.__mean_pce_prior_pred = y_hat - self._std_pce_prior_pred = y_std - - # Correct the predictions with Model discrepancy - if hasattr(self, 'error_model') and self.error_model: - y_hat_corr, y_std = self.error_MetaModel.eval_model_error( - self.bias_inputs, self.__mean_pce_prior_pred - ) - self.__mean_pce_prior_pred = y_hat_corr - self._std_pce_prior_pred = y_std - - # Surrogate model's error using RMSE of test data - if hasattr(MetaModel, 'rmse'): - surrError = MetaModel.rmse - else: - surrError = None - - else: - # Evaluate the original model - self.__model_prior_pred = self._eval_model( - samples=self.samples, key='PriorPred' - ) - surrError = None - - # Start the likelihood-BME computations for the perturbed data - for itr_idx, data in tqdm( - enumerate(self.perturbed_data), - total=self.n_bootstrap_itrs, - desc="Bootstrapping the BME calculations", ascii=True - ): - - # ---------------- Likelihood calculation ---------------- - if self.emulator: - model_evals = self.__mean_pce_prior_pred - else: - model_evals = self.__model_prior_pred - - # Leave one out - if self.bayes_loocv or self.just_analysis: - self.selected_indices = np.nonzero(data)[0] - - # Prepare data dataframe - nobs = list(self.measured_data.count().values[1:]) - numbers = list(np.cumsum(nobs)) - indices = list(zip([0] + numbers, numbers)) - data_dict = { - output_names[i]: data[j:k] for i, (j, k) in - enumerate(indices) - } - #print(output_names) - #print(indices) - #print(numbers) - #print(nobs) - #print(self.measured_data) - #for i, (j, k) in enumerate(indices): - # print(i,j,k) - #print(data) - #print(data_dict) - #stop - - # Unknown sigma2 - if opt_sigma == 'C' or hasattr(self, 'sigma2s'): - logLikelihoods[:, itr_idx] = self.normpdf( - model_evals, data_dict, total_sigma2, - sigma2=self.sigma2s, std=surrError - ) - else: - # known sigma2 - logLikelihoods[:, itr_idx] = self.normpdf( - model_evals, data_dict, total_sigma2, - std=surrError - ) - - # ---------------- BME Calculations ---------------- - # BME (log) - log_BME[itr_idx] = np.log( - np.nanmean(np.exp(logLikelihoods[:, itr_idx], - dtype=np.longdouble))#float128)) - ) - - # BME correction when using Emulator - if self.emulator: - BME_Corr[itr_idx] = self.__corr_factor_BME( - data_dict, total_sigma2, log_BME[itr_idx] - ) - - # Rejection Step - if 'kld' in list(map(str.lower, self.valid_metrics)) and\ - 'inf_entropy' in list(map(str.lower, self.valid_metrics)): - # Random numbers between 0 and 1 - unif = np.random.rand(1, self.n_samples)[0] - - # Reject the poorly performed prior - Likelihoods = np.exp(logLikelihoods[:, itr_idx], - dtype=np.float64) - accepted = (Likelihoods/np.max(Likelihoods)) >= unif - posterior = self.samples[accepted] - - # Posterior-based expectation of likelihoods - postExpLikelihoods = np.mean( - logLikelihoods[:, itr_idx][accepted] - ) - - # Calculate Kullback-Leibler Divergence - KLD[itr_idx] = postExpLikelihoods - log_BME[itr_idx] - - # Posterior-based expectation of prior densities - if 'inf_entropy' in list(map(str.lower, self.valid_metrics)): - n_thread = int(0.875 * multiprocessing.cpu_count()) - with multiprocessing.Pool(n_thread) as p: - postExpPrior = np.mean(np.concatenate( - p.map( - self.engine.ExpDesign.JDist.pdf, - np.array_split(posterior.T, n_thread, axis=1)) - ) - ) - # Information Entropy based on Entropy paper Eq. 38 - inf_entropy[itr_idx] = log_BME[itr_idx] - postExpPrior - \ - postExpLikelihoods - - # Clear memory - gc.collect(generation=2) - - # ---------- Store metrics for perturbed data set ---------------- - # Likelihoods (Size: n_samples, n_bootstrap_itr) - self.log_likes = logLikelihoods - - # BME (log), KLD, infEntropy (Size: 1,n_bootstrap_itr) - self.log_BME = log_BME - - # BMECorrFactor (log) (Size: 1,n_bootstrap_itr) - if self.emulator: - self.log_BME_corr_factor = BME_Corr - - if 'kld' in list(map(str.lower, self.valid_metrics)): - self.KLD = KLD - if 'inf_entropy' in list(map(str.lower, self.valid_metrics)): - self.inf_entropy = inf_entropy - - # BME = BME + BMECorrFactor - if self.emulator: - self.log_BME += self.log_BME_corr_factor - - # ---------------- Parameter Bayesian inference ---------------- - if self.inference_method.lower() == 'mcmc': - # Instantiate the MCMC object - MCMC_Obj = MCMC(self) - self.posterior_df = MCMC_Obj.run_sampler( - self.measured_data, total_sigma2 - ) - - elif self.name.lower() == 'valid': - # Convert to a dataframe if samples are provided after calibration. - self.posterior_df = pd.DataFrame(self.samples, columns=par_names) - - else: - # Rejection sampling - self.posterior_df = self._rejection_sampling() - - # Provide posterior's summary - print('\n') - print('-'*15 + 'Posterior summary' + '-'*15) - pd.options.display.max_columns = None - pd.options.display.max_rows = None - print(self.posterior_df.describe()) - print('-'*50) - - # -------- Model Discrepancy ----------- - if hasattr(self, 'error_model') and self.error_model \ - and self.name.lower() == 'calib': - if self.inference_method.lower() == 'mcmc': - self.error_MetaModel = MCMC_Obj.error_MetaModel - else: - # Select posterior mean as MAP - if opt_sigma == "B": - posterior_df = self.posterior_df.values - else: - posterior_df = self.posterior_df.values[:, :-Model.n_outputs] - - # Select posterior mean as Maximum a posteriori - map_theta = posterior_df.mean(axis=0).reshape((1, n_params)) - # map_theta = stats.mode(Posterior_df,axis=0)[0] - - # Evaluate the (meta-)model at the MAP - y_MAP, y_std_MAP = MetaModel.eval_metamodel(samples=map_theta) - - # Train a GPR meta-model using MAP - self.error_MetaModel = MetaModel.create_model_error( - self.bias_inputs, y_MAP, Name=self.name - ) - - # -------- Posterior perdictive ----------- - self._posterior_predictive() - - # ----------------------------------------------------- - # ------------------ Visualization -------------------- - # ----------------------------------------------------- - # Create Output directory, if it doesn't exist already. - out_dir = f'Outputs_Bayes_{Model.name}_{self.name}' - os.makedirs(out_dir, exist_ok=True) - - # -------- Posteior parameters -------- - if opt_sigma != "B": - par_names.extend( - [self.Discrepancy.InputDisc.Marginals[i].name for i - in range(len(self.Discrepancy.InputDisc.Marginals))] - ) - # Pot with corner - figPosterior = corner.corner(self.posterior_df.to_numpy(), - labels=par_names, - quantiles=[0.15, 0.5, 0.85], - show_titles=True, - title_fmt=self.corner_title_fmt, - labelpad=0.2, - use_math_text=True, - title_kwargs={"fontsize": 28}, - plot_datapoints=False, - plot_density=False, - fill_contours=True, - smooth=0.5, - smooth1d=0.5) - - # Loop over axes and set x limits - if opt_sigma == "B": - axes = np.array(figPosterior.axes).reshape( - (len(par_names), len(par_names)) - ) - for yi in range(len(par_names)): - ax = axes[yi, yi] - ax.set_xlim(self.engine.ExpDesign.bound_tuples[yi]) - for xi in range(yi): - ax = axes[yi, xi] - ax.set_xlim(self.engine.ExpDesign.bound_tuples[xi]) - plt.close() - - # Turn off gridlines - for ax in figPosterior.axes: - ax.grid(False) - - if self.emulator: - plotname = f'/Posterior_Dist_{Model.name}_emulator' - else: - plotname = f'/Posterior_Dist_{Model.name}' - - figPosterior.set_size_inches((24, 16)) - figPosterior.savefig(f'./{out_dir}{plotname}.pdf', - bbox_inches='tight') - - # -------- Plot MAP -------- - if self.plot_map_pred: - self._plot_max_a_posteriori() - - # -------- Plot log_BME dist -------- - if self.bootstrap: - - # Computing the TOM performance - self.log_BME_tom = stats.chi2.rvs( - self.n_tot_measurement, size=self.log_BME.shape[0] - ) - - fig, ax = plt.subplots() - sns.kdeplot(self.log_BME_tom, ax=ax, color="green", shade=True) - sns.kdeplot( - self.log_BME, ax=ax, color="blue", shade=True, - label='Model BME') - - ax.set_xlabel('log$_{10}$(BME)') - ax.set_ylabel('Probability density') - - legend_elements = [ - Patch(facecolor='green', edgecolor='green', label='TOM BME'), - Patch(facecolor='blue', edgecolor='blue', label='Model BME') - ] - ax.legend(handles=legend_elements) - - if self.emulator: - plotname = f'/BME_hist_{Model.name}_emulator' - else: - plotname = f'/BME_hist_{Model.name}' - - plt.savefig(f'./{out_dir}{plotname}.pdf', bbox_inches='tight') - plt.show() - plt.close() - - # -------- Posteior perdictives -------- - if self.plot_post_pred: - # Plot the posterior predictive - self._plot_post_predictive() - - return self - - # ------------------------------------------------------------------------- - def _perturb_data(self, data, output_names): - """ - Returns an array with n_bootstrap_itrs rowsof perturbed data. - The first row includes the original observation data. - If `self.bayes_loocv` is True, a 2d-array will be returned with - repeated rows and zero diagonal entries. - - Parameters - ---------- - data : pandas DataFrame - Observation data. - output_names : list - List of the output names. - - Returns - ------- - final_data : array - Perturbed data set. - - """ - noise_level = self.bootstrap_noise - obs_data = data[output_names].values - n_measurement, n_outs = obs_data.shape - self.n_tot_measurement = obs_data[~np.isnan(obs_data)].shape[0] - # Number of bootstrap iterations - if self.bayes_loocv: - self.n_bootstrap_itrs = self.n_tot_measurement - - # Pass loocv dataset - if self.bayes_loocv: - obs = obs_data.T[~np.isnan(obs_data.T)] - final_data = np.repeat(np.atleast_2d(obs), self.n_bootstrap_itrs, - axis=0) - np.fill_diagonal(final_data, 0) - return final_data - - else: - final_data = np.zeros( - (self.n_bootstrap_itrs, self.n_tot_measurement) - ) - final_data[0] = obs_data.T[~np.isnan(obs_data.T)] - for itrIdx in range(1, self.n_bootstrap_itrs): - data = np.zeros((n_measurement, n_outs)) - for idx in range(len(output_names)): - std = np.nanstd(obs_data[:, idx]) - if std == 0: - std = 0.001 - noise = std * noise_level - data[:, idx] = np.add( - obs_data[:, idx], - np.random.normal(0, 1, obs_data.shape[0]) * noise, - ) - - final_data[itrIdx] = data.T[~np.isnan(data.T)] - - return final_data - - # ------------------------------------------------------------------------- - def _logpdf(self, x, mean, cov): - """ - computes the likelihood based on a multivariate normal distribution. - - Parameters - ---------- - x : TYPE - DESCRIPTION. - mean : array_like - Observation data. - cov : 2d array - Covariance matrix of the distribution. - - Returns - ------- - log_lik : float - Log likelihood. - - """ - n = len(mean) - L = spla.cholesky(cov, lower=True) - beta = np.sum(np.log(np.diag(L))) - dev = x - mean - alpha = dev.dot(spla.cho_solve((L, True), dev)) - log_lik = -0.5 * alpha - beta - n / 2. * np.log(2 * np.pi) - return log_lik - - # ------------------------------------------------------------------------- - def _eval_model(self, samples=None, key='MAP'): - """ - Evaluates Forward Model. - - Parameters - ---------- - samples : array of shape (n_samples, n_params), optional - Parameter sets. The default is None. - key : str, optional - Key string to be passed to the run_model_parallel method. - The default is 'MAP'. - - Returns - ------- - model_outputs : dict - Model outputs. - - """ - MetaModel = self.MetaModel - Model = self.engine.Model - - if samples is None: - self.samples = self.engine.ExpDesign.generate_samples( - self.n_samples, 'random') - else: - self.samples = samples - self.n_samples = len(samples) - - model_outputs, _ = Model.run_model_parallel( - self.samples, key_str=key+self.name) - - # Clean up - # Zip the subdirectories - try: - dir_name = f'{Model.name}MAP{self.name}' - key = dir_name + '_' - Model.zip_subdirs(dir_name, key) - except: - pass - - return model_outputs - - # ------------------------------------------------------------------------- - def _kernel_rbf(self, X, hyperparameters): - """ - Isotropic squared exponential kernel. - - Higher l values lead to smoother functions and therefore to coarser - approximations of the training data. Lower l values make functions - more wiggly with wide uncertainty regions between training data points. - - sigma_f controls the marginal variance of b(x) - - Parameters - ---------- - X : ndarray of shape (n_samples_X, n_features) - - hyperparameters : Dict - Lambda characteristic length - sigma_f controls the marginal variance of b(x) - sigma_0 unresolvable error nugget term, interpreted as random - error that cannot be attributed to measurement error. - Returns - ------- - var_cov_matrix : ndarray of shape (n_samples_X,n_samples_X) - Kernel k(X, X). - - """ - from sklearn.gaussian_process.kernels import RBF - min_max_scaler = preprocessing.MinMaxScaler() - X_minmax = min_max_scaler.fit_transform(X) - - nparams = len(hyperparameters) - # characteristic length (0,1] - Lambda = hyperparameters[0] - # sigma_f controls the marginal variance of b(x) - sigma2_f = hyperparameters[1] - - # cov_matrix = sigma2_f*rbf_kernel(X_minmax, gamma = 1/Lambda**2) - - rbf = RBF(length_scale=Lambda) - cov_matrix = sigma2_f * rbf(X_minmax) - if nparams > 2: - # (unresolvable error) nugget term that is interpreted as random - # error that cannot be attributed to measurement error. - sigma2_0 = hyperparameters[2:] - for i, j in np.ndindex(cov_matrix.shape): - cov_matrix[i, j] += np.sum(sigma2_0) if i == j else 0 - - return cov_matrix - - # ------------------------------------------------------------------------- - def normpdf(self, outputs, obs_data, total_sigma2s, sigma2=None, std=None): - """ - Calculates the likelihood of simulation outputs compared with - observation data. - - Parameters - ---------- - outputs : dict - A dictionary containing the simulation outputs as array of shape - (n_samples, n_measurement) for each model output. - obs_data : dict - A dictionary/dataframe containing the observation data. - total_sigma2s : dict - A dictionary with known values of the covariance diagonal entries, - a.k.a sigma^2. - sigma2 : array, optional - An array of the sigma^2 samples, when the covariance diagonal - entries are unknown and are being jointly inferred. The default is - None. - std : dict, optional - A dictionary containing the root mean squared error as array of - shape (n_samples, n_measurement) for each model output. The default - is None. - - Returns - ------- - logLik : array of shape (n_samples) - Likelihoods. - - """ - Model = self.engine.Model - logLik = 0.0 - - # Extract the requested model outputs for likelihood calulation - if self.req_outputs is None: - req_outputs = Model.Output.names - else: - req_outputs = list(self.req_outputs) - - # Loop over the outputs - for idx, out in enumerate(req_outputs): - - # (Meta)Model Output - nsamples, nout = outputs[out].shape - - # Prepare data and remove NaN - try: - data = obs_data[out].values[~np.isnan(obs_data[out])] - except AttributeError: - data = obs_data[out][~np.isnan(obs_data[out])] - - # Prepare sigma2s - non_nan_indices = ~np.isnan(total_sigma2s[out]) - tot_sigma2s = total_sigma2s[out][non_nan_indices][:nout] - - # Add the std of the PCE is chosen as emulator. - if self.emulator: - if std is not None: - tot_sigma2s += std[out]**2 - - # Covariance Matrix - covMatrix = np.diag(tot_sigma2s) - - # Select the data points to compare - try: - indices = self.selected_indices[out] - except: - indices = list(range(nout)) - covMatrix = np.diag(covMatrix[indices, indices]) - - # If sigma2 is not given, use given total_sigma2s - if sigma2 is None: - logLik += stats.multivariate_normal.logpdf( - outputs[out][:, indices], data[indices], covMatrix) - continue - - # Loop over each run/sample and calculate logLikelihood - logliks = np.zeros(nsamples) - for s_idx in range(nsamples): - - # Simulation run - tot_outputs = outputs[out] - - # Covariance Matrix - covMatrix = np.diag(tot_sigma2s) - - if sigma2 is not None: - # Check the type error term - if hasattr(self, 'bias_inputs') and \ - not hasattr(self, 'error_model'): - # Infer a Bias model usig Gaussian Process Regression - bias_inputs = np.hstack( - (self.bias_inputs[out], - tot_outputs[s_idx].reshape(-1, 1))) - - params = sigma2[s_idx, idx*3:(idx+1)*3] - covMatrix = self._kernel_rbf(bias_inputs, params) - else: - # Infer equal sigma2s - try: - sigma_2 = sigma2[s_idx, idx] - except TypeError: - sigma_2 = 0.0 - - covMatrix += sigma_2 * np.eye(nout) - # covMatrix = np.diag(sigma2 * total_sigma2s) - - # Select the data points to compare - try: - indices = self.selected_indices[out] - except: - indices = list(range(nout)) - covMatrix = np.diag(covMatrix[indices, indices]) - - # Compute loglikelihood - logliks[s_idx] = self._logpdf( - tot_outputs[s_idx, indices], data[indices], covMatrix - ) - - logLik += logliks - return logLik - - # ------------------------------------------------------------------------- - def _corr_factor_BME_old(self, Data, total_sigma2s, posterior): - """ - Calculates the correction factor for BMEs. - """ - MetaModel = self.MetaModel - OrigModelOutput = self.engine.ExpDesign.Y - Model = self.engine.Model - - # Posterior with guassian-likelihood - postDist = stats.gaussian_kde(posterior.T) - - # Remove NaN - Data = Data[~np.isnan(Data)] - total_sigma2s = total_sigma2s[~np.isnan(total_sigma2s)] - - # Covariance Matrix - covMatrix = np.diag(total_sigma2s[:self.n_tot_measurement]) - - # Extract the requested model outputs for likelihood calulation - if self.req_outputs is None: - OutputType = Model.Output.names - else: - OutputType = list(self.req_outputs) - - # SampleSize = OrigModelOutput[OutputType[0]].shape[0] - - - # Flatten the OutputType for OrigModel - TotalOutputs = np.concatenate([OrigModelOutput[x] for x in OutputType], 1) - - NrofBayesSamples = self.n_samples - # Evaluate MetaModel on the experimental design - Samples = self.engine.ExpDesign.X - OutputRS, stdOutputRS = MetaModel.eval_metamodel(samples=Samples) - - # Reset the NrofSamples to NrofBayesSamples - self.n_samples = NrofBayesSamples - - # Flatten the OutputType for MetaModel - TotalPCEOutputs = np.concatenate([OutputRS[x] for x in OutputRS], 1) - TotalPCEstdOutputRS= np.concatenate([stdOutputRS[x] for x in stdOutputRS], 1) - - logweight = 0 - for i, sample in enumerate(Samples): - # Compute likelilhood output vs RS - covMatrix = np.diag(TotalPCEstdOutputRS[i]**2) - logLik = self._logpdf(TotalOutputs[i], TotalPCEOutputs[i], covMatrix) - # Compute posterior likelihood of the collocation points - logpostLik = np.log(postDist.pdf(sample[:, None]))[0] - if logpostLik != -np.inf: - logweight += logLik + logpostLik - return logweight - - # ------------------------------------------------------------------------- - def __corr_factor_BME(self, obs_data, total_sigma2s, logBME): - """ - Calculates the correction factor for BMEs. - """ - MetaModel = self.MetaModel - samples = self.engine.ExpDesign.X - model_outputs = self.engine.ExpDesign.Y - Model = self.engine.Model - n_samples = samples.shape[0] - - # Extract the requested model outputs for likelihood calulation - output_names = Model.Output.names - - # Evaluate MetaModel on the experimental design and ValidSet - OutputRS, stdOutputRS = MetaModel.eval_metamodel(samples=samples) - - logLik_data = np.zeros((n_samples)) - logLik_model = np.zeros((n_samples)) - # Loop over the outputs - for idx, out in enumerate(output_names): - - # (Meta)Model Output - nsamples, nout = model_outputs[out].shape - - # Prepare data and remove NaN - try: - data = obs_data[out].values[~np.isnan(obs_data[out])] - except AttributeError: - data = obs_data[out][~np.isnan(obs_data[out])] - - # Prepare sigma2s - non_nan_indices = ~np.isnan(total_sigma2s[out]) - tot_sigma2s = total_sigma2s[out][non_nan_indices][:nout] - - # Covariance Matrix - covMatrix_data = np.diag(tot_sigma2s) - - for i, sample in enumerate(samples): - - # Simulation run - y_m = model_outputs[out][i] - - # Surrogate prediction - y_m_hat = OutputRS[out][i] - - # CovMatrix with the surrogate error - covMatrix = np.eye(len(y_m)) * 1/(2*np.pi) - - # Select the data points to compare - try: - indices = self.selected_indices[out] - except: - indices = list(range(nout)) - covMatrix = np.diag(covMatrix[indices, indices]) - covMatrix_data = np.diag(covMatrix_data[indices, indices]) - - # Compute likelilhood output vs data - logLik_data[i] += self._logpdf( - y_m_hat[indices], data[indices], - covMatrix_data - ) - - # Compute likelilhood output vs surrogate - logLik_model[i] += self._logpdf( - y_m_hat[indices], y_m[indices], - covMatrix - ) - - # Weight - logLik_data -= logBME - weights = np.mean(np.exp(logLik_model+logLik_data)) - - return np.log(weights) - - # ------------------------------------------------------------------------- - def _rejection_sampling(self): - """ - Performs rejection sampling to update the prior distribution on the - input parameters. - - Returns - ------- - posterior : pandas.dataframe - Posterior samples of the input parameters. - - """ - - MetaModel = self.MetaModel - try: - sigma2_prior = self.Discrepancy.sigma2_prior - except: - sigma2_prior = None - - # Check if the discrepancy is defined as a distribution: - samples = self.samples - - if sigma2_prior is not None: - samples = np.hstack((samples, sigma2_prior)) - - # Take the first column of Likelihoods (Observation data without noise) - if self.just_analysis or self.bayes_loocv: - index = self.n_tot_measurement-1 - likelihoods = np.exp(self.log_likes[:, index], dtype=np.longdouble)#np.float128) - else: - likelihoods = np.exp(self.log_likes[:, 0], dtype=np.longdouble)#np.float128) - - n_samples = len(likelihoods) - norm_ikelihoods = likelihoods / np.max(likelihoods) - - # Normalize based on min if all Likelihoods are zero - if all(likelihoods == 0.0): - likelihoods = self.log_likes[:, 0] - norm_ikelihoods = likelihoods / np.min(likelihoods) - - # Random numbers between 0 and 1 - unif = np.random.rand(1, n_samples)[0] - - # Reject the poorly performed prior - accepted_samples = samples[norm_ikelihoods >= unif] - - # Output the Posterior - par_names = self.engine.ExpDesign.par_names - if sigma2_prior is not None: - for name in self.Discrepancy.name: - par_names.append(name) - - return pd.DataFrame(accepted_samples, columns=sigma2_prior) - - # ------------------------------------------------------------------------- - def _posterior_predictive(self): - """ - Stores the prior- and posterior predictive samples, i.e. model - evaluations using the samples, into hdf5 files. - - priorPredictive.hdf5 : Prior predictive samples. - postPredictive_wo_noise.hdf5 : Posterior predictive samples without - the additive noise. - postPredictive.hdf5 : Posterior predictive samples with the additive - noise. - - Returns - ------- - None. - - """ - - MetaModel = self.MetaModel - Model = self.engine.Model - - # Make a directory to save the prior/posterior predictive - out_dir = f'Outputs_Bayes_{Model.name}_{self.name}' - os.makedirs(out_dir, exist_ok=True) - - # Read observation data and perturb it if requested - if self.measured_data is None: - self.measured_data = Model.read_observation(case=self.name) - - if not isinstance(self.measured_data, pd.DataFrame): - self.measured_data = pd.DataFrame(self.measured_data) - - # X_values - x_values = self.engine.ExpDesign.x_values - - try: - sigma2_prior = self.Discrepancy.sigma2_prior - except: - sigma2_prior = None - - # Extract posterior samples - posterior_df = self.posterior_df - - # Take care of the sigma2 - if sigma2_prior is not None: - try: - sigma2s = posterior_df[self.Discrepancy.name].values - posterior_df = posterior_df.drop( - labels=self.Discrepancy.name, axis=1 - ) - except: - sigma2s = self.sigma2s - - # Posterior predictive - if self.emulator: - if self.inference_method == 'rejection': - prior_pred = self.__mean_pce_prior_pred - if self.name.lower() != 'calib': - post_pred = self.__mean_pce_prior_pred - post_pred_std = self._std_pce_prior_pred - else: - post_pred, post_pred_std = MetaModel.eval_metamodel( - samples=posterior_df.values - ) - - else: - if self.inference_method == 'rejection': - prior_pred = self.__model_prior_pred - if self.name.lower() != 'calib': - post_pred = self.__mean_pce_prior_pred, - post_pred_std = self._std_pce_prior_pred - else: - post_pred = self._eval_model( - samples=posterior_df.values, key='PostPred' - ) - # Correct the predictions with Model discrepancy - if hasattr(self, 'error_model') and self.error_model: - y_hat, y_std = self.error_MetaModel.eval_model_error( - self.bias_inputs, post_pred - ) - post_pred, post_pred_std = y_hat, y_std - - # Add discrepancy from likelihood Sample to the current posterior runs - total_sigma2 = self.Discrepancy.total_sigma2 - post_pred_withnoise = copy.deepcopy(post_pred) - for varIdx, var in enumerate(Model.Output.names): - for i in range(len(post_pred[var])): - pred = post_pred[var][i] - - # Known sigma2s - clean_sigma2 = total_sigma2[var][~np.isnan(total_sigma2[var])] - tot_sigma2 = clean_sigma2[:len(pred)] - cov = np.diag(tot_sigma2) - - # Check the type error term - if sigma2_prior is not None: - # Inferred sigma2s - if hasattr(self, 'bias_inputs') and \ - not hasattr(self, 'error_model'): - # TODO: Infer a Bias model usig GPR - bias_inputs = np.hstack(( - self.bias_inputs[var], pred.reshape(-1, 1))) - params = sigma2s[i, varIdx*3:(varIdx+1)*3] - cov = self._kernel_rbf(bias_inputs, params) - else: - # Infer equal sigma2s - try: - sigma2 = sigma2s[i, varIdx] - except TypeError: - sigma2 = 0.0 - - # Convert biasSigma2s to a covMatrix - cov += sigma2 * np.eye(len(pred)) - - if self.emulator: - if hasattr(MetaModel, 'rmse') and \ - MetaModel.rmse is not None: - stdPCE = MetaModel.rmse[var] - else: - stdPCE = post_pred_std[var][i] - # Expected value of variance (Assump: i.i.d stds) - cov += np.diag(stdPCE**2) - - # Sample a multivariate normal distribution with mean of - # prediction and variance of cov - post_pred_withnoise[var][i] = np.random.multivariate_normal( - pred, cov, 1 - ) - - # ----- Prior Predictive ----- - if self.inference_method.lower() == 'rejection': - # Create hdf5 metadata - hdf5file = f'{out_dir}/priorPredictive.hdf5' - hdf5_exist = os.path.exists(hdf5file) - if hdf5_exist: - os.remove(hdf5file) - file = h5py.File(hdf5file, 'a') - - # Store x_values - if type(x_values) is dict: - grp_x_values = file.create_group("x_values/") - for varIdx, var in enumerate(Model.Output.names): - grp_x_values.create_dataset(var, data=x_values[var]) - else: - file.create_dataset("x_values", data=x_values) - - # Store posterior predictive - grpY = file.create_group("EDY/") - for varIdx, var in enumerate(Model.Output.names): - grpY.create_dataset(var, data=prior_pred[var]) - - # ----- Posterior Predictive only model evaluations ----- - # Create hdf5 metadata - hdf5file = out_dir+'/postPredictive_wo_noise.hdf5' - hdf5_exist = os.path.exists(hdf5file) - if hdf5_exist: - os.remove(hdf5file) - file = h5py.File(hdf5file, 'a') - - # Store x_values - if type(x_values) is dict: - grp_x_values = file.create_group("x_values/") - for varIdx, var in enumerate(Model.Output.names): - grp_x_values.create_dataset(var, data=x_values[var]) - else: - file.create_dataset("x_values", data=x_values) - - # Store posterior predictive - grpY = file.create_group("EDY/") - for varIdx, var in enumerate(Model.Output.names): - grpY.create_dataset(var, data=post_pred[var]) - - # ----- Posterior Predictive with noise ----- - # Create hdf5 metadata - hdf5file = out_dir+'/postPredictive.hdf5' - hdf5_exist = os.path.exists(hdf5file) - if hdf5_exist: - os.remove(hdf5file) - file = h5py.File(hdf5file, 'a') - - # Store x_values - if type(x_values) is dict: - grp_x_values = file.create_group("x_values/") - for varIdx, var in enumerate(Model.Output.names): - grp_x_values.create_dataset(var, data=x_values[var]) - else: - file.create_dataset("x_values", data=x_values) - - # Store posterior predictive - grpY = file.create_group("EDY/") - for varIdx, var in enumerate(Model.Output.names): - grpY.create_dataset(var, data=post_pred_withnoise[var]) - - return - - # ------------------------------------------------------------------------- - def _plot_max_a_posteriori(self): - """ - Plots the response of the model output against that of the metamodel at - the maximum a posteriori sample (mean or mode of posterior.) - - Returns - ------- - None. - - """ - - MetaModel = self.MetaModel - Model = self.engine.Model - out_dir = f'Outputs_Bayes_{Model.name}_{self.name}' - opt_sigma = self.Discrepancy.opt_sigma - - # -------- Find MAP and run MetaModel and origModel -------- - # Compute the MAP - if self.max_a_posteriori.lower() == 'mean': - if opt_sigma == "B": - Posterior_df = self.posterior_df.values - else: - Posterior_df = self.posterior_df.values[:, :-Model.n_outputs] - map_theta = Posterior_df.mean(axis=0).reshape( - (1, MetaModel.n_params)) - else: - map_theta = stats.mode(Posterior_df.values, axis=0)[0] - # Prin report - print("\nPoint estimator:\n", map_theta[0]) - - # Run the models for MAP - # MetaModel - map_metamodel_mean, map_metamodel_std = MetaModel.eval_metamodel( - samples=map_theta) - self.map_metamodel_mean = map_metamodel_mean - self.map_metamodel_std = map_metamodel_std - - # origModel - map_orig_model = self._eval_model(samples=map_theta) - self.map_orig_model = map_orig_model - - # Extract slicing index - x_values = map_orig_model['x_values'] - - # List of markers and colors - Color = ['k', 'b', 'g', 'r'] - Marker = 'x' - - # Create a PdfPages object - pdf = PdfPages(f'./{out_dir}MAP_PCE_vs_Model_{self.name}.pdf') - fig = plt.figure() - for i, key in enumerate(Model.Output.names): - - y_val = map_orig_model[key] - y_pce_val = map_metamodel_mean[key] - y_pce_val_std = map_metamodel_std[key] - - plt.plot(x_values, y_val, color=Color[i], marker=Marker, - lw=2.0, label='$Y_{MAP}^{M}$') - - plt.plot( - x_values, y_pce_val[i], color=Color[i], lw=2.0, - marker=Marker, linestyle='--', label='$Y_{MAP}^{PCE}$' - ) - # plot the confidence interval - plt.fill_between( - x_values, y_pce_val[i] - 1.96*y_pce_val_std[i], - y_pce_val[i] + 1.96*y_pce_val_std[i], - color=Color[i], alpha=0.15 - ) - - # Calculate the adjusted R_squared and RMSE - R2 = r2_score(y_pce_val.reshape(-1, 1), y_val.reshape(-1, 1)) - rmse = np.sqrt(mean_squared_error(y_pce_val, y_val)) - - plt.ylabel(key) - plt.xlabel("Time [s]") - plt.title(f'Model vs MetaModel {key}') - - ax = fig.axes[0] - leg = ax.legend(loc='best', frameon=True) - fig.canvas.draw() - p = leg.get_window_extent().inverse_transformed(ax.transAxes) - ax.text( - p.p0[1]-0.05, p.p1[1]-0.25, - f'RMSE = {rmse:.3f}\n$R^2$ = {R2:.3f}', - transform=ax.transAxes, color='black', - bbox=dict(facecolor='none', edgecolor='black', - boxstyle='round,pad=1')) - - plt.show() - - # save the current figure - pdf.savefig(fig, bbox_inches='tight') - - # Destroy the current plot - plt.clf() - - pdf.close() - - # ------------------------------------------------------------------------- - def _plot_post_predictive(self): - """ - Plots the posterior predictives against the observation data. - - Returns - ------- - None. - - """ - - Model = self.engine.Model - out_dir = f'Outputs_Bayes_{Model.name}_{self.name}' - # Plot the posterior predictive - for out_idx, out_name in enumerate(Model.Output.names): - fig, ax = plt.subplots() - with sns.axes_style("ticks"): - x_key = list(self.measured_data)[0] - - # --- Read prior and posterior predictive --- - if self.inference_method == 'rejection' and \ - self.name.lower() != 'valid': - # --- Prior --- - # Load posterior predictive - f = h5py.File( - f'{out_dir}/priorPredictive.hdf5', 'r+') - - try: - x_coords = np.array(f[f"x_values/{out_name}"]) - except: - x_coords = np.array(f["x_values"]) - - X_values = np.repeat(x_coords, 10000) - - prior_pred_df = {} - prior_pred_df[x_key] = X_values - prior_pred_df[out_name] = np.array( - f[f"EDY/{out_name}"])[:10000].flatten('F') - prior_pred_df = pd.DataFrame(prior_pred_df) - - tags_post = ['prior'] * len(prior_pred_df) - prior_pred_df.insert( - len(prior_pred_df.columns), "Tags", tags_post, - True) - f.close() - - # --- Posterior --- - f = h5py.File(f"{out_dir}/postPredictive.hdf5", 'r+') - - X_values = np.repeat( - x_coords, np.array(f[f"EDY/{out_name}"]).shape[0]) - - post_pred_df = {} - post_pred_df[x_key] = X_values - post_pred_df[out_name] = np.array( - f[f"EDY/{out_name}"]).flatten('F') - - post_pred_df = pd.DataFrame(post_pred_df) - - tags_post = ['posterior'] * len(post_pred_df) - post_pred_df.insert( - len(post_pred_df.columns), "Tags", tags_post, True) - f.close() - # Concatenate two dataframes based on x_values - frames = [prior_pred_df, post_pred_df] - all_pred_df = pd.concat(frames) - - # --- Plot posterior predictive --- - sns.violinplot( - x_key, y=out_name, data=all_pred_df, hue="Tags", - legend=False, ax=ax, split=True, inner=None, - color=".8") - - # --- Plot Data --- - # Find the x,y coordinates for each point - x_coords = np.arange(x_coords.shape[0]) - first_header = list(self.measured_data)[0] - obs_data = self.measured_data.round({first_header: 6}) - sns.pointplot( - x=first_header, y=out_name, color='g', markers='x', - linestyles='', capsize=16, data=obs_data, ax=ax) - - ax.errorbar( - x_coords, obs_data[out_name].values, - yerr=1.96*self.measurement_error[out_name], - ecolor='g', fmt=' ', zorder=-1) - - # Add labels to the legend - handles, labels = ax.get_legend_handles_labels() - labels.append('Data') - - data_marker = mlines.Line2D( - [], [], color='lime', marker='+', linestyle='None', - markersize=10) - handles.append(data_marker) - - # Add legend - ax.legend(handles=handles, labels=labels, loc='best', - fontsize='large', frameon=True) - - else: - # Load posterior predictive - f = h5py.File(f"{out_dir}/postPredictive.hdf5", 'r+') - - try: - x_coords = np.array(f[f"x_values/{out_name}"]) - except: - x_coords = np.array(f["x_values"]) - - mu = np.mean(np.array(f[f"EDY/{out_name}"]), axis=0) - std = np.std(np.array(f[f"EDY/{out_name}"]), axis=0) - - # --- Plot posterior predictive --- - plt.plot( - x_coords, mu, marker='o', color='b', - label='Mean Post. Predictive') - plt.fill_between( - x_coords, mu-1.96*std, mu+1.96*std, color='b', - alpha=0.15) - - # --- Plot Data --- - ax.plot( - x_coords, self.measured_data[out_name].values, - 'ko', label='data', markeredgecolor='w') - - # --- Plot ExpDesign --- - orig_ED_Y = self.engine.ExpDesign.Y[out_name] - for output in orig_ED_Y: - plt.plot( - x_coords, output, color='grey', alpha=0.15 - ) - - # Add labels for axes - plt.xlabel('Time [s]') - plt.ylabel(out_name) - - # Add labels to the legend - handles, labels = ax.get_legend_handles_labels() - - patch = Patch(color='b', alpha=0.15) - handles.insert(1, patch) - labels.insert(1, '95 $\\%$ CI') - - # Add legend - ax.legend(handles=handles, labels=labels, loc='best', - frameon=True) - - # Save figure in pdf format - if self.emulator: - plotname = f'/Post_Prior_Perd_{Model.name}_emulator' - else: - plotname = f'/Post_Prior_Perd_{Model.name}' - - fig.savefig(f'./{out_dir}{plotname}_{out_name}.pdf', - bbox_inches='tight') diff --git a/examples/model-comparison/bayesvalidrox/bayes_inference/bayes_model_comparison.py b/examples/model-comparison/bayesvalidrox/bayes_inference/bayes_model_comparison.py deleted file mode 100644 index 828613556..000000000 --- a/examples/model-comparison/bayesvalidrox/bayes_inference/bayes_model_comparison.py +++ /dev/null @@ -1,654 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -import numpy as np -import os -from scipy import stats -import seaborn as sns -import matplotlib.patches as patches -import matplotlib.colors as mcolors -import matplotlib.pylab as plt -from .bayes_inference import BayesInference - -# Load the mplstyle -plt.style.use(os.path.join(os.path.split(__file__)[0], - '../', 'bayesvalidrox.mplstyle')) - - -class BayesModelComparison: - """ - A class to perform Bayesian Analysis. - - - Attributes - ---------- - justifiability : bool, optional - Whether to perform the justifiability analysis. The default is - `True`. - perturbed_data : array of shape (n_bootstrap_itrs, n_obs), optional - User defined perturbed data. The default is `None`. - n_bootstarp : int - Number of bootstrap iteration. The default is `1000`. - data_noise_level : float - A noise level to perturb the data set. The default is `0.01`. - just_n_meas : int - Number of measurements considered for visualization of the - justifiability results. - - """ - - def __init__(self, justifiability=True, perturbed_data=None, - n_bootstarp=1000, data_noise_level=0.01, just_n_meas=2): - - self.justifiability = justifiability - self.perturbed_data = perturbed_data - self.n_bootstarp = n_bootstarp - self.data_noise_level = data_noise_level - self.just_n_meas = just_n_meas - - # -------------------------------------------------------------------------- - def create_model_comparison(self, model_dict, opts_dict): - """ - Starts the two-stage model comparison. - Stage I: Compare models using Bayes factors. - Stage II: Compare models via justifiability analysis. - - Parameters - ---------- - model_dict : dict - A dictionary including the metamodels. - opts_dict : dict - A dictionary given the `BayesInference` options. - - Example: - - >>> opts_bootstrap = { - "bootstrap": True, - "n_samples": 10000, - "Discrepancy": DiscrepancyOpts, - "emulator": True, - "plot_post_pred": True - } - - Returns - ------- - output : dict - A dictionary containing the objects and the model weights for the - comparison using Bayes factors and justifiability analysis. - - """ - - # Bayes factor - bayes_dict_bf, model_weights_dict_bf = self.compare_models( - model_dict, opts_dict - ) - - output = { - 'Bayes objects BF': bayes_dict_bf, - 'Model weights BF': model_weights_dict_bf - } - - # Justifiability analysis - if self.justifiability: - bayes_dict_ja, model_weights_dict_ja = self.compare_models( - model_dict, opts_dict, justifiability=True - ) - - output['Bayes objects JA'] = bayes_dict_ja - output['Model weights JA'] = model_weights_dict_ja - - return output - - # -------------------------------------------------------------------------- - def compare_models(self, model_dict, opts_dict, justifiability=False): - """ - Passes the options to instantiates the BayesInference class for each - model and passes the options from `opts_dict`. Then, it starts the - computations. - It also creates a folder and saves the diagrams, e.g., Bayes factor - plot, confusion matrix, etc. - - Parameters - ---------- - model_dict : dict - A dictionary including the metamodels. - opts_dict : dict - A dictionary given the `BayesInference` options. - justifiability : bool, optional - Whether to perform the justifiability analysis. The default is - `False`. - - Returns - ------- - bayes_dict : dict - A dictionary with `BayesInference` objects. - model_weights_dict : dict - A dictionary containing the model weights. - - """ - - if not isinstance(model_dict, dict): - raise Exception("To run model comparsion, you need to pass a " - "dictionary of models.") - - # Extract model names - self.model_names = [*model_dict] - - # Compute total number of the measurement points - Engine = list(model_dict.items())[0][1] - Engine.Model.read_observation() - self.n_meas = Engine.Model.n_obs - - # ----- Generate data ----- - # Find n_bootstrap - if self.perturbed_data is None: - n_bootstarp = self.n_bootstarp - else: - n_bootstarp = self.perturbed_data.shape[0] - - # Create dataset - justData = self.generate_dataset( - model_dict, justifiability, n_bootstarp=n_bootstarp) - - # Run create Interface for each model - bayes_dict = {} - for model in model_dict.keys(): - print("-"*20) - print("Bayesian inference of {}.\n".format(model)) - - BayesOpts = BayesInference(model_dict[model]) - - # Set BayesInference options - for key, value in opts_dict.items(): - if key in BayesOpts.__dict__.keys(): - if key == "Discrepancy" and isinstance(value, dict): - setattr(BayesOpts, key, value[model]) - else: - setattr(BayesOpts, key, value) - - # Pass justifiability data as perturbed data - BayesOpts.perturbed_data = justData - BayesOpts.just_analysis = justifiability - - bayes_dict[model] = BayesOpts.create_inference() - print("-"*20) - - # Compute model weights - BME_Dict = dict() - for modelName, bayesObj in bayes_dict.items(): - BME_Dict[modelName] = np.exp(bayesObj.log_BME, dtype=np.longdouble)#float128) - - # BME correction in BayesInference class - model_weights = self.cal_model_weight( - BME_Dict, justifiability, n_bootstarp=n_bootstarp) - - # Plot model weights - if justifiability: - model_names = self.model_names - model_names.insert(0, 'Observation') - - # Split the model weights and save in a dict - list_ModelWeights = np.split( - model_weights, model_weights.shape[1]/self.n_meas, axis=1) - model_weights_dict = {key: weights for key, weights in - zip(model_names, list_ModelWeights)} - - #self.plot_just_analysis(model_weights_dict) - else: - # Create box plot for model weights - self.plot_model_weights(model_weights, 'model_weights') - - # Create kde plot for bayes factors - self.plot_bayes_factor(BME_Dict, 'kde_plot') - - # Store model weights in a dict - model_weights_dict = {key: weights for key, weights in - zip(self.model_names, model_weights)} - - return bayes_dict, model_weights_dict - - # ------------------------------------------------------------------------- - def generate_dataset(self, model_dict, justifiability=False, - n_bootstarp=1): - """ - Generates the perturbed data set for the Bayes factor calculations and - the data set for the justifiability analysis. - - Parameters - ---------- - model_dict : dict - A dictionary including the metamodels. - bool, optional - Whether to perform the justifiability analysis. The default is - `False`. - n_bootstarp : int, optional - Number of bootstrap iterations. The default is `1`. - - Returns - ------- - all_just_data: array - Created data set. - - """ - # Compute some variables - all_just_data = [] - Engine = list(model_dict.items())[0][1] - out_names = Engine.Model.Output.names - - # Perturb observations for Bayes Factor - if self.perturbed_data is None: - self.perturbed_data = self.__perturb_data( - Engine.Model.observations, out_names, n_bootstarp, - noise_level=self.data_noise_level) - - # Only for Bayes Factor - if not justifiability: - return self.perturbed_data - - # Evaluate metamodel - runs = {} - for key, metaModel in model_dict.items(): - y_hat, _ = metaModel.eval_metamodel(nsamples=n_bootstarp) - runs[key] = y_hat - - # Generate data - for i in range(n_bootstarp): - y_data = self.perturbed_data[i].reshape(1, -1) - justData = np.tril(np.repeat(y_data, y_data.shape[1], axis=0)) - # Use surrogate runs for data-generating process - for key, metaModel in model_dict.items(): - model_data = np.array( - [runs[key][out][i] for out in out_names]).reshape(y_data.shape) - justData = np.vstack(( - justData, - np.tril(np.repeat(model_data, model_data.shape[1], axis=0)) - )) - # Save in a list - all_just_data.append(justData) - - # Squeeze the array - all_just_data = np.array(all_just_data).transpose(1, 0, 2).reshape( - -1, np.array(all_just_data).shape[2] - ) - - return all_just_data - - # ------------------------------------------------------------------------- - def __perturb_data(self, data, output_names, n_bootstrap, noise_level): - """ - Returns an array with n_bootstrap_itrs rowsof perturbed data. - The first row includes the original observation data. - If `self.bayes_loocv` is True, a 2d-array will be returned with - repeated rows and zero diagonal entries. - - Parameters - ---------- - data : pandas DataFrame - Observation data. - output_names : list - List of the output names. - - Returns - ------- - final_data : array - Perturbed data set. - - """ - obs_data = data[output_names].values - n_measurement, n_outs = obs_data.shape - n_tot_measurement = obs_data[~np.isnan(obs_data)].shape[0] - final_data = np.zeros( - (n_bootstrap, n_tot_measurement) - ) - final_data[0] = obs_data.T[~np.isnan(obs_data.T)] - for itrIdx in range(1, n_bootstrap): - data = np.zeros((n_measurement, n_outs)) - for idx in range(len(output_names)): - std = np.nanstd(obs_data[:, idx]) - if std == 0: - std = 0.001 - noise = std * noise_level - data[:, idx] = np.add( - obs_data[:, idx], - np.random.normal(0, 1, obs_data.shape[0]) * noise, - ) - - final_data[itrIdx] = data.T[~np.isnan(data.T)] - - return final_data - - # ------------------------------------------------------------------------- - def cal_model_weight(self, BME_Dict, justifiability=False, n_bootstarp=1): - """ - Normalize the BME (Asumption: Model Prior weights are equal for models) - - Parameters - ---------- - BME_Dict : dict - A dictionary containing the BME values. - - Returns - ------- - model_weights : array - Model weights. - - """ - # Stack the BME values for all models - all_BME = np.vstack(list(BME_Dict.values())) - - if justifiability: - # Compute expected log_BME for justifiabiliy analysis - all_BME = all_BME.reshape( - all_BME.shape[0], -1, n_bootstarp).mean(axis=2) - - # Model weights - model_weights = np.divide(all_BME, np.nansum(all_BME, axis=0)) - - return model_weights - - # ------------------------------------------------------------------------- - def plot_just_analysis(self, model_weights_dict): - """ - Visualizes the confusion matrix and the model wights for the - justifiability analysis. - - Parameters - ---------- - model_weights_dict : dict - Model weights. - - Returns - ------- - None. - - """ - - directory = 'Outputs_Comparison/' - os.makedirs(directory, exist_ok=True) - Color = [*mcolors.TABLEAU_COLORS] - names = [*model_weights_dict] - - model_names = [model.replace('_', '$-$') for model in self.model_names] - for name in names: - fig, ax = plt.subplots() - for i, model in enumerate(model_names[1:]): - plt.plot(list(range(1, self.n_meas+1)), - model_weights_dict[name][i], - color=Color[i], marker='o', - ms=10, linewidth=2, label=model - ) - - plt.title(f"Data generated by: {name.replace('_', '$-$')}") - plt.ylabel("Weights") - plt.xlabel("No. of measurement points") - ax.set_xticks(list(range(1, self.n_meas+1))) - plt.legend(loc="best") - fig.savefig( - f'{directory}modelWeights_{name}.svg', bbox_inches='tight' - ) - plt.close() - - # Confusion matrix for some measurement points - epsilon = 1 if self.just_n_meas != 1 else 0 - for index in range(0, self.n_meas+epsilon, self.just_n_meas): - weights = np.array( - [model_weights_dict[key][:, index] for key in model_weights_dict] - ) - g = sns.heatmap( - weights.T, annot=True, cmap='Blues', xticklabels=model_names, - yticklabels=model_names[1:], annot_kws={"size": 24} - ) - - # x axis on top - g.xaxis.tick_top() - g.xaxis.set_label_position('top') - g.set_xlabel(r"\textbf{Data generated by:}", labelpad=15) - g.set_ylabel(r"\textbf{Model weight for:}", labelpad=15) - g.figure.savefig( - f"{directory}confusionMatrix_ND_{index+1}.pdf", - bbox_inches='tight' - ) - plt.close() - - # ------------------------------------------------------------------------- - def plot_model_weights(self, model_weights, plot_name): - """ - Visualizes the model weights resulting from BMS via the observation - data. - - Parameters - ---------- - model_weights : array - Model weights. - plot_name : str - Plot name. - - Returns - ------- - None. - - """ - font_size = 40 - # mkdir for plots - directory = 'Outputs_Comparison/' - os.makedirs(directory, exist_ok=True) - - # Create figure - fig, ax = plt.subplots() - - # Filter data using np.isnan - mask = ~np.isnan(model_weights.T) - filtered_data = [d[m] for d, m in zip(model_weights, mask.T)] - - # Create the boxplot - bp = ax.boxplot(filtered_data, patch_artist=True, showfliers=False) - - # change outline color, fill color and linewidth of the boxes - for box in bp['boxes']: - # change outline color - box.set(color='#7570b3', linewidth=4) - # change fill color - box.set(facecolor='#1b9e77') - - # change color and linewidth of the whiskers - for whisker in bp['whiskers']: - whisker.set(color='#7570b3', linewidth=2) - - # change color and linewidth of the caps - for cap in bp['caps']: - cap.set(color='#7570b3', linewidth=2) - - # change color and linewidth of the medians - for median in bp['medians']: - median.set(color='#b2df8a', linewidth=2) - - # change the style of fliers and their fill - # for flier in bp['fliers']: - # flier.set(marker='o', color='#e7298a', alpha=0.75) - - # Custom x-axis labels - model_names = [model.replace('_', '$-$') for model in self.model_names] - ax.set_xticklabels(model_names) - - ax.set_ylabel('Weight', fontsize=font_size) - - # Title - plt.title('Posterior Model Weights') - - # Set y lim - ax.set_ylim((-0.05, 1.05)) - - # Set size of the ticks - for t in ax.get_xticklabels(): - t.set_fontsize(font_size) - for t in ax.get_yticklabels(): - t.set_fontsize(font_size) - - # Save the figure - fig.savefig( - f'./{directory}{plot_name}.pdf', bbox_inches='tight' - ) - - plt.close() - - # ------------------------------------------------------------------------- - def plot_bayes_factor(self, BME_Dict, plot_name=''): - """ - Plots the Bayes factor distibutions in a :math:`N_m \\times N_m` - matrix, where :math:`N_m` is the number of the models. - - Parameters - ---------- - BME_Dict : dict - A dictionary containing the BME values of the models. - plot_name : str, optional - Plot name. The default is ''. - - Returns - ------- - None. - - """ - - font_size = 40 - - # mkdir for plots - directory = 'Outputs_Comparison/' - os.makedirs(directory, exist_ok=True) - - Colors = ["blue", "green", "gray", "brown"] - - model_names = list(BME_Dict.keys()) - nModels = len(model_names) - - # Plots - fig, axes = plt.subplots( - nrows=nModels, ncols=nModels, sharex=True, sharey=True - ) - - for i, key_i in enumerate(model_names): - - for j, key_j in enumerate(model_names): - ax = axes[i, j] - # Set size of the ticks - for t in ax.get_xticklabels(): - t.set_fontsize(font_size) - for t in ax.get_yticklabels(): - t.set_fontsize(font_size) - - if j != i: - - # Null hypothesis: key_j is the better model - BayesFactor = np.log10( - np.divide(BME_Dict[key_i], BME_Dict[key_j]) - ) - - # sns.kdeplot(BayesFactor, ax=ax, color=Colors[i], shade=True) - # sns.histplot(BayesFactor, ax=ax, stat="probability", - # kde=True, element='step', - # color=Colors[j]) - - # taken from seaborn's source code (utils.py and - # distributions.py) - def seaborn_kde_support(data, bw, gridsize, cut, clip): - if clip is None: - clip = (-np.inf, np.inf) - support_min = max(data.min() - bw * cut, clip[0]) - support_max = min(data.max() + bw * cut, clip[1]) - return np.linspace(support_min, support_max, gridsize) - - kde_estim = stats.gaussian_kde( - BayesFactor, bw_method='scott' - ) - - # manual linearization of data - # linearized = np.linspace( - # quotient.min(), quotient.max(), num=500) - - # or better: mimic seaborn's internal stuff - bw = kde_estim.scotts_factor() * np.std(BayesFactor) - linearized = seaborn_kde_support( - BayesFactor, bw, 100, 3, None) - - # computes values of the estimated function on the - # estimated linearized inputs - Z = kde_estim.evaluate(linearized) - - # https://stackoverflow.com/questions/29661574/normalize- - # numpy-array-columns-in-python - def normalize(x): - return (x - x.min(0)) / x.ptp(0) - - # normalize so it is between 0;1 - Z2 = normalize(Z) - ax.plot(linearized, Z2, "-", color=Colors[i], linewidth=4) - ax.fill_between( - linearized, 0, Z2, color=Colors[i], alpha=0.25 - ) - - # Draw BF significant levels according to Jeffreys 1961 - # Strong evidence for both models - ax.axvline( - x=np.log10(3), ymin=0, linewidth=4, color='dimgrey' - ) - # Strong evidence for one model - ax.axvline( - x=np.log10(10), ymin=0, linewidth=4, color='orange' - ) - # Decisive evidence for one model - ax.axvline( - x=np.log10(100), ymin=0, linewidth=4, color='r' - ) - - # legend - BF_label = key_i.replace('_', '$-$') + \ - '/' + key_j.replace('_', '$-$') - legend_elements = [ - patches.Patch(facecolor=Colors[i], edgecolor=Colors[i], - label=f'BF({BF_label})') - ] - ax.legend( - loc='upper left', handles=legend_elements, - fontsize=font_size-(nModels+1)*5 - ) - - elif j == i: - # build a rectangle in axes coords - left, width = 0, 1 - bottom, height = 0, 1 - - # axes coordinates are 0,0 is bottom left and 1,1 is upper - # right - p = patches.Rectangle( - (left, bottom), width, height, color='white', - fill=True, transform=ax.transAxes, clip_on=False - ) - ax.grid(False) - ax.add_patch(p) - # ax.text(0.5*(left+right), 0.5*(bottom+top), key_i, - fsize = font_size+20 if nModels < 4 else font_size - ax.text(0.5, 0.5, key_i.replace('_', '$-$'), - horizontalalignment='center', - verticalalignment='center', - fontsize=fsize, color=Colors[i], - transform=ax.transAxes) - - # Defining custom 'ylim' values. - custom_ylim = (0, 1.05) - - # Setting the values for all axes. - plt.setp(axes, ylim=custom_ylim) - - # set labels - for i in range(nModels): - axes[-1, i].set_xlabel('log$_{10}$(BF)', fontsize=font_size) - axes[i, 0].set_ylabel('Probability', fontsize=font_size) - - # Adjust subplots - plt.subplots_adjust(wspace=0.2, hspace=0.1) - - plt.savefig( - f'./{directory}Bayes_Factor{plot_name}.pdf', bbox_inches='tight' - ) - - plt.close() diff --git a/examples/model-comparison/bayesvalidrox/bayes_inference/discrepancy.py b/examples/model-comparison/bayesvalidrox/bayes_inference/discrepancy.py deleted file mode 100644 index fff32a250..000000000 --- a/examples/model-comparison/bayesvalidrox/bayes_inference/discrepancy.py +++ /dev/null @@ -1,106 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -import scipy.stats as stats -from bayesvalidrox.surrogate_models.exp_designs import ExpDesigns - - -class Discrepancy: - """ - Discrepancy class for Bayesian inference method. - We define the reference or reality to be equal to what we can model and a - descripancy term \\( \\epsilon \\). We consider the followin format: - - $$\\textbf{y}_{\\text{reality}} = \\mathcal{M}(\\theta) + \\epsilon,$$ - - where \\( \\epsilon \\in R^{N_{out}} \\) represents the the effects of - measurement error and model inaccuracy. For simplicity, it can be defined - as an additive Gaussian disrepancy with zeromean and given covariance - matrix \\( \\Sigma \\): - - $$\\epsilon \\sim \\mathcal{N}(\\epsilon|0, \\Sigma). $$ - - In the context of model inversion or calibration, an observation point - \\( \\textbf{y}_i \\in \\mathcal{y} \\) is a realization of a Gaussian - distribution with mean value of \\(\\mathcal{M}(\\theta) \\) and covariance - matrix of \\( \\Sigma \\). - - $$ p(\\textbf{y}|\\theta) = \\mathcal{N}(\\textbf{y}|\\mathcal{M} - (\\theta))$$ - - The following options are available: - - * Option A: With known redidual covariance matrix \\(\\Sigma\\) for - independent measurements. - - * Option B: With unknown redidual covariance matrix \\(\\Sigma\\), - paramethrized as \\(\\Sigma(\\theta_{\\epsilon})=\\sigma^2 \\textbf{I}_ - {N_{out}}\\) with unknown residual variances \\(\\sigma^2\\). - This term will be jointly infer with the uncertain input parameters. For - the inversion, you need to define a prior marginal via `Input` class. Note - that \\(\\sigma^2\\) is only a single scalar multiplier for the diagonal - entries of the covariance matrix \\(\\Sigma\\). - - Attributes - ---------- - InputDisc : obj - Input object. When the \\(\\sigma^2\\) is expected to be inferred - jointly with the parameters (`Option B`).If multiple output groups are - defined by `Model.Output.names`, each model output needs to have. - a prior marginal using the `Input` class. The default is `''`. - disc_type : str - Type of the noise definition. `'Gaussian'` is only supported so far. - parameters : dict or pandas.DataFrame - Known residual variance \\(\\sigma^2\\), i.e. diagonal entry of the - covariance matrix of the multivariate normal likelihood in case of - `Option A`. - - """ - - def __init__(self, InputDisc='', disc_type='Gaussian', parameters=None): - self.InputDisc = InputDisc - self.disc_type = disc_type - self.parameters = parameters - - # ------------------------------------------------------------------------- - def get_sample(self, n_samples): - """ - Generate samples for the \\(\\sigma^2\\), i.e. the diagonal entries of - the variance-covariance matrix in the multivariate normal distribution. - - Parameters - ---------- - n_samples : int - Number of samples (parameter sets). - - Returns - ------- - sigma2_prior: array of shape (n_samples, n_params) - \\(\\sigma^2\\) samples. - - """ - self.n_samples = n_samples # TODO: not used again in here - needed from the outside? - - if self.InputDisc == '': - raise AttributeError('Cannot create new samples, please provide input distributions') - - # Create and store BoundTuples - self.ExpDesign = ExpDesigns(self.InputDisc) - self.ExpDesign.sampling_method = 'random' - self.ExpDesign.generate_ED( - n_samples, max_pce_deg=1 - ) - # TODO: need to recheck the following line - # This used to simply be the return from the call above - self.sigma2_prior = self.ExpDesign.X - - # Naive approach: Fit a gaussian kernel to the provided data - self.ExpDesign.JDist = stats.gaussian_kde(self.ExpDesign.raw_data) - - # Save the names of sigmas - if len(self.InputDisc.Marginals) != 0: - self.name = [] - for Marginalidx in range(len(self.InputDisc.Marginals)): - self.name.append(self.InputDisc.Marginals[Marginalidx].name) - - return self.sigma2_prior diff --git a/examples/model-comparison/bayesvalidrox/bayes_inference/mcmc.py b/examples/model-comparison/bayesvalidrox/bayes_inference/mcmc.py deleted file mode 100644 index fe22a152f..000000000 --- a/examples/model-comparison/bayesvalidrox/bayes_inference/mcmc.py +++ /dev/null @@ -1,909 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -import os -import numpy as np -import emcee -import pandas as pd -import matplotlib.pyplot as plt -from matplotlib.backends.backend_pdf import PdfPages -import multiprocessing -import scipy.stats as st -from scipy.linalg import cholesky as chol -import warnings -import shutil -os.environ["OMP_NUM_THREADS"] = "1" - - -class MCMC: - """ - A class for bayesian inference via a Markov-Chain Monte-Carlo (MCMC) - Sampler to approximate the posterior distribution of the Bayes theorem: - $$p(\\theta|\\mathcal{y}) = \\frac{p(\\mathcal{y}|\\theta) p(\\theta)} - {p(\\mathcal{y})}.$$ - - This class make inference with emcee package [1] using an Affine Invariant - Ensemble sampler (AIES) [2]. - - [1] Foreman-Mackey, D., Hogg, D.W., Lang, D. and Goodman, J., 2013.emcee: - the MCMC hammer. Publications of the Astronomical Society of the - Pacific, 125(925), p.306. https://emcee.readthedocs.io/en/stable/ - - [2] Goodman, J. and Weare, J., 2010. Ensemble samplers with affine - invariance. Communications in applied mathematics and computational - science, 5(1), pp.65-80. - - - Attributes - ---------- - BayesOpts : obj - Bayes object. - """ - - def __init__(self, BayesOpts): - - self.BayesOpts = BayesOpts - - def run_sampler(self, observation, total_sigma2): - - BayesObj = self.BayesOpts - MetaModel = BayesObj.engine.MetaModel - Model = BayesObj.engine.Model - Discrepancy = self.BayesOpts.Discrepancy - n_cpus = Model.n_cpus - priorDist = BayesObj.engine.ExpDesign.JDist - ndim = MetaModel.n_params - self.counter = 0 - output_dir = f'Outputs_Bayes_{Model.name}_{self.BayesOpts.name}' - if not os.path.exists(output_dir): - os.makedirs(output_dir) - - self.observation = observation - self.total_sigma2 = total_sigma2 - - # Unpack mcmc parameters given to BayesObj.mcmc_params - self.initsamples = None - self.nwalkers = 100 - self.nburn = 200 - self.nsteps = 100000 - self.moves = None - self.mp = False - self.verbose = False - - # Extract initial samples - if 'init_samples' in BayesObj.mcmc_params: - self.initsamples = BayesObj.mcmc_params['init_samples'] - if isinstance(self.initsamples, pd.DataFrame): - self.initsamples = self.initsamples.values - - # Extract number of steps per walker - if 'n_steps' in BayesObj.mcmc_params: - self.nsteps = int(BayesObj.mcmc_params['n_steps']) - # Extract number of walkers (chains) - if 'n_walkers' in BayesObj.mcmc_params: - self.nwalkers = int(BayesObj.mcmc_params['n_walkers']) - # Extract moves - if 'moves' in BayesObj.mcmc_params: - self.moves = BayesObj.mcmc_params['moves'] - # Extract multiprocessing - if 'multiprocessing' in BayesObj.mcmc_params: - self.mp = BayesObj.mcmc_params['multiprocessing'] - # Extract verbose - if 'verbose' in BayesObj.mcmc_params: - self.verbose = BayesObj.mcmc_params['verbose'] - - # Set initial samples - np.random.seed(0) - if self.initsamples is None: - try: - initsamples = priorDist.sample(self.nwalkers).T - except: - # when aPCE selected - gaussian kernel distribution - inputSamples = MetaModel.ExpDesign.raw_data.T - random_indices = np.random.choice( - len(inputSamples), size=self.nwalkers, replace=False - ) - initsamples = inputSamples[random_indices] - - else: - if self.initsamples.ndim == 1: - # When MAL is given. - theta = self.initsamples - initsamples = [theta + 1e-1*np.multiply( - np.random.randn(ndim), theta) for i in - range(self.nwalkers)] - else: - # Pick samples based on a uniform dist between min and max of - # each dim - initsamples = np.zeros((self.nwalkers, ndim)) - bound_tuples = [] - for idx_dim in range(ndim): - lower = np.min(self.initsamples[:, idx_dim]) - upper = np.max(self.initsamples[:, idx_dim]) - bound_tuples.append((lower, upper)) - dist = st.uniform(loc=lower, scale=upper-lower) - initsamples[:, idx_dim] = dist.rvs(size=self.nwalkers) - - # Update lower and upper - MetaModel.ExpDesign.bound_tuples = bound_tuples - - # Check if sigma^2 needs to be inferred - if Discrepancy.opt_sigma != 'B': - sigma2_samples = Discrepancy.get_sample(self.nwalkers) - - # Update initsamples - initsamples = np.hstack((initsamples, sigma2_samples)) - - # Update ndim - ndim = initsamples.shape[1] - - # Discrepancy bound - disc_bound_tuple = Discrepancy.ExpDesign.bound_tuples - - # Update bound_tuples - BayesObj.engine.ExpDesign.bound_tuples += disc_bound_tuple - - print("\n>>>> Bayesian inference with MCMC for " - f"{self.BayesOpts.name} started. <<<<<<") - - # Set up the backend - filename = f"{output_dir}/emcee_sampler.h5" - backend = emcee.backends.HDFBackend(filename) - # Clear the backend in case the file already exists - backend.reset(self.nwalkers, ndim) - - # Define emcee sampler - # Here we'll set up the computation. emcee combines multiple "walkers", - # each of which is its own MCMC chain. The number of trace results will - # be nwalkers * nsteps. - if self.mp: - # Run in parallel - if n_cpus is None: - n_cpus = multiprocessing.cpu_count() - - with multiprocessing.Pool(n_cpus) as pool: - sampler = emcee.EnsembleSampler( - self.nwalkers, ndim, self.log_posterior, moves=self.moves, - pool=pool, backend=backend - ) - - # Check if a burn-in phase is needed! - if self.initsamples is None: - # Burn-in - print("\n Burn-in period is starting:") - pos = sampler.run_mcmc( - initsamples, self.nburn, progress=True - ) - - # Reset sampler - sampler.reset() - pos = pos.coords - else: - pos = initsamples - - # Production run - print("\n Production run is starting:") - pos, prob, state = sampler.run_mcmc( - pos, self.nsteps, progress=True - ) - - else: - # Run in series and monitor the convergence - sampler = emcee.EnsembleSampler( - self.nwalkers, ndim, self.log_posterior, moves=self.moves, - backend=backend, vectorize=True - ) - - # Check if a burn-in phase is needed! - if self.initsamples is None: - # Burn-in - print("\n Burn-in period is starting:") - pos = sampler.run_mcmc( - initsamples, self.nburn, progress=True - ) - - # Reset sampler - sampler.reset() - pos = pos.coords - else: - pos = initsamples - - # Production run - print("\n Production run is starting:") - - # Track how the average autocorrelation time estimate changes - autocorrIdx = 0 - autocorr = np.empty(self.nsteps) - tauold = np.inf - autocorreverynsteps = 50 - - # sample step by step using the generator sampler.sample - for sample in sampler.sample(pos, - iterations=self.nsteps, - tune=True, - progress=True): - - # only check convergence every autocorreverynsteps steps - if sampler.iteration % autocorreverynsteps: - continue - - # Train model discrepancy/error - if hasattr(BayesObj, 'errorModel') and BayesObj.errorModel \ - and not sampler.iteration % 3 * autocorreverynsteps: - try: - self.error_MetaModel = self.train_error_model(sampler) - except: - pass - - # Print the current mean acceptance fraction - if self.verbose: - print("\nStep: {}".format(sampler.iteration)) - acc_fr = np.mean(sampler.acceptance_fraction) - print(f"Mean acceptance fraction: {acc_fr:.3f}") - - # compute the autocorrelation time so far - # using tol=0 means that we'll always get an estimate even if - # it isn't trustworthy - tau = sampler.get_autocorr_time(tol=0) - # average over walkers - autocorr[autocorrIdx] = np.nanmean(tau) - autocorrIdx += 1 - - # output current autocorrelation estimate - if self.verbose: - print(f"Mean autocorr. time estimate: {np.nanmean(tau):.3f}") - list_gr = np.round(self.gelman_rubin(sampler.chain), 3) - print("Gelman-Rubin Test*: ", list_gr) - - # check convergence - converged = np.all(tau*autocorreverynsteps < sampler.iteration) - converged &= np.all(np.abs(tauold - tau) / tau < 0.01) - converged &= np.all(self.gelman_rubin(sampler.chain) < 1.1) - - if converged: - break - tauold = tau - - # Posterior diagnostics - try: - tau = sampler.get_autocorr_time(tol=0) - except emcee.autocorr.AutocorrError: - tau = 5 - - if all(np.isnan(tau)): - tau = 5 - - burnin = int(2*np.nanmax(tau)) - thin = int(0.5*np.nanmin(tau)) if int(0.5*np.nanmin(tau)) != 0 else 1 - finalsamples = sampler.get_chain(discard=burnin, flat=True, thin=thin) - acc_fr = np.nanmean(sampler.acceptance_fraction) - list_gr = np.round(self.gelman_rubin(sampler.chain[:, burnin:]), 3) - - # Print summary - print('\n') - print('-'*15 + 'Posterior diagnostics' + '-'*15) - print(f"Mean auto-correlation time: {np.nanmean(tau):.3f}") - print(f"Thin: {thin}") - print(f"Burn-in: {burnin}") - print(f"Flat chain shape: {finalsamples.shape}") - print(f"Mean acceptance fraction*: {acc_fr:.3f}") - print("Gelman-Rubin Test**: ", list_gr) - - print("\n* This value must lay between 0.234 and 0.5.") - print("** These values must be smaller than 1.1.") - print('-'*50) - - print(f"\n>>>> Bayesian inference with MCMC for {self.BayesOpts.name} " - "successfully completed. <<<<<<\n") - - # Extract parameter names and their prior ranges - par_names = self.BayesOpts.engine.ExpDesign.par_names - - if Discrepancy.opt_sigma != 'B': - for i in range(len(Discrepancy.InputDisc.Marginals)): - par_names.append(Discrepancy.InputDisc.Marginals[i].name) - - params_range = self.BayesOpts.engine.ExpDesign.bound_tuples - - # Plot traces - if self.verbose and self.nsteps < 10000: - pdf = PdfPages(output_dir+'/traceplots.pdf') - fig = plt.figure() - for parIdx in range(ndim): - # Set up the axes with gridspec - fig = plt.figure() - grid = plt.GridSpec(4, 4, hspace=0.2, wspace=0.2) - main_ax = fig.add_subplot(grid[:-1, :3]) - y_hist = fig.add_subplot(grid[:-1, -1], xticklabels=[], - sharey=main_ax) - - for i in range(self.nwalkers): - samples = sampler.chain[i, :, parIdx] - main_ax.plot(samples, '-') - - # histogram on the attached axes - y_hist.hist(samples[burnin:], 40, histtype='stepfilled', - orientation='horizontal', color='gray') - - main_ax.set_ylim(params_range[parIdx]) - main_ax.set_title('traceplot for ' + par_names[parIdx]) - main_ax.set_xlabel('step number') - - # save the current figure - pdf.savefig(fig, bbox_inches='tight') - - # Destroy the current plot - plt.clf() - - pdf.close() - - # plot development of autocorrelation estimate - if not self.mp: - fig1 = plt.figure() - steps = autocorreverynsteps*np.arange(1, autocorrIdx+1) - taus = autocorr[:autocorrIdx] - plt.plot(steps, steps / autocorreverynsteps, "--k") - plt.plot(steps, taus) - plt.xlim(0, steps.max()) - plt.ylim(0, np.nanmax(taus)+0.1*(np.nanmax(taus)-np.nanmin(taus))) - plt.xlabel("number of steps") - plt.ylabel(r"mean $\hat{\tau}$") - fig1.savefig(f"{output_dir}/autocorrelation_time.pdf", - bbox_inches='tight') - - # logml_dict = self.marginal_llk_emcee(sampler, self.nburn, logp=None, - # maxiter=5000) - # print('\nThe Bridge Sampling Estimation is " - # f"{logml_dict['logml']:.5f}.') - - # # Posterior-based expectation of posterior probablity - # postExpPostLikelihoods = np.mean(sampler.get_log_prob(flat=True) - # [self.nburn*self.nwalkers:]) - - # # Posterior-based expectation of prior densities - # postExpPrior = np.mean(self.log_prior(emcee_trace.T)) - - # # Posterior-based expectation of likelihoods - # postExpLikelihoods_emcee = postExpPostLikelihoods - postExpPrior - - # # Calculate Kullback-Leibler Divergence - # KLD_emcee = postExpLikelihoods_emcee - logml_dict['logml'] - # print("Kullback-Leibler divergence: %.5f"%KLD_emcee) - - # # Information Entropy based on Entropy paper Eq. 38 - # infEntropy_emcee = logml_dict['logml'] - postExpPrior - - # postExpLikelihoods_emcee - # print("Information Entropy: %.5f" %infEntropy_emcee) - - Posterior_df = pd.DataFrame(finalsamples, columns=par_names) - - return Posterior_df - - # ------------------------------------------------------------------------- - def log_prior(self, theta): - """ - Calculates the log prior likelihood \\( p(\\theta)\\) for the given - parameter set(s) \\( \\theta \\). - - Parameters - ---------- - theta : array of shape (n_samples, n_params) - Parameter sets, i.e. proposals of MCMC chains. - - Returns - ------- - logprior: float or array of shape n_samples - Log prior likelihood. If theta has only one row, a single value is - returned otherwise an array. - - """ - - MetaModel = self.BayesOpts.MetaModel - Discrepancy = self.BayesOpts.Discrepancy - - # Find the number of sigma2 parameters - if Discrepancy.opt_sigma != 'B': - disc_bound_tuples = Discrepancy.ExpDesign.bound_tuples - disc_marginals = Discrepancy.ExpDesign.InputObj.Marginals - disc_prior_space = Discrepancy.ExpDesign.prior_space - n_sigma2 = len(disc_bound_tuples) - else: - n_sigma2 = -len(theta) - prior_dist = self.BayesOpts.engine.ExpDesign.prior_space - params_range = self.BayesOpts.engine.ExpDesign.bound_tuples - theta = theta if theta.ndim != 1 else theta.reshape((1, -1)) - nsamples = theta.shape[0] - logprior = -np.inf*np.ones(nsamples) - - for i in range(nsamples): - # Check if the sample is within the parameters' range - if self._check_ranges(theta[i], params_range): - # Check if all dists are uniform, if yes priors are equal. - if all(MetaModel.input_obj.Marginals[i].dist_type == 'uniform' - for i in range(MetaModel.n_params)): - logprior[i] = 0.0 - else: - logprior[i] = np.log( - prior_dist.pdf(theta[i, :-n_sigma2].T) - ) - - # Check if bias term needs to be inferred - if Discrepancy.opt_sigma != 'B': - if self._check_ranges(theta[i, -n_sigma2:], - disc_bound_tuples): - if all('unif' in disc_marginals[i].dist_type for i in - range(Discrepancy.ExpDesign.ndim)): - logprior[i] = 0.0 - else: - logprior[i] += np.log( - disc_prior_space.pdf(theta[i, -n_sigma2:]) - ) - - if nsamples == 1: - return logprior[0] - else: - return logprior - - # ------------------------------------------------------------------------- - def log_likelihood(self, theta): - """ - Computes likelihood \\( p(\\mathcal{Y}|\\theta)\\) of the performance - of the (meta-)model in reproducing the observation data. - - Parameters - ---------- - theta : array of shape (n_samples, n_params) - Parameter set, i.e. proposals of the MCMC chains. - - Returns - ------- - log_like : array of shape (n_samples) - Log likelihood. - - """ - - BayesOpts = self.BayesOpts - MetaModel = BayesOpts.MetaModel - Discrepancy = self.BayesOpts.Discrepancy - - # Find the number of sigma2 parameters - if Discrepancy.opt_sigma != 'B': - disc_bound_tuples = Discrepancy.ExpDesign.bound_tuples - n_sigma2 = len(disc_bound_tuples) - else: - n_sigma2 = -len(theta) - # Check if bias term needs to be inferred - if Discrepancy.opt_sigma != 'B': - sigma2 = theta[:, -n_sigma2:] - theta = theta[:, :-n_sigma2] - else: - sigma2 = None - theta = theta if theta.ndim != 1 else theta.reshape((1, -1)) - - # Evaluate Model/MetaModel at theta - mean_pred, BayesOpts._std_pce_prior_pred = self.eval_model(theta) - - # Surrogate model's error using RMSE of test data - surrError = MetaModel.rmse if hasattr(MetaModel, 'rmse') else None - - # Likelihood - log_like = BayesOpts.normpdf( - mean_pred, self.observation, self.total_sigma2, sigma2, - std=surrError - ) - return log_like - - # ------------------------------------------------------------------------- - def log_posterior(self, theta): - """ - Computes the posterior likelihood \\(p(\\theta| \\mathcal{Y})\\) for - the given parameterset. - - Parameters - ---------- - theta : array of shape (n_samples, n_params) - Parameter set, i.e. proposals of the MCMC chains. - - Returns - ------- - log_like : array of shape (n_samples) - Log posterior likelihood. - - """ - - nsamples = 1 if theta.ndim == 1 else theta.shape[0] - - if nsamples == 1: - if self.log_prior(theta) == -np.inf: - return -np.inf - else: - # Compute log prior - log_prior = self.log_prior(theta) - # Compute log Likelihood - log_likelihood = self.log_likelihood(theta) - - return log_prior + log_likelihood - else: - # Compute log prior - log_prior = self.log_prior(theta) - - # Initialize log_likelihood - log_likelihood = -np.inf*np.ones(nsamples) - - # find the indices for -inf sets - non_inf_idx = np.where(log_prior != -np.inf)[0] - - # Compute loLikelihoods - if non_inf_idx.size != 0: - log_likelihood[non_inf_idx] = self.log_likelihood( - theta[non_inf_idx] - ) - - return log_prior + log_likelihood - - # ------------------------------------------------------------------------- - def eval_model(self, theta): - """ - Evaluates the (meta-) model at the given theta. - - Parameters - ---------- - theta : array of shape (n_samples, n_params) - Parameter set, i.e. proposals of the MCMC chains. - - Returns - ------- - mean_pred : dict - Mean model prediction. - std_pred : dict - Std of model prediction. - - """ - - BayesObj = self.BayesOpts - MetaModel = BayesObj.MetaModel - Model = BayesObj.engine.Model - - if BayesObj.emulator: - # Evaluate the MetaModel - mean_pred, std_pred = MetaModel.eval_metamodel(samples=theta) - else: - # Evaluate the origModel - mean_pred, std_pred = dict(), dict() - - model_outs, _ = Model.run_model_parallel( - theta, prevRun_No=self.counter, - key_str='_MCMC', mp=False, verbose=False) - - # Save outputs in respective dicts - for varIdx, var in enumerate(Model.Output.names): - mean_pred[var] = model_outs[var] - std_pred[var] = np.zeros((mean_pred[var].shape)) - - # Remove the folder - if Model.link_type.lower() != 'function': - shutil.rmtree(f"{Model.name}_MCMC_{self.counter+1}") - - # Add one to the counter - self.counter += 1 - - if hasattr(self, 'error_MetaModel') and BayesObj.error_model: - meanPred, stdPred = self.error_MetaModel.eval_model_error( - BayesObj.BiasInputs, mean_pred - ) - - return mean_pred, std_pred - - # ------------------------------------------------------------------------- - def train_error_model(self, sampler): - """ - Trains an error model using a Gaussian Process Regression. - - Parameters - ---------- - sampler : obj - emcee sampler. - - Returns - ------- - error_MetaModel : obj - A error model. - - """ - BayesObj = self.BayesOpts - MetaModel = BayesObj.MetaModel - - # Prepare the poster samples - try: - tau = sampler.get_autocorr_time(tol=0) - except emcee.autocorr.AutocorrError: - tau = 5 - - if all(np.isnan(tau)): - tau = 5 - - burnin = int(2*np.nanmax(tau)) - thin = int(0.5*np.nanmin(tau)) if int(0.5*np.nanmin(tau)) != 0 else 1 - finalsamples = sampler.get_chain(discard=burnin, flat=True, thin=thin) - posterior = finalsamples[:, :MetaModel.n_params] - - # Select posterior mean as MAP - map_theta = posterior.mean(axis=0).reshape((1, MetaModel.n_params)) - # MAP_theta = st.mode(Posterior_df,axis=0)[0] - - # Evaluate the (meta-)model at the MAP - y_map, y_std_map = MetaModel.eval_metamodel(samples=map_theta) - - # Train a GPR meta-model using MAP - error_MetaModel = MetaModel.create_model_error( - BayesObj.BiasInputs, y_map, name='Calib') - - return error_MetaModel - - # ------------------------------------------------------------------------- - def gelman_rubin(self, chain, return_var=False): - """ - The potential scale reduction factor (PSRF) defined by the variance - within one chain, W, with the variance between chains B. - Both variances are combined in a weighted sum to obtain an estimate of - the variance of a parameter \\( \\theta \\).The square root of the - ratio of this estimates variance to the within chain variance is called - the potential scale reduction. - For a well converged chain it should approach 1. Values greater than - 1.1 typically indicate that the chains have not yet fully converged. - - Source: http://joergdietrich.github.io/emcee-convergence.html - - https://github.com/jwalton3141/jwalton3141.github.io/blob/master/assets/posts/ESS/rwmh.py - - Parameters - ---------- - chain : array (n_walkers, n_steps, n_params) - The emcee ensamples. - - Returns - ------- - R_hat : float - The Gelman-Robin values. - - """ - m_chains, n_iters = chain.shape[:2] - - # Calculate between-chain variance - θb = np.mean(chain, axis=1) - θbb = np.mean(θb, axis=0) - B_over_n = ((θbb - θb)**2).sum(axis=0) - B_over_n /= (m_chains - 1) - - # Calculate within-chain variances - ssq = np.var(chain, axis=1, ddof=1) - W = np.mean(ssq, axis=0) - - # (over) estimate of variance - var_θ = W * (n_iters - 1) / n_iters + B_over_n - - if return_var: - return var_θ - else: - # The square root of the ratio of this estimates variance to the - # within chain variance - R_hat = np.sqrt(var_θ / W) - return R_hat - - # ------------------------------------------------------------------------- - def marginal_llk_emcee(self, sampler, nburn=None, logp=None, maxiter=1000): - """ - The Bridge Sampling Estimator of the Marginal Likelihood based on - https://gist.github.com/junpenglao/4d2669d69ddfe1d788318264cdcf0583 - - Parameters - ---------- - sampler : TYPE - MultiTrace, result of MCMC run. - nburn : int, optional - Number of burn-in step. The default is None. - logp : TYPE, optional - Model Log-probability function. The default is None. - maxiter : int, optional - Maximum number of iterations. The default is 1000. - - Returns - ------- - marg_llk : dict - Estimated Marginal log-Likelihood. - - """ - r0, tol1, tol2 = 0.5, 1e-10, 1e-4 - - if logp is None: - logp = sampler.log_prob_fn - - # Split the samples into two parts - # Use the first 50% for fiting the proposal distribution - # and the second 50% in the iterative scheme. - if nburn is None: - mtrace = sampler.chain - else: - mtrace = sampler.chain[:, nburn:, :] - - nchain, len_trace, nrofVars = mtrace.shape - - N1_ = len_trace // 2 - N1 = N1_*nchain - N2 = len_trace*nchain - N1 - - samples_4_fit = np.zeros((nrofVars, N1)) - samples_4_iter = np.zeros((nrofVars, N2)) - effective_n = np.zeros((nrofVars)) - - # matrix with already transformed samples - for var in range(nrofVars): - - # for fitting the proposal - x = mtrace[:, :N1_, var] - - samples_4_fit[var, :] = x.flatten() - # for the iterative scheme - x2 = mtrace[:, N1_:, var] - samples_4_iter[var, :] = x2.flatten() - - # effective sample size of samples_4_iter, scalar - effective_n[var] = self._my_ESS(x2) - - # median effective sample size (scalar) - neff = np.median(effective_n) - - # get mean & covariance matrix and generate samples from proposal - m = np.mean(samples_4_fit, axis=1) - V = np.cov(samples_4_fit) - L = chol(V, lower=True) - - # Draw N2 samples from the proposal distribution - gen_samples = m[:, None] + np.dot( - L, st.norm.rvs(0, 1, size=samples_4_iter.shape) - ) - - # Evaluate proposal distribution for posterior & generated samples - q12 = st.multivariate_normal.logpdf(samples_4_iter.T, m, V) - q22 = st.multivariate_normal.logpdf(gen_samples.T, m, V) - - # Evaluate unnormalized posterior for posterior & generated samples - q11 = logp(samples_4_iter.T) - q21 = logp(gen_samples.T) - - # Run iterative scheme: - tmp = self._iterative_scheme( - N1, N2, q11, q12, q21, q22, r0, neff, tol1, maxiter, 'r' - ) - if ~np.isfinite(tmp['logml']): - warnings.warn( - "Logml could not be estimated within maxiter, rerunning with " - "adjusted starting value. Estimate might be more variable than" - " usual.") - # use geometric mean as starting value - r0_2 = np.sqrt(tmp['r_vals'][-2]*tmp['r_vals'][-1]) - tmp = self._iterative_scheme( - q11, q12, q21, q22, r0_2, neff, tol2, maxiter, 'logml' - ) - - marg_llk = dict( - logml=tmp['logml'], niter=tmp['niter'], method="normal", - q11=q11, q12=q12, q21=q21, q22=q22 - ) - return marg_llk - - # ------------------------------------------------------------------------- - def _iterative_scheme(self, N1, N2, q11, q12, q21, q22, r0, neff, tol, - maxiter, criterion): - """ - Iterative scheme as proposed in Meng and Wong (1996) to estimate the - marginal likelihood - - """ - l1 = q11 - q12 - l2 = q21 - q22 - # To increase numerical stability, - # subtracting the median of l1 from l1 & l2 later - lstar = np.median(l1) - s1 = neff/(neff + N2) - s2 = N2/(neff + N2) - r = r0 - r_vals = [r] - logml = np.log(r) + lstar - criterion_val = 1 + tol - - i = 0 - while (i <= maxiter) & (criterion_val > tol): - rold = r - logmlold = logml - numi = np.exp(l2 - lstar)/(s1 * np.exp(l2 - lstar) + s2 * r) - deni = 1/(s1 * np.exp(l1 - lstar) + s2 * r) - if np.sum(~np.isfinite(numi))+np.sum(~np.isfinite(deni)) > 0: - warnings.warn( - """Infinite value in iterative scheme, returning NaN. - Try rerunning with more samples.""") - r = (N1/N2) * np.sum(numi)/np.sum(deni) - r_vals.append(r) - logml = np.log(r) + lstar - i += 1 - if criterion == 'r': - criterion_val = np.abs((r - rold)/r) - elif criterion == 'logml': - criterion_val = np.abs((logml - logmlold)/logml) - - if i >= maxiter: - return dict(logml=np.NaN, niter=i, r_vals=np.asarray(r_vals)) - else: - return dict(logml=logml, niter=i) - - # ------------------------------------------------------------------------- - def _my_ESS(self, x): - """ - Compute the effective sample size of estimand of interest. - Vectorised implementation. - https://github.com/jwalton3141/jwalton3141.github.io/blob/master/assets/posts/ESS/rwmh.py - - - Parameters - ---------- - x : array of shape (n_walkers, n_steps) - MCMC Samples. - - Returns - ------- - int - Effective sample size. - - """ - m_chains, n_iters = x.shape - - def variogram(t): - variogram = ((x[:, t:] - x[:, :(n_iters - t)])**2).sum() - variogram /= (m_chains * (n_iters - t)) - return variogram - - post_var = self.gelman_rubin(x, return_var=True) - - t = 1 - rho = np.ones(n_iters) - negative_autocorr = False - - # Iterate until the sum of consecutive estimates of autocorrelation is - # negative - while not negative_autocorr and (t < n_iters): - rho[t] = 1 - variogram(t) / (2 * post_var) - - if not t % 2: - negative_autocorr = sum(rho[t-1:t+1]) < 0 - - t += 1 - - return int(m_chains*n_iters / (1 + 2*rho[1:t].sum())) - - # ------------------------------------------------------------------------- - def _check_ranges(self, theta, ranges): - """ - This function checks if theta lies in the given ranges. - - Parameters - ---------- - theta : array - Proposed parameter set. - ranges : nested list - List of the praremeter ranges. - - Returns - ------- - c : bool - If it lies in the given range, it return True else False. - - """ - c = True - # traverse in the list1 - for i, bounds in enumerate(ranges): - x = theta[i] - # condition check - if x < bounds[0] or x > bounds[1]: - c = False - return c - return c diff --git a/examples/model-comparison/bayesvalidrox/bayesvalidrox.mplstyle b/examples/model-comparison/bayesvalidrox/bayesvalidrox.mplstyle deleted file mode 100644 index 1f31c01f2..000000000 --- a/examples/model-comparison/bayesvalidrox/bayesvalidrox.mplstyle +++ /dev/null @@ -1,16 +0,0 @@ -figure.titlesize : 30 -axes.titlesize : 30 -axes.labelsize : 30 -axes.linewidth : 3 -axes.grid : True -lines.linewidth : 3 -lines.markersize : 10 -xtick.labelsize : 30 -ytick.labelsize : 30 -legend.fontsize : 30 -font.family : serif -font.serif : Arial -font.size : 30 -text.usetex : True -grid.linestyle : - -figure.figsize : 24, 16 diff --git a/examples/model-comparison/bayesvalidrox/post_processing/__init__.py b/examples/model-comparison/bayesvalidrox/post_processing/__init__.py deleted file mode 100644 index 81c982542..000000000 --- a/examples/model-comparison/bayesvalidrox/post_processing/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- - -from .post_processing import PostProcessing - -__all__ = [ - "PostProcessing" - ] diff --git a/examples/model-comparison/bayesvalidrox/post_processing/__pycache__/__init__.cpython-310.pyc b/examples/model-comparison/bayesvalidrox/post_processing/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index c8590a242166b2e8d40de7ee2eece71980bd1571..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 261 zcmZ8bu};G<5Vf5GRYl8y)IVUz!u<fM7!d7*A|aM6CpWel3nz|z4z!=dFJ)!o7g*rZ ziSnd-r+4q2?!tUN6O76AjZNG?NAVYm#XT1-nT#;fi$<1G3Zr(iR3>{C`Q%Honag2O z1WH8=l_hfRE{@Ajc{W^iJjd?T7%mXC_lO@No^kL<-z79{f(l;9MuPYnYF}$j@DQrL zv27w)yR_-I@aV&Pp;HZ8eX#VVy)!ZF;ol`dbgfH>x7}fw-ZjDW-mb=X>740Oscic5 E3kw-WVE_OC diff --git a/examples/model-comparison/bayesvalidrox/post_processing/__pycache__/__init__.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/post_processing/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index e84acd550fed2f7af8a071adf99001f44547bdf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 323 zcmZ3^%ge<81PRl(r<MTe#~=<2FhLogC4h|S3@HpLj5!Rsj8Tk?3@J?Mj8RM}%)tzr zEH4>>(wdC7_yY2aO9G1WlT(X}GxO4mn1RB6n#{NO3xMMB1*j6Y*yH09b8_P2S2BDC zS@WyN*(xTqIJKxarYJi<BPSy<u{g#hKe;qFHLs*N#yzvdqckZdDX}uOxGXUzGo>iM zA||yWF}ENmwK%3EGdDFQwIDSw1*jNJ5t`*O@$s2?nI-Y@dIgogIBatBQ%ZAE?TR>o rP5^nMSQAKmU}j`w{J_S*sB?iq8yNw`SVccDGjX#uu!CR`J5V(MP1av^ diff --git a/examples/model-comparison/bayesvalidrox/post_processing/__pycache__/__init__.cpython-39.pyc b/examples/model-comparison/bayesvalidrox/post_processing/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index 58a0eb24635d0b97a14d13708e616de6a0659976..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmZ9G&q@O^5XO_;ibbs6e1|=xP{fOf2=(GYS&#)Ofsk&pH8lT7Hl_9IbNB$hg4e#q zUOo8=UUarz)Pea8Gv7DE@X_c1K|H^0g@O9sH@_o;<_a>N00a_PBZFrcBatoeEED-X zDh3}I!~%CmrHgGDTrFc%b`kpJyCUz7J<OT^D|GveajhA9MPUz&JAA%O&uJB9h&0Hh zn^2KVTK|w3Wo6)6J@HmKOB%`B6ePKsmgKs+tsYLtXLO#F7Nj<ODJl0}Q&oE^0mL-4 zQI_i<W72J0O&(eA3dzzr-^jRv%Obcn{r4<oOj*@3HujrtcwwAKT3+VxaU1{+^X%&z DlmueV diff --git a/examples/model-comparison/bayesvalidrox/post_processing/__pycache__/post_processing.cpython-310.pyc b/examples/model-comparison/bayesvalidrox/post_processing/__pycache__/post_processing.cpython-310.pyc deleted file mode 100644 index 0924d8afac04d4fe82ebe791bc55a8ae48d7c117..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28679 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 diff --git a/examples/model-comparison/bayesvalidrox/post_processing/__pycache__/post_processing.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/post_processing/__pycache__/post_processing.cpython-311.pyc deleted file mode 100644 index 94ffbf6f3da6b2b15cdf648a10ce9edb82d90834..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58808 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 ZuoEes@>;1AKK<*jO4{E)Aq(rE{{hMhrn3M5 diff --git a/examples/model-comparison/bayesvalidrox/post_processing/__pycache__/post_processing.cpython-39.pyc b/examples/model-comparison/bayesvalidrox/post_processing/__pycache__/post_processing.cpython-39.pyc deleted file mode 100644 index 312575d7655db85df423489051f494f3dce62692..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28771 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 diff --git a/examples/model-comparison/bayesvalidrox/post_processing/post_processing.py b/examples/model-comparison/bayesvalidrox/post_processing/post_processing.py deleted file mode 100644 index 6520a40f9..000000000 --- a/examples/model-comparison/bayesvalidrox/post_processing/post_processing.py +++ /dev/null @@ -1,1338 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -import numpy as np -import math -import os -from itertools import combinations, cycle -import pandas as pd -import scipy.stats as stats -from sklearn.linear_model import LinearRegression -from sklearn.metrics import mean_squared_error, r2_score -import matplotlib.pyplot as plt -import matplotlib.ticker as ticker -from matplotlib.offsetbox import AnchoredText -from matplotlib.patches import Patch -# Load the mplstyle -plt.style.use(os.path.join(os.path.split(__file__)[0], - '../', 'bayesvalidrox.mplstyle')) - - -class PostProcessing: - """ - This class provides many helper functions to post-process the trained - meta-model. - - Attributes - ---------- - MetaModel : obj - MetaModel object to do postprocessing on. - name : str - Type of the anaylsis. The default is `'calib'`. If a validation is - expected to be performed change this to `'valid'`. - """ - - def __init__(self, engine, name='calib'): - self.engine = engine - self.MetaModel = engine.MetaModel - self.ExpDesign = engine.ExpDesign - self.ModelObj = engine.Model - self.name = name - - # ------------------------------------------------------------------------- - def plot_moments(self, xlabel='Time [s]', plot_type=None): - """ - Plots the moments in a pdf format in the directory - `Outputs_PostProcessing`. - - Parameters - ---------- - xlabel : str, optional - String to be displayed as x-label. The default is `'Time [s]'`. - plot_type : str, optional - Options: bar or line. The default is `None`. - - Returns - ------- - pce_means: dict - Mean of the model outputs. - pce_means: dict - Standard deviation of the model outputs. - - """ - - bar_plot = True if plot_type == 'bar' else False - meta_model_type = self.MetaModel.meta_model_type - Model = self.ModelObj - - # Read Monte-Carlo reference - self.mc_reference = Model.read_observation('mc_ref') - - # Set the x values - x_values_orig = self.engine.ExpDesign.x_values - - # Compute the moments with the PCEModel object - self.pce_means, self.pce_stds = self.compute_pce_moments() - - # Get the variables - out_names = Model.Output.names - - # Open a pdf for the plots - newpath = (f'Outputs_PostProcessing_{self.name}/') - if not os.path.exists(newpath): - os.makedirs(newpath) - - # Plot the best fit line, set the linewidth (lw), color and - # transparency (alpha) of the line - for key in out_names: - fig, ax = plt.subplots(nrows=1, ncols=2) - - # Extract mean and std - mean_data = self.pce_means[key] - std_data = self.pce_stds[key] - - # Extract a list of x values - if type(x_values_orig) is dict: - x = x_values_orig[key] - else: - x = x_values_orig - - # Plot: bar plot or line plot - if bar_plot: - ax[0].bar(list(map(str, x)), mean_data, color='b', - width=0.25) - ax[1].bar(list(map(str, x)), std_data, color='b', - width=0.25) - ax[0].legend(labels=[meta_model_type]) - ax[1].legend(labels=[meta_model_type]) - else: - ax[0].plot(x, mean_data, lw=3, color='k', marker='x', - label=meta_model_type) - ax[1].plot(x, std_data, lw=3, color='k', marker='x', - label=meta_model_type) - - if self.mc_reference is not None: - if bar_plot: - ax[0].bar(list(map(str, x)), self.mc_reference['mean'], - color='r', width=0.25) - ax[1].bar(list(map(str, x)), self.mc_reference['std'], - color='r', width=0.25) - ax[0].legend(labels=[meta_model_type]) - ax[1].legend(labels=[meta_model_type]) - else: - ax[0].plot(x, self.mc_reference['mean'], lw=3, marker='x', - color='r', label='Ref.') - ax[1].plot(x, self.mc_reference['std'], lw=3, marker='x', - color='r', label='Ref.') - - # Label the axes and provide a title - ax[0].set_xlabel(xlabel) - ax[1].set_xlabel(xlabel) - ax[0].set_ylabel(key) - ax[1].set_ylabel(key) - - # Provide a title - ax[0].set_title('Mean of ' + key) - ax[1].set_title('Std of ' + key) - - if not bar_plot: - ax[0].legend(loc='best') - ax[1].legend(loc='best') - - plt.tight_layout() - - # save the current figure - fig.savefig( - f'./{newpath}Mean_Std_PCE_{key}.pdf', - bbox_inches='tight' - ) - - return self.pce_means, self.pce_stds - - # ------------------------------------------------------------------------- - def valid_metamodel(self, n_samples=1, samples=None, model_out_dict=None, - x_axis='Time [s]'): - """ - Evaluates and plots the meta model and the PCEModel outputs for the - given number of samples or the given samples. - - Parameters - ---------- - n_samples : int, optional - Number of samples to be evaluated. The default is 1. - samples : array of shape (n_samples, n_params), optional - Samples to be evaluated. The default is None. - model_out_dict: dict - The model runs using the samples provided. - x_axis : str, optional - Label of x axis. The default is `'Time [s]'`. - - Returns - ------- - None. - - """ - MetaModel = self.MetaModel - Model = self.ModelObj - - if samples is None: - self.n_samples = n_samples - samples = self._get_sample() - else: - self.n_samples = samples.shape[0] - - # Extract x_values - x_values = self.engine.ExpDesign.x_values - - if model_out_dict is not None: - self.model_out_dict = model_out_dict - else: - self.model_out_dict = self._eval_model(samples, key_str='valid') - self.pce_out_mean, self.pce_out_std = MetaModel.eval_metamodel(samples) - - try: - key = Model.Output.names[1] - except IndexError: - key = Model.Output.names[0] - - n_obs = self.model_out_dict[key].shape[1] - - if n_obs == 1: - self._plot_validation() - else: - self._plot_validation_multi(x_values=x_values, x_axis=x_axis) - - # ------------------------------------------------------------------------- - def check_accuracy(self, n_samples=None, samples=None, outputs=None): - """ - Checks accuracy of the metamodel by computing the root mean square - error and validation error for all outputs. - - Parameters - ---------- - n_samples : int, optional - Number of samples. The default is None. - samples : array of shape (n_samples, n_params), optional - Parameter sets to be checked. The default is None. - outputs : dict, optional - Output dictionary with model outputs for all given output types in - `Model.Output.names`. The default is None. - - Raises - ------ - Exception - When neither n_samples nor samples are provided. - - Returns - ------- - rmse: dict - Root mean squared error for each output. - valid_error : dict - Validation error for each output. - - """ - MetaModel = self.MetaModel - Model = self.ModelObj - - # Set the number of samples - if n_samples: - self.n_samples = n_samples - elif samples is not None: - self.n_samples = samples.shape[0] - else: - raise Exception("Please provide either samples or pass the number" - " of samples!") - - # Generate random samples if necessary - Samples = self._get_sample() if samples is None else samples - - # Run the original model with the generated samples - if outputs is None: - outputs = self._eval_model(Samples, key_str='validSet') - - # Run the PCE model with the generated samples - pce_outputs, _ = MetaModel.eval_metamodel(samples=Samples) - - self.rmse = {} - self.valid_error = {} - # Loop over the keys and compute RMSE error. - for key in Model.Output.names: - # Root mena square - self.rmse[key] = mean_squared_error(outputs[key], pce_outputs[key], - squared=False, - multioutput='raw_values') - # Validation error - self.valid_error[key] = (self.rmse[key]**2) / \ - np.var(outputs[key], ddof=1, axis=0) - - # Print a report table - print("\n>>>>> Errors of {} <<<<<".format(key)) - print("\nIndex | RMSE | Validation Error") - print('-'*35) - print('\n'.join(f'{i+1} | {k:.3e} | {j:.3e}' for i, (k, j) - in enumerate(zip(self.rmse[key], - self.valid_error[key])))) - # Save error dicts in PCEModel object - self.MetaModel.rmse = self.rmse - self.MetaModel.valid_error = self.valid_error - - return - - # ------------------------------------------------------------------------- - def plot_seq_design_diagnostics(self, ref_BME_KLD=None): - """ - Plots the Bayesian Model Evidence (BME) and Kullback-Leibler divergence - (KLD) for the sequential design. - - Parameters - ---------- - ref_BME_KLD : array, optional - Reference BME and KLD . The default is `None`. - - Returns - ------- - None. - - """ - engine = self.engine - PCEModel = self.MetaModel - n_init_samples = engine.ExpDesign.n_init_samples - n_total_samples = engine.ExpDesign.X.shape[0] - - newpath = f'Outputs_PostProcessing_{self.name}/seq_design_diagnostics/' - if not os.path.exists(newpath): - os.makedirs(newpath) - - plotList = ['Modified LOO error', 'Validation error', 'KLD', 'BME', - 'RMSEMean', 'RMSEStd', 'Hellinger distance'] - seqList = [engine.SeqModifiedLOO, engine.seqValidError, - engine.SeqKLD, engine.SeqBME, engine.seqRMSEMean, - engine.seqRMSEStd, engine.SeqDistHellinger] - - markers = ('x', 'o', 'd', '*', '+') - colors = ('k', 'darkgreen', 'b', 'navy', 'darkred') - - # Plot the evolution of the diagnostic criteria of the - # Sequential Experimental Design. - for plotidx, plot in enumerate(plotList): - fig, ax = plt.subplots() - seq_dict = seqList[plotidx] - name_util = list(seq_dict.keys()) - - if len(name_util) == 0: - continue - - # Box plot when Replications have been detected. - if any(int(name.split("rep_", 1)[1]) > 1 for name in name_util): - # Extract the values from dict - sorted_seq_opt = {} - # Number of replications - n_reps = engine.ExpDesign.n_replication - - # Get the list of utility function names - # Handle if only one UtilityFunction is provided - if not isinstance(engine.ExpDesign.util_func, list): - util_funcs = [engine.ExpDesign.util_func] - else: - util_funcs = engine.ExpDesign.util_func - - for util in util_funcs: - sortedSeq = {} - # min number of runs available from reps - n_runs = min([seq_dict[f'{util}_rep_{i+1}'].shape[0] - for i in range(n_reps)]) - - for runIdx in range(n_runs): - values = [] - for key in seq_dict.keys(): - if util in key: - values.append(seq_dict[key][runIdx].mean()) - sortedSeq['SeqItr_'+str(runIdx)] = np.array(values) - sorted_seq_opt[util] = sortedSeq - - # BoxPlot - def draw_plot(data, labels, edge_color, fill_color, idx): - pos = labels - (idx-1) - bp = plt.boxplot(data, positions=pos, labels=labels, - patch_artist=True, sym='', widths=0.75) - elements = ['boxes', 'whiskers', 'fliers', 'means', - 'medians', 'caps'] - for element in elements: - plt.setp(bp[element], color=edge_color[idx]) - - for patch in bp['boxes']: - patch.set(facecolor=fill_color[idx]) - - if engine.ExpDesign.n_new_samples != 1: - step1 = engine.ExpDesign.n_new_samples - step2 = 1 - else: - step1 = 5 - step2 = 5 - edge_color = ['red', 'blue', 'green'] - fill_color = ['tan', 'cyan', 'lightgreen'] - plot_label = plot - # Plot for different Utility Functions - for idx, util in enumerate(util_funcs): - all_errors = np.empty((n_reps, 0)) - - for key in list(sorted_seq_opt[util].keys()): - errors = sorted_seq_opt.get(util, {}).get(key)[:, None] - all_errors = np.hstack((all_errors, errors)) - - # Special cases for BME and KLD - if plot == 'KLD' or plot == 'BME': - # BME convergence if refBME is provided - if ref_BME_KLD is not None: - if plot == 'BME': - refValue = ref_BME_KLD[0] - plot_label = r'BME/BME$^{Ref.}$' - if plot == 'KLD': - refValue = ref_BME_KLD[1] - plot_label = '$D_{KL}[p(\\theta|y_*),p(\\theta)]'\ - ' / D_{KL}^{Ref.}[p(\\theta|y_*), '\ - 'p(\\theta)]$' - - # Difference between BME/KLD and the ref. values - all_errors = np.divide(all_errors, - np.full((all_errors.shape), - refValue)) - - # Plot baseline for zero, i.e. no difference - plt.axhline(y=1.0, xmin=0, xmax=1, c='green', - ls='--', lw=2) - - # Plot each UtilFuncs - labels = np.arange(n_init_samples, n_total_samples+1, step1) - draw_plot(all_errors[:, ::step2], labels, edge_color, - fill_color, idx) - - plt.xticks(labels, labels) - # Set the major and minor locators - ax.xaxis.set_major_locator(ticker.AutoLocator()) - ax.xaxis.set_minor_locator(ticker.AutoMinorLocator()) - ax.xaxis.grid(True, which='major', linestyle='-') - ax.xaxis.grid(True, which='minor', linestyle='--') - - # Legend - legend_elements = [] - for idx, util in enumerate(util_funcs): - legend_elements.append(Patch(facecolor=fill_color[idx], - edgecolor=edge_color[idx], - label=util)) - plt.legend(handles=legend_elements[::-1], loc='best') - - if plot != 'BME' and plot != 'KLD': - plt.yscale('log') - plt.autoscale(True) - plt.xlabel('\\# of training samples') - plt.ylabel(plot_label) - plt.title(plot) - - # save the current figure - plot_name = plot.replace(' ', '_') - fig.savefig( - f'./{newpath}/seq_{plot_name}.pdf', - bbox_inches='tight' - ) - # Destroy the current plot - plt.clf() - # Save arrays into files - f = open(f'./{newpath}/seq_{plot_name}.txt', 'w') - f.write(str(sorted_seq_opt)) - f.close() - else: - for idx, name in enumerate(name_util): - seq_values = seq_dict[name] - if engine.ExpDesign.n_new_samples != 1: - step = engine.ExpDesign.n_new_samples - else: - step = 1 - x_idx = np.arange(n_init_samples, n_total_samples+1, step) - if n_total_samples not in x_idx: - x_idx = np.hstack((x_idx, n_total_samples)) - - if plot == 'KLD' or plot == 'BME': - # BME convergence if refBME is provided - if ref_BME_KLD is not None: - if plot == 'BME': - refValue = ref_BME_KLD[0] - plot_label = r'BME/BME$^{Ref.}$' - if plot == 'KLD': - refValue = ref_BME_KLD[1] - plot_label = '$D_{KL}[p(\\theta|y_*),p(\\theta)]'\ - ' / D_{KL}^{Ref.}[p(\\theta|y_*), '\ - 'p(\\theta)]$' - - # Difference between BME/KLD and the ref. values - values = np.divide(seq_values, - np.full((seq_values.shape), - refValue)) - - # Plot baseline for zero, i.e. no difference - plt.axhline(y=1.0, xmin=0, xmax=1, c='green', - ls='--', lw=2) - - # Set the limits - plt.ylim([1e-1, 1e1]) - - # Create the plots - plt.semilogy(x_idx, values, marker=markers[idx], - color=colors[idx], ls='--', lw=2, - label=name.split("_rep", 1)[0]) - else: - plot_label = plot - - # Create the plots - plt.plot(x_idx, seq_values, marker=markers[idx], - color=colors[idx], ls='--', lw=2, - label=name.split("_rep", 1)[0]) - - else: - plot_label = plot - seq_values = np.nan_to_num(seq_values) - - # Plot the error evolution for each output - plt.semilogy(x_idx, seq_values.mean(axis=1), - marker=markers[idx], ls='--', lw=2, - color=colors[idx], - label=name.split("_rep", 1)[0]) - - # Set the major and minor locators - ax.xaxis.set_major_locator(ticker.AutoLocator()) - ax.xaxis.set_minor_locator(ticker.AutoMinorLocator()) - ax.xaxis.grid(True, which='major', linestyle='-') - ax.xaxis.grid(True, which='minor', linestyle='--') - - ax.tick_params(axis='both', which='major', direction='in', - width=3, length=10) - ax.tick_params(axis='both', which='minor', direction='in', - width=2, length=8) - plt.xlabel('Number of runs') - plt.ylabel(plot_label) - plt.title(plot) - plt.legend(frameon=True) - - # save the current figure - plot_name = plot.replace(' ', '_') - fig.savefig( - f'./{newpath}/seq_{plot_name}.pdf', - bbox_inches='tight' - ) - # Destroy the current plot - plt.clf() - - # ---------------- Saving arrays into files --------------- - np.save(f'./{newpath}/seq_{plot_name}.npy', seq_values) - - return - - # ------------------------------------------------------------------------- - def sobol_indices(self, xlabel='Time [s]', plot_type=None): - """ - Provides Sobol indices as a sensitivity measure to infer the importance - of the input parameters. See Eq. 27 in [1] for more details. For the - case with Principal component analysis refer to [2]. - - [1] Global sensitivity analysis: A flexible and efficient framework - with an example from stochastic hydrogeology S. Oladyshkin, F.P. - de Barros, W. Nowak https://doi.org/10.1016/j.advwatres.2011.11.001 - - [2] Nagel, J.B., Rieckermann, J. and Sudret, B., 2020. Principal - component analysis and sparse polynomial chaos expansions for global - sensitivity analysis and model calibration: Application to urban - drainage simulation. Reliability Engineering & System Safety, 195, - p.106737. - - Parameters - ---------- - xlabel : str, optional - Label of the x-axis. The default is `'Time [s]'`. - plot_type : str, optional - Plot type. The default is `None`. This corresponds to line plot. - Bar chart can be selected by `bar`. - - Returns - ------- - sobol_cell: dict - Sobol indices. - total_sobol: dict - Total Sobol indices. - - """ - # Extract the necessary variables - PCEModel = self.MetaModel - basis_dict = PCEModel.basis_dict - coeffs_dict = PCEModel.coeffs_dict - n_params = PCEModel.n_params - max_order = np.max(PCEModel.pce_deg) - sobol_cell_b = {} - total_sobol_b = {} - cov_Z_p_q = np.zeros((n_params)) - - for b_i in range(PCEModel.n_bootstrap_itrs): - - sobol_cell_, total_sobol_ = {}, {} - - for output in self.ModelObj.Output.names: - - n_meas_points = len(coeffs_dict[f'b_{b_i+1}'][output]) - - # Initialize the (cell) array containing the (total) Sobol indices. - sobol_array = dict.fromkeys(range(1, max_order+1), []) - sobol_cell_array = dict.fromkeys(range(1, max_order+1), []) - - for i_order in range(1, max_order+1): - n_comb = math.comb(n_params, i_order) - - sobol_cell_array[i_order] = np.zeros((n_comb, n_meas_points)) - - total_sobol_array = np.zeros((n_params, n_meas_points)) - - # Initialize the cell to store the names of the variables - TotalVariance = np.zeros((n_meas_points)) - # Loop over all measurement points and calculate sobol indices - for pIdx in range(n_meas_points): - - # Extract the basis indices (alpha) and coefficients - Basis = basis_dict[f'b_{b_i+1}'][output][f'y_{pIdx+1}'] - - try: - clf_poly = PCEModel.clf_poly[f'b_{b_i+1}'][output][f'y_{pIdx+1}'] - PCECoeffs = clf_poly.coef_ - except: - PCECoeffs = coeffs_dict[f'b_{b_i+1}'][output][f'y_{pIdx+1}'] - - # Compute total variance - TotalVariance[pIdx] = np.sum(np.square(PCECoeffs[1:])) - - nzidx = np.where(PCECoeffs != 0)[0] - # Set all the Sobol indices equal to zero in the presence of a - # null output. - if len(nzidx) == 0: - # This is buggy. - for i_order in range(1, max_order+1): - sobol_cell_array[i_order][:, pIdx] = 0 - - # Otherwise compute them by summing well-chosen coefficients - else: - nz_basis = Basis[nzidx] - for i_order in range(1, max_order+1): - idx = np.where(np.sum(nz_basis > 0, axis=1) == i_order) - subbasis = nz_basis[idx] - Z = np.array(list(combinations(range(n_params), i_order))) - - for q in range(Z.shape[0]): - Zq = Z[q] - subsubbasis = subbasis[:, Zq] - subidx = np.prod(subsubbasis, axis=1) > 0 - sum_ind = nzidx[idx[0][subidx]] - if TotalVariance[pIdx] == 0.0: - sobol_cell_array[i_order][q, pIdx] = 0.0 - else: - sobol = np.sum(np.square(PCECoeffs[sum_ind])) - sobol /= TotalVariance[pIdx] - sobol_cell_array[i_order][q, pIdx] = sobol - - # Compute the TOTAL Sobol indices. - for ParIdx in range(n_params): - idx = nz_basis[:, ParIdx] > 0 - sum_ind = nzidx[idx] - - if TotalVariance[pIdx] == 0.0: - total_sobol_array[ParIdx, pIdx] = 0.0 - else: - sobol = np.sum(np.square(PCECoeffs[sum_ind])) - sobol /= TotalVariance[pIdx] - total_sobol_array[ParIdx, pIdx] = sobol - - # ----- if PCA selected: Compute covariance ----- - if PCEModel.dim_red_method.lower() == 'pca': - # Extract the basis indices (alpha) and coefficients for - # next component - if pIdx < n_meas_points-1: - nextBasis = basis_dict[f'b_{b_i+1}'][output][f'y_{pIdx+2}'] - if PCEModel.bootstrap_method != 'fast' or b_i == 0: - clf_poly = PCEModel.clf_poly[f'b_{b_i+1}'][output][f'y_{pIdx+2}'] - nextPCECoeffs = clf_poly.coef_ - else: - nextPCECoeffs = coeffs_dict[f'b_{b_i+1}'][output][f'y_{pIdx+2}'] - - # Choose the common non-zero basis - mask = (Basis[:, None] == nextBasis).all(-1).any(-1) - n_mask = (nextBasis[:, None] == Basis).all(-1).any(-1) - - # Compute the covariance in Eq 17. - for ParIdx in range(n_params): - idx = (mask) & (Basis[:, ParIdx] > 0) - n_idx = (n_mask) & (nextBasis[:, ParIdx] > 0) - try: - cov_Z_p_q[ParIdx] += np.sum(np.dot( - PCECoeffs[idx], nextPCECoeffs[n_idx]) - ) - except: - pass - - # Compute the sobol indices according to Ref. 2 - if PCEModel.dim_red_method.lower() == 'pca': - n_c_points = self.engine.ExpDesign.Y[output].shape[1] - PCA = PCEModel.pca[f'b_{b_i+1}'][output] - compPCA = PCA.components_ - nComp = compPCA.shape[0] - var_Z_p = PCA.explained_variance_ - - # Extract the sobol index of the components - for i_order in range(1, max_order+1): - n_comb = math.comb(n_params, i_order) - sobol_array[i_order] = np.zeros((n_comb, n_c_points)) - Z = np.array(list(combinations(range(n_params), i_order))) - - # Loop over parameters - for q in range(Z.shape[0]): - S_Z_i = sobol_cell_array[i_order][q] - - for tIdx in range(n_c_points): - var_Y_t = np.var( - self.engine.ExpDesign.Y[output][:, tIdx]) - if var_Y_t == 0.0: - term1, term2 = 0.0, 0.0 - else: - # Eq. 17 - term1 = 0.0 - for i in range(nComp): - a = S_Z_i[i] * var_Z_p[i] - a *= compPCA[i, tIdx]**2 - term1 += a - - # TODO: Term 2 - # term2 = 0.0 - # for i in range(nComp-1): - # term2 += cov_Z_p_q[q] * compPCA[i, tIdx] - # term2 *= compPCA[i+1, tIdx] - # term2 *= 2 - - sobol_array[i_order][q, tIdx] = term1 #+ term2 - - # Devide over total output variance Eq. 18 - sobol_array[i_order][q, tIdx] /= var_Y_t - - # Compute the TOTAL Sobol indices. - total_sobol = np.zeros((n_params, n_c_points)) - for ParIdx in range(n_params): - S_Z_i = total_sobol_array[ParIdx] - - for tIdx in range(n_c_points): - var_Y_t = np.var(self.engine.ExpDesign.Y[output][:, tIdx]) - if var_Y_t == 0.0: - term1, term2 = 0.0, 0.0 - else: - term1 = 0 - for i in range(nComp): - term1 += S_Z_i[i] * var_Z_p[i] * \ - (compPCA[i, tIdx]**2) - - # Term 2 - term2 = 0 - for i in range(nComp-1): - term2 += cov_Z_p_q[ParIdx] * compPCA[i, tIdx] \ - * compPCA[i+1, tIdx] - term2 *= 2 - - total_sobol[ParIdx, tIdx] = term1 #+ term2 - - # Devide over total output variance Eq. 18 - total_sobol[ParIdx, tIdx] /= var_Y_t - - sobol_cell_[output] = sobol_array - total_sobol_[output] = total_sobol - else: - sobol_cell_[output] = sobol_cell_array - total_sobol_[output] = total_sobol_array - - # Save for each bootsrtap iteration - sobol_cell_b[b_i] = sobol_cell_ - total_sobol_b[b_i] = total_sobol_ - - # Average total sobol indices - total_sobol_all = {} - for i in sorted(total_sobol_b): - for k, v in total_sobol_b[i].items(): - if k not in total_sobol_all: - total_sobol_all[k] = [None] * len(total_sobol_b) - total_sobol_all[k][i] = v - - self.total_sobol = {} - for output in self.ModelObj.Output.names: - self.total_sobol[output] = np.mean(total_sobol_all[output], axis=0) - - # ---------------- Plot ----------------------- - par_names = self.engine.ExpDesign.par_names - x_values_orig = self.engine.ExpDesign.x_values - - newpath = (f'Outputs_PostProcessing_{self.name}/') - if not os.path.exists(newpath): - os.makedirs(newpath) - - fig = plt.figure() - - for outIdx, output in enumerate(self.ModelObj.Output.names): - - # Extract total Sobol indices - total_sobol = self.total_sobol[output] - - # Compute quantiles - q_5 = np.quantile(total_sobol_all[output], q=0.05, axis=0) - q_97_5 = np.quantile(total_sobol_all[output], q=0.975, axis=0) - - # Extract a list of x values - if type(x_values_orig) is dict: - x = x_values_orig[output] - else: - x = x_values_orig - - if plot_type == 'bar': - ax = fig.add_axes([0, 0, 1, 1]) - dict1 = {xlabel: x} - dict2 = {param: sobolIndices for param, sobolIndices - in zip(par_names, total_sobol)} - - df = pd.DataFrame({**dict1, **dict2}) - df.plot(x=xlabel, y=par_names, kind="bar", ax=ax, rot=0, - colormap='Dark2', yerr=q_97_5-q_5) - ax.set_ylabel('Total Sobol indices, $S^T$') - - else: - for i, sobolIndices in enumerate(total_sobol): - plt.plot(x, sobolIndices, label=par_names[i], - marker='x', lw=2.5) - plt.fill_between(x, q_5[i], q_97_5[i], alpha=0.15) - - plt.ylabel('Total Sobol indices, $S^T$') - plt.xlabel(xlabel) - - plt.title(f'Sensitivity analysis of {output}') - if plot_type != 'bar': - plt.legend(loc='best', frameon=True) - - # Save indices - np.savetxt(f'./{newpath}totalsobol_' + - output.replace('/', '_') + '.csv', - total_sobol.T, delimiter=',', - header=','.join(par_names), comments='') - - # save the current figure - fig.savefig( - f'./{newpath}Sobol_indices_{output}.pdf', - bbox_inches='tight' - ) - - # Destroy the current plot - plt.clf() - - return self.total_sobol - - # ------------------------------------------------------------------------- - def check_reg_quality(self, n_samples=1000, samples=None): - """ - Checks the quality of the metamodel for single output models based on: - https://towardsdatascience.com/how-do-you-check-the-quality-of-your-regression-model-in-python-fa61759ff685 - - - Parameters - ---------- - n_samples : int, optional - Number of parameter sets to use for the check. The default is 1000. - samples : array of shape (n_samples, n_params), optional - Parameter sets to use for the check. The default is None. - - Returns - ------- - None. - - """ - MetaModel = self.MetaModel - - if samples is None: - self.n_samples = n_samples - samples = self._get_sample() - else: - self.n_samples = samples.shape[0] - - # Evaluate the original and the surrogate model - y_val = self._eval_model(samples, key_str='valid') - y_pce_val, _ = MetaModel.eval_metamodel(samples=samples) - - # Open a pdf for the plots - newpath = f'Outputs_PostProcessing_{self.name}/' - if not os.path.exists(newpath): - os.makedirs(newpath) - - # Fit the data(train the model) - for key in y_pce_val.keys(): - - y_pce_val_ = y_pce_val[key] - y_val_ = y_val[key] - residuals = y_val_ - y_pce_val_ - - # ------ Residuals vs. predicting variables ------ - # Check the assumptions of linearity and independence - fig1 = plt.figure() - for i, par in enumerate(self.engine.ExpDesign.par_names): - plt.title(f"{key}: Residuals vs. {par}") - plt.scatter( - x=samples[:, i], y=residuals, color='blue', edgecolor='k') - plt.grid(True) - xmin, xmax = min(samples[:, i]), max(samples[:, i]) - plt.hlines(y=0, xmin=xmin*0.9, xmax=xmax*1.1, color='red', - lw=3, linestyle='--') - plt.xlabel(par) - plt.ylabel('Residuals') - plt.show() - - # save the current figure - fig1.savefig(f'./{newpath}/Residuals_vs_Par_{i+1}.pdf', - bbox_inches='tight') - # Destroy the current plot - plt.clf() - - # ------ Fitted vs. residuals ------ - # Check the assumptions of linearity and independence - fig2 = plt.figure() - plt.title(f"{key}: Residuals vs. fitted values") - plt.scatter(x=y_pce_val_, y=residuals, color='blue', edgecolor='k') - plt.grid(True) - xmin, xmax = min(y_val_), max(y_val_) - plt.hlines(y=0, xmin=xmin*0.9, xmax=xmax*1.1, color='red', lw=3, - linestyle='--') - plt.xlabel(key) - plt.ylabel('Residuals') - plt.show() - - # save the current figure - fig2.savefig(f'./{newpath}/Fitted_vs_Residuals.pdf', - bbox_inches='tight') - # Destroy the current plot - plt.clf() - - # ------ Histogram of normalized residuals ------ - fig3 = plt.figure() - resid_pearson = residuals / (max(residuals)-min(residuals)) - plt.hist(resid_pearson, bins=20, edgecolor='k') - plt.ylabel('Count') - plt.xlabel('Normalized residuals') - plt.title(f"{key}: Histogram of normalized residuals") - - # Normality (Shapiro-Wilk) test of the residuals - ax = plt.gca() - _, p = stats.shapiro(residuals) - if p < 0.01: - annText = "The residuals seem to come from a Gaussian Process." - else: - annText = "The normality assumption may not hold." - at = AnchoredText(annText, prop=dict(size=30), frameon=True, - loc='upper left') - at.patch.set_boxstyle("round,pad=0.,rounding_size=0.2") - ax.add_artist(at) - - plt.show() - - # save the current figure - fig3.savefig(f'./{newpath}/Hist_NormResiduals.pdf', - bbox_inches='tight') - # Destroy the current plot - plt.clf() - - # ------ Q-Q plot of the normalized residuals ------ - plt.figure() - stats.probplot(residuals[:, 0], plot=plt) - plt.xticks() - plt.yticks() - plt.xlabel("Theoretical quantiles") - plt.ylabel("Sample quantiles") - plt.title(f"{key}: Q-Q plot of normalized residuals") - plt.grid(True) - plt.show() - - # save the current figure - plt.savefig(f'./{newpath}/QQPlot_NormResiduals.pdf', - bbox_inches='tight') - # Destroy the current plot - plt.clf() - - # ------------------------------------------------------------------------- - def eval_pce_model_3d(self): - - self.n_samples = 1000 - - PCEModel = self.MetaModel - Model = self.ModelObj - n_samples = self.n_samples - - # Create 3D-Grid - # TODO: Make it general - x = np.linspace(-5, 10, n_samples) - y = np.linspace(0, 15, n_samples) - - X, Y = np.meshgrid(x, y) - PCE_Z = np.zeros((self.n_samples, self.n_samples)) - Model_Z = np.zeros((self.n_samples, self.n_samples)) - - for idxMesh in range(self.n_samples): - sample_mesh = np.vstack((X[:, idxMesh], Y[:, idxMesh])).T - - univ_p_val = PCEModel.univ_basis_vals(sample_mesh) - - for Outkey, ValuesDict in PCEModel.coeffs_dict.items(): - - pce_out_mean = np.zeros((len(sample_mesh), len(ValuesDict))) - pce_out_std = np.zeros((len(sample_mesh), len(ValuesDict))) - model_outs = np.zeros((len(sample_mesh), len(ValuesDict))) - - for Inkey, InIdxValues in ValuesDict.items(): - idx = int(Inkey.split('_')[1]) - 1 - basis_deg_ind = PCEModel.basis_dict[Outkey][Inkey] - clf_poly = PCEModel.clf_poly[Outkey][Inkey] - - PSI_Val = PCEModel.create_psi(basis_deg_ind, univ_p_val) - - # Perdiction with error bar - y_mean, y_std = clf_poly.predict(PSI_Val, return_std=True) - - pce_out_mean[:, idx] = y_mean - pce_out_std[:, idx] = y_std - - # Model evaluation - model_out_dict, _ = Model.run_model_parallel(sample_mesh, - key_str='Valid3D') - model_outs[:, idx] = model_out_dict[Outkey].T - - PCE_Z[:, idxMesh] = y_mean - Model_Z[:, idxMesh] = model_outs[:, 0] - - # ---------------- 3D plot for PCEModel ----------------------- - fig_PCE = plt.figure() - ax = plt.axes(projection='3d') - ax.plot_surface(X, Y, PCE_Z, rstride=1, cstride=1, - cmap='viridis', edgecolor='none') - ax.set_title('PCEModel') - ax.set_xlabel('$x_1$') - ax.set_ylabel('$x_2$') - ax.set_zlabel('$f(x_1,x_2)$') - - plt.grid() - plt.show() - - # Saving the figure - newpath = f'Outputs_PostProcessing_{self.name}/' - if not os.path.exists(newpath): - os.makedirs(newpath) - - # save the figure to file - fig_PCE.savefig(f'./{newpath}/3DPlot_PCEModel.pdf', - bbox_inches='tight') - plt.close(fig_PCE) - - # ---------------- 3D plot for Model ----------------------- - fig_Model = plt.figure() - ax = plt.axes(projection='3d') - ax.plot_surface(X, Y, PCE_Z, rstride=1, cstride=1, - cmap='viridis', edgecolor='none') - ax.set_title('Model') - ax.set_xlabel('$x_1$') - ax.set_ylabel('$x_2$') - ax.set_zlabel('$f(x_1,x_2)$') - - plt.grid() - plt.show() - - # Save the figure - fig_Model.savefig(f'./{newpath}/3DPlot_Model.pdf', - bbox_inches='tight') - plt.close(fig_Model) - - return - - # ------------------------------------------------------------------------- - def compute_pce_moments(self): - """ - Computes the first two moments using the PCE-based meta-model. - - Returns - ------- - pce_means: dict - The first moments (mean) of outpust. - pce_means: dict - The first moments (mean) of outpust. - - """ - - MetaModel = self.MetaModel - outputs = self.ModelObj.Output.names - pce_means_b = {} - pce_stds_b = {} - - # Loop over bootstrap iterations - for b_i in range(MetaModel.n_bootstrap_itrs): - # Loop over the metamodels - coeffs_dicts = MetaModel.coeffs_dict[f'b_{b_i+1}'].items() - means = {} - stds = {} - for output, coef_dict in coeffs_dicts: - - pce_mean = np.zeros((len(coef_dict))) - pce_var = np.zeros((len(coef_dict))) - - for index, values in coef_dict.items(): - idx = int(index.split('_')[1]) - 1 - coeffs = MetaModel.coeffs_dict[f'b_{b_i+1}'][output][index] - - # Mean = c_0 - if coeffs[0] != 0: - pce_mean[idx] = coeffs[0] - else: - clf_poly = MetaModel.clf_poly[f'b_{b_i+1}'][output] - pce_mean[idx] = clf_poly[index].intercept_ - # Var = sum(coeffs[1:]**2) - pce_var[idx] = np.sum(np.square(coeffs[1:])) - - # Save predictions for each output - if MetaModel.dim_red_method.lower() == 'pca': - PCA = MetaModel.pca[f'b_{b_i+1}'][output] - means[output] = PCA.inverse_transform(pce_mean) - stds[output] = np.sqrt(np.dot(pce_var, - PCA.components_**2)) - else: - means[output] = pce_mean - stds[output] = np.sqrt(pce_var) - - # Save predictions for each bootstrap iteration - pce_means_b[b_i] = means - pce_stds_b[b_i] = stds - - # Change the order of nesting - mean_all = {} - for i in sorted(pce_means_b): - for k, v in pce_means_b[i].items(): - if k not in mean_all: - mean_all[k] = [None] * len(pce_means_b) - mean_all[k][i] = v - std_all = {} - for i in sorted(pce_stds_b): - for k, v in pce_stds_b[i].items(): - if k not in std_all: - std_all[k] = [None] * len(pce_stds_b) - std_all[k][i] = v - - # Back transformation if PCA is selected. - pce_means, pce_stds = {}, {} - for output in outputs: - pce_means[output] = np.mean(mean_all[output], axis=0) - pce_stds[output] = np.mean(std_all[output], axis=0) - - # Print a report table - print("\n>>>>> Moments of {} <<<<<".format(output)) - print("\nIndex | Mean | Std. deviation") - print('-'*35) - print('\n'.join(f'{i+1} | {k:.3e} | {j:.3e}' for i, (k, j) - in enumerate(zip(pce_means[output], - pce_stds[output])))) - print('-'*40) - - return pce_means, pce_stds - - # ------------------------------------------------------------------------- - def _get_sample(self, n_samples=None): - """ - Generates random samples taken from the input parameter space. - - Returns - ------- - samples : array of shape (n_samples, n_params) - Generated samples. - - """ - if n_samples is None: - n_samples = self.n_samples - self.samples = self.ExpDesign.generate_samples( - n_samples, - sampling_method='random') - return self.samples - - # ------------------------------------------------------------------------- - def _eval_model(self, samples=None, key_str='Valid'): - """ - Evaluates Forward Model for the given number of self.samples or given - samples. - - Parameters - ---------- - samples : array of shape (n_samples, n_params), optional - Samples to evaluate the model at. The default is None. - key_str : str, optional - Key string pass to the model. The default is 'Valid'. - - Returns - ------- - model_outs : dict - Dictionary of results. - - """ - Model = self.ModelObj - - if samples is None: - samples = self._get_sample() - self.samples = samples - else: - self.n_samples = len(samples) - - model_outs, _ = Model.run_model_parallel(samples, key_str=key_str) - - return model_outs - - # ------------------------------------------------------------------------- - def _plot_validation(self): - """ - Plots outputs for visual comparison of metamodel outputs with that of - the (full) original model. - - Returns - ------- - None. - - """ - PCEModel = self.MetaModel - - # get the samples - x_val = self.samples - y_pce_val = self.pce_out_mean - y_val = self.model_out_dict - - # Open a pdf for the plots - newpath = f'Outputs_PostProcessing_{self.name}/' - if not os.path.exists(newpath): - os.makedirs(newpath) - - fig = plt.figure() - # Fit the data(train the model) - for key in y_pce_val.keys(): - - y_pce_val_ = y_pce_val[key] - y_val_ = y_val[key] - - regression_model = LinearRegression() - regression_model.fit(y_pce_val_, y_val_) - - # Predict - x_new = np.linspace(np.min(y_pce_val_), np.max(y_val_), 100) - y_predicted = regression_model.predict(x_new[:, np.newaxis]) - - plt.scatter(y_pce_val_, y_val_, color='gold', linewidth=2) - plt.plot(x_new, y_predicted, color='k') - - # Calculate the adjusted R_squared and RMSE - # 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(): - length_list.append(len(value)) - n_predictors = min(length_list) - n_samples = x_val.shape[0] - - R2 = r2_score(y_pce_val_, y_val_) - AdjR2 = 1 - (1 - R2) * (n_samples - 1) / \ - (n_samples - n_predictors - 1) - rmse = mean_squared_error(y_pce_val_, y_val_, squared=False) - - plt.annotate(f'RMSE = {rmse:.3f}\n Adjusted $R^2$ = {AdjR2:.3f}', - xy=(0.05, 0.85), xycoords='axes fraction') - - plt.ylabel("Original Model") - plt.xlabel("PCE Model") - plt.grid() - plt.show() - - # save the current figure - plot_name = key.replace(' ', '_') - fig.savefig(f'./{newpath}/Model_vs_PCEModel_{plot_name}.pdf', - bbox_inches='tight') - - # Destroy the current plot - plt.clf() - - # ------------------------------------------------------------------------- - def _plot_validation_multi(self, x_values=[], x_axis="x [m]"): - """ - Plots outputs for visual comparison of metamodel outputs with that of - the (full) multioutput original model - - Parameters - ---------- - x_values : list or array, optional - List of x values. The default is []. - x_axis : str, optional - Label of the x axis. The default is "x [m]". - - Returns - ------- - None. - - """ - Model = self.ModelObj - - newpath = f'Outputs_PostProcessing_{self.name}/' - if not os.path.exists(newpath): - os.makedirs(newpath) - - # List of markers and colors - color = cycle((['b', 'g', 'r', 'y', 'k'])) - marker = cycle(('x', 'd', '+', 'o', '*')) - - fig = plt.figure() - # Plot the model vs PCE model - for keyIdx, key in enumerate(Model.Output.names): - - y_pce_val = self.pce_out_mean[key] - y_pce_val_std = self.pce_out_std[key] - y_val = self.model_out_dict[key] - try: - x = self.model_out_dict['x_values'][key] - except (TypeError, IndexError): - x = x_values - - for idx in range(y_val.shape[0]): - Color = next(color) - Marker = next(marker) - - plt.plot(x, y_val[idx], color=Color, marker=Marker, - label='$Y_{%s}^M$'%(idx+1)) - - plt.plot(x, y_pce_val[idx], color=Color, marker=Marker, - linestyle='--', - label='$Y_{%s}^{PCE}$'%(idx+1)) - plt.fill_between(x, y_pce_val[idx]-1.96*y_pce_val_std[idx], - y_pce_val[idx]+1.96*y_pce_val_std[idx], - color=Color, alpha=0.15) - - # Calculate the RMSE - rmse = mean_squared_error(y_pce_val, y_val, squared=False) - R2 = r2_score(y_pce_val[idx].reshape(-1, 1), - y_val[idx].reshape(-1, 1)) - - plt.annotate(f'RMSE = {rmse:.3f}\n $R^2$ = {R2:.3f}', - xy=(0.85, 0.1), xycoords='axes fraction') - - plt.ylabel(key) - plt.xlabel(x_axis) - plt.legend(loc='best') - plt.grid() - - # save the current figure - plot_name = key.replace(' ', '_') - fig.savefig(f'./{newpath}/Model_vs_PCEModel_{plot_name}.pdf', - bbox_inches='tight') - - # Destroy the current plot - plt.clf() - - # Zip the subdirectories - Model.zip_subdirs(f'{Model.name}valid', f'{Model.name}valid_') diff --git a/examples/model-comparison/bayesvalidrox/pylink/__init__.py b/examples/model-comparison/bayesvalidrox/pylink/__init__.py deleted file mode 100644 index 4bd81739f..000000000 --- a/examples/model-comparison/bayesvalidrox/pylink/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- - -from .pylink import PyLinkForwardModel - -__all__ = [ - "PyLinkForwardModel" - ] diff --git a/examples/model-comparison/bayesvalidrox/pylink/__pycache__/__init__.cpython-310.pyc b/examples/model-comparison/bayesvalidrox/pylink/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 5b7c1b3926506fb279b856f55ca6120df31b8888..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 247 zcmYk0F>V4e5Jhb-0ThKMNZf#88|DHCrHFtcL7*rNjb*UKTFkDI?G5aaa;0rk<q9+~ z3k_eIKl*yo{BgbBGb6S7LlbEKHQ`Z$!W&H(kZGnlvYf9uXIkv|TIl49rLBKXFy-~@ zvih*ae(L;DdHw0MLEju$q)FXAR7mWW>yDHPQOaNDpNQY=yn?)lu!Zknd;q_98D>fa zcz4?}H$@CEvvFQ-V2bXzR562%s!aG%Xtj4IxEFwwwy;sk(V?ol<J{>I&7^rSw8>tC HNV=CRubV&? diff --git a/examples/model-comparison/bayesvalidrox/pylink/__pycache__/__init__.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/pylink/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index 1947ad354716d0293953761f0d35193f706cedc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 309 zcmZ8bJ5Izf5cR~6@X<C@Z~;&n4uB912q*xpglJZlj2DksYwb9)6WDazVvm400oR~T zOGOuHyRDe;kq~c2^LtNv^E?=AFv9Kp6(jZce)&c6Gc2}gm@~~ZSms~^z;tpCqeSy- zmalvO(K)nR!{)*i(^DTFRnV7SqYa#>tDLuK*;wMf_BNAJSu5oWTl5Y~b9^9fB8Di! z)KBb0sVGkTUG1=_qBt|vc|8_m)nI&3*68480%yvV7Ne+)LyaXCn#BJ^-=0EBQ<zH1 u{jyoE9XhXTi$`IdocqUPPNm}j(4`Fa-q`Nnq}%FF$CJ(UDeEI-r2YgLk691^ diff --git a/examples/model-comparison/bayesvalidrox/pylink/__pycache__/__init__.cpython-39.pyc b/examples/model-comparison/bayesvalidrox/pylink/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index 0bbb522855ad250ad55bca46123c0f5023076291..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 312 zcmYk0%}N6?6or$S`h(bw3*TWDDHL%dB0@zFtQ2HGN+6_7M#J1>hGbGZZhZw`!dGzX zTg=v#ui!@Sv>Pwn?{YYo!;!<`0l|6w_*8)Rs~7(#L2-#2juDC|3dGVmr9>r<be^d6 zo@9e>ie^T;qgi`vTzOsjXX(|nQW|_8aF?asZruWU8{O>*ApwMVCw>S04SwDxXFLzu z2kv!Qjk$_8uD4{?IPE2v7ulG~u|mrxdd+SoGj^3v^M{ksDPKebiY=`yHJ5b_+$?LZ z5zH36FiwKkAwm;Y<0sL7`RMpUwmPgZS@~+sw;j0<#+gQlQQda?=eAN2^hJtA!vJxZ GCcl4{ja-8O diff --git a/examples/model-comparison/bayesvalidrox/pylink/__pycache__/pylink.cpython-310.pyc b/examples/model-comparison/bayesvalidrox/pylink/__pycache__/pylink.cpython-310.pyc deleted file mode 100644 index b6ae7c14b35b60388e38fcbd3af64d04771a947c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18654 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 diff --git a/examples/model-comparison/bayesvalidrox/pylink/__pycache__/pylink.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/pylink/__pycache__/pylink.cpython-311.pyc deleted file mode 100644 index 0f0f850911d36dce30d3a9e6f59478e5216044c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35164 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 diff --git a/examples/model-comparison/bayesvalidrox/pylink/__pycache__/pylink.cpython-39.pyc b/examples/model-comparison/bayesvalidrox/pylink/__pycache__/pylink.cpython-39.pyc deleted file mode 100644 index 746c82eb52be2e437c61bd201433f9d38b8ab177..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18646 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 diff --git a/examples/model-comparison/bayesvalidrox/pylink/pylink.py b/examples/model-comparison/bayesvalidrox/pylink/pylink.py deleted file mode 100644 index 227a51ab3..000000000 --- a/examples/model-comparison/bayesvalidrox/pylink/pylink.py +++ /dev/null @@ -1,803 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Calls to the model and evaluations -""" - -from dataclasses import dataclass - -import os -import shutil -import h5py -import numpy as np -import time -import zipfile -import pandas as pd -import multiprocessing -from functools import partial -import tqdm - -#from multiprocessing import get_context -from multiprocess import get_context - - - -def within_range(out, minout, maxout): - """ - Checks if all the values in out lie between minout and maxout - - Parameters - ---------- - out : array or list - Data to check against range - minout : int - Lower bound of the range - maxout : int - Upper bound of the range - - Returns - ------- - inside : bool - True if all values in out are in the specified range - - """ - try: - out = np.array(out) - except: - raise AttributeError('The given values should be a 1D array, but are not') - if out.ndim != 1: - raise AttributeError('The given values should be a 1D array, but are not') - - if minout > maxout: - raise ValueError('The lower and upper bounds do not form a valid range, they might be switched') - - inside = False - if (out > minout).all() and (out < maxout).all(): - inside = True - return inside - - -class PyLinkForwardModel(object): - """ - A forward model binder - - This calss serves as a code wrapper. This wrapper allows the execution of - a third-party software/solver within the scope of BayesValidRox. - - Attributes - ---------- - link_type : str - The type of the wrapper. The default is `'pylink'`. This runs the - third-party software or an executable using a shell command with given - input files. - Second option is `'function'` which assumed that model can be run using - a function written separately in a Python script. - name : str - Name of the model. - py_file : str - Python file name without `.py` extension to be run for the `'function'` - wrapper. Note that the name of the python file and that of the function - must be simillar. This function must recieve the parameters in an array - of shape `(n_samples, n_params)` and returns a dictionary with the - x_values and output arrays for given output names. - func_args : dict - Additional arguments for the python file. The default is `{}`. - shell_command : str - Shell command to be executed for the `'pylink'` wrapper. - input_file : str or list - The input file to be passed to the `'pylink'` wrapper. - input_template : str or list - A template input file to be passed to the `'pylink'` wrapper. This file - must be a copy of `input_file` with `<Xi>` place holder for the input - parameters defined using `inputs` class, with i being the number of - parameter. The file name ending should include `.tpl` before the actual - extension of the input file, for example, `params.tpl.input`. - aux_file : str or list - The list of auxiliary files needed for the `'pylink'` wrapper. - exe_path : str - Execution path if you wish to run the model for the `'pylink'` wrapper - in another directory. The default is `None`, which corresponds to the - currecnt working directory. - output_file_names : list of str - List of the name of the model output text files for the `'pylink'` - wrapper. - output_names : list of str - List of the model outputs to be used for the analysis. - output_parser : str - Name of the model parser file (without `.py` extension) that recieves - the `output_file_names` and returns a 2d-array with the first row being - the x_values, e.g. x coordinates or time and the rest of raws pass the - simulation output for each model output defined in `output_names`. Note - that again here the name of the file and that of the function must be - the same. - multi_process: bool - Whether the model runs to be executed in parallel for the `'pylink'` - wrapper. The default is `True`. - n_cpus: int - The number of cpus to be used for the parallel model execution for the - `'pylink'` wrapper. The default is `None`, which corresponds to all - available cpus. - meas_file : str - The name of the measurement text-based file. This file must contain - x_values as the first column and one column for each model output. The - default is `None`. Only needed for the Bayesian Inference. - meas_file_valid : str - The name of the measurement text-based file for the validation. The - default is `None`. Only needed for the validation with Bayesian - Inference. - mc_ref_file : str - The name of the text file for the Monte-Carlo reference (mean and - standard deviation) values. It must contain `x_values` as the first - column, `mean` as the second column and `std` as the third. It can be - used to compare the estimated moments using meta-model in the post- - processing step. This is only available for one output. - obs_dict : dict - A dictionary containing the measurement text-based file. It must - contain `x_values` as the first item and one item for each model output - . The default is `{}`. Only needed for the Bayesian Inference. - obs_dict_valid : dict - A dictionary containing the validation measurement text-based file. It - must contain `x_values` as the first item and one item for each model - output. The default is `{}`. - mc_ref_dict : dict - A dictionary containing the Monte-Carlo reference (mean and standard - deviation) values. It must contain `x_values` as the first item and - `mean` as the second item and `std` as the third. The default is `{}`. - This is only available for one output. - """ - - # Nested class - @dataclass - class OutputData(object): - parser: str = "" - names: list = None - file_names: list = None - - def __init__(self, link_type='pylink', name=None, py_file=None, - func_args={}, shell_command='', input_file=None, - input_template=None, aux_file=None, exe_path='', - output_file_names=[], output_names=[], output_parser='', - multi_process=True, n_cpus=None, meas_file=None, - meas_file_valid=None, mc_ref_file=None, obs_dict={}, - obs_dict_valid={}, mc_ref_dict={}): - self.link_type = link_type - self.name = name - self.shell_command = shell_command - self.py_file = py_file - self.func_args = func_args - self.input_file = input_file - self.input_template = input_template - self.aux_file = aux_file - self.exe_path = exe_path - self.multi_process = multi_process - self.n_cpus = n_cpus - self.Output = self.OutputData( - parser=output_parser, - names=output_names, - file_names=output_file_names, - ) - self.n_outputs = len(self.Output.names) - self.meas_file = meas_file - self.meas_file_valid = meas_file_valid - self.mc_ref_file = mc_ref_file - self.observations = obs_dict - self.observations_valid = obs_dict_valid - self.mc_reference = mc_ref_dict - - # ------------------------------------------------------------------------- - def read_observation(self, case='calib'): - """ - Reads/prepare the observation/measurement data for - calibration. - - Parameters - ---------- - case : str - The type of observation to read in. Can be either 'calib', - 'valid' or 'mc_ref' - - Returns - ------- - DataFrame - A dataframe with the calibration data. - - """ - # TOOD: check that what is read in/transformed matches the expected form of data/reference - if case.lower() == 'calib': - if isinstance(self.observations, dict) and bool(self.observations): - self.observations = pd.DataFrame.from_dict(self.observations) - elif self.meas_file is not None: - file_path = os.path.join(os.getcwd(), self.meas_file) - self.observations = pd.read_csv(file_path, delimiter=',') - elif isinstance(self.observations, pd.DataFrame): - self.observations = self.observations - else: - raise Exception("Please provide the observation data as a " - "dictionary via observations attribute or pass" - " the csv-file path to MeasurementFile " - "attribute") - # Compute the number of observation - self.n_obs = self.observations[self.Output.names].notnull().sum().values.sum() - return self.observations - - elif case.lower() == 'valid': - if isinstance(self.observations_valid, dict) and \ - bool(self.observations_valid): - self.observations_valid = pd.DataFrame.from_dict(self.observations_valid) - elif self.meas_file_valid is not None: - file_path = os.path.join(os.getcwd(), self.meas_file_valid) - self.observations_valid = pd.read_csv(file_path, delimiter=',') - elif isinstance(self.observations_valid, pd.DataFrame): - self.observations_valid = self.observations_valid - else: - raise Exception("Please provide the observation data as a " - "dictionary via observations attribute or pass" - " the csv-file path to MeasurementFile " - "attribute") - # Compute the number of observation - self.n_obs_valid = self.observations_valid[self.Output.names].notnull().sum().values.sum() - return self.observations_valid - - elif case.lower() == 'mc_ref': - if self.mc_ref_file is None and \ - isinstance(self.mc_reference, pd.DataFrame): - return self.mc_reference - elif isinstance(self.mc_reference, dict) and bool(self.mc_reference): - self.mc_reference = pd.DataFrame.from_dict(self.mc_reference) - elif self.mc_ref_file is not None: - file_path = os.path.join(os.getcwd(), self.mc_ref_file) - self.mc_reference = pd.read_csv(file_path, delimiter=',') - else: - self.mc_reference = None - return self.mc_reference - - - # ------------------------------------------------------------------------- - def read_output(self): - """ - Reads the the parser output file and returns it as an - executable function. It is required when the models returns the - simulation outputs in csv files. - - Returns - ------- - Output : func - Output parser function. - - """ - output_func_name = self.Output.parser - - output_func = getattr(__import__(output_func_name), output_func_name) - - file_names = [] - for File in self.Output.file_names: - file_names.append(os.path.join(self.exe_path, File)) - try: - output = output_func(self.name, file_names) - except TypeError: - output = output_func(file_names) - return output - - # ------------------------------------------------------------------------- - def update_input_params(self, new_input_file, param_set): - """ - Finds this pattern with <X1> in the new_input_file and replace it with - the new value from the array param_sets. - - Parameters - ---------- - new_input_file : list - List of the input files with the adapted names. - param_set : array of shape (n_params) - Parameter set. - - Returns - ------- - None. - - """ - NofPa = param_set.shape[0] - text_to_search_list = [f'<X{i+1}>' for i in range(NofPa)] - - for filename in new_input_file: - # Read in the file - with open(filename, 'r') as file: - filedata = file.read() - - # Replace the target string - for text_to_search, params in zip(text_to_search_list, param_set): - filedata = filedata.replace(text_to_search, f'{params:0.4e}') - - # Write the file out again - with open(filename, 'w') as file: - file.write(filedata) - - # ------------------------------------------------------------------------- - def run_command(self, command, output_file_names): - """ - Runs the execution command given by the user to run the given model. - It checks if the output files have been generated. If yes, the jobe is - done and it extracts and returns the requested output(s). Otherwise, - it executes the command again. - - Parameters - ---------- - command : str - The shell command to be executed. - output_file_names : list - Name of the output file names. - - Returns - ------- - simulation_outputs : array of shape (n_obs, n_outputs) - Simulation outputs. - - """ - - # Check if simulation is finished - while True: - time.sleep(3) - files = os.listdir(".") - if all(elem in files for elem in output_file_names): - break - else: - # Run command - Process = os.system(f'./../{command}') - if Process != 0: - print('\nMessage 1:') - print(f'\tIf the value of \'{Process}\' is a non-zero value' - ', then compilation problems occur \n' % Process) - os.chdir("..") - - # Read the output - simulation_outputs = self.read_output() - - return simulation_outputs - - # ------------------------------------------------------------------------- - def run_forwardmodel(self, xx): - """ - This function creates subdirectory for the current run and copies the - necessary files to this directory and renames them. Next, it executes - the given command. - - Parameters - ---------- - xx : tuple - A tuple including parameter set, simulation number and key string. - - Returns - ------- - output : array of shape (n_outputs+1, n_obs) - An array passed by the output paraser containing the x_values as - the first row and the simulations results stored in the the rest of - the array. - - """ - c_points, run_no, key_str = xx - - # Handle if only one imput file is provided - if not isinstance(self.input_template, list): - self.input_template = [self.input_template] - if not isinstance(self.input_file, list): - self.input_file = [self.input_file] - - new_input_file = [] - # Loop over the InputTemplates: - for in_temp in self.input_template: - if '/' in in_temp: - in_temp = in_temp.split('/')[-1] - new_input_file.append(in_temp.split('.tpl')[0] + key_str + - f"_{run_no+1}" + in_temp.split('.tpl')[1]) - - # Create directories - newpath = self.name + key_str + f'_{run_no+1}' - if not os.path.exists(newpath): - os.makedirs(newpath) - - # Copy the necessary files to the directories - print(self.input_template) - for in_temp in self.input_template: - # Input file(s) of the model - shutil.copy2(in_temp, newpath) - # Auxiliary file - if self.aux_file is not None: - shutil.copy2(self.aux_file, newpath) # Auxiliary file - - # Rename the Inputfile and/or auxiliary file - os.chdir(newpath) - for input_tem, input_file in zip(self.input_template, new_input_file): - if '/' in input_tem: - input_tem = input_tem.split('/')[-1] - os.rename(input_tem, input_file) - - # Update the parametrs in Input file - self.update_input_params(new_input_file, c_points) - - # Update the user defined command and the execution path - try: - new_command = self.shell_command.replace(self.input_file[0], - new_input_file[0]) - new_command = new_command.replace(self.input_file[1], - new_input_file[1]) - except: - new_command = self.shell_command.replace(self.input_file[0], - new_input_file[0]) - # Set the exe path if not provided - if not bool(self.exe_path): - self.exe_path = os.getcwd() - - # Run the model - print(new_command) - output = self.run_command(new_command, self.Output.file_names) - - return output - - # ------------------------------------------------------------------------- - def run_model_parallel(self, c_points, prevRun_No=0, key_str='', - mp=True, verbose=True): - """ - Runs model simulations. If mp is true (default), then the simulations - are started in parallel. - - Parameters - ---------- - c_points : array of shape (n_samples, n_params) - Collocation points (training set). - prevRun_No : int, optional - Previous run number, in case the sequential design is selected. - The default is `0`. - key_str : str, optional - A descriptive string for validation runs. The default is `''`. - mp : bool, optional - Multiprocessing. The default is `True`. - verbose: bool, optional - Verbosity. The default is `True`. - - Returns - ------- - all_outputs : dict - A dictionary with x values (time step or point id) and all outputs. - Each key contains an array of the shape `(n_samples, n_obs)`. - new_c_points : array - Updated collocation points (training set). If a simulation does not - executed successfully, the parameter set is removed. - - """ - - # Initilization - n_c_points = len(c_points) - all_outputs = {} - - # If the link type is UM-Bridge, then no parallel needs to be started from here - if self.link_type.lower() == 'umbridge': - import umbridge - if not hasattr(self, 'x_values'): - raise AttributeError('For model type `umbridge` the attribute `x_values` needs to be set for the model!') - # Init model - #model = umbridge.HTTPModel('http://localhost:4242', 'forward') - self.model = umbridge.HTTPModel(self.host, 'forward') # TODO: is this always forward? - Function = self.uMBridge_model - - # Extract the function - if self.link_type.lower() == 'function': - # Prepare the function - Function = getattr(__import__(self.py_file), self.py_file) - # --------------------------------------------------------------- - # -------------- Multiprocessing with Pool Class ---------------- - # --------------------------------------------------------------- - # Start a pool with the number of CPUs - if self.n_cpus is None: - n_cpus = multiprocessing.cpu_count() - else: - n_cpus = self.n_cpus - - # Run forward model - if n_c_points == 1 or not mp: - if n_c_points== 1: - if self.link_type.lower() == 'function' or self.link_type.lower() == 'umbridge': - group_results = Function(c_points, **self.func_args) - else: - group_results = self.run_forwardmodel( - (c_points[0], prevRun_No, key_str) - ) - else: - for i in range(c_points.shape[0]): - if i == 0: - if self.link_type.lower() == 'function' or self.link_type.lower() == 'umbridge': - group_results = Function(np.array([c_points[0]]), **self.func_args) - else: - group_results = self.run_forwardmodel( - (c_points[0], prevRun_No, key_str) - ) - for key in group_results: - if key != 'x_values': - group_results[key] = [group_results[key]] - else: - if self.link_type.lower() == 'function' or self.link_type.lower() == 'umbridge': - res = Function(np.array([c_points[i]]), **self.func_args) - else: - res = self.run_forwardmodel( - (c_points[i], prevRun_No, key_str) - ) - for key in res: - if key != 'x_values': - group_results[key].append(res[key]) - - for key in group_results: - if key != 'x_values': - group_results[key]= np.array(group_results[key]) - - elif self.multi_process or mp: - with get_context('spawn').Pool(n_cpus) as p: - #with multiprocessing.Pool(n_cpus) as p: - - if self.link_type.lower() == 'function' or self.link_type.lower() == 'umbridge': - imap_var = p.imap(partial(Function, **self.func_args), - c_points[:, np.newaxis]) - else: - args = zip(c_points, - [prevRun_No+i for i in range(n_c_points)], - [key_str]*n_c_points) - imap_var = p.imap(self.run_forwardmodel, args) - - if verbose: - desc = f'Running forward model {key_str}' - group_results = list(tqdm.tqdm(imap_var, total=n_c_points, - desc=desc)) - else: - group_results = list(imap_var) - - # Check for NaN - for var_i, var in enumerate(self.Output.names): - # If results are given as one dictionary - if isinstance(group_results, dict): - Outputs = np.asarray(group_results[var]) - # If results are given as list of dictionaries - elif isinstance(group_results, list): - Outputs = np.asarray([item[var] for item in group_results], - dtype=np.float64) - NaN_idx = np.unique(np.argwhere(np.isnan(Outputs))[:, 0]) - new_c_points = np.delete(c_points, NaN_idx, axis=0) - all_outputs[var] = np.atleast_2d( - np.delete(Outputs, NaN_idx, axis=0) - ) - - # Print the collocation points whose simulations crashed - if len(NaN_idx) != 0: - print('\n') - print('*'*20) - print("\nThe following parameter sets have been removed:\n", - c_points[NaN_idx]) - print("\n") - print('*'*20) - - # Save time steps or x-values - if isinstance(group_results, dict): - all_outputs["x_values"] = group_results["x_values"] - elif any(isinstance(i, dict) for i in group_results): - all_outputs["x_values"] = group_results[0]["x_values"] - - # Store simulations in a hdf5 file - self._store_simulations( - c_points, all_outputs, NaN_idx, key_str, prevRun_No - ) - - return all_outputs, new_c_points - - def uMBridge_model(self, params): - """ - Function that calls a UMBridge model and transforms its output into the - shape expected for the surrogate. - - Parameters - ---------- - params : 2d np.array, shape (#samples, #params) - The parameter values for which the model is run. - - Returns - ------- - dict - The transformed model outputs. - - """ - # Run the model - #out = np.array(model(np.ndarray.tolist(params), {'level':0})) - out = np.array(self.model(np.ndarray.tolist(params), self.modelparams)) - - # Sort into dict - out_dict = {} - cnt = 0 - for key in self.Output.names: - # # If needed resort into single-value outputs - # if self.output_type == 'single-valued': - # if out.shape[1]>1: # TODO: this doesn't fully seem correct?? - # for i in range(out[:,key]): # TODO: this doesn't fully seem correct?? - # new_key = key+str(i) - # if new_key not in self.Output.names: - # self.Output.names.append(new_key) - # if i == 0: - # self.Ouptut.names.remove(key) - # out_dict[new_key] = out[:,cnt,i] # TODO: not sure about this, need to test - # else: - # out_dict[key] = out[:,cnt] - # - # - # else: - out_dict[key] = out[:,cnt] - cnt += 1 - - - ## TODO: how to deal with the x-values? - #if self.output_type == 'single-valued': - # out_dict['x_values'] = [0] - #else: - # out_dict['x_values'] = np.arange(0,out[:,0].shape[0],1) - out_dict['x_values'] = self.x_values - - #return {'T1':out[:,0], 'T2':out[:,1], 'H1':out[:,2], 'H2':out[:,3], - # 'x_values':[0]} - return out_dict - - # ------------------------------------------------------------------------- - def _store_simulations(self, c_points, all_outputs, NaN_idx, key_str, - prevRun_No): - """ - - - Parameters - ---------- - c_points : TYPE - DESCRIPTION. - all_outputs : TYPE - DESCRIPTION. - NaN_idx : TYPE - DESCRIPTION. - key_str : TYPE - DESCRIPTION. - prevRun_No : TYPE - DESCRIPTION. - - Returns - ------- - None. - - """ - - # Create hdf5 metadata - if key_str == '': - hdf5file = f'ExpDesign_{self.name}.hdf5' - else: - hdf5file = f'ValidSet_{self.name}.hdf5' - hdf5_exist = os.path.exists(hdf5file) - file = h5py.File(hdf5file, 'a') - - # ---------- Save time steps or x-values ---------- - if not hdf5_exist: - if type(all_outputs["x_values"]) is dict: - grp_x_values = file.create_group("x_values/") - for varIdx, var in enumerate(self.Output.names): - grp_x_values.create_dataset( - var, data=all_outputs["x_values"][var] - ) - else: - file.create_dataset("x_values", data=all_outputs["x_values"]) - - # ---------- Save outputs ---------- - for varIdx, var in enumerate(self.Output.names): - if not hdf5_exist: - grpY = file.create_group("EDY/"+var) - else: - grpY = file.get("EDY/"+var) - - if prevRun_No == 0 and key_str == '': - grpY.create_dataset(f'init_{key_str}', data=all_outputs[var]) - else: - try: - oldEDY = np.array(file[f'EDY/{var}/adaptive_{key_str}']) - del file[f'EDY/{var}/adaptive_{key_str}'] - data = np.vstack((oldEDY, all_outputs[var])) - except KeyError: - data = all_outputs[var] - grpY.create_dataset('adaptive_'+key_str, data=data) - - if prevRun_No == 0 and key_str == '': - grpY.create_dataset(f"New_init_{key_str}", - data=all_outputs[var]) - else: - try: - name = f'EDY/{var}/New_adaptive_{key_str}' - oldEDY = np.array(file[name]) - del file[f'EDY/{var}/New_adaptive_{key_str}'] - data = np.vstack((oldEDY, all_outputs[var])) - except KeyError: - data = all_outputs[var] - grpY.create_dataset(f'New_adaptive_{key_str}', data=data) - - # ---------- Save CollocationPoints ---------- - new_c_points = np.delete(c_points, NaN_idx, axis=0) - grpX = file.create_group("EDX") if not hdf5_exist else file.get("EDX") - if prevRun_No == 0 and key_str == '': - grpX.create_dataset("init_"+key_str, data=c_points) - if len(NaN_idx) != 0: - grpX.create_dataset("New_init_"+key_str, data=new_c_points) - - else: - try: - name = f'EDX/adaptive_{key_str}' - oldCollocationPoints = np.array(file[name]) - del file[f'EDX/adaptive_{key_str}'] - data = np.vstack((oldCollocationPoints, new_c_points)) - except KeyError: - data = new_c_points - grpX.create_dataset('adaptive_'+key_str, data=data) - - if len(NaN_idx) != 0: - try: - name = f'EDX/New_adaptive_{key_str}' - oldCollocationPoints = np.array(file[name]) - del file[f'EDX/New_adaptive_{key_str}'] - data = np.vstack((oldCollocationPoints, new_c_points)) - except KeyError: - data = new_c_points - grpX.create_dataset('New_adaptive_'+key_str, data=data) - - # Close h5py file - file.close() - - # ------------------------------------------------------------------------- - def zip_subdirs(self, dir_name, key): - """ - Zips all the files containing the key(word). - - Parameters - ---------- - dir_name : str - Directory name. - key : str - Keyword to search for. - - Returns - ------- - None. - - """ - # setup file paths variable - dir_list = [] - file_paths = [] - - # Read all directory, subdirectories and file lists - dir_path = os.getcwd() - - for root, directories, files in os.walk(dir_path): - for directory in directories: - # Create the full filepath by using os module. - if key in directory: - folderPath = os.path.join(dir_path, directory) - dir_list.append(folderPath) - - # Loop over the identified directories to store the file paths - for direct_name in dir_list: - for root, directories, files in os.walk(direct_name): - for filename in files: - # Create the full filepath by using os module. - filePath = os.path.join(root, filename) - file_paths.append('.'+filePath.split(dir_path)[1]) - - # writing files to a zipfile - if len(file_paths) != 0: - zip_file = zipfile.ZipFile(dir_name+'.zip', 'w') - with zip_file: - # writing each file one by one - for file in file_paths: - zip_file.write(file) - - file_paths = [path for path in os.listdir('.') if key in path] - - for path in file_paths: - shutil.rmtree(path) - - print("\n") - print(f'{dir_name}.zip has been created successfully!\n') - - return diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__init__.py b/examples/model-comparison/bayesvalidrox/surrogate_models/__init__.py deleted file mode 100644 index 70bfb20f5..000000000 --- a/examples/model-comparison/bayesvalidrox/surrogate_models/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -# -*- coding: utf-8 -*- - -from .surrogate_models import MetaModel - -__all__ = [ - "MetaModel" - ] diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/__init__.cpython-310.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 8c10c82287a57ba1e3b4dd428962e57cdfbc5c58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 258 zcmZ8bL23d)5S*DcQG-Gt;14|P#r}Xu4ncEKgy2OF&FBp7;_ObCo;C4Ferd0s{DPOH z*HcJAS5s6M)xO_<5{%Z%&>nbS8u1s3#VZdDn2a#ei9)WW6h`gkTAAcSq^+xDGnI9B zZlj)iV_j%+i!`a9sS3gGb+lMC2Hl;yji{YNJd5zamv_2tpeQ5kU_~|%goDpqrZvHv z-&KVzBf%_>@6{Hj&VMa+%wVfemX6xxCirjoUj>MHnMcIY=c(?DxxaFD()>z~Og*KN G&d)E$kVM1) diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/__init__.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index 4b73e63a3096fbc9afc41bae35a3fcc1d7851166..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 320 zcmZ8cy-EW?5Z<}foKXTPeFJli4<KTrpiOMVCM>KQcSw%x-X6Pql61aB9zlEpU&H!Z zE4zbqshkx9l9^$CzVCyXc^eFl8QIhN0~b`k(y+7aui2bZvu2uUFwDXPfaz=olT7mm zRvdf-(FL^qF-A3Z8ja_K+!wqZhQ@n0QxT<2MEGUeTuNn(l<#blR&2xdg?J3;gYXMC zH*=+exN*;o#VQ7ITgJO)DyC|M;YFEJd$$z0RJJx4L@X_8tg+H0-V^O_7gCm08Kpe0 sSKFgYI;k;u<@<C)`XLmQIt~C`kHP4Zo&68O4u>7jPI|9-a-Wm>2c0-wy8r+H diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/__init__.cpython-39.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index f1a3fcc2eed66172304cd27ab5fe111ca0198bf5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 323 zcmZ9Hy-EW?5XX1#B7R`N%6GV813_#=M2L;Wi693O7M4wRE-u;KJN6?aw!VkGuV9<E zxYo*7u+h2Lhy(K*hX2g)A2}Qz5sa7jtx{M&`sQzB*j!_VQ-mUl8e-{`Qlhd2on|V3 zAjRO5qFB)Gu!JbfMuGAD-d&M*Cn0&?EMx>>dm-$UZeIv#j1X_c@8RSQU$2u3UIp-h zdssGOu98jbUoxv5cxm*rjJk2G1{sqFc00LeH&t0Zo{i4=ENP?I+{z_z*|vu3dCLL8 zY|U%!r121viD5N<68)4<j?d%<!U``d->mt6w_FJAbQEILZn}d@d?6XQ%F%KdAdd6w F`v>INVKD#z diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/adaptPlot.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/adaptPlot.cpython-311.pyc deleted file mode 100644 index 2854217e56fecb2456011a91a984951fed9cbcbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4921 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 diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/apoly_construction.cpython-310.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/apoly_construction.cpython-310.pyc deleted file mode 100644 index ffab8b4f67e52a3128aa8740301f958a0d72c502..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2815 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 C4-2yZ diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/apoly_construction.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/apoly_construction.cpython-311.pyc deleted file mode 100644 index 5d2b8aa7d552e4f4afc87a25caf36ab034f31486..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5198 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 diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/apoly_construction.cpython-39.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/apoly_construction.cpython-39.pyc deleted file mode 100644 index 82737a42dd7351d06b703b3da838031ba95979da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2886 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 UGiz{V6;d({`I`N<wKeJd7wkkSHUIzs diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/bayes_linear.cpython-310.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/bayes_linear.cpython-310.pyc deleted file mode 100644 index 92d0cc0e7a0a07123fdfbc2c777d1b9281a43344..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14412 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 diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/bayes_linear.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/bayes_linear.cpython-311.pyc deleted file mode 100644 index 56cfc2006febc94fdf721712929918499cd46491..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21676 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 J8WBhr|9|pZYij@i diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/bayes_linear.cpython-39.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/bayes_linear.cpython-39.pyc deleted file mode 100644 index 063355b16a397fb5fd89d38daa0d3ca5a8506766..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14506 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 B<oN&q diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/engine.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/engine.cpython-311.pyc deleted file mode 100644 index 0a98675fd4b4b1172c75b81b88112c0e39880261..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85291 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 diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/eval_rec_rule.cpython-310.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/eval_rec_rule.cpython-310.pyc deleted file mode 100644 index cbfe4d97e8e83ebc276e45ba6e84f514784f1d0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5560 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 Z-$TZ+G!?TsR$7>|U8i)t^vVlo{{y+urp*8V diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/eval_rec_rule.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/eval_rec_rule.cpython-311.pyc deleted file mode 100644 index 1d789b4515f89e02f006dafd2c9d85b8e7bea110..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8182 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 diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/eval_rec_rule.cpython-39.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/eval_rec_rule.cpython-39.pyc deleted file mode 100644 index 27878248cbdaa2abf0af9d51d061aa6e2db86f43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5648 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 Qn=09pu6MokM(NCd0M{nQGXMYp diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/exp_designs.cpython-310.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/exp_designs.cpython-310.pyc deleted file mode 100644 index fc01f0f01b8bc70d438a3317b87d304883456f15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17477 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т#dTfa#8J56>f8$ut6T)8sKb87ka10Av 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 WxdKn&n8;-&>4E+sNkEpU=>G#}NHw+q diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/exp_designs.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/exp_designs.cpython-311.pyc deleted file mode 100644 index a392bbec968c4728540bfbd2470d6cd4efb67faa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19240 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 EKZ_o%W&i*H diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/exp_designs.cpython-39.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/exp_designs.cpython-39.pyc deleted file mode 100644 index e7e0226dc1e28c09b9cd09a610599007b2267e3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17597 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 C=1mCz diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/exp_designs_.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/exp_designs_.cpython-311.pyc deleted file mode 100644 index 076580dd7fa9e11559ef202903d44e00e25b8a26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20552 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 diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/exploration.cpython-310.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/exploration.cpython-310.pyc deleted file mode 100644 index af7431ce432969f095d1c07f429b8129cb5a2def..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8154 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 diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/exploration.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/exploration.cpython-311.pyc deleted file mode 100644 index 9a435919a7163073324fbaf96093a1aeb0b6387b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12447 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 J<tq{9zX6T_0bc+B diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/exploration.cpython-39.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/exploration.cpython-39.pyc deleted file mode 100644 index 98964152a4ea29f85f061ea6ec7daa3df7487230..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8190 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 O{Slolq(+zPr9T4XZ>fI( diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/glexindex.cpython-310.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/glexindex.cpython-310.pyc deleted file mode 100644 index 16a383b994853cdb226f7b7fb291cdbef789e1f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7185 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 diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/glexindex.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/glexindex.cpython-311.pyc deleted file mode 100644 index 7ffc6990e1d99e9ad0a3c41c689e313d7f680d8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7922 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 Wo+inbZDLn@!973%P}<#K8U7ceBaZU` diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/glexindex.cpython-39.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/glexindex.cpython-39.pyc deleted file mode 100644 index c3f24cf9cb753b59f9e226f828a7c3598ac65a9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7232 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 diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/input_space.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/input_space.cpython-311.pyc deleted file mode 100644 index 2ff32cef7757bc4a20197f768e3cbfe819f9d428..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16824 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 DVw1w# diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/inputs.cpython-310.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/inputs.cpython-310.pyc deleted file mode 100644 index ed2b0f6f101965fb42fe059ec79e8084a4b3a9bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2413 zcmc&$&2HO95GE<=$Exk5b`J%5Sp;rf0g2e4$i-+38*SqTXoVt4f!2mWued9jDYYx_ zE*;y*EqR6B+hbmdKu>*(o;ow6D5(mJ-ns_IoZZ>knc4Y1N^fj*Js9Ekr}DS9=lzAs z;%I<!0FPxLjy&NB|1CUkf@9PI(EzOhnlHlVUay&e)zSz+JAlXTfRG;8dB=h9j~gO5 z4n;$RZ@uHDXo?p6Z;3Ye=oHPTYMML#C+zJq7>6v$xV6k_CgdnplDTuqa+OHqc&b>6 z=4{FhpGYT-?RU#<&Y5(WJ84OMP!Cdn;AWgEo>{iX^zbFk;bF6RoRo>PefC^Rc1CB| z{%rNEPaB?TE7dUL&ViSq)>-Z5>4?E%z3L2CcBIXOyHrEOmKk}Gr$!0}vy_jJQ>lbh zuFR+Qw364iS9~(fma`)3S#XvmT(P07swEh=a7vcxSE(BBmBrcL-)B^2+vh^WlUX%B z?~$v8<=X4X7pHv%C1#J=?$7bV-CGSsYF+HEr(~V06m!3Q$2?Cs;N-!h`|Qza87tHh zF5E~go6;=NlL^#NaK~|mU-B&F!%W_%GM3Fii&YiI>7`T@?Eg>)3MZy;9+wwO3Wf6` z@c|UGf$xZxui>$GL5#iEUJO_R38(>N1cN8NpjfLfr0CB3@10+SR%WAjo@v3}zki7) z%0)@^lLbIT=2v~5opWxZZ*-DRpvi1>l)CToVe|yr;z#bzqanYR7HcVtzKU#aj2?3* z<B1kBvrz?r>2=YG<5Z<Cj_+ZlA&8dW^=~$*o%*xImE4d?D7P(mdF{RQe)nDQ#{0wf zAxF&a=7Oq%AUqTTE|w|z>fd-o5<v8q*IZ(>!aHt!CS7h+33${i%-4<wTFC|TL9b!3 z=0%H75q(8xR$PO5Q7KCS+~^e>OHla?rY!E>TD#dUlV4gN^x9Y}giIV4-54vGXZXGz z#}_%zs+D#e3!T99-Koy5<3!8R$i}0Lk4*=I_y7f7>Vm*<40a5LX_3M^Ug(FPbb|Ge z<`bA&8W`vSJoaM{%S4PM4rELOZqOJ12&}1QhpOU1K%GLe1qPw|+o?>_QJN5+S*8i1 ztfmoSHOZ6nIZczl8sz_pqls<ym<1kJ<M|yT2UQ2o{jnF&74UiBc?Jw>+1c*SRs3*g zw_@r!AKmH?&FG^6EZtvmiQQBAs}IKSM+Up<@V*CSB|M;HZH%;2tpt^@?Bd1a7_udu zS-V<HXW?w>{gPAm7&nGr*E<d`d72>^RsccbS<U0*w8~<li3@H^p)x7IcPpUAt|Cz1 zgBPMI_=!*w7RZ1otU)tjMPWBhx|d$F2=RK0wfbg??!2f)cb;U?u3~r}CJ7=(a5#aW z<(GdzM<33RTr<+3*EH*3X*N)7qPT;CK=wX-Ar!uZ$KoR5YkiyGG3W(^F;W&lNj``u SI$xDo-$#fNMQ%2>qJID($9<0g diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/inputs.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/inputs.cpython-311.pyc deleted file mode 100644 index 615d2fe8b67cb014059c4fab5f06344ca0878adf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2894 zcmc&$&2Jk;6rXkM#4%0Uv_Z6`fe{J>)5fBQ_7KrX6@^k%a!8AW5~rK-&e++o-gRcy zX%cbhfkO|yS4bdnDysUQa4HCiXeCbk1Fn)&PrUbbckIL{;>I|Bo;M%wy?GzMmtQ6( zDhx)mdZ>OKW9)Ba@=?qt2a7Oy$|PH11$LWB=X)j#&kBsafNwfh9NHOyo#L^bf-K!* z)zQ7nl{;al8yhY{$+ZeZtR!y>-SR^baOs;^`;BhwN1>^Bxm^5pGUnhtm^@{QtvFyx zK{_iVvanK=pme1qi$F(HRY{37iNC<S3Wsr%dx0>9#}SvR>4%EP8;W;BPw80rA@|WR z-Vs`~RjjnBRnlv5YLYU<&f7ukSDERCFYu_bNo%MqU&lq|#iqvZDaF@GhpFYe>ovNt z92pfhz!xz{X+%+A#oTFf*tEN`7NKcIx-HN{+&AFDt*)=Zhp<ZTk*cFYslqsYkCim^ zuFrNvyAvFJ6`jtFGu#s)Z>Y>$k_!V`f*^Y6hpmOwIg5*nJPl|~Na?n7Z+uuKQ3Kmn z>gva9wGdp)Z}7Qq+^cgZ9>j!j<J}IO?uI_T{p1_{cY=b|`D<7BwYAh%@FfIXD|A~J zaW87O!G}`B0$0Sg2z=29)D?1Lnhdm=d7<TRtB{QSAN)Y(xMa?aG_b^wIrqK1Hn2pn z7)Rin)k%we$6Q>eAsyiCY001@3rn9@3(2?*Pg3b;<8vn|8Wl7RUg57Fe7aEo+CXL0 z^|#SRupxx0--^6$8?w#RZ~O5V-A273c9lV2N*(RgjrNYObhVCJQ1)&+k}5FutRy<S zN!fM%(2rerZ<2DVmh<m}dNU2=5!=7;_T%D{$^DD(!q4f)@HxPj9dQ977P(*<CQrcu zn|OrA&-U^83jW5WKKBf!FD&~E&cCpC96&vE+1?g8o<K!P$Q>T4hsR4EaRvb<&7>3t zGDyLT%PQ__06CoF$Y90tOHrr>jxSY5G+LRAiVhZdQqCi$0kBybAw7;KCXQ6%-nrD5 zM;5DiWfsUI);r6_C!S3HS)Td5JoD4W51T)3{#LI3QLets|MVMhaH%?m@xj7%-K64T z^tu7gPr2?^R|MJ4nCr^OgXJ@wDA;wqNHv?rZ3d#HvBl`qK%O%aN!Dr%6cKvHE#My6 zPp@#XRPHe(*V*|?FN@Q?Vxh!)%#!kW>7yPSCaD6H?ZMZMJdy|JVd;1ifz|<S1mauN zldvtOZQ}?t6bH-*u~h*6QD{v^d4ALP2#pPo2w-eCL$uUf32&p{WGK8AqW)8dA*@{B z*ciiBKRpmZGlhM5{5~WcG&j)=0RIhNpPSurug=b8eWs75C(0Y_!nGlhn3$P7s~Edq z08nksy9>;adC*WIt(ECSp(Gck1v03PBi55nD{AmL1G=fKQbb(fLTj;WZ`|A#et=M( z)gHp;@H<x5vRAYt0<e>wkR3_8^%1PGaC?_BiU8K8n?&%<a}NG<0uIm9AYjG>r9pee zK1aa3SEA@uOGy!vAQ`vuODcWWCzZY{lCjLv<Dfvrw>OnzhDFvdL8U=70A!s;WF6nX zFp~o8I|#7*7cbGzTex@XF?=#KDCskBOHUy=i{u;<D)BdQhM18SIMxys)ODDcc_4!Y zK7|F2<bzV_QjZOjR1yk72qY~886@_os@LUDQdC;hGjJXqZxH%>BaY+rMhi|6kON5h evIC$oOkUyIVSnR+bHM?dhRG{jJN%aoGWH+Aaq$iS diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/inputs.cpython-39.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/inputs.cpython-39.pyc deleted file mode 100644 index b0c91ff3182adb1245aa7f20656e8e94336a438c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2474 zcmc&$&2HO95GM6w$!hGRO%DZnSp-I10g+lG@Wp5h8*UpIXoMn(fxxCgued9jF}b97 zmyRvu<~&9Z?J=*=Yu|!EPkoD?Iy0mwsS1qVy2g&Vf3rK^&iAeO+FHkfa{K!q;;`j7 ze_><3)S<Bl)i5y69N`G}J=ELUF}7-=4y`)0T+w*xbejRpS|~MW?LjpgV59@{oa35s zkL#j#+z@rqc<&rHMN_Q6{}s^!AMLz(sM5^xKVfZ$LD^?P#EoG#VM2~VC7C^!EK`Bh zmWPUkIGv?j^H^G`O}|qtvsQ=0%t}MeUR9|1oa=F@cx2cPONMW#4>z0kW2X$P>9dzo zvNPJl^rxd|eOmA$F;Wd9ZY_8jCP`GeIUF$<tVXTo%8U{na~mdbV#Bn&%t9>%gI<b9 z$W$sJl`Z0_JT1lb!!?i7XfZ09Jw2RZ0at7&OSA;z26l;}<ZY<NI|VqqySt2FHhnIH zA5YQvx=XI+hAXcp-=6jrK+K-9&DZ|c=A9EoXsmB<QktEq5M#f4#Vk(P;H0<xm~EdH zX9X<b!nH)$RKkKJjsZi#Eyo^y#iNi9Bl(zMERul+OBBZ8l~i=t{{aU&j!(yVT3jqO z=s2$e7f3NJ_>F8ifNCCq89VPBAGih<SOd(c4Swv_^401>^3E*(KDc?q$Y}Jz(JQd_ z?_Umfydwi-@U*;0wmgx=*>z!iF;GYYXcJ1t-biwrY1unG___D}(etC%Px{;5FbgBm z3u1mDJ)WkK7Y3;(!Sv#h2OQ*)mL`j=x!O91?75ISQ{Ir@NQ2iQbaL&POzULKt@PtW z$jEplhtiw8?fan$t?xg=U>jf@cg3BoQ%3fugG=zB7!f?5!N)u2jq|H(Yq!pCt_v_B zK$A-X7J0lc1mp%&^6kGVjXHt?Qe;X&^HMT!;R^|9s6sQaUCKt~c#tSLH+|5pYrM96 z1z-XK=k4kJXpD<)qc9+^PQJFlwy&Ve;A&@e@~{YgVSLbSAy&vb-_JWfBAG?_eb4tV zGai*AE#DVO0NoGLB)ai~M2<$rA4Pnu+u&S(f(G+q&fsx0CLJEr;Iy{e__9%JH>fv& zj)j89+=FVq0JEs%_zHlU(+i;SJ>j3jY(i{bl|l-%RjAe=L4>|ZWe|?SfO62VggDMB z9U@tjJUE}}Jo&3s;y;Nz$<+=s@DQl+>;_T9$_;1!*el2hcwabVHR{UQ=Ek+ZwXs=B z{Y=pA^oP^v)d89BFS*3rDg9L&;{z1Is_J+@L1XE7py`PQ%B6`C1YwcG^V>0$TiUa7 zH6PC0-jw-;DD5z=HNUA=>|gOPLNzVvfy%WU$H{3KMV!R&V%-@+Ii+|omne-{MU;L7 zAEb5g8>3J>ur<=aI`uS44V*OTUb@Y^f!CX_RyUJ(W}xPsS&(_FJj2HrNd$QYn;ZHe z1Ts|oO+KCSxYDCRx2f;JOudF?9nF0-M6r*t3q3x8N(u+;dPw9LbZf*gYRnOmJdjAV PzbkmYOVmV&*1!1&Ix?AS diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/loss_function.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/loss_function.cpython-311.pyc deleted file mode 100644 index a1e26394365e683dbec6da95fbe223ebcee10ef4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13488 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 Bp;Z6? diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/meta_model_engine.cpython-310.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/meta_model_engine.cpython-310.pyc deleted file mode 100644 index 7ebbfad9c34b1f9e6c819ea7cf7852af65591444..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42392 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 J{$pjC|2Gc|fYty2 diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/meta_model_engine.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/meta_model_engine.cpython-311.pyc deleted file mode 100644 index b2b3f8f40181637b13ee1156ffa8a03c1ffce8b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87269 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 diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/meta_model_engine.cpython-39.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/meta_model_engine.cpython-39.pyc deleted file mode 100644 index bd6eb8fcd459fd95ff1b85514f996344b6e4880c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42705 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 X0Qd@E+a(_g`Az8O{>jTCN=^RXpccWy diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/orthogonal_matching_pursuit.cpython-310.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/orthogonal_matching_pursuit.cpython-310.pyc deleted file mode 100644 index 543416416ef052c2402c2e9a97976dc4aab22866..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8915 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 StX4>a*409eT+%Xuv;M!r+lnOs diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/orthogonal_matching_pursuit.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/orthogonal_matching_pursuit.cpython-311.pyc deleted file mode 100644 index 9e909177d8f6cb2a1722e871da4bc92ebfea493c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14802 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 DI6|^A diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/orthogonal_matching_pursuit.cpython-39.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/orthogonal_matching_pursuit.cpython-39.pyc deleted file mode 100644 index 9f1ec9479869fec42f363e7f46e07dba2f1c6be5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8930 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 H7PS8b3n7jV diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/reg_fast_ard.cpython-310.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/reg_fast_ard.cpython-310.pyc deleted file mode 100644 index 97ed55acc1e800a138ddf489ccea709a8b28f634..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11629 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 avA&6Yk^<6Wno`U`AM%$xPx3uy*Z&u-bVhUl diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/reg_fast_ard.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/reg_fast_ard.cpython-311.pyc deleted file mode 100644 index 4ab80e19a7070efd8d180d21c3b492cc333d73dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19757 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 diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/reg_fast_ard.cpython-39.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/reg_fast_ard.cpython-39.pyc deleted file mode 100644 index 0843cdf8bd820d9cccfdcde3a1193f3f416ccc10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11717 zcmb_iOKcq3b**3jo6V0Xk|H&7Nn^`w580G7AKS{<Gqf}uE0GwD$eE#gIIa}Cs>vd& zt6HzBB{p4+EHut0HX;N85(Gvd2Hwmj$Sy!O0g@n_1X*O^MInm>Ss1fRwm|^p+*{Sv zlthhTBu)0~SMUG1@7{CID|2kDEaCI$um8>}-jt;Opof#693I}qH#kCINlnR;Eyb0a z3Vu~r?PyI+rZmmXb@I(T$8&C>Q*0JFo_9-~a<j~F#jP|eC|hu=ow4Q^rxnpgtyx37 zWR*XYn&a<FR>i7*CRtUxY!@GC%?V4{km_ScZ<cQe+YD_>_dR{HXX|%Np<jDLzxwU# zZ(P0p#+&-JE7z`+%kP@KaL*Ul^|mP-tNaCqEv?t(cp~uK2euIk$Mkl4t|^dKx$StX z?(Ta+`1Dx2XYUF-2z+tJIdr_VfNhF9zGb_3EVcIR)`78Q^zo4EI^Ki5R*5=DKj-nA z$M*)l!39N<Lg|SdN&8r=bJDRqC`F2;oRK1RP8yV>vLzpAQO;5ilxb;D$(}WSu11xp zIxCG!gRw}8D(9p~rcjXvwZS-2s+>ZhMsbyLCI*v(DddfD9)%jkIq%G1dT=&UsVtA7 zOfig44W)hUSl-XgN(<6p#>z!A3lhSq1qq{^jcQzad`^nS7pQzb8c)&|Fr!&1Dn*sI zr3jmZc}=3;?1DrsQAsNwO-8fRcs`a<zZ6wb@(h=pj?T`FO5urmOG}NRR4FQ8G$piB zh)P(wImC()#yl=z{8+bR8KE*bN9kcHnu(_7q(^d;&vNE1b+8bfdn}7TiRLM^G(2n3 z!Y;%KEzKqEAm<lY6?&o>aQXtR+Z;xb<8<uLV@1qZ*ego)-c8f7Pn6Ch%V9jqL5`lI zIT{&aT2y?j1T&VJ)WbTL({|HQ)C)(yU)J&2uwA<q1`uppZ$rj=!q!7y-?4SmvTSQb z*e$=)?LqceAc!`d0c3YbD)k*R;3L5e+3hwO(w$I$=(w)FXFjm$v^+3foEN{XyZ)}; zF~zRqnXc|S2e#|%`M%ZQ%0h<NegUbK);52M5TE~i=L<@#S7OEM#<?R~_(7Zt_ROvw z=h}|f_Txg^_0910Yq4r~gIGlmaUMN%%)?j>dYxD`cY;{Edux5Iem<5zh~<q~z8}j$ zEU%(qD|8;%u^RerT=I;->~vi_Xck*;+t_i;pqa-ML-Tf=3-|2ML}QlKEM?0PQ#O{P zseM2h+6IRoARloKS2_Fu#gM|`Y7%<(L+B!E+%Vnlp4l8r7v69@%RX$5VJx<hreQ>$ zZ*Xbo0N;CHi(T9LToRYCIRE|UH?D7g7}z4%7WRREb=&H7dWT84+;Kcxn67hVhK}zo zr|m7@x^Z{;=7)Da+<Lw7=Jrm{ajoT6$2_pN&2HD-c3RzS8^Lm?y^TdST_~lV8wL-q z?io}{^t|mIvu_93SH}|m;dao23fqNpG*~ETB)dl23_`;cR-@aGCwpCsvb$IhC%{mG zDGWV$8-bLcP^<C;{>s{vd|p1UU6Lo%%knqm%W_dIt8?mnPLr#$hNqf5C)eb%dO@9# zi*i{JUq$^EHFEM(#KXJz2I~lHsVT#5Km|5c>#S9<il50%E!Fn9MAu`R$E+H(f5Dou z#;pmIC|a}Dq&0<D$vR_ABd=_!umf}PWU8exi8ah{_1;bMPthZb@F)uhAl%bed!gUK z(zo<`5R?a|*Ru7S5Ey}d;T_QzsSW)j>>k?Fdx0G!C$ejbz}CM<s|<so--Z?N9B;SI zxqD&Q4X&@O?4pm}P6LN?Wwm1-nL&4Buh(%7R)PbUDlGFZt?an|&PoUU*aA68nt0Hm zy-D|Lh4%_+*sC&kan}?OK-5Uavz&c6*E1YsUDq8iT+;n6$rcXu;?4KgRzJMGseebm zdgV$oR8lW@%tNQs>*!vuvttX=15}&mA0)j6p((=a&<Mdx+FOTe8Z~&!b3z9l2CTQB zeun3yku-<n4EsxZ;U%N9mtQ~8T3d&X@LlLPy|oAHY-3(}CaF5MB3TN(?F;>(?d<MB zS2_Xoqw7D^!#y02J>Ru>WoW*pyXy;VO-IKxd8h3l9a-B6alnz>vb&*vUElG2?38!< zFgHc-#H1fW1MOk?pm|%S+X95Zc#%SzkhVwT3->TGK7|eaRvSwcX5&K5w&@1;lJ5B@ zYO$(@u7~hhH1lEWbV{?ji*{qTq2mmjG;{l~3q7Bh0kRU%5T@1FTQ&{Fw(99@TYk51 zZ2fxE#F%N`OZrw~L(n{$act{1beqQx<I*wvWSo5H!G~Dr(Dt$p*-RNh%ZCX|mUl_F z?6wL0^_?}Ed^V%3qtv$XTE4_U>1L?gW@~RGxFp3`{H!%P1f5jPrh~!gc6=P-U$M(; ztG74a8%ZNn0oS4})UoHD4w(sY^m%-|v5AnchQN|L5ZY5uXv??T2D&zdF#Ah7n@pU` zMK7}{qb_ftY};u$*gaqXo|g^<PEeGT68EVub|9ye+x1D2I1n`p$CZbGQuSm|Y|E%$ zK7GU0u>&j)L+8<{O8fDA2YbQ=6Jva0&{o**+8DIgZO}RS@>!73@B#H;=Ljf3Y(~>s z(s}cBpN`POtV`GI>{#ZBF28J@PMJlvTqpZVW)nETAYa}x&fzJ$G3ut}KY$OxMgyxS zoWtSfq&jE`Q%qnPK$hDduJ+4UAsrbVjvyP_GT|_4Ihi{ogtW8q+SR3zgy5_UyGqX% zlt6M!Gi*ny=w-)ek<nx}K!7tkEKn3LJy>j2o;y(Y>^8IuZ0M;H|H;))vB@x|rvOZ( zQIA1lb4g7G&ly-2@}%9xO{WXrYFEFE_IfV-x+|~O^+hteu(=N(K5W3m+F??Njc*rt zR0J!qm&;^GgB`cgwc5$@eRAzneHGTRA7II7m7nXF4K?+4O1D=>JMd-Q!+M1RrzdFa zg`HPv%-7d%-QBp7R{vrN7<&De|MU5O{mY%5yYFnSJ>xTy|45jdeMZ7#@be@?iWG!0 zJQK-KLiLe^Uk%=aWaQvYNJc)&BP>J(gvF?cuw+SqNAh~T9On}eigRq%1$m{hMz%dJ zuwo93c<dQN2<+{P4#8AA&L>7A9!mu-k+-;zYSVft)?oJAViB#1ItA3eSfXH=f(8XE z6kMTzAaWACidbAUV1HqRjX%T_gHTDy%k)>|kYY#kBOFH(1&G%eR%@xKH~bV3$^7jr zSY`Oyl9-C*eRzkK@>6*rhswT+wUqZYOZ}-bz^d-KW4AAz*6a!6CL;_A1g0eR{L z@iXKVQNCp5$%{_wX`%9@jGPK;70yUW&9EBDk7O%Po-BM++L@fC9jNSga|}MD9BHqh zZExnK?T$qXYUeRZv@}q>ZIrCNFaq`T`jN6fZsp-`$^xU=*PcvR@Qnv~?yrX2XXk-g zqaPL0qqTF8m!kQPShgFC8+6mN^Z@9?W}J~Yg@mV)>>xoO&?M|uvN>WsZ@NB?4-R;s zUt!GijBF)VU-w0(eVoL?Z4r<$hvzX-u#Ain6hlW61uOv1B^_oKm?;ra)*)GAEf_^u zH#ob5gWx>@sWkLW=)!i-gLeu0DQq~@UcmMnCnCf_a9V-x*-&JGDf&QkS#xlYfVx7_ zgBMK-)$!nV^Td|`1{@#|6ToK6@Y`)5yCuD!#kO!zuyinzz1CjVUbqM3LJj%75G`ft zw5(f%2e$O(thu_rf;cym6-=LLDX5v-*LWRBk)5nL+N)UpE#jtpVcFtyMA(M2XOAb1 zHc1fSC&)*uPx4`nH9GR5f|R&mVnu*h#9LH|4mFZ+^vzwHPj{?gKLRmE8Cq~(gyIZE zRoC`njYL9JIm@%0POK4rs29XlN|Lu?xgQsYOBWZ?nSmt;t++T`$mjLN1i7qT;nQ9j z1b_bwjRmB9q)J|{DihEiHP#(7@>k_)_@py(nZp_QtTkmuIl6R;HhHemXS51wESg24 zku_rR=+uNV@p#ZG+O{%~p-JR@6)|-Ht^7oz635DRj&cUML4HtRJ)L7coo78=2xV|s z&@5DPP|TiWJeBZNW~Qr*ScNr0C8`iND1HLws%nu{sCv^@ZkP{#tO|w=sTkQ9Qfm=T zKA1$r_s1g*;e=Iyeyc&RO<KjCOgbV2KWLR6L0<$_N(Yx%w93SMp}h(8Qj5l+waU>r zwAciP71D3f7^Qo^hkni=H%E2mBs@){pR?c(XAYnPF<uS5tf%R-lpc*)>f7M#z#8J$ zyLqxdl$(ntps&VX*7M08h*wO;0d8+{R~k%(=P-x)NAgYSvHa;j56<AJivIrztNu){ zmOPl2rN`?12VfR!R?#Z{SZOQZ{5TfXC=PbC7}fBL5%cdX_H`kejjGYvXy#bkRtIx~ zbAx%XiHf+4ah-|I(JELf_HV(PL&|x4%h9=G88cb{8(R6MG?=7c<^%7AuROV6RgYyE zcIwGjFp@HQoIwxgu<F%l{<yTQ4bBf<8C)2Ah1-YBk;I%FWi)rJ%t_QQ`p_diQn4l# ze5HN;K*GrWmU|haUQWzf<@RdCuySlRT9`%)vydV5tiwW8!;8^Zq6^V0(RrFbwHK*Y z{!s}sJ~o)f^QFhCxD-u2c@?AoDy<2v%`s$-=Cl7b<h~nTwrWql9-SHXcC0+2-08<^ z@KHp&GjBnf*joLZQiYq=bWwAh$|k$?Sib-Bm+w@vPsuJZw|#an1E%`KZdvkij`!>0 zU>;+^X*j0yvlz{xzs0Bq3BQQvI?dDg23nGg*RT$fu@qsZ#xhD>daQ{&>NcV&uDgP? zD@eP>Er6Xyxy6V|6zQbzFYcFUXOMc;%Ucul8xbO#H2)YDHq+;84tzWS8W2*MgU3|W zhJC*WGfcF~#tDe3<9;F`Gg7Zs$LH>l5gG9V89%hVob|PJUH=hlb9OOcnUZ!BQ#)WV z48%u1X-d4F?hv8FO<@AH!6K6eUILmQdP5*0ToY894>QWn(hm6B#Lc0B_EQIV<l|6> zpPbs^r`fovLr}<em=M<|+PjyS@~mV!>+G43DV$$_XCL%PmP#W@YZ7JE9$CxHy26$& zF7*wtV{ofmY%6zvH2oLv|NGHr?+AkDYvN6W>#&4OR~u|R*^D0j!3{7^c5u)K$w7eG z55SB8bF@vzwXKVz-D7G|=PRQjl7LBvlj=Ee{Y@`)`+5L6%N9#I08-!YQ4RgxNB4-$ zC!}OOfZNQ(e@c>JH&cp`wi2|kXS+xB_e_DN;6Y{-rv=9xsLcZ-sl!j=8v;PIqc?7$ z6r(A~$&~>%KjR07d>+wJ1UuL}L#eBSqqCVn!X-_aaQ)&g7KlIfYl0AYiYAzac<T+u z3*!4o2mU`a2qzfLg3;$#oJSI20M+utSl)~^%Q1Ij72*`<5Ey-NmRcm=C`A{<MzHS@ z7xn;HK*TT%5j83@PQe6%^lIYjTY|XmI46i&WWOaIH!>E*U>4=uRHFDWA$f6ML9uw! z;1lD7edB%)-ci_3d>taa*~7sFMz?EwRy+yE8`OMqv0{)z&(06-2nE=|I1i5(XC}@u zD-`DwZbJMf4>ILI&=%c87~&!iHbG&pQBRD*${EXO)Gslj65pdt0x9AZs!|@28F79q zUD{-cn>m0jtgy261AMn)b!*EK_o$M#gKHHrPmL^4Kn`830dMWc)pRwCwrlPR8c8fW z$>>lYcQIQ(Fk@vE-#cEc+;ie$D?JO%+y-r-I7cncQ7}uv3^k#OAc&O>?|Gc3LL&bj z1%kgsAWZ_q0m!jqsMYw&p{y3^3PP#Lc?Fjh${c>H0Dkki%kq?5&Q$^Xinzq6J}s*n zN=_(6JX4*#a-L!;wKs*jxYUr#`3X7yw5nZJ0U4<bE<TF5{?MKl(a#L(=H>F!Jn9g* zENfSA@j*Q#u4>}0R#CDl&jElQogHcOp~H&#wCM7D_#wzl%7jtn&kz9;lwezd6=6f* zlfj<Dn}@fm!p{eqWUNV6tT-s)wwMqiFdZSyePF=-JZ?q{$H0yezOdt!EMLj;E1VCs zi9Fy<)WK~n(&*lnaAeT}F4!*<5};dJ;7QyiPm|Tk9WC8RxUIzRAYuthhIPRy_lKMC zIm+#x>l)0Nv4Tuh!oU4Zy^@@NaxlbQ3O=TQE{DW#BZ%`ZU2^S0?r@_nCMij^>@Zfk zPJJwqb)O1%DY#F;0hN*0WBE=ZyMhvbhk}rEZh-qBmhCwy6WhrB1m-v(sgx9Q6sofF zw5nc$j7&UL<f*5cdi3gxyZOTTe#T=UjYoUUd;3R-;7(Y^9^&R7`-45j+Jc1;KS5j* zOA+qepX6xA+jJK#?dQckE=~JiJSQ<1LA6WCGw}z&$GATRMh6Ron`H11{AK~rWQ4u5 z6k<2NiCnZiMra3Y1n!-=eO#Ma8ttk16ZHfV$@Uk%kmaytdxlYF8WZexNOu?`lX>?` zN;5^zcNAS8`ijgJU1`G?v^}D-O*ga2@0&fa+i>2Abbwe18#)sHc0gA^M5e(OleydJ z>&!Gzv5bv<=FU5@?(GKgj~g)iWPV?7yxzF>{{@%^ClHcB3-WT9M62~{LZn{>X_8wx zI(+c4cX6i~KJ@iZ`UZ%FC0Y@Rd^$p0v>IR~ka(T!dAFb3K%4^hlBtXsPOg~-?`0PT zOfM%iJ3}(sQJ{-ND)dFCVK<Tu^4r<oo^0tQ!j)cEoGh8n<^MA5kA`$TR_i4lXM=o> z%%+iyFmzUmgz9?^t{1yY`i+Kur=c%`j()4&00zgsmmqej<padA*pZNSa7~3vf9zHQ zCPpVGATR&~GD=}|neZ{+gw|NE*BCb?s?k7-uqa?lUFMfB5^TXd>ut&+2qErJutNcn zF^L}h4r2BE2q?tmga%_AkYfR97Sbhe761-NWS&!(aUosA{Y+(^pH?(tT=3;L2ILE5 zc9o-ZFRIM6Zi|%T@IywBm?u`0|B48ak)SN{tS~7A2}&vruM8>dz!r`os5=#A59uIH za&Z2XNQ25tC|(WJ3DQ94mXM+nJu@g%3fd~bR2D6bUcEvNQ#W|cDkmNz4~7tRDsbJa zaKo!np{;%l!-sff82?!EzNJZFx&I4tOEDUCPzWng{*jD23bz3o^_X7X!pmGq8+qvm zXypoCpn}59AMIy?bYpmBjLTuV$RklX^?oS>rq3wjtQ|=9$-AzREWwqDtI7LmcxMDx zNO6wci8Xd;*6Y;-l7sk%l_q#b>NqjSeQX39PN7hYZL(_j?Zj-eord9%1kvq7gUpbT z%&>4M*rVVOK~vixBc7Pyd$HUUY?}khe?S4TYf11b#Rv+JgB)B&M9Kqu$(pL*g_LP| z3fN3}npZSnFc5voD<}}Vql+&J+jDrn#V<8di}(=kBq3y>JCD8~LL_v=z9etnl>`P% z7Mq0X#|i`hd{C4p>kVFna(JWhCSC>Xm2w959XPE@F$k9SQ?vr+zD9gbl8YMEXpBSy z>EqtrXImajaGMhlX$AaH*5(rx@5@a<w81Ey(&A(yY}6v^Ytc9k#1zNC>wx<jj|v!d zjY7N&NN@Y)qUmXRi;ds4i>9Iicn>_CNIS!6XOIWpZ#O{+Z)1rvc{?GuLuZI(H+6_c zFJ}ad7Z?Gg-s8w9ZSL7H?qJ<PZmj#EeLZV_q;j8k<-ZR|fR{azw<12qOKLkka16IB z;z+_icLqVT1z*j-aFVhP2(%_#!pYn6Ec*uOeY`HSLVl3`8Y1k4>EF<|zD~iY;18Ft zq97Mr=AR#4qXPJDcw9Uyx<29u1gZ6U?u1sS!<DFMayjcWiH7Dgv`<-lkVZh4&kcKK zeAeh#HPxNNJ_UzO_3%(MRdLuKIaq>_a#Pvbh?V<JtOQO|`M_){8|L!|uZePhMF)=# zq*P&7Nu9?byCBcw?XD^uqB)HK@)VBZv~n6Ke!)Gi7X=;Tb@6qCn`@hEYjv6bD|GMY z(HnI}TsG*Xr=Cmks==Ohno}?g%WoNmxQ6OX7l?-xBh)TFqky!9ppl=L4J#DZC0|3v z2EGBEczAx_h0=ant`;vBe^;6-j+eoV2`YnokH`3la}1CYy;u!ePPgAkJQ3D|ah0=& zNu&YeYWiYVgAl0Dkkp(XCZQ@!e)2+B!{7qs6NoJ;H8w2O!(CO7P$Z;I`2{*2)M+z{ Zi*F}O^<C;cm`0%G$mvY}IHnd?{}%}UP3r&v diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/reg_fast_laplace.cpython-310.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/reg_fast_laplace.cpython-310.pyc deleted file mode 100644 index 30079dce4bc04802324f720381b872c1a2f64018..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9509 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 X4&uxQi9kPt=A@8#$;cEg3d(;2)UokG diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/reg_fast_laplace.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/reg_fast_laplace.cpython-311.pyc deleted file mode 100644 index 9f089d06b16a5698dee5f706d007dfa13916a42c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19010 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 diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/reg_fast_laplace.cpython-39.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/reg_fast_laplace.cpython-39.pyc deleted file mode 100644 index 7a3bbc05003eab405d52a934e83053ae50080d25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9581 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 diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/sequential_design.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/sequential_design.cpython-311.pyc deleted file mode 100644 index af35ff42f1ea1e8ee19d476f7b51c19199513cde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87535 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 E|3L9E)c^nh diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/surrogate_models.cpython-310.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/surrogate_models.cpython-310.pyc deleted file mode 100644 index b856dfef2c2658af8ecc6b1ab85b99c499a39705..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35103 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 RfEonip2Lr$Q;xp){{<f=hrs{< diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/surrogate_models.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/surrogate_models.cpython-311.pyc deleted file mode 100644 index 569685a009aea33d28959c005328402624029ef7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64791 zcmeFad2pLYmL~`hyg+~iNst6@e!NNX5HC>@b@I|-Nz`fCR>?&{{6Gp42v8qD9W0=# zy0^Lu@~EdFk19;Lq$#*ZuA$5H6dmi@W$#o^sC%k=y|XnN0QcJ#2D92x?1p!`c4H&t zaaD|?c4BvbFF$-2NLqAt{jq<{Co%CInJ+V6zRZ02-piN&G(SJjfNQ$_*RFfNHW>al zdXTT2)Xf(e83w~U2HtSNz#I7tkMV+${bpP+vER%Knd~>~LKgeYp3S+CYoxd)k9jul zLLR%%@K`Qb@h;PoKU;92VAgiQHd}b1kbTSY6wMZ0C}Q{7p5j^ig_2a7(%G^L4tAg8 zDW9#lP?36HIa@WAVKmHEU#L#Ksku-C=((QS*}4mLv)lzP^}hZ>J#XgoJPosr7aH-- z%v(H7vrQM8*uB-$Jlk@ih27_ST4&oXw6XgFPy6h)3)|Se&C@a4d7+ct7kav8yDxOl zZojadJr{X;W_vF57!4T)m+@+^j5@yf$3}zUL;OjX(csFx+9y9n`{g_BudC+jfczZY zA>V0#buk9DU*vn&PJO<-u|oc2;O%_Lk4-2Q{-jGEm+ElXz?Xi{z?c0PE&d_?r0c>i zKI5#R-LWv3cXW2n<C=AO1I~ck=jD9U+^j3$ob~Z859joAE_dLHOW;n8c5=>BqnuCR z4xbv&`xSwiXg4OUC*0l>&Rb`voF13ZZc66Py1njM_kt^FpYVA-Zm-KJjQYI(fZ%j{ z1IfbUX>R}`GjN@s#jokq=rDfD4?E}mez((mO7Km&{Qfhp838{&p*<s+d&(&|Jsy`Q znS<gvZ@c(kQG*~=-cj$|eBkVybIOG$^Nh!J%kAY|xA0(d-Eev)=e_P5lb4--w;!*H zQb1ARLr#BS_{<nymg-*~cg}evXcZ@gz!l$&&+GJ@a0aHXxV<x{<^}(}JAfh;pC6Ix zq^3?5kFR?N_{GjSpXc`E6vM{+6k$7=?Vj=a1lNM8yL<aW*=5wokHWfn!FQ`0?cxvI z_PC~`CX>Rf)Wa9Q#LYVfmjON3a3O;?UND&r@;|<jH-FEFKHS7N^VaWCFK*!r@Fp8? zZ1~OL3%_T$kc+1xJem1oJmvANyd6&#zJxusfo_cG-(`5p=i7J(o(d=jzMU_}y^XKH zmqLCUUxlY4z8X)(jNWQMZ?!JFo-!|#@O6k$%5w<IkaIm!Irs)VmGgO^#g3%;1PJd0 z5uS6zYB1z+xabwv=ARb?-;6WhYUdbX=CN<*uDJc&l*j4!bBw(FoRd>xN)fxcqXEu2 zHRYNM;H#H&6P0kj%U4}f0j`ZbP2#DY!9&XgK&5D24m8jC=Uh|nY4?=UFX$!j1}VEQ z&r|F9xoLEVdGC}<pmf|Eh!cIsCHNUQr<X^8q>hxz@g_PG$^Z~j`};ZcxGTP!T)@W( z^In$ily4SgWSKfWsai<&9S%rYyCnEs%Ehu%D#Hy?1=%~oAnO=%m01C(9&RtnKAWnV zl(AG&2}5dCx)~rE5++%M$-wP77qUPdlq}B5&6BDvMe%oY=dK7YpmC#*oKv7Lb8|i+ z;NpiANYq2TzF9YFK6S<E!|-!!&gu2jz|?l>)adx7b__$pWjESexQ#(+9Ir7f;XPWH zSHQ?a2sbB<A)Fu$A`%=7V3*pvxiQzYbKVo+KtzBb)pKsjHHo;BsP7dYpH@xEP6H?v z2Tdn6nJd+Nu4xdB8v`msfeS?9@%V0ns+8ib0|MFvKAbn4ZjbY_$2BCiH?>}GH+S;* z*&*(vz`MOv=i@F6Slrp`^OQm=f&#a%n;SWEW{4Z1aRehMcgD@nxVSS)<&~KI-Q4lv zGk`0Bb9ymgYU-xM8|daRIBFo`X(M<$y1CRqI>c_&B5aaiu$#lcImDfJ3T~O!m13h% z0(C>B7(2T;45>rh`0SiZK#%mO@YluFH0vdx?vm87mwmnfO+s@UH|>c0nL59ORUm#& z>g9y#ORX5EXPutbOGIdRoJKRWULqpLpde9_Qe04!8UX{)tP3;@>TrVCyqwE9g+Tzr zgw*?7w`g=?v@`7%(6&CWs}q6ewgQhj?39nu708Owir@kkrsh2u6M0VQ)jpX@Jd8^G zS}Kw7;GI-4fnMYXiDO<?a+;W*y^Pr&On_2AX_TWPC@DF=6O$8ArK>)5q)WXid{al_ zT{9AR;u<^{I2l|`Zl~1Vj<^^s+WhF3N2f7tvgiOf<G$hYqR)FdC+|di+(0++%=iQh zq_dRayx*mEdvwKV%=!$MmtDwDf~w*N{g7URW^TB;PI~c&*<ecW`TbpN+GQ=GAfxU0 z$&>Az3saB4wc(F&aK$}yg+TbHFm3Pa?V>2Up+tv)>ytz^K*F@g=TxzL1mmM{+2?Uj zF}T;eC{{ZrG0Y_rQP9LPi^0j=h5ER`1~I;jUff_E#-$We9WgQ7XlcK<yC>Bayn7ad z8ox2+kGaA7(Etm!BXApI0545Vsb0XQII6gBK0s5apExY3*_Gi+DNAZZM6-a=0$pO% zo)g^ODfb+W=a|<(+C;y|>oyoMu8lZ837A@P1sZj^R1c%U5r2W3KJKRTHoB6J^Si(q z1vsxlunK(t5K)B!2B@AQ?iK?f$eOBxImLtdnnqfVp%XJWK7h--;`8ua+htearpx8! zdRSNQ?dg%&0~(Ioq%naTZYP@N-ROn^)Y0Xi65MRGpgh!)w94g^(~Y!i#&!a@fB$~Q z<D4M22f+Q^X|1)7YXz2CmFjGq2-TRJn{rO7wb;k)-rc=>_im1BObuk*@JoPr83?uX z+&-?iPfb3;k~`<-6ebo(1Y0#k1A|9_jqdArVLbB@J=3@)Gyi_{Lyw2MjJ5;}H|T?( z2X%niqO}1VO;jMnl7K>{Ku4_2<T%u{ewq?7PNd@80K-KSJ2kB~HwBp2g}hK6<V+=_ z=Enpb@Z6@+SjvW&$Zl!Y1-Q#T<eFBkQz$Ab>z|*UrD-@tN}8D*M1cO8)(H<eJ$@Iu zAuG#-FCdX+ig9Bv&-rNjz^aIqUmjRfy^nZSX*g5rj~cMy5VgQm$kuHhK=5NB!Qc^h z=_G>oU%^U=>MVihsh=^7df7{KMeg$L6g94=LMP8pGR~1LsoL758k|E1+#q9&hF7qJ zl(-m`tD~8$3w;Wl_9bcd)UavFaPD_qpGW^BmapxS`hciXt<Ww+^M}yiHp*IXO=H4B z>t0feD<hnil;cSgs3n<6^R<9gh2h^zE2tL-k{Mp#p(#shK}A2bJT~F)i?<QHV+b09 zhDqE>S1<!l%JM&G!jrO`4rbzsQnD+Ug{MsADH~7nvds|8!Be*KEf-I+P{t56<0)79 zmWL;^{KOm18a^;iwC5$wj6<hYOVWk`SId?s3-tVJvQU|_Q-go9Fr5KN=A@?TWFFl} zGgh)dKMEy_)^+=2PO77{TauX=jHd+-WfkfvXrQ2xf+h-@DQKafm4Y@3+7b8(_tdtj z>$g`%hc3SAM|Zv`T=QM=TyZ-67sq^4^F-zTi-+BTBlDLp>K4ft{lZlG8+pAUtylaP zl?6!ZMfcq8WbWi7hMd6U<U;WYdC}P|zw=Vr&LQ}&;f2*u*%;2eTac*h4rhwF)rs0p z`mIWEJ@i|n{5on8&6=oe!jDafRo_RkY7^4eur+M`0&ooz$!x(Dm>0ZL3JKvY$?X{V zy$g~6`5CTKTz2_u@T3r5RGUhUV)!xcK2)A~<24pbumuzXGZ^@cbO}*FAu$7T<V|`x zk^g)^(?L)Mg>?0BK&mQ<quX3no;2jGc^g&8Tq!Va0(SN3DwAT;GoUGD(C4auGEz(> z->cNu*@dzx_i44wOslOeP$j1VuCny-|4>)2Xn`72y+a9X@)MuEoTG=2k|<vT)KgLy zQYm=7S|q>K=Z>_+@)yKcFtsIG$i2n}C!sTFh?dAuw7<Ux%zxbyNz{29B`VdHM84Nk zGiqNZf7x;h$Jb6#E~oJRbj!IY;@B;xsFZWratehix16H-Yv)n(wNuo7?Gy@rLBVx$ z>Mc>QIW?M9Y#9Tb3|~jvO0U!Q)O9^g>809OR~uxA7eTwANSfi;6#{FZ8E-ODy-h!w z<mq#v(IiUK<GPC&jjIambt4GPrtI1>CR)@KSC!ObhBqICz{FftzD8+wUU%vHVJI_b z(&3XPb9MzY183xWgJIdCFZT^2q#duS-;r;J{G`VV%5|LZ8_Ei02i}n5U^KP{O?>_W zULdVH5@z!SyluJg$Jv<s@F!iN9AdN7ngzZge?e-KK0l@V8g#L;^|AH>z}*vf-{p%S zsV-jlkg=r1wv5cXJv_;FTqOR*0)bZU^hB(gBvEZkEzw>6&hGAREb~bYM9W!Pmw*X( zAqk{}?m&RnKoX-(pwBQ4L6Y^-vv$=$&(N=^t6X|9Hhy;W%+XWlj-H&*fJvHs9{)o4 z9JDynD%uMk-XCyF!e1s>P&g!2m<>^Yvc6a9G<5|FBd<nI$oV7@S!!)D3*ktBgY1bd zx7>dJJk|tQV|gH@5+E^l&H1~9e4sK}G)h8IN!W49M=Ps^J*P-$1vCo28*bo*ErpPt z7Lq!ArVw_SFi*=zcc43&iDjYifiamai6D}unK@U|gcb3^O;lWxA}J7gALqrQ1PFj2 zj$kt(le|>N$__#cpMaGdC6$YTb<8}31GIYO`o_?Hf|IQR{m^xBZH=jDom``oxE+Pb z;z<xL&_u^p9*54gXD73;JQD(7nFGGLWFFXTN&4bX7BV^1q$&hT<_IoY+q#n3GlG+M z@e}Rc67x(0Q8J5!Swb?4BrJhs&K0NM3H<;=ufS1+0<Xm5rizv<WE?M(>`yW=4i-Rj zNz<(J7UR&9nUFNiCJPiT!#D}Pl4h(ty?&7BtU$WZq{-v*LQ~@uW*|ZF_>;Mi8j#+@ z&shIt$&AZOl1<m7Mlglt!+gLudBc4}(WfMHX69IwWbUm=Khqv2bB>QPVOug6a=S^0 zy#h&#v>r)4Fd3*{ddOqCywp9D#!2_NQ=VxCSXyk5PBoduS_`PZ;sjZky^}IZDkc@~ ze{xciD3R0>lE|c)${?k)VIe(2n!}@#EH0UO&2<|!pBA900A(k$n0PN~c0n4&Dle^e zh(k=8u<UHl6}I7C7@^=0drP^zNq3po-TbYj@p>{}s!&Sa=O+f4IyGGajg?6oqj*}# zNdwD5g;MzLv`^nbe18Z$A678s25X^csefTGnOmag#O7U3oA<9Z?~gYh6q^q|8DDEY z8f!lK%v$uqkYR8B+>nvq@@oq4nBVf7JVT))5?H(#w`~(`+X%*}@mX!#Qps{{ympsZ zyDL0)_hh1L5B-SNZ3%1P-IGtPoom+4kIpQgUm5%4c)V*^>>7?+M?~vL%sTSCr2PI# zv7`;FB=cvsvPd9S(-XJ#iniVt2BZ0s@mVn!tN&)acv38$j9DjN<Qf`U9@jmsA6ly) zS{)GgoQ_?%6ssSK*E_{}CtF+nCfiU^y*T!8LaZK$m+uhEcK~+&i)>cyx~G=rHA{2c z(kfb7mv*dKdSaFyl=7*ydCl7V{^iHhOXrp^##@HOmZ7+Hk7(T!v+nuIv{iLat9sX} zdgE37VpTuteLPXkJ+1CrtL}?e51<Tqbt17oR`~ey4dT@`KCRoaR<|Qww^OX!86Fd@ z)rpPX)iyk>9ayU!h}RB^wSx@l8@$>egY^YTSZt!D_Nk?5&C(RNw1}3LC7@_~%(6Y< zsCw$?T61*89ot36cI0vd$ZcqPT)xyKZaWyS9~SF}rS)uGqgb~?tlJaMtp>IW7Bd0$ z?(W6RHA{8OQjJD@VK6j&Bja;}!G19VRwxMZCjVl_^NO0M6<uo;T}wQuV<KKLDprgV z2q2wn(jkK_x9yJm`(GH$=3_=F438%44$<EF)ZV#f?~L2KMSFL6EMY5t)bOw)%Kxl6 zR=F!)xl63v6|>R*&+3R+>*960#k$=u3|U14h{Ah^BV&v8&zibchF3?Q82@}cv3uXo zYZ3<zCI<IB8GDgqYJSD|xq-r8voLZ3w7CD6F){|~{m8y__Ji`}a<QcEXZ<VJKOX#K zFkUhgD;fIog<UPH(1mVzZc15_;)xcr=$3{rUdJ@}eZ%+5zVG;c`8$Syva~m7mia-W zo(TyVgBe?4mcc@u4P|WtGb5O#vOH<<vxC`JsdVgu0D;{@fS?f(qze%K(D?Q90fU>x z7^-tR;lh^crZ4dwtt`!mCq>i|P?pgK!=3eFjru!=sHRqOoxvU&Rlx(FsbXq5O&DMV zR8=eyRRjzwBtyDDCOd`CI^<1E(7Fo{mGZBvry_0$W(ws2W$^^YI7eHO9~$`FM`<iB zD{G;g-ImHKFSm*TTfrosnOcP9@Oi+s@*Z&%hI~uVEeafKD93FG<>Jrm&EWIFxMvE3 zX?bQ+$%T%9W_c1I@nP!H#!knYrtAg0b=me~!1|EEqr{;+Z^_mmh4O-VV}?lPo1cU% zK?`4aO)67oKrRG+uPS1Us3NM+d?tEP1QOc&<s$u3DP;B5>-v<kXb$wN@Y2Tyea%Bw z$gZs_^}gi*Ubky8rL<*}7Oxmz6yb!L*E&irUbd%|Ip15dwX~u9U_Qen<^s0JD?q7! zH`=@q%n|IG*2staTr;+TLKU$IdYmE<(bg+ipv4lOzg(iP*F}tgA=_K!p~9dI<y1r@ zd@1tHq{ZkD4UaNZJWJym$|X?=asCD&D_BS+qY=-WtIzSRazIstn_KET*;3z$7=^09 zK7ub@Y0LDYU{O>vM#!-+7CQ8l@>W@}2xZ{p7%!=rNf^#B1V-i97=6lk$8xzIYvHo6 zAzVIff`M4Bu78zpJhtjfG?q4Q>c57Hy{`wx)%;QRM)~QEW5#%AlROqM3!_X%zVi1{ zCeX!)_>-=XT{n-}(@Xrj;NZ<|p^{*6utcRT)U-*?ar0JE<MUO)5|u{TeA^K*-u)MV zqs}FoF#`QXeQy$uf{L?Q?~<r^EA8$`wR`pN1;^ltK2-Q3wEMS$CjafUQe97@1x38I zC0eNYeU$U-w{F@j^b+bpjcYXR;0T<MsQ`11GA9Pp%#(w;sj*0%t?CF8MnXkor^2Ce z;Z8ZFQRzo-z8Nb1`t`&(Z+z1cDg_;vs&M&Q^&YgS%;a07=~6vSr@^k%!KOtwyM8aQ zIUQ_TlK=i-*Xv++{$61>=wQ>Dgk8TEoHXiScmMrhV|1#BKzoY6{|fv{<yUgKP3yT_ zzWJ<y{@PodLm0Fa8SNoA<gz5^Q{|i~p`s-C<DJaLm~7f0Z+sobcg)tw&)sg9Y!65V zL&h5%lc6&CEdwW~fUSir9HjS(#0+L9viLA1)l_ZOF5hNF+Q_8AEtx4PU?h_;*ls|` z$*e&HmqxyON^f;cWmOD=yA&L}4to}eEhQ^Ff%DFFs}f9-is?j{kOQhFPXv$zp-jq0 z*3Gb)@-V}m*~<_CN+yyDP9%}{P1-m>(U^InGoYgJHp)SgJu;w4l?NhdL6WCR!svCy zfvg$=YY30m7Yar<u+nB`fl|(?TwxC++w)NQw<1c{p!8QX<t?yUOBA9Igr=qY#spF; zFv)JaQIhS^9*+fk9?WU>bLUc4O{|$0sx%4#CINQAAZIVT@&po6{)#7H#Ic?`v`{r7 z+oR4g11X?i5&L12MOMHUaC(xNFp!yoaMM5Kb~7n6HW_4+JbIxRBv0A|ji??)yawR- zp%FKkae4Ar|1U1skdRej%1#<du%#i}J9*W2*`Lh0?3}vh^72#4ER2-2LZx-c7grGc zz;w)DWTpylc7}}L3^g(Dm{fxWJx6pW<4z`z%}0Nf5j0L~xMw{VdEW4j(P+5aMV2oD z@v`k10<p@;ikZ{~k;zo4Ctaw6Gk_f;S;>s<o}`H+s;1W`&oZfNG8+Q-8CSqhau|;L z?svb-#HqhE?<G<7tvO-;f@*=+4K+;nUeZi>{QJ9=7(=L+pDO(2-x>bS0HLbEbiz0w zh0k~IePJ@xj2Rytj*f{<Bk}4{v3fMYHAc@b4YPm#r9+Ru`MJqhv*XtW1TRc#Vl5!; zJrf=2@J^*C75f)7egDAtj$sChur~`r#yc4s;qqR_U0Vuo9~eF`3G+xL+@RnV0zdJt zz=ec~yuCCmklo+@g?d${tVe|sWf-{lq8I7EBs>^f52(RvWAw(7lm4yPm!=<oTm8cB zSf!E~*aD*=6P2LI+C@W9U4MUq!XjD6sHaG(dmTyHWotAt{>PX?_Jr+OD$<hX*P)n! zmEz=ONs`Zys3$1lHp>5UQaVng<R$dUq?CEW2pqC7*HGW|BF9j(U!tYG@#=kI^}bbi zV*l8a)Aa9C)06W*_a^oaf1Z_5GYZipg)dAR5E7tu;qQ~6gm0nvLJ)zDj)V{);N=8# z4j2%=O(2LDNoJ=ME?L*fMlhKzDS49lY+Ql{i<v(s^I&K_dj2d~T?^+aAM6B@6(N|{ zX`|Tmyay(oM8+OWQ|j<K(Y{?6qwHRzfRrwh4kqtB&0~_5E0f4OX~sA|>BSx%Kht#y z!xVR#g4Zdir{DmBq)pvTHi>D@pUh(~=IB8<NYRKfm#p6!>5fLtWEM1OGtlPYhxg4w zy@y}u?u0k!V>YI7d=-wem{2RtLM51Pk((@LM!ty2G;(b6WwVDs9XgqhE=zQp($}5D zJAuroNXa)Rkg!Uapx_VaUFMXJ4B>c}YmVI&&Ch`mg5C~RfKnR>rztXN^@Xz(oTGr0 z_^bumE2QDo_<GU^IK&>%&OB*)F+oF?%(_kZNEVRkrMm4PX=d9TCV}gu#fz+F=Te$G zQlBxqM$_d<chZbNYJA~s<eAJq$+$9BU7DgOVKUn<sSZs94f;}Mg3HFaq|q(hq_X}Y z1+2dkuX>5w=sI}tprm6n0fP(qx-sxyBbEPiG~k!GzH9hRlOf-B_ekXQonv>8g^dY& z$vcB@58m5#e;4|&8EP{G;n8O$W%rLPo?i4nJRdJ<5=)xG;|W{I-G#;Bx4s?z_Omi5 zxklq<V`AA@tZ?jEspJ0Zi_WO&;dH#TSuAZ14~M7j910(T_NB6R(fOn4cc&j*d3fbP z?L#s$BvnZRj1pm2hzLwS_l>x%U9`1hlr`^X+AVI)%B|FY(z;sz$+no4i(B`J)_pPS zzOPhm)zm+&>0PVoU1<{gj>Kz@iZw^W19uNl8avd1=2oU9G}>F1O2qbk$jpxF%E9Lb zV}2{<xBOPTLy*VxZyV~FR>s7Eqo1B$8<>a<OeC6GN$pjiDjE0G(z0f0iCfx4OWV?+ zHA`R2(wC^I4^Je@E5k<<mDS;6;bYHh8p0E)a%GzbA_39SxpaNa(Gzp@Jabe%8jm)K z4Ljr2yTs~UiG~*3C+hd(25O!1HfVLq+o04bZwns@AAyRqyk_y7Sko7G^ox%E@Dac* zseXZtmF5f30I?rvoovOC({J4j-+WeG`|#+~>aMkFsIZp3PX>OmKUUopuRbGIpNW_w z=FjN+`%_Ex?@d3Rj#qby)m;(u^YV(t_J`K+(dV`@O!N5-ivwa+&&u#x)s9%zj%Vf7 zi>H6|+Pkkkc;n$4v994*`AEEcL@XbPWJR)&^hY`G<~%SzG)J;fG_LuD;kYrMipGBK zSt6#$c`9?cXm8P~#a5cv>^o!jo%mKx4OKd9Txwh~{-kxOHPN$YbyVy*xR@!Hcj0@- z_NUv1*R~BO%4-*Ii{<SrU{VYnBgiA8qY{%$M`gUEH8Q$b7A-^U{=vu?sQY5HG3tD; zdGX@nMX_YtQh&T;`*R0MXDsbQK1DxiTWU*m^e$SWqw(^#FQ3;mMnO^CkwdAnLWS40 zX77sIw~O}eD?8TgyW;j;pVhQK_~yfJMh+z^xu=!gYn9zgx8s$&#me20(dRq&A>R|x z&ZvK>_q}=ic8Vq2S4{DefrO*(g~3wVnW#Pf=*rUN*wC?9?eTc+ak2KemaE$A9^I&> zA=>g7H1v3Tyt+@U?gOQO!vm=x1g%K-b#z-duxMH|fovLEqP*BLmT2vXUR!DTq;vK9 zC)?vK!!I&)JQ48Gdf-`W=hFG*i>vj^lkwJlV(Y#aCcH(LX+3~0gS)KEMvx?e#T-Dc zYmDxEF#B+J(ezneQ}q1fi!1eyC*!1W-9hL*4HYJZi>AbpW1o)xGIufap*4DOsd35q zL38wC^rBeax6&_`?_9O6o_$jE=da?|8ZRG@m5+l9rR2GW){e)%6}Q-O5GXy#&}S{} zT&jIxz|U&`lluQ=*XphfvH5aV<2Sj6wyw15nkm`mj4MGkrTaS6J+tlrVH2Z8El4yQ zMF7)?pC|TDjek}Cr2JV!Ga-5Z?*qx7wR9{UT0Xv7w0tt&vR7=``?)!@aX(>we;U@6 z9<x^_<Y(<&%QY+hc>5l)eb1sf+W4U0xubIN^xHQhH>3L_H<1Erd#0jKR5ybQzP)N+ z{x+~pl|%r7$u`tBMh747T`@jB5U=SMYx-Xpa!RQmQ@Ch+e)yG7dw+4`(<|cP*U+H( zQO{EU()AB^L_JZDSl+)fDwgkBtz30NS3QN_%6R!$;*}GhI)B*`JN^1Ew^LVcTdH1~ zTB-lQh2Ltid~n4tmhV}8<w?<#-oLc3zOwpCy!^0|<_+<c3tLWf^!TTze_0kgH7Opw zgu>aDtV?HCiavN1zgAdWtW1gJL#snij8E$S(zJ@Zc=@4(oaUl<^v$iNN#WqCc=(Mi z;s9v)+{W;DEQ1Y*FTR<Pny&^^^VJSzzM}49mjarv25G(;#5-MJ$}r;{0*PnN#QZN` zxws)t>x(}F54)+_K27}^$_&s-A$0{av?_L0e5PL_Lxuk%sPN5lDu{X&7}$EE5!3S8 z1vE;fip+VF3LUnT`6{ennsp;@N~xy#G}syiI8?KSD6z5Yt{~Z35@y(?U&M#7!DSOg zdu}j;&*HNn1jy0~0fISvHlMSc`(xDiL#56kbI`1<DK^|}f`ec-Q*}gxnGgh;oj0_C zz*iZEE6D<BGq<{@mSk%rFQIL>Oknd>J82c6nr!Py3@#^cLrd)pQ+D2v1V<xV+Pb(d zT|lRpt#xv;&0U&6OqMudkC<NK_LZQ(I&UCZYg5({E<WXT0n#Ktws2wto(dg_8TXzN z>nW%qE}Nu=fFgNRKt$R<O0qxNY^rXdlQumo+l@OpcQ?eFS}vW*TIF3mDHj7W>ai1; z86s}9H%x=|mk9u|0S`VxURD`tg#;1orj^oU$pnMKAEQ%97NFn9-Go5u^+S-c<w4LO z@5#!AH72$&25z_K3GYz+MGF2Q1#I0(i`Qh1*XLbu!6K6_5c8%47hA0P-NK*HXM!gS zF7hN9#k&OHhx9R5t{B#0x{3-vkwAMFCLuEuT=Zm`^ShIlR8<Kjep*7R?ZFmG!UMcp zs8Sb7>lcq0i~Ro!VqwYDiDk^gn&_=~MUPm~6E479SnP;gzkhS_`u&A?QG;02@WN1R zJ^{Xl!tgLy2uH>JtI_hM`o~pEuZ#7A@v@y_+0Ip?ST+<s{0z+a&O5=o!Nu!qHZEr4 z5?tF-(PPWfNs-$dA=^Jk)jPhoebL#KbDvDc%f`jB@ra4d(LeIN>r0e47K;{p*+1vv zz(Ys0Yjr$P)9@n8P}dEXuda;Pyt0S|yT5jg8lUVEcOH)vEM6B2>!WRAVaL+pc;Ud8 z&uula+?w@r6`C*D96^Sj`Z)sQB(Ne~xF;zyyOxdmQ4@O$<WJbKg>lTZa8>CMN2Lv( z@R|T+#YXA_$=8U65?@CAWJs=w4k@y<v5@UaX8t}V+D)oqF_VKpj=T+J^izE}Y3*E~ z-!r;Uu2P5o3r(JW(w~7eiVaoG(Q}W#nHbn54jchnTt#Mg6k={hi1n^5jDHfI39s^% zjT?q%xQj~LEvI4`I~<HEo)wd}#-K5(g(brTwzYHaIwKpj*oR81kvZOXE3~SAbr%;} zSD7pIGrJe5*nSZuPj&9}TaiwEugv}eW>M92B9sYJDHFH~hZ2>xs%BvB&P-D+X9crB zJ(<pb1{5g-G!CH*DP}O|!6%aBPC!-^!0a9V6?|k>&phQwJKWQ>DO;PuWX;!*##UZZ z?Ywj%J1Z&H)LFng2`hC>F_4x)JID4MIMp5JG&aEpm3wx6mQ$_Hv3-~fxg{%p?17ej zy<8%4mv;zL(wB7)Ro1tqs?h9=(suOfC+A^o#@-m;^K-PvfhAIFEL=h3vMFSu-74*w z$fLTk?&ue2Y+>>)!YG>(BoXI0rD~>+u=dA%J4w3DNv6a~W;!9-!!BPyNy+zUn^SwX zB*x2;ZQ`?7NrZn+KrGB<RZ1c&$vBynx}Q29;VxyHF5Jbl)*fBO8IzCxlzKc#@t`tj zFqBo^pA<{Chw~Da;=6kndnKdcL|F|Rvz;)meeHwl<?49Zpjb8-KAga6GXDn|_p>8` z`@wi&lUUdkD{NZb5hig649*XTmJY1!&2>wG<?o2wN7;P>GtPD<DypmvAH#%G)*O9p z$+dFfNmab`gjjkaocG*T5zDPuKd?~8Wdq9-baf2ic$6=7VA<FXH+{gs@M986HXCey z46q-{pba#fT&2l_U0OG9*mR}+qG9+$Ss32bG}<rOV3D=oG;ZTk%znLg=;CRhR3T|% z!=f}Zn29j!QJM`bY=1S23U$E4{`c(Zw2j809IZv}W_js{N-To@aVS@phcYAvjaVjR zWATuyT|Dp^*H|6&aI_1Dkl9RwrCFa2_MI6rykOq6X5kbi=4ai-7AcgwS)03xKYjio zi>?l&#AMgTP=aY&=d`id(&isD8UmV9H9@-odr#{h0wW>ox2-pgHx0K;Zy0VGgE{aS zkmC%4jFrKk`GA;)pBdu9;or~ink6?V#9~YC7HC_P;J(G3^1C_O;KDvhT5#6&F$Tk} zo&t{?Y8;&yJ32akR`FG#8Rj&@u|_k`2Es|EEz$5DTbovNyJRpWtY6x|L}Avy*&6A@ zS2@+u%pRI04jao@VYS({Z7_@djzj+?Hsb20B&QpzECtDuJ%{pmUeQ}AuV^IpPO_S# zfq;}5$!P+o-Rq{o^~>fwtO2x@WgDkBeU({e`Z<mvcRfd;$yZtw5ev0YL(4-3n3;X( z+qG?>n0a*5Pzu+!V1rK(pSLx&b+5jD;sa|k!%tcuT0psyx!7_j-Q@&)j4-4H)E(r< z=Er0v=6*k0S|zh?k~NR;b9{r>N@fJ%x&1-Dw05GE5L;LY|BUXAQSb)E%t>Kc_!&JJ zXOkIDXEK)+{wS;tGA>_Eny`t@PXi-0igHQIrWL$iC{Y<>br~1O6#2zt1YnAL3{W5K zerksRzd1S^w-1Q+fpBiZ0xgWuJdmhve_GwUR^1z~?iZ{3!?ZD_q*k;yMu(vR2<Ku} zEUkmeDSBEgX$_n4Xy?S@=BQIFZVTtooLLeHiH>bcy&`t|Sh`}Cu4l#75L*}RUdb1G zMxP9eJ%^A}5%$X<NYu50El)kLH=mnK_F^oN?8TUB^NW9DHQ0*o&O~lUTVrM0;sqUI zK}Xp1Sy7pqOT4ICEb4~5(_G1d@bI%D`~C98t|cS;*SnM{R(7oz*D8DCMSWsX-%77o zv?Dz7A|ormGEvpGRJ?S0sZ^}m9?4CV)<uo%UvKnEv;cg>)6$)5r8`$mtHbP{usZ(p zJaN~Nc<E8G^k^jGSxw!;Z!FmX0RL7pmR?=1Tsaf3*(KKOg63qH{SzYN_wpinUp}+f zpoaM<q#Pv5Dk5gm`~e5~mH2&bD-P#<L6Wt9xox;^JTK#~^YX^4vi`axW4tWuugkJ< zKSkV;e9=hFxQV}oi0u2u?`OcVN9K1)WG2TjV1Cyu3^(R1^t=M*IktQW!MBVmP86^# z@WLH0=2~T*)Cvyoq|M2ER*DlS=d-t#VgYkkC>P6*90>L@w^Y*H)LsvVZVpryM||e8 zIc>HyM>4!wTZEpMg5Ioyt_UM}3vUJYlEdfo`LJ%yT`u@BzI~{C51GODm{l)35u^9h zE#_=X<-GrncE^xbC|P)owJ`QiX%=dHk-oNRJe0DJh?Uxcau@T(tmO9elB2A`7Ry?a zDr=d}y-6nOp2L^&Wy_9qVJl#dZ4q{P3iiOJc&OMA50&fiP@{AR;yAOZ?Ut+37PMyX zms>1Xb*fy0U$a~_>&m6&aTUi98_})zCtECAZK`bLI;vH6!SI=U9qP{MjhC=PYGI4; z>r?QH0*zXnuJ38y(_4htpg^R>W$M}x2W?w~*qDM?sNH|WH!U~o@ejej;cAJTqwqA) zA>U&^hY|ZZTE3SH$Hi@FxWaxdt;?9OF`O}-!MA@e7yGv~`>^<JsZ#6+kVRYS3R-ld zp`u06QBt<@+Mq8n-+>&I9bn6yX%tK%9%Ve>yX5?X=8bn=-GP0dUN{IhN9L<!C(5o+ zzP{wa{Fmjgt6Q}UCumi7H|gs`JGL-JDmmW4>S<DO{c;Cuph>dMWEY=>Coc71@Roh8 zT4lj;hIZbnm*HsZt1la`8E-=c-X>l8hK<szVl-`9J=9PEY$~&)mWgV5kPI(<Kb+97 z%eP66r+fP~YeTBBG@34efUiKMx{&P-Iqf%M6<VNOg<`LohCXyDuq#a4l7VA#Nz-c- zD#i-AnD3_bX3&Pa?d+})cRlQ`2zR~gt{4KwKIcc;HRd6AK$a)cB2&_=(F#-5QIPQ- zIarp>;x$Wztt|t|o_+n&FD1jGb=WlYBlFOR=vOG`WX;VDSdIIHPL3@C5M7p5!pfdX zs=5`GKfqQmZM7xmKyGODY2+`eIFHQUH!p5l8JW4VWM!{ehUync8-e?MFML%M6-o~` z7MqA(wQgsa&QBw3O;atrY}qL=mp58H+!*wQI=q9p$mMa$gAFwyE%{v1y8bB1CZsoh z*Xv9mk<#%>{<!lLP!r6K@Z2HQJIl<U{9iwd{>Q&r*)Q~f>Y)T-)|8MqlmFPcK+<$s z5Zr$UwtMEtPk;XIe|WmEf2M1+`v3f22P+S>=aNApa|L1w_&h=a0FwD+pg0eMO6Hs- znd9`#U2#tK$~S$<T#s}1GEcAMyS}8!Dez46yD)r4QRqqji^-Ap6#O7F74>E8$8ZVc zl?AvUUFa<N5W+4DFV`pUIhpxSAAG)c;_@jJkCjOHpHVC!Nx{FR;28y^p%eZc1<w&A zb4ZnqGPrRzhGFKP|HadP^Y4QHb{|ZkS(VI^7f<XkNP`9BO!<FBOPz(0^m31kp50Qp zdwb-9w`ZoZyX<!QnNUM5bu!a~rT+R{$ea0=ve_Z$f~^uWyx<PQs2<uaR=-@x?O8K2 z1i^6<EKE%|E_<+~N08y7Q!31)exL&`1f3N-i5;1Fem8E&JYTyNLKPch@-*nDb9HmW z7&SmP#BUHrKtpW2C6ET!Pr?$}Qa^XEL^JyrT2vW=I;v`RE~MhQk=joi^}qbC;b$42 zm{;pphd(a(q~N=f@wMQ?r<r#j(DnHNU4>{3%PMpWH$T9t_3OyNb(Lo;RRA%pul${i z1rQByTu$S0c;f=rXr%a@V7&o&H^CwUgdrgbzQ^GO93G3vEzt{rMhkw9ABHie^Oh{r zzbox<5dH(cZ53r6LRl9Q0A-KPJbdFv-+cF*AB`*@U2(1!eQ<L5<mzy|bKjHGi{Fgb z92RR1e_9`}K9)jfGK)0y{sk+XIQauzQ_S@-wyg{RTGApt!W<&tPiA?2-Z?k3qyBAS z`T&+>1_3TeV43+qdyC{ywUsJ(fP!`k7$!`Rwk0z>v+}_zYUfMl%kK2qApl7;vWJPv zjEh%gV#$0ADrypeRv-dVOVV;2qG8{0bhXj*N$c6eax9-96jLOk41w5k$stu1r7?Lu zQ{<hNY|zQ?6?F;WKT_}^ea@nhcv3RL*SA$NPZ?z=g`ZM_dz8QgdvY9*0(%qkmqmsn z?RH5zr&u;Hiv{5$O2XuH|2y5$Fqh0e&IVV8VIdQPS<(clchUroKq|?!@Cn5$kpza) z$uP3PxzqrD*W~N00g|?~dC5=J=Pq4RgnOwQNyhgvK5AurYX7tnY5f9tAw%*Pod#=J z%u<u6s1YkV!>_<I66AGHOS;xdx?oC6rmZ{HN_K_K&$*_@)>!$@#mvRbmF93hlv&n- zyMvMXJG<d>$N1L%@cu+;*`wlzWl`gUiiZ{V-VDQb{CR0bm`rW0Wlt?tYnH0GrAD;W zL`z{@9kaANb5uYAxLO)>9Edv(h>io{BX^D@@*Pj}Yu55>;`w!AeqD6OT7FwBzm3Ih zT?(w0z%|bE!O=v|j@9`@@6IPJFDzN*q^_s%*DQqfv=ttk!be1FZQNS>d}D|STjAZC zk?SyruYW5T4l;9iK3?V$%UrQSmz3X%i?Z6@zgm{)8Cc~v&F{{U7X^lba$Ui9ujO~f z@;je7+E(Th{W}vo#}YmLtEFW9eGtW^5aLUORBPCtrX^3+TP<b7TcL1>mC_Y2n-<Ha zV};Yt9G$B>68(FrbWJa^G8kkEVJ^)e0~NXHkO$ZD+hh6dFN0ih|Jy6$F~?BcF(f*M z$VxpOktskx)&1|RyegH!WMpNa5VjL?8M4#MptNew>U_*G9(Rn3j`5B1P$IUkX2l%) z<Bt8JWB*r2Tp5cwcE=sNMaOPdeXHbotjt^oqP4fgTJ|gdSA{2y@!~^b@gW%3J1WW9 z)brwFG0lH6y0_o`b~I<r)*7?5J}awT^uIsy_{h@f<=0kDFJFi^?Gl@IJ=q_-JS|?n z8Y{aNFS{m|U5l8cWR5jkTg=v$C@g=+`nGlPbkrCxY!C|@VucNfa_(V4B#S|ej;~C_ z&b}s|{YI?pV!Z64SavaD`iyPgIQ#I`dnfOo#MTXLH#l;4B2iI^pI77`?7;w;*Tt-L zXz2XXKRy1|ahMgs)mbfwKW43El6F!??|xQRPR2}+YvW}-Vp-2hkyzFrJ{&&$8Q#02 zxsMA(ZeZoK$nA`m?Gnp&g%1<Jf=JO@hyHZ$TYK;9zY7;wM)SCl;JDw<c$~MiYk7a1 z8xpyp)n1X?w|f0ay|kMoeE4}?=hAC16pz7IwY?;An*J^3L@wOl2Mt0|#r@i7j#$(d z&Q4U+g>&zcDOOe8gO-OaVOyf5J8WCbi{~~bx<|scSoyYiZinV&(>8q0jpx=UY_+l6 zT7l-sDP?lU!+%zsgOyPi=>J)94w^{2w90H1Q~!TdoC|-Aq6>dR!T*53Pf}preE%|q z-aDA=h5w1t|1AQY7dVpgQ^)xt3XY4;8MulE>5^UFx((zPi@amuH!oynzt)h2{T77s z*>7RU7SMD+)zFRh2CI6ZKQjgtjR#!wrWqTCiuAFyRv}smR<KBGN1>OP>7Uew{WD{z z7^Z4==%h;ctWc>|-kt8TBvc0b1xK(fSjy)t02wK*0hziv0>Gtwsdgq7gRb^U9fL(G zJ~uBjc?1fTe@)0``kFEr6<UYL!8H92e4v=#jI&m)3{~l3rg>~Z%#1h9EM|3x-2E#p zt8I~BmA(Wju641}v>0lvP%RAdvF2KT1@T4oMWtV)hU$<?(M@U72J2vWSequP<Pe+s z%epJb@wsYQ@MP9K<!PQW^m22Cm-<ix%2*(S<z+u|2lQ}N7yLT<pw$h#bZt({9d_yQ zs(Q3b(P6$Wm7>427((^I`d~${dM}`$9NIeM=-Q-OqHBFVsZ<(2OhNOOQ)zK&*<z~N zjr&G0e~alGg0?NjbO?W})$Qoof|ic#3RdXxp??aNUZYi{L2w2uww7L{pirYOMX8h@ z4w+E;6?Ef@o+j9+&sqNz(tF8k3YJ>ncacUZKL3w2R(JYTvJOGOv9{i7UA~G2D44F3 z&q!&6C{0Er<E}-Qu3WA~I^IIfpuuLf_QCRCC8I4p4K{B?gPK&iy0)#{C^mztr_q-| z&D$bWJq^DMs&$J{^_2ZGs0CYus_z9agIc&XsJi*FJh<uXB-w4K?WU)@U`eXi%!3NH z3?tN{qco+z1oiKgOoJ`@TuG9re-moeK_sCGyEc9sY=tZTujoyB*t{)RLbLBRh;}fK z+k^JMM=vwo{U3E@QhQl>TCS|mhuVVre$u9orJ%?VY7gpZfAg5zf_i%1JZ6Wktd$Z@ zG54gEHPji@)AHsJyMlW9+&pGOut=BtrkK*;pgXWrE+a}=tR1EFc!So_aJ5>FEBx2G zoD}PjV7oq*mct8e4{i%?*W}%!^^wUJ;s^=Wf>@drt@j_Mi(3p`X&YjLs#SPMXV>-7 z9(`Hxy(B;)+SK(`af4lCO~t1jK?De;k8<=-jRsxG%J>|eC)l)hXA*VC4>KR7%`9n9 z(o(^yAQL`C|5le%+T5H5A<cp(?dw;ktpc@zr~gpl>(f$KgAzCyi|gCrE7R8Ku)a-? z%dbpXyJ_2{LD{(Nz7lp_a9jF!9WTq>fVV^;N9$YlYJ-dczJ9quUk}C)_lEj(@f(%+ zY1|C3J1Tzz*V8252RqaQVQ?gO7OZc;9et>9NNMR><aB)6*q;`UG!^XPTlJ-8M|3It z`^KIqe~gqLrqZK-w59l=4!#|wRqd~~{V<d7cw`Fo^PPB48WDE!UDA7_f$!GU&ZhQa zp3-iAWCDj(y8+Z52DSI)sdYHrrj($M?+^C#1HnG^h@0gddJDTWe09oc^>s(AeexGz zVlW+-+5>C!DMJInj^F^F%XqbJ-0fs{#kkwW?%Hve$L_Y_Za2H@#N80PYrx$eb~gYW z++Jq{-Bi(>52w!I#YSm3%TYH|OaAxZ){ykx*j0u-WMmb=wBO9an|Dv+s74&+r+|`n zXi0}$N{8TnZ99<hvB{U3f}k`wpG0qDF~0uzOx0QgK;QUX4K}3x%bXv((cqJg>|daA zqJu$|Q*^#EYv}V}M~=*)5>xO*awlfmARjx5UAZtVPz#(oiV?}^DArBvG}sBI<l9m{ z#B|-(ICfg8rU|xYu5lh(Lgc&!OAXDL%$+z%2b<=lR`29g?_OlIp{w{N1{?x070i0$ z(64B`VtV3p(*6Q+5GMTJ6#OxQWX>TNH9*rT{1#6WzxsdR_K+#Qe_MD`+LX?=EYLQX z-x`M&M$Un1Q|2YqeAv&g@fE=ANa&bZNtepuC@0Mx7m1*`g>1=WW1)hRwq&%O1r5>; zZ)x`ow~t%MXzyOAIYfGF4*P6T|I|U#shnLy+=8jQ-?h-6r+V|;>fJ)$zOQ{P)M})g zXVp_~W$InXWzN_9LwO6OV{B(7VTLs#>*7NT`4hfwMxeC+W@y2tuk+AC!3ecD=$Ov4 z9?FA>g9)eACrxOX_KaVVbV>LO0d)O2)9xAO$I>C6GsJm(GhH6{HJ8VI#pmOp`FGy9 z4G2&wd+3lN7zDU(y7|DBWELxCGVdrbFF7ZLamr<3A-Cxwv%uL0wDwLfWHjY1n42z2 zW)k~;3sg@pn3|67`>nAFzj+8Q9^W^E;^6wb1F4(m2YyA`Z{(Xh?SmShtU!+7#loqt zjqaBu5WWYn!XHuaeG0-9oI-#jpkAl@F$!Lz;35LJyo4V)Cp{ibJx&Y%Jw0BcV1<G| zp@4MLIB5!M{7H|`H+5r@9k|5o3*do{St#K&Be!?jhen_?%ll!I1kbBD#%O+)_SfJW z?3~EW=!}<?^3&78e<GM>FHZFqW?(=gjMH;Ap6Owda%J`kOtF8EzGVr%c`whrr^4HS zCjfQ({N*{1kL)4>IF}jV=_#2b%^j1;?AspaWfzPAZn0m<2VaiVc9Y4>fa?}~_o4n? z|L`s7_cP&+_ok4Cm0|l1X>)5PO%q89-$-UlL#$M&H>h~Ws8D&=u|szhCJNL3q*=W! zrq?N&on#d4N*1kuWu<8H$x}&-_JINRo}*5|0H<y(ltMo6Do?$aoXS$mCkt5P9QD#B zA#4Xr+Tir=ifif`PQYRvkWTnYy|_L>z7uo2%!i^sS-_shor34~SvqG7Zt`Fs=Ereb z6p!@~KXbf@xkk85IGCb<r(CTg+M}*autLGEDR_av@mb9KB2i(oSOW-W+<T9DrwN`X z-~?P66ee+?RjT<?pELY8GK+np($l~!S#Pkxn&>-eJSCAmGt97Siy>nk?)hf0<LZ{M zk1RUi^McOMrTNFd0{}Dw*w$|)HO?O(`9h6qQ?-FV&^0hY{t+k{V7k!*Z%+@e#&fH} z=E$z+TtjpuaunN{d-_&J;0!L7TbXETS;~l93tJP)$A+fp<;aDw1sYfQ`#Tb=8CVR6 zb^ZALi_uug!Fb6*vE*RboG3gHX%dTD-uHjh4=++h%fWcZUa@1Z<Tp$#-XAMGz;-@Y z)`bh6S5}2>&!Ltscvf5*aoyW?e_J>Q1|{JFY^{!bGdc`^f;j#vW@#oB_QY=r4EECd zEfL3~zK1)byB{CGHmk-R@v1?wYA{|j7|tepf*X+;sF-t>a^hT%$n`*F9kzT{)f9ar zUbP)NuwEF(jpnk?S$OAI_)uh&KE4{S>JY224SQRD<>wUK%ZX%0oX}%)O{nD0MpsQA zANk~nShw#lrk>RQ`Sj1H#k%o`6)N(Srw$KJgE}ecu$iZh^6GcK^Y(Y(>1}MKQ?gKr zWFmG$%hUS7wfe!8!0IdF&clhFaBr3RJ@U!7@%VX;sbL?CI~w-ggN7fDxvY|7yruRv zdw<N{kJF<T^RQP=v~R-+Wv~D2@+ViN6UxM{@iqH+%sx*0#m+Atj*LHVYL8eJ$Kr+c ziEZ6Wx0bsjd5`)R1JU6JHy-SHxF=rNn&=yh?K~>>y#kwp_xq!PrQ!E(ytn5uK5b8Q z_N-KjoqHqJM`xoY@RL{e;2RIW5ie{{Y#S7}?Oi=BZac6ZUPoWV@@O=g89n`8_Jd;& zkHrhyV4hL}?<hG%wa@HjKM?MJE4oKIo-1ze5$!!I``7HlG5hfI_JN<B`Q#he-M-_5 zi2v;qv62?5%4_eRdHh<e>wt9LTfAmitQn3RdIslZgVFub?JM>1hW=Q?0RD?rJK~N( z(J{DMzvkEzbL@Ez$B0?aKrw@hP51WR-y7{+vp2=;O^K3<2t3IdN}A!P1ttj>qaE?m zZn3mGd?-=Vwp1q8^nfk~?@T;z?fqHf%Jk~#kFR{(^+}i5dN6$S2UCkJ(V_=!_h#?U z#;r|>?ZbcF_+<Li(|>v8FS~xxC2l_zv(`MCinc5jz1K!Q@Z#3aMEj1PO|7=TlU>`# zv!Be0?PK9%k4%e)qP-7}Jjj2TAGfw7wvbaBkzw}g^*_)3_{1kC#I}*}D?ji93-u3n z-3#3h#jRAGLVILzu?09gA3eNQ*&*VLF<X~t>sqm`*$%{P2NGOM^v2H`K51ETthMeE zx!sX`a^Lyd;+yQiyA$!Q5wU9|UNaIe9TiJQBN?C7H$E==C}TN$NmyxEX<TVszWIS| z*%q(gCD!j+9a;TOeDB0s{Y0by{$yy|VOgTEG?IluqOkbxjR>#vazkH$_riMk2!w^o z-e`8*-ipJ}mW*+GJDGP>f<SLQ*!OUsSkw*^kMj198keqo(6!tJ-*MsmguV8WKf3Ed z=wV2-cZGAQ;BPG6h?lmAr7ak~tfgoi)-a;A39e0xt3kWv58izErdZs8aRuP}9`0Sr zmIeZ`s0RZEisV{6gr;PE8Dy6Xd*MgWTu0_DSEFU|vNo{{{&~c*4mfjY*uIh@Htd4c z%xBi3SaA<|$$sy3+(`f9)?U%t8?*K@-)$!QesZUGW$F5RSH<dHc+R%N6b8X(rRA}T z&Uk5;Slaa>OMVNil~q0JkJa@_r}M20$E$X%T#uLT7E5=-`YV-~L4X-pK78{bpiQg? zfYJQoSn>EuJrT*r$38jsaTgw?|8eUf(RwImJ%mC<Iurw+=a%Bn4OQk!dfRg6#N89& z6S$2P_r|S#qO~t(?bCcgZ6h5(wzWmHw#2M0EN1)C!1DgpwkN%RzD?{H*JZOE14<~~ zxPu00>!4^Ij9JN_U97nA{Z}zFgyJ3h#EyNd&UnXxCq?n*QL%Y6ZiOS&v6yvCiWhw| zZtWMX{V{9*bDLeXHAKBJ+d$kl@T{`tVdv5<<)l1})uzaqXNC6r=2&Gvd>e^{1F^yZ zdXc+WE>^U!ls)N<6^_RX$Hl^N+|ZZ2#hvlOMzOFlR@f*#@5N{(7PiF-+t?9(8~P$m zR2_)kdi<SO)dA&yWGqoK6fGC)dvSiA_J5*e$6}jUxoxRWtn7}J>`43nyy~C?>R_xY z^`AfuF7Coav^0XLDpoS6{r?%OPsyS`I=0gHr1%%rvBHUX;e=Q?fg4uYdwKV<3s}== zL{OFY&fh<e-cjEk&WjAib88cI&A8izqYo3cjkwzhK0x!Xr62DOkQG&97w-1PbK#z< z6?ePixiwm!BU#`%<O^(tWD&w;r#p>OjmLu-flN8U26h}78(UqcA9$>jm+M>%2Gjg| zV3#p?9`I=<K4ZoRUn8)^;7#cc``}v8td=Sr2HXZ_sICijdFSfNi+W2J&LGTD@AWd% zkU1cK!msK$X%iQNX*-K?<{87EFlROd6b-Zvjzt4rxrIhv8(Xo1*u=)cym5W?(z~c4 z1y!=a&5!Y?%0AQTp6BgvG(aX;r>4LjF)+d(;!nE%&?tHS*aS<81%w=*euHUP3gvCq zF2TIC5?ORH6-x@;TUs!)D`<h+Nzjuj^T)1p`6GU>D*D0Y9K94eWF?<1QB51D$<p=b z!A#PBgz~+03|9(f0AHmrxXRL(L{9aF!D~ukP@7WKg=XsU9V!SGD7~bK&j{J@SE#GM zYGIJ6(nT7SB0f7<NaYR|O~c)rF1>0gkk9ARt_XeFU;*2cZ^ORN?4Xrku;-$UVd&nf zy1O)+r44h?*Gdtl2MhJF1*@)2742jiR+QbOpeY>%LkCz4jIsvy+XK5bEuCgB#hX*T z`KYc|3S?b5XnbWCS=_C^bPzOjq8W+OcBtq}t$#uta)UXk(%ESDevs)AnZ7SOSWI>! z%yP``-3(iHoEd0maZ1pxC5)y^gQXIEwC6c5V<1zcq@zyH6bYN@uyn{SNxFmGjo28b zN)>5~n7R)Ed&uM`pP+zAIsUl>-!GSFD_MY(&+=x64$0n9B?%~YBO(L9`9|-XY@gjX z`rgz?j_K_PiZtu=c5;WiJGs7|p55J?tUF+P_Wanx247@e9HI>&=+qUbkNGo%6bE8g zCN5WsM$38lEW$<*+CFoewvEm?XC(1D<i#9LrH6DC$BWak^$@Av#$nxD+nA5`c&0gu z<KZKQ;E-s(lN<FwE(1|s*CEJS2vQ%8d{VMSowT)J^*lSzL+sGWjj&4f_P)GQ3OK3- z95zZ7<P;3jvG)PMo`C>bZKH1P6(58fzzoE!(pExN=CtaZx`Mh+!QD|`e^1+BdnY$H z*WK4Yu%oN5e{iR!DyOz|N)#kmkmO4aBz473-*u^~9=6~qNZt;s*T9gNow?m%(svxL z<rA<acm}><JsP?|Gp2BY<9*aznNonX4s25`lMEA{6hB3BmYw=M$Nkv5hmOJnqtnyw zsno7eY8bly9=miEY`sipa%Qp*#b&ZqB@N}xG$0&YJGtSqkMs^qdd9W&c1d4I7N|i0 zq<L<B9;n)ABe1*;T3`7yauV|Yh_RyWHrIuo<f5Hbz)0$pBrW}`I+lr<qW`1o4<5X8 zecwU|4Trs^*mDcFg+6ZDbyMC^sc5*=5eP!&uBjW6YNMN@jp6DUY^Wo~m=yK<;djh? zTY-f0!<g2N&Ktw1=A)y}FebVEOu+*Id?x%o`h{H>Ntxn@3FyE3z3$=m8jWb237?tV znWW-OaGo^rkSrU|3BSP`Is*lQ=>L{(v-~~}bUL5Xy~%akCHyN&a+t+}3+Ed`H|8nf zU(<6QImqOF^UxS2b5aOoQgF80Etxs%a(W?hy*>{dC9~Xqh{A<7q=s}`a89|BCg){; zdzmDeHlfQgUs94p^oNw`CoB_mtVutqja<ScB{ohZb0Ca8hrgupL^2b<Cz8f1$y}Kf zl3D0UleZxihKv_yV$DgyeJDqKzLcDw$!;?P!sLl$?zzcnCykFuyV6{w6G$a8flmFz zyAW-zza*(?JIb|CsY*==kXEno11RSFB6vRdv^r=cFHu(_{`Z?>1#R(yHnE^BOkVLJ zU)r{KK3)u=C%LRDZVl%=vlN7H-r1}14e2P4OhI^1T8<qy^zZN@d`O1#kUYOIl5^+y z-Q!{7bF1y{(TJ07C9o}vl@F_<3-RJUvA8ds^O+_8?(RR`|JMG+*0`lXv@}FtU9)V9 zS+>2%&di_Apd(w3zH{>JlhMP^xQ55(f13Yi`Aaj)v#Y~mH#XZG5V-?Sxx;JR;W&3x z<c`uw3dd-p6~YMqefc8ONKnd}UKk85u8hwO2FG;9uUUvUVC>*L3gv>|EAu-AZx<}y zgaA=2Y-P@lnXKn(v_5WY5^YW4%+IjF@6ZqW?(c!P@j^<_cm1z3evu!uPQ<MfqIDvS zLmW)z?btc>&bQwFR<u9vXcZl;OZ9O_2W`>%67Iar+nG3baVk0(cWfhvU#H`aZu*Mv za#^w?*YBC{o5NYpErpTcw}!$)iJDqEY^5T6l(rjPi5eg0#LL>nvUcDf8;ahzw<nqt zv$w{qt)G#2G5R`$GvA2U^olq*ra4}-lO4?BsEgJ|hu>?Am$krMb9v>%9LSW-ORaIP zPvrXI<v5+9f5jCq-xEFxoS^!*7R_;61B4VL18by1Rt`nX@+ae+Z{7V?I5T0fMe5($ z72XB0-N3!u_iso0-~LYIJ0zjp^=Rbb(H~8`JMmH9^59D2C(WyNNk9^>-Y-_~kJ}H3 z_5<ND+LDzYzW&yZ@Q#F|e6fCU_(9{nn<y&(URw%tkO7ug-oJq@ceSlcZSmT^SZ>wx z0$Z%OIbP5lHo^T@<Zw8Mmww`b|Eh1eaxCBQi~ORoTGQX;l^<#}{7qx!p#vt}#wg+_ zNk{#~FVPqDTf>9cGNfONFlWE$Ske_T!P{1b-i<M{{mI1f07@*Z9M+w2&)`t5><VRj zf2v)l!*@^G+7T=DoTyeNAt%M!OV8h84XUy3S9xUJTZQ8e=3G_e1AI2tcKS77E^)bf z_@P{^&$T&VRU=*Cq)pdY8TBc&`v`RRdBkhOa}o!inaWDcU}(Y)X4FDi#Q=XeP(WX@ zkQuANOxc%adR(lUfm_v53ZB?9gcDl-TKcs-a#L0&u;sDn%b)hu8q9_rVEzUcid%-U zE_bC3P}gj}VA+;dTX;;`SSFF)`tYEXM{D_M6KsPDo&O3%s4y~cuOgj2CapwLECtsl z*{k^5xf^aLM|LPv?m6%-qp%c$Lq>0a8%{CpD(}5DhE>YpYcN6Q^v+e3lD~{?!?|n7 z1)Q;xf+ocjTkO9EE=KU48XZpY&MKoSS(u!Ve5!7pS5pwFFlOug!K9xJhvKE%3{A|> zUdDN?#2C9g(vomaK|ZZ181l6Tr6!ArhhT@yT>)Ql#pmG}Yh^IJaZvb2=t~nY&#+2| zuSto2McolEagf{;cx#VeaN~vQR^_*STeVtI<1I83Dw#r`T%1V!FjjP`%afb#z!h%6 z$`(ecO3(><b2zXR{uaImnoQ>TZ}5{6Q`c^jj`I62@Ln>XpsFB-(r(N}0plET0O9;B zj2(ml0#bqXng?r67Y{$yg4>BT=p-{MnG}A>Krpkcaq#8>4%u^ig@aW2A0U9&?rn5` zi-L9vSnhA&E}5sgCt^rVTBm%3chnTFcO_Pm>L8tU2R*veg94;_6Nw+S44K4=-N)O7 zYLyjRe@<W)L<atk02Rzw8&1fH43GxJ(j{8DXp?eF0-9P5T80|@f6g@{gs$tc6+&w$ zxraW3J{bu*;+9U)()q$*GaoS~>Ketmfta-#|1nipx2z1rs&>VzAb{T$KAy0aKebk` zS*yX^S(~6yidmbU6_?y^$5ed;XH+#GOLT9CSIwGU`1`Nv1t(S0o9G<?UsbaMZ|rn9 zk9{ya3O*-)=viI;!&^(H*!F{KZ3p9Z!(!d=lX|fZr(%kA<btE_Si~B!%Kkfth>4Jb zXLSwH-Ah;Fb-Ts7-4q8(XL#})k{BQy(u$9(o$<QEfP-ofg8(n9+2#^x0qz{Wi%r_3 z4rse`^6ts-N!$Xmy*@Vd3j0+9I!&kn1<q&uO9Lr;)HD(tU<eM!TLz!(iWMA>7aSK0 zj)zT&@~Wrh?Q7-jOD*y8Ua`D4oKGCaiCANQ%+?>v?e~-X^snr#BYO;gwWo5l-1ILU zMua*Sqcqhr_M!zLwv(C!2spiVEqkC<BIu_ca#5~5pGe(y2<KuM%V~mAnyk~}gRG<r zZVQcIDs<EP2JzYSO(_6hI_XC@ky45o6Q<Kl;caYv&6&YASS>S<es&R@gikSs$PB@? zVjhfA=J94eZ`q=srg2u0nHjd?SDpQ%3bT@`3j3im74)@%`Eu?iss=qgg<;Xc(@)9z zR=`2Wd@x7XVu~svn5&PgmOGT=?bg*fo7Ze4+^GJH$=iBuv;M#hrchCMXlt_`J8*NZ zWlsw9rA}jUY{4wBIE61^anc0SX)ua|7T&($Mu)E~2f0OWFL6Eqp(>L(CUTe|bB9wW zOM^%8(UG#;IJ4q~@Dw5llC7rr4apxmdy#S|r$B=23e&K5PTd+O^E+8FgH4c5SCTW8 zCx*X=BufV2ou6U8x4>60Y1JlH#S`;0I9!|AxvsM(Chu=4duVy~BxdBc${soA1HQA2 zH$gUEVY__X=bPhvkk4>_->i$f<`TRvk7PJ5u{NxA$hvG@AyP)oa<xzp#lU)#Dv@N; zO`haZZUEPTq<U#&t1sgnXXa43EeTZ>DiW&E*V;2?{!J+Po7jK&7eipe23me|%{mIv zm(}C)&IGQ&uN>Hdq+R=jQ+8ol=}&p|`tJ^a7y3uU#$++mPQWWW|L_0tPfcrkC8qA` zmj_ea-IoX8L5rda_bGmccU~yL%^@5%pDiIfS>nav*zD+f|D@sr4JY^#gXV!H?Bs36 z^i2rgCom2Q$`LGd5jv5O1g|N3>cgj$v)9t>sXG@+7;8se>&!Rd$_^qWm_iGUfYe?f ziT0SiX-<j+lBP2whmu8SQnK;W^G=@lv#De@cy3UMWB^NxAIS?<wsUR{N7^SHFenDU zC9uQ8CN-AD;3An7>+4j3gVYKsM($mL@k0d3T)Ar`^Hlm3Mvx$xb4;SlWX23!$BmpA zXD4h4?+`E!fq!G}jdWEDjVkxH=?V7-iHUm#KrliaFmP=#`(R{OWEZnN8vfvo<u}5) z&+S!@W*%N!@hA2l1FKVag3ePy2<}9>FF9dkam3o4PtM{faf&p`BGG~3sr!;qDbhpl zYGY#f1pFt#$59;^GX(H(#O_LVyf9~jMay|n3^!9R3?=4@M3Fr_k|-|03CJ}q(VOv_ z?P3i~2F>}f2tshr3{lzOv+|zR?8KqNiG3pgS}}&aDFj%Ak&H<1y)0P071<-b_p{zH zzioz`=JY+=eOtr^_N=JnoxHd67W)>R4|hDR+O<Xu=a5)66ffK(7Ve3$|Idr;KNz`x zbaCq5#Qh1es4+Ye9s&DRylus?TJ%X};=n<8vO?Cy`;c=n%mop^**t`awm&`e)}csm z#K}a8$B7**CLdiTW$zq$8wWZ^jRZ10uCWopZLGLEdLDuFKW^PFTDQln+u0ZR0~!&n zBQfg;dmLCQjTH|_|KrvjqIE~ix<do)xveN{mR###eo`)l#k&Mj)=Q8ytX-O%1}DmB z4jGFQi@5H>IV$VC@3C|WTeq=HNYBhD2S|3q^F#K!Oz<LT)G;?XavYRUVMp`~!*bfr z$WR8@K@<KmbzU?y2V?2eGtV0tuv#&w?q#-E7lwJ9+oSP^0nf%+d^SmwerR~4+3^p# znjP^J7HRW%#LVI^H<-P#-H0Be%p1r%3S)~NFJG$v3#}zcx|BxuEltP1?ra{t9fx9> zqJxn}Te@#AgKx!o0r`+GX=HkGZPIOCP;cX#|Af`MAY}WU+inIa3*|gEYZKiPV3XdV zrz!YW-U3Z%;imgvjw)6%a_Q(dSjgwXJG*Y_#Bfj?vcngD269#GXtq)tU9O<xsA5~A z%e5qZffFi4P9<_2K2P#9;Lir_=cH`G0*Im5!+h<sl);jxY!e)mZjJ-*A3%QFDVK}M zZ{eVJb4Y2eR;(L)REwH4i;|EX65r#p#258^X|LY2r5(B)RZE-FphMrvp)HpUJLfGp z6Tt%eJLs9%BGw+XroDj`&;oi{C_iGn`#x%*tQEI3@>x@Dd=e=uWo&PyjYIG=5!EcZ z<g}pdG)cF-0N3G%m|b=SEt`3vhvc6v+~E=BPau7km+@B3`v-W7qmdbAa5{-}7ct$< z#Hd@L-AS8n5eX5(;ZP;gRx0S)#D7ux82#op)=R5G)xoM@#SNoS##?5Ly0J0sFlZ(a zsR&lFQdYxfOO=|Z<gw*$$K4~qzhdQw(*2jPd(_SVTnb$Vq}PZs^i&_Mmt$#v`Fxy# z0$3j^@HUB;ogOb#qboy$4E3wZ5Uf#a7pm2zZ&cFP;<)DmeXmg3S2Mfw+1D6PB2?<& zG<_wU6xH1QGolBzELyC|6m<6!<cibeARMqc4`Vt|7GvsxnX|5dvrF3O4ATW#qzJC- zu%#gTiImYrH+Rwt8!R~DhAiBtm{2LeymGv+tLl&)(SMZ^0gmjM*@Pd4KpP&Dc~&}E zlf)UR^Vnd7qpj2?Yh8KuESDY&T1YuI$wZ@eP_vV5$siAy=Da@cQmQ_e$bG(Y3;_9$ zS5QTnuJa`?mxLw9CiB!G$|%t09_r7*9Wm2_P;rpv<z>+1t1C_`8HxF3TU7~$Ai1np zTjwjJ7$hiwVUL8AuT=={>u${^8<a`1O#x!az(-e$6ZlB@AOcR=uaL=|S}A{k-!$>r z08juI@jwx@d05iJj_0dj34Q3HLO%sN5a8h8zodIF1vJ4jslmAqjPiEANn|e2Tq3#X zXXZU07zGywtoCM&aSt(*Z1=5DPj?3>xJ$t}1<e%vLkehs5GE)%OTpU+l3B2h3EY;> zO+86(X8~O}M|Ud}(BQ;eM<>lhJCc4Uk2&{dvI1e6;<r+)K?KPn7zn{o$u+6ytR%<R zuhYkDKP=necKaVt^zD=|7Xi)z@JmP3dFjc7TDR9pDx)V9@lPnJMQO&#%TQOPT4nOG z@K5M#9vg|+@#{&m5)->=Q}L47lHQfJypqM2KsgC36x^Wn@U1<0&2>9zIqHQ-jGZco zjlQo>o)hRCI_$bd--0Dm)@^E%WEKn-VRH2|D%^Pr{+I$<ye0FM%qN{5k94TG@mkV& zBWaQL3r`BZn||RnK=sqSCime@ewjuKyI)ai>fKIOP3>{g`Y+$dwBWCW+5n2J0Wv3Q z!`77IMzOe&opxt;+~5ARxMQujBVn~C>=iiW+un)YKlTDT!ma>u@^Ff*XsLT@p}mrE zORH#UUD~l`>4{l-u$S^_Mb}zISEA5C<}lNX=N`gK@HVk*8{kyZY2lT06kcU<_!Yo$ zRD>;wQb#!NGkf`BiCEDcw{I8i5P<AAw|-6m)LAfhDG_arPi^gMw)VKKL$q})&9B)8 zus0`BQ~&VdQs<I?rT2q*{C0{pJ0sYU^1P;Atm#_vtn{y3|9HoeXUQYh?1|(7R7F+z zXacz&Ni=jmZRlHT=!;_`U&Fu)!}k1+&ndt*$n3@J&#<xc*8BG8YwuM*uKvisGWfx_ zmcJF_u$6GH=-3;{WTrmvo1%x`vp%+dG_}(5!L{XUvAUsn*&eZM4_qpjIS_R8{&eq8 z_I|K`8Jn=`i)ucnAYRfMIkb2TWht)~9UV^{y=#u%xT9Zm^smgXIrhdJdlR({4`-K- zuh>^ke_XnBeCfDYyL+`otQ~$@du*-t*r$i%wdcgzbBm^p>c5&T)*N_(;P7HbqHWtx z^L~=I(*I;&DKFl3L~O(Uzs2lm)_Wu{s&9U5Td}U3T`l_fRs34XG4iy?jXyzfVlfM) zpu^wk4B&X}L9zDWBAp0d&52b#D~HyqhGPF;X;&ZH#(CcFC{iLN()zG0Qs1N~@k6%t zX~~lONz0ZkIg*>&b5h4KE$hQ}VoT0Zwqu)aoS<mc&e*8UTiL=znL=5Z#ar1TZIz)z z-3-{;VSn(18+0IMOzq%*_5}rLv7*3${hs&8;~hmNUQ3-GlE=IE-h1!;e4gL)d+LW) zrXD~4H<wl}t$VjG-%Xrdaj#5%*p@h(I4gM%J?@vhV?TrVeDv6cp}29s+%>S)b#S%o zpxo+B9NsA6x&x%h>h?gL)a`lO7AuaM;wFN8wZgz^XhfN1gzWEL^AE222Upypf4}74 zA1i+1Yky=*%!<B!l5bzkM1N3FHSUL<61V1Qm)iOgS5|uAy@>b36?l6+9)St<XAmc& zBTw4A%ctYRi5jtOKx!Mnj#kg|c)}yL4oa<q(Ie|_f8=l)IyW4xS$a-x@kWNDJp1d7 z7B3x_tL@S5rDKudC90vIqTia|e+yxieX+gqqIlpvQ*3W+uT<BSsFCUhBEzz8`<idx zs&C)QwCEd_e8Z8^=&V@X_QdO7em!CQpj7nkk-U2%$6ybxZpF6l+mSv*_O@qt<MK}b z;_+yaXoZ87XK^eN`s#_Vp1^KYcH5Imd$dffY?Ug3vol(JOe_Xu2clm-+_L7_vFg|% zIyxi=qD>ar@H4~`n5`n+0Ix;IlUx1RWZw=raTX<xi(Ln$u7jfYU}PNNyXsci<Biy& zlTw8<RtfJmxVFJ-5UE(<ru<-TgDbP_VPbLQX<fs^?Q%t9bXKZpgU!0$3)N}8_g}s3 z-w7r7Sm^CL%Xfa%`~BXPK%)11dp_8M`eAcCMdvgWy&4~pntGL}o{5*Ft%1eEPXRbA zi5nB$NoSwv?30{*i=&ZQ5r%kj+-r@!rf``*aknk^$6FK6C*8Y6_io9(J7SL3h!xIc zg>&7#Gd=~6?taNVq}f~Uh=K*ZC24M9mgJu|*NqMp|9q%-tjqF`ojhd91owf<7j*o@ zs<!bqG!if<YhzWKrlD0NK&tYBZh>jbGT$@r`jrySz=T?PJ@Xmp*3)Mc<zKyqjffk9 zoV>5*24-Uu)=R%Y1Wb*tDT`1G7l%u-s{sAE<<QMRJE1!wtD6jKxK@EDYl1#P)yOb? zL?!eQx^wks=&)p}{v=oXg*eofg3+Q8&pDfSu<mNU<u}p7TQ5h4x=HhAEu@tTTlJ*_ z{T){TA7;yqSPiczMBmG5U9~x#R@UcR@O!pKXzoP${r)e*6#b=ml1JrIr>+?z?dOi{ zRGcT2l^7x81&ulG_p!I8foc>$?D8BamU395MrohobI{=&U0};RK*-4}1r8h_#F`hT zi1<o57ak1&C?ReQSboSkXMR?_6*lt$Z3*z;v~~pKe=<A!&TqWUWK9q1$9f5|pTN9< zm1qcfuF#B%!XFQOE(@Xu0!+gfH8%+(>Zh%kSf9XvPMF*aggr~UC2U$Bp7*k2y}Iz# zY)uqW?>3F>QoqAwJDb-c3RCc`3ZYXEPZhyn2#A?+3Qk9ixrr?tQbo6d-GFw{ygJR5 z^7)yIFrp!_oG?y1ZLDgjv@E6U>q%xdtpKOWba4Ix61>4|hsw(08oCnUM<k9S0fDM$ zs`wJDo>Q+1Kc+o@MuN<BxG=+aWzB-7ae59!O>}i8Ri-?y349KvtmAO;K`^@M!+6d@ zoDwa8Q$X-CB1RkO*$eN|J`*EQNtGT#*eh1kLc&eD9L>f<1Z~NgFDvups&ou#RtpsL zz7`0!`PVW`l|vIq6E;L28`v;ug(tI7f**6EYpt<&wXs)h?2{V%XkVRN*R)pGwOZFD z*1;3IXVG}S9K0Tm#x+Ebw(kVy%f3^z4@mZbMdI_QZr<Q3EL}{%3P|(Lm^FS<a$-{0 zBiVbBH9d%LVJx!s$aZ&ZShD*hJ5d7I2S6BN1cJ*2RF$nKD>8@0?UKEljsXz}5L`Wk z-~#<b%hI_A=RiDB?SNITw*FylED)Po9*GCyQ;$ZzJMotjD?KZ(i8}()jzH3VNUR-} zYKIrc<SNHnm1nieqq+wS%az;KDmzyzI}=5TKM*VTNR@jQ53RR%Au`E{=&)pU#<q!8 zue`H!5nlEPMIu?<F}UovC#~%mr5DTC`1;e`TMv~PJ}Pq@@|Zqq;~{lGaKZ&qo%-ZO zHn2i5$qZWB0XBvQv-zbTPMML!%v6sixL@OWW?q_3)u2^)<#gsHzr#6XxO%3%z5HF4 zGvKkb_odB^R{h2TvSx?+0!q5OdUD)Pxi<{|bL{%IyIXX3S)3^&AeXdP*%DKYk(ndt zozQQ3rR1i;vpj4qfE+8&DesDKSpnQw#dJ}wp_Apl5>BL*P)ORCqL>^?*{A#S_Y>H= zS<TJgFU4LXQ(u}UU&Dh^yU(oplJq^S4^)PX-+jzf)21Ft>8dotS3%X$=M-l%Mc1UJ z@mcU0Rk=`5mBn;e8E^^RB*u&M6hU{pnf^1QAjy{?`g*;3OVw@_NL0O#?8tOVcoz@A zUn=|@Z%pH)j4qGpD*@&eRLVcmCpM}aLxp2HC~br@Qozui2_MjLKY&OTpSZq28k<r@ zSwobIDGME=Xll&tBU9Fl&fz%WLpqa&4`qPiUjefkr6^HimXnGiGI)|yJn;7wevI8p zY_m*BW#5&-rb1D@&_I_SYBcU&xxekFfo2S8VxaMW^a|uwTektA(&B-JVy$IpwPi?b z*(<dG8&YlYeM|z}DxeM;dkT*sTWmIddU;NC^hpjZhiD|Z3$mDz<#VEamt@}s4;@d} znx}u&(=U1kB+md=X0+ggK%ggZKixqHG-;bRUMy|vOqir?{SgDyIS-pbP*mHM*e2EP zjuc~c?)1lN62*_2#O4918Ht!GkqE@n(MTY&@C5WdwHQoh5dd)EN8#^>A0PS|FYX5E z)L3%+anbdh<a#bL2Bh?wvuo7}&L`2iS90!+jLPn|cZa?+6u<oVaBN6)k4o;*rRO3? zqJ6U4hh^`ivIYmFWa)V1I0C8Rsui58eNkEW$<5xyV-WzS8?dcs7jX(QMB7iHc-iX{ zGBSRho8ivz)7%-uG=B!H9be+kAj&&t(#GG`V`4PPW+)v5S_<BPw=_Ip+1%&$n`$K< zg@%0QDqJ$y52V-y=>Cc~<P6}X)0%VO_{jq7YC4gVa9ExKTI<rn!nM#)XD6FB5oizi z!J8fMH|U(~?C<Ly*ge?UJ<v7Kv#W2ndfh4QDv|~?Hcb9GyC--9v0GF`{y`{AUP?$K z%Pw(}!x~K;SlAlP#d8L3LDStM7$?f_{Y)9=@Nc}%--YEp%(E`oFlG1x)+8D0ut0iD z#G@?5xv8>X5Ew}CB3=y!Q|99{w~jD}03(G#1g?(ei76xfOfH(FiKUxE(_(E(c#0%$ zdq3szbZC;NAuaS0PDh(E7;TMD?DcDQ?<!pXjPYqj?Ut<Q#WboO>Lwc)r7}Wp>wM=_ zy!Guf%V*v`yL>iT(H$`%qTs1-l*;yoG%((TgE6gQbIrHv8o6)z0_LKhmhg}hepAXE z4AR^d_gESXV!C<#3VpT)gYa~{lK!P67@VG;3I^F-33rfDR%MktrAfK)Z@As7bQe3> zUEIT+&>!x`VkK>kb;D}1Amf{bk`g5{r9Lryp~7Ufg{I;Ku~9isT91ti^Fg)#=~kwE zR&Sy8p2IQf@r77DkfvtJfi}qB{!p#%r{Kz*iGhtzlUOIt-2jxAe4!Aha*7RRFw#xU zU%SQ3G^!pvZP(KRj6Z7t1vP3=tzIXt0qLA~@kL8XT<<d0qY7A6)3p61!q-u{LX?D) zgpI@~i7^t#A%HezRlRc41(hJSN_|gN(@inOK2;(NB(PM5Za1kpL{G8#_b?kva1ki^ zYdGl1$K$PHL#NcxnKakRp7!NAyh|Wmg6j4S_OTVK1CKvm{isRu2gJ5RQrjW6zXgkw z3RlwXRQgh?IhmK*@6Z_im4ZQhwNGE)f7~t7*{0RBKjjRg?hIolD>#F4!(RGpgqn3{ zWb0VLGoXD_)0%sRvoGdgy|m{q^0Pn;e#s169XV;hP2*LTXQ3ZCR(sa`(_;N11}rbE ze1uxv{SZ`_y<o8~o-QK9oxWd()5A918QBsj&doWwJJ9Gi8Nvfq8y~a`aE1%PfO%1v znaL7y(9AJ!;P<Q=B?Q$DwMR9r5ZV9d7Kp)Q8vF_u=QNGx*%VRWL%xaznd`fE_%cRe zVnR`ks~H9lB2SqD{yZ}`%LcFCoXRFsye4~})oq}7g3LmhMjWUYqzeZ?mqJwUO!t-H zdS^##dnR2!O<HBbp?%VXhfz30cJ7#bm)9=iw4*m^q7f;2Qw`C#7c2-*vn3V0sI`4~ zwtaoo7*^^T^7TIcl@~d<u#q3{uj4PPdo7fT{<`^(%EcZL9_TivZc{~5>}vO42=l11 zh6#n}qF7lt{139EtQp9p4TgzHFkM>|{svS%jLnD}{`%pWi_j|tG10m(pEkly3nMro zM9rU`ni38>Wf>1%zqT+xKKc6X9ocR-7=&I94I|AioDC+f9{qi!6Z#s``prF#Sq#Bv zSmTitAAi?7ZE-%{pK!f5px7XlnLEuuj`E6B3^7m8d!GZZYvp?*Vq>q=*c&N{@=K+# zuts^Zc0MTm*7U=<_$m0_OHDmLIQ7A~#{sc#MCuz6n?}Tn5jtiG|MJ$l#R+9j@Jr-L zDX>zdz>d(4HWGh?2TH`%<Sl{v>7jiukZ2*nPy<W&<ToqoJSr~X3lOOilqeMiKEO_n zvK4+qNtIBuzyQa1nnP5lo#&}&)3do$c}_9jt}R%?e@eyqFGvB!`D+iO=8aZAY!ItF z;Qs{+2Am~5+8w{P5>vvR=&pwc6uU9`Z4NzYaz4BiTUdTWY}yS-KdGx0PdufaapR-% zq<27U8ic`>_HP(X7R(Ft2oM9;!4hsIzt9&}%Nmkp4Y6v;wQJ2awCWlXU3(?h-p7_z z*J#o;N^}mEm^Z!~R_ejb@@#RG)@<gOH&!b;wo8ufi=$Y!B+U+GlvQU-xLfM4sptRX z6_lrbzP6bSA*73N36%`a$+pqAbO`sX@{8u}S^GnN>(O5z3-9A!d8r8Ym&5#<FI|Ss zD?5ABy4Wpf@VmL(b8vt(Ju22a9HRH>LBB)&Uizh-3%pXQ?k&ppFS#q3yGD$K8veRz zD1g8Phf@iQPJPt<-f65&wDFRrb6EY};{Bx)Y|?gn;ONX8apM!?l5=u;T2bJD+k6UR z;S5X|Ga1wx_3K%Rt`NiToVx8IxBcr2^dnI=b!ZO3fItN5m<V1$u7p=1Qif|m)--SL zRT~1?P3Gpa{9>9EG6Sqraj^?c&45<^^1RDmrnqn)rF7ZcleJVAePxaKC-jLXAPVY- zOl+XWnY<Y!{kq?zwC>-c_OKo?RScXQKrg8>x<7Q8lx?+}OfSryLmJw7X$Ha;)Rf8J zQyX5xf%mwl<u#Fo=vlG6T`F&f{@U^~|D?*9biE{2ot3K2Caq_oC%*p%upf)Yb!!DQ z%4=57s?{S}eUjA|Z(C(fBZ(K1eaGY`C$-lnbxq&89y|4oI}h(9TIJTG(0kX9lBW(N znVUz^uND)5EkvaFX;T-p;15nn)jQ&+rRrUBb^XVtqUIXFQ<`fcWzgC0IuJ2FD36sZ zoV$207c07w6<r&)Oe(*w;Nafu3W`<drK<Bu>v^U5qS(|IRaw@21vF&6aXA0dJg1@Y zX^?Tbc398bu+{1FT^^cp=Ki4_RM8|*_{vM)EinD~f1}xG8x6Fh)5c7r$u_q9+FyO1 z@0xJ^V*Hnoc^M80AFv698L(VUcaWtyS<o1GbLlnpIfc*i@0&td*zzp*fR5;=EZ5e% zwgr2p+yKzF7BC*?(8Ej{vt_2g2b3!61dP7VP}*9fcv$1B3|Eix>Ei4a0QOZD2Uh)l z7?!tChd1ZP)u<a_ujvBMR(mzLZd7Qmn02Gcq^WxnswcT_uj*2QTp6cJ3WxsGmk<E! zEZ6rxLax>4{Y<UJoNg^I<4hHB@J#nx8Llkg_L1YRgGHPYD5}8mx)M;GLvn%rId=>w zH9aS|Aw*HW=_@>2N(94BpZi0cX$TwX8?$<_Pe^kEZLw-$yYlo&<_^WE?MD$5(h%O7 zty9m~N)$+cHC$n;!&MB@UviPxwdkBl2!r%jg{xUEx4})LI(yCVR@zIDe&o1Dm*X7A zfOL+Fe$O1&<jrx;wOEd8)Ewhe{v0FE4us_9k+*|jVNh!>$aHHmWsm#SKx07gl;g$} zwkuDwz}YpQakfJ_`+flFIGA;-bg}`%k-8XFCL?L;)7i@cs5BRD&cnb(O6(AL12c<L z1aZp1MpVH2|6?_L4a_fOi3;VxQ<LUQxwLXwr;m>GXIAbi<zaTsPN~68Qz)^}3=tEi zZ^G%@Y?I2Dwpt`?o_2fJc)AG47h!%5;o2^cevhVZ(C`r<EHbf^RMc5cMnHt|TorT$ zA58mm_tUQTQ09KS25QYFVt+_KWl`2Dz*@6vWhz21&IZFG!1oIZcDMvP6h_5)`sAf_ z*ma1Y1_69t6BdNOreEeD{I!Z+u_O(F!K5woFbEc%Da#Bj8e}>&n`5|WM6F>D4N0Q3 zg&$Jt7W!R5O`9_bfyWU^f*SyQjpX^SU_fqAw!Tc_GznVlrOeD6nSnVAKcP%MresUV zs)+qC$YpYuV(HVB8CjgNOw1z{+gdfP-0A6ne+hL>d3xIUXTIN4H2++}SP2b!1BY2< zejGEKh`u0Jy(m?^n6$pQURCp;0}&l+9BI5V>|oWkI>d5|#r-h{u{gY5-%O19TKsPP z;9C8G)%pWseL$)Yfa|BaX7LCa_YTW#-5Xr3ZP&*n5IP0mW6RU}#)kv%oQ&7LeGbOE z`aT32iI|@NK<RsDIBt1+VtGQW+a=ZQij=Ikb-Ww=PEc&?m)iPa%Bu`uhD&m39Hz5= z1TKiqeEZdJz8ZInO&wBGNBlLZsat`iB%T-R`hh~t2bEqKks5~|ACVfzA|ufLI+~)B z4{pT*fAYo17iAw3d1Q&2V_N|wwynFp%li@yiK!LW_h#_kAi4Li+>qQOQM2rW(eP0@ z;)W;(KP52cU$s2)Cq`Df0W#_NU`%X3fUqv2`=I1L7&#gphQW_q$bTm^ZL4>!b#S$H zaK$IK4oj`WxPQ;mxa{_<xd&F=1AklfWBX&fI5;W|j*9Lv$vp;uFMz#E&#kxaP>v<E z=<YaxqP>#4H}fm9<7`vWwJjQSEgqpc2VLtXdyKmvx)whd+1y!l?J>lLq3|$nZ_I-b z6?eq#d!+4q#1_K*!pteVS^!L~d{7n*0F=IkkhN|sN>FP`=(?q1r5nEbbV-mXLC|$u zV%-mIYmV)!j_slYQA~)cia3@ave!MD-0H?Aw|HVT2zc_!d!3IuMb{vnKwt@`Sr_S- z5U-+p$riEERa>CvXm-U~A_K5U*N~0Oa*#Askc%V4{aF$>1JvvrSa~h!42aHv<P4<k zvcyAmGj=n6WBHAh=abC`#O4E1^MSOf7W`4Urdq#6prKW$BSB6rtZ!9B1AV2i#v>z& zHPIk+;M;`XaB2h!z*Bx6^cxc+U|bXaPU!{zojRNUAn~6h{)@y8N@bP=DKms`kob@U z^MzsFEZ?KAZ;~LwR^b7CB8#f<5q<q<62BlpwoC?`6E^7689Id4z`{1DZ*pyUWNsEn zc<>*x;D~$b--h7`Z!%M)D98x|*E=8&?3efKmxm6>wM`qAauYyedeJh*n~vile9GHd z!v%v0y}~9rX4+|L+Tir!JYQ-WLxLJv*KDfW;Pm1!KVSmkmnv@X#|)IaP4cu+J%$~9 zgFjeA$!(G&#aDS#!v?33=ZgkRaLLe%8$374Pw=vT=SI<C-c+^0ZITm)fWd?op^?Xo zU8d>{PA_Kp9dwu~&hb_gs`X|OJ^V54{Z;m-rfQQ5@QaM-=r+}EaH^Q)D@~Iq#7)vS z!P6D<OGPJ3b;Cc%Drw4m6ZD9fh+#N}f#upQWq$ApYFWy7sqfmYR3$Xp6!Q;A^p0z{ zSoFVQ<z48bqqe1~`Z@q#fwLfSGa)$zpNY71myzT@;CiVo>~jbCK3=8hj7IDfNJ~J< z3PnGZO$&^L#DPf6@$++RbQiux7pu-(jG{^sEg!>mTD9MV|D~%rG6&}JwFqRzN;wPt z+>s%#sn~SlHz@;#c|_5BW&Q$6Lm+jFP)6eGlxEpwf*=zyG}!Q&9&8KkwlVAtX#ax( ztnvb_UQ<>Or-S1evH0MvC(zP0RiW;>G6`NoBtdifRDG6uoj3@mE}?9L*RBhp>zJ?6 zsxxK1FnMbx1m8C*5P`Ir0<8oEre@nRd-)2ucCybnv~UZ|L`C522HuEF6~<RUiY1uP zNf3wthXXjkI**)Q<+tX&3a((k(1U|f7F=i_K0xus^Bctm-iU4*!p!j%_sZ!{=BkpJ zP3Fq(u|Lg+<|L=vWUeEr-}EVrCAor|%xz2RH<{~A>NlBlCH0%k?Mv!6nd?aw*ksOf zkNwG9Yck)a-r73nPU<(Ab0+nh%(W-=o6K!b>bHEia45;?Hkmt^%(rd65t*~!GfSL3 zY8E+{#0p}aEBcb<E4H_6ix=)+{NpQMyAnn4!Ef*T=DxT?tnZQPdk}=MzE7@qCR>K! nNK?KSn$7aPP;&Ah=7E4F6~cVT!K1^;FF$7ce^uaD)*byHAQTE- diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/surrogate_models.cpython-39.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/surrogate_models.cpython-39.pyc deleted file mode 100644 index f44a774b4165e6ff769d8db2f2c13c4dd0cbe8b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35188 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 X?l%ZtK(YD%eZCe!@XRZi#_|6P0+p{e diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/wrapper.cpython-311.pyc b/examples/model-comparison/bayesvalidrox/surrogate_models/__pycache__/wrapper.cpython-311.pyc deleted file mode 100644 index a6d61c979e164a0fd590b3f925c2d1ac68adb4fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10433 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 LLnU{FOrHM&T=ouO diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/adaptPlot.py b/examples/model-comparison/bayesvalidrox/surrogate_models/adaptPlot.py deleted file mode 100644 index 102f0373c..000000000 --- a/examples/model-comparison/bayesvalidrox/surrogate_models/adaptPlot.py +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Created on Thu Aug 13 13:46:24 2020 - -@author: farid -""" -import os -from sklearn.metrics import mean_squared_error, r2_score -from itertools import cycle -from matplotlib.backends.backend_pdf import PdfPages -import matplotlib.pyplot as plt - - -def adaptPlot(PCEModel, Y_Val, Y_PC_Val, Y_PC_Val_std, x_values=[], - plotED=False, SaveFig=True): - - NrofSamples = PCEModel.ExpDesign.n_new_samples - initNSamples = PCEModel.ExpDesign.n_init_samples - itrNr = 1 + (PCEModel.ExpDesign.X.shape[0] - initNSamples)//NrofSamples - - oldEDY = PCEModel.ExpDesign.Y - - if SaveFig: - newpath = 'adaptivePlots' - os.makedirs(newpath, exist_ok=True) - - # create a PdfPages object - pdf = PdfPages(f'./{newpath}/Model_vs_PCEModel_itr_{itrNr}.pdf') - - # List of markers and colors - color = cycle((['b', 'g', 'r', 'y', 'k'])) - marker = cycle(('x', 'd', '+', 'o', '*')) - - OutNames = list(Y_Val.keys()) - x_axis = 'Time [s]' - - if len(OutNames) == 1: - OutNames.insert(0, x_axis) - try: - x_values = Y_Val['x_values'] - except KeyError: - x_values = x_values - - fig = plt.figure(figsize=(24, 16)) - - # Plot the model vs PCE model - for keyIdx, key in enumerate(PCEModel.ModelObj.Output.names): - Y_PC_Val_ = Y_PC_Val[key] - Y_PC_Val_std_ = Y_PC_Val_std[key] - Y_Val_ = Y_Val[key] - if Y_Val_.ndim == 1: - Y_Val_ = Y_Val_.reshape(1, -1) - old_EDY = oldEDY[key] - if isinstance(x_values, dict): - x = x_values[key] - else: - x = x_values - - for idx, y in enumerate(Y_Val_): - Color = next(color) - Marker = next(marker) - - plt.plot( - x, y, color=Color, marker=Marker, - lw=2.0, label='$Y_{%s}^{M}$'%(idx+itrNr) - ) - - plt.plot( - x, Y_PC_Val_[idx], color=Color, marker=Marker, - lw=2.0, linestyle='--', label='$Y_{%s}^{PCE}$'%(idx+itrNr) - ) - plt.fill_between( - x, Y_PC_Val_[idx]-1.96*Y_PC_Val_std_[idx], - Y_PC_Val_[idx]+1.96*Y_PC_Val_std_[idx], color=Color, - alpha=0.15 - ) - - if plotED: - for output in old_EDY: - plt.plot(x, output, color='grey', alpha=0.1) - - # Calculate the RMSE - RMSE = mean_squared_error(Y_PC_Val_, Y_Val_, squared=False) - R2 = r2_score(Y_PC_Val_.reshape(-1, 1), Y_Val_.reshape(-1, 1)) - - plt.ylabel(key) - plt.xlabel(x_axis) - plt.title(key) - - ax = fig.axes[0] - ax.legend(loc='best', frameon=True) - fig.canvas.draw() - ax.text(0.65, 0.85, - f'RMSE = {round(RMSE, 3)}\n$R^2$ = {round(R2, 3)}', - transform=ax.transAxes, color='black', - bbox=dict(facecolor='none', - edgecolor='black', - boxstyle='round,pad=1') - ) - plt.grid() - - if SaveFig: - # save the current figure - pdf.savefig(fig, bbox_inches='tight') - - # Destroy the current plot - plt.clf() - pdf.close() diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/apoly_construction.py b/examples/model-comparison/bayesvalidrox/surrogate_models/apoly_construction.py deleted file mode 100644 index 40830fe8a..000000000 --- a/examples/model-comparison/bayesvalidrox/surrogate_models/apoly_construction.py +++ /dev/null @@ -1,124 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -import numpy as np - - -def apoly_construction(Data, degree): - """ - Construction of Data-driven Orthonormal Polynomial Basis - Author: Dr.-Ing. habil. Sergey Oladyshkin - Department of Stochastic Simulation and Safety Research for Hydrosystems - Institute for Modelling Hydraulic and Environmental Systems - Universitaet Stuttgart, Pfaffenwaldring 5a, 70569 Stuttgart - E-mail: Sergey.Oladyshkin@iws.uni-stuttgart.de - http://www.iws-ls3.uni-stuttgart.de - The current script is based on definition of arbitrary polynomial chaos - expansion (aPC), which is presented in the following manuscript: - Oladyshkin, S. and W. Nowak. Data-driven uncertainty quantification using - the arbitrary polynomial chaos expansion. Reliability Engineering & System - Safety, Elsevier, V. 106, P. 179-190, 2012. - DOI: 10.1016/j.ress.2012.05.002. - - Parameters - ---------- - Data : array - Raw data. - degree : int - Maximum polynomial degree. - - Returns - ------- - Polynomial : array - The coefficients of the univariate orthonormal polynomials. - - """ - if Data.ndim !=1: - raise AttributeError('Data should be a 1D array') - - # Initialization - dd = degree + 1 - nsamples = len(Data) - - # Forward linear transformation (Avoiding numerical issues) - MeanOfData = np.mean(Data) - Data = Data/MeanOfData - - # Compute raw moments of input data - raw_moments = [np.sum(np.power(Data, p))/nsamples for p in range(2*dd+2)] - - # Main Loop for Polynomial with degree up to dd - PolyCoeff_NonNorm = np.empty((0, 1)) - Polynomial = np.zeros((dd+1, dd+1)) - - for degree in range(dd+1): - Mm = np.zeros((degree+1, degree+1)) - Vc = np.zeros((degree+1)) - - # Define Moments Matrix Mm - for i in range(degree+1): - for j in range(degree+1): - if (i < degree): - Mm[i, j] = raw_moments[i+j] - - elif (i == degree) and (j == degree): - Mm[i, j] = 1 - - # Numerical Optimization for Matrix Solver - Mm[i] = Mm[i] / max(abs(Mm[i])) - - # Defenition of Right Hand side ortogonality conditions: Vc - for i in range(degree+1): - Vc[i] = 1 if i == degree else 0 - - # Solution: Coefficients of Non-Normal Orthogonal Polynomial: Vp Eq.(4) - try: - Vp = np.linalg.solve(Mm, Vc) - except: - inv_Mm = np.linalg.pinv(Mm) - Vp = np.dot(inv_Mm, Vc.T) - - if degree == 0: - PolyCoeff_NonNorm = np.append(PolyCoeff_NonNorm, Vp) - - if degree != 0: - if degree == 1: - zero = [0] - else: - zero = np.zeros((degree, 1)) - PolyCoeff_NonNorm = np.hstack((PolyCoeff_NonNorm, zero)) - - PolyCoeff_NonNorm = np.vstack((PolyCoeff_NonNorm, Vp)) - - if 100*abs(sum(abs(np.dot(Mm, Vp)) - abs(Vc))) > 0.5: - print('\n---> Attention: Computational Error too high !') - print('\n---> Problem: Convergence of Linear Solver') - - # Original Numerical Normalization of Coefficients with Norm and - # orthonormal Basis computation Matrix Storrage - # Note: Polynomial(i,j) correspont to coefficient number "j-1" - # of polynomial degree "i-1" - P_norm = 0 - for i in range(nsamples): - Poly = 0 - for k in range(degree+1): - if degree == 0: - Poly += PolyCoeff_NonNorm[k] * (Data[i]**k) - else: - Poly += PolyCoeff_NonNorm[degree, k] * (Data[i]**k) - - P_norm += Poly**2 / nsamples - - P_norm = np.sqrt(P_norm) - - for k in range(degree+1): - if degree == 0: - Polynomial[degree, k] = PolyCoeff_NonNorm[k]/P_norm - else: - Polynomial[degree, k] = PolyCoeff_NonNorm[degree, k]/P_norm - - # Backward linear transformation to the real data space - Data *= MeanOfData - for k in range(len(Polynomial)): - Polynomial[:, k] = Polynomial[:, k] / (MeanOfData**(k)) - - return Polynomial diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/bayes_linear.py b/examples/model-comparison/bayesvalidrox/surrogate_models/bayes_linear.py deleted file mode 100644 index 3bd827ac0..000000000 --- a/examples/model-comparison/bayesvalidrox/surrogate_models/bayes_linear.py +++ /dev/null @@ -1,523 +0,0 @@ -import numpy as np -from sklearn.base import RegressorMixin -from sklearn.linear_model._base import LinearModel -from sklearn.utils import check_X_y, check_array, as_float_array -from sklearn.utils.validation import check_is_fitted -from scipy.linalg import svd -import warnings -from sklearn.preprocessing import normalize as f_normalize - - - -class BayesianLinearRegression(RegressorMixin,LinearModel): - ''' - Superclass for Empirical Bayes and Variational Bayes implementations of - Bayesian Linear Regression Model - ''' - def __init__(self, n_iter, tol, fit_intercept,copy_X, verbose): - self.n_iter = n_iter - self.fit_intercept = fit_intercept - self.copy_X = copy_X - self.verbose = verbose - self.tol = tol - - - def _check_convergence(self, mu, mu_old): - ''' - Checks convergence of algorithm using changes in mean of posterior - distribution of weights - ''' - return np.sum(abs(mu-mu_old)>self.tol) == 0 - - - def _center_data(self,X,y): - ''' Centers data''' - X = as_float_array(X,copy = self.copy_X) - # normalisation should be done in preprocessing! - X_std = np.ones(X.shape[1], dtype = X.dtype) - if self.fit_intercept: - X_mean = np.average(X,axis = 0) - y_mean = np.average(y,axis = 0) - X -= X_mean - y = y - y_mean - else: - X_mean = np.zeros(X.shape[1],dtype = X.dtype) - y_mean = 0. if y.ndim == 1 else np.zeros(y.shape[1], dtype=X.dtype) - return X,y, X_mean, y_mean, X_std - - - def predict_dist(self,X): - ''' - Calculates mean and variance of predictive distribution for each data - point of test set.(Note predictive distribution for each data point is - Gaussian, therefore it is uniquely determined by mean and variance) - - Parameters - ---------- - x: array-like of size (n_test_samples, n_features) - Set of features for which corresponding responses should be predicted - - Returns - ------- - :list of two numpy arrays [mu_pred, var_pred] - - mu_pred : numpy array of size (n_test_samples,) - Mean of predictive distribution - - var_pred: numpy array of size (n_test_samples,) - Variance of predictive distribution - ''' - # Note check_array and check_is_fitted are done within self._decision_function(X) - mu_pred = self._decision_function(X) - data_noise = 1./self.beta_ - model_noise = np.sum(np.dot(X,self.eigvecs_)**2 * self.eigvals_,1) - var_pred = data_noise + model_noise - return [mu_pred,var_pred] - - - - -class EBLinearRegression(BayesianLinearRegression): - ''' - Bayesian Regression with type II maximum likelihood (Empirical Bayes) - - Parameters: - ----------- - n_iter: int, optional (DEFAULT = 300) - Maximum number of iterations - - tol: float, optional (DEFAULT = 1e-3) - Threshold for convergence - - optimizer: str, optional (DEFAULT = 'fp') - Method for optimization , either Expectation Maximization or - Fixed Point Gull-MacKay {'em','fp'}. Fixed point iterations are - faster, but can be numerically unstable (especially in case of near perfect fit). - - fit_intercept: bool, optional (DEFAULT = True) - If True includes bias term in model - - perfect_fit_tol: float (DEAFAULT = 1e-5) - Prevents overflow of precision parameters (this is smallest value RSS can have). - ( !!! Note if using EM instead of fixed-point, try smaller values - of perfect_fit_tol, for better estimates of variance of predictive distribution ) - - alpha: float (DEFAULT = 1) - Initial value of precision paramter for coefficients ( by default we define - very broad distribution ) - - copy_X : boolean, optional (DEFAULT = True) - If True, X will be copied, otherwise will be - - verbose: bool, optional (Default = False) - If True at each iteration progress report is printed out - - Attributes - ---------- - coef_ : array, shape = (n_features) - Coefficients of the regression model (mean of posterior distribution) - - intercept_: float - Value of bias term (if fit_intercept is False, then intercept_ = 0) - - alpha_ : float - Estimated precision of coefficients - - beta_ : float - Estimated precision of noise - - eigvals_ : array, shape = (n_features, ) - Eigenvalues of covariance matrix (from posterior distribution of weights) - - eigvecs_ : array, shape = (n_features, n_featues) - Eigenvectors of covariance matrix (from posterior distribution of weights) - - ''' - - def __init__(self,n_iter = 300, tol = 1e-3, optimizer = 'fp', fit_intercept = True, - normalize=True, perfect_fit_tol = 1e-6, alpha = 1, copy_X = True, verbose = False): - super(EBLinearRegression,self).__init__(n_iter, tol, fit_intercept, copy_X, verbose) - if optimizer not in ['em','fp']: - raise ValueError('Optimizer can be either "em" or "fp" ') - self.optimizer = optimizer - self.alpha = alpha - self.perfect_fit = False - self.normalize = True - self.scores_ = [np.NINF] - self.perfect_fit_tol = perfect_fit_tol - - def _check_convergence(self, mu, mu_old): - ''' - Checks convergence of algorithm using changes in mean of posterior - distribution of weights - ''' - return np.sum(abs(mu-mu_old)>self.tol) == 0 - - - def _center_data(self,X,y): - ''' Centers data''' - X = as_float_array(X,copy = self.copy_X) - # normalisation should be done in preprocessing! - X_std = np.ones(X.shape[1], dtype = X.dtype) - if self.fit_intercept: - X_mean = np.average(X, axis=0) - X -= X_mean - if self.normalize: - X, X_std = f_normalize(X, axis=0, copy=False, - return_norm=True) - else: - X_std = np.ones(X.shape[1], dtype=X.dtype) - y_mean = np.average(y, axis=0) - y = y - y_mean - else: - X_mean = np.zeros(X.shape[1],dtype = X.dtype) - y_mean = 0. if y.ndim == 1 else np.zeros(y.shape[1], dtype=X.dtype) - return X,y, X_mean, y_mean, X_std - - def fit(self, X, y): - ''' - Fits Bayesian Linear Regression using Empirical Bayes - - Parameters - ---------- - X: array-like of size [n_samples,n_features] - Matrix of explanatory variables (should not include bias term) - - y: array-like of size [n_features] - Vector of dependent variables. - - Returns - ------- - object: self - self - - ''' - # preprocess data - X, y = check_X_y(X, y, dtype=np.float64, y_numeric=True) - n_samples, n_features = X.shape - X, y, X_mean, y_mean, X_std = self._center_data(X, y) - self._x_mean_ = X_mean - self._y_mean = y_mean - self._x_std = X_std - - # precision of noise & and coefficients - alpha = self.alpha - var_y = np.var(y) - # check that variance is non zero !!! - if var_y == 0 : - beta = 1e-2 - else: - beta = 1. / np.var(y) - - # to speed all further computations save svd decomposition and reuse it later - u,d,vt = svd(X, full_matrices = False) - Uy = np.dot(u.T,y) - dsq = d**2 - mu = 0 - - for i in range(self.n_iter): - - # find mean for posterior of w ( for EM this is E-step) - mu_old = mu - if n_samples > n_features: - mu = vt.T * d/(dsq+alpha/beta) - else: - # clever use of SVD here , faster for large n_features - mu = u * 1./(dsq + alpha/beta) - mu = np.dot(X.T,mu) - mu = np.dot(mu,Uy) - - # precompute errors, since both methods use it in estimation - error = y - np.dot(X,mu) - sqdErr = np.sum(error**2) - - if sqdErr / n_samples < self.perfect_fit_tol: - self.perfect_fit = True - warnings.warn( ('Almost perfect fit!!! Estimated values of variance ' - 'for predictive distribution are computed using only RSS')) - break - - if self.optimizer == "fp": - gamma = np.sum(beta*dsq/(beta*dsq + alpha)) - # use updated mu and gamma parameters to update alpha and beta - # !!! made computation numerically stable for perfect fit case - alpha = gamma / (np.sum(mu**2) + np.finfo(np.float32).eps ) - beta = ( n_samples - gamma ) / (sqdErr + np.finfo(np.float32).eps ) - else: - # M-step, update parameters alpha and beta to maximize ML TYPE II - eigvals = 1. / (beta * dsq + alpha) - alpha = n_features / ( np.sum(mu**2) + np.sum(1/eigvals) ) - beta = n_samples / ( sqdErr + np.sum(dsq/eigvals) ) - - # if converged or exceeded maximum number of iterations => terminate - converged = self._check_convergence(mu_old,mu) - if self.verbose: - print( "Iteration {0} completed".format(i) ) - if converged is True: - print("Algorithm converged after {0} iterations".format(i)) - if converged or i==self.n_iter -1: - break - eigvals = 1./(beta * dsq + alpha) - self.coef_ = beta*np.dot(vt.T*d*eigvals ,Uy) - self._set_intercept(X_mean,y_mean,X_std) - self.beta_ = beta - self.alpha_ = alpha - self.eigvals_ = eigvals - self.eigvecs_ = vt.T - - # set intercept_ - if self.fit_intercept: - self.coef_ = self.coef_ / X_std - self.intercept_ = y_mean - np.dot(X_mean, self.coef_.T) - else: - self.intercept_ = 0. - - return self - - def predict(self,X, return_std=False): - ''' - Computes predictive distribution for test set. - Predictive distribution for each data point is one dimensional - Gaussian and therefore is characterised by mean and variance. - - Parameters - ----------- - X: {array-like, sparse} (n_samples_test, n_features) - Test data, matrix of explanatory variables - - Returns - ------- - : list of length two [y_hat, var_hat] - - y_hat: numpy array of size (n_samples_test,) - Estimated values of targets on test set (i.e. mean of predictive - distribution) - - var_hat: numpy array of size (n_samples_test,) - Variance of predictive distribution - ''' - y_hat = np.dot(X,self.coef_) + self.intercept_ - - if return_std: - if self.normalize: - X = (X - self._x_mean_) / self._x_std - data_noise = 1./self.beta_ - model_noise = np.sum(np.dot(X,self.eigvecs_)**2 * self.eigvals_,1) - var_pred = data_noise + model_noise - std_hat = np.sqrt(var_pred) - return y_hat, std_hat - else: - return y_hat - - -# ============================== VBLR ========================================= - -def gamma_mean(a,b): - ''' - Computes mean of gamma distribution - - Parameters - ---------- - a: float - Shape parameter of Gamma distribution - - b: float - Rate parameter of Gamma distribution - - Returns - ------- - : float - Mean of Gamma distribution - ''' - return float(a) / b - - - -class VBLinearRegression(BayesianLinearRegression): - ''' - Implements Bayesian Linear Regression using mean-field approximation. - Assumes gamma prior on precision parameters of coefficients and noise. - - Parameters: - ----------- - n_iter: int, optional (DEFAULT = 100) - Maximum number of iterations for KL minimization - - tol: float, optional (DEFAULT = 1e-3) - Convergence threshold - - fit_intercept: bool, optional (DEFAULT = True) - If True will use bias term in model fitting - - a: float, optional (Default = 1e-4) - Shape parameter of Gamma prior for precision of coefficients - - b: float, optional (Default = 1e-4) - Rate parameter of Gamma prior for precision coefficients - - c: float, optional (Default = 1e-4) - Shape parameter of Gamma prior for precision of noise - - d: float, optional (Default = 1e-4) - Rate parameter of Gamma prior for precision of noise - - verbose: bool, optional (Default = False) - If True at each iteration progress report is printed out - - Attributes - ---------- - coef_ : array, shape = (n_features) - Coefficients of the regression model (mean of posterior distribution) - - intercept_: float - Value of bias term (if fit_intercept is False, then intercept_ = 0) - - alpha_ : float - Mean of precision of coefficients - - beta_ : float - Mean of precision of noise - - eigvals_ : array, shape = (n_features, ) - Eigenvalues of covariance matrix (from posterior distribution of weights) - - eigvecs_ : array, shape = (n_features, n_featues) - Eigenvectors of covariance matrix (from posterior distribution of weights) - - ''' - - def __init__(self, n_iter = 100, tol =1e-4, fit_intercept = True, - a = 1e-4, b = 1e-4, c = 1e-4, d = 1e-4, copy_X = True, - verbose = False): - super(VBLinearRegression,self).__init__(n_iter, tol, fit_intercept, copy_X, - verbose) - self.a,self.b = a, b - self.c,self.d = c, d - - - def fit(self,X,y): - ''' - Fits Variational Bayesian Linear Regression Model - - Parameters - ---------- - X: array-like of size [n_samples,n_features] - Matrix of explanatory variables (should not include bias term) - - Y: array-like of size [n_features] - Vector of dependent variables. - - Returns - ------- - object: self - self - ''' - # preprocess data - X, y = check_X_y(X, y, dtype=np.float64, y_numeric=True) - n_samples, n_features = X.shape - X, y, X_mean, y_mean, X_std = self._center_data(X, y) - self._x_mean_ = X_mean - self._y_mean = y_mean - self._x_std = X_std - - # SVD decomposition, done once , reused at each iteration - u,D,vt = svd(X, full_matrices = False) - dsq = D**2 - UY = np.dot(u.T,y) - - # some parameters of Gamma distribution have closed form solution - a = self.a + 0.5 * n_features - c = self.c + 0.5 * n_samples - b,d = self.b, self.d - - # initial mean of posterior for coefficients - mu = 0 - - for i in range(self.n_iter): - - # update parameters of distribution Q(weights) - e_beta = gamma_mean(c,d) - e_alpha = gamma_mean(a,b) - mu_old = np.copy(mu) - mu,eigvals = self._posterior_weights(e_beta,e_alpha,UY,dsq,u,vt,D,X) - - # update parameters of distribution Q(precision of weights) - b = self.b + 0.5*( np.sum(mu**2) + np.sum(eigvals)) - - # update parameters of distribution Q(precision of likelihood) - sqderr = np.sum((y - np.dot(X,mu))**2) - xsx = np.sum(dsq*eigvals) - d = self.d + 0.5*(sqderr + xsx) - - # check convergence - converged = self._check_convergence(mu,mu_old) - if self.verbose is True: - print("Iteration {0} is completed".format(i)) - if converged is True: - print("Algorithm converged after {0} iterations".format(i)) - - # terminate if convergence or maximum number of iterations are achieved - if converged or i==(self.n_iter-1): - break - - # save necessary parameters - self.beta_ = gamma_mean(c,d) - self.alpha_ = gamma_mean(a,b) - self.coef_, self.eigvals_ = self._posterior_weights(self.beta_, self.alpha_, UY, - dsq, u, vt, D, X) - self._set_intercept(X_mean,y_mean,X_std) - self.eigvecs_ = vt.T - return self - - - def _posterior_weights(self, e_beta, e_alpha, UY, dsq, u, vt, d, X): - ''' - Calculates parameters of approximate posterior distribution - of weights - ''' - # eigenvalues of covariance matrix - sigma = 1./ (e_beta*dsq + e_alpha) - - # mean of approximate posterior distribution - n_samples, n_features = X.shape - if n_samples > n_features: - mu = vt.T * d/(dsq + e_alpha/e_beta)# + np.finfo(np.float64).eps) - else: - mu = u * 1./(dsq + e_alpha/e_beta)# + np.finfo(np.float64).eps) - mu = np.dot(X.T,mu) - mu = np.dot(mu,UY) - return mu,sigma - - def predict(self,X, return_std=False): - ''' - Computes predictive distribution for test set. - Predictive distribution for each data point is one dimensional - Gaussian and therefore is characterised by mean and variance. - - Parameters - ----------- - X: {array-like, sparse} (n_samples_test, n_features) - Test data, matrix of explanatory variables - - Returns - ------- - : list of length two [y_hat, var_hat] - - y_hat: numpy array of size (n_samples_test,) - Estimated values of targets on test set (i.e. mean of predictive - distribution) - - var_hat: numpy array of size (n_samples_test,) - Variance of predictive distribution - ''' - x = (X - self._x_mean_) / self._x_std - y_hat = np.dot(x,self.coef_) + self._y_mean - - if return_std: - data_noise = 1./self.beta_ - model_noise = np.sum(np.dot(X,self.eigvecs_)**2 * self.eigvals_,1) - var_pred = data_noise + model_noise - std_hat = np.sqrt(var_pred) - return y_hat, std_hat - else: - return y_hat \ No newline at end of file diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/engine.py b/examples/model-comparison/bayesvalidrox/surrogate_models/engine.py deleted file mode 100644 index 42307d477..000000000 --- a/examples/model-comparison/bayesvalidrox/surrogate_models/engine.py +++ /dev/null @@ -1,2225 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Engine to train the surrogate - -""" -import copy -from copy import deepcopy, copy -import h5py -import joblib -import numpy as np -import os - -from scipy import stats, signal, linalg, sparse -from scipy.spatial import distance -from tqdm import tqdm -import scipy.optimize as opt -from sklearn.metrics import mean_squared_error -import multiprocessing -import matplotlib.pyplot as plt -import pandas as pd -import sys -import seaborn as sns -from joblib import Parallel, delayed - - -from bayesvalidrox.bayes_inference.bayes_inference import BayesInference -from bayesvalidrox.bayes_inference.discrepancy import Discrepancy -from .exploration import Exploration -import pathlib - -#from .inputs import Input -#from .exp_designs import ExpDesigns -#from .surrogate_models import MetaModel -#from bayesvalidrox.post_processing.post_processing import PostProcessing - -def hellinger_distance(P, Q): - """ - Hellinger distance between two continuous distributions. - - The maximum distance 1 is achieved when P assigns probability zero to - every set to which Q assigns a positive probability, and vice versa. - 0 (identical) and 1 (maximally different) - - Parameters - ---------- - P : array - Reference likelihood. - Q : array - Estimated likelihood. - - Returns - ------- - float - Hellinger distance of two distributions. - - """ - P = np.array(P) - Q= np.array(Q) - - mu1 = P.mean() - Sigma1 = np.std(P) - - mu2 = Q.mean() - Sigma2 = np.std(Q) - - term1 = np.sqrt(2*Sigma1*Sigma2 / (Sigma1**2 + Sigma2**2)) - - term2 = np.exp(-.25 * (mu1 - mu2)**2 / (Sigma1**2 + Sigma2**2)) - - H_squared = 1 - term1 * term2 - - return np.sqrt(H_squared) - - -def logpdf(x, mean, cov): - """ - Computes the likelihood based on a multivariate normal distribution. - - Parameters - ---------- - x : TYPE - DESCRIPTION. - mean : array_like - Observation data. - cov : 2d array - Covariance matrix of the distribution. - - Returns - ------- - log_lik : float - Log likelihood. - - """ - n = len(mean) - L = linalg.cholesky(cov, lower=True) - beta = np.sum(np.log(np.diag(L))) - dev = x - mean - alpha = dev.dot(linalg.cho_solve((L, True), dev)) - log_lik = -0.5 * alpha - beta - n / 2. * np.log(2 * np.pi) - - return log_lik - -def subdomain(Bounds, n_new_samples): - """ - Divides a domain defined by Bounds into sub domains. - - Parameters - ---------- - Bounds : list of tuples - List of lower and upper bounds. - n_new_samples : int - Number of samples to divide the domain for. - n_params : int - The number of params to build the subdomains for - - Returns - ------- - Subdomains : List of tuples of tuples - Each tuple of tuples divides one set of bounds into n_new_samples parts. - - """ - n_params = len(Bounds) - n_subdomains = n_new_samples + 1 - LinSpace = np.zeros((n_params, n_subdomains)) - - for i in range(n_params): - LinSpace[i] = np.linspace(start=Bounds[i][0], stop=Bounds[i][1], - num=n_subdomains) - Subdomains = [] - for k in range(n_subdomains-1): - mylist = [] - for i in range(n_params): - mylist.append((LinSpace[i, k+0], LinSpace[i, k+1])) - Subdomains.append(tuple(mylist)) - - return Subdomains - -class Engine(): - - - def __init__(self, MetaMod, Model, ExpDes): - self.MetaModel = MetaMod - self.Model = Model - self.ExpDesign = ExpDes - self.parallel = False - - def start_engine(self) -> None: - """ - Do all the preparations that need to be run before the actual training - - Returns - ------- - None - - """ - self.out_names = self.Model.Output.names - self.MetaModel.out_names = self.out_names - - - def train_normal(self, parallel = False, verbose = False, save = False) -> None: - """ - Trains surrogate on static samples only. - Samples are taken from the experimental design and the specified - model is run on them. - Alternatively the samples can be read in from a provided hdf5 file. - - - Returns - ------- - None - - """ - - ExpDesign = self.ExpDesign - MetaModel = self.MetaModel - - # Read ExpDesign (training and targets) from the provided hdf5 - if ExpDesign.hdf5_file is not None: - # TODO: need to run 'generate_ED' as well after this or not? - ExpDesign.read_from_file(self.out_names) - else: - # Check if an old hdf5 file exists: if yes, rename it - hdf5file = f'ExpDesign_{self.Model.name}.hdf5' - if os.path.exists(hdf5file): - # os.rename(hdf5file, 'old_'+hdf5file) - file = pathlib.Path(hdf5file) - file.unlink() - - # Prepare X samples - # For training the surrogate use ExpDesign.X_tr, ExpDesign.X is for the model to run on - ExpDesign.generate_ED(ExpDesign.n_init_samples, - transform=True, - max_pce_deg=np.max(MetaModel.pce_deg)) - - # Run simulations at X - if not hasattr(ExpDesign, 'Y') or ExpDesign.Y is None: - print('\n Now the forward model needs to be run!\n') - ED_Y, up_ED_X = self.Model.run_model_parallel(ExpDesign.X, mp = parallel) - ExpDesign.Y = ED_Y - else: - # Check if a dict has been passed. - if not type(ExpDesign.Y) is dict: - raise Exception('Please provide either a dictionary or a hdf5' - 'file to ExpDesign.hdf5_file argument.') - - # Separate output dict and x-values - if 'x_values' in ExpDesign.Y: - ExpDesign.x_values = ExpDesign.Y['x_values'] - del ExpDesign.Y['x_values'] - else: - print('No x_values are given, this might lead to issues during PostProcessing') - - - # Fit the surrogate - MetaModel.fit(ExpDesign.X, ExpDesign.Y, parallel, verbose) - - # Save what there is to save - if save: - # Save surrogate - with open(f'surrogates/surrogate_{self.Model.name}.pk1', 'wb') as output: - joblib.dump(MetaModel, output, 2) - - # Zip the model run directories - if self.Model.link_type.lower() == 'pylink' and\ - self.ExpDesign.sampling_method.lower() != 'user': - self.Model.zip_subdirs(self.Model.name, f'{self.Model.name}_') - - - def train_sequential(self, parallel = False, verbose = False) -> None: - """ - Train the surrogate in a sequential manner. - First build and train evereything on the static samples, then iterate - choosing more samples and refitting the surrogate on them. - - Returns - ------- - None - - """ - #self.train_normal(parallel, verbose) - self.parallel = parallel - self.train_seq_design(parallel, verbose) - - - # ------------------------------------------------------------------------- - def eval_metamodel(self, samples=None, nsamples=None, - sampling_method='random', return_samples=False): - """ - Evaluates meta-model at the requested samples. One can also generate - nsamples. - - Parameters - ---------- - samples : array of shape (n_samples, n_params), optional - Samples to evaluate meta-model at. The default is None. - nsamples : int, optional - Number of samples to generate, if no `samples` is provided. The - default is None. - sampling_method : str, optional - Type of sampling, if no `samples` is provided. The default is - 'random'. - return_samples : bool, optional - Retun samples, if no `samples` is provided. The default is False. - - Returns - ------- - mean_pred : dict - Mean of the predictions. - std_pred : dict - Standard deviatioon of the predictions. - """ - # Generate or transform (if need be) samples - if samples is None: - # Generate - samples = self.ExpDesign.generate_samples( - nsamples, - sampling_method - ) - - # Transformation to other space is to be done in the MetaModel - # TODO: sort the transformations better - mean_pred, std_pred = self.MetaModel.eval_metamodel(samples) - - if return_samples: - return mean_pred, std_pred, samples - else: - return mean_pred, std_pred - - - # ------------------------------------------------------------------------- - def train_seq_design(self, parallel = False, verbose = False): - """ - Starts the adaptive sequential design for refining the surrogate model - by selecting training points in a sequential manner. - - Returns - ------- - MetaModel : object - Meta model object. - - """ - self.parallel = parallel - - # Initialization - self.SeqModifiedLOO = {} - self.seqValidError = {} - self.SeqBME = {} - self.SeqKLD = {} - self.SeqDistHellinger = {} - self.seqRMSEMean = {} - self.seqRMSEStd = {} - self.seqMinDist = [] - - if not hasattr(self.MetaModel, 'valid_samples'): - self.ExpDesign.valid_samples = [] - self.ExpDesign.valid_model_runs = [] - self.valid_likelihoods = [] - - validError = None - - - # Determine the metamodel type - if self.MetaModel.meta_model_type.lower() != 'gpe': - pce = True - else: - pce = False - mc_ref = True if bool(self.Model.mc_reference) else False - if mc_ref: - self.Model.read_observation('mc_ref') - - # Get the parameters - max_n_samples = self.ExpDesign.n_max_samples - mod_LOO_threshold = self.ExpDesign.mod_LOO_threshold - n_canddidate = self.ExpDesign.n_canddidate - post_snapshot = self.ExpDesign.post_snapshot - n_replication = self.ExpDesign.n_replication - util_func = self.ExpDesign.util_func - output_name = self.out_names - - # Handle if only one UtilityFunctions is provided - if not isinstance(util_func, list): - util_func = [self.ExpDesign.util_func] - - # Read observations or MCReference - # TODO: recheck the logic in this if statement - if (len(self.Model.observations) != 0 or self.Model.meas_file is not None) and hasattr(self.MetaModel, 'Discrepancy'): - self.observations = self.Model.read_observation() - obs_data = self.observations - else: - obs_data = [] - # TODO: TotalSigma2 not defined if not in this else??? - # TODO: no self.observations if in here - TotalSigma2 = {} - - # ---------- Initial self.MetaModel ---------- - self.train_normal(parallel = parallel, verbose=verbose) - - initMetaModel = deepcopy(self.MetaModel) - - # Validation error if validation set is provided. - if self.ExpDesign.valid_model_runs: - init_rmse, init_valid_error = self._validError(initMetaModel) - init_valid_error = list(init_valid_error.values()) - else: - init_rmse = None - - # Check if discrepancy is provided - if len(obs_data) != 0 and hasattr(self.MetaModel, 'Discrepancy'): - TotalSigma2 = self.MetaModel.Discrepancy.parameters - - # Calculate the initial BME - out = self._BME_Calculator( - obs_data, TotalSigma2, init_rmse) - init_BME, init_KLD, init_post, init_likes, init_dist_hellinger = out - print(f"\nInitial BME: {init_BME:.2f}") - print(f"Initial KLD: {init_KLD:.2f}") - - # Posterior snapshot (initial) - if post_snapshot: - parNames = self.ExpDesign.par_names - print('Posterior snapshot (initial) is being plotted...') - self.__posteriorPlot(init_post, parNames, 'SeqPosterior_init') - - # Check the convergence of the Mean & Std - if mc_ref and pce: - init_rmse_mean, init_rmse_std = self._error_Mean_Std() - print(f"Initial Mean and Std error: {init_rmse_mean:.2f}," - f" {init_rmse_std:.2f}") - - # Read the initial experimental design - Xinit = self.ExpDesign.X - init_n_samples = len(self.ExpDesign.X) - initYprev = self.ExpDesign.Y#initMetaModel.ModelOutputDict - #self.MetaModel.ModelOutputDict = self.ExpDesign.Y - initLCerror = initMetaModel.LCerror - n_itrs = max_n_samples - init_n_samples - - ## Get some initial statistics - # Read the initial ModifiedLOO - if pce: - Scores_all, varExpDesignY = [], [] - for out_name in output_name: - y = self.ExpDesign.Y[out_name] - Scores_all.append(list( - self.MetaModel.score_dict['b_1'][out_name].values())) - if self.MetaModel.dim_red_method.lower() == 'pca': - pca = self.MetaModel.pca['b_1'][out_name] - components = pca.transform(y) - varExpDesignY.append(np.var(components, axis=0)) - else: - varExpDesignY.append(np.var(y, axis=0)) - - Scores = [item for sublist in Scores_all for item in sublist] - weights = [item for sublist in varExpDesignY for item in sublist] - init_mod_LOO = [np.average([1-score for score in Scores], - weights=weights)] - - prevMetaModel_dict = {} - #prevExpDesign_dict = {} - # Can run sequential design multiple times for comparison - for repIdx in range(n_replication): - print(f'\n>>>> Replication: {repIdx+1}<<<<') - - # util_func: the function to use inside the type of exploitation - for util_f in util_func: - print(f'\n>>>> Utility Function: {util_f} <<<<') - # To avoid changes ub original aPCE object - self.ExpDesign.X = Xinit - self.ExpDesign.Y = initYprev - self.ExpDesign.LCerror = initLCerror - - # Set the experimental design - Xprev = Xinit - total_n_samples = init_n_samples - Yprev = initYprev - - Xfull = [] - Yfull = [] - - # Store the initial ModifiedLOO - if pce: - print("\nInitial ModifiedLOO:", init_mod_LOO) - SeqModifiedLOO = np.array(init_mod_LOO) - - if len(self.ExpDesign.valid_model_runs) != 0: - SeqValidError = np.array(init_valid_error) - - # Check if data is provided - if len(obs_data) != 0 and hasattr(self.MetaModel, 'Discrepancy'): - SeqBME = np.array([init_BME]) - SeqKLD = np.array([init_KLD]) - SeqDistHellinger = np.array([init_dist_hellinger]) - - if mc_ref and pce: - seqRMSEMean = np.array([init_rmse_mean]) - seqRMSEStd = np.array([init_rmse_std]) - - # ------- Start Sequential Experimental Design ------- - postcnt = 1 - for itr_no in range(1, n_itrs+1): - print(f'\n>>>> Iteration number {itr_no} <<<<') - - # Save the metamodel prediction before updating - prevMetaModel_dict[itr_no] = deepcopy(self.MetaModel) - #prevExpDesign_dict[itr_no] = deepcopy(self.ExpDesign) - if itr_no > 1: - pc_model = prevMetaModel_dict[itr_no-1] - self._y_hat_prev, _ = pc_model.eval_metamodel( - samples=Xfull[-1].reshape(1, -1)) - del prevMetaModel_dict[itr_no-1] - - # Optimal Bayesian Design - #self.MetaModel.ExpDesignFlag = 'sequential' - Xnew, updatedPrior = self.choose_next_sample(TotalSigma2, - n_canddidate, - util_f) - S = np.min(distance.cdist(Xinit, Xnew, 'euclidean')) - self.seqMinDist.append(S) - print(f"\nmin Dist from OldExpDesign: {S:2f}") - print("\n") - - # Evaluate the full model response at the new sample - Ynew, _ = self.Model.run_model_parallel( - Xnew, prevRun_No=total_n_samples - ) - total_n_samples += Xnew.shape[0] - - # ------ Plot the surrogate model vs Origninal Model ------ - if hasattr(self.ExpDesign, 'adapt_verbose') and \ - self.ExpDesign.adapt_verbose: - from .adaptPlot import adaptPlot - y_hat, std_hat = self.MetaModel.eval_metamodel( - samples=Xnew - ) - adaptPlot( - self.MetaModel, Ynew, y_hat, std_hat, - plotED=False - ) - - # -------- Retrain the surrogate model ------- - # Extend new experimental design - Xfull = np.vstack((Xprev, Xnew)) - - # Updating experimental design Y - for out_name in output_name: - Yfull = np.vstack((Yprev[out_name], Ynew[out_name])) - self.ExpDesign.Y[out_name] = Yfull - - # Pass new design to the metamodel object - self.ExpDesign.sampling_method = 'user' - self.ExpDesign.X = Xfull - #self.ExpDesign.Y = self.MetaModel.ModelOutputDict - - # Save the Experimental Design for next iteration - Xprev = Xfull - Yprev = self.ExpDesign.Y - - # Pass the new prior as the input - # TODO: another look at this - no difference apc to pce to gpe? - self.MetaModel.input_obj.poly_coeffs_flag = False - if updatedPrior is not None: - self.MetaModel.input_obj.poly_coeffs_flag = True - print("updatedPrior:", updatedPrior.shape) - # Arbitrary polynomial chaos - for i in range(updatedPrior.shape[1]): - self.MetaModel.input_obj.Marginals[i].dist_type = None - x = updatedPrior[:, i] - self.MetaModel.input_obj.Marginals[i].raw_data = x - - # Train the surrogate model for new ExpDesign - self.train_normal(parallel=False) - - # -------- Evaluate the retrained surrogate model ------- - # Extract Modified LOO from Output - if pce: - Scores_all, varExpDesignY = [], [] - for out_name in output_name: - y = self.ExpDesign.Y[out_name] - Scores_all.append(list( - self.MetaModel.score_dict['b_1'][out_name].values())) - if self.MetaModel.dim_red_method.lower() == 'pca': - pca = self.MetaModel.pca['b_1'][out_name] - components = pca.transform(y) - varExpDesignY.append(np.var(components, - axis=0)) - else: - varExpDesignY.append(np.var(y, axis=0)) - Scores = [item for sublist in Scores_all for item - in sublist] - weights = [item for sublist in varExpDesignY for item - in sublist] - ModifiedLOO = [np.average( - [1-score for score in Scores], weights=weights)] - - print('\n') - print(f"Updated ModifiedLOO {util_f}:\n", ModifiedLOO) - print('\n') - - # Compute the validation error - if self.ExpDesign.valid_model_runs: - rmse, validError = self._validError(self.MetaModel) - ValidError = list(validError.values()) - else: - rmse = None - - # Store updated ModifiedLOO - if pce: - SeqModifiedLOO = np.vstack( - (SeqModifiedLOO, ModifiedLOO)) - if len(self.ExpDesign.valid_model_runs) != 0: - SeqValidError = np.vstack( - (SeqValidError, ValidError)) - # -------- Caclulation of BME as accuracy metric ------- - # Check if data is provided - if len(obs_data) != 0: - # Calculate the initial BME - out = self._BME_Calculator(obs_data, TotalSigma2, rmse) - BME, KLD, Posterior, likes, DistHellinger = out - print('\n') - print(f"Updated BME: {BME:.2f}") - print(f"Updated KLD: {KLD:.2f}") - print('\n') - - # Plot some snapshots of the posterior - step_snapshot = self.ExpDesign.step_snapshot - if post_snapshot and postcnt % step_snapshot == 0: - parNames = self.ExpDesign.par_names - print('Posterior snapshot is being plotted...') - self.__posteriorPlot(Posterior, parNames, - f'SeqPosterior_{postcnt}') - postcnt += 1 - - # Check the convergence of the Mean&Std - if mc_ref and pce: - print('\n') - RMSE_Mean, RMSE_std = self._error_Mean_Std() - print(f"Updated Mean and Std error: {RMSE_Mean:.2f}, " - f"{RMSE_std:.2f}") - print('\n') - - # Store the updated BME & KLD - # Check if data is provided - if len(obs_data) != 0: - SeqBME = np.vstack((SeqBME, BME)) - SeqKLD = np.vstack((SeqKLD, KLD)) - SeqDistHellinger = np.vstack((SeqDistHellinger, - DistHellinger)) - if mc_ref and pce: - seqRMSEMean = np.vstack((seqRMSEMean, RMSE_Mean)) - seqRMSEStd = np.vstack((seqRMSEStd, RMSE_std)) - - if pce and any(LOO < mod_LOO_threshold - for LOO in ModifiedLOO): - break - - # Clean up - if len(obs_data) != 0: - del out - print() - print('-'*50) - print() - - # Store updated ModifiedLOO and BME in dictonary - strKey = f'{util_f}_rep_{repIdx+1}' - if pce: - self.SeqModifiedLOO[strKey] = SeqModifiedLOO - if len(self.ExpDesign.valid_model_runs) != 0: - self.seqValidError[strKey] = SeqValidError - - # Check if data is provided - if len(obs_data) != 0: - self.SeqBME[strKey] = SeqBME - self.SeqKLD[strKey] = SeqKLD - if hasattr(self.MetaModel, 'valid_likelihoods') and \ - self.valid_likelihoods: - self.SeqDistHellinger[strKey] = SeqDistHellinger - if mc_ref and pce: - self.seqRMSEMean[strKey] = seqRMSEMean - self.seqRMSEStd[strKey] = seqRMSEStd - - # return self.MetaModel - - # ------------------------------------------------------------------------- - def util_VarBasedDesign(self, X_can, index, util_func='Entropy'): - """ - Computes the exploitation scores based on: - active learning MacKay(ALM) and active learning Cohn (ALC) - Paper: Sequential Design with Mutual Information for Computer - Experiments (MICE): Emulation of a Tsunami Model by Beck and Guillas - (2016) - - Parameters - ---------- - X_can : array of shape (n_samples, n_params) - Candidate samples. - index : int - Model output index. - UtilMethod : string, optional - Exploitation utility function. The default is 'Entropy'. - - Returns - ------- - float - Score. - - """ - MetaModel = self.MetaModel - ED_X = self.ExpDesign.X - out_dict_y = self.ExpDesign.Y - out_names = self.out_names - - # Run the Metamodel for the candidate - X_can = X_can.reshape(1, -1) - Y_PC_can, std_PC_can = MetaModel.eval_metamodel(samples=X_can) - - if util_func.lower() == 'alm': - # ----- Entropy/MMSE/active learning MacKay(ALM) ----- - # Compute perdiction variance of the old model - canPredVar = {key: std_PC_can[key]**2 for key in out_names} - - varPCE = np.zeros((len(out_names), X_can.shape[0])) - for KeyIdx, key in enumerate(out_names): - varPCE[KeyIdx] = np.max(canPredVar[key], axis=1) - score = np.max(varPCE, axis=0) - - elif util_func.lower() == 'eigf': - # ----- Expected Improvement for Global fit ----- - # Find closest EDX to the candidate - distances = distance.cdist(ED_X, X_can, 'euclidean') - index = np.argmin(distances) - - # Compute perdiction error and variance of the old model - predError = {key: Y_PC_can[key] for key in out_names} - canPredVar = {key: std_PC_can[key]**2 for key in out_names} - - # Compute perdiction error and variance of the old model - # Eq (5) from Liu et al.(2018) - EIGF_PCE = np.zeros((len(out_names), X_can.shape[0])) - for KeyIdx, key in enumerate(out_names): - residual = predError[key] - out_dict_y[key][int(index)] - var = canPredVar[key] - EIGF_PCE[KeyIdx] = np.max(residual**2 + var, axis=1) - score = np.max(EIGF_PCE, axis=0) - - return -1 * score # -1 is for minimization instead of maximization - - # ------------------------------------------------------------------------- - def util_BayesianActiveDesign(self, y_hat, std, sigma2Dict, var='DKL'): - """ - Computes scores based on Bayesian active design criterion (var). - - It is based on the following paper: - Oladyshkin, Sergey, Farid Mohammadi, Ilja Kroeker, and Wolfgang Nowak. - "Bayesian3 active learning for the gaussian process emulator using - information theory." Entropy 22, no. 8 (2020): 890. - - Parameters - ---------- - X_can : array of shape (n_samples, n_params) - Candidate samples. - sigma2Dict : dict - A dictionary containing the measurement errors (sigma^2). - var : string, optional - BAL design criterion. The default is 'DKL'. - - Returns - ------- - float - Score. - - """ - - # Get the data - obs_data = self.observations - # TODO: this should be optimizable to be calculated explicitly - if hasattr(self.Model, 'n_obs'): - n_obs = self.Model.n_obs - else: - n_obs = self.n_obs - mc_size = 10000 - - # Sample a distribution for a normal dist - # with Y_mean_can as the mean and Y_std_can as std. - Y_MC, std_MC = {}, {} - logPriorLikelihoods = np.zeros((mc_size)) - # print(y_hat) - # print(list[y_hat]) - for key in list(y_hat): - cov = np.diag(std[key]**2) - # print(y_hat[key], cov) - # TODO: added the allow_singular = True here - rv = stats.multivariate_normal(mean=y_hat[key], cov=cov,) - Y_MC[key] = rv.rvs(size=mc_size) - logPriorLikelihoods += rv.logpdf(Y_MC[key]) - std_MC[key] = np.zeros((mc_size, y_hat[key].shape[0])) - - # Likelihood computation (Comparison of data and simulation - # results via PCE with candidate design) - likelihoods = self._normpdf(Y_MC, std_MC, obs_data, sigma2Dict) - - # Rejection Step - # Random numbers between 0 and 1 - unif = np.random.rand(1, mc_size)[0] - - # Reject the poorly performed prior - accepted = (likelihoods/np.max(likelihoods)) >= unif - - # Prior-based estimation of BME - logBME = np.log(np.nanmean(likelihoods), dtype=np.longdouble)#float128) - - # Posterior-based expectation of likelihoods - postLikelihoods = likelihoods[accepted] - postExpLikelihoods = np.mean(np.log(postLikelihoods)) - - # Posterior-based expectation of prior densities - postExpPrior = np.mean(logPriorLikelihoods[accepted]) - - # Utility function Eq.2 in Ref. (2) - # Posterior covariance matrix after observing data y - # Kullback-Leibler Divergence (Sergey's paper) - if var == 'DKL': - - # TODO: Calculate the correction factor for BME - # BMECorrFactor = self.BME_Corr_Weight(PCE_SparseBayes_can, - # ObservationData, sigma2Dict) - # BME += BMECorrFactor - # Haun et al implementation - # U_J_d = np.mean(np.log(Likelihoods[Likelihoods!=0])- logBME) - U_J_d = postExpLikelihoods - logBME - - # Marginal log likelihood - elif var == 'BME': - U_J_d = np.nanmean(likelihoods) - - # Entropy-based information gain - elif var == 'infEntropy': - logBME = np.log(np.nanmean(likelihoods)) - infEntropy = logBME - postExpPrior - postExpLikelihoods - U_J_d = infEntropy * -1 # -1 for minimization - - # Bayesian information criterion - elif var == 'BIC': - coeffs = self.MetaModel.coeffs_dict.values() - nModelParams = max(len(v) for val in coeffs for v in val.values()) - maxL = np.nanmax(likelihoods) - U_J_d = -2 * np.log(maxL) + np.log(n_obs) * nModelParams - - # Akaike information criterion - elif var == 'AIC': - coeffs = self.MetaModel.coeffs_dict.values() - nModelParams = max(len(v) for val in coeffs for v in val.values()) - maxlogL = np.log(np.nanmax(likelihoods)) - AIC = -2 * maxlogL + 2 * nModelParams - # 2 * nModelParams * (nModelParams+1) / (n_obs-nModelParams-1) - penTerm = 0 - U_J_d = 1*(AIC + penTerm) - - # Deviance information criterion - elif var == 'DIC': - # D_theta_bar = np.mean(-2 * Likelihoods) - N_star_p = 0.5 * np.var(np.log(likelihoods[likelihoods != 0])) - Likelihoods_theta_mean = self._normpdf( - y_hat, std, obs_data, sigma2Dict - ) - DIC = -2 * np.log(Likelihoods_theta_mean) + 2 * N_star_p - - U_J_d = DIC - - else: - print('The algorithm you requested has not been implemented yet!') - - # Handle inf and NaN (replace by zero) - if np.isnan(U_J_d) or U_J_d == -np.inf or U_J_d == np.inf: - U_J_d = 0.0 - - # Clear memory - del likelihoods - del Y_MC - del std_MC - - return -1 * U_J_d # -1 is for minimization instead of maximization - - # ------------------------------------------------------------------------- - def util_BayesianDesign(self, X_can, X_MC, sigma2Dict, var='DKL'): - """ - Computes scores based on Bayesian sequential design criterion (var). - - Parameters - ---------- - X_can : array of shape (n_samples, n_params) - Candidate samples. - sigma2Dict : dict - A dictionary containing the measurement errors (sigma^2). - var : string, optional - Bayesian design criterion. The default is 'DKL'. - - Returns - ------- - float - Score. - - """ - - # To avoid changes ub original aPCE object - MetaModel = self.MetaModel - out_names = self.out_names - if X_can.ndim == 1: - X_can = X_can.reshape(1, -1) - - # Compute the mean and std based on the MetaModel - # pce_means, pce_stds = self._compute_pce_moments(MetaModel) - if var == 'ALC': - Y_MC, Y_MC_std = MetaModel.eval_metamodel(samples=X_MC) - - # Old Experimental design - oldExpDesignX = self.ExpDesign.X - oldExpDesignY = self.ExpDesign.Y - - # Evaluate the PCE metamodels at that location ??? - Y_PC_can, Y_std_can = MetaModel.eval_metamodel(samples=X_can) - PCE_Model_can = deepcopy(MetaModel) - engine_can = deepcopy(self) - # Add the candidate to the ExpDesign - NewExpDesignX = np.vstack((oldExpDesignX, X_can)) - - NewExpDesignY = {} - for key in oldExpDesignY.keys(): - NewExpDesignY[key] = np.vstack( - (oldExpDesignY[key], Y_PC_can[key]) - ) - - engine_can.ExpDesign.sampling_method = 'user' - engine_can.ExpDesign.X = NewExpDesignX - #engine_can.ModelOutputDict = NewExpDesignY - engine_can.ExpDesign.Y = NewExpDesignY - - # Train the model for the observed data using x_can - engine_can.MetaModel.input_obj.poly_coeffs_flag = False - engine_can.start_engine() - engine_can.train_normal(parallel=False) - engine_can.MetaModel.fit(NewExpDesignX, NewExpDesignY) -# engine_can.train_norm_design(parallel=False) - - # Set the ExpDesign to its original values - engine_can.ExpDesign.X = oldExpDesignX - engine_can.ModelOutputDict = oldExpDesignY - engine_can.ExpDesign.Y = oldExpDesignY - - if var.lower() == 'mi': - # Mutual information based on Krause et al - # Adapted from Beck & Guillas (MICE) paper - _, std_PC_can = engine_can.MetaModel.eval_metamodel(samples=X_can) - std_can = {key: std_PC_can[key] for key in out_names} - - std_old = {key: Y_std_can[key] for key in out_names} - - varPCE = np.zeros((len(out_names))) - for i, key in enumerate(out_names): - varPCE[i] = np.mean(std_old[key]**2/std_can[key]**2) - score = np.mean(varPCE) - - return -1 * score - - elif var.lower() == 'alc': - # Active learning based on Gramyc and Lee - # Adaptive design and analysis of supercomputer experiments Techno- - # metrics, 51 (2009), pp. 130–145. - - # Evaluate the MetaModel at the given samples - Y_MC_can, Y_MC_std_can = engine_can.MetaModel.eval_metamodel(samples=X_MC) - - # Compute the score - score = [] - for i, key in enumerate(out_names): - pce_var = Y_MC_std_can[key]**2 - pce_var_can = Y_MC_std[key]**2 - score.append(np.mean(pce_var-pce_var_can, axis=0)) - score = np.mean(score) - - return -1 * score - - # ---------- Inner MC simulation for computing Utility Value ---------- - # Estimation of the integral via Monte Varlo integration - MCsize = X_MC.shape[0] - ESS = 0 - - while ((ESS > MCsize) or (ESS < 1)): - - # Enriching Monte Carlo samples if need be - if ESS != 0: - X_MC = self.ExpDesign.generate_samples( - MCsize, 'random' - ) - - # Evaluate the MetaModel at the given samples - Y_MC, std_MC = PCE_Model_can.eval_metamodel(samples=X_MC) - - # Likelihood computation (Comparison of data and simulation - # results via PCE with candidate design) - likelihoods = self._normpdf( - Y_MC, std_MC, self.observations, sigma2Dict - ) - - # Check the Effective Sample Size (1<ESS<MCsize) - ESS = 1 / np.sum(np.square(likelihoods/np.sum(likelihoods))) - - # Enlarge sample size if it doesn't fulfill the criteria - if ((ESS > MCsize) or (ESS < 1)): - print("--- increasing MC size---") - MCsize *= 10 - ESS = 0 - - # Rejection Step - # Random numbers between 0 and 1 - unif = np.random.rand(1, MCsize)[0] - - # Reject the poorly performed prior - accepted = (likelihoods/np.max(likelihoods)) >= unif - - # -------------------- Utility functions -------------------- - # Utility function Eq.2 in Ref. (2) - # Kullback-Leibler Divergence (Sergey's paper) - if var == 'DKL': - - # Prior-based estimation of BME - logBME = np.log(np.nanmean(likelihoods, dtype=np.longdouble))#float128)) - - # Posterior-based expectation of likelihoods - postLikelihoods = likelihoods[accepted] - postExpLikelihoods = np.mean(np.log(postLikelihoods)) - - # Haun et al implementation - U_J_d = np.mean(np.log(likelihoods[likelihoods != 0]) - logBME) - - # U_J_d = np.sum(G_n_m_all) - # Ryan et al (2014) implementation - # importanceWeights = Likelihoods[Likelihoods!=0]/np.sum(Likelihoods[Likelihoods!=0]) - # U_J_d = np.mean(importanceWeights*np.log(Likelihoods[Likelihoods!=0])) - logBME - - # U_J_d = postExpLikelihoods - logBME - - # Marginal likelihood - elif var == 'BME': - - # Prior-based estimation of BME - logBME = np.log(np.nanmean(likelihoods)) - U_J_d = logBME - - # Bayes risk likelihood - elif var == 'BayesRisk': - - U_J_d = -1 * np.var(likelihoods) - - # Entropy-based information gain - elif var == 'infEntropy': - # Prior-based estimation of BME - logBME = np.log(np.nanmean(likelihoods)) - - # Posterior-based expectation of likelihoods - postLikelihoods = likelihoods[accepted] - postLikelihoods /= np.nansum(likelihoods[accepted]) - postExpLikelihoods = np.mean(np.log(postLikelihoods)) - - # Posterior-based expectation of prior densities - postExpPrior = np.mean(logPriorLikelihoods[accepted]) - - infEntropy = logBME - postExpPrior - postExpLikelihoods - - U_J_d = infEntropy * -1 # -1 for minimization - - # D-Posterior-precision - elif var == 'DPP': - X_Posterior = X_MC[accepted] - # covariance of the posterior parameters - U_J_d = -np.log(np.linalg.det(np.cov(X_Posterior))) - - # A-Posterior-precision - elif var == 'APP': - X_Posterior = X_MC[accepted] - # trace of the posterior parameters - U_J_d = -np.log(np.trace(np.cov(X_Posterior))) - - else: - print('The algorithm you requested has not been implemented yet!') - - # Clear memory - del likelihoods - del Y_MC - del std_MC - - return -1 * U_J_d # -1 is for minimization instead of maximization - - - # ------------------------------------------------------------------------- - def run_util_func(self, method, candidates, index, sigma2Dict=None, - var=None, X_MC=None): - """ - Runs the utility function based on the given method. - - Parameters - ---------- - method : string - Exploitation method: `VarOptDesign`, `BayesActDesign` and - `BayesOptDesign`. - candidates : array of shape (n_samples, n_params) - All candidate parameter sets. - index : int - ExpDesign index. - sigma2Dict : dict, optional - A dictionary containing the measurement errors (sigma^2). The - default is None. - var : string, optional - Utility function. The default is None. - X_MC : TYPE, optional - DESCRIPTION. The default is None. - - Returns - ------- - index : TYPE - DESCRIPTION. - List - Scores. - - """ - - if method.lower() == 'varoptdesign': - # U_J_d = self.util_VarBasedDesign(candidates, index, var) - U_J_d = np.zeros((candidates.shape[0])) - for idx, X_can in tqdm(enumerate(candidates), ascii=True, - desc="varoptdesign"): - U_J_d[idx] = self.util_VarBasedDesign(X_can, index, var) - - elif method.lower() == 'bayesactdesign': - NCandidate = candidates.shape[0] - U_J_d = np.zeros((NCandidate)) - # Evaluate all candidates - y_can, std_can = self.MetaModel.eval_metamodel(samples=candidates) - # loop through candidates - for idx, X_can in tqdm(enumerate(candidates), ascii=True, - desc="BAL Design"): - y_hat = {key: items[idx] for key, items in y_can.items()} - std = {key: items[idx] for key, items in std_can.items()} - - # print(y_hat) - # print(std) - U_J_d[idx] = self.util_BayesianActiveDesign( - y_hat, std, sigma2Dict, var) - - elif method.lower() == 'bayesoptdesign': - NCandidate = candidates.shape[0] - U_J_d = np.zeros((NCandidate)) - for idx, X_can in tqdm(enumerate(candidates), ascii=True, - desc="OptBayesianDesign"): - U_J_d[idx] = self.util_BayesianDesign(X_can, X_MC, sigma2Dict, - var) - return (index, -1 * U_J_d) - - # ------------------------------------------------------------------------- - def dual_annealing(self, method, Bounds, sigma2Dict, var, Run_No, - verbose=False): - """ - Exploration algorithm to find the optimum parameter space. - - Parameters - ---------- - method : string - Exploitation method: `VarOptDesign`, `BayesActDesign` and - `BayesOptDesign`. - Bounds : list of tuples - List of lower and upper boundaries of parameters. - sigma2Dict : dict - A dictionary containing the measurement errors (sigma^2). - Run_No : int - Run number. - verbose : bool, optional - Print out a summary. The default is False. - - Returns - ------- - Run_No : int - Run number. - array - Optimial candidate. - - """ - - Model = self.Model - max_func_itr = self.ExpDesign.max_func_itr - - if method == 'VarOptDesign': - Res_Global = opt.dual_annealing(self.util_VarBasedDesign, - bounds=Bounds, - args=(Model, var), - maxfun=max_func_itr) - - elif method == 'BayesOptDesign': - Res_Global = opt.dual_annealing(self.util_BayesianDesign, - bounds=Bounds, - args=(Model, sigma2Dict, var), - maxfun=max_func_itr) - - if verbose: - print(f"Global minimum: xmin = {Res_Global.x}, " - f"f(xmin) = {Res_Global.fun:.6f}, nfev = {Res_Global.nfev}") - - return (Run_No, Res_Global.x) - - # ------------------------------------------------------------------------- - def tradeoff_weights(self, tradeoff_scheme, old_EDX, old_EDY): - """ - Calculates weights for exploration scores based on the requested - scheme: `None`, `equal`, `epsilon-decreasing` and `adaptive`. - - `None`: No exploration. - `equal`: Same weights for exploration and exploitation scores. - `epsilon-decreasing`: Start with more exploration and increase the - influence of exploitation along the way with a exponential decay - function - `adaptive`: An adaptive method based on: - Liu, Haitao, Jianfei Cai, and Yew-Soon Ong. "An adaptive sampling - approach for Kriging metamodeling by maximizing expected prediction - error." Computers & Chemical Engineering 106 (2017): 171-182. - - Parameters - ---------- - tradeoff_scheme : string - Trade-off scheme for exloration and exploitation scores. - old_EDX : array (n_samples, n_params) - Old experimental design (training points). - old_EDY : dict - Old model responses (targets). - - Returns - ------- - exploration_weight : float - Exploration weight. - exploitation_weight: float - Exploitation weight. - - """ - if tradeoff_scheme is None: - exploration_weight = 0 - - elif tradeoff_scheme == 'equal': - exploration_weight = 0.5 - - elif tradeoff_scheme == 'epsilon-decreasing': - # epsilon-decreasing scheme - # Start with more exploration and increase the influence of - # exploitation along the way with a exponential decay function - initNSamples = self.ExpDesign.n_init_samples - n_max_samples = self.ExpDesign.n_max_samples - - itrNumber = (self.ExpDesign.X.shape[0] - initNSamples) - itrNumber //= self.ExpDesign.n_new_samples - - tau2 = -(n_max_samples-initNSamples-1) / np.log(1e-8) - exploration_weight = signal.exponential(n_max_samples-initNSamples, - 0, tau2, False)[itrNumber] - - elif tradeoff_scheme == 'adaptive': - - # Extract itrNumber - initNSamples = self.ExpDesign.n_init_samples - n_max_samples = self.ExpDesign.n_max_samples - itrNumber = (self.ExpDesign.X.shape[0] - initNSamples) - itrNumber //= self.ExpDesign.n_new_samples - - if itrNumber == 0: - exploration_weight = 0.5 - else: - # New adaptive trade-off according to Liu et al. (2017) - # Mean squared error for last design point - last_EDX = old_EDX[-1].reshape(1, -1) - lastPCEY, _ = self.MetaModel.eval_metamodel(samples=last_EDX) - pce_y = np.array(list(lastPCEY.values()))[:, 0] - y = np.array(list(old_EDY.values()))[:, -1, :] - mseError = mean_squared_error(pce_y, y) - - # Mean squared CV - error for last design point - pce_y_prev = np.array(list(self._y_hat_prev.values()))[:, 0] - mseCVError = mean_squared_error(pce_y_prev, y) - - exploration_weight = min([0.5*mseError/mseCVError, 1]) - - # Exploitation weight - exploitation_weight = 1 - exploration_weight - - return exploration_weight, exploitation_weight - - # ------------------------------------------------------------------------- - def choose_next_sample(self, sigma2=None, n_candidates=5, var='DKL'): - """ - Runs optimal sequential design. - - Parameters - ---------- - sigma2 : dict, optional - A dictionary containing the measurement errors (sigma^2). The - default is None. - n_candidates : int, optional - Number of candidate samples. The default is 5. - var : string, optional - Utility function. The default is None. # TODO: default is set to DKL, not none - - Raises - ------ - NameError - Wrong utility function. - - Returns - ------- - Xnew : array (n_samples, n_params) - Selected new training point(s). - """ - - # Initialization - Bounds = self.ExpDesign.bound_tuples - n_new_samples = self.ExpDesign.n_new_samples - explore_method = self.ExpDesign.explore_method - exploit_method = self.ExpDesign.exploit_method - n_cand_groups = self.ExpDesign.n_cand_groups - tradeoff_scheme = self.ExpDesign.tradeoff_scheme - - old_EDX = self.ExpDesign.X - old_EDY = self.ExpDesign.Y.copy() - ndim = self.ExpDesign.X.shape[1] - OutputNames = self.out_names - - # ----------------------------------------- - # ----------- CUSTOMIZED METHODS ---------- - # ----------------------------------------- - # Utility function exploit_method provided by user - if exploit_method.lower() == 'user': - if not hasattr(self.ExpDesign, 'ExploitFunction'): - raise AttributeError('Function `ExploitFunction` not given to the ExpDesign, thus cannor run user-defined sequential scheme') - # TODO: syntax does not fully match the rest - can test this?? - Xnew, filteredSamples = self.ExpDesign.ExploitFunction(self) - - print("\n") - print("\nXnew:\n", Xnew) - - return Xnew, filteredSamples - - - # Dual-Annealing works differently from the rest, so deal with this first - # Here exploration and exploitation are performed simulataneously - if explore_method == 'dual annealing': - # ------- EXPLORATION: OPTIMIZATION ------- - import time - start_time = time.time() - - # Divide the domain to subdomains - subdomains = subdomain(Bounds, n_new_samples) - - # Multiprocessing - if self.parallel: - args = [] - for i in range(n_new_samples): - args.append((exploit_method, subdomains[i], sigma2, var, i)) - pool = multiprocessing.Pool(multiprocessing.cpu_count()) - - # With Pool.starmap_async() - results = pool.starmap_async(self.dual_annealing, args).get() - - # Close the pool - pool.close() - # Without multiprocessing - else: - results = [] - for i in range(n_new_samples): - results.append(self.dual_annealing(exploit_method, subdomains[i], sigma2, var, i)) - - # New sample - Xnew = np.array([results[i][1] for i in range(n_new_samples)]) - print("\nXnew:\n", Xnew) - - # Computational cost - elapsed_time = time.time() - start_time - print("\n") - print(f"Elapsed_time: {round(elapsed_time,2)} sec.") - print('-'*20) - - return Xnew, None - - # Generate needed Exploration class - explore = Exploration(self.ExpDesign, n_candidates) - explore.w = 100 # * ndim #500 # TODO: where does this value come from? - - # Select criterion (mc-intersite-proj-th, mc-intersite-proj) - explore.mc_criterion = 'mc-intersite-proj' - - # Generate the candidate samples - # TODO: here use the sampling method provided by the expdesign? - sampling_method = self.ExpDesign.sampling_method - - # TODO: changed this from 'random' for LOOCV - if explore_method == 'LOOCV': - allCandidates = self.ExpDesign.generate_samples(n_candidates, - sampling_method) - else: - allCandidates, scoreExploration = explore.get_exploration_samples() - - # ----------------------------------------- - # ---------- EXPLORATION METHODS ---------- - # ----------------------------------------- - if explore_method == 'LOOCV': - # ----------------------------------------------------------------- - # TODO: LOOCV model construnction based on Feng et al. (2020) - # 'LOOCV': - # Initilize the ExploitScore array - - # Generate random samples - allCandidates = self.ExpDesign.generate_samples(n_candidates, - 'random') - - # Construct error model based on LCerror - errorModel = self.MetaModel.create_ModelError(old_EDX, self.LCerror) - self.errorModel.append(copy(errorModel)) - - # Evaluate the error models for allCandidates - eLCAllCands, _ = errorModel.eval_errormodel(allCandidates) - # Select the maximum as the representative error - eLCAllCands = np.dstack(eLCAllCands.values()) - eLCAllCandidates = np.max(eLCAllCands, axis=1)[:, 0] - - # Normalize the error w.r.t the maximum error - scoreExploration = eLCAllCandidates / np.sum(eLCAllCandidates) - - else: - # ------- EXPLORATION: SPACE-FILLING DESIGN ------- - # Generate candidate samples from Exploration class - explore = Exploration(self.ExpDesign, n_candidates) - explore.w = 100 # * ndim #500 - # Select criterion (mc-intersite-proj-th, mc-intersite-proj) - explore.mc_criterion = 'mc-intersite-proj' - allCandidates, scoreExploration = explore.get_exploration_samples() - - # Temp: ---- Plot all candidates ----- - if ndim == 2: - def plotter(points, allCandidates, Method, - scoreExploration=None): - if Method == 'Voronoi': - from scipy.spatial import Voronoi, voronoi_plot_2d - vor = Voronoi(points) - fig = voronoi_plot_2d(vor) - ax1 = fig.axes[0] - else: - fig = plt.figure() - ax1 = fig.add_subplot(111) - ax1.scatter(points[:, 0], points[:, 1], s=10, c='r', - marker="s", label='Old Design Points') - ax1.scatter(allCandidates[:, 0], allCandidates[:, 1], s=10, - c='b', marker="o", label='Design candidates') - for i in range(points.shape[0]): - txt = 'p'+str(i+1) - ax1.annotate(txt, (points[i, 0], points[i, 1])) - if scoreExploration is not None: - for i in range(allCandidates.shape[0]): - txt = str(round(scoreExploration[i], 5)) - ax1.annotate(txt, (allCandidates[i, 0], - allCandidates[i, 1])) - - plt.xlim(self.bound_tuples[0]) - plt.ylim(self.bound_tuples[1]) - # plt.show() - plt.legend(loc='upper left') - - # ----------------------------------------- - # --------- EXPLOITATION METHODS ---------- - # ----------------------------------------- - if exploit_method == 'BayesOptDesign' or\ - exploit_method == 'BayesActDesign': - - # ------- Calculate Exoploration weight ------- - # Compute exploration weight based on trade off scheme - explore_w, exploit_w = self.tradeoff_weights(tradeoff_scheme, - old_EDX, - old_EDY) - print(f"\n Exploration weight={explore_w:0.3f} " - f"Exploitation weight={exploit_w:0.3f}\n") - - # ------- EXPLOITATION: BayesOptDesign & ActiveLearning ------- - if explore_w != 1.0: - # Check if all needed properties are set - if not hasattr(self.ExpDesign, 'max_func_itr'): - raise AttributeError('max_func_itr not given to the experimental design') - - # Create a sample pool for rejection sampling - MCsize = 15000 - X_MC = self.ExpDesign.generate_samples(MCsize, 'random') - candidates = self.ExpDesign.generate_samples( - n_candidates, 'latin_hypercube') - - # Split the candidates in groups for multiprocessing - split_cand = np.array_split( - candidates, n_cand_groups, axis=0 - ) - # print(candidates) - # print(split_cand) - if self.parallel: - results = Parallel(n_jobs=-1, backend='multiprocessing')( - delayed(self.run_util_func)( - exploit_method, split_cand[i], i, sigma2, var, X_MC) - for i in range(n_cand_groups)) - else: - results = [] - for i in range(n_cand_groups): - results.append(self.run_util_func(exploit_method, split_cand[i], i, sigma2, var, X_MC)) - - # Retrieve the results and append them - U_J_d = np.concatenate([results[NofE][1] for NofE in - range(n_cand_groups)]) - - # Check if all scores are inf - if np.isinf(U_J_d).all() or np.isnan(U_J_d).all(): - U_J_d = np.ones(len(U_J_d)) - - # Get the expected value (mean) of the Utility score - # for each cell - if explore_method == 'Voronoi': - U_J_d = np.mean(U_J_d.reshape(-1, n_candidates), axis=1) - - # Normalize U_J_d - norm_U_J_d = U_J_d / np.sum(U_J_d) - else: - norm_U_J_d = np.zeros((len(scoreExploration))) - - # ------- Calculate Total score ------- - # ------- Trade off between EXPLORATION & EXPLOITATION ------- - # Accumulate the samples - finalCandidates = np.concatenate((allCandidates, candidates), axis = 0) - finalCandidates = np.unique(finalCandidates, axis = 0) - - # Calculations take into account both exploration and exploitation - # samples without duplicates - totalScore = np.zeros(finalCandidates.shape[0]) - #self.totalScore = totalScore - - for cand_idx in range(finalCandidates.shape[0]): - # find candidate indices - idx1 = np.where(allCandidates == finalCandidates[cand_idx])[0] - idx2 = np.where(candidates == finalCandidates[cand_idx])[0] - - # exploration - if idx1 != []: - idx1 = idx1[0] - totalScore[cand_idx] += explore_w * scoreExploration[idx1] - - # exploitation - if idx2 != []: - idx2 = idx2[0] - totalScore[cand_idx] += exploit_w * norm_U_J_d[idx2] - - - # Total score - totalScore = exploit_w * norm_U_J_d - totalScore += explore_w * scoreExploration - - # temp: Plot - # dim = self.ExpDesign.X.shape[1] - # if dim == 2: - # plotter(self.ExpDesign.X, allCandidates, explore_method) - - # ------- Select the best candidate ------- - # find an optimal point subset to add to the initial design by - # maximization of the utility score and taking care of NaN values - temp = totalScore.copy() - temp[np.isnan(totalScore)] = -np.inf - sorted_idxtotalScore = np.argsort(temp)[::-1] - bestIdx = sorted_idxtotalScore[:n_new_samples] - - # select the requested number of samples - if explore_method == 'Voronoi': - Xnew = np.zeros((n_new_samples, ndim)) - for i, idx in enumerate(bestIdx): - X_can = explore.closestPoints[idx] - - # Calculate the maxmin score for the region of interest - newSamples, maxminScore = explore.get_mc_samples(X_can) - - # select the requested number of samples - Xnew[i] = newSamples[np.argmax(maxminScore)] - else: - # Changed this from allCandiates to full set of candidates - # TODO: still not changed for e.g. 'Voronoi' - Xnew = finalCandidates[sorted_idxtotalScore[:n_new_samples]] - - - elif exploit_method == 'VarOptDesign': - # ------- EXPLOITATION: VarOptDesign ------- - UtilMethod = var - - # ------- Calculate Exoploration weight ------- - # Compute exploration weight based on trade off scheme - explore_w, exploit_w = self.tradeoff_weights(tradeoff_scheme, - old_EDX, - old_EDY) - print(f"\nweightExploration={explore_w:0.3f} " - f"weightExploitation={exploit_w:0.3f}") - - # Generate candidate samples from Exploration class - nMeasurement = old_EDY[OutputNames[0]].shape[1] - - # print(UtilMethod) - - # Find sensitive region - if UtilMethod == 'LOOCV': - LCerror = self.MetaModel.LCerror - allModifiedLOO = np.zeros((len(old_EDX), len(OutputNames), - nMeasurement)) - for y_idx, y_key in enumerate(OutputNames): - for idx, key in enumerate(LCerror[y_key].keys()): - allModifiedLOO[:, y_idx, idx] = abs( - LCerror[y_key][key]) - - ExploitScore = np.max(np.max(allModifiedLOO, axis=1), axis=1) - # print(allModifiedLOO.shape) - - elif UtilMethod in ['EIGF', 'ALM']: - # ----- All other in ['EIGF', 'ALM'] ----- - # Initilize the ExploitScore array - ExploitScore = np.zeros((len(old_EDX), len(OutputNames))) - - # Split the candidates in groups for multiprocessing - if explore_method != 'Voronoi': - split_cand = np.array_split(allCandidates, - n_cand_groups, - axis=0) - goodSampleIdx = range(n_cand_groups) - else: - # Find indices of the Vornoi cells with samples - goodSampleIdx = [] - for idx in range(len(explore.closest_points)): - if len(explore.closest_points[idx]) != 0: - goodSampleIdx.append(idx) - split_cand = explore.closest_points - - # Split the candidates in groups for multiprocessing - args = [] - for index in goodSampleIdx: - args.append((exploit_method, split_cand[index], index, - sigma2, var)) - - # Multiprocessing - pool = multiprocessing.Pool(multiprocessing.cpu_count()) - # With Pool.starmap_async() - results = pool.starmap_async(self.run_util_func, args).get() - - # Close the pool - pool.close() - - # Retrieve the results and append them - if explore_method == 'Voronoi': - ExploitScore = [np.mean(results[k][1]) for k in - range(len(goodSampleIdx))] - else: - ExploitScore = np.concatenate( - [results[k][1] for k in range(len(goodSampleIdx))]) - - else: - raise NameError('The requested utility function is not ' - 'available.') - - # print("ExploitScore:\n", ExploitScore) - - # find an optimal point subset to add to the initial design by - # maximization of the utility score and taking care of NaN values - # Total score - # Normalize U_J_d - ExploitScore = ExploitScore / np.sum(ExploitScore) - totalScore = exploit_w * ExploitScore - # print(totalScore.shape) - # print(explore_w) - # print(scoreExploration.shape) - totalScore += explore_w * scoreExploration - - temp = totalScore.copy() - sorted_idxtotalScore = np.argsort(temp, axis=0)[::-1] - bestIdx = sorted_idxtotalScore[:n_new_samples] - - Xnew = np.zeros((n_new_samples, ndim)) - if explore_method != 'Voronoi': - Xnew = allCandidates[bestIdx] - else: - for i, idx in enumerate(bestIdx.flatten()): - X_can = explore.closest_points[idx] - # plotter(self.ExpDesign.X, X_can, explore_method, - # scoreExploration=None) - - # Calculate the maxmin score for the region of interest - newSamples, maxminScore = explore.get_mc_samples(X_can) - - # select the requested number of samples - Xnew[i] = newSamples[np.argmax(maxminScore)] - - elif exploit_method == 'alphabetic': - # ------- EXPLOITATION: ALPHABETIC ------- - Xnew = self.util_AlphOptDesign(allCandidates, var) - - elif exploit_method == 'Space-filling': - # ------- EXPLOITATION: SPACE-FILLING ------- - totalScore = scoreExploration - - # ------- Select the best candidate ------- - # find an optimal point subset to add to the initial design by - # maximization of the utility score and taking care of NaN values - temp = totalScore.copy() - temp[np.isnan(totalScore)] = -np.inf - sorted_idxtotalScore = np.argsort(temp)[::-1] - - # select the requested number of samples - Xnew = allCandidates[sorted_idxtotalScore[:n_new_samples]] - - else: - raise NameError('The requested design method is not available.') - - print("\n") - print("\nRun No. {}:".format(old_EDX.shape[0]+1)) - print("Xnew:\n", Xnew) - - # TODO: why does it also return None? - return Xnew, None - - # ------------------------------------------------------------------------- - def util_AlphOptDesign(self, candidates, var='D-Opt'): - """ - Enriches the Experimental design with the requested alphabetic - criterion based on exploring the space with number of sampling points. - - Ref: Hadigol, M., & Doostan, A. (2018). Least squares polynomial chaos - expansion: A review of sampling strategies., Computer Methods in - Applied Mechanics and Engineering, 332, 382-407. - - Arguments - --------- - NCandidate : int - Number of candidate points to be searched - - var : string - Alphabetic optimality criterion - - Returns - ------- - X_new : array of shape (1, n_params) - The new sampling location in the input space. - """ - MetaModelOrig = self # TODO: this doesn't fully seem correct? - n_new_samples = MetaModelOrig.ExpDesign.n_new_samples - NCandidate = candidates.shape[0] - - # TODO: Loop over outputs - OutputName = self.out_names[0] - - # To avoid changes ub original aPCE object - MetaModel = deepcopy(MetaModelOrig) - - # Old Experimental design - oldExpDesignX = self.ExpDesign.X - - # TODO: Only one psi can be selected. - # Suggestion: Go for the one with the highest LOO error - # TODO: this is just a patch, need to look at again! - Scores = list(self.MetaModel.score_dict['b_1'][OutputName].values()) - #print(Scores) - #print(self.MetaModel.score_dict) - #print(self.MetaModel.score_dict.values()) - #print(self.MetaModel.score_dict['b_1'].values()) - #print(self.MetaModel.score_dict['b_1'][OutputName].values()) - ModifiedLOO = [1-score for score in Scores] - outIdx = np.argmax(ModifiedLOO) - - # Initialize Phi to save the criterion's values - Phi = np.zeros((NCandidate)) - - # TODO: also patched here - BasisIndices = self.MetaModel.basis_dict['b_1'][OutputName]["y_"+str(outIdx+1)] - P = len(BasisIndices) - - # ------ Old Psi ------------ - univ_p_val = self.MetaModel.univ_basis_vals(oldExpDesignX) - Psi = self.MetaModel.create_psi(BasisIndices, univ_p_val) - - # ------ New candidates (Psi_c) ------------ - # Assemble Psi_c - univ_p_val_c = self.MetaModel.univ_basis_vals(candidates) - Psi_c = self.MetaModel.create_psi(BasisIndices, univ_p_val_c) - - for idx in range(NCandidate): - - # Include the new row to the original Psi - Psi_cand = np.vstack((Psi, Psi_c[idx])) - - # Information matrix - PsiTPsi = np.dot(Psi_cand.T, Psi_cand) - M = PsiTPsi / (len(oldExpDesignX)+1) - - if np.linalg.cond(PsiTPsi) > 1e-12 \ - and np.linalg.cond(PsiTPsi) < 1 / sys.float_info.epsilon: - # faster - invM = linalg.solve(M, sparse.eye(PsiTPsi.shape[0]).toarray()) - else: - # stabler - invM = np.linalg.pinv(M) - - # ---------- Calculate optimality criterion ---------- - # Optimality criteria according to Section 4.5.1 in Ref. - - # D-Opt - if var.lower() == 'd-opt': - Phi[idx] = (np.linalg.det(invM)) ** (1/P) - - # A-Opt - elif var.lower() == 'a-opt': - Phi[idx] = np.trace(invM) - - # K-Opt - elif var.lower() == 'k-opt': - Phi[idx] = np.linalg.cond(M) - - else: - # print(var.lower()) - raise Exception('The optimality criterion you requested has ' - 'not been implemented yet!') - - # find an optimal point subset to add to the initial design - # by minimization of the Phi - sorted_idxtotalScore = np.argsort(Phi) - - # select the requested number of samples - Xnew = candidates[sorted_idxtotalScore[:n_new_samples]] - - return Xnew - - # ------------------------------------------------------------------------- - def _normpdf(self, y_hat_pce, std_pce, obs_data, total_sigma2s, - rmse=None): - """ - Calculated gaussian likelihood for given y+std based on given obs+sigma - # TODO: is this understanding correct? - - Parameters - ---------- - y_hat_pce : dict of 2d np arrays - Mean output of the surrogate. - std_pce : dict of 2d np arrays - Standard deviation output of the surrogate. - obs_data : dict of 1d np arrays - Observed data. - total_sigma2s : pandas dataframe, matches obs_data - Estimated uncertainty for the observed data. - rmse : dict, optional - RMSE values from validation of the surrogate. The default is None. - - Returns - ------- - likelihoods : dict of float - The likelihood for each surrogate eval in y_hat_pce compared to the - observations (?). - - """ - - likelihoods = 1.0 - - # Loop over the outputs - for idx, out in enumerate(self.out_names): - - # (Meta)Model Output - # print(y_hat_pce[out]) - nsamples, nout = y_hat_pce[out].shape - - # Prepare data and remove NaN - try: - data = obs_data[out].values[~np.isnan(obs_data[out])] - except AttributeError: - data = obs_data[out][~np.isnan(obs_data[out])] - - # Prepare sigma2s - non_nan_indices = ~np.isnan(total_sigma2s[out]) - tot_sigma2s = total_sigma2s[out][non_nan_indices][:nout].values - - # Surrogate error if valid dataset is given. - if rmse is not None: - tot_sigma2s += rmse[out]**2 - else: - tot_sigma2s += np.mean(std_pce[out])**2 - - likelihoods *= stats.multivariate_normal.pdf( - y_hat_pce[out], data, np.diag(tot_sigma2s), - allow_singular=True) - - # TODO: remove this here - self.Likelihoods = likelihoods - - return likelihoods - - # ------------------------------------------------------------------------- - def _corr_factor_BME(self, obs_data, total_sigma2s, logBME): - """ - Calculates the correction factor for BMEs. - """ - MetaModel = self.MetaModel - samples = self.ExpDesign.X # valid_samples - model_outputs = self.ExpDesign.Y # valid_model_runs - n_samples = samples.shape[0] - - # Extract the requested model outputs for likelihood calulation - output_names = self.out_names - - # TODO: Evaluate MetaModel on the experimental design and ValidSet - OutputRS, stdOutputRS = MetaModel.eval_metamodel(samples=samples) - - logLik_data = np.zeros((n_samples)) - logLik_model = np.zeros((n_samples)) - # Loop over the outputs - for idx, out in enumerate(output_names): - - # (Meta)Model Output - nsamples, nout = model_outputs[out].shape - - # Prepare data and remove NaN - try: - data = obs_data[out].values[~np.isnan(obs_data[out])] - except AttributeError: - data = obs_data[out][~np.isnan(obs_data[out])] - - # Prepare sigma2s - non_nan_indices = ~np.isnan(total_sigma2s[out]) - tot_sigma2s = total_sigma2s[out][non_nan_indices][:nout] - - # Covariance Matrix - covMatrix_data = np.diag(tot_sigma2s) - - for i, sample in enumerate(samples): - - # Simulation run - y_m = model_outputs[out][i] - - # Surrogate prediction - y_m_hat = OutputRS[out][i] - - # CovMatrix with the surrogate error - # covMatrix = np.diag(stdOutputRS[out][i]**2) - covMatrix = np.diag((y_m-y_m_hat)**2) - covMatrix = np.diag( - np.mean((model_outputs[out]-OutputRS[out]), axis=0)**2 - ) - - # Compute likelilhood output vs data - logLik_data[i] += logpdf( - y_m_hat, data, covMatrix_data - ) - - # Compute likelilhood output vs surrogate - logLik_model[i] += logpdf(y_m_hat, y_m, covMatrix) - - # Weight - logLik_data -= logBME - weights = np.exp(logLik_model+logLik_data) - - return np.log(np.mean(weights)) - - # ------------------------------------------------------------------------- - def _posteriorPlot(self, posterior, par_names, key): - """ - Plot the posterior of a specific key as a corner plot - - Parameters - ---------- - posterior : 2d np.array - Samples of the posterior. - par_names : list of strings - List of the parameter names. - key : string - Output key that this posterior belongs to. - - Returns - ------- - figPosterior : corner.corner - Plot of the posterior. - - """ - - # Initialization - newpath = (r'Outputs_SeqPosteriorComparison/posterior') - os.makedirs(newpath, exist_ok=True) - - bound_tuples = self.ExpDesign.bound_tuples - n_params = len(par_names) - font_size = 40 - if n_params == 2: - - figPosterior, ax = plt.subplots(figsize=(15, 15)) - - sns.kdeplot(x=posterior[:, 0], y=posterior[:, 1], - fill=True, ax=ax, cmap=plt.cm.jet, - clip=bound_tuples) - # Axis labels - plt.xlabel(par_names[0], fontsize=font_size) - plt.ylabel(par_names[1], fontsize=font_size) - - # Set axis limit - plt.xlim(bound_tuples[0]) - plt.ylim(bound_tuples[1]) - - # Increase font size - plt.xticks(fontsize=font_size) - plt.yticks(fontsize=font_size) - - # Switch off the grids - plt.grid(False) - - else: - import corner - figPosterior = corner.corner(posterior, labels=par_names, - title_fmt='.2e', show_titles=True, - title_kwargs={"fontsize": 12}) - - figPosterior.savefig(f'./{newpath}/{key}.pdf', bbox_inches='tight') - plt.close() - - # Save the posterior as .npy - np.save(f'./{newpath}/{key}.npy', posterior) - - return figPosterior - - - # ------------------------------------------------------------------------- - def _BME_Calculator(self, obs_data, sigma2Dict, rmse=None): - """ - This function computes the Bayesian model evidence (BME) via Monte - Carlo integration. - - Parameters - ---------- - obs_data : dict of 1d np arrays - Observed data. - sigma2Dict : pandas dataframe, matches obs_data - Estimated uncertainty for the observed data. - rmse : dict of floats, optional - RMSE values for each output-key. The dafault is None. - - Returns - ------- - (logBME, KLD, X_Posterior, Likelihoods, distHellinger) - - """ - # Initializations - if hasattr(self, 'valid_likelihoods'): - valid_likelihoods = self.valid_likelihoods - else: - valid_likelihoods = [] - valid_likelihoods = np.array(valid_likelihoods) - - post_snapshot = self.ExpDesign.post_snapshot - if post_snapshot or valid_likelihoods.shape[0] != 0: - newpath = (r'Outputs_SeqPosteriorComparison/likelihood_vs_ref') - os.makedirs(newpath, exist_ok=True) - - SamplingMethod = 'random' - MCsize = 10000 - ESS = 0 - - # Estimation of the integral via Monte Varlo integration - while (ESS > MCsize) or (ESS < 1): - - # Generate samples for Monte Carlo simulation - X_MC = self.ExpDesign.generate_samples( - MCsize, SamplingMethod - ) - - # Monte Carlo simulation for the candidate design - Y_MC, std_MC = self.MetaModel.eval_metamodel(samples=X_MC) - - # Likelihood computation (Comparison of data and - # simulation results via PCE with candidate design) - Likelihoods = self._normpdf( - Y_MC, std_MC, obs_data, sigma2Dict, rmse - ) - - # Check the Effective Sample Size (1000<ESS<MCsize) - ESS = 1 / np.sum(np.square(Likelihoods/np.sum(Likelihoods))) - - # Enlarge sample size if it doesn't fulfill the criteria - if (ESS > MCsize) or (ESS < 1): - print(f'ESS={ESS} MC size should be larger.') - MCsize *= 10 - ESS = 0 - - # Rejection Step - # Random numbers between 0 and 1 - unif = np.random.rand(1, MCsize)[0] - - # Reject the poorly performed prior - accepted = (Likelihoods/np.max(Likelihoods)) >= unif - X_Posterior = X_MC[accepted] - - # ------------------------------------------------------------ - # --- Kullback-Leibler Divergence & Information Entropy ------ - # ------------------------------------------------------------ - # Prior-based estimation of BME - logBME = np.log(np.nanmean(Likelihoods)) - - # TODO: Correction factor - # log_weight = self.__corr_factor_BME(obs_data, sigma2Dict, logBME) - - # Posterior-based expectation of likelihoods - postExpLikelihoods = np.mean(np.log(Likelihoods[accepted])) - - # Posterior-based expectation of prior densities - postExpPrior = np.mean( - np.log(self.ExpDesign.JDist.pdf(X_Posterior.T)) - ) - - # Calculate Kullback-Leibler Divergence - # KLD = np.mean(np.log(Likelihoods[Likelihoods!=0])- logBME) - KLD = postExpLikelihoods - logBME - - # Information Entropy based on Entropy paper Eq. 38 - infEntropy = logBME - postExpPrior - postExpLikelihoods - - # If post_snapshot is True, plot likelihood vs refrence - if post_snapshot or valid_likelihoods: - # Hellinger distance - valid_likelihoods = np.array(valid_likelihoods) - ref_like = np.log(valid_likelihoods[(valid_likelihoods > 0)]) - est_like = np.log(Likelihoods[Likelihoods > 0]) - distHellinger = hellinger_distance(ref_like, est_like) - - idx = len([name for name in os.listdir(newpath) if 'Likelihoods_' - in name and os.path.isfile(os.path.join(newpath, name))]) - - fig, ax = plt.subplots() - try: - sns.kdeplot(np.log(valid_likelihoods[valid_likelihoods > 0]), - shade=True, color="g", label='Ref. Likelihood') - sns.kdeplot(np.log(Likelihoods[Likelihoods > 0]), shade=True, - color="b", label='Likelihood with PCE') - except: - pass - - text = f"Hellinger Dist.={distHellinger:.3f}\n logBME={logBME:.3f}" - "\n DKL={KLD:.3f}" - - plt.text(0.05, 0.75, text, bbox=dict(facecolor='wheat', - edgecolor='black', - boxstyle='round,pad=1'), - transform=ax.transAxes) - - fig.savefig(f'./{newpath}/Likelihoods_{idx}.pdf', - bbox_inches='tight') - plt.close() - - else: - distHellinger = 0.0 - - # Bayesian inference with Emulator only for 2D problem - if post_snapshot and self.MetaModel.n_params == 2 and not idx % 5: - BayesOpts = BayesInference(self) - - BayesOpts.emulator = True - BayesOpts.plot_post_pred = False - - # Select the inference method - import emcee - BayesOpts.inference_method = "MCMC" - # Set the MCMC parameters passed to self.mcmc_params - BayesOpts.mcmc_params = { - 'n_steps': 1e5, - 'n_walkers': 30, - 'moves': emcee.moves.KDEMove(), - 'verbose': False - } - - # ----- Define the discrepancy model ------- - # TODO: check with Farid if this first line is how it should be - BayesOpts.measured_data = obs_data - obs_data = pd.DataFrame(obs_data, columns=self.out_names) - BayesOpts.measurement_error = obs_data - # TODO: shouldn't the uncertainty be sigma2Dict instead of obs_data? - - # # -- (Option B) -- - DiscrepancyOpts = Discrepancy('') - DiscrepancyOpts.type = 'Gaussian' - DiscrepancyOpts.parameters = obs_data**2 - BayesOpts.Discrepancy = DiscrepancyOpts - # Start the calibration/inference - Bayes_PCE = BayesOpts.create_inference() - X_Posterior = Bayes_PCE.posterior_df.values - - return (logBME, KLD, X_Posterior, Likelihoods, distHellinger) - - # ------------------------------------------------------------------------- - def _validError(self): - """ - Evaluate the metamodel on the validation samples and calculate the - error against the corresponding model runs - - Returns - ------- - rms_error : dict - RMSE for each validation run. - valid_error : dict - Normed (?)RMSE for each validation run. - - """ - # Extract the original model with the generated samples - valid_model_runs = self.ExpDesign.valid_model_runs - - # Run the PCE model with the generated samples - valid_PCE_runs, _ = self.MetaModel.eval_metamodel(samples=self.ExpDesign.valid_samples) - - rms_error = {} - valid_error = {} - # Loop over the keys and compute RMSE error. - for key in self.out_names: - rms_error[key] = mean_squared_error( - valid_model_runs[key], valid_PCE_runs[key], - multioutput='raw_values', - sample_weight=None, - squared=False) - # Validation error - valid_error[key] = (rms_error[key]**2) - valid_error[key] /= np.var(valid_model_runs[key], ddof=1, axis=0) - - # Print a report table - print("\n>>>>> Updated Errors of {} <<<<<".format(key)) - print("\nIndex | RMSE | Validation Error") - print('-'*35) - print('\n'.join(f'{i+1} | {k:.3e} | {j:.3e}' for i, (k, j) - in enumerate(zip(rms_error[key], - valid_error[key])))) - - return rms_error, valid_error - - # ------------------------------------------------------------------------- - def _error_Mean_Std(self): - """ - Calculates the error in the overall mean and std approximation of the - surrogate against the mc-reference provided to the model. - This can only be applied to metamodels of polynomial type - - Returns - ------- - RMSE_Mean : float - RMSE of the means - RMSE_std : float - RMSE of the standard deviations - - """ - # Compute the mean and std based on the MetaModel - pce_means, pce_stds = self.MetaModel._compute_pce_moments() - - # Compute the root mean squared error - for output in self.out_names: - - # Compute the error between mean and std of MetaModel and OrigModel - RMSE_Mean = mean_squared_error( - self.Model.mc_reference['mean'], pce_means[output], squared=False - ) - RMSE_std = mean_squared_error( - self.Model.mc_reference['std'], pce_stds[output], squared=False - ) - - return RMSE_Mean, RMSE_std diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/eval_rec_rule.py b/examples/model-comparison/bayesvalidrox/surrogate_models/eval_rec_rule.py deleted file mode 100644 index b583c7eb2..000000000 --- a/examples/model-comparison/bayesvalidrox/surrogate_models/eval_rec_rule.py +++ /dev/null @@ -1,197 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" - - -Based on the implementation in UQLab [1]. - -References: -1. S. Marelli, and B. Sudret, UQLab: A framework for uncertainty quantification -in Matlab, Proc. 2nd Int. Conf. on Vulnerability, Risk Analysis and Management -(ICVRAM2014), Liverpool, United Kingdom, 2014, 2554-2563. - -2. S. Marelli, N. Lüthen, B. Sudret, UQLab user manual – Polynomial chaos -expansions, Report # UQLab-V1.4-104, Chair of Risk, Safety and Uncertainty -Quantification, ETH Zurich, Switzerland, 2021. - -Author: Farid Mohammadi, M.Sc. -E-Mail: farid.mohammadi@iws.uni-stuttgart.de -Department of Hydromechanics and Modelling of Hydrosystems (LH2) -Institute for Modelling Hydraulic and Environmental Systems (IWS), University -of Stuttgart, www.iws.uni-stuttgart.de/lh2/ -Pfaffenwaldring 61 -70569 Stuttgart - -Created on Fri Jan 14 2022 -""" -import numpy as np -from numpy.polynomial.polynomial import polyval - - -def poly_rec_coeffs(n_max, poly_type, params=None): - """ - Computes the recurrence coefficients for classical Wiener-Askey orthogonal - polynomials. - - Parameters - ---------- - n_max : int - Maximum polynomial degree. - poly_type : string - Polynomial type. - params : list, optional - Parameters required for `laguerre` poly type. The default is None. - - Returns - ------- - AB : dict - The 3 term recursive coefficients and the applicable ranges. - - """ - - if poly_type == 'legendre': - - def an(n): - return np.zeros((n+1, 1)) - - def sqrt_bn(n): - sq_bn = np.zeros((n+1, 1)) - sq_bn[0, 0] = 1 - for i in range(1, n+1): - sq_bn[i, 0] = np.sqrt(1./(4-i**-2)) - return sq_bn - - bounds = [-1, 1] - - elif poly_type == 'hermite': - - def an(n): - return np.zeros((n+1, 1)) - - def sqrt_bn(n): - sq_bn = np.zeros((n+1, 1)) - sq_bn[0, 0] = 1 - for i in range(1, n+1): - sq_bn[i, 0] = np.sqrt(i) - return sq_bn - - bounds = [-np.inf, np.inf] - - elif poly_type == 'laguerre': - - def an(n): - a = np.zeros((n+1, 1)) - for i in range(1, n+1): - a[i] = 2*n + params[1] - return a - - def sqrt_bn(n): - sq_bn = np.zeros((n+1, 1)) - sq_bn[0, 0] = 1 - for i in range(1, n+1): - sq_bn[i, 0] = -np.sqrt(i * (i+params[1]-1)) - return sq_bn - - bounds = [0, np.inf] - - AB = {'alpha_beta': np.concatenate((an(n_max), sqrt_bn(n_max)), axis=1), - 'bounds': bounds} - - return AB - - -def eval_rec_rule(x, max_deg, poly_type): - """ - Evaluates the polynomial that corresponds to the Jacobi matrix defined - from the AB. - - Parameters - ---------- - x : array (n_samples) - Points where the polynomials are evaluated. - max_deg : int - Maximum degree. - poly_type : string - Polynomial type. - - Returns - ------- - values : array of shape (n_samples, max_deg+1) - Polynomials corresponding to the Jacobi matrix. - - """ - AB = poly_rec_coeffs(max_deg, poly_type) - AB = AB['alpha_beta'] - - values = np.zeros((len(x), AB.shape[0]+1)) - values[:, 1] = 1 / AB[0, 1] - - for k in range(AB.shape[0]-1): - values[:, k+2] = np.multiply((x - AB[k, 0]), values[:, k+1]) - \ - np.multiply(values[:, k], AB[k, 1]) - values[:, k+2] = np.divide(values[:, k+2], AB[k+1, 1]) - return values[:, 1:] - - -def eval_rec_rule_arbitrary(x, max_deg, poly_coeffs): - """ - Evaluates the polynomial at sample array x. - - Parameters - ---------- - x : array (n_samples) - Points where the polynomials are evaluated. - max_deg : int - Maximum degree. - poly_coeffs : dict - Polynomial coefficients computed based on moments. - - Returns - ------- - values : array of shape (n_samples, max_deg+1) - Univariate Polynomials evaluated at samples. - - """ - values = np.zeros((len(x), max_deg+1)) - - for deg in range(max_deg+1): - values[:, deg] = polyval(x, poly_coeffs[deg]).T - - return values - - -def eval_univ_basis(x, max_deg, poly_types, apoly_coeffs=None): - """ - Evaluates univariate regressors along input directions. - - Parameters - ---------- - x : array of shape (n_samples, n_params) - Training samples. - max_deg : int - Maximum polynomial degree. - poly_types : list of strings - List of polynomial types for all parameters. - apoly_coeffs : dict , optional - Polynomial coefficients computed based on moments. The default is None. - - Returns - ------- - univ_vals : array of shape (n_samples, n_params, max_deg+1) - Univariate polynomials for all degrees and parameters evaluated at x. - - """ - # Initilize the output array - n_samples, n_params = x.shape - univ_vals = np.zeros((n_samples, n_params, max_deg+1)) - - for i in range(n_params): - - if poly_types[i] == 'arbitrary': - polycoeffs = apoly_coeffs[f'p_{i+1}'] - univ_vals[:, i] = eval_rec_rule_arbitrary(x[:, i], max_deg, - polycoeffs) - else: - univ_vals[:, i] = eval_rec_rule(x[:, i], max_deg, poly_types[i]) - - return univ_vals diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/exp_designs.py b/examples/model-comparison/bayesvalidrox/surrogate_models/exp_designs.py deleted file mode 100644 index fa03fe17d..000000000 --- a/examples/model-comparison/bayesvalidrox/surrogate_models/exp_designs.py +++ /dev/null @@ -1,479 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Experimental design with associated sampling methods -""" - -import numpy as np -import math -import itertools -import chaospy -import scipy.stats as st -from tqdm import tqdm -import h5py -import os - -from .apoly_construction import apoly_construction -from .input_space import InputSpace - -# ------------------------------------------------------------------------- -def check_ranges(theta, ranges): - """ - This function checks if theta lies in the given ranges. - - Parameters - ---------- - theta : array - Proposed parameter set. - ranges : nested list - List of the praremeter ranges. - - Returns - ------- - c : bool - If it lies in the given range, it return True else False. - - """ - c = True - # traverse in the list1 - for i, bounds in enumerate(ranges): - x = theta[i] - # condition check - if x < bounds[0] or x > bounds[1]: - c = False - return c - return c - - -class ExpDesigns(InputSpace): - """ - This class generates samples from the prescribed marginals for the model - parameters using the `Input` object. - - Attributes - ---------- - Input : obj - Input object containing the parameter marginals, i.e. name, - distribution type and distribution parameters or available raw data. - meta_Model_type : str - Type of the meta_Model_type. - sampling_method : str - Name of the sampling method for the experimental design. The following - sampling method are supported: - - * random - * latin_hypercube - * sobol - * halton - * hammersley - * chebyshev(FT) - * grid(FT) - * user - hdf5_file : str - Name of the hdf5 file that contains the experimental design. - n_new_samples : int - Number of (initial) training points. - n_max_samples : int - Number of maximum training points. - mod_LOO_threshold : float - The modified leave-one-out cross validation threshold where the - sequential design stops. - tradeoff_scheme : str - Trade-off scheme to assign weights to the exploration and exploitation - scores in the sequential design. - n_canddidate : int - Number of candidate training sets to calculate the scores for. - explore_method : str - Type of the exploration method for the sequential design. The following - methods are supported: - - * Voronoi - * random - * latin_hypercube - * LOOCV - * dual annealing - exploit_method : str - Type of the exploitation method for the sequential design. The - following methods are supported: - - * BayesOptDesign - * BayesActDesign - * VarOptDesign - * alphabetic - * Space-filling - util_func : str or list - The utility function to be specified for the `exploit_method`. For the - available utility functions see Note section. - n_cand_groups : int - Number of candidate groups. Each group of candidate training sets will - be evaulated separately in parallel. - n_replication : int - Number of replications. Only for comparison. The default is 1. - post_snapshot : int - Whether to plot the posterior in the sequential design. The default is - `True`. - step_snapshot : int - The number of steps to plot the posterior in the sequential design. The - default is 1. - max_a_post : list or array - Maximum a posteriori of the posterior distribution, if known. The - default is `[]`. - adapt_verbose : bool - Whether to plot the model response vs that of metamodel for the new - trining point in the sequential design. - - Note - ---------- - The following utiliy functions for the **exploitation** methods are - supported: - - #### BayesOptDesign (when data is available) - - DKL (Kullback-Leibler Divergence) - - DPP (D-Posterior-percision) - - APP (A-Posterior-percision) - - #### VarBasedOptDesign -> when data is not available - - Entropy (Entropy/MMSE/active learning) - - EIGF (Expected Improvement for Global fit) - - LOOCV (Leave-one-out Cross Validation) - - #### alphabetic - - D-Opt (D-Optimality) - - A-Opt (A-Optimality) - - K-Opt (K-Optimality) - """ - - def __init__(self, Input, meta_Model_type='pce', - sampling_method='random', hdf5_file=None, - n_new_samples=1, n_max_samples=None, mod_LOO_threshold=1e-16, - tradeoff_scheme=None, n_canddidate=1, explore_method='random', - exploit_method='Space-filling', util_func='Space-filling', - n_cand_groups=4, n_replication=1, post_snapshot=False, - step_snapshot=1, max_a_post=[], adapt_verbose=False, max_func_itr=1): - - self.InputObj = Input - self.meta_Model_type = meta_Model_type - self.sampling_method = sampling_method - self.hdf5_file = hdf5_file - self.n_new_samples = n_new_samples - self.n_max_samples = n_max_samples - self.mod_LOO_threshold = mod_LOO_threshold - self.explore_method = explore_method - self.exploit_method = exploit_method - self.util_func = util_func - self.tradeoff_scheme = tradeoff_scheme - self.n_canddidate = n_canddidate - self.n_cand_groups = n_cand_groups - self.n_replication = n_replication - self.post_snapshot = post_snapshot - self.step_snapshot = step_snapshot - self.max_a_post = max_a_post - self.adapt_verbose = adapt_verbose - self.max_func_itr = max_func_itr - - # Other - self.apce = None - self.ndim = None - - # Init - self.check_valid_inputs() - - # ------------------------------------------------------------------------- - def generate_samples(self, n_samples, sampling_method='random', - transform=False): - """ - Generates samples with given sampling method - - Parameters - ---------- - n_samples : int - Number of requested samples. - sampling_method : str, optional - Sampling method. The default is `'random'`. - transform : bool, optional - Transformation via an isoprobabilistic transformation method. The - default is `False`. - - Returns - ------- - samples: array of shape (n_samples, n_params) - Generated samples from defined model input object. - - """ - try: - samples = chaospy.generate_samples( - int(n_samples), domain=self.origJDist, rule=sampling_method - ) - except: - samples = self.random_sampler(int(n_samples)).T - - return samples.T - - - - # ------------------------------------------------------------------------- - def generate_ED(self, n_samples, transform=False, - max_pce_deg=None): - """ - Generates experimental designs (training set) with the given method. - - Parameters - ---------- - n_samples : int - Number of requested training points. - sampling_method : str, optional - Sampling method. The default is `'random'`. - transform : bool, optional - Isoprobabilistic transformation. The default is `False`. - max_pce_deg : int, optional - Maximum PCE polynomial degree. The default is `None`. - - Returns - ------- - None - - """ - if n_samples <0: - raise ValueError('A negative number of samples cannot be created. Please provide positive n_samples') - n_samples = int(n_samples) - - if not hasattr(self, 'n_init_samples'): - self.n_init_samples = n_samples - - # Generate the samples based on requested method - self.init_param_space(max_pce_deg) - - sampling_method = self.sampling_method - # Pass user-defined samples as ED - if sampling_method == 'user': - if not hasattr(self, 'X'): - raise AttributeError('User-defined sampling cannot proceed as no samples provided. Please add them to this class as attribute X') - if not self.X.ndim == 2: - raise AttributeError('The provided samples shuld have 2 dimensions') - samples = self.X - self.n_samples = len(samples) - - # Sample the distribution of parameters - elif self.input_data_given: - # Case II: Input values are directly given by the user. - - if sampling_method == 'random': - samples = self.random_sampler(n_samples) - - elif sampling_method == 'PCM' or \ - sampling_method == 'LSCM': - samples = self.pcm_sampler(n_samples, max_pce_deg) - - else: - # Create ExpDesign in the actual space using chaospy - try: - samples = chaospy.generate_samples(n_samples, - domain=self.JDist, - rule=sampling_method).T - except: - samples = self.JDist.resample(n_samples).T - - elif not self.input_data_given: - # Case I = User passed known distributions - samples = chaospy.generate_samples(n_samples, domain=self.JDist, - rule=sampling_method).T - - self.X = samples - - def read_from_file(self, out_names): - """ - Reads in the ExpDesign from a provided h5py file and saves the results. - - Parameters - ---------- - out_names : list of strings - The keys that are in the outputs (y) saved in the provided file. - - Returns - ------- - None. - - """ - if self.hdf5_file == None: - raise AttributeError('ExpDesign cannot be read in, please provide hdf5 file first') - - # Read hdf5 file - f = h5py.File(self.hdf5_file, 'r+') - - # Read EDX and pass it to ExpDesign object - try: - self.X = np.array(f["EDX/New_init_"]) - except KeyError: - self.X = np.array(f["EDX/init_"]) - - # Update number of initial samples - self.n_init_samples = self.X.shape[0] - - # Read EDX and pass it to ExpDesign object - self.Y = {} - - # Extract x values - try: - self.Y["x_values"] = dict() - for varIdx, var in enumerate(out_names): - x = np.array(f[f"x_values/{var}"]) - self.Y["x_values"][var] = x - except KeyError: - self.Y["x_values"] = np.array(f["x_values"]) - - # Store the output - for varIdx, var in enumerate(out_names): - try: - y = np.array(f[f"EDY/{var}/New_init_"]) - except KeyError: - y = np.array(f[f"EDY/{var}/init_"]) - self.Y[var] = y - f.close() - print(f'Experimental Design is read in from file {self.hdf5_file}') - print('') - - - - # ------------------------------------------------------------------------- - def random_sampler(self, n_samples, max_deg = None): - """ - Samples the given raw data randomly. - - Parameters - ---------- - n_samples : int - Number of requested samples. - - max_deg : int, optional - Maximum degree. The default is `None`. - This will be used to run init_param_space, if it has not been done - until now. - - Returns - ------- - samples: array of shape (n_samples, n_params) - The sampling locations in the input space. - - """ - if not hasattr(self, 'raw_data'): - self.init_param_space(max_deg) - else: - if np.array(self.raw_data).ndim !=2: - raise AttributeError('The given raw data for sampling should have two dimensions') - samples = np.zeros((n_samples, self.ndim)) - sample_size = self.raw_data.shape[1] - - # Use a combination of raw data - if n_samples < sample_size: - for pa_idx in range(self.ndim): - # draw random indices - rand_idx = np.random.randint(0, sample_size, n_samples) - # store the raw data with given random indices - samples[:, pa_idx] = self.raw_data[pa_idx, rand_idx] - else: - try: - samples = self.JDist.resample(int(n_samples)).T - except AttributeError: - samples = self.JDist.sample(int(n_samples)).T - # Check if all samples are in the bound_tuples - for idx, param_set in enumerate(samples): - if not check_ranges(param_set, self.bound_tuples): - try: - proposed_sample = chaospy.generate_samples( - 1, domain=self.JDist, rule='random').T[0] - except: - proposed_sample = self.JDist.resample(1).T[0] - while not check_ranges(proposed_sample, - self.bound_tuples): - try: - proposed_sample = chaospy.generate_samples( - 1, domain=self.JDist, rule='random').T[0] - except: - proposed_sample = self.JDist.resample(1).T[0] - samples[idx] = proposed_sample - - return samples - - # ------------------------------------------------------------------------- - def pcm_sampler(self, n_samples, max_deg): - """ - Generates collocation points based on the root of the polynomial - degrees. - - Parameters - ---------- - n_samples : int - Number of requested samples. - max_deg : int - Maximum degree defined by user. Will also be used to run - init_param_space if that has not been done beforehand. - - Returns - ------- - opt_col_points: array of shape (n_samples, n_params) - Collocation points. - - """ - - if not hasattr(self, 'raw_data'): - self.init_param_space(max_deg) - - raw_data = self.raw_data - - # Guess the closest degree to self.n_samples - def M_uptoMax(deg): - result = [] - for d in range(1, deg+1): - result.append(math.factorial(self.ndim+d) // - (math.factorial(self.ndim) * math.factorial(d))) - return np.array(result) - #print(M_uptoMax(max_deg)) - #print(np.where(M_uptoMax(max_deg) > n_samples)[0]) - - guess_Deg = np.where(M_uptoMax(max_deg) > n_samples)[0][0] - - c_points = np.zeros((guess_Deg+1, self.ndim)) - - def PolynomialPa(parIdx): - return apoly_construction(self.raw_data[parIdx], max_deg) - - for i in range(self.ndim): - poly_coeffs = PolynomialPa(i)[guess_Deg+1][::-1] - c_points[:, i] = np.trim_zeros(np.roots(poly_coeffs)) - - # Construction of optimal integration points - Prod = itertools.product(np.arange(1, guess_Deg+2), repeat=self.ndim) - sort_dig_unique_combos = np.array(list(filter(lambda x: x, Prod))) - - # Ranking relatively mean - Temp = np.empty(shape=[0, guess_Deg+1]) - for j in range(self.ndim): - s = abs(c_points[:, j]-np.mean(raw_data[j])) - Temp = np.append(Temp, [s], axis=0) - temp = Temp.T - - index_CP = np.sort(temp, axis=0) - sort_cpoints = np.empty((0, guess_Deg+1)) - - for j in range(self.ndim): - #print(index_CP[:, j]) - sort_cp = c_points[index_CP[:, j], j] - sort_cpoints = np.vstack((sort_cpoints, sort_cp)) - - # Mapping of Combination to Cpoint Combination - sort_unique_combos = np.empty(shape=[0, self.ndim]) - for i in range(len(sort_dig_unique_combos)): - sort_un_comb = [] - for j in range(self.ndim): - SortUC = sort_cpoints[j, sort_dig_unique_combos[i, j]-1] - sort_un_comb.append(SortUC) - sort_uni_comb = np.asarray(sort_un_comb) - sort_unique_combos = np.vstack((sort_unique_combos, sort_uni_comb)) - - # Output the collocation points - if self.sampling_method.lower() == 'lscm': - opt_col_points = sort_unique_combos - else: - opt_col_points = sort_unique_combos[0:self.n_samples] - - return opt_col_points diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/exploration.py b/examples/model-comparison/bayesvalidrox/surrogate_models/exploration.py deleted file mode 100644 index 6abb652f1..000000000 --- a/examples/model-comparison/bayesvalidrox/surrogate_models/exploration.py +++ /dev/null @@ -1,367 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Exploration for sequential training of metamodels -""" - -import numpy as np -from scipy.spatial import distance - - -class Exploration: - """ - Created based on the Surrogate Modeling Toolbox (SUMO) [1]. - - [1] Gorissen, D., Couckuyt, I., Demeester, P., Dhaene, T. and Crombecq, K., - 2010. A surrogate modeling and adaptive sampling toolbox for computer - based design. Journal of machine learning research.-Cambridge, Mass., - 11, pp.2051-2055. sumo@sumo.intec.ugent.be - http://sumo.intec.ugent.be - - Attributes - ---------- - ExpDesign : obj - ExpDesign object. - n_candidate : int - Number of candidate samples. - mc_criterion : str - Selection crieterion. The default is `'mc-intersite-proj-th'`. Another - option is `'mc-intersite-proj'`. - w : int - Number of random points in the domain for each sample of the - training set. - """ - - def __init__(self, ExpDesign, n_candidate, - mc_criterion='mc-intersite-proj-th'): - self.ExpDesign = ExpDesign - self.n_candidate = n_candidate - self.mc_criterion = mc_criterion - self.w = 100 - - def get_exploration_samples(self): - """ - This function generates candidates to be selected as new design and - their associated exploration scores. - - Returns - ------- - all_candidates : array of shape (n_candidate, n_params) - A list of samples. - exploration_scores: arrays of shape (n_candidate) - Exploration scores. - """ - explore_method = self.ExpDesign.explore_method - - print("\n") - print(f' The {explore_method}-Method is selected as the exploration ' - 'method.') - print("\n") - - if explore_method == 'Voronoi': - # Generate samples using the Voronoi method - all_candidates, exploration_scores = self.get_vornoi_samples() - else: - # Generate samples using the MC method - all_candidates, exploration_scores = self.get_mc_samples() - - return all_candidates, exploration_scores - - # ------------------------------------------------------------------------- - def get_vornoi_samples(self): - """ - This function generates samples based on voronoi cells and their - corresponding scores - - Returns - ------- - new_samples : array of shape (n_candidate, n_params) - A list of samples. - exploration_scores: arrays of shape (n_candidate) - Exploration scores. - """ - - mc_criterion = self.mc_criterion - n_candidate = self.n_candidate - # Get the Old ExpDesign #samples - old_ED_X = self.ExpDesign.X - ndim = old_ED_X.shape[1] - - # calculate error #averageErrors - error_voronoi, all_candidates = self.approximate_voronoi( - self.w, old_ED_X - ) - - # Pick the best candidate point in the voronoi cell - # for each best sample - selected_samples = np.empty((0, ndim)) - bad_samples = [] - - for index in range(len(error_voronoi)): - - # get candidate new samples from voronoi tesselation - candidates = self.closest_points[index] - - # get total number of candidates - n_new_samples = candidates.shape[0] - - # still no candidate samples around this one, skip it! - if n_new_samples == 0: - print('The following sample has been skipped because there ' - 'were no candidate samples around it...') - print(old_ED_X[index]) - bad_samples.append(index) - continue - - # find candidate that is farthest away from any existing sample - max_min_distance = 0 - best_candidate = 0 - min_intersite_dist = np.zeros((n_new_samples)) - min_projected_dist = np.zeros((n_new_samples)) - - for j in range(n_new_samples): - - new_samples = np.vstack((old_ED_X, selected_samples)) - - # find min distorted distance from all other samples - euclidean_dist = self._build_dist_matrix_point( - new_samples, candidates[j], do_sqrt=True) - min_euclidean_dist = np.min(euclidean_dist) - min_intersite_dist[j] = min_euclidean_dist - - # Check if this is the maximum minimum distance from all other - # samples - if min_euclidean_dist >= max_min_distance: - max_min_distance = min_euclidean_dist - best_candidate = j - - # Projected distance - projected_dist = distance.cdist( - new_samples, [candidates[j]], 'chebyshev') - min_projected_dist[j] = np.min(projected_dist) - - if mc_criterion == 'mc-intersite-proj': - weight_euclidean_dist = 0.5 * ((n_new_samples+1)**(1/ndim) - 1) - weight_projected_dist = 0.5 * (n_new_samples+1) - total_dist_scores = weight_euclidean_dist * min_intersite_dist - total_dist_scores += weight_projected_dist * min_projected_dist - - elif mc_criterion == 'mc-intersite-proj-th': - alpha = 0.5 # chosen (tradeoff) - d_min = 2 * alpha / n_new_samples - if any(min_projected_dist < d_min): - candidates = np.delete( - candidates, [min_projected_dist < d_min], axis=0 - ) - total_dist_scores = np.delete( - min_intersite_dist, [min_projected_dist < d_min], - axis=0 - ) - else: - total_dist_scores = min_intersite_dist - else: - raise NameError( - 'The MC-Criterion you requested is not available.' - ) - - # Add the best candidate to the list of new samples - best_candidate = np.argsort(total_dist_scores)[::-1][:n_candidate] - selected_samples = np.vstack( - (selected_samples, candidates[best_candidate]) - ) - - self.new_samples = selected_samples - self.exploration_scores = np.delete(error_voronoi, bad_samples, axis=0) - - return self.new_samples, self.exploration_scores - - # ------------------------------------------------------------------------- - def get_mc_samples(self, all_candidates=None): - """ - This function generates random samples based on Global Monte Carlo - methods and their corresponding scores, based on [1]. - - [1] Crombecq, K., Laermans, E. and Dhaene, T., 2011. Efficient - space-filling and non-collapsing sequential design strategies for - simulation-based modeling. European Journal of Operational Research - , 214(3), pp.683-696. - DOI: https://doi.org/10.1016/j.ejor.2011.05.032 - - Implemented methods to compute scores: - 1) mc-intersite-proj - 2) mc-intersite-proj-th - - Arguments - --------- - all_candidates : array, optional - Samples to compute the scores for. The default is `None`. In this - case, samples will be generated by defined model input marginals. - - Returns - ------- - new_samples : array of shape (n_candidate, n_params) - A list of samples. - exploration_scores: arrays of shape (n_candidate) - Exploration scores. - """ - explore_method = self.ExpDesign.explore_method - mc_criterion = self.mc_criterion - if all_candidates is None: - n_candidate = self.n_candidate - else: - n_candidate = all_candidates.shape[0] - - # Get the Old ExpDesign #samples - old_ED_X = self.ExpDesign.X - ndim = old_ED_X.shape[1] - - # ----- Compute the number of random points ----- - if all_candidates is None: - # Generate MC Samples - all_candidates = self.ExpDesign.generate_samples( - self.n_candidate, explore_method - ) - self.all_candidates = all_candidates - - # initialization - min_intersite_dist = np.zeros((n_candidate)) - min_projected_dist = np.zeros((n_candidate)) - - for i, candidate in enumerate(all_candidates): - - # find candidate that is farthest away from any existing sample - maxMinDistance = 0 - - # find min distorted distance from all other samples - euclidean_dist = self._build_dist_matrix_point( - old_ED_X, candidate, do_sqrt=True - ) - min_euclidean_dist = np.min(euclidean_dist) - min_intersite_dist[i] = min_euclidean_dist - - # Check if this is the maximum minimum distance from all other - # samples - if min_euclidean_dist >= maxMinDistance: - maxMinDistance = min_euclidean_dist - - # Projected distance - projected_dist = self._build_dist_matrix_point( - old_ED_X, candidate, 'chebyshev' - ) - min_projected_dist[i] = np.min(projected_dist) - - if mc_criterion == 'mc-intersite-proj': - weight_euclidean_dist = ((n_candidate+1)**(1/ndim) - 1) * 0.5 - weight_projected_dist = (n_candidate+1) * 0.5 - total_dist_scores = weight_euclidean_dist * min_intersite_dist - total_dist_scores += weight_projected_dist * min_projected_dist - - elif mc_criterion == 'mc-intersite-proj-th': - alpha = 0.5 # chosen (tradeoff) - d_min = 2 * alpha / n_candidate - if any(min_projected_dist < d_min): - all_candidates = np.delete( - all_candidates, [min_projected_dist < d_min], axis=0 - ) - total_dist_scores = np.delete( - min_intersite_dist, [min_projected_dist < d_min], axis=0 - ) - else: - total_dist_scores = min_intersite_dist - else: - raise NameError('The MC-Criterion you requested is not available.') - - self.new_samples = all_candidates - self.exploration_scores = total_dist_scores - self.exploration_scores /= np.nansum(total_dist_scores) - - return self.new_samples, self.exploration_scores - - # ------------------------------------------------------------------------- - def approximate_voronoi(self, w, samples): - """ - An approximate (monte carlo) version of Matlab's voronoi command. - - Arguments - --------- - samples : array - Old experimental design to be used as center points for voronoi - cells. - - Returns - ------- - areas : array - An approximation of the voronoi cells' areas. - all_candidates: list of arrays - A list of samples in each voronoi cell. - """ - n_samples = samples.shape[0] - ndim = samples.shape[1] - - # Compute the number of random points - n_points = w * samples.shape[0] - # Generate w random points in the domain for each sample - points = self.ExpDesign.generate_samples(n_points, 'random') - self.all_candidates = points - - # Calculate the nearest sample to each point - self.areas = np.zeros((n_samples)) - self.closest_points = [np.empty((0, ndim)) for i in range(n_samples)] - - # Compute the minimum distance from all the samples of old_ED_X for - # each test point - for idx in range(n_points): - # calculate the minimum distance - distances = self._build_dist_matrix_point( - samples, points[idx], do_sqrt=True - ) - closest_sample = np.argmin(distances) - - # Add to the voronoi list of the closest sample - self.areas[closest_sample] = self.areas[closest_sample] + 1 - prev_closest_points = self.closest_points[closest_sample] - self.closest_points[closest_sample] = np.vstack( - (prev_closest_points, points[idx]) - ) - - # Divide by the amount of points to get the estimated volume of each - # voronoi cell - self.areas /= n_points - - self.perc = np.max(self.areas * 100) - - self.errors = self.areas - - return self.areas, self.all_candidates - - # ------------------------------------------------------------------------- - def _build_dist_matrix_point(self, samples, point, method='euclidean', - do_sqrt=False): - """ - Calculates the intersite distance of all points in samples from point. - - Parameters - ---------- - samples : array of shape (n_samples, n_params) - The old experimental design. - point : array - A candidate point. - method : str - Distance method. - do_sqrt : bool, optional - Whether to return distances or squared distances. The default is - `False`. - - Returns - ------- - distances : array - Distances. - - """ - distances = distance.cdist(samples, np.array([point]), method) - - # do square root? - if do_sqrt: - return distances - else: - return distances**2 - diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/glexindex.py b/examples/model-comparison/bayesvalidrox/surrogate_models/glexindex.py deleted file mode 100644 index 90877331e..000000000 --- a/examples/model-comparison/bayesvalidrox/surrogate_models/glexindex.py +++ /dev/null @@ -1,161 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Multi indices for monomial exponents. -Credit: Jonathan Feinberg -https://github.com/jonathf/numpoly/blob/master/numpoly/utils/glexindex.py -""" - -import numpy -import numpy.typing - - -def glexindex(start, stop=None, dimensions=1, cross_truncation=1., - graded=False, reverse=False): - """ - Generate graded lexicographical multi-indices for the monomial exponents. - Args: - start (Union[int, numpy.ndarray]): - The lower order of the indices. If array of int, counts as lower - bound for each axis. - stop (Union[int, numpy.ndarray, None]): - The maximum shape included. If omitted: stop <- start; start <- 0 - If int is provided, set as largest total order. If array of int, - set as upper bound for each axis. - dimensions (int): - The number of dimensions in the expansion. - cross_truncation (float, Tuple[float, float]): - Use hyperbolic cross truncation scheme to reduce the number of - terms in expansion. If two values are provided, first is low bound - truncation, while the latter upper bound. If only one value, upper - bound is assumed. - graded (bool): - Graded sorting, meaning the indices are always sorted by the index - sum. E.g. ``(2, 2, 2)`` has a sum of 6, and will therefore be - consider larger than both ``(3, 1, 1)`` and ``(1, 1, 3)``. - reverse (bool): - Reversed lexicographical sorting meaning that ``(1, 3)`` is - considered smaller than ``(3, 1)``, instead of the opposite. - Returns: - list: - Order list of indices. - Examples: - >>> numpoly.glexindex(4).tolist() - [[0], [1], [2], [3]] - >>> numpoly.glexindex(2, dimensions=2).tolist() - [[0, 0], [1, 0], [0, 1]] - >>> numpoly.glexindex(start=2, stop=3, dimensions=2).tolist() - [[2, 0], [1, 1], [0, 2]] - >>> numpoly.glexindex([1, 2, 3]).tolist() - [[0, 0, 0], [0, 1, 0], [0, 0, 1], [0, 0, 2]] - >>> numpoly.glexindex([1, 2, 3], cross_truncation=numpy.inf).tolist() - [[0, 0, 0], [0, 1, 0], [0, 0, 1], [0, 1, 1], [0, 0, 2], [0, 1, 2]] - """ - if stop is None: - start, stop = 0, start - start = numpy.array(start, dtype=int).flatten() - stop = numpy.array(stop, dtype=int).flatten() - start, stop, _ = numpy.broadcast_arrays(start, stop, numpy.empty(dimensions)) - - cross_truncation = cross_truncation*numpy.ones(2) - - # Moved here from _glexindex - bound = stop.max() - dimensions = len(start) - start = numpy.clip(start, a_min=0, a_max=None) - dtype = numpy.uint8 if bound < 256 else numpy.uint16 - range_ = numpy.arange(bound, dtype=dtype) - indices = range_[:, numpy.newaxis] - - for idx in range(dimensions-1): - - # Truncate at each step to keep memory usage low - if idx: - indices = indices[cross_truncate(indices, bound-1, cross_truncation[1])] - - # Repeats the current set of indices. - # e.g. [0,1,2] -> [0,1,2,0,1,2,...,0,1,2] - indices = numpy.tile(indices, (bound, 1)) - - # Stretches ranges over the new dimension. - # e.g. [0,1,2] -> [0,0,...,0,1,1,...,1,2,2,...,2] - front = range_.repeat(len(indices)//bound)[:, numpy.newaxis] - - # Puts them two together. - indices = numpy.column_stack((front, indices)) - - # Complete the truncation scheme - if dimensions == 1: - indices = indices[(indices >= start) & (indices < bound)] - else: - lower = cross_truncate(indices, start-1, cross_truncation[0]) - upper = cross_truncate(indices, stop-1, cross_truncation[1]) - indices = indices[lower ^ upper] - - indices = numpy.array(indices, dtype=int).reshape(-1, dimensions) - if indices.size: - # moved here from glexsort - keys = indices.T - keys_ = numpy.atleast_2d(keys) - if reverse: - keys_ = keys_[::-1] - - indices_sort = numpy.array(numpy.lexsort(keys_)) - if graded: - indices_sort = indices_sort[numpy.argsort( - numpy.sum(keys_[:, indices_sort], axis=0))].T - - indices = indices[indices_sort] - return indices - -def cross_truncate(indices, bound, norm): - r""" - Truncate of indices using L_p norm. - .. math: - L_p(x) = \sum_i |x_i/b_i|^p ^{1/p} \leq 1 - where :math:`b_i` are bounds that each :math:`x_i` should follow. - Args: - indices (Sequence[int]): - Indices to be truncated. - bound (int, Sequence[int]): - The bound function for witch the indices can not be larger than. - norm (float, Sequence[float]): - The `p` in the `L_p`-norm. Support includes both `L_0` and `L_inf`. - Returns: - Boolean indices to ``indices`` with True for each index where the - truncation criteria holds. - Examples: - >>> indices = numpy.array(numpy.mgrid[:10, :10]).reshape(2, -1).T - >>> indices[cross_truncate(indices, 2, norm=0)].T - array([[0, 0, 0, 1, 2], - [0, 1, 2, 0, 0]]) - >>> indices[cross_truncate(indices, 2, norm=1)].T - array([[0, 0, 0, 1, 1, 2], - [0, 1, 2, 0, 1, 0]]) - >>> indices[cross_truncate(indices, [0, 1], norm=1)].T - array([[0, 0], - [0, 1]]) - """ - assert norm >= 0, "negative L_p norm not allowed" - bound = numpy.asfarray(bound).flatten()*numpy.ones(indices.shape[1]) - - if numpy.any(bound < 0): - return numpy.zeros((len(indices),), dtype=bool) - - if numpy.any(bound == 0): - out = numpy.all(indices[:, bound == 0] == 0, axis=-1) - if numpy.any(bound): - out &= cross_truncate(indices[:, bound != 0], bound[bound != 0], norm=norm) - return out - - if norm == 0: - out = numpy.sum(indices > 0, axis=-1) <= 1 - out[numpy.any(indices > bound, axis=-1)] = False - elif norm == numpy.inf: - out = numpy.max(indices/bound, axis=-1) <= 1 - else: - out = numpy.sum((indices/bound)**norm, axis=-1)**(1./norm) <= 1 - - assert numpy.all(out[numpy.all(indices == 0, axis=-1)]) - - return out diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/input_space.py b/examples/model-comparison/bayesvalidrox/surrogate_models/input_space.py deleted file mode 100644 index 4e010d66f..000000000 --- a/examples/model-comparison/bayesvalidrox/surrogate_models/input_space.py +++ /dev/null @@ -1,398 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Input space built from set prior distributions -""" - -import numpy as np -import chaospy -import scipy.stats as st - - -class InputSpace: - """ - This class generates the input space for the metamodel from the - distributions provided using the `Input` object. - - Attributes - ---------- - Input : obj - Input object containing the parameter marginals, i.e. name, - distribution type and distribution parameters or available raw data. - meta_Model_type : str - Type of the meta_Model_type. - - """ - - def __init__(self, Input, meta_Model_type='pce'): - self.InputObj = Input - self.meta_Model_type = meta_Model_type - - # Other - self.apce = None - self.ndim = None - - # Init - self.check_valid_inputs() - - - def check_valid_inputs(self)-> None: - """ - Check if the given InputObj is valid to use for further calculations: - Has some Marginals - Marginals have valid priors - All Marginals given as the same type (samples vs dist) - - Returns - ------- - None - - """ - Inputs = self.InputObj - self.ndim = len(Inputs.Marginals) - - # Check if PCE or aPCE metamodel is selected. - # TODO: test also for 'pce'?? - if self.meta_Model_type.lower() == 'apce': - self.apce = True - else: - self.apce = False - - # check if marginals given - if not self.ndim >=1: - raise AssertionError('Cannot build distributions if no marginals are given') - - # check that each marginal is valid - for marginals in Inputs.Marginals: - if len(marginals.input_data) == 0: - if marginals.dist_type == None: - raise AssertionError('Not all marginals were provided priors') - break - if np.array(marginals.input_data).shape[0] and (marginals.dist_type != None): - raise AssertionError('Both samples and distribution type are given. Please choose only one.') - break - - # Check if input is given as dist or input_data. - self.input_data_given = -1 - for marg in Inputs.Marginals: - #print(self.input_data_given) - size = np.array(marg.input_data).shape[0] - #print(f'Size: {size}') - if size and abs(self.input_data_given) !=1: - self.input_data_given = 2 - break - if (not size) and self.input_data_given > 0: - self.input_data_given = 2 - break - if not size: - self.input_data_given = 0 - if size: - self.input_data_given = 1 - - if self.input_data_given == 2: - raise AssertionError('Distributions cannot be built as the priors have different types') - - - # Get the bounds if input_data are directly defined by user: - if self.input_data_given: - for i in range(self.ndim): - low_bound = np.min(Inputs.Marginals[i].input_data) - up_bound = np.max(Inputs.Marginals[i].input_data) - Inputs.Marginals[i].parameters = [low_bound, up_bound] - - - - # ------------------------------------------------------------------------- - def init_param_space(self, max_deg=None): - """ - Initializes parameter space. - - Parameters - ---------- - max_deg : int, optional - Maximum degree. The default is `None`. - - Creates - ------- - raw_data : array of shape (n_params, n_samples) - Raw data. - bound_tuples : list of tuples - A list containing lower and upper bounds of parameters. - - """ - # Recheck all before running! - self.check_valid_inputs() - - Inputs = self.InputObj - ndim = self.ndim - rosenblatt_flag = Inputs.Rosenblatt - mc_size = 50000 - - # Save parameter names - self.par_names = [] - for parIdx in range(ndim): - self.par_names.append(Inputs.Marginals[parIdx].name) - - # Create a multivariate probability distribution - # TODO: change this to make max_deg obligatory? at least in some specific cases? - if max_deg is not None: - JDist, poly_types = self.build_polytypes(rosenblatt=rosenblatt_flag) - self.JDist, self.poly_types = JDist, poly_types - - if self.input_data_given: - self.MCSize = len(Inputs.Marginals[0].input_data) - self.raw_data = np.zeros((ndim, self.MCSize)) - - for parIdx in range(ndim): - # Save parameter names - try: - self.raw_data[parIdx] = np.array( - Inputs.Marginals[parIdx].input_data) - except: - self.raw_data[parIdx] = self.JDist[parIdx].sample(mc_size) - - else: - # Generate random samples based on parameter distributions - self.raw_data = chaospy.generate_samples(mc_size, - domain=self.JDist) - - # Extract moments - for parIdx in range(ndim): - mu = np.mean(self.raw_data[parIdx]) - std = np.std(self.raw_data[parIdx]) - self.InputObj.Marginals[parIdx].moments = [mu, std] - - # Generate the bounds based on given inputs for marginals - bound_tuples = [] - for i in range(ndim): - if Inputs.Marginals[i].dist_type == 'unif': - low_bound = Inputs.Marginals[i].parameters[0] - up_bound = Inputs.Marginals[i].parameters[1] - else: - low_bound = np.min(self.raw_data[i]) - up_bound = np.max(self.raw_data[i]) - - bound_tuples.append((low_bound, up_bound)) - - self.bound_tuples = tuple(bound_tuples) - - # ------------------------------------------------------------------------- - def build_polytypes(self, rosenblatt): - """ - Creates the polynomial types to be passed to univ_basis_vals method of - the MetaModel object. - - Parameters - ---------- - rosenblatt : bool - Rosenblatt transformation flag. - - Returns - ------- - orig_space_dist : object - A chaospy JDist object or a gaussian_kde object. - poly_types : list - List of polynomial types for the parameters. - - """ - Inputs = self.InputObj - - all_data = [] - all_dist_types = [] - orig_joints = [] - poly_types = [] - - for parIdx in range(self.ndim): - - if Inputs.Marginals[parIdx].dist_type is None: - data = Inputs.Marginals[parIdx].input_data - all_data.append(data) - dist_type = None - else: - dist_type = Inputs.Marginals[parIdx].dist_type - params = Inputs.Marginals[parIdx].parameters - - if rosenblatt: - polytype = 'hermite' - dist = chaospy.Normal() - - elif dist_type is None: - polytype = 'arbitrary' - dist = None - - elif 'unif' in dist_type.lower(): - polytype = 'legendre' - if not np.array(params).shape[0]>=2: - raise AssertionError('Distribution has too few parameters!') - dist = chaospy.Uniform(lower=params[0], upper=params[1]) - - elif 'norm' in dist_type.lower() and \ - 'log' not in dist_type.lower(): - if not np.array(params).shape[0]>=2: - raise AssertionError('Distribution has too few parameters!') - polytype = 'hermite' - dist = chaospy.Normal(mu=params[0], sigma=params[1]) - - elif 'gamma' in dist_type.lower(): - polytype = 'laguerre' - if not np.array(params).shape[0]>=3: - raise AssertionError('Distribution has too few parameters!') - dist = chaospy.Gamma(shape=params[0], - scale=params[1], - shift=params[2]) - - elif 'beta' in dist_type.lower(): - if not np.array(params).shape[0]>=4: - raise AssertionError('Distribution has too few parameters!') - polytype = 'jacobi' - dist = chaospy.Beta(alpha=params[0], beta=params[1], - lower=params[2], upper=params[3]) - - elif 'lognorm' in dist_type.lower(): - polytype = 'hermite' - if not np.array(params).shape[0]>=2: - raise AssertionError('Distribution has too few parameters!') - mu = np.log(params[0]**2/np.sqrt(params[0]**2 + params[1]**2)) - sigma = np.sqrt(np.log(1 + params[1]**2 / params[0]**2)) - dist = chaospy.LogNormal(mu, sigma) - # dist = chaospy.LogNormal(mu=params[0], sigma=params[1]) - - elif 'expon' in dist_type.lower(): - polytype = 'exponential' - if not np.array(params).shape[0]>=2: - raise AssertionError('Distribution has too few parameters!') - dist = chaospy.Exponential(scale=params[0], shift=params[1]) - - elif 'weibull' in dist_type.lower(): - polytype = 'weibull' - if not np.array(params).shape[0]>=3: - raise AssertionError('Distribution has too few parameters!') - dist = chaospy.Weibull(shape=params[0], scale=params[1], - shift=params[2]) - - else: - message = (f"DistType {dist_type} for parameter" - f"{parIdx+1} is not available.") - raise ValueError(message) - - if self.input_data_given or self.apce: - polytype = 'arbitrary' - - # Store dists and poly_types - orig_joints.append(dist) - poly_types.append(polytype) - all_dist_types.append(dist_type) - - # Prepare final output to return - if None in all_dist_types: - # Naive approach: Fit a gaussian kernel to the provided data - Data = np.asarray(all_data) - try: - orig_space_dist = st.gaussian_kde(Data) - except: - raise ValueError('The samples provided to the Marginals should be 1D only') - self.prior_space = orig_space_dist - else: - orig_space_dist = chaospy.J(*orig_joints) - try: - self.prior_space = st.gaussian_kde(orig_space_dist.sample(10000)) - except: - raise ValueError('Parameter values are not valid, please set differently') - - return orig_space_dist, poly_types - - # ------------------------------------------------------------------------- - def transform(self, X, params=None, method=None): - """ - Transforms the samples via either a Rosenblatt or an isoprobabilistic - transformation. - - Parameters - ---------- - X : array of shape (n_samples,n_params) - Samples to be transformed. - method : string - If transformation method is 'user' transform X, else just pass X. - - Returns - ------- - tr_X: array of shape (n_samples,n_params) - Transformed samples. - - """ - # Check for built JDist - if not hasattr(self, 'JDist'): - raise AttributeError('Call function init_param_space first to create JDist') - - # Check if X is 2d - if X.ndim != 2: - raise AttributeError('X should have two dimensions') - - # Check if size of X matches Marginals - if X.shape[1]!= self.ndim: - raise AttributeError('The second dimension of X should be the same size as the number of marginals in the InputObj') - - if self.InputObj.Rosenblatt: - self.origJDist, _ = self.build_polytypes(False) - if method == 'user': - tr_X = self.JDist.inv(self.origJDist.fwd(X.T)).T - else: - # Inverse to original spcace -- generate sample ED - tr_X = self.origJDist.inv(self.JDist.fwd(X.T)).T - else: - # Transform samples via an isoprobabilistic transformation - n_samples, n_params = X.shape - Inputs = self.InputObj - origJDist = self.JDist - poly_types = self.poly_types - - disttypes = [] - for par_i in range(n_params): - disttypes.append(Inputs.Marginals[par_i].dist_type) - - # Pass non-transformed X, if arbitrary PCE is selected. - if None in disttypes or self.input_data_given or self.apce: - return X - - cdfx = np.zeros((X.shape)) - tr_X = np.zeros((X.shape)) - - for par_i in range(n_params): - - # Extract the parameters of the original space - disttype = disttypes[par_i] - if disttype is not None: - dist = origJDist[par_i] - else: - dist = None - polytype = poly_types[par_i] - cdf = np.vectorize(lambda x: dist.cdf(x)) - - # Extract the parameters of the transformation space based on - # polyType - if polytype == 'legendre' or disttype == 'uniform': - # Generate Y_Dists based - params_Y = [-1, 1] - dist_Y = st.uniform(loc=params_Y[0], - scale=params_Y[1]-params_Y[0]) - inv_cdf = np.vectorize(lambda x: dist_Y.ppf(x)) - - elif polytype == 'hermite' or disttype == 'norm': - params_Y = [0, 1] - dist_Y = st.norm(loc=params_Y[0], scale=params_Y[1]) - inv_cdf = np.vectorize(lambda x: dist_Y.ppf(x)) - - elif polytype == 'laguerre' or disttype == 'gamma': - if params == None: - raise AttributeError('Additional parameters have to be set for the gamma distribution!') - params_Y = [1, params[1]] - dist_Y = st.gamma(loc=params_Y[0], scale=params_Y[1]) - inv_cdf = np.vectorize(lambda x: dist_Y.ppf(x)) - - # Compute CDF_x(X) - cdfx[:, par_i] = cdf(X[:, par_i]) - - # Compute invCDF_y(cdfx) - tr_X[:, par_i] = inv_cdf(cdfx[:, par_i]) - - return tr_X diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/inputs.py b/examples/model-comparison/bayesvalidrox/surrogate_models/inputs.py deleted file mode 100644 index 094e1066f..000000000 --- a/examples/model-comparison/bayesvalidrox/surrogate_models/inputs.py +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Inputs and related marginal distributions -""" - -class Input: - """ - A class to define the uncertain input parameters. - - Attributes - ---------- - Marginals : obj - Marginal objects. See `inputs.Marginal`. - Rosenblatt : bool - If Rossenblatt transformation is required for the dependent input - parameters. - - Examples - ------- - Marginals can be defined as following: - - >>> Inputs.add_marginals() - >>> Inputs.Marginals[0].name = 'X_1' - >>> Inputs.Marginals[0].dist_type = 'uniform' - >>> Inputs.Marginals[0].parameters = [-5, 5] - - If there is no common data is avaliable, the input data can be given - as following: - - >>> Inputs.add_marginals() - >>> Inputs.Marginals[0].name = 'X_1' - >>> Inputs.Marginals[0].input_data = input_data - """ - poly_coeffs_flag = True - - def __init__(self): - self.Marginals = [] - self.Rosenblatt = False - - def add_marginals(self): - """ - Adds a new Marginal object to the input object. - - Returns - ------- - None. - - """ - self.Marginals.append(Marginal()) - - -# Nested class -class Marginal: - """ - An object containing the specifications of the marginals for each uncertain - parameter. - - Attributes - ---------- - name : string - Name of the parameter. The default is `'$x_1$'`. - dist_type : string - Name of the distribution. The default is `None`. - parameters : list - List of the parameters corresponding to the distribution type. The - default is `None`. - input_data : array - Available input data. The default is `[]`. - moments : list - List of the moments. - """ - - def __init__(self): - self.name = '$x_1$' - self.dist_type = None - self.parameters = None - self.input_data = [] - self.moments = None diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/orthogonal_matching_pursuit.py b/examples/model-comparison/bayesvalidrox/surrogate_models/orthogonal_matching_pursuit.py deleted file mode 100644 index 96ef9c1d5..000000000 --- a/examples/model-comparison/bayesvalidrox/surrogate_models/orthogonal_matching_pursuit.py +++ /dev/null @@ -1,366 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Created on Fri Jul 15 14:08:59 2022 - -@author: farid -""" -import numpy as np -from sklearn.base import RegressorMixin -from sklearn.linear_model._base import LinearModel -from sklearn.utils import check_X_y - - -def corr(x, y): - return abs(x.dot(y))/np.sqrt((x**2).sum()) - - -class OrthogonalMatchingPursuit(LinearModel, RegressorMixin): - ''' - Regression with Orthogonal Matching Pursuit [1]. - - Parameters - ---------- - fit_intercept : boolean, optional (DEFAULT = True) - whether to calculate the intercept for this model. If set - to false, no intercept will be used in calculations - (e.g. data is expected to be already centered). - - copy_X : boolean, optional (DEFAULT = True) - If True, X will be copied; else, it may be overwritten. - - verbose : boolean, optional (DEFAULT = FALSE) - Verbose mode when fitting the model - - Attributes - ---------- - coef_ : array, shape = (n_features) - Coefficients of the regression model (mean of posterior distribution) - - active_ : array, dtype = np.bool, shape = (n_features) - True for non-zero coefficients, False otherwise - - References - ---------- - [1] Pati, Y., Rezaiifar, R., Krishnaprasad, P. (1993). Orthogonal matching - pursuit: recursive function approximation with application to wavelet - decomposition. Proceedings of 27th Asilomar Conference on Signals, - Systems and Computers, 40-44. - ''' - - def __init__(self, fit_intercept=True, normalize=False, copy_X=True, - verbose=False): - self.fit_intercept = fit_intercept - self.normalize = normalize - self.copy_X = copy_X - self.verbose = verbose - - def _preprocess_data(self, X, y): - """Center and scale data. - Centers data to have mean zero along axis 0. If fit_intercept=False or - if the X is a sparse matrix, no centering is done, but normalization - can still be applied. The function returns the statistics necessary to - reconstruct the input data, which are X_offset, y_offset, X_scale, such - that the output - X = (X - X_offset) / X_scale - X_scale is the L2 norm of X - X_offset. - """ - - if self.copy_X: - X = X.copy(order='K') - - y = np.asarray(y, dtype=X.dtype) - - if self.fit_intercept: - X_offset = np.average(X, axis=0) - X -= X_offset - if self.normalize: - X_scale = np.ones(X.shape[1], dtype=X.dtype) - std = np.sqrt(np.sum(X**2, axis=0)/(len(X)-1)) - X_scale[std != 0] = std[std != 0] - X /= X_scale - else: - X_scale = np.ones(X.shape[1], dtype=X.dtype) - y_offset = np.mean(y) - y = y - y_offset - else: - X_offset = np.zeros(X.shape[1], dtype=X.dtype) - X_scale = np.ones(X.shape[1], dtype=X.dtype) - if y.ndim == 1: - y_offset = X.dtype.type(0) - else: - y_offset = np.zeros(y.shape[1], dtype=X.dtype) - - return X, y, X_offset, y_offset, X_scale - - def fit(self, X, y): - ''' - Fits Regression with Orthogonal Matching Pursuit Algorithm. - - Parameters - ----------- - X: {array-like, sparse matrix} of size (n_samples, n_features) - Training data, matrix of explanatory variables - - y: array-like of size [n_samples, n_features] - Target values - - Returns - ------- - self : object - Returns self. - ''' - X, y = check_X_y(X, y, dtype=np.float64, y_numeric=True) - n_samples, n_features = X.shape - - X, y, X_mean, y_mean, X_std = self._preprocess_data(X, y) - self._x_mean_ = X_mean - self._y_mean = y_mean - self._x_std = X_std - - # Normalize columns of Psi, so that each column has norm = 1 - norm_X = np.linalg.norm(X, axis=0) - X_norm = X/norm_X - - # Initialize residual vector to full model response and normalize - R = y - norm_y = np.sqrt(np.dot(y, y)) - r = y/norm_y - - # Check for constant regressors - const_indices = np.where(~np.diff(X, axis=0).any(axis=0))[0] - bool_const = not const_indices - - # Start regression using OPM algorithm - precision = 0 # Set precision criterion to precision of program - early_stop = True - cond_early = True # Initialize condition for early stop - ind = [] - iindx = [] # index of selected columns - indtot = np.arange(n_features) # Full index set for remaining columns - kmax = min(n_samples, n_features) # Maximum number of iterations - LOO = np.PINF * np.ones(kmax) # Store LOO error at each iteration - LOOmin = np.PINF # Initialize minimum value of LOO - coeff = np.zeros((n_features, kmax)) - count = 0 - k = 0.1 # Percentage of iteration history for early stop - - # Begin iteration over regressors set (Matrix X) - while (np.linalg.norm(R) > precision) and (count <= kmax-1) and \ - ((cond_early or early_stop) ^ ~cond_early): - - # Update index set of columns yet to select - if count != 0: - indtot = np.delete(indtot, iindx) - - # Find column of X that is most correlated with residual - h = abs(np.dot(r, X_norm)) - iindx = np.argmax(h[indtot]) - indx = indtot[iindx] - - # initialize with the constant regressor, if it exists in the basis - if (count == 0) and bool_const: - # overwrite values for iindx and indx - iindx = const_indices[0] - indx = indtot[iindx] - - # Invert the information matrix at the first iteration, later only - # update its value on the basis of the previously inverted one, - if count == 0: - M = 1 / np.dot(X[:, indx], X[:, indx]) - else: - x = np.dot(X[:, ind].T, X[:, indx]) - r = np.dot(X[:, indx], X[:, indx]) - M = self.blockwise_inverse(M, x, x.T, r) - - # Add newly found index to the selected indexes set - ind.append(indx) - - # Select regressors subset (Projection subspace) - Xpro = X[:, ind] - - # Obtain coefficient by performing OLS - TT = np.dot(y, Xpro) - beta = np.dot(M, TT) - coeff[ind, count] = beta - - # Compute LOO error - LOO[count] = self.loo_error(Xpro, M, y, beta) - - # Compute new residual due to new projection - R = y - np.dot(Xpro, beta) - - # Normalize residual - norm_R = np.sqrt(np.dot(R, R)) - r = R / norm_R - - # Update counters and early-stop criterions - countinf = max(0, int(count-k*kmax)) - LOOmin = min(LOOmin, LOO[count]) - - if count == 0: - cond_early = (LOO[0] <= LOOmin) - else: - cond_early = (min(LOO[countinf:count+1]) <= LOOmin) - - if self.verbose: - print(f'Iteration: {count+1}, mod. LOOCV error : ' - f'{LOO[count]:.2e}') - - # Update counter - count += 1 - - # Select projection with smallest cross-validation error - countmin = np.argmin(LOO[:-1]) - self.coef_ = coeff[:, countmin] - self.active = coeff[:, countmin] != 0.0 - - # set intercept_ - if self.fit_intercept: - self.coef_ = self.coef_ / X_std - self.intercept_ = y_mean - np.dot(X_mean, self.coef_.T) - else: - self.intercept_ = 0. - - return self - - def predict(self, X): - ''' - Computes predictive distribution for test set. - - Parameters - ----------- - X: {array-like, sparse} (n_samples_test, n_features) - Test data, matrix of explanatory variables - - Returns - ------- - y_hat: numpy array of size (n_samples_test,) - Estimated values of targets on test set (i.e. mean of - predictive distribution) - ''' - - y_hat = np.dot(X, self.coef_) + self.intercept_ - - return y_hat - - def loo_error(self, psi, inv_inf_matrix, y, coeffs): - """ - Calculates the corrected LOO error for regression on regressor - matrix `psi` that generated the coefficients based on [1] and [2]. - - [1] Blatman, G., 2009. Adaptive sparse polynomial chaos expansions for - uncertainty propagation and sensitivity analysis (Doctoral - dissertation, Clermont-Ferrand 2). - - [2] Blatman, G. and Sudret, B., 2011. Adaptive sparse polynomial chaos - expansion based on least angle regression. Journal of computational - Physics, 230(6), pp.2345-2367. - - Parameters - ---------- - psi : array of shape (n_samples, n_feature) - Orthogonal bases evaluated at the samples. - inv_inf_matrix : array - Inverse of the information matrix. - y : array of shape (n_samples, ) - Targets. - coeffs : array - Computed regresssor cofficients. - - Returns - ------- - loo_error : float - Modified LOOCV error. - - """ - - # NrEvaluation (Size of experimental design) - N, P = psi.shape - - # h factor (the full matrix is not calculated explicitly, - # only the trace is, to save memory) - PsiM = np.dot(psi, inv_inf_matrix) - - h = np.sum(np.multiply(PsiM, psi), axis=1, dtype=np.longdouble) - - # ------ Calculate Error Loocv for each measurement point ---- - # Residuals - residual = np.dot(psi, coeffs) - y - - # Variance - varY = np.var(y) - - if varY == 0: - norm_emp_error = 0 - loo_error = 0 - else: - norm_emp_error = np.mean(residual**2)/varY - - loo_error = np.mean(np.square(residual / (1-h))) / varY - - # if there are NaNs, just return an infinite LOO error (this - # happens, e.g., when a strongly underdetermined problem is solved) - if np.isnan(loo_error): - loo_error = np.inf - - # Corrected Error for over-determined system - tr_M = np.trace(np.atleast_2d(inv_inf_matrix)) - if tr_M < 0 or abs(tr_M) > 1e6: - tr_M = np.trace(np.linalg.pinv(np.dot(psi.T, psi))) - - # Over-determined system of Equation - if N > P: - T_factor = N/(N-P) * (1 + tr_M) - - # Under-determined system of Equation - else: - T_factor = np.inf - - loo_error *= T_factor - - return loo_error - - def blockwise_inverse(self, Ainv, B, C, D): - """ - non-singular square matrix M defined as M = [[A B]; [C D]] . - B, C and D can have any dimension, provided their combination defines - a square matrix M. - - Parameters - ---------- - Ainv : float or array - inverse of the square-submatrix A. - B : float or array - Information matrix with all new regressor. - C : float or array - Transpose of B. - D : float or array - Information matrix with all selected regressors. - - Returns - ------- - M : array - Inverse of the information matrix. - - """ - if np.isscalar(D): - # Inverse of D - Dinv = 1/D - # Schur complement - SCinv = 1/(D - np.dot(C, np.dot(Ainv, B[:, None])))[0] - else: - # Inverse of D - Dinv = np.linalg.solve(D, np.eye(D.shape)) - # Schur complement - SCinv = np.linalg.solve((D - C*Ainv*B), np.eye(D.shape)) - - T1 = np.dot(Ainv, np.dot(B[:, None], SCinv)) - T2 = np.dot(C, Ainv) - - # Assemble the inverse matrix - M = np.vstack(( - np.hstack((Ainv+T1*T2, -T1)), - np.hstack((-(SCinv)*T2, SCinv)) - )) - return M diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/reg_fast_ard.py b/examples/model-comparison/bayesvalidrox/surrogate_models/reg_fast_ard.py deleted file mode 100644 index e6883a3ed..000000000 --- a/examples/model-comparison/bayesvalidrox/surrogate_models/reg_fast_ard.py +++ /dev/null @@ -1,475 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Created on Tue Mar 24 19:41:45 2020 - -@author: farid -""" -import numpy as np -from scipy.linalg import solve_triangular -from numpy.linalg import LinAlgError -from sklearn.base import RegressorMixin -from sklearn.linear_model._base import LinearModel -import warnings -from sklearn.utils import check_X_y -from scipy.linalg import pinvh - - -def update_precisions(Q,S,q,s,A,active,tol,n_samples,clf_bias): - ''' - Selects one feature to be added/recomputed/deleted to model based on - effect it will have on value of log marginal likelihood. - ''' - # initialise vector holding changes in log marginal likelihood - deltaL = np.zeros(Q.shape[0]) - - # identify features that can be added , recomputed and deleted in model - theta = q**2 - s - add = (theta > 0) * (active == False) - recompute = (theta > 0) * (active == True) - delete = ~(add + recompute) - - # compute sparsity & quality parameters corresponding to features in - # three groups identified above - Qadd,Sadd = Q[add], S[add] - Qrec,Srec,Arec = Q[recompute], S[recompute], A[recompute] - Qdel,Sdel,Adel = Q[delete], S[delete], A[delete] - - # compute new alpha's (precision parameters) for features that are - # currently in model and will be recomputed - Anew = s[recompute]**2/ ( theta[recompute] + np.finfo(np.float32).eps) - delta_alpha = (1./Anew - 1./Arec) - - # compute change in log marginal likelihood - deltaL[add] = ( Qadd**2 - Sadd ) / Sadd + np.log(Sadd/Qadd**2 ) - deltaL[recompute] = Qrec**2 / (Srec + 1. / delta_alpha) - np.log(1 + Srec*delta_alpha) - deltaL[delete] = Qdel**2 / (Sdel - Adel) - np.log(1 - Sdel / Adel) - deltaL = deltaL / n_samples - - # find feature which caused largest change in likelihood - feature_index = np.argmax(deltaL) - - # no deletions or additions - same_features = np.sum( theta[~recompute] > 0) == 0 - - # changes in precision for features already in model is below threshold - no_delta = np.sum( abs( Anew - Arec ) > tol ) == 0 - # if same_features: print(abs( Anew - Arec )) - # print("same_features = {} no_delta = {}".format(same_features,no_delta)) - # check convergence: if no features to add or delete and small change in - # precision for current features then terminate - converged = False - if same_features and no_delta: - converged = True - return [A,converged] - - # if not converged update precision parameter of weights and return - if theta[feature_index] > 0: - A[feature_index] = s[feature_index]**2 / theta[feature_index] - if active[feature_index] == False: - active[feature_index] = True - else: - # at least two active features - if active[feature_index] == True and np.sum(active) >= 2: - # do not remove bias term in classification - # (in regression it is factored in through centering) - if not (feature_index == 0 and clf_bias): - active[feature_index] = False - A[feature_index] = np.PINF - - return [A,converged] - - -class RegressionFastARD(LinearModel, RegressorMixin): - ''' - Regression with Automatic Relevance Determination (Fast Version uses - Sparse Bayesian Learning) - https://github.com/AmazaspShumik/sklearn-bayes/blob/master/skbayes/rvm_ard_models/fast_rvm.py - - Parameters - ---------- - n_iter: int, optional (DEFAULT = 100) - Maximum number of iterations - - start: list, optional (DEFAULT = None) - Initial selected features. - - tol: float, optional (DEFAULT = 1e-3) - If absolute change in precision parameter for weights is below threshold - algorithm terminates. - - fit_intercept : boolean, optional (DEFAULT = True) - whether to calculate the intercept for this model. If set - to false, no intercept will be used in calculations - (e.g. data is expected to be already centered). - - copy_X : boolean, optional (DEFAULT = True) - If True, X will be copied; else, it may be overwritten. - - compute_score : bool, default=False - If True, compute the log marginal likelihood at each iteration of the - optimization. - - verbose : boolean, optional (DEFAULT = FALSE) - Verbose mode when fitting the model - - Attributes - ---------- - coef_ : array, shape = (n_features) - Coefficients of the regression model (mean of posterior distribution) - - alpha_ : float - estimated precision of the noise - - active_ : array, dtype = np.bool, shape = (n_features) - True for non-zero coefficients, False otherwise - - lambda_ : array, shape = (n_features) - estimated precisions of the coefficients - - sigma_ : array, shape = (n_features, n_features) - estimated covariance matrix of the weights, computed only - for non-zero coefficients - - scores_ : array-like of shape (n_iter_+1,) - If computed_score is True, value of the log marginal likelihood (to be - maximized) at each iteration of the optimization. - - References - ---------- - [1] Fast marginal likelihood maximisation for sparse Bayesian models - (Tipping & Faul 2003) (http://www.miketipping.com/papers/met-fastsbl.pdf) - [2] Analysis of sparse Bayesian learning (Tipping & Faul 2001) - (http://www.miketipping.com/abstracts.htm#Faul:NIPS01) - ''' - - def __init__(self, n_iter=300, start=None, tol=1e-3, fit_intercept=True, - normalize=False, copy_X=True, compute_score=False, verbose=False): - self.n_iter = n_iter - self.start = start - self.tol = tol - self.scores_ = list() - self.fit_intercept = fit_intercept - self.normalize = normalize - self.copy_X = copy_X - self.compute_score = compute_score - self.verbose = verbose - - def _preprocess_data(self, X, y): - """Center and scale data. - Centers data to have mean zero along axis 0. If fit_intercept=False or - if the X is a sparse matrix, no centering is done, but normalization - can still be applied. The function returns the statistics necessary to - reconstruct the input data, which are X_offset, y_offset, X_scale, such - that the output - X = (X - X_offset) / X_scale - X_scale is the L2 norm of X - X_offset. - """ - - if self.copy_X: - X = X.copy(order='K') - - y = np.asarray(y, dtype=X.dtype) - - if self.fit_intercept: - X_offset = np.average(X, axis=0) - X -= X_offset - if self.normalize: - X_scale = np.ones(X.shape[1], dtype=X.dtype) - std = np.sqrt(np.sum(X**2, axis=0)/(len(X)-1)) - X_scale[std != 0] = std[std != 0] - X /= X_scale - else: - X_scale = np.ones(X.shape[1], dtype=X.dtype) - y_offset = np.mean(y) - y = y - y_offset - else: - X_offset = np.zeros(X.shape[1], dtype=X.dtype) - X_scale = np.ones(X.shape[1], dtype=X.dtype) - if y.ndim == 1: - y_offset = X.dtype.type(0) - else: - y_offset = np.zeros(y.shape[1], dtype=X.dtype) - - return X, y, X_offset, y_offset, X_scale - - def fit(self, X, y): - ''' - Fits ARD Regression with Sequential Sparse Bayes Algorithm. - - Parameters - ----------- - X: {array-like, sparse matrix} of size (n_samples, n_features) - Training data, matrix of explanatory variables - - y: array-like of size [n_samples, n_features] - Target values - - Returns - ------- - self : object - Returns self. - ''' - X, y = check_X_y(X, y, dtype=np.float64, y_numeric=True) - n_samples, n_features = X.shape - - X, y, X_mean, y_mean, X_std = self._preprocess_data(X, y) - self._x_mean_ = X_mean - self._y_mean = y_mean - self._x_std = X_std - - # precompute X'*Y , X'*X for faster iterations & allocate memory for - # sparsity & quality vectors - XY = np.dot(X.T, y) - XX = np.dot(X.T, X) - XXd = np.diag(XX) - - # initialise precision of noise & and coefficients - var_y = np.var(y) - - # check that variance is non zero !!! - if var_y == 0: - beta = 1e-2 - self.var_y = True - else: - beta = 1. / np.var(y) - self.var_y = False - - A = np.PINF * np.ones(n_features) - active = np.zeros(n_features, dtype=np.bool) - - if self.start is not None and not hasattr(self, 'active_'): - start = self.start - # start from a given start basis vector - proj = XY**2 / XXd - active[start] = True - A[start] = XXd[start]/(proj[start] - var_y) - - else: - # in case of almost perfect multicollinearity between some features - # start from feature 0 - if np.sum(XXd - X_mean**2 < np.finfo(np.float32).eps) > 0: - A[0] = np.finfo(np.float16).eps - active[0] = True - - else: - # start from a single basis vector with largest projection on - # targets - proj = XY**2 / XXd - start = np.argmax(proj) - active[start] = True - A[start] = XXd[start]/(proj[start] - var_y + - np.finfo(np.float32).eps) - - warning_flag = 0 - scores_ = [] - for i in range(self.n_iter): - # Handle variance zero - if self.var_y: - A[0] = y_mean - active[0] = True - converged = True - break - - XXa = XX[active, :][:, active] - XYa = XY[active] - Aa = A[active] - - # mean & covariance of posterior distribution - Mn, Ri, cholesky = self._posterior_dist(Aa, beta, XXa, XYa) - if cholesky: - Sdiag = np.sum(Ri**2, 0) - else: - Sdiag = np.copy(np.diag(Ri)) - warning_flag += 1 - - # raise warning in case cholesky fails - if warning_flag == 1: - warnings.warn(("Cholesky decomposition failed! Algorithm uses " - "pinvh, which is significantly slower. If you " - "use RVR it is advised to change parameters of " - "the kernel!")) - - # compute quality & sparsity parameters - s, q, S, Q = self._sparsity_quality(XX, XXd, XY, XYa, Aa, Ri, - active, beta, cholesky) - - # update precision parameter for noise distribution - rss = np.sum((y - np.dot(X[:, active], Mn))**2) - - # if near perfect fit , then terminate - if (rss / n_samples/var_y) < self.tol: - warnings.warn('Early termination due to near perfect fit') - converged = True - break - beta = n_samples - np.sum(active) + np.sum(Aa * Sdiag) - beta /= rss - # beta /= (rss + np.finfo(np.float32).eps) - - # update precision parameters of coefficients - A, converged = update_precisions(Q, S, q, s, A, active, self.tol, - n_samples, False) - - if self.compute_score: - scores_.append(self.log_marginal_like(XXa, XYa, Aa, beta)) - - if self.verbose: - print(('Iteration: {0}, number of features ' - 'in the model: {1}').format(i, np.sum(active))) - - if converged or i == self.n_iter - 1: - if converged and self.verbose: - print('Algorithm converged!') - break - - # after last update of alpha & beta update parameters - # of posterior distribution - XXa, XYa, Aa = XX[active, :][:, active], XY[active], A[active] - Mn, Sn, cholesky = self._posterior_dist(Aa, beta, XXa, XYa, True) - self.coef_ = np.zeros(n_features) - self.coef_[active] = Mn - self.sigma_ = Sn - self.active_ = active - self.lambda_ = A - self.alpha_ = beta - self.converged = converged - if self.compute_score: - self.scores_ = np.array(scores_) - - # set intercept_ - if self.fit_intercept: - self.coef_ = self.coef_ / X_std - self.intercept_ = y_mean - np.dot(X_mean, self.coef_.T) - else: - self.intercept_ = 0. - return self - - def log_marginal_like(self, XXa, XYa, Aa, beta): - """Computes the log of the marginal likelihood.""" - N, M = XXa.shape - A = np.diag(Aa) - - Mn, sigma_, cholesky = self._posterior_dist(Aa, beta, XXa, XYa, - full_covar=True) - - C = sigma_ + np.dot(np.dot(XXa.T, np.linalg.pinv(A)), XXa) - - score = np.dot(np.dot(XYa.T, np.linalg.pinv(C)), XYa) +\ - np.log(np.linalg.det(C)) + N * np.log(2 * np.pi) - - return -0.5 * score - - def predict(self, X, return_std=False): - ''' - Computes predictive distribution for test set. - Predictive distribution for each data point is one dimensional - Gaussian and therefore is characterised by mean and variance based on - Ref.[1] Section 3.3.2. - - Parameters - ----------- - X: {array-like, sparse} (n_samples_test, n_features) - Test data, matrix of explanatory variables - - Returns - ------- - : list of length two [y_hat, var_hat] - - y_hat: numpy array of size (n_samples_test,) - Estimated values of targets on test set (i.e. mean of - predictive distribution) - - var_hat: numpy array of size (n_samples_test,) - Variance of predictive distribution - References - ---------- - [1] Bishop, C. M. (2006). Pattern recognition and machine learning. - springer. - ''' - - y_hat = np.dot(X, self.coef_) + self.intercept_ - - if return_std: - # Handle the zero variance case - if self.var_y: - return y_hat, np.zeros_like(y_hat) - - if self.normalize: - X -= self._x_mean_[self.active_] - X /= self._x_std[self.active_] - var_hat = 1./self.alpha_ - var_hat += np.sum(X.dot(self.sigma_) * X, axis=1) - std_hat = np.sqrt(var_hat) - return y_hat, std_hat - else: - return y_hat - - def _posterior_dist(self, A, beta, XX, XY, full_covar=False): - ''' - Calculates mean and covariance matrix of posterior distribution - of coefficients. - ''' - # compute precision matrix for active features - Sinv = beta * XX - np.fill_diagonal(Sinv, np.diag(Sinv) + A) - cholesky = True - - # try cholesky, if it fails go back to pinvh - try: - # find posterior mean : R*R.T*mean = beta*X.T*Y - # solve(R*z = beta*X.T*Y) =>find z=> solve(R.T*mean = z)=>find mean - R = np.linalg.cholesky(Sinv) - Z = solve_triangular(R, beta*XY, check_finite=True, lower=True) - Mn = solve_triangular(R.T, Z, check_finite=True, lower=False) - - # invert lower triangular matrix from cholesky decomposition - Ri = solve_triangular(R, np.eye(A.shape[0]), check_finite=False, - lower=True) - if full_covar: - Sn = np.dot(Ri.T, Ri) - return Mn, Sn, cholesky - else: - return Mn, Ri, cholesky - except LinAlgError: - cholesky = False - Sn = pinvh(Sinv) - Mn = beta*np.dot(Sinv, XY) - return Mn, Sn, cholesky - - def _sparsity_quality(self, XX, XXd, XY, XYa, Aa, Ri, active, beta, cholesky): - ''' - Calculates sparsity and quality parameters for each feature - - Theoretical Note: - ----------------- - Here we used Woodbury Identity for inverting covariance matrix - of target distribution - C = 1/beta + 1/alpha * X' * X - C^-1 = beta - beta^2 * X * Sn * X' - ''' - bxy = beta*XY - bxx = beta*XXd - if cholesky: - # here Ri is inverse of lower triangular matrix obtained from - # cholesky decomp - xxr = np.dot(XX[:, active], Ri.T) - rxy = np.dot(Ri, XYa) - S = bxx - beta**2 * np.sum(xxr**2, axis=1) - Q = bxy - beta**2 * np.dot(xxr, rxy) - else: - # here Ri is covariance matrix - XXa = XX[:, active] - XS = np.dot(XXa, Ri) - S = bxx - beta**2 * np.sum(XS*XXa, 1) - Q = bxy - beta**2 * np.dot(XS, XYa) - # Use following: - # (EQ 1) q = A*Q/(A - S) ; s = A*S/(A-S) - # so if A = np.PINF q = Q, s = S - qi = np.copy(Q) - si = np.copy(S) - # If A is not np.PINF, then it should be 'active' feature => use (EQ 1) - Qa, Sa = Q[active], S[active] - qi[active] = Aa * Qa / (Aa - Sa) - si[active] = Aa * Sa / (Aa - Sa) - - return [si, qi, S, Q] diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/reg_fast_laplace.py b/examples/model-comparison/bayesvalidrox/surrogate_models/reg_fast_laplace.py deleted file mode 100644 index 7fdcb5cf6..000000000 --- a/examples/model-comparison/bayesvalidrox/surrogate_models/reg_fast_laplace.py +++ /dev/null @@ -1,452 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -import numpy as np -from sklearn.utils import as_float_array -from sklearn.model_selection import KFold - - -class RegressionFastLaplace(): - ''' - Sparse regression with Bayesian Compressive Sensing as described in Alg. 1 - (Fast Laplace) of Ref.[1], which updated formulas from [2]. - - sigma2: noise precision (sigma^2) - nu fixed to 0 - - uqlab/lib/uq_regression/BCS/uq_bsc.m - - Parameters - ---------- - n_iter: int, optional (DEFAULT = 1000) - Maximum number of iterations - - tol: float, optional (DEFAULT = 1e-7) - If absolute change in precision parameter for weights is below - threshold algorithm terminates. - - fit_intercept : boolean, optional (DEFAULT = True) - whether to calculate the intercept for this model. If set - to false, no intercept will be used in calculations - (e.g. data is expected to be already centered). - - copy_X : boolean, optional (DEFAULT = True) - If True, X will be copied; else, it may be overwritten. - - verbose : boolean, optional (DEFAULT = FALSE) - Verbose mode when fitting the model - - Attributes - ---------- - coef_ : array, shape = (n_features) - Coefficients of the regression model (mean of posterior distribution) - - alpha_ : float - estimated precision of the noise - - active_ : array, dtype = np.bool, shape = (n_features) - True for non-zero coefficients, False otherwise - - lambda_ : array, shape = (n_features) - estimated precisions of the coefficients - - sigma_ : array, shape = (n_features, n_features) - estimated covariance matrix of the weights, computed only - for non-zero coefficients - - References - ---------- - [1] Babacan, S. D., Molina, R., & Katsaggelos, A. K. (2009). Bayesian - compressive sensing using Laplace priors. IEEE Transactions on image - processing, 19(1), 53-63. - [2] Fast marginal likelihood maximisation for sparse Bayesian models - (Tipping & Faul 2003). - (http://www.miketipping.com/papers/met-fastsbl.pdf) - ''' - - def __init__(self, n_iter=1000, n_Kfold=10, tol=1e-7, fit_intercept=False, - bias_term=True, copy_X=True, verbose=False): - self.n_iter = n_iter - self.n_Kfold = n_Kfold - self.tol = tol - self.fit_intercept = fit_intercept - self.bias_term = bias_term - self.copy_X = copy_X - self.verbose = verbose - - def _center_data(self, X, y): - ''' Centers data''' - X = as_float_array(X, copy = self.copy_X) - - # normalisation should be done in preprocessing! - X_std = np.ones(X.shape[1], dtype=X.dtype) - if self.fit_intercept: - X_mean = np.average(X, axis=0) - y_mean = np.average(y, axis=0) - X -= X_mean - y -= y_mean - else: - X_mean = np.zeros(X.shape[1], dtype=X.dtype) - y_mean = 0. if y.ndim == 1 else np.zeros(y.shape[1], dtype=X.dtype) - return X, y, X_mean, y_mean, X_std - - def fit(self, X, y): - - k_fold = KFold(n_splits=self.n_Kfold) - - varY = np.var(y, ddof=1) if np.var(y, ddof=1) != 0 else 1.0 - sigma2s = len(y)*varY*(10**np.linspace(-16, -1, self.n_Kfold)) - - errors = np.zeros((len(sigma2s), self.n_Kfold)) - for s, sigma2 in enumerate(sigma2s): - for k, (train, test) in enumerate(k_fold.split(X, y)): - self.fit_(X[train], y[train], sigma2) - errors[s, k] = np.linalg.norm( - y[test] - self.predict(X[test]) - )**2/len(test) - - KfCVerror = np.sum(errors, axis=1)/self.n_Kfold/varY - i_minCV = np.argmin(KfCVerror) - - self.kfoldCVerror = np.min(KfCVerror) - - return self.fit_(X, y, sigma2s[i_minCV]) - - def fit_(self, X, y, sigma2): - - N, P = X.shape - # n_samples, n_features = X.shape - - X, y, X_mean, y_mean, X_std = self._center_data(X, y) - self._x_mean_ = X_mean - self._y_mean = y_mean - self._x_std = X_std - - # check that variance is non zero !!! - if np.var(y) == 0: - self.var_y = True - else: - self.var_y = False - beta = 1./sigma2 - - # precompute X'*Y , X'*X for faster iterations & allocate memory for - # sparsity & quality vectors X=Psi - PsiTY = np.dot(X.T, y) - PsiTPsi = np.dot(X.T, X) - XXd = np.diag(PsiTPsi) - - # initialize with constant regressor, or if that one does not exist, - # with the one that has the largest correlation with Y - ind_global_to_local = np.zeros(P, dtype=np.int32) - - # identify constant regressors - constidx = np.where(~np.diff(X, axis=0).all(axis=0))[0] - - if self.bias_term and constidx.size != 0: - ind_start = constidx[0] - ind_global_to_local[ind_start] = True - else: - # start from a single basis vector with largest projection on - # targets - proj = np.divide(np.square(PsiTY), XXd) - ind_start = np.argmax(proj) - ind_global_to_local[ind_start] = True - - num_active = 1 - active_indices = [ind_start] - deleted_indices = [] - bcs_path = [ind_start] - gamma = np.zeros(P) - # for the initial value of gamma(ind_start), use the RVM formula - # gamma = (q^2 - s) / (s^2) - # and the fact that initially s = S = beta*Psi_i'*Psi_i and q = Q = - # beta*Psi_i'*Y - gamma[ind_start] = np.square(PsiTY[ind_start]) - gamma[ind_start] -= sigma2 * PsiTPsi[ind_start, ind_start] - gamma[ind_start] /= np.square(PsiTPsi[ind_start, ind_start]) - - Sigma = 1. / (beta * PsiTPsi[ind_start, ind_start] - + 1./gamma[ind_start]) - - mu = Sigma * PsiTY[ind_start] * beta - tmp1 = beta * PsiTPsi[ind_start] - S = beta * np.diag(PsiTPsi).T - Sigma * np.square(tmp1) - Q = beta * PsiTY.T - mu*(tmp1) - - tmp2 = np.ones(P) # alternative computation for the initial s,q - q0tilde = PsiTY[ind_start] - s0tilde = PsiTPsi[ind_start, ind_start] - tmp2[ind_start] = s0tilde / (q0tilde**2) / beta - s = np.divide(S, tmp2) - q = np.divide(Q, tmp2) - Lambda = 2*(num_active - 1) / np.sum(gamma) - - Delta_L_max = [] - for i in range(self.n_iter): - # Handle variance zero - if self.var_y: - mu = np.mean(y) - break - - if self.verbose: - print(' lambda = {0:.6e}\n'.format(Lambda)) - - # Calculate the potential updated value of each gamma[i] - if Lambda == 0.0: # RVM - gamma_potential = np.multiply(( - (q**2 - s) > Lambda), - np.divide(q**2 - s, s**2) - ) - else: - a = Lambda * s**2 - b = s**2 + 2*Lambda*s - c = Lambda + s - q**2 - gamma_potential = np.multiply( - (c < 0), np.divide( - -b + np.sqrt(b**2 - 4*np.multiply(a, c)), 2*a) - ) - - l_gamma = - np.log(np.absolute(1 + np.multiply(gamma, s))) - l_gamma += np.divide(np.multiply(q**2, gamma), - (1 + np.multiply(gamma, s))) - l_gamma -= Lambda*gamma # omitted the factor 1/2 - - # Contribution of each updated gamma(i) to L(gamma) - l_gamma_potential = - np.log( - np.absolute(1 + np.multiply(gamma_potential, s)) - ) - l_gamma_potential += np.divide( - np.multiply(q**2, gamma_potential), - (1 + np.multiply(gamma_potential, s)) - ) - # omitted the factor 1/2 - l_gamma_potential -= Lambda*gamma_potential - - # Check how L(gamma) would change if we replaced gamma(i) by the - # updated gamma_potential(i), for each i separately - Delta_L_potential = l_gamma_potential - l_gamma - - # deleted indices should not be chosen again - if len(deleted_indices) != 0: - values = -np.inf * np.ones(len(deleted_indices)) - Delta_L_potential[deleted_indices] = values - - Delta_L_max.append(np.nanmax(Delta_L_potential)) - ind_L_max = np.nanargmax(Delta_L_potential) - - # in case there is only 1 regressor in the model and it would now - # be deleted - if len(active_indices) == 1 and ind_L_max == active_indices[0] \ - and gamma_potential[ind_L_max] == 0.0: - Delta_L_potential[ind_L_max] = -np.inf - Delta_L_max[i] = np.max(Delta_L_potential) - ind_L_max = np.argmax(Delta_L_potential) - - # If L did not change significantly anymore, break - if Delta_L_max[i] <= 0.0 or\ - (i > 0 and all(np.absolute(Delta_L_max[i-1:]) - < sum(Delta_L_max)*self.tol)) or \ - (i > 0 and all(np.diff(bcs_path)[i-1:] == 0.0)): - if self.verbose: - print('Increase in L: {0:.6e} (eta = {1:.3e})\ - -- break\n'.format(Delta_L_max[i], self.tol)) - break - - # Print information - if self.verbose: - print(' Delta L = {0:.6e} \n'.format(Delta_L_max[i])) - - what_changed = int(gamma[ind_L_max] == 0.0) - what_changed -= int(gamma_potential[ind_L_max] == 0.0) - - # Print information - if self.verbose: - if what_changed < 0: - print(f'{i+1} - Remove regressor #{ind_L_max+1}..\n') - elif what_changed == 0: - print(f'{i+1} - Recompute regressor #{ind_L_max+1}..\n') - else: - print(f'{i+1} - Add regressor #{ind_L_max+1}..\n') - - # --- Update all quantities ---- - if what_changed == 1: - # adding a regressor - - # update gamma - gamma[ind_L_max] = gamma_potential[ind_L_max] - - Sigma_ii = 1.0 / (1.0/gamma[ind_L_max] + S[ind_L_max]) - try: - x_i = np.matmul( - Sigma, PsiTPsi[active_indices, ind_L_max].reshape(-1, 1) - ) - except ValueError: - x_i = Sigma * PsiTPsi[active_indices, ind_L_max] - tmp_1 = - (beta * Sigma_ii) * x_i - Sigma = np.vstack( - (np.hstack(((beta**2 * Sigma_ii) * np.dot(x_i, x_i.T) - + Sigma, tmp_1)), np.append(tmp_1.T, Sigma_ii)) - ) - mu_i = Sigma_ii * Q[ind_L_max] - mu = np.vstack((mu - (beta * mu_i) * x_i, mu_i)) - - tmp2_1 = PsiTPsi[:, ind_L_max] - beta * np.squeeze( - np.matmul(PsiTPsi[:, active_indices], x_i) - ) - if i == 0: - tmp2_1[0] /= 2 - tmp2 = beta * tmp2_1.T - S = S - Sigma_ii * np.square(tmp2) - Q = Q - mu_i * tmp2 - - num_active += 1 - ind_global_to_local[ind_L_max] = num_active - active_indices.append(ind_L_max) - bcs_path.append(ind_L_max) - - elif what_changed == 0: - # recomputation - # zero if regressor has not been chosen yet - if not ind_global_to_local[ind_L_max]: - raise Exception('Cannot recompute index{0} -- not yet\ - part of the model!'.format(ind_L_max)) - Sigma = np.atleast_2d(Sigma) - mu = np.atleast_2d(mu) - gamma_i_new = gamma_potential[ind_L_max] - gamma_i_old = gamma[ind_L_max] - # update gamma - gamma[ind_L_max] = gamma_potential[ind_L_max] - - # index of regressor in Sigma - local_ind = ind_global_to_local[ind_L_max]-1 - - kappa_i = (1.0/gamma_i_new - 1.0/gamma_i_old) - kappa_i = 1.0 / kappa_i - kappa_i += Sigma[local_ind, local_ind] - kappa_i = 1 / kappa_i - Sigma_i_col = Sigma[:, local_ind] - - Sigma = Sigma - kappa_i * (Sigma_i_col * Sigma_i_col.T) - mu_i = mu[local_ind] - mu = mu - (kappa_i * mu_i) * Sigma_i_col[:, None] - - tmp1 = beta * np.dot( - Sigma_i_col.reshape(1, -1), PsiTPsi[active_indices])[0] - S = S + kappa_i * np.square(tmp1) - Q = Q + (kappa_i * mu_i) * tmp1 - - # no change in active_indices or ind_global_to_local - bcs_path.append(ind_L_max + 0.1) - - elif what_changed == -1: - gamma[ind_L_max] = 0 - - # index of regressor in Sigma - local_ind = ind_global_to_local[ind_L_max]-1 - - Sigma_ii_inv = 1. / Sigma[local_ind, local_ind] - Sigma_i_col = Sigma[:, local_ind] - - Sigma = Sigma - Sigma_ii_inv * (Sigma_i_col * Sigma_i_col.T) - - Sigma = np.delete( - np.delete(Sigma, local_ind, axis=0), local_ind, axis=1) - - mu = mu - (mu[local_ind] * Sigma_ii_inv) * Sigma_i_col[:, None] - mu = np.delete(mu, local_ind, axis=0) - - tmp1 = beta * np.dot(Sigma_i_col, PsiTPsi[active_indices]) - S = S + Sigma_ii_inv * np.square(tmp1) - Q = Q + (mu_i * Sigma_ii_inv) * tmp1 - - num_active -= 1 - ind_global_to_local[ind_L_max] = 0.0 - v = ind_global_to_local[ind_global_to_local > local_ind] - 1 - ind_global_to_local[ind_global_to_local > local_ind] = v - del active_indices[local_ind] - deleted_indices.append(ind_L_max) - # and therefore ineligible - bcs_path.append(-ind_L_max) - - # same for all three cases - tmp3 = 1 - np.multiply(gamma, S) - s = np.divide(S, tmp3) - q = np.divide(Q, tmp3) - - # Update lambda - Lambda = 2*(num_active - 1) / np.sum(gamma) - - # Prepare the result object - self.coef_ = np.zeros(P) - self.coef_[active_indices] = np.squeeze(mu) - self.sigma_ = Sigma - self.active_ = active_indices - self.gamma = gamma - self.Lambda = Lambda - self.beta = beta - self.bcs_path = bcs_path - - # set intercept_ - if self.fit_intercept: - self.coef_ = self.coef_ / X_std - self.intercept_ = y_mean - np.dot(X_mean, self.coef_.T) - else: - self.intercept_ = 0. - - return self - - def predict(self, X, return_std=False): - ''' - Computes predictive distribution for test set. - Predictive distribution for each data point is one dimensional - Gaussian and therefore is characterised by mean and variance based on - Ref.[1] Section 3.3.2. - - Parameters - ----------- - X: {array-like, sparse} (n_samples_test, n_features) - Test data, matrix of explanatory variables - - Returns - ------- - : list of length two [y_hat, var_hat] - - y_hat: numpy array of size (n_samples_test,) - Estimated values of targets on test set (i.e. mean of - predictive distribution) - - var_hat: numpy array of size (n_samples_test,) - Variance of predictive distribution - - References - ---------- - [1] Bishop, C. M. (2006). Pattern recognition and machine learning. - springer. - ''' - y_hat = np.dot(X, self.coef_) + self.intercept_ - - if return_std: - # Handle the zero variance case - if self.var_y: - return y_hat, np.zeros_like(y_hat) - - var_hat = 1./self.beta - var_hat += np.sum(X.dot(self.sigma_) * X, axis=1) - std_hat = np.sqrt(var_hat) - return y_hat, std_hat - else: - return y_hat - -# l2norm = 0.0 -# for idx in range(10): -# sigma2 = np.genfromtxt('./test/sigma2_{0}.csv'.format(idx+1), delimiter=',') -# Psi_train = np.genfromtxt('./test/Psi_train_{0}.csv'.format(idx+1), delimiter=',') -# Y_train = np.genfromtxt('./test/Y_train_{0}.csv'.format(idx+1)) -# Psi_test = np.genfromtxt('./test/Psi_test_{0}.csv'.format(idx+1), delimiter=',') -# Y_test = np.genfromtxt('./test/Y_test_{0}.csv'.format(idx+1)) - -# clf = RegressionFastLaplace(verbose=True) -# clf.fit_(Psi_train, Y_train, sigma2) -# coeffs_fold = np.genfromtxt('./test/coeffs_fold_{0}.csv'.format(idx+1)) -# print("coeffs error: {0:.4g}".format(np.linalg.norm(clf.coef_ - coeffs_fold))) -# l2norm += np.linalg.norm(Y_test - clf.predict(Psi_test))**2/len(Y_test) -# print("l2norm error: {0:.4g}".format(l2norm)) diff --git a/examples/model-comparison/bayesvalidrox/surrogate_models/surrogate_models.py b/examples/model-comparison/bayesvalidrox/surrogate_models/surrogate_models.py deleted file mode 100644 index ca902f26b..000000000 --- a/examples/model-comparison/bayesvalidrox/surrogate_models/surrogate_models.py +++ /dev/null @@ -1,1576 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -Implementation of metamodel as either PC, aPC or GPE -""" - -import warnings -import numpy as np -import math -import h5py -import matplotlib.pyplot as plt -from sklearn.preprocessing import MinMaxScaler -import scipy as sp -from scipy.optimize import minimize, NonlinearConstraint, LinearConstraint -from tqdm import tqdm -from sklearn.decomposition import PCA as sklearnPCA -import sklearn.linear_model as lm -from sklearn.gaussian_process import GaussianProcessRegressor -import sklearn.gaussian_process.kernels as kernels -import os -from joblib import Parallel, delayed -import copy - -from .input_space import InputSpace -from .glexindex import glexindex -from .eval_rec_rule import eval_univ_basis -from .reg_fast_ard import RegressionFastARD -from .reg_fast_laplace import RegressionFastLaplace -from .orthogonal_matching_pursuit import OrthogonalMatchingPursuit -from .bayes_linear import VBLinearRegression, EBLinearRegression -from .apoly_construction import apoly_construction -warnings.filterwarnings("ignore") -# Load the mplstyle -plt.style.use(os.path.join(os.path.split(__file__)[0], - '../', 'bayesvalidrox.mplstyle')) - - -class MetaModel(): - """ - Meta (surrogate) model - - This class trains a surrogate model. It accepts an input object (input_obj) - containing the specification of the distributions for uncertain parameters - and a model object with instructions on how to run the computational model. - - Attributes - ---------- - input_obj : obj - Input object with the information on the model input parameters. - meta_model_type : str - Surrogate model types. Three surrogate model types are supported: - polynomial chaos expansion (`PCE`), arbitrary PCE (`aPCE`) and - Gaussian process regression (`GPE`). Default is PCE. - pce_reg_method : str - PCE regression method to compute the coefficients. The following - regression methods are available: - - 1. OLS: Ordinary Least Square method - 2. BRR: Bayesian Ridge Regression - 3. LARS: Least angle regression - 4. ARD: Bayesian ARD Regression - 5. FastARD: Fast Bayesian ARD Regression - 6. VBL: Variational Bayesian Learning - 7. EBL: Emperical Bayesian Learning - Default is `OLS`. - bootstrap_method : str - Bootstraping method. Options are `'normal'` and `'fast'`. The default - is `'fast'`. It means that in each iteration except the first one, only - the coefficent are recalculated with the ordinary least square method. - n_bootstrap_itrs : int - Number of iterations for the bootstrap sampling. The default is `1`. - pce_deg : int or list of int - Polynomial degree(s). If a list is given, an adaptive algorithm is used - to find the best degree with the lowest Leave-One-Out cross-validation - (LOO) error (or the highest score=1-LOO). Default is `1`. - pce_q_norm : float - Hyperbolic (or q-norm) truncation for multi-indices of multivariate - polynomials. Default is `1.0`. - dim_red_method : str - Dimensionality reduction method for the output space. The available - method is based on principal component analysis (PCA). The Default is - `'no'`. There are two ways to select number of components: use - percentage of the explainable variance threshold (between 0 and 100) - (Option A) or direct prescription of components' number (Option B): - - >>> MetaModelOpts.dim_red_method = 'PCA' - >>> MetaModelOpts.var_pca_threshold = 99.999 # Option A - >>> MetaModelOpts.n_pca_components = 12 # Option B - apply_constraints : bool - If set to true constraints will be applied during training. - In this case the training uses OLS. In this version the constraints - need to be set explicitly in this class. - - verbose : bool - Prints summary of the regression results. Default is `False`. - - Note - ------- - To define the sampling methods and the training set, an experimental design - instance shall be defined. This can be done by: - - >>> MetaModelOpts.add_InputSpace() - - Two experimental design schemes are supported: one-shot (`normal`) and - adaptive sequential (`sequential`) designs. - For experimental design refer to `InputSpace`. - - """ - - def __init__(self, input_obj, meta_model_type='PCE', - pce_reg_method='OLS', bootstrap_method='fast', - n_bootstrap_itrs=1, pce_deg=1, pce_q_norm=1.0, - dim_red_method='no', apply_constraints = False, - verbose=False): - - self.input_obj = input_obj - self.meta_model_type = meta_model_type - self.pce_reg_method = pce_reg_method - self.bootstrap_method = bootstrap_method - self.n_bootstrap_itrs = n_bootstrap_itrs - self.pce_deg = pce_deg - self.pce_q_norm = pce_q_norm - self.dim_red_method = dim_red_method - self.apply_constraints = apply_constraints - self.verbose = verbose - - def build_metamodel(self, n_init_samples = None) -> None: - """ - Builds the parts for the metamodel (polynomes,...) that are neede before fitting. - - Returns - ------- - None - DESCRIPTION. - - """ - - # Generate general warnings - if self.apply_constraints or self.pce_reg_method.lower() == 'ols': - print('There are no estimations of surrogate uncertainty available' - ' for the chosen regression options. This might lead to issues' - ' in later steps.') - - # Add InputSpace to MetaModel if it does not have any - if not hasattr(self, 'InputSpace'): - self.InputSpace = InputSpace(self.input_obj) - self.InputSpace.n_init_samples = n_init_samples - self.InputSpace.init_param_space(np.max(self.pce_deg)) - - self.ndim = self.InputSpace.ndim - - if not hasattr(self, 'CollocationPoints'): - raise AttributeError('Please provide samples to the metamodel before building it.') - - # Transform input samples - # TODO: this is probably not yet correct! Make 'method' variable - self.CollocationPoints = self.InputSpace.transform(self.CollocationPoints, method='user') - - - self.n_params = len(self.input_obj.Marginals) - - # Generate polynomials - if self.meta_model_type.lower() != 'gpe': - self.generate_polynomials(np.max(self.pce_deg)) - - # Initialize the nested dictionaries - if self.meta_model_type.lower() == 'gpe': - self.gp_poly = self.auto_vivification() - self.x_scaler = self.auto_vivification() - self.LCerror = self.auto_vivification() - else: - self.deg_dict = self.auto_vivification() - self.q_norm_dict = self.auto_vivification() - self.coeffs_dict = self.auto_vivification() - self.basis_dict = self.auto_vivification() - self.score_dict = self.auto_vivification() - self.clf_poly = self.auto_vivification() - self.LCerror = self.auto_vivification() - if self.dim_red_method.lower() == 'pca': - self.pca = self.auto_vivification() - - # Define an array containing the degrees - self.CollocationPoints = np.array(self.CollocationPoints) - self.n_samples, ndim = self.CollocationPoints.shape - if self.ndim != ndim: - raise AttributeError('The given samples do not match the given number of priors. The samples should be a 2D array of size (#samples, #priors)') - - self.deg_array = self.__select_degree(ndim, self.n_samples) - - # Generate all basis indices - self.allBasisIndices = self.auto_vivification() - for deg in self.deg_array: - keys = self.allBasisIndices.keys() - if deg not in np.fromiter(keys, dtype=float): - # Generate the polynomial basis indices - for qidx, q in enumerate(self.pce_q_norm): - basis_indices = glexindex(start=0, stop=deg+1, - dimensions=self.n_params, - cross_truncation=q, - reverse=False, graded=True) - self.allBasisIndices[str(deg)][str(q)] = basis_indices - - - - def fit(self, X, y, parallel = True, verbose = False): - """ - Fits the surrogate to the given data (samples X, outputs y). - Note here that the samples X should be the transformed samples provided - by the experimental design if the transformation is used there. - - Parameters - ---------- - X : 2D list or np.array of shape (#samples, #dim) - The parameter value combinations that the model was evaluated at. - y : dict of 2D lists or arrays of shape (#samples, #timesteps) - The respective model evaluations. - - Returns - ------- - None. - - """ - X = np.array(X) - for key in y.keys(): - y_val = np.array(y[key]) - if y_val.ndim !=2: - raise ValueError('The given outputs y should be 2D') - y[key] = np.array(y[key]) - - # Output names are the same as the keys in y - self.out_names = list(y.keys()) - - # Build the MetaModel on the static samples - self.CollocationPoints = X - - # TODO: other option: rebuild every time - if not hasattr(self, 'deg_array'): - self.build_metamodel(n_init_samples = X.shape[1]) - - # Evaluate the univariate polynomials on InputSpace - if self.meta_model_type.lower() != 'gpe': - self.univ_p_val = self.univ_basis_vals(self.CollocationPoints) - - # --- Loop through data points and fit the surrogate --- - if verbose: - print(f"\n>>>> Training the {self.meta_model_type} metamodel " - "started. <<<<<<\n") - - # --- Bootstrap sampling --- - # Correct number of bootstrap if PCA transformation is required. - if self.dim_red_method.lower() == 'pca' and self.n_bootstrap_itrs == 1: - self.n_bootstrap_itrs = 100 - - # Check if fast version (update coeffs with OLS) is selected. - if self.bootstrap_method.lower() == 'fast': - fast_bootstrap = True - first_out = {} - n_comp_dict = {} - else: - fast_bootstrap = False - - # Prepare tqdm iteration maessage - if verbose and self.n_bootstrap_itrs > 1: - enum_obj = tqdm(range(self.n_bootstrap_itrs), - total=self.n_bootstrap_itrs, - desc="Bootstrapping the metamodel", - ascii=True) - else: - enum_obj = range(self.n_bootstrap_itrs) - - # Loop over the bootstrap iterations - for b_i in enum_obj: - if b_i > 0: - b_indices = np.random.randint(self.n_samples, size=self.n_samples) - else: - b_indices = np.arange(len(X)) - - X_train_b = X[b_indices] - - if verbose and self.n_bootstrap_itrs == 1: - items = tqdm(y.items(), desc="Fitting regression") - else: - items = y.items() - - # For loop over the components/outputs - for key, Output in items: - - # Dimensionality reduction with PCA, if specified - if self.dim_red_method.lower() == 'pca': - - # Use the stored n_comp for fast bootsrtrapping - if fast_bootstrap and b_i > 0: - self.n_pca_components = n_comp_dict[key] - - # Start transformation - pca, target, n_comp = self.pca_transformation( - Output[b_indices], verbose=False - ) - self.pca[f'b_{b_i+1}'][key] = pca - # Store the number of components for fast bootsrtrapping - if fast_bootstrap and b_i == 0: - n_comp_dict[key] = n_comp - else: - target = Output[b_indices] - - # Parallel fit regression - if self.meta_model_type.lower() == 'gpe': - # Prepare the input matrix - scaler = MinMaxScaler() - X_S = scaler.fit_transform(X_train_b) - - self.x_scaler[f'b_{b_i+1}'][key] = scaler - if parallel: - out = Parallel(n_jobs=-1, backend='multiprocessing')( - delayed(self.gaussian_process_emulator)( - X_S, target[:, idx]) for idx in - range(target.shape[1])) - else: - results = map(self.gaussian_process_emulator, - [X_train_b]*target.shape[1], - [target[:, idx] for idx in - range(target.shape[1])] - ) - out = list(results) - - for idx in range(target.shape[1]): - self.gp_poly[f'b_{b_i+1}'][key][f"y_{idx+1}"] = out[idx] - - else: - self.univ_p_val = self.univ_p_val[b_indices] - if parallel and (not fast_bootstrap or b_i == 0): - out = Parallel(n_jobs=-1, backend='multiprocessing')( - delayed(self.adaptive_regression)(X_train_b, - target[:, idx], - idx) - for idx in range(target.shape[1])) - elif not parallel and (not fast_bootstrap or b_i == 0): - results = map(self.adaptive_regression, - [X_train_b]*target.shape[1], - [target[:, idx] for idx in - range(target.shape[1])], - range(target.shape[1])) - out = list(results) - - # Store the first out dictionary - if fast_bootstrap and b_i == 0: - first_out[key] = copy.deepcopy(out) - - if b_i > 0 and fast_bootstrap: - - # fast bootstrap - out = self.update_pce_coeffs( - X_train_b, target, first_out[key]) - - for i in range(target.shape[1]): - # Create a dict to pass the variables - self.deg_dict[f'b_{b_i+1}'][key][f"y_{i+1}"] = out[i]['degree'] - self.q_norm_dict[f'b_{b_i+1}'][key][f"y_{i+1}"] = out[i]['qnorm'] - self.coeffs_dict[f'b_{b_i+1}'][key][f"y_{i+1}"] = out[i]['coeffs'] - self.basis_dict[f'b_{b_i+1}'][key][f"y_{i+1}"] = out[i]['multi_indices'] - self.score_dict[f'b_{b_i+1}'][key][f"y_{i+1}"] = out[i]['LOOCVScore'] - self.clf_poly[f'b_{b_i+1}'][key][f"y_{i+1}"] = out[i]['clf_poly'] - #self.LCerror[f'b_{b_i+1}'][key][f"y_{i+1}"] = out[i]['LCerror'] - - if verbose: - print(f"\n>>>> Training the {self.meta_model_type} metamodel" - " sucessfully completed. <<<<<<\n") - - # ------------------------------------------------------------------------- - def update_pce_coeffs(self, X, y, out_dict = None): - """ - Updates the PCE coefficents using only the ordinary least square method - for the fast version of the bootstrapping. - - Parameters - ---------- - X : array of shape (n_samples, n_params) - Training set. - y : array of shape (n_samples, n_outs) - The (transformed) model responses. - out_dict : dict - The training output dictionary of the first iteration, i.e. - the surrogate model for the original experimental design. - - Returns - ------- - final_out_dict : dict - The updated training output dictionary. - - """ - # Make a copy - final_out_dict = copy.deepcopy(out_dict) - - # Loop over the points - for i in range(y.shape[1]): - - - # Extract nonzero basis indices - nnz_idx = np.nonzero(out_dict[i]['coeffs'])[0] - if len(nnz_idx) != 0: - basis_indices = out_dict[i]['multi_indices'] - - # Evaluate the multivariate polynomials on CollocationPoints - psi = self.create_psi(basis_indices, self.univ_p_val) - - # Calulate the cofficients of surrogate model - updated_out = self.regression( - psi, y[:, i], basis_indices, reg_method='OLS', - sparsity=False - ) - - # Update coeffs in out_dict - final_out_dict[i]['coeffs'][nnz_idx] = updated_out['coeffs'] - - return final_out_dict - - # ------------------------------------------------------------------------- - def add_InputSpace(self): - """ - Instanciates experimental design object. - - Returns - ------- - None. - - """ - self.InputSpace = InputSpace(self.input_obj, - meta_Model_type=self.meta_model_type) - - # ------------------------------------------------------------------------- - def univ_basis_vals(self, samples, n_max=None): - """ - Evaluates univariate regressors along input directions. - - Parameters - ---------- - samples : array of shape (n_samples, n_params) - Samples. - n_max : int, optional - Maximum polynomial degree. The default is `None`. - - Returns - ------- - univ_basis: array of shape (n_samples, n_params, n_max+1) - All univariate regressors up to n_max. - """ - # Extract information - poly_types = self.InputSpace.poly_types - if samples.ndim != 2: - samples = samples.reshape(1, len(samples)) - n_max = np.max(self.pce_deg) if n_max is None else n_max - - # Extract poly coeffs - if self.InputSpace.input_data_given or self.InputSpace.apce: - apolycoeffs = self.polycoeffs - else: - apolycoeffs = None - - # Evaluate univariate basis - univ_basis = eval_univ_basis(samples, n_max, poly_types, apolycoeffs) - - return univ_basis - - # ------------------------------------------------------------------------- - def create_psi(self, basis_indices, univ_p_val): - """ - This function assemble the design matrix Psi from the given basis index - set INDICES and the univariate polynomial evaluations univ_p_val. - - Parameters - ---------- - basis_indices : array of shape (n_terms, n_params) - Multi-indices of multivariate polynomials. - univ_p_val : array of (n_samples, n_params, n_max+1) - All univariate regressors up to `n_max`. - - Raises - ------ - ValueError - n_terms in arguments do not match. - - Returns - ------- - psi : array of shape (n_samples, n_terms) - Multivariate regressors. - - """ - # Check if BasisIndices is a sparse matrix - sparsity = sp.sparse.issparse(basis_indices) - if sparsity: - basis_indices = basis_indices.toarray() - - # Initialization and consistency checks - # number of input variables - n_params = univ_p_val.shape[1] - - # Size of the experimental design - n_samples = univ_p_val.shape[0] - - # number of basis terms - n_terms = basis_indices.shape[0] - - # check that the variables have consistent sizes - if n_params != basis_indices.shape[1]: - raise ValueError( - f"The shapes of basis_indices ({basis_indices.shape[1]}) and " - f"univ_p_val ({n_params}) don't match!!" - ) - - # Preallocate the Psi matrix for performance - psi = np.ones((n_samples, n_terms)) - # Assemble the Psi matrix - for m in range(basis_indices.shape[1]): - aa = np.where(basis_indices[:, m] > 0)[0] - try: - basisIdx = basis_indices[aa, m] - bb = univ_p_val[:, m, basisIdx].reshape(psi[:, aa].shape) - psi[:, aa] = np.multiply(psi[:, aa], bb) - except ValueError as err: - raise err - return psi - - # ------------------------------------------------------------------------- - def regression(self, X, y, basis_indices, reg_method=None, sparsity=True): - """ - Fit regression using the regression method provided. - - Parameters - ---------- - X : array of shape (n_samples, n_features) - Training vector, where n_samples is the number of samples and - n_features is the number of features. - y : array of shape (n_samples,) - Target values. - basis_indices : array of shape (n_terms, n_params) - Multi-indices of multivariate polynomials. - reg_method : str, optional - DESCRIPTION. The default is None. - - Returns - ------- - return_out_dict : Dict - Fitted estimator, spareMulti-Index, sparseX and coefficients. - - """ - if reg_method is None: - reg_method = self.pce_reg_method - - bias_term = self.dim_red_method.lower() != 'pca' - - compute_score = True if self.verbose else False - - # inverse of the observed variance of the data - if np.var(y) != 0: - Lambda = 1 / np.var(y) - else: - Lambda = 1e-6 - - # Bayes sparse adaptive aPCE - if reg_method.lower() == 'ols': - clf_poly = lm.LinearRegression(fit_intercept=False) - elif reg_method.lower() == 'brr': - clf_poly = lm.BayesianRidge(n_iter=1000, tol=1e-7, - fit_intercept=False, - #normalize=True, - compute_score=compute_score, - alpha_1=1e-04, alpha_2=1e-04, - lambda_1=Lambda, lambda_2=Lambda) - clf_poly.converged = True - - elif reg_method.lower() == 'ard': - if X.shape[0]<2: - raise ValueError('Regression with ARD can only be performed for more than 2 samples') - clf_poly = lm.ARDRegression(fit_intercept=False, - #normalize=True, - compute_score=compute_score, - n_iter=1000, tol=0.0001, - alpha_1=1e-3, alpha_2=1e-3, - lambda_1=Lambda, lambda_2=Lambda) - - elif reg_method.lower() == 'fastard': - clf_poly = RegressionFastARD(fit_intercept=False, - normalize=True, - compute_score=compute_score, - n_iter=300, tol=1e-10) - - elif reg_method.lower() == 'bcs': - if X.shape[0]<10: - raise ValueError('Regression with BCS can only be performed for more than 10 samples') - clf_poly = RegressionFastLaplace(fit_intercept=False, - bias_term=bias_term, - n_iter=1000, tol=1e-7) - - elif reg_method.lower() == 'lars': - if X.shape[0]<10: - raise ValueError('Regression with LARS can only be performed for more than 5 samples') - clf_poly = lm.LassoLarsCV(fit_intercept=False) - - elif reg_method.lower() == 'sgdr': - clf_poly = lm.SGDRegressor(fit_intercept=False, - max_iter=5000, tol=1e-7) - - elif reg_method.lower() == 'omp': - clf_poly = OrthogonalMatchingPursuit(fit_intercept=False) - - elif reg_method.lower() == 'vbl': - clf_poly = VBLinearRegression(fit_intercept=False) - - elif reg_method.lower() == 'ebl': - clf_poly = EBLinearRegression(optimizer='em') - - - # Training with constraints automatically uses L2 - if self.apply_constraints: - # TODO: set the constraints here - # Define the nonlin. constraint - nlc = NonlinearConstraint(lambda x: np.matmul(X,x),-1,1.1) - self.nlc = nlc - - fun = lambda x: (np.linalg.norm(np.matmul(X, x)-y, ord = 2))**2 - if self.init_type =='zeros': - res = minimize(fun, np.zeros(X.shape[1]), method = 'trust-constr', constraints = self.nlc) - if self.init_type == 'nonpi': - clf_poly.fit(X, y) - coeff = clf_poly.coef_ - res = minimize(fun, coeff, method = 'trust-constr', constraints = self.nlc) - - coeff = np.array(res.x) - clf_poly.coef_ = coeff - clf_poly.X = X - clf_poly.y = y - clf_poly.intercept_ = 0 - - # Training without constraints uses chosen regression method - else: - clf_poly.fit(X, y) - - # Select the nonzero entries of coefficients - if sparsity: - nnz_idx = np.nonzero(clf_poly.coef_)[0] - else: - nnz_idx = np.arange(clf_poly.coef_.shape[0]) - - # This is for the case where all outputs are zero, thereby - # all coefficients are zero - if (y == 0).all(): - nnz_idx = np.insert(np.nonzero(clf_poly.coef_)[0], 0, 0) - - sparse_basis_indices = basis_indices[nnz_idx] - sparse_X = X[:, nnz_idx] - coeffs = clf_poly.coef_[nnz_idx] - clf_poly.coef_ = coeffs - - # Create a dict to pass the outputs - return_out_dict = dict() - return_out_dict['clf_poly'] = clf_poly - return_out_dict['spareMulti-Index'] = sparse_basis_indices - return_out_dict['sparePsi'] = sparse_X - return_out_dict['coeffs'] = coeffs - return return_out_dict - - # ------------------------------------------------------------------------- - def create_psi(self, basis_indices, univ_p_val): - """ - This function assemble the design matrix Psi from the given basis index - set INDICES and the univariate polynomial evaluations univ_p_val. - - Parameters - ---------- - basis_indices : array of shape (n_terms, n_params) - Multi-indices of multivariate polynomials. - univ_p_val : array of (n_samples, n_params, n_max+1) - All univariate regressors up to `n_max`. - - Raises - ------ - ValueError - n_terms in arguments do not match. - - Returns - ------- - psi : array of shape (n_samples, n_terms) - Multivariate regressors. - - """ - # Check if BasisIndices is a sparse matrix - sparsity = sp.sparse.issparse(basis_indices) - if sparsity: - basis_indices = basis_indices.toarray() - - # Initialization and consistency checks - # number of input variables - n_params = univ_p_val.shape[1] - - # Size of the experimental design - n_samples = univ_p_val.shape[0] - - # number of basis terms - n_terms = basis_indices.shape[0] - - # check that the variables have consistent sizes - if n_params != basis_indices.shape[1]: - raise ValueError( - f"The shapes of basis_indices ({basis_indices.shape[1]}) and " - f"univ_p_val ({n_params}) don't match!!" - ) - - # Preallocate the Psi matrix for performance - psi = np.ones((n_samples, n_terms)) - # Assemble the Psi matrix - for m in range(basis_indices.shape[1]): - aa = np.where(basis_indices[:, m] > 0)[0] - try: - basisIdx = basis_indices[aa, m] - bb = univ_p_val[:, m, basisIdx].reshape(psi[:, aa].shape) - psi[:, aa] = np.multiply(psi[:, aa], bb) - except ValueError as err: - raise err - return psi - - # -------------------------------------------------------------------------------------------------------- - def adaptive_regression(self, ED_X, ED_Y, varIdx, verbose=False): - """ - Adaptively fits the PCE model by comparing the scores of different - degrees and q-norm. - - Parameters - ---------- - ED_X : array of shape (n_samples, n_params) - Experimental design. - ED_Y : array of shape (n_samples,) - Target values, i.e. simulation results for the Experimental design. - varIdx : int - Index of the output. - verbose : bool, optional - Print out summary. The default is False. - - Returns - ------- - returnVars : Dict - Fitted estimator, best degree, best q-norm, LOOCVScore and - coefficients. - - """ - - n_samples, n_params = ED_X.shape - # Initialization - qAllCoeffs, AllCoeffs = {}, {} - qAllIndices_Sparse, AllIndices_Sparse = {}, {} - qAllclf_poly, Allclf_poly = {}, {} - qAllnTerms, AllnTerms = {}, {} - qAllLCerror, AllLCerror = {}, {} - - # Extract degree array and qnorm array - deg_array = np.array([*self.allBasisIndices], dtype=int) - qnorm = [*self.allBasisIndices[str(int(deg_array[0]))]] - - # Some options for EarlyStop - errorIncreases = False - # Stop degree, if LOO error does not decrease n_checks_degree times - n_checks_degree = 3 - # Stop qNorm, if criterion isn't fulfilled n_checks_qNorm times - n_checks_qNorm = 2 - nqnorms = len(qnorm) - qNormEarlyStop = True - if nqnorms < n_checks_qNorm+1: - qNormEarlyStop = False - - # ===================================================================== - # basis adaptive polynomial chaos: repeat the calculation by increasing - # polynomial degree until the highest accuracy is reached - # ===================================================================== - # For each degree check all q-norms and choose the best one - scores = -np.inf * np.ones(deg_array.shape[0]) - qNormScores = -np.inf * np.ones(nqnorms) - - for degIdx, deg in enumerate(deg_array): - - for qidx, q in enumerate(qnorm): - - # Extract the polynomial basis indices from the pool of - # allBasisIndices - BasisIndices = self.allBasisIndices[str(deg)][str(q)] - - # Assemble the Psi matrix - Psi = self.create_psi(BasisIndices, self.univ_p_val) - - # Calulate the cofficients of the meta model - outs = self.regression(Psi, ED_Y, BasisIndices) - - # Calculate and save the score of LOOCV - score, LCerror = self.corr_loocv_error(outs['clf_poly'], - outs['sparePsi'], - outs['coeffs'], - ED_Y) - - # Check the convergence of noise for FastARD - if self.pce_reg_method == 'FastARD' and \ - outs['clf_poly'].alpha_ < np.finfo(np.float32).eps: - score = -np.inf - - qNormScores[qidx] = score - qAllCoeffs[str(qidx+1)] = outs['coeffs'] - qAllIndices_Sparse[str(qidx+1)] = outs['spareMulti-Index'] - qAllclf_poly[str(qidx+1)] = outs['clf_poly'] - qAllnTerms[str(qidx+1)] = BasisIndices.shape[0] - qAllLCerror[str(qidx+1)] = LCerror - - # EarlyStop check - # if there are at least n_checks_qNorm entries after the - # best one, we stop - if qNormEarlyStop and \ - sum(np.isfinite(qNormScores)) > n_checks_qNorm: - # If the error has increased the last two iterations, stop! - qNormScores_nonInf = qNormScores[np.isfinite(qNormScores)] - deltas = np.sign(np.diff(qNormScores_nonInf)) - if sum(deltas[-n_checks_qNorm+1:]) == 2: - # stop the q-norm loop here - break - if np.var(ED_Y) == 0: - break - - # Store the score in the scores list - best_q = np.nanargmax(qNormScores) - scores[degIdx] = qNormScores[best_q] - - AllCoeffs[str(degIdx+1)] = qAllCoeffs[str(best_q+1)] - AllIndices_Sparse[str(degIdx+1)] = qAllIndices_Sparse[str(best_q+1)] - Allclf_poly[str(degIdx+1)] = qAllclf_poly[str(best_q+1)] - AllnTerms[str(degIdx+1)] = qAllnTerms[str(best_q+1)] - AllLCerror[str(degIdx+1)] = qAllLCerror[str(best_q+1)] - - # Check the direction of the error (on average): - # if it increases consistently stop the iterations - if len(scores[scores != -np.inf]) > n_checks_degree: - scores_nonInf = scores[scores != -np.inf] - ss = np.sign(scores_nonInf - np.max(scores_nonInf)) - # ss<0 error decreasing - errorIncreases = np.sum(np.sum(ss[-2:])) <= -1*n_checks_degree - - if errorIncreases: - break - - # Check only one degree, if target matrix has zero variance - if np.var(ED_Y) == 0: - break - - # ------------------ Summary of results ------------------ - # Select the one with the best score and save the necessary outputs - best_deg = np.nanargmax(scores)+1 - coeffs = AllCoeffs[str(best_deg)] - basis_indices = AllIndices_Sparse[str(best_deg)] - clf_poly = Allclf_poly[str(best_deg)] - LOOCVScore = np.nanmax(scores) - P = AllnTerms[str(best_deg)] - LCerror = AllLCerror[str(best_deg)] - degree = deg_array[np.nanargmax(scores)] - qnorm = float(qnorm[best_q]) - - # ------------------ Print out Summary of results ------------------ - if self.verbose: - # Create PSI_Sparse by removing redundent terms - nnz_idx = np.nonzero(coeffs)[0] - BasisIndices_Sparse = basis_indices[nnz_idx] - - print(f'Output variable {varIdx+1}:') - print('The estimation of PCE coefficients converged at polynomial ' - f'degree {deg_array[best_deg-1]} with ' - f'{len(BasisIndices_Sparse)} terms (Sparsity index = ' - f'{round(len(BasisIndices_Sparse)/P, 3)}).') - - print(f'Final ModLOO error estimate: {1-max(scores):.3e}') - print('\n'+'-'*50) - - if verbose: - print('='*50) - print(' '*10 + ' Summary of results ') - print('='*50) - - print("Scores:\n", scores) - print("Degree of best score:", self.deg_array[best_deg-1]) - print("No. of terms:", len(basis_indices)) - print("Sparsity index:", round(len(basis_indices)/P, 3)) - print("Best Indices:\n", basis_indices) - - if self.pce_reg_method in ['BRR', 'ARD']: - fig, ax = plt.subplots(figsize=(12, 10)) - plt.title("Marginal log-likelihood") - plt.plot(clf_poly.scores_, color='navy', linewidth=2) - plt.ylabel("Score") - plt.xlabel("Iterations") - if self.pce_reg_method.lower() == 'bbr': - text = f"$\\alpha={clf_poly.alpha_:.1f}$\n" - f"$\\lambda={clf_poly.lambda_:.3f}$\n" - f"$L={clf_poly.scores_[-1]:.1f}$" - else: - text = f"$\\alpha={clf_poly.alpha_:.1f}$\n$" - f"\\L={clf_poly.scores_[-1]:.1f}$" - - plt.text(0.75, 0.5, text, fontsize=18, transform=ax.transAxes) - plt.show() - print('='*80) - - # Create a dict to pass the outputs - returnVars = dict() - returnVars['clf_poly'] = clf_poly - returnVars['degree'] = degree - returnVars['qnorm'] = qnorm - returnVars['coeffs'] = coeffs - returnVars['multi_indices'] = basis_indices - returnVars['LOOCVScore'] = LOOCVScore - returnVars['LCerror'] = LCerror - - return returnVars - - # ------------------------------------------------------------------------- - def corr_loocv_error(self, clf, psi, coeffs, y): - """ - Calculates the corrected LOO error for regression on regressor - matrix `psi` that generated the coefficients based on [1] and [2]. - - [1] Blatman, G., 2009. Adaptive sparse polynomial chaos expansions for - uncertainty propagation and sensitivity analysis (Doctoral - dissertation, Clermont-Ferrand 2). - - [2] Blatman, G. and Sudret, B., 2011. Adaptive sparse polynomial chaos - expansion based on least angle regression. Journal of computational - Physics, 230(6), pp.2345-2367. - - Parameters - ---------- - clf : object - Fitted estimator. - psi : array of shape (n_samples, n_features) - The multivariate orthogonal polynomials (regressor). - coeffs : array-like of shape (n_features,) - Estimated cofficients. - y : array of shape (n_samples,) - Target values. - - Returns - ------- - R_2 : float - LOOCV Validation score (1-LOOCV erro). - residual : array of shape (n_samples,) - Residual values (y - predicted targets). - - """ - psi = np.array(psi, dtype=float) - - # Create PSI_Sparse by removing redundent terms - nnz_idx = np.nonzero(coeffs)[0] - if len(nnz_idx) == 0: - nnz_idx = [0] - psi_sparse = psi[:, nnz_idx] - - # NrCoeffs of aPCEs - P = len(nnz_idx) - # NrEvaluation (Size of experimental design) - N = psi.shape[0] - - # Build the projection matrix - PsiTPsi = np.dot(psi_sparse.T, psi_sparse) - - if np.linalg.cond(PsiTPsi) > 1e-12: #and \ - # np.linalg.cond(PsiTPsi) < 1/sys.float_info.epsilon: - # faster - try: - M = sp.linalg.solve(PsiTPsi, - sp.sparse.eye(PsiTPsi.shape[0]).toarray()) - except: - raise AttributeError('There are too few samples for the corrected loo-cv error. Fit surrogate on at least as many samples as parameters to use this') - else: - # stabler - M = np.linalg.pinv(PsiTPsi) - - # h factor (the full matrix is not calculated explicitly, - # only the trace is, to save memory) - PsiM = np.dot(psi_sparse, M) - - h = np.sum(np.multiply(PsiM, psi_sparse), axis=1, dtype=np.longdouble)#float128) - - # ------ Calculate Error Loocv for each measurement point ---- - # Residuals - try: - residual = clf.predict(psi) - y - except: - residual = np.dot(psi, coeffs) - y - - # Variance - var_y = np.var(y) - - if var_y == 0: - norm_emp_error = 0 - loo_error = 0 - LCerror = np.zeros((y.shape)) - return 1-loo_error, LCerror - else: - norm_emp_error = np.mean(residual**2)/var_y - - # LCerror = np.divide(residual, (1-h)) - LCerror = residual / (1-h) - loo_error = np.mean(np.square(LCerror)) / var_y - # if there are NaNs, just return an infinite LOO error (this - # happens, e.g., when a strongly underdetermined problem is solved) - if np.isnan(loo_error): - loo_error = np.inf - - # Corrected Error for over-determined system - tr_M = np.trace(M) - if tr_M < 0 or abs(tr_M) > 1e6: - tr_M = np.trace(np.linalg.pinv(np.dot(psi.T, psi))) - - # Over-determined system of Equation - if N > P: - T_factor = N/(N-P) * (1 + tr_M) - - # Under-determined system of Equation - else: - T_factor = np.inf - - corrected_loo_error = loo_error * T_factor - - R_2 = 1 - corrected_loo_error - - return R_2, LCerror - - # ------------------------------------------------------------------------- - def pca_transformation(self, target, verbose=False): - """ - Transforms the targets (outputs) via Principal Component Analysis - - Parameters - ---------- - target : array of shape (n_samples,) - Target values. - - Returns - ------- - pca : obj - Fitted sklearnPCA object. - OutputMatrix : array of shape (n_samples,) - Transformed target values. - n_pca_components : int - Number of selected principal components. - - """ - # Transform via Principal Component Analysis - if hasattr(self, 'var_pca_threshold'): - var_pca_threshold = self.var_pca_threshold - else: - var_pca_threshold = 100.0 - n_samples, n_features = target.shape - - if hasattr(self, 'n_pca_components'): - n_pca_components = self.n_pca_components - else: - # Instantiate and fit sklearnPCA object - covar_matrix = sklearnPCA(n_components=None) - covar_matrix.fit(target) - var = np.cumsum(np.round(covar_matrix.explained_variance_ratio_, - decimals=5)*100) - # Find the number of components to explain self.varPCAThreshold of - # variance - try: - n_components = np.where(var >= var_pca_threshold)[0][0] + 1 - except IndexError: - n_components = min(n_samples, n_features) - - n_pca_components = min(n_samples, n_features, n_components) - - # Print out a report - if verbose: - print() - print('-' * 50) - print(f"PCA transformation is performed with {n_pca_components}" - " components.") - print('-' * 50) - print() - - # Fit and transform with the selected number of components - pca = sklearnPCA(n_components=n_pca_components, svd_solver='arpack') - scaled_target = pca.fit_transform(target) - - return pca, scaled_target, n_pca_components - - # ------------------------------------------------------------------------- - def gaussian_process_emulator(self, X, y, nug_term=None, autoSelect=False, - varIdx=None): - """ - Fits a Gaussian Process Emulator to the target given the training - points. - - Parameters - ---------- - X : array of shape (n_samples, n_params) - Training points. - y : array of shape (n_samples,) - Target values. - nug_term : float, optional - Nugget term. The default is None, i.e. variance of y. - autoSelect : bool, optional - Loop over some kernels and select the best. The default is False. - varIdx : int, optional - The index number. The default is None. - - Returns - ------- - gp : object - Fitted estimator. - - """ - - nug_term = nug_term if nug_term else np.var(y) - - Kernels = [nug_term * kernels.RBF(length_scale=1.0, - length_scale_bounds=(1e-25, 1e15)), - nug_term * kernels.RationalQuadratic(length_scale=0.2, - alpha=1.0), - nug_term * kernels.Matern(length_scale=1.0, - length_scale_bounds=(1e-15, 1e5), - nu=1.5)] - - # Automatic selection of the kernel - if autoSelect: - gp = {} - BME = [] - for i, kernel in enumerate(Kernels): - gp[i] = GaussianProcessRegressor(kernel=kernel, - n_restarts_optimizer=3, - normalize_y=False) - - # Fit to data using Maximum Likelihood Estimation - gp[i].fit(X, y) - - # Store the MLE as BME score - BME.append(gp[i].log_marginal_likelihood()) - - gp = gp[np.argmax(BME)] - - else: - gp = GaussianProcessRegressor(kernel=Kernels[0], - n_restarts_optimizer=3, - normalize_y=False) - gp.fit(X, y) - - # Compute score - if varIdx is not None: - Score = gp.score(X, y) - print('-'*50) - print(f'Output variable {varIdx}:') - print('The estimation of GPE coefficients converged,') - print(f'with the R^2 score: {Score:.3f}') - print('-'*50) - - return gp - - # ------------------------------------------------------------------------- - def eval_metamodel(self, samples): - """ - Evaluates meta-model at the requested samples. One can also generate - nsamples. - - Parameters - ---------- - samples : array of shape (n_samples, n_params), optional - Samples to evaluate meta-model at. The default is None. - nsamples : int, optional - Number of samples to generate, if no `samples` is provided. The - default is None. - sampling_method : str, optional - Type of sampling, if no `samples` is provided. The default is - 'random'. - return_samples : bool, optional - Retun samples, if no `samples` is provided. The default is False. - - Returns - ------- - mean_pred : dict - Mean of the predictions. - std_pred : dict - Standard deviatioon of the predictions. - """ - # Transform into np array - can also be given as list - samples = np.array(samples) - - # Transform samples to the independent space - samples = self.InputSpace.transform( - samples, - method='user' - ) - # Compute univariate bases for the given samples - if self.meta_model_type.lower() != 'gpe': - univ_p_val = self.univ_basis_vals( - samples, - n_max=np.max(self.pce_deg) - ) - - mean_pred_b = {} - std_pred_b = {} - # Loop over bootstrap iterations - for b_i in range(self.n_bootstrap_itrs): - - # Extract model dictionary - if self.meta_model_type.lower() == 'gpe': - model_dict = self.gp_poly[f'b_{b_i+1}'] - else: - model_dict = self.coeffs_dict[f'b_{b_i+1}'] - - # Loop over outputs - mean_pred = {} - std_pred = {} - for output, values in model_dict.items(): - - mean = np.empty((len(samples), len(values))) - std = np.empty((len(samples), len(values))) - idx = 0 - for in_key, InIdxValues in values.items(): - - # Prediction with GPE - if self.meta_model_type.lower() == 'gpe': - X_T = self.x_scaler[f'b_{b_i+1}'][output].transform(samples) - gp = self.gp_poly[f'b_{b_i+1}'][output][in_key] - y_mean, y_std = gp.predict(X_T, return_std=True) - - else: - # Prediction with PCE - # Assemble Psi matrix - basis = self.basis_dict[f'b_{b_i+1}'][output][in_key] - psi = self.create_psi(basis, univ_p_val) - - # Prediction - if self.bootstrap_method != 'fast' or b_i == 0: - # with error bar, i.e. use clf_poly - clf_poly = self.clf_poly[f'b_{b_i+1}'][output][in_key] - try: - y_mean, y_std = clf_poly.predict( - psi, return_std=True - ) - except TypeError: - y_mean = clf_poly.predict(psi) - y_std = np.zeros_like(y_mean) - else: - # without error bar - coeffs = self.coeffs_dict[f'b_{b_i+1}'][output][in_key] - y_mean = np.dot(psi, coeffs) - y_std = np.zeros_like(y_mean) - - mean[:, idx] = y_mean - std[:, idx] = y_std - idx += 1 - - # Save predictions for each output - if self.dim_red_method.lower() == 'pca': - PCA = self.pca[f'b_{b_i+1}'][output] - mean_pred[output] = PCA.inverse_transform(mean) - std_pred[output] = np.zeros(mean.shape) - else: - mean_pred[output] = mean - std_pred[output] = std - - # Save predictions for each bootstrap iteration - mean_pred_b[b_i] = mean_pred - std_pred_b[b_i] = std_pred - - # Change the order of nesting - mean_pred_all = {} - for i in sorted(mean_pred_b): - for k, v in mean_pred_b[i].items(): - if k not in mean_pred_all: - mean_pred_all[k] = [None] * len(mean_pred_b) - mean_pred_all[k][i] = v - - # Compute the moments of predictions over the predictions - for output in self.out_names: - # Only use bootstraps with finite values - finite_rows = np.isfinite( - mean_pred_all[output]).all(axis=2).all(axis=1) - outs = np.asarray(mean_pred_all[output])[finite_rows] - # Compute mean - mean_pred[output] = np.mean(outs, axis=0) - # Compute standard deviation - if self.n_bootstrap_itrs > 1: - std_pred[output] = np.std(outs, axis=0) - else: - std_pred[output] = std_pred_b[b_i][output] - - return mean_pred, std_pred - - # ------------------------------------------------------------------------- - def create_model_error(self, X, y, Model, name='Calib'): - """ - Fits a GPE-based model error. - - Parameters - ---------- - X : array of shape (n_outputs, n_inputs) - Input array. It can contain any forcing inputs or coordinates of - extracted data. - y : array of shape (n_outputs,) - The model response for the MAP parameter set. - name : str, optional - Calibration or validation. The default is `'Calib'`. - - Returns - ------- - self: object - Self object. - - """ - outputNames = self.out_names - self.errorRegMethod = 'GPE' - self.errorclf_poly = self.auto_vivification() - self.errorScale = self.auto_vivification() - - # Read data - # TODO: do this call outside the metamodel - MeasuredData = Model.read_observation(case=name) - - # Fitting GPR based bias model - for out in outputNames: - nan_idx = ~np.isnan(MeasuredData[out]) - # Select data - try: - data = MeasuredData[out].values[nan_idx] - except AttributeError: - data = MeasuredData[out][nan_idx] - - # Prepare the input matrix - scaler = MinMaxScaler() - delta = data # - y[out][0] - BiasInputs = np.hstack((X[out], y[out].reshape(-1, 1))) - X_S = scaler.fit_transform(BiasInputs) - gp = self.gaussian_process_emulator(X_S, delta) - - self.errorScale[out]["y_1"] = scaler - self.errorclf_poly[out]["y_1"] = gp - - return self - - # ------------------------------------------------------------------------- - def eval_model_error(self, X, y_pred): - """ - Evaluates the error model. - - Parameters - ---------- - X : array - Inputs. - y_pred : dict - Predictions. - - Returns - ------- - mean_pred : dict - Mean predition of the GPE-based error model. - std_pred : dict - standard deviation of the GPE-based error model. - - """ - mean_pred = {} - std_pred = {} - - for Outkey, ValuesDict in self.errorclf_poly.items(): - - pred_mean = np.zeros_like(y_pred[Outkey]) - pred_std = np.zeros_like(y_pred[Outkey]) - - for Inkey, InIdxValues in ValuesDict.items(): - - gp = self.errorclf_poly[Outkey][Inkey] - scaler = self.errorScale[Outkey][Inkey] - - # Transform Samples using scaler - for j, pred in enumerate(y_pred[Outkey]): - BiasInputs = np.hstack((X[Outkey], pred.reshape(-1, 1))) - Samples_S = scaler.transform(BiasInputs) - y_hat, y_std = gp.predict(Samples_S, return_std=True) - pred_mean[j] = y_hat - pred_std[j] = y_std - # pred_mean[j] += pred - - mean_pred[Outkey] = pred_mean - std_pred[Outkey] = pred_std - - return mean_pred, std_pred - - # ------------------------------------------------------------------------- - class auto_vivification(dict): - """ - Implementation of perl's AutoVivification feature. - - Source: https://stackoverflow.com/a/651879/18082457 - """ - - def __getitem__(self, item): - try: - return dict.__getitem__(self, item) - except KeyError: - value = self[item] = type(self)() - return value - - # ------------------------------------------------------------------------- - def copy_meta_model_opts(self): - """ - This method is a convinient function to copy the metamodel options. - - Returns - ------- - new_MetaModelOpts : object - The copied object. - - """ - # TODO: what properties should be moved to the new object? - new_MetaModelOpts = copy.deepcopy(self) - new_MetaModelOpts.input_obj = self.input_obj#InputObj - new_MetaModelOpts.InputSpace = self.InputSpace - #new_MetaModelOpts.InputSpace.meta_Model = 'aPCE' - #new_MetaModelOpts.InputSpace.InputObj = self.input_obj - #new_MetaModelOpts.InputSpace.ndim = len(self.input_obj.Marginals) - new_MetaModelOpts.n_params = len(self.input_obj.Marginals) - #new_MetaModelOpts.InputSpace.hdf5_file = None - - return new_MetaModelOpts - - # ------------------------------------------------------------------------- - def __select_degree(self, ndim, n_samples): - """ - Selects degree based on the number of samples and parameters in the - sequential design. - - Parameters - ---------- - ndim : int - Dimension of the parameter space. - n_samples : int - Number of samples. - - Returns - ------- - deg_array: array - Array containing the arrays. - - """ - # Define the deg_array - max_deg = np.max(self.pce_deg) - min_Deg = np.min(self.pce_deg) - - # TODO: remove the options for sequential? - #nitr = n_samples - self.InputSpace.n_init_samples - - # Check q-norm - if not np.isscalar(self.pce_q_norm): - self.pce_q_norm = np.array(self.pce_q_norm) - else: - self.pce_q_norm = np.array([self.pce_q_norm]) - - def M_uptoMax(maxDeg): - n_combo = np.zeros(maxDeg) - for i, d in enumerate(range(1, maxDeg+1)): - n_combo[i] = math.factorial(ndim+d) - n_combo[i] /= math.factorial(ndim) * math.factorial(d) - return n_combo - - deg_new = max_deg - #d = nitr if nitr != 0 and self.n_params > 5 else 1 - # d = 1 - # min_index = np.argmin(abs(M_uptoMax(max_deg)-ndim*n_samples*d)) - # deg_new = range(1, max_deg+1)[min_index] - - if deg_new > min_Deg and self.pce_reg_method.lower() != 'fastard': - deg_array = np.arange(min_Deg, deg_new+1) - else: - deg_array = np.array([deg_new]) - - return deg_array - - def generate_polynomials(self, max_deg=None): - # Check for InputSpace - if not hasattr(self, 'InputSpace'): - raise AttributeError('Generate or add InputSpace before generating polynomials') - - ndim = self.InputSpace.ndim - # Create orthogonal polynomial coefficients if necessary - if (self.meta_model_type.lower()!='gpe') and max_deg is not None:# and self.input_obj.poly_coeffs_flag: - self.polycoeffs = {} - for parIdx in tqdm(range(ndim), ascii=True, - desc="Computing orth. polynomial coeffs"): - poly_coeffs = apoly_construction( - self.InputSpace.raw_data[parIdx], - max_deg - ) - self.polycoeffs[f'p_{parIdx+1}'] = poly_coeffs - else: - raise AttributeError('MetaModel cannot generate polynomials in the given scenario!') - - # ------------------------------------------------------------------------- - def _compute_pce_moments(self): - """ - Computes the first two moments using the PCE-based meta-model. - - Returns - ------- - pce_means: dict - The first moment (mean) of the surrogate. - pce_stds: dict - The second moment (standard deviation) of the surrogate. - - """ - - # Check if its truly a pce-surrogate - if self.meta_model_type.lower() == 'gpe': - raise AttributeError('Moments can only be computed for pce-type surrogates') - - outputs = self.out_names - pce_means_b = {} - pce_stds_b = {} - - # Loop over bootstrap iterations - for b_i in range(self.n_bootstrap_itrs): - # Loop over the metamodels - coeffs_dicts = self.coeffs_dict[f'b_{b_i+1}'].items() - means = {} - stds = {} - for output, coef_dict in coeffs_dicts: - - pce_mean = np.zeros((len(coef_dict))) - pce_var = np.zeros((len(coef_dict))) - - for index, values in coef_dict.items(): - idx = int(index.split('_')[1]) - 1 - coeffs = self.coeffs_dict[f'b_{b_i+1}'][output][index] - - # Mean = c_0 - if coeffs[0] != 0: - pce_mean[idx] = coeffs[0] - else: - clf_poly = self.clf_poly[f'b_{b_i+1}'][output] - pce_mean[idx] = clf_poly[index].intercept_ - # Var = sum(coeffs[1:]**2) - pce_var[idx] = np.sum(np.square(coeffs[1:])) - - # Save predictions for each output - if self.dim_red_method.lower() == 'pca': - PCA = self.pca[f'b_{b_i+1}'][output] - means[output] = PCA.inverse_transform(pce_mean) - stds[output] = PCA.inverse_transform(np.sqrt(pce_var)) - else: - means[output] = pce_mean - stds[output] = np.sqrt(pce_var) - - # Save predictions for each bootstrap iteration - pce_means_b[b_i] = means - pce_stds_b[b_i] = stds - - # Change the order of nesting - mean_all = {} - for i in sorted(pce_means_b): - for k, v in pce_means_b[i].items(): - if k not in mean_all: - mean_all[k] = [None] * len(pce_means_b) - mean_all[k][i] = v - std_all = {} - for i in sorted(pce_stds_b): - for k, v in pce_stds_b[i].items(): - if k not in std_all: - std_all[k] = [None] * len(pce_stds_b) - std_all[k][i] = v - - # Back transformation if PCA is selected. - pce_means, pce_stds = {}, {} - for output in outputs: - pce_means[output] = np.mean(mean_all[output], axis=0) - pce_stds[output] = np.mean(std_all[output], axis=0) - - return pce_means, pce_stds diff --git a/examples/model-comparison/example_model_comparison.py b/examples/model-comparison/example_model_comparison.py index e712bba8c..f08757032 100644 --- a/examples/model-comparison/example_model_comparison.py +++ b/examples/model-comparison/example_model_comparison.py @@ -23,6 +23,7 @@ import pandas as pd import joblib import sys sys.path.append("../../src/bayesvalidrox/") +sys.path.append("../../src/") from bayesvalidrox.pylink.pylink import PyLinkForwardModel from bayesvalidrox.surrogate_models.inputs import Input @@ -38,7 +39,6 @@ from bayes_inference.bayes_model_comparison import BayesModelComparison from bayesvalidrox.surrogate_models.engine import Engine if __name__ == "__main__": - # Read data sigma = 0.6 data = { @@ -277,10 +277,10 @@ if __name__ == "__main__": "cosine": NL4_engine } - # BME Bootstrap optuions + # BME Bootstrap options opts_bootstrap = { "bootstrap": True, - "n_samples": 1000,#0, + "n_samples": 100,#0,#0, # TODO: difference between this and the n_bootstrap set below? "Discrepancy": DiscrepancyOpts, "emulator": True, "plot_post_pred": False @@ -289,7 +289,7 @@ if __name__ == "__main__": # Run model comparison BayesOpts = BayesModelComparison( justifiability=True, - n_bootstarp=1000,#00, + n_bootstrap=100,#0,#00, just_n_meas=2 ) output_dict = BayesOpts.create_model_comparison( diff --git a/src/bayesvalidrox/bayes_inference/bayes_inference.py b/src/bayesvalidrox/bayes_inference/bayes_inference.py index 888a689f8..cfe51151a 100644 --- a/src/bayesvalidrox/bayes_inference/bayes_inference.py +++ b/src/bayesvalidrox/bayes_inference/bayes_inference.py @@ -218,7 +218,7 @@ class BayesInference: perturbed_data=[], bootstrap_noise=0.05, just_analysis=False, valid_metrics=['BME'], plot_post_pred=True, plot_map_pred=False, max_a_posteriori='mean', - corner_title_fmt='.2e', out_dir = ''): + corner_title_fmt='.2e', out_dir = '', bmc = False): self.engine = engine self.Discrepancy = discrepancy @@ -257,6 +257,7 @@ class BayesInference: self._mean_pce_prior_pred = None self._std_pce_prior_pred = None self.__model_prior_pred = None + self.bmc = bmc # Set True if want to cut short to only Model Comparison # System settings if os.name == 'nt': @@ -400,7 +401,9 @@ class BayesInference: # ---------------- Bootstrap & TOM -------------------- if self.bootstrap or self.bayes_loocv or self.just_analysis: - self.perform_bootstrap(total_sigma2) + self.perform_bootstrap(total_sigma2) + if self.bmc: + return self else: print('No bootstrap for TOM performed!') # TODO: stop the code? Use n_bootstrap = 1? @@ -1101,7 +1104,7 @@ class BayesInference: # Posterior predictive if self.emulator: - if self.inference_method == 'rejection': # TODO: combine these two? Why is there no post_pred_std for rejection sampling? + if self.inference_method.lower() == 'rejection': # TODO: combine these two? Why is there no post_pred_std for rejection sampling? prior_pred = self._mean_pce_prior_pred if self.name.lower() == 'valid': post_pred = self._mean_pce_prior_pred @@ -1112,7 +1115,7 @@ class BayesInference: ) else: # TODO: see emulator version - if self.inference_method == 'rejection': + if self.inference_method.lower() == 'rejection': prior_pred = self.__model_prior_pred if self.name.lower() == 'valid': post_pred = self.__mean_pce_prior_pred, diff --git a/src/bayesvalidrox/bayes_inference/bayes_model_comparison.py b/src/bayesvalidrox/bayes_inference/bayes_model_comparison.py index 769ad2cea..55a35072b 100644 --- a/src/bayesvalidrox/bayes_inference/bayes_model_comparison.py +++ b/src/bayesvalidrox/bayes_inference/bayes_model_comparison.py @@ -9,6 +9,7 @@ import seaborn as sns import matplotlib.patches as patches import matplotlib.colors as mcolors import matplotlib.pylab as plt +import pandas as pd from .bayes_inference import BayesInference # Load the mplstyle @@ -39,7 +40,8 @@ class BayesModelComparison: """ def __init__(self, justifiability=True, perturbed_data=None, - n_bootstrap=1000, data_noise_level=0.01, just_n_meas=2): + n_bootstrap=1000, data_noise_level=0.01, just_n_meas=2, + use_Bayes_settings = True, emulator = True, out_dir = 'Outputs_Comparison/'): # TODO: check valid ranges of the parameters @@ -48,6 +50,17 @@ class BayesModelComparison: self.n_bootstrap = n_bootstrap self.data_noise_level = data_noise_level self.just_n_meas = just_n_meas # TODO: what is this parameter? + self.use_Bayes_settings = use_Bayes_settings + self.emulator = emulator + self.out_dir = out_dir + + # Other parameters + self.n_meas = None + self.justData = None + self.BME_Dict = None + self.set_up = False + self.dtype = None + # -------------------------------------------------------------------------- def create_model_comparison(self, model_dict, opts_dict): @@ -104,6 +117,46 @@ class BayesModelComparison: output['Model weights JA'] = model_weights_dict_ja return output + + def setup(self, model_dict): + """ + Initialize parameters that are needed for all types of model comparison + + Returns + ------- + None. + + """ + + if not isinstance(model_dict, dict): + raise Exception("To run model comparsion, you need to pass a " + "dictionary of models.") + + # Extract model names + self.model_names = [*model_dict] + + # Compute total number of the measurement points + # TODO: there could be a different option for this here + Engine = list(model_dict.items())[0][1] + Engine.Model.read_observation() + self.n_meas = Engine.Model.n_obs + + # Find n_bootstrap + if self.perturbed_data is not None: + self.n_bootstrap = self.perturbed_data.shape[0] + + # Output directory + os.makedirs(self.out_dir, exist_ok=True) + + # System settings + if os.name == 'nt': + print('') + print('WARNING: Performing the inference on windows can lead to reduced accuracy!') + print('') + self.dtype=np.longdouble + else: + self.dtype=np.float128 + # -------------------------------------------------------------------------- def compare_models(self, model_dict, opts_dict, justifiability=False): @@ -133,29 +186,12 @@ class BayesModelComparison: """ - if not isinstance(model_dict, dict): - raise Exception("To run model comparsion, you need to pass a " - "dictionary of models.") - - # Extract model names - self.model_names = [*model_dict] - - # Compute total number of the measurement points - # TODO: there could be a different option for this here - Engine = list(model_dict.items())[0][1] - Engine.Model.read_observation() - self.n_meas = Engine.Model.n_obs - + self.setup(model_dict) + # ----- Generate data ----- - # Find n_bootstrap - if self.perturbed_data is None: - n_bootstrap = self.n_bootstrap - else: - n_bootstrap = self.perturbed_data.shape[0] - # Create dataset - justData = self.generate_dataset( - model_dict, justifiability, n_bootstarp=n_bootstrap) + self.justData = self.generate_dataset( + model_dict, justifiability, n_bootstrap=self.n_bootstrap) # Run create Interface for each model self.bayes_dict = {} @@ -173,6 +209,7 @@ class BayesModelComparison: BayesOpts.bootstrap = True BayesOpts.n_bootstrap_itrs = 10 BayesOpts.bootstrap_noise = 0.05 + BayesOpts.bmc = True # Set the MCMC parameters BayesOpts.inference_method = "MCMC" @@ -193,7 +230,7 @@ class BayesModelComparison: setattr(BayesOpts, key, value) # Pass justifiability data as perturbed data - BayesOpts.perturbed_data = justData + BayesOpts.perturbed_data = self.justData BayesOpts.just_analysis = justifiability self.bayes_dict[model] = BayesOpts.create_inference() @@ -202,11 +239,11 @@ class BayesModelComparison: # Compute model weights self.BME_Dict = dict() for modelName, bayesObj in self.bayes_dict.items(): - self.BME_Dict[modelName] = np.exp(bayesObj.log_BME, dtype=np.longdouble)#float128) + self.BME_Dict[modelName] = np.exp(bayesObj.log_BME, dtype=self.dtype) # BME correction in BayesInference class self.model_weights = self.cal_model_weight( - self.BME_Dict, justifiability, n_bootstarp=n_bootstrap) + self.BME_Dict, justifiability, n_bootstrap=self.n_bootstrap) # Plot model weights if justifiability: @@ -233,6 +270,84 @@ class BayesModelComparison: return self.bayes_dict, model_weights_dict + + # ------------------------------------------------------------------------- + def justifiability_analysis(self, model_dict, opts_dict): + """ + Perform justifiability analysis by calculating the confusion matrix + + Parameters + ---------- + model_dict : dict + A dictionary including the metamodels. + opts_dict : dict + A dictionary given the `BayesInference` options. + justifiability : bool, optional + Whether to perform the justifiability analysis. The default is + `False`. + + Returns + ------- + None + + """ + # Do setup + if self.n_meas is None: + self.setup(model_dict) + + # Extend model names + model_names = self.model_names + if model_names[0]!= 'Observation': + model_names.insert(0, 'Observation') + + # Generate data + # TODO: generate the datset only if it does not exist yet + self.justData = self.generate_dataset( + model_dict, True, n_bootstrap=self.n_bootstrap) + + # Run inference for each model + self.bayes_dict = {} + for model in model_dict.keys(): + print("-"*20) + print("Bayesian inference of {}.\n".format(model)) + BayesOpts = BayesInference(model_dict[model]) + + # Set BayesInference options + for key, value in opts_dict.items(): + if key in BayesOpts.__dict__.keys(): + if key == "Discrepancy" and isinstance(value, dict): + setattr(BayesOpts, key, value[model]) + else: + setattr(BayesOpts, key, value) + + # Pass justifiability data as perturbed data + BayesOpts.bmc = True + BayesOpts.emulator= self.emulator + BayesOpts.just_analysis = True + BayesOpts.perturbed_data = self.justData + + self.bayes_dict[model] = BayesOpts.create_inference() + print("-"*20) + + # Compute model weights + self.BME_Dict = dict() + for modelName, bayesObj in self.bayes_dict.items(): + self.BME_Dict[modelName] = np.exp(bayesObj.log_BME, dtype=self.dtype) + + # BME correction in BayesInference class + self.model_weights = self.cal_model_weight( + self.BME_Dict, True, n_bootstrap=self.n_bootstrap) + + # Split the model weights and save in a dict + list_ModelWeights = np.split( + self.model_weights, self.model_weights.shape[1]/self.n_meas, axis=1) + self.model_weights_dict = {key: weights for key, weights in + zip(model_names, list_ModelWeights)} + + # Plot model weights + self.plot_just_analysis(self.model_weights_dict) + + # ------------------------------------------------------------------------- def generate_dataset(self, model_dict, justifiability=False, n_bootstrap=1): @@ -269,22 +384,23 @@ class BayesModelComparison: # Only for Bayes Factor if not justifiability: - return self.perturbed_data + return self.perturbed_data # TODO: why return this as self... and the other one not? Is this used again? # Evaluate metamodel runs = {} - for key, metaModel in model_dict.items(): + for key, metaModel in model_dict.items(): # TODO: add check for emulator vs model y_hat, _ = metaModel.eval_metamodel(nsamples=n_bootstrap) runs[key] = y_hat # Generate data for i in range(n_bootstrap): - y_data = self.perturbed_data[i].reshape(1, -1) - justData = np.tril(np.repeat(y_data, y_data.shape[1], axis=0)) + y_data = self.perturbed_data[i].reshape(1, -1)# makes every entry in self.perturbed_data 2D by adding one dim outside + justData = np.tril(np.repeat(y_data, y_data.shape[1], axis=0)) # Lower triangle matrix from repeats of y_data + # TODO: why triangle matrix here? # Use surrogate runs for data-generating process for key, metaModel in model_dict.items(): model_data = np.array( - [runs[key][out][i] for out in out_names]).reshape(y_data.shape) + [runs[key][out][i] for out in out_names]).reshape(y_data.shape) # reshapes model runs to match y_data justData = np.vstack(( justData, np.tril(np.repeat(model_data, model_data.shape[1], axis=0)) @@ -302,7 +418,7 @@ class BayesModelComparison: # ------------------------------------------------------------------------- def __perturb_data(self, data, output_names, n_bootstrap, noise_level): """ - Returns an array with n_bootstrap_itrs rowsof perturbed data. + Returns an array with n_bootstrap_itrs rows of perturbed data. The first row includes the original observation data. If `self.bayes_loocv` is True, a 2d-array will be returned with repeated rows and zero diagonal entries. @@ -388,9 +504,7 @@ class BayesModelComparison: None. """ - - directory = 'Outputs_Comparison/' - os.makedirs(directory, exist_ok=True) + Color = [*mcolors.TABLEAU_COLORS] names = [*model_weights_dict] @@ -398,6 +512,7 @@ class BayesModelComparison: for name in names: fig, ax = plt.subplots() for i, model in enumerate(model_names[1:]): + #print(model, i) plt.plot(list(range(1, self.n_meas+1)), model_weights_dict[name][i], color=Color[i], marker='o', @@ -410,31 +525,65 @@ class BayesModelComparison: ax.set_xticks(list(range(1, self.n_meas+1))) plt.legend(loc="best") fig.savefig( - f'{directory}modelWeights_{name}.svg', bbox_inches='tight' + f'{self.out_dir}modelWeights_{name}.svg', bbox_inches='tight' ) plt.close() # Confusion matrix for some measurement points - epsilon = 1 if self.just_n_meas != 1 else 0 - for index in range(0, self.n_meas+epsilon, self.just_n_meas): - weights = np.array( - [model_weights_dict[key][:, index] for key in model_weights_dict] - ) - g = sns.heatmap( - weights.T, annot=True, cmap='Blues', xticklabels=model_names, - yticklabels=model_names[1:], annot_kws={"size": 24} - ) - - # x axis on top - g.xaxis.tick_top() - g.xaxis.set_label_position('top') - g.set_xlabel(r"\textbf{Data generated by:}", labelpad=15) - g.set_ylabel(r"\textbf{Model weight for:}", labelpad=15) - g.figure.savefig( - f"{directory}confusionMatrix_ND_{index+1}.pdf", - bbox_inches='tight' - ) - plt.close() + if 0: + epsilon = 1 if self.just_n_meas != 1 else 0 # TODO: to what does this extend this? + for index in range(0, self.n_meas+epsilon, self.just_n_meas): + weights = np.array( + [model_weights_dict[key][:, index] for key in model_weights_dict] + ) + g = sns.heatmap( + weights.T, annot=True, cmap='Blues', xticklabels=model_names, + yticklabels=model_names[1:], annot_kws={"size": 24} + ) + + # x axis on top + g.xaxis.tick_top() + g.xaxis.set_label_position('top') + g.set_xlabel(r"\textbf{Data generated by:}", labelpad=15) + g.set_ylabel(r"\textbf{Model weight for:}", labelpad=15) + g.figure.savefig( + f"{self.out_dir}confusionMatrix_ND_{index+1}.pdf", + bbox_inches='tight' + ) + plt.close() + + + # Confusion matrix over all measurement points + cf_m = pd.DataFrame() + cf_m['Generated by'] = model_names + # Iterate over eval models + for i in range(len(names)): + # Ignore 'Observation', this not in the model_weights_dict + # TODO: how to change the code so that it is included as well? + if i==0: + continue + avg = [] + for n in names: + avg.append(np.sum(self.model_weights_dict[n][i-1])) + # Norm to sum to 1 over generated by + cf_m[names[i]] = avg/self.n_meas + + # Plot the averaged confusion matrix + out_names = names[1:] + cf = cf_m[out_names].to_numpy() + g = sns.heatmap(cf.T, annot=True, cmap='Blues', xticklabels=model_names, + yticklabels=model_names[1:], annot_kws={"size": 24}) + g.xaxis.tick_top() + g.xaxis.set_label_position('top') + g.set_xlabel(r"\textbf{Data generated by:}", labelpad=15) + g.set_ylabel(r"\textbf{Model weight for:}", labelpad=15) + g.figure.savefig( + f"{self.out_dir}confusionMatrix_full.pdf", + bbox_inches='tight' + ) + plt.close() + + # ------------------------------------------------------------------------- def plot_model_weights(self, model_weights, plot_name): diff --git a/src/bayesvalidrox/bayes_inference/mcmc.py b/src/bayesvalidrox/bayes_inference/mcmc.py index a672583ba..f4d1524d3 100755 --- a/src/bayesvalidrox/bayes_inference/mcmc.py +++ b/src/bayesvalidrox/bayes_inference/mcmc.py @@ -94,103 +94,6 @@ def gelman_rubin(chain, return_var=False): R_hat = np.sqrt(var_θ / W) return R_hat - -# ------------------------------------------------------------------------- -def _iterative_scheme(N1, N2, q11, q12, q21, q22, r0, neff, tol, - maxiter, criterion): - """ - Iterative scheme as proposed in Meng and Wong (1996) to estimate the - marginal likelihood - - """ - l1 = q11 - q12 - l2 = q21 - q22 - # To increase numerical stability, - # subtracting the median of l1 from l1 & l2 later - lstar = np.median(l1) - s1 = neff/(neff + N2) - s2 = N2/(neff + N2) - r = r0 - r_vals = [r] - logml = np.log(r) + lstar - criterion_val = 1 + tol - - i = 0 - while (i <= maxiter) & (criterion_val > tol): - rold = r - logmlold = logml - numi = np.exp(l2 - lstar)/(s1 * np.exp(l2 - lstar) + s2 * r) - deni = 1/(s1 * np.exp(l1 - lstar) + s2 * r) - if np.sum(~np.isfinite(numi))+np.sum(~np.isfinite(deni)) > 0: - warnings.warn( - """Infinite value in iterative scheme, returning NaN. - Try rerunning with more samples.""") - r = (N1/N2) * np.sum(numi)/np.sum(deni) - r_vals.append(r) - logml = np.log(r) + lstar - i += 1 - if criterion == 'r': - criterion_val = np.abs((r - rold)/r) - elif criterion == 'logml': - criterion_val = np.abs((logml - logmlold)/logml) - - if i >= maxiter: - return dict(logml=np.NaN, niter=i, r_vals=np.asarray(r_vals)) - else: - return dict(logml=logml, niter=i) - -# ------------------------------------------------------------------------- -def _my_ESS(x): - """ - Compute the effective sample size of estimand of interest. - Vectorised implementation. - https://github.com/jwalton3141/jwalton3141.github.io/blob/master/assets/posts/ESS/rwmh.py - - - Parameters - ---------- - x : array of shape (n_walkers, n_steps) - MCMC Samples. - - Returns - ------- - int - Effective sample size. - - """ - # Format the intput - try: - x = np.array(x) - except(AttributeError): - print('The input cannot be formatted!') - if x.ndim >2 or x.ndim <2: - raise AttributeError('The input should be 2D!') - m_chains, n_iters = x.shape - - def variogram(t): - variogram = ((x[:, t:] - x[:, :(n_iters - t)])**2).sum() - variogram /= (m_chains * (n_iters - t)) - return variogram - - post_var = gelman_rubin(x, return_var=True) - - t = 1 - rho = np.ones(n_iters) - negative_autocorr = False - - # Iterate until the sum of consecutive estimates of autocorrelation is - # negative - while not negative_autocorr and (t < n_iters): - rho[t] = 1 - variogram(t) / (2 * post_var) - - if not t % 2: - negative_autocorr = sum(rho[t-1:t+1]) < 0 - - t += 1 - - return int(m_chains*n_iters / (1 + 2*rho[1:t].sum())) - - class MCMC: """ A class for bayesian inference via a Markov-Chain Monte-Carlo (MCMC) @@ -306,7 +209,7 @@ class MCMC: BayesObj.engine.MetaModel.ExpDesign.bound_tuples = bound_tuples # Check if sigma^2 needs to be inferred - if Discrepancy.opt_sigma != 'B': + if Discrepancy.opt_sigma != 'B': # TODO: why !='B'? sigma2_samples = Discrepancy.get_sample(self.nwalkers) # Update initsamples @@ -784,105 +687,3 @@ class MCMC: self.BayesOpts.BiasInputs, y_map, name='Calib') return error_MetaModel - - # ------------------------------------------------------------------------- - def marginal_llk_emcee(self, sampler, nburn=None, logp=None, maxiter=1000): - """ - The Bridge Sampling Estimator of the Marginal Likelihood based on - https://gist.github.com/junpenglao/4d2669d69ddfe1d788318264cdcf0583 - - Parameters - ---------- - sampler : TYPE - MultiTrace, result of MCMC run. - nburn : int, optional - Number of burn-in step. The default is None. - logp : TYPE, optional - Model Log-probability function. The default is None. - maxiter : int, optional - Maximum number of iterations. The default is 1000. - - Returns - ------- - marg_llk : dict - Estimated Marginal log-Likelihood. - - """ - r0, tol1, tol2 = 0.5, 1e-10, 1e-4 - - if logp is None: - logp = sampler.log_prob_fn - - # Split the samples into two parts - # Use the first 50% for fiting the proposal distribution - # and the second 50% in the iterative scheme. - if nburn is None: - mtrace = sampler.chain - else: - mtrace = sampler.chain[:, nburn:, :] - - nchain, len_trace, nrofVars = mtrace.shape - - N1_ = len_trace // 2 - N1 = N1_*nchain - N2 = len_trace*nchain - N1 - - samples_4_fit = np.zeros((nrofVars, N1)) - samples_4_iter = np.zeros((nrofVars, N2)) - effective_n = np.zeros((nrofVars)) - - # matrix with already transformed samples - for var in range(nrofVars): - - # for fitting the proposal - x = mtrace[:, :N1_, var] - - samples_4_fit[var, :] = x.flatten() - # for the iterative scheme - x2 = mtrace[:, N1_:, var] - samples_4_iter[var, :] = x2.flatten() - - # effective sample size of samples_4_iter, scalar - effective_n[var] = _my_ESS(x2) - - # median effective sample size (scalar) - neff = np.median(effective_n) - - # get mean & covariance matrix and generate samples from proposal - m = np.mean(samples_4_fit, axis=1) - V = np.cov(samples_4_fit) - L = chol(V, lower=True) - - # Draw N2 samples from the proposal distribution - gen_samples = m[:, None] + np.dot( - L, st.norm.rvs(0, 1, size=samples_4_iter.shape) - ) - - # Evaluate proposal distribution for posterior & generated samples - q12 = st.multivariate_normal.logpdf(samples_4_iter.T, m, V) - q22 = st.multivariate_normal.logpdf(gen_samples.T, m, V) - - # Evaluate unnormalized posterior for posterior & generated samples - q11 = logp(samples_4_iter.T) - q21 = logp(gen_samples.T) - - # Run iterative scheme: - tmp = _iterative_scheme( - N1, N2, q11, q12, q21, q22, r0, neff, tol1, maxiter, 'r' - ) - if ~np.isfinite(tmp['logml']): - warnings.warn( - "Logml could not be estimated within maxiter, rerunning with " - "adjusted starting value. Estimate might be more variable than" - " usual.") - # use geometric mean as starting value - r0_2 = np.sqrt(tmp['r_vals'][-2]*tmp['r_vals'][-1]) - tmp = _iterative_scheme( - q11, q12, q21, q22, r0_2, neff, tol2, maxiter, 'logml' - ) - - marg_llk = dict( - logml=tmp['logml'], niter=tmp['niter'], method="normal", - q11=q11, q12=q12, q21=q21, q22=q22 - ) - return marg_llk diff --git a/src/bayesvalidrox/surrogate_models/engine.py b/src/bayesvalidrox/surrogate_models/engine.py index 387cec501..a907625fd 100644 --- a/src/bayesvalidrox/surrogate_models/engine.py +++ b/src/bayesvalidrox/surrogate_models/engine.py @@ -145,6 +145,9 @@ class Engine(): self.parallel = False self.trained = False + # Init other parameters + self.out_names = None + def start_engine(self) -> None: """ Do all the preparations that need to be run before the actual training @@ -171,6 +174,8 @@ class Engine(): None """ + if self.out_names == 'None': + self.start_engine() ExpDesign = self.ExpDesign MetaModel = self.MetaModel @@ -1155,13 +1160,13 @@ class Engine(): Model = self.Model max_func_itr = self.ExpDesign.max_func_itr - if method == 'VarOptDesign': + if method.lower() == 'varoptdesign': Res_Global = opt.dual_annealing(self.util_VarBasedDesign, bounds=Bounds, args=(Model, var), maxfun=max_func_itr) - elif method == 'BayesOptDesign': + elif method.lower() == 'bayesoptdesign': Res_Global = opt.dual_annealing(self.util_BayesianDesign, bounds=Bounds, args=(Model, sigma2Dict, var), @@ -1437,8 +1442,8 @@ class Engine(): # ----------------------------------------- # --------- EXPLOITATION METHODS ---------- # ----------------------------------------- - if exploit_method == 'BayesOptDesign' or\ - exploit_method == 'BayesActDesign': + if exploit_method.lower() == 'bayesoptdesign' or\ + exploit_method.lower() == 'bayesactdesign': # ------- Calculate Exoploration weight ------- # Compute exploration weight based on trade off scheme @@ -1555,7 +1560,7 @@ class Engine(): Xnew = finalCandidates[sorted_idxtotalScore[:n_new_samples]] - elif exploit_method == 'VarOptDesign': + elif exploit_method.lower() == 'varoptdesign': # ------- EXPLOITATION: VarOptDesign ------- UtilMethod = var @@ -1662,7 +1667,7 @@ class Engine(): # select the requested number of samples Xnew[i] = newSamples[np.argmax(maxminScore)] - elif exploit_method == 'alphabetic': + elif exploit_method.lower() == 'alphabetic': # ------- EXPLOITATION: ALPHABETIC ------- Xnew = self.util_AlphOptDesign(allCandidates, var) diff --git a/tests/test_BayesInference.py b/tests/test_BayesInference.py index 70bcdbc40..1a4283325 100644 --- a/tests/test_BayesInference.py +++ b/tests/test_BayesInference.py @@ -86,7 +86,7 @@ def test_BayesInference() -> None: #%% Test create_inference # TODO: disabled this test! -def itest_create_inference() -> None: +def test_create_inference() -> None: """ Run inference """ @@ -1042,27 +1042,27 @@ if __name__ == '__main__': expdes = ExpDesigns(inp) expdes.init_param_space(max_deg=1) expdes.n_init_samples = 2 - #expdes.n_max_samples = 4 + expdes.n_max_samples = 4 expdes.X = np.array([[0],[1],[0.5]]) expdes.Y = {'Z':[[0.4],[0.5],[0.45]]} - #expdes.x_values = np.array([0]) # Error in plots if this is not + expdes.x_values = np.array([0]) # Error in plots if this is not mm = MetaModel(inp) mm.n_params = 1 mm.fit(expdes.X, expdes.Y) - #expdes.generate_ED(expdes.n_init_samples, transform=True, max_pce_deg=np.max(1)) + expdes.generate_ED(expdes.n_init_samples, transform=True, max_pce_deg=np.max(1)) #y_hat, y_std = mm.eval_metamodel(prior_samples) mod = PL() - #mod.observations = {'Z':np.array([0.45])} - #mod.observations = {'Z':np.array([0.45]), 'x_values':np.array([0])} # Error if x_values not given - #mod.Output.names = ['Z'] - #mod.n_obs = 1 + mod.observations = {'Z':np.array([0.45])} + mod.observations = {'Z':np.array([0.45]), 'x_values':np.array([0])} # Error if x_values not given + mod.Output.names = ['Z'] + mod.n_obs = 1 engine = Engine(mm, mod, expdes) - #sigma2Dict = {'Z':np.array([0.05])} - #sigma2Dict = pd.DataFrame(sigma2Dict, columns = ['Z']) + sigma2Dict = {'Z':np.array([0.05])} + sigma2Dict = pd.DataFrame(sigma2Dict, columns = ['Z']) obsData = pd.DataFrame({'Z':np.array([0.45]), 'x_values':np.array([0])}, columns=mod.Output.names) DiscrepancyOpts = Discrepancy('') DiscrepancyOpts.type = 'Gaussian' @@ -1071,12 +1071,12 @@ if __name__ == '__main__': bi = BayesInference(engine) bi.Discrepancy = DiscrepancyOpts # Error if this not class 'DiscrepancyOpts' or dict(?) - #bi.bootstrap = True # Error if this and bayes_loocv and just_analysis are all False? - #bi.plot_post_pred = False # Remaining issue in the violinplot - #bi.error_model = True - #bi.bayes_loocv = True - #if 0: - # bi.create_inference() + bi.bootstrap = True # Error if this and bayes_loocv and just_analysis are all False? + bi.plot_post_pred = False # Remaining issue in the violinplot + bi.error_model = False + bi.bayes_loocv = True + if 1: + bi.create_inference() #opt_sigma = 'B' #total_sigma2s = {'Z':np.array([0.15])} #data = pd.DataFrame() diff --git a/tests/test_MCMC.py b/tests/test_MCMC.py index 762ff1ae8..4b4448fd6 100644 --- a/tests/test_MCMC.py +++ b/tests/test_MCMC.py @@ -142,17 +142,15 @@ def test_gelman_rubin() -> None: """ Calculate gelman-rubin """ - chain = [[[1],[2]]] - assert gelman_rubin(chain) == np.array([None]) + gelman_rubin(chain) def test_gelman_rubin_returnvar() -> None: """ Calculate gelman-rubin returning var """ - chain = [[[1],[2]]] - assert gelman_rubin(chain, return_var = True) == np.array([None]) + gelman_rubin(chain, return_var = True) #%% Test marginal_llk_emcee -- GitLab