From 99013313b5342dcd82286d8bd23e187c1ab3be28 Mon Sep 17 00:00:00 2001
From: kohlhaasrebecca <rebecca.kohlhaas@outlook.com>
Date: Wed, 12 Jun 2024 10:50:39 +0200
Subject: [PATCH] Small fixes, start on ModelComp without MetaModel

---
 docs/logo/BVRLogoV03.png                      |  Bin 0 -> 36346 bytes
 docs/logo/BVRLogoV03_longtext.png             |  Bin 0 -> 102839 bytes
 docs/logo/BVRLogoV03_shorttext.png            |  Bin 0 -> 81189 bytes
 .../example_model_comparison.py               |    2 +-
 examples/only-model/L2_model.py               |   57 +
 examples/only-model/NL2_model.py              |   57 +
 examples/only-model/NL4_model.py              |   57 +
 examples/only-model/bayesvalidrox/__init__.py |   23 -
 .../__pycache__/__init__.cpython-311.pyc      |  Bin 974 -> 0 bytes
 .../bayesvalidrox/bayes_inference/__init__.py |    9 -
 .../__pycache__/__init__.cpython-311.pyc      |  Bin 379 -> 0 bytes
 .../bayes_inference.cpython-311.pyc           |  Bin 61058 -> 0 bytes
 .../bayes_model_comparison.cpython-311.pyc    |  Bin 28956 -> 0 bytes
 .../__pycache__/discrepancy.cpython-311.pyc   |  Bin 4566 -> 0 bytes
 .../__pycache__/mcmc.cpython-311.pyc          |  Bin 35652 -> 0 bytes
 .../bayes_inference/bayes_inference.py        | 1537 ------------
 .../bayes_inference/bayes_model_comparison.py |  714 ------
 .../bayes_inference/discrepancy.py            |   99 -
 .../bayesvalidrox/bayes_inference/mcmc.py     |  909 -------
 .../bayesvalidrox/bayesvalidrox.mplstyle      |   16 -
 examples/only-model/bayesvalidrox/desktop.ini |    2 -
 .../bayesvalidrox/post_processing/__init__.py |    7 -
 .../__pycache__/__init__.cpython-311.pyc      |  Bin 320 -> 0 bytes
 .../post_processing.cpython-311.pyc           |  Bin 58896 -> 0 bytes
 .../post_processing/post_processing.py        | 1352 ----------
 .../bayesvalidrox/pylink/__init__.py          |    7 -
 .../__pycache__/__init__.cpython-311.pyc      |  Bin 306 -> 0 bytes
 .../pylink/__pycache__/pylink.cpython-311.pyc |  Bin 30927 -> 0 bytes
 .../only-model/bayesvalidrox/pylink/pylink.py |  664 -----
 .../surrogate_models/__init__.py              |    7 -
 .../__pycache__/__init__.cpython-311.pyc      |  Bin 317 -> 0 bytes
 .../apoly_construction.cpython-311.pyc        |  Bin 5085 -> 0 bytes
 .../__pycache__/bayes_linear.cpython-311.pyc  |  Bin 21670 -> 0 bytes
 .../__pycache__/eval_rec_rule.cpython-311.pyc |  Bin 8179 -> 0 bytes
 .../__pycache__/exp_designs.cpython-311.pyc   |  Bin 29639 -> 0 bytes
 .../__pycache__/exploration.cpython-311.pyc   |  Bin 12548 -> 0 bytes
 .../__pycache__/glexindex.cpython-311.pyc     |  Bin 10191 -> 0 bytes
 .../__pycache__/inputs.cpython-311.pyc        |  Bin 2846 -> 0 bytes
 .../meta_model_engine.cpython-311.pyc         |  Bin 88102 -> 0 bytes
 ...rthogonal_matching_pursuit.cpython-311.pyc |  Bin 14816 -> 0 bytes
 .../__pycache__/reg_fast_ard.cpython-311.pyc  |  Bin 19769 -> 0 bytes
 .../reg_fast_laplace.cpython-311.pyc          |  Bin 19013 -> 0 bytes
 .../surrogate_models.cpython-311.pyc          |  Bin 61462 -> 0 bytes
 .../surrogate_models/adaptPlot.py             |  109 -
 .../surrogate_models/apoly_construction.py    |  122 -
 .../surrogate_models/bayes_linear.py          |  523 ----
 .../surrogate_models/desktop.ini              |    2 -
 .../surrogate_models/eval_rec_rule.py         |  197 --
 .../surrogate_models/exp_designs.py           |  737 ------
 .../surrogate_models/exploration.py           |  468 ----
 .../surrogate_models/glexindex.py             |  210 --
 .../bayesvalidrox/surrogate_models/inputs.py  |   76 -
 .../surrogate_models/meta_model_engine.py     | 2175 ----------------
 .../orthogonal_matching_pursuit.py            |  366 ---
 .../surrogate_models/reg_fast_ard.py          |  475 ----
 .../surrogate_models/reg_fast_laplace.py      |  452 ----
 .../surrogate_models/sequential_design.py     | 2187 -----------------
 .../surrogate_models/surrogate_models.py      | 1498 -----------
 examples/only-model/data/synth_data.mat       |  Bin 0 -> 364 bytes
 .../test_analytical_function_noMetaMod.py     |  326 ++-
 .../bayes_inference/bayes_model_comparison.py |    4 +-
 src/bayesvalidrox/bayes_inference/mcmc.py     |    7 +-
 src/bayesvalidrox/pylink/pylink.py            |   12 +-
 src/bayesvalidrox/surrogate_models/engine.py  |   42 +-
 64 files changed, 419 insertions(+), 15088 deletions(-)
 create mode 100644 docs/logo/BVRLogoV03.png
 create mode 100644 docs/logo/BVRLogoV03_longtext.png
 create mode 100644 docs/logo/BVRLogoV03_shorttext.png
 create mode 100644 examples/only-model/L2_model.py
 create mode 100644 examples/only-model/NL2_model.py
 create mode 100644 examples/only-model/NL4_model.py
 delete mode 100644 examples/only-model/bayesvalidrox/__init__.py
 delete mode 100644 examples/only-model/bayesvalidrox/__pycache__/__init__.cpython-311.pyc
 delete mode 100644 examples/only-model/bayesvalidrox/bayes_inference/__init__.py
 delete mode 100644 examples/only-model/bayesvalidrox/bayes_inference/__pycache__/__init__.cpython-311.pyc
 delete mode 100644 examples/only-model/bayesvalidrox/bayes_inference/__pycache__/bayes_inference.cpython-311.pyc
 delete mode 100644 examples/only-model/bayesvalidrox/bayes_inference/__pycache__/bayes_model_comparison.cpython-311.pyc
 delete mode 100644 examples/only-model/bayesvalidrox/bayes_inference/__pycache__/discrepancy.cpython-311.pyc
 delete mode 100644 examples/only-model/bayesvalidrox/bayes_inference/__pycache__/mcmc.cpython-311.pyc
 delete mode 100644 examples/only-model/bayesvalidrox/bayes_inference/bayes_inference.py
 delete mode 100644 examples/only-model/bayesvalidrox/bayes_inference/bayes_model_comparison.py
 delete mode 100644 examples/only-model/bayesvalidrox/bayes_inference/discrepancy.py
 delete mode 100644 examples/only-model/bayesvalidrox/bayes_inference/mcmc.py
 delete mode 100644 examples/only-model/bayesvalidrox/bayesvalidrox.mplstyle
 delete mode 100644 examples/only-model/bayesvalidrox/desktop.ini
 delete mode 100644 examples/only-model/bayesvalidrox/post_processing/__init__.py
 delete mode 100644 examples/only-model/bayesvalidrox/post_processing/__pycache__/__init__.cpython-311.pyc
 delete mode 100644 examples/only-model/bayesvalidrox/post_processing/__pycache__/post_processing.cpython-311.pyc
 delete mode 100644 examples/only-model/bayesvalidrox/post_processing/post_processing.py
 delete mode 100644 examples/only-model/bayesvalidrox/pylink/__init__.py
 delete mode 100644 examples/only-model/bayesvalidrox/pylink/__pycache__/__init__.cpython-311.pyc
 delete mode 100644 examples/only-model/bayesvalidrox/pylink/__pycache__/pylink.cpython-311.pyc
 delete mode 100644 examples/only-model/bayesvalidrox/pylink/pylink.py
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/__init__.py
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/__pycache__/__init__.cpython-311.pyc
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/__pycache__/apoly_construction.cpython-311.pyc
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/__pycache__/bayes_linear.cpython-311.pyc
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/__pycache__/eval_rec_rule.cpython-311.pyc
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/__pycache__/exp_designs.cpython-311.pyc
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/__pycache__/exploration.cpython-311.pyc
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/__pycache__/glexindex.cpython-311.pyc
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/__pycache__/inputs.cpython-311.pyc
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/__pycache__/meta_model_engine.cpython-311.pyc
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/__pycache__/orthogonal_matching_pursuit.cpython-311.pyc
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/__pycache__/reg_fast_ard.cpython-311.pyc
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/__pycache__/reg_fast_laplace.cpython-311.pyc
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/__pycache__/surrogate_models.cpython-311.pyc
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/adaptPlot.py
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/apoly_construction.py
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/bayes_linear.py
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/desktop.ini
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/eval_rec_rule.py
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/exp_designs.py
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/exploration.py
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/glexindex.py
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/inputs.py
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/meta_model_engine.py
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/orthogonal_matching_pursuit.py
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/reg_fast_ard.py
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/reg_fast_laplace.py
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/sequential_design.py
 delete mode 100644 examples/only-model/bayesvalidrox/surrogate_models/surrogate_models.py
 create mode 100644 examples/only-model/data/synth_data.mat

diff --git a/docs/logo/BVRLogoV03.png b/docs/logo/BVRLogoV03.png
new file mode 100644
index 0000000000000000000000000000000000000000..b68ce44489d73ee4251a723dfcf0e9e5c8c36d64
GIT binary patch
literal 36346
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

literal 0
HcmV?d00001

diff --git a/docs/logo/BVRLogoV03_longtext.png b/docs/logo/BVRLogoV03_longtext.png
new file mode 100644
index 0000000000000000000000000000000000000000..9cc47ce15481d9e16d1661682e27c97034755d4d
GIT binary patch
literal 102839
zcmcG#XH-*Z*FTKID5H+xfE1|~BmzRD_h3T=BuMW;rAhA)N<c+KqzNdYhu(`w2_=A1
zLT{l-4G=m~LPAS`{0}pCdEO7tdOp3b#ahD2xpv?CxA(ph_6(|e=>q2kIy$;bYEK^N
z(9tpY($W29{>M2wx-(C#j`e{DXFPONAJCQdajycu{BC<+^FAG2dGy7j7iWRr&$~V`
z_MoF<|LgSUOqT#jnU0Q@qxR^&9vt>-njwK}WaQlQy9u1Xo%!whTpo-4wddD7haBlQ
zXV#pz>U=D9e~tK^8TymMKd0))Id-#Gx#-`2yMFI>#w}06mr>6LD;WfFno@;r{CJTB
zuICkhWF?-eh^HS-@wb)4{rY9BmZb^s@ZWzs4!S2`x_8654d=}Ldp^0zxZE|%=Wgs-
zky@$ilPvX>rCXTD&3VYC+|h3J_!VzbnXd_5N3JF{(yT8O_VpDksmWK0?sERO!duGQ
z<?;GoS`6p!o%>_JCcts=vx!Un(g^))u(`S|&-Zp+m?s#8xZ`qx4z4Zl*+~fCUeq@p
znXkgA(ak>g9f<`W9-I&PR+z&DAELYVCHDSB8<N{i`7F;rX%^1Ayfw2AW**VGe!ay9
zz9A1UYoaNg7;YA9OlJB@oVkbGE9))SFCzKTu}t(W^`52c&b90_uS$#lOVx9GiAu*S
zy=pL4#xjOwexK~>JLv9j5j@3rzfUD)slr(cd37-N0<X^J>N&#AoV(oLA31GR_a>(%
zk?+ZegkBMm*_Y@*{Iy`#Y6n^OmYKV*k~b}bKk5j5UojHtg696dY|c$E4IV3SRHUIQ
zcGqPFf@AjXI4Zf`WWx-=)J@^8BCDIW{P8sk|2^d+nM1dDQEE4`o%A(xM*||N^X=rd
zO6QVAW_OXx0!<^by55(RYRtq<lL)I))YmNU*lqm7U36X&<>g=KW!xQ3q?;kfjt4D1
zyisMw`#ldCu@od%FSN&@^jxsN*_rRBo>W_N9m=a59leljVrSfVt(*b>`7Z~^iS5O8
zZ#!e5#2#A_FqR%J4B^Fne8guj_nJXd{ZOaeg%;=(=}T9Cd?uqhXnm>vx(D@pZlNIC
z>ZZd0^~b3K%GSHAAP&BRJl~rpm$j&*@=x(z+a{go<Xu<kHkE#wM>ibr`ER!Qs4VQg
z(bU(yW1kg<(wQDh-wz%N7~O!4ed!Ds-Fd0-S|;`G1{87y*S&b=S2a_bcjqzJYM>-O
z)#@Ma`9~0!{FE2$A?tg3>)+zpC(lf!MbjI)yV0ShW#(7u1l9s&8x^`Y=#vX`6J)2y
zl2#`D85;Q9rT(p<4Z4}A=r@%!W);#PhOb`Reu}Tr4vh+(Q;@F(_8-HB5WU#IjuC*R
zf>CP`a5X*L5ONOpjdph8LIWF@B=yWuYXxoIR5yz{7~m6Ii+HX(a)l+2niPq+OiqE4
zjL~@}$STZF#@U7gjwc%OucuFPeqN-W`Q;txrM%}1(9u!)Ix4QtAAg{LpK5NL5;U7=
zUiHo#71K3wo{kqXo5+;r47y)f5vpNY9<P!aR(2?$TPWtGG3snBqQxre60_-TceNah
zY_=BB5vefh&Y}ManGrOzcdtv$Hi^GfT2?JaD}^U8&C(}tLB*+zUKfx8G4?sGwQ6;}
zvCdBmUF|LwJZ3^xXF6Nl5Ydvz9l=27cGy;(wa`5PD-TTA!rFvKm<rAq6faWFIPxV6
znawn>Z;amys#W?7sEr&vcER^>R|?y@S`lfy+a0N43l=k&+T60QaLI>E2GSu7MHX)r
z3?ARziupc~0i6@qF67LUE1n!4ujaxJKPUu2(Q%%ZE1jJ(RbS)HFZ)}98Vgt*<Y+_u
z(>CStIi`IyM?ge`v6G}&pWUBsCN|T~BFTS+GgaYjqUF8|jEK)$n`zz=8!dov{U-O?
zrE&c_;bU!gtd88b_o{WOwo?WSUq5nrD);#FfAxN)>A5?zXM{GL+cB8BGlW!_hGJ%*
zxJYf=q`&~(iw?#=c)l~DO;h642*1#)-M^+pmxHP^!5aF>mptkCTHEibn^QHJnP6So
zd6$@(o_{pF%Ke=oasSCD=RA|{98RxEkt-**!gkoR?h0x$0w3s&j%ofBC+{_H59MbE
zxdtiN+<J41CC~acyF^K7on~xlU+=dGBVBfCQ*VgeHzq!Mk-#9mt2BJSfQ5Gvd^<k6
z4!5HGBF)XKMV&~O3)eQNk_BQ%2NH#pj;q$1jz$0`{pP8le|*8O1jXYL8G}_r`<I|)
zqr$NG>i7a$Q?!e>3QCuTHiQy}rc1#db<^{ePdQ~43xizN^;|%aRT?s(h=9U6$3qc-
zcsBhbd3gVtLYpGI#O$iMDDU@Sc9);Cn~MU+vpJqyLFd6vORjXZ>cdTb4YZ{Pf{vtY
z+UaRr$Qh<z=GXRPFDUsU!j%&RSSxX8gDuY*N=RATNWq%mdSCFN3Pnx5XD!o10$-bb
z+YXBl-h0n5BLiKRQ0MtdGUdS-)P0U(XL_lghbza1gPS@l1nRdkK&|u%FPB~Ewg!OE
z%9$)LV0^y5=LxtcPCU=#Wtk7)%7awjM!B4%SMz`RBkIaWcTS(KI*%dcrk&kPmL&UD
zz3V-tR<SHaOGjtJHV$)B#=kw4y|=gZ%pOY#qLdwbw{stog7&j$=#!EM1SZ+KDcNm~
zFUtA}a!(d#ErlZ=MiogiDi=)j@M-ZnbC0`a56*oaENtR+SlW(b;E2oX7wao?xVu~~
zTx6oI;8V0zA9rV(es+m2s+C!JtsHQq4~;#VPKB-oH^Eh{uw>_yDzgcuD|y8K@EC8O
zGPDt|XQ@UZ5@$p_9<k5}$sX?;>lWY;wr>xVXW!;l(|%`d51+~jqGKMD8_DK$5Ya%V
zoG3G!Pj)*w2^9O@Ui+@@ceT5(5lW?L9EocA)Hn95dWR2v(<7ufqq8|RFcDh%NKJoI
z`DNMl+3Ecc%%rCA^lChj$%ubCsw5Iy=2NI9HEI&?Tzf)`_3Uo=x}+|H(wE4}uuDIr
z4IZe&KJ!lpK)e6rL3c)K^twMxE*|ys?-6Y>-Q+VChP}xSuLfoiG-a$t8OHjAHV0z7
zOXI4<Wh|BT3xbO*H;hhfnRkWBFY}W0EK96c<JW0mHMH4FAoeC+{2hBv$4Q$3y0P(`
zjQBh1hJ;GR=?#i_-lPb$`zY$>{fNb&+~QsViWJ2NBJf)lZ7n6zBFC=Ym&%hfSx|K;
zEC(u8fHmn(iD&VTOqK_t5ZYZl=|)%2m*+Q}e3;AT+`gl1I*80E?5#EjjZE?UR1HsI
z96gTubJNgn0#-F$FX_@);i*t1&1SKw7iV8w)ng}DK2}pe2&$g1?5UgHI`h<IP47TJ
zyN)w&@zi)KnZ$QP9H-Bere*DX3$6L5W&No9_)0a+VmFK~qS~p{{RSV`Rb%QN!_t{w
zpVJ5ScD(bfHlFQTZQfQnzHt0u2<lUpYIMr7j1<3q<dFFK-b?w{VNT<^fIiqQ16;C(
zetHrPP$DVL{UNCuMQn)vcGdhZm(10XgNI%un>?G1X8_6&$>tO^OKa7<R6ZsbqG9?(
z%CBZPX41spywKG*+!LK=x^zX<DaJmrt>E!7^(9q2&$YI5)jQVSxLO;07~0=>5YH6n
zO4+ODvuo$ZPA11ALUS)5(K@=czD7TD&4)v2l|6yU#=pJ;1p4!A9~XB9w10*cR_U;W
zTeMh56;C`V1|Y*i2gJu?K5NB$_miXjv<=%tcD=dD<6qqyQj{hUof1*~$T~279JxOC
zjSY%6#fkI__&sbb=nYkuE!a@dytSBP)za*DjkNpx!DMBYx)ucXK*fnYRqz${!f%YQ
z4hBlXob$#6x@?vpaHV=;4M{GSqYS(y+_Gvp$8dMyA`d?;FSY^w%s0I{D*~POoDuex
zo?|DBkxibkJ5RU`eszrDIqSPUPxn3`Gx)t<pTxPy+AyYqsr21~U2mO?BK0f7KQvso
zA0!M|AfjK5m6``Z8ozxUeYj58{p}vz%1!?!Z8@)Giz9nkK8H6GZez#oMTe`_nbU9t
z-Q}-)LiI%{g}5?&2W!B=;X{HQZ(8(H&f%GB-7AQWVHEC`xk8a%CEh*x1wys>?q<L&
zD@4)Mf2DlnoCyBKa)ZD#rRXf8q}If~6#c#J6{e@2quKq7xU1ynUo7>Y26E;hCzrj>
z(UP6>7WGuem@?hY?lTCzeyPfEYxnCF`3hXnYD2fI(V73k^#A*R>6)40RfM-2bl0nm
z+rC<3lU<HOn-)99FVg(_(@i*s6tB>^J5|iZIWIoMHH8grHNW}u)5TD)q;Dd8K5w#W
zPf>h&Z{U%e5}(a@&Zvro^EtXip`tn>2vX{vTkN;0h4G`?&Y1Q9H@1Z8ZVuLsNY9py
z(D7CgEN^eUGEI^>Plp?ih)y0zce0<6q;rkkiBNb+d2rG+mF46BAol^MI{0EmKz>Il
z0Nn}W>=uNeMK&icCreW9Z}-A+*TW4-ZZ|0N-DSPO`w=*?0F6x`CMe1?W^~U@iNv`N
zj1vKTm`6_Q@x93@CQgz>U8g%QvM(aprDXP{IuOhYX8a=od)5Wbiz>E5hWLXIOqXnJ
zKSxP3&8#@N?1&ux<wE()`=PQ4Qm+ITRLp*5yf4A5(X)^odt^2=9PF~wn-tzGWBvCT
ztIZETc7YFSo~)i0GbWh2v{wN~J8k)?6Un<bd9x>QJIZMLfxlqeQThaM41iSKEozKW
z>;*tGf#kJNpT<-nQm|}wn#u<&8W4V+3dSi%UJO~-cmE7>rzyp0swRf_!{;DGH6I4Z
zj4u(-yhe|EMjBl!AYh$dq_a}hB~7KFkt;%mw&t<P!9FS4FvLxouvFECV1J`5+_ZbK
z@#|9T5~(8X>5}khu+PxWnsvbKY-D&alF<y!0CrNqGyTOlGYX*Yr1u9a*Y-oCkdi3W
zu9dh&IWH!e<o0Rwb6sr-<BXQF$9_?@A&e3BU_axql)vT2q)8#wUgV;^MRrnuzn^$w
znGw^>#v#X(ZokA1^|3$}U$w8r!TZHs!~hNZHOSGo|GdOW4*a@w(Y{ZQlw+!;&5Nnu
zLj2+bka3a5VygjzOEql0iV=n;Z8i35hwe<Py$wc7tv9Og%d8xKvNsRRP6AK+eI(B6
zAD2=sv^Kyj*6Xu~r4U0C#+kmwxWm!m{P;}`lDYjQ1{a5zS4S#&RIdL?PYjT1+6~_w
z@JF_-va8_5P2+Bjw-1#s7Y8Hfu_!)79Pec!i>fR<PHq|x^dV9f&pdMfMbW9hKgf_A
zjAWKnW&msNTZb>z51Z5lkC`ml)aup@54-zIHYT~)t8hLv!RGvdto~$AcC`bF&{TvP
ztEkhQ%~e_jD^)fRK-)k`D`12H-Ae7t`!D@PWsK1Pj8dz*^TZC{?P!d4MnD;7L|Ju@
zc`>Fk_?*#S3@$(-7bdKaISP)f&AG<`Xu;D`C#3uDOkc@rmpCa_(3~SObq6R_U!wtP
zE*W^p%~3t+EXbfTv*w?(J!&%2<~36byL*m5-=nB@gIBfX;maa0Yf<H#{U?O3l?#>z
z$2$>zFQ{)c4!819q}bt=MoED56gS2!$!cP%wY0!KCEl0Ea(c=7Pol*8C*3+DaeCdU
z@u$rVmgYz#B^(4a7PR$u<N9sOMp|wG6$=Dwmm9GOUJpj=9>R&UN)1+(V(_UDEUO2y
zs;e@Q<eM!+`LVvo@TLwtf6H=%!Q~X18|03aDUH@m+u1T8woTCM-2i@(6(LEyH|o}l
zCu$0=s}(Mu)^%MGKvvh&;yD#jF;>mbsT|IZeklTg^_P78GF6}A0n#m_M^joF@~(np
z!JEh5tK4lu>c{Lh$N)d%zr$iVr;(=y6j0hCkGmX0rvopBxY)PZrQj!XP7C=dijPmt
z0&D4O4U6Nc*GI&GemHM3tg2^2HqXSoP~O3~ZjnM;Ze~OF9SSQS2klX_x(;Z80z5UA
zHh07*S_!t?Lj~%Ja6wNS?{JDefS<D^_Uqd1Lc>s7nm*gi4!-8cob59HPg0hu05IWO
zf<E9ueuVUGDYn`b1FgIDQ9n>9SsW54-A0{aC|JKnHU7vdqi&qY7)_bIXNw)T%HR_H
zV;RI#LjapN^VS$d$vb_5Z|h9)ey3O@P4i-o8dT>^`AKfu%yx;o4PNz?5jDn3l~Z95
zY(F<!UOCXt#uJrIWv8LV*3RuYg=h_Zf(@gL)c8FYN7?t$Z`k&NeMTChE9GA;Pmw<k
zdVN1EVKfs4r6_eB1%L6RvtTuSLFSeWvHkKzfBG6P#?~OEn^nAyNoZb`UP1|80;JcR
zk`=&DCXqQ8kf8FhN0~&EM!8$m6nj1qsdg-LS<=O`28h${Q>OcGhyxlG2cP0q4Sh=y
z4XM!NB*$?Sz=r4cCO)I`7TM*v+H-vC$w|-&I8u3b#a)7dH)|*F0^!=1;OG)bj}Esl
z*g23sSCFD_jhj__jE#JXxJl|@JEtlNGLxW)h)N`_bHas#9{-)cx))}vob&QQd(nQy
z)@Cyw{|(Wbb}2N4a(m1#1|U5D2U|Lk<=G~i)&Ye8Q;E@Uie-;l&tP{<PkLxwj9z@+
z_Km`wZ{^{Kxj<7H{)mNroaQ7td<yL9^|{O?up4Fuk#+s`{sn-4{*4#^>rLIVy9Yt5
zl|8ZcwN*X6@IJ2q52)jKg~cx~2;*<)u@?;{$DF*Cy!4!-`P6HT^&c13XK(E-7TA|q
zL%SQ?CGeFLsix|&oWfhD0s60KobyyDk3ZyTr#+pwas1m$FYGpi0^t8P^?q^*eL{8W
zR&ag-6HLZqM_I)n5^3@;u>9Ykddsc)mNU6fG}-&YyvDbU6W0epCrvi^Kx#wz^Ul<x
zvgau*wYI?%d#TA=Z}0rcP==HTTJ}8aK<rOrDVY5sszg=<7?xE<(8hsD#!C^ByePAi
z*(dwjWNV!Js(0RmW2V+ZN=N&nYb#^c<^#4C6E>{vMXxS%WBQ6Yfk8+DRwi7hcli`q
z|5sD%vVe~MbHHR(an~`!8J&z^N&UA2K@08^_v@uy>LjQ?Oii0|vp8V9<R2Qi-ut+b
z)AWJuD^xR7)ftid4_mznr{+~Vit^%I_Vnjx!(W?DbMo9fX5r(?$gAEpnpyg6!h^AE
zerWPUN~gwbAs6aoISgCABI<H|WMxh#W>WrT88AqxcC7$}{D?@=t*HzF^6~@)t2-2_
z$u26RhBnp_>CWAdnRKj}2?%&MYG8W&Ev353H%`~Xe;XHi8U94Lvx>Ng=@<#N8W|ob
znf~a)JRbB?WA2;5T72=edSO+wwP0;YRli2qBNo*5jdr<TyFgn26py`fA@((NqKY&W
zJ!vdei9g6?8wEgpA^_?&>K4Zz1XWE}y!?3q^0Ybc<xlmA>;A;*_b>?WqgVAShJ!6Y
z@6+%m8aXiABua}xmtUKm4Kd4-QR1c!E068GhzqI|sno<co&6#2>bCu$RNKO}`Ri*7
z+OFl%S)bxOr#UAf4q4ahsFmk(bz2{j5ASw0?7Yxe`JSV7iFNqRDTHpUGL)+^uira9
zfOlOr0hJ`9GiCuAchmd3Hgnw#@G-)N16{l(3?&+iXpA#m$7S=3m`0OqEt>WZzE(+4
zZ|{1#gAQwJ_kFsMw~V(b(5V(ZKVILd@9Q%@hiy~Lob~vORMCuDI5dfiLF69W;F-s^
z^Gf<rh8e*w&(U3Sk>o~8Pzwle|16T?1iu!YQ7*~Q8xqWRt$jt4h3v3droX43A)_;(
zp^#VTIX^%fa#GEIc4-8c@Yc8G>^;+aw$CUJS$Go2F-jMXm8aiV2>;(``hWXGr5#zN
z>2q)2od)t4qL9tP4CX~ZvbMxuUDbg#^rTZ5dE_heh>A?W`?r&E=f8Qb;0%jEGxh=d
z$6Aj|$vov|so5?^_#X^Nr~8wG7&+i`ZPr6d3XC&_?g#D!D&Htk@NU2>s(j%__J-4p
zBOTrA=JM4vfA6Wntq-gLCc;lEk3E%FP9*Unz$4djG8uy0@=!Ux8L%cK>ScJ;CR;Vu
zgIEoe#+w7rkA9M8gPCSt&aQk3_-M~{E&}#q;5e6x$8Z63zm=JH&W0e5$wPh+o+|T7
zzE?q#TWr8vvrY!uRi5-HpYOSVJ6xJj?yWyhM|aI*L!ANa`>|gl%}m;-ygcyXq?`qk
z(R_z<qiks!Sbof!*GEm~^3*t|HpML$G^k!3!_(5V#W7JXb_!7nUOj1*v?QOK!1)Rr
z!l7V-ZkRHn(4jXDyhx563~-pd&rV7|{)tflnx2#@1@gdV{Yj;0g^X@w!*he~Fr@qA
zRSp<#Z{Q^Rcmm@Oe8^<7ct1UaX<P2*P0w#tr~p-{MTf>jF78J-OpoeATAEI&op?2$
zH(}KLhj`2@43ieq+1t$F7NyF$m<|a90G==C7@@o8ZK>H}i2}@;0nI}X&%ClQZjk)i
z&!~x6$Ta|2bX9;cT^bj=6}Ey}X~@K`zl7<j5}wk~#w%&O7xbP*+g<js3T`xiF(Li;
zG4}yf_4{$#r3cR8U2{LoZxg1%Gu1#a_3J0Az9+Hz<XeBfaq@5b`W(g(4{gMBNFgvN
zxoc)`;ZK7TZkje@oLc+$4zFevIlWpd=-1Z8!xh2rKiOM|dupfjUwSh@TQKVY0a;c4
zP>1(~DiPpdqaG@HXtLo`_aNRy_VBIMW62qrp>{n!zA!AUJ$wg>m%adYzY^9)D-C5o
z+xPd`EuH9XNAF>`hfzx&51#k^QYd%@ZB$}_jkxbza;GvWWiH&Ep!G5Z`vB*~Ww%Rl
z2BFw%GozQ2AKu4H%S<lYMpy)nF4{&gg7D1`wi>7Bh<Wr*evxAa?QJaJ#rgG<KK+mv
z>eEy4EZ`j7@kg-O+S68y@vB9_K^;UA+BnM}*De)TUOQ_`J&GW9_tzao49+c>8daC(
z!#EF+>+;8)<6W3Gw43$8IBmgkvD22;t07?sYlvVJx3Dn&5C@hmC<>xJZ;CF0K)rgS
zNtw@{Oh8y+S1trr_xE$~KpR7XPo`>%@WO^Uv6~B~PlEgaRo{1M^5gcNYj0sm3AoOB
z>=xNNF9!P@3yE@Jyo8`OS4aNmWy|%MU^YyvGL7D=ZxI~^G8Yc<+}Tj7xxNm<LxR~F
z)uTf{=54ZrES|LWTNb71g8g{n94LDsPF%;1D3q9dO29?>hS7S$cd;Kq3|rY9QuF7>
z(unNV-kn`$8PrS^ToCcTXZhpvh_pKUn@YS#H8t<!z}bY|@{#qMyOFz?+md9b?Cs2F
z+ZBjF?27A-$e*5Ha;6V$gVOVbKSOK$IN3sIUKXobeFlBS9R2z~(%T=l4cP`sC>=h2
z8P>E;Xy~~fxf}a!(%Iukmm2Xt_l=(t*j<xPxiPRe9&=mGYGxvs>{m8d04#k7>p4W{
zmZ6$hNysVC4kP<Dj<ZVb`%>V*bDbTDzJ3mc-2{=iC0DLAYz!b<69`XQ#?&GqeIA*_
zKeRxx*zL^9qo|9*l<Spzv?(S%yqn<%kf~D0cHXic2%nBd@iGOPnUOqp^evr7+kduL
z+o@R|-wM2>mH4P|S;fxxDp!~QXO5rpoFI>y<<Yx5jqYxvs$c5pDtUyN0Px2}`#)o_
zhv&7HJNh|NQE_Dy-)#&;Aa1)dGn?{i{sL^_315p0`yD^?7?_1(LeM6|QrCOy`7nd7
zVPl`|{L#@y(i^v#Htj6x>(0k^Bfi*PA4sc)d)e~6!~VX{71YNyLL6jxzGK#WlIPBD
z%Buh=tz}O0Z%|YydrnTYhLnNVQp?on8rdzTmU!%|&D;>*9FE(OhnAIvwT13vekQxI
zx6b?wJN@uta@>kn4CN6kSY3lpV-ApwCvR-oJwp9F*qcA16Hd)ubZ&0pIlO8~lo-`$
zfSC>rc#4CCj68R8_;x~f`j5ZY9LH6#7WrpK^XfCAoXy015-s}*QY}B{$GMe8paQGl
zxGLM$&l<Jz9&5yd;I3++(zEV6Im7KB;^)$ZwFM2#C`*|oW_0qDu<A=<Am;WhK#3sy
z*^7S?7cVtL0UHCpb!*I+n;$|Nn{T0RLDX@{i}sKh?d2#C&|kA@dc1X0O^vf1kWgap
zbf!KXG3a1#scA^cd~4&?7`okme6QG|=|@5pS&qoR{@K^3Sgfxw<yx9!s<_P>D;B||
z^uwVyO)tp3nt1`0wn}`~SwmV>5nQ$WH5dEY-FK%X>=xFq0OW^odU)gs<5w><{I{A2
z3xLK%hMiJzBiWhJyW%tJvJDWfQ(+FTuG{pGU(F|E*Bx$o&bBr3_vW42K*3<dJjFhx
z@eXsO%uZ(Jy)u!LlVhf)1-|1xn*tWzTRdgvTXu-YoX4OZiJ_d~$@2-Z8{nla9k)_=
zvr}pgww^Db=jIXhAg*k+(<l9cxnqk|6Uaj0G#z8MD<Cg==z&;qx&u)!TULo8`^i||
zfwiyhey)38)il=@r8jNjk4XtQU((LoSR2xafgYzXs~G2%CA)ZMkJ(yAjQJ@jTTVy0
znJya$kgR3BBP9)*dg~ez22iPc=`2s=o0JQCo(kpd@d~Cr&*?FtXl3ah*2J@veaV9I
zyy_{m5KViP`d~M2?`oUrUnzsj=GRkREoQF=4s9st7*u^ud+uKdr(}j)gEq#znm0j2
z)d9`ILff06F_k%$D7{`e=k^sZ2{TM?VRXi6d`1ibk$3Bj20G2NyP|WwZkOU1K{Rn$
zwk<}A!R&`RtxBI_ne8yVq9Q_MUz`PM%DPMch=kX!i`x<ug<>@LC}nQ;Wpj^LKM2P{
z>-^;N<F*$)oUdqA7wAA7lf;&ej4}F&a#^00@Jz3+f`-(fGp-&xN>%;~CcAKWW0!uT
zRwG5WX>L`=T><NqntB?)pGzOT46DzPyKTmt;JN;!sz+qk%+CbXt_7D@t>qw8&Ghvf
zm08BFWfA**V?b)8d_WHIs}3<sUz=~Kgu?c7WcIoDS|!dy&UU0g8+{<#3EFZ?;-rPT
zl^;wa=l3iv`!vB^5Az=PDhr}Yq0g;v+J=FQWL9M$Hr&4IL0KN1aKhUAFZ1Wo`fJG#
zr?<ZhvSP^^rBZ&3NiS2TJl-ARNw(MsDqkQDK8JVV;F6ZL&>@jywdc=Eo694k7q6OV
z`0OAkhv-$c$9QM*MIgs@k98WB$Yk{wtj*c!>VOLER<WzyHwWQ7V0AS<q#9hkKfAWr
zRSlc6G~$ACA8Ar*AV#lvSTU#Jv_-M-5;RF-be*GY7b>0ziYxcN->dti=b}@Jx%_%r
z0PkhZG)Q~T50D-Q1COE2(rZg6x!mEN6IEoTRTCqk=a+}oR{Sr-Bd~-&?@Yxlf9}zi
z9vTnD!&^B!IT6o0Ty?9S=VuC@+cmyx+{SyHc1Oa~eR6l-HnBY3c=t1&_mPK}M4-=h
z|2T<BDe^c<Z*n4I_$RPTvSg~7Q5tsoti+@{*)bkou|H=|m7^YMPlH)GZ9|qa2dW2B
zuB;>DJwf;i;nIvP*4=<NmtxUzWd>S6V4szXcX5t!u4O@_Aj|K^RkvM09xO?shBjbU
z;-O>Zr%C8<v84?yJrjFkI*r05Ls>-y)rYN}^4yI^-X$OEJ(HcG&03OLy?>rR9!i^S
zw(qH3vcAP+NSxY@y$5Y9KX`zM`kEGSvmDErS5DceDnGaZ`)siD)0O)G=dFEX5G!al
zug1@*RhcGya(Q}&A|14^6eov?8d<Lp!#XsiqRIoYmzxN85+nMp?)-&SF2rMVRKj4E
z*<+kqOQiev2efJ|f=H={TW#H2i>A%djhY|#>bpvhWZ`VBooMM%&tQnEkyaxx*csYz
zUa@S5+J9idWd7tGyBx0l89c_8qWIT_T&s23`0}=V^#2ffw4Wn0O_}zDlPl6^vCZyQ
zq&}c8YfIpiwvRI}>c>i(l)lFHU(9$6GN$N$eHXvsZ*`s~Jhi8gJ;X7wC6p#AXvf~u
zDO3Ikb+ZR#(LmKtrJkcUC9}|kk@c~PGqmHmWS-SsXK3RiK0}~uRsiqt+wqE+Eg1`t
z;5<eDNl?cT<yR(vMHEg1EI?j{*44CZMa!43xkF^$^-XRCzDhH*@Kx$Vcbvd+-wn*&
zI8vvq*Dh5y`8N5VcvRd<7z>C4bMP(2fq|$D?KbPSVk{$&DT*lpTk1*OY@(z)alZdw
zRsTHX+4A8gN*E~NX-hT{FoK@ppDVxLD^uXD!Cy}W5#?@3GAcEq@>te<@W;<bW$u`@
zq2INmpjVYtH<p9-R(Nt6wJ`kY$_ixz%YRTi4SBw+l^p{!!l3YOv$&;y*AmKtM(oo3
z_Dc)##O`&Y(=swl5Z5R(L@RZK>*CtA;W0OrEq~d+j3gZQ%-Ke?t^d4Qo}2BopmL+Z
zV1uRw*B;DZIg@&s@!4wE@<)vS>LOaa>mn^M&bABe7wHpTg5K(-$`Dw<F#xE1m*>MD
z*~zb10>UX?f&B`TjK*(&j>;Ab)M3{cuz&`{EM)<VWFH>A&-47;FBaIME59T0c-fZG
z?y10>U0lA!ijR+}LteBtXf_d(zcO(Cji}p`G8OM69sm8u5TASJUMUwIk0<U6Z{Q;U
z(S<?yS2wzb^7x~6ucqNxye<oPHLX?i!OLwaW`Qk3avvYD&}X~BT80iYu^@9(WOFzo
zW{JcFq?l6dWs2}8$x#O&zXoET9QE9cB(kJI7jg{pqBZxCwGUKLaydS8ygu$o!R|xu
z-yoiAkl@mX0Vx;En~)IGOJ|-jya)??wsV8-_1nkD^z5-WtNq!wm#$jCQD^(|Uc@=)
z#Qhk@&{jypmCDzzQNqTy7I*3Bnm^V(r`*{d6ly4ShDT_DuNhbF7|XBX*qw(?GMjke
zjqa@329pC<2DKV7f6%4p8<m|Mvc4Scf)AW*tjG)^3|;!Pj#RdEtlD6tA3l+Lv#<NS
zY~z6gB}|4nys0ysj_zaZG5^yt%e_^ZOs6J(#ph)8qM@AQH*wCV_i36|Ko+py>7J2S
z79JSdWGWZ&X5cnvZ~FIBsJaE<*V=c|f>zB5pKkh_-`_V~d@{pSsqBjD6+dp}3X_6#
z0jE#=DL+2o6}DP}r{)i!%%~~);_D&NCsbvKK5J;}B#P6#+qUWce)JY-8o!~x!qX$W
zy7bypPz@kDU^96B!;BeO_{*^#RByFmQF_vliMt_I>qSV&Nj9cex+zom@?e|T%E_;?
z2m8^RAZQI8-DM%qmzhzYATJ-51>?q+QcHDkjmHMT!l7l7X@SlnsQKnM)p_o%>RAY?
zNa%p~&K}NtXm9BF`+0Ucx(gQ&*e{JrVbGWL1p`%)tC!S0M?e$_=O!MX8QYg_+pO3e
z51l}C5Y}E4@hsKKkb}w-aLzopn6C^~9b6q+9bO$>9aqhc0`ASd&b-gVpZYUDIeVRZ
zEBgV@(i<TjJ*Z9w%MEkIw7P){tn%87z$$fm)_Y@u$!RRG+kPac`rV1sOlf>k-5WD4
z!YjqzhonJ_q;knJP487hW#9zk1g~c`9o@jvKxgy=m-$SV8x6q;jo#7ngFJdGR%+}=
z=^9ce28%vIp152Zu4&cV1nQ;tpMyr_|F=oZ|Nno#Fq6v-Q0aI^QmZO<tbjaZPx<@e
z;^Ihm#K#u}?pgPxZUrN!G%TgZvmGU*R29-L0v~sj-WbSuNZl#C)xF9u?|)*6MdOdH
zet)x+DW?&7r#5=@{<=Nv79HKa$@`!tZ>7*XzjWjRYTeoqV3M6U^<-xy`CLidsOIGN
z$=~Sco_&_yz)@qTS6cTs87#I7?gkmi1Uja@Q}E;{zvN^}5&%APrP2G=Lw0kS<5-4+
z&+L%6T)fkOG_G3OMI0b9XJ;tyxth#GI~IX7gzz~DJ4rbClYrR}-5<(pu4OcbGpVj#
zl^dRXr^_LLtJmA(<Y9=!KDTe55Cp;6c;C`RTs}qYrGK4EuMcoz^%`v@yV7{^!<T?M
zAqZ=WA%`bluRkF6C)H$LkDddIs5HOH#}HN4k^+g%i6{GCHa$q@41f+x03O-!2Satc
z0rvJ>E07_C%gpIz*m2tvyIPmOXm)a`jW>Igm0X-RF9BTK$&A}vqE|&v$CZZcy_sMq
z*MU#Sf6~zzXF%^#o#alACc{s5&Cpm2S1NYeN7;LQ2|*78QHmy$Y-783w=*J5OYXUG
z;N(SYV0%iKjQJV5d(T(ieY=(V{9g6Tk#Mr@vWTw*FhsJ-K0Yh4h5x?Hp(UDJpFk@+
z=uJ7^J~v?~BzyQ9-D|MtZ+6O_&AkEk#3f)Uja3;to<7*5@*Tv_%Q)gnh7X-zY$^d#
zL{Atpnqu>=Y}H*-?5{aF*^d~~cuW#;qDK%LCwva_0mZ?;8FzlVRYt09tr(k$;F3|?
zZuFhc=|h(YmYD3YZnP|!12eWy6S*L7ls5<JVSt>bSFI;5$5V)_9bGK~N(=1U8fk20
zEd@+)i^S8jf4nFKK^#0ZFZG&lu$p55258^b(t-%7eZVOO)E#?T*}BOu5UdN2vQOqy
z5h^iJ2U+;#NdPVp+goQ~Ch@la>eWP959=Zpm%lf=lS5ToQ*M<m$v$p(?JdvW{Q8Jx
zi&XjSdv<#~yRQxl!hh@9Qs?`x&PWw}V;!ZcedmTMCE;ny(1SPW%Aw8`3%Nl%tIbVg
z1|XAEPeCW*C4=}yw2~G>i!>&h{yL9q;`_Y!zp)Nm76$(1FY>|n+x6l}>p?V_4+OiQ
zb?NML($3l~3u5h!n>qT+gw`U#GFV;Ao*SvOFU9k#b;|qPKY;1o6ThcGKXAV{?$V2C
z(eOsZp*&Fs?)Qh7-|_|+a(u)E(X@ITgg_5yVfYY7f;3bRm$YLx{R@Sev8!>6mDf(^
zdl%M-f7+)x{;}?DOx|b-W7iqabcefIkPM%KW-2JqXOob4+Ly$SFP3}`&h0!FUcJXv
zJ{z(JyV3gtc)2jL4Rn?WU-LLf1#vaknX@6N0cr3t^>&BCKRjlQ80FT!2i68Qlxc{C
zXS28*<|kq*zYZV-%Nhrb+)0Rl@F3-q$$Jd+h;VJJxyxk+lgl3WYF46`BPfr8U<*l*
zcA(ScfPMC%R1<qMGF(u27BDcoNuY0c?{LzFRY}%Vl<IgnKg0nA5b*)Y7Qaa^Dy4<F
z@AYeOL}P3a;xe;)a@H;VtQf;Pjmyz?xr7SAp2^35OUX|bowR7AP(lMtI;P%V;)-}b
zImVv~7pyG)q_{iPy`(17!Lr3wM0?2a2#cTQYJJ1j%6(Zh5t1A8D!^NSP|>?yt@4uC
zv_7X|oZ-R;#atW5m>x=b1wj93-O*?I2r};~@u7Vwy716=_pAtL25S8S!B}fcdw;HK
zOTw>2<^#RR2Vl-Aj(94;gK~nQMSx-JFR!NpWUsl_i}ECodU{oc{ahh;6BMd!usAQ^
z=UFp-j^Z&NLBzR!f~mxqPpiB9?drw$@5pO_8JAwWc9O+<Jp-zJr=?Ti*Bw{X)fIMX
zuieFQ6&3%!yF6i54vg6}TpCbFE9eF_RX?DqQ|MnT*k=-l#C@OcmRAiPm||{UA#V_p
zc>pF}RH$^OuhV*$-+aG93X|#BV%?NDpp31Ey$ZaIxj29C;!DOq_>RRIo}UOe&8yh0
zT7vom{TzU)BV~`+8|6A5ayLWS?c{CaSEW~Np7TmYE}B48eVW7vWgjNO>eAnrDa$bY
zV;Zd;0w+!QbWGGO6Z(Ga)CZg2o%9^7mo*)}(W3ux)xFP*n5`jL$>P%aY5kk`y!qHs
z;*15!a?bc4k2yF%nCY8?lnL$y1Jz6**jI<3X1lDud5?SPYc2?L#Z{dPs~3q|K?j`%
zpy_li%tCfwoW@G|tH39i^Zyd0DcXUbjn>>>V<uF2%D}Jc0`A7QK}QU>oxS@XL1w}P
z@P!kt$#I;I9{+0VWJ%ChLwx3zQf~W$HWDg1Sa#rT0(~=xSp&1Y>^9O~!-LcasYb{W
z--ZNsxbTtNKRhXnX4Wok5dQIHPIbB@a9*Uy<mJ(JOSD-`?U}5eF<-PH@o01DA6stM
zUfaV$19=S*Pn{$Kg~1mtA-E2g1_sclq75(|ngivoNBJc9AxL=jokRb|zEao7oB-gv
zB(}2ok3DV4kepykcGmtf(z$;W9EWNj=}$1bNR?ij3}pcutth;pMF;IMboGXzsoy)z
zc$}f2nQO{Ak5<Z`5s&2m6^F97l&S|?IsO?bhN}NWYvUm)@E_mWMC-Y?8BS{XZp(mR
zg@V5W@1~=JXv&^SYDxm8(#n#X{|Y&P?5G0*@(#hZd#chqramI|Yx2O0`PX&V+Tu!-
zLfq#!bljYwP|S3fP1&>P^9?_`;{N5&JCvV~Gl`Q8!^;}~qWs2cqxmX6h!!kH>#Ko(
ztIB%@#WXOedbrOo`bhgXetMkCkR%CV4#zi#>jJ=kOr6m1E|1x_WXzWbJmL@BRkTyo
z`VucW<8-4uSHm}{@<w@UFa-|d$2km*tY;HpI=W3Z7HLAa5Zw4*Pe!Izydt1{Ten^)
z6V(Zr_ooM;yR9654lwQWto+VgS+pd=u2t!GPBX3LX7hR^Iw=-fW3WQ?4SwW-vuuuz
zbO=O!UR&^Ml8kS@B{+f|<po9VvZRTJAx*-NM4b}UHh_x>m|SP)mrQA*B8WTqJ2(f2
ztgwr4Z4)(1#QQvr&UFrb0=3nYD_prCdN=7V3Z8S?FMR}NKw&a)ZFP!lW9_v;g(RPB
zzP<Zd&}Z_4YsT=cNi1b|?gTcYv2+J2KQ}=-QKc<*^$Z5Ai4l)N&Qs!Wy)3$%mLVFr
zSS$q?I`iYcdViQS34>HS2d2!(iQ*h2&T9!47Pze4IqiqUMZg5i@EW;1Fe^|n;BB5~
zb~MmQ7jRmDU|#Mus(i~JS>idg6DI#!BJ$%YA0GbmIS~oWj$<5>b>KaglC&6IFyWLw
zIU(OFV15^9y;$uqKu>t1L7F*I)mK}+YFCqIw;b~%d(4J8P3KCOKw3QZ;Jj91JVaDH
zZ<P-A`BB+oviV>;@Dvvl?H2@sIYr=qcbktK2B|w_MzTt9j_&FAXPwb`C#Sg8{j^zE
z9=E>!l9&aLxm^Hh1NVo#hGOamn5gN#azyzCsNWDzkl1@Dreo!&$2+m|rL}utgE^Ht
zma?He>U~l{yOm*}quCHDA+TB3H?~s|hFz^%T@!(|`xaCUwdZgZ)z!*044ab0oZJ6G
zq)fbDhM&&BUA)`2j1Vcw<&ZTc6nxiD7$bWN@$@nX_M*0E+f~)?IKn94_CNVe0k^Ij
z83SV^sGJQCtl3gm{uM0kY5!EQQ+-g&?4f{})n|Q_i<xoLR1a`{=&IpkLyi`Zg?-Af
zrL5s1loyI=nrp{O9fz$-#k_ySs<jv<$qrWU?v`zkHg9NKmjzdOQ))adTU_V8I8C`s
z6}mK2S(+?&-JG$Me5Qrg?r<EgeQ~3eOLJf>DmOd2b14j2!;>}E`$78B^4|>6-Ut3<
zSZ!c}NIS!45k!7r>-nB!c=n5w3IA-dqQFGoZ(qbUQa@;|OMEQyxXA>XnLa3Y(+qM4
zd}-N4zyp3&2DnO{jr0qL*wnQv+Yx*1RtdPs-gclqYxKBF7?imcdd&M2L;8A+_;$|*
z&FlB4UV5O}wLS2eELIBvBJBn#nemCC?uTzcYJkjg6Ms(@qHpiJTlU+nRL7hYwr$od
z9l0WRKV0W%8ZW)*@;|P9excQr#k>KX@IF^5hk{~hO3KsJ;Osx$O!PS@5#@o=mI@!z
z*%1Q8wDuY`JWl;uPrPABCI)zzP-JB+5yK2_^X46=$~m{YB$V;E%iL`9BLuPznpv5s
zz(o!r#~vqd0v3x5tYJ9Gvst6diE}6%;8?TCi7VE9+h~>*_pOjC7FzAcOKrbsmU=Zw
zLrLJxQ9&ZRT%qZ9vouat*epI4@74+o@nNZ#M~OFLP~rE0S>Fnv8<A`lF#cB(p7;+Z
zwgG@n>Ju@yMG%hCS{O`+45HBy1rLLiN^`n+y&OT3de26mvQfGOT_m)|73rRPTGN%!
zfru1?_o&RD9~C51w!)@Ei6#}6b3661&~G|#DYsrP=|qPugVhI6>9DkH+|Q-fvN>ke
z!c8_MfRO&AJtCmuW&>mz7`L|mqpD()lh{)$VmD;Nlgpj$b+j#i^MwE-yqkQxD(>@<
zO~qrx8+h`eI}nJESbXFoM_kZgVNY_*msEcylWl3*l$Kq*{CEy&YiyKbY`Vfg@rSyx
zYyTwH7?H<ux`K$3_ezJq)%-HiT`JMnke@cjt0<qb1~L}B-_SQ{yM2kTu$})?Gz;;@
z*xQ7bi)HJDPOp+?ts`JX^0N?3M-1e>3seIz>95m$9<2SceuV)O*j;4=ZGxiw@c9dD
zpE0)G3+x}pdg~Cw>}_GlKfJCg8Bok>Wr@sr<xn&`J!S5sh^3Fi=M2E=>b~k1B2A7&
zv9&48iz@||4qW_c&vmW0Yc576Zv}inUo)yi;KB^F^1cxjA3Ub^^`0nX3}u__Cj4pz
zGCd`3xSvJp!|9$x6l{qZHaUv8ernAeu`93?*40s;A5tzGarVB_tLt7B&V0MFMEQZ`
zuCcH&K{MEum2dBw^j5zs@9VmI%&(ZU{-yO*CrPW0WSR=6{+Vn|UXf8z{E@2;ph#??
zKi^!*A5oJmF21`ugjytQS-W#84Zd3bECbxqzgm@~cG&|yXKPMLxLV$71RGY@JXWBt
zRRL=+Wy=qzA*Vm2#s}p7-(*hjOODjtC_iA?vtHvTod<WxQ~gS|Z>U1n!k1c$stE!O
z@$840{a=b$z=Q3;RrbvL%2Q~4xrm_6yw97hg9Sb2==uXNO-z~DN_lQ#D91fXTm0a+
z(`X%uv*9F&*2JO(IF!!81XHXQ2h=9QLRq%vgqmjCu~pa7itqQ#g`m7vEmN?yB}0c-
zAClb?qjDZ)hB?&oKcn~^*u*s!Z%$PC6Elm4#x#KiPQWmGFJQr{Qk0K8f;R<T;UN5l
zo?X=ceGpke!)yL$&EQ=jteH^StBtEZbCKB9oUF(b7E_-(zdEM64%w>q+oyaXVHLx&
zRr|LIIfe$L_(K`@wZ*@qW#kQXDh1A75)hyEoT1QBlPQAzzM}DQU&h)zMOGQu(IgEH
zc$Ox+`Dp^nFJQ6xS+Oq&u5Or3G^pXfTd<^6)pHTS3+!^Z5A)l@#@;}*M71!FP%Rh0
zqVgO1d$}yC@&!<C+x)l!&&-@Vh=V5Vw%u5Ps86=GoJ|xw^9#-;phtG+^BL^l3#4xa
z;<YwWZtnea*d7PxSrKyIF)A^LF_nDF8H$li<GuJrWaSO<#s^R_N)8yRw&><A+N30N
zhCxJ6H%Mw8Msu<EvXc}>#L;9q@$*`%9jXZJRQO2sF#pJyjMqY2+6rm5HQAh8{sr&7
zuCOe4a=6v8+Ulmh6@$%WP?psC7EU{gaU-;#ICO2NUwr;EIRpCWW<)7{pNv)}u5(0l
zMXNvP*H3(c>xm<ge^SVEM3|NG^zI_CIl>MQ3;hiy;SbREr2av}ep6?~odXYS9xAAF
z|JwL0(d)7CNNhHXL)~fbE>XF(1Yl_QO$oA5z9aN+mA^O!*7QU!0CLC>riP!8-2x?)
zl4RfKksnb4%2-7^jc`+gt!kK#{lJQRmLC-q?!<R_UJF@``B2QG{QX_C!R3y_Fqx!;
z(td(Z>4SS)X*oWFyzR;~p209n8e>igF5p2qjn+Tt5Zo20dXjRyF}JwqB>T_xO3QAP
zP!G3N_m6giB)Nr}C2qffAi{QBVeb)fVNOKu8{vrr5A^DEERYu*mR5$^ljTa<IV^X`
zayF;mh_ZCj5?T|JP2;<$we?Eiz9Jw=##j-bx^i74BtGw{1|K`{9kqFt+zF#0p@#RT
zt8o&ts=-&@VwgM1rA~+H#DP3y3lnH`ma>(c=?IVAR0iq+BrQ{U6B>ivsRZ1g(7JvP
zMbG2nJ(vuy);%O>qMJJM=&q(diBfb*cN=iC7Ll7Z>J!Tm8K<o<OHjR5hGG#>znpBg
zZu(VO^|$yZjT64|iX1jQOs=3_pElW<46aKW-}sIqCDZpwS9G7)CT7G<%mn>%`bD8u
zn8a%rQ-B>9NpjhTLB@9fVO_Fiaoiy+bYFV!Ab5heFD<mdNpHM6zCr(zHA=aV+By!b
z#w4gb<J{{DWi;k{Zac`Pl3dWwzmAOHewM7~=g+U(GM4Rn2ev<c8L1WoBd7=<5|b~!
zF(Q`-c)(UBaj~!FL88PQ=fI<92xy&o>g#nAJTI+C?tAbkA-Uyr`#!3Q7)*uV9K^yX
z2~X|>(u2J<Q8$qw*lJQwwPKsKO6bh<D&^yX%4azW<sm#9{<|DUfI0f#fr^$vO~3+s
zbkf?vvCw+eN?e+Yyip#i0W2b7ok{AbmTtvB02_hpSipZ_;ekhFVyz-^jj-!#JeV<d
zB?!HLKhKcpo1Xp*ZJ!E{7VN2iened95+rkMpEjRb2Fe~l8Sftbsn?C`v~sLonY3a;
z!UcM7PA`3dgd%;9B6hW-S<2`U0SQnH6g39+Tw*QOi}F3O*xD&bznc>Dg0!AzHHWLe
z@NFGIT-;v?qkz8f9F}iC_4~GSW9+DBu4+cKqa4{E6q?qQJS<{d|D~~qdsaulvO*Am
z&$~`p`ID$6W-YRB%Kwz6i^avtIUooCsC|6C<-(K$vsCzQ`I_8uNtXqAvKEs+;P7!W
zpW8_6&hc(S%R6YL^}}3JQ$AHhuqMu>?du{rTmAzdeSg^&^Re36a@gA6=1Yw5@=G;r
z(&YJ$PNp}*wUc^*{W`(hJg|K=TP}MNgInGfk46CyIDDs7<DFX???Z%RBNP+h@z{fn
znWDJ0B|Yv~A#o6J*^f$0MtXWq4(45&3kpF^Y}w}j>Wh8@{=1Bh^mD`3H^i@MWD{{t
zFe~{P5rmTS*rHF0D6^)b6Y3_j!`cg)Oo)ck;J?Ya&3mOs_qK%@^4anw+Z&4kQ-{rT
zT*lUi#Q^m`$^>Kl+WWjaKT<E`uJb5v3iyfh<U9xx+TFFaVQvNL_Wz`Iz*82jAv5aG
z(6%M3R^*!*Cj5(L09ukWTM9!k3Ij+<8GwrH8$c<tL~PLlQs9S6Y^(9?7yVQ>0;zm{
z@d2zKE@!YfsOZ0=eJOr+vJkKk_Hgyuj8+@T`o;zsl#c=x{Nsz_@lOajlbCG<7yx04
z$Na+aZp>8f7^9=Iy&#V;+dVl<-=b}Cv|kFGXNB+$0YEGQUk+Cu7-|3U&0*VtP&>+h
zPKoPq>azUkvgJ@l5@X(<OF<$1l^VQ1)Ax4IWBQd4#0Jq10L8yuUpzja?{x`mS)ai@
zbEL_VxLh+VMTK9$rvN?Hv{BhETN8mFXJ$~-TJd!0?^wfvW+se|9>YGzL)btws8!1~
zPR@ceb~&Y+Ax>m@n4aEBq!QUlg@M=GQ$+;D_rMx=cC2R83W?u&o?kyhfbwx=A$qA(
zW66bgC~-smEdN%s!{GAQPz^<*Lg@cOm<|M^?F&wVU^gOssv0N>j%n}_a3^UxYH(d=
zgiV~ny;>>+GStF^X#F*JAA}2RvE6RMU0g?{fK)dp^7q8dZ|=)r`XvC%4*kor{})Lm
zD29<NHVy>+t`HM3lRw62{(eImJL{MDQlHS&z0LOJuxFn{f2>HWdULl{ylY9Lrpi9v
zu%!H<jhz-9L?zg)jd_x<ykJb5i5c^&e~L9B%l(>T);j9T_^&JRPt@E?if+D@W-X39
z4G?-cU`FevPDuy=a+(L>3+87GM8FgTt5RGwSpdK-tPF|`BB-c@$bU80ivkxhwlDiN
zQSdTY4RF&J?dHtlE{q~S;`(pL*4GKn$Q7-g^yVRjSnR<it<|s-`K|si8ldEu<sJ4k
z9X+ndAkouK9>;Ficy;iR6nO7x5*WBH22>S)2$2~PfnS&h!u4Oh^GD#yl(OZ8zr3E4
zMNR$6>oqdWdxd&lSrj7t*tSgZ>^%c&T0Owf_+QkFtCx2YUEu05CYuMB9>H34DX}4k
zGegVWzycU(6abw2>69zM9UWk$tJ{RZ^$%t~L<#0-aPa!-AU!VZPqIA7^@zU6_l#Oe
zzcm>#)9HvLXa9Lk(Muf%+>a4dy69aB#~EIroYz9eO7=Oxh4AiDd8ZrYfMKdUz<mm8
zVY@Z?=;E`=RS4`(VTp@btR&VJ-o+2I_ezWqku=R8VEqCu;HZA9#WTyk@o)l((Xzvz
zd+et}(d17Wmx6_0%9>!=j61r!^00+Oh?amy%#-7Zo7r;H@AKSLM%s6Q>wvme{9L5b
zk*moXB;dOXqVef21pDj5+0$%%yTJNATeNQP9s(l*9`p#+(Dc(R1@K4$Xaf-`Dam^y
z(j)omCE}psmnUT?X_@<AbghnIlZ_8T5iBH6wjHp@=T3JY%`YfAxbhoJGr?O1VYBZz
zgRIm-SmazV8DhddZ7O4<yM|xs&+wFMQFg8#w?ROt^QMq5uT4>bCy|4|HgvI)N&mNF
z772b7{Ltof8O^?x*PqPm-_v<>nRNKO*&2N55M7Ay;of@q|JZx)zb2QjZ4^6#$hII#
zC^kSrL6jn0L8$`Ll@dgh4v`K4f{MVV+h_rT^iD)d=%_RWLLl@O1SFwIO=t;$Gl9Lo
z&+|U#yzd`y&bfcs`q}2bXV%P`HM7>bt~Fy8Z<v1CTP^F}UfzF4EKO0m+aqb+KswW5
zQ$mz1eF#6TCo^}h45vNiuex}e{kM60=L5x=iAGkYrZ><J8T|q?RyUHV$4r*arI>!b
zyZDV&G1EWui{heeO%dcX2=0q7i-_)Ly29c<v60DAdw06M?oxx7`p?f-&`=FnRvIp$
zt1R9wWjrJC5H&Ooc9`jk5T*G%l|TqI>=4O^wq|pE{%9ncId`L5Hr|e}tL}SZ?w3!J
z#BHTHCZ?bccsBWhkWGpqqPKn{shj9gSYs_Qe=0`VhYx&^pQ_F&2xYqB=^kk*Q~c1l
zf9mhaBN9uM*;*zT=RlW{+;r!Mw221<!P_&|2?#v!SaD>KxKFz;XhGE%swMh1uhkFv
z4`lYsea}uSpRCH%Iaf^|;}gUy{PMp`yZlyEk;&$tKEr!@yAngz3}<rm`e45`6!<yn
z>n<7L*|%<TRGq$DJDIq4NM`h!zTl7qV~|Z%76&pHW9W)8in)~89@=}se%Qc|?CgmW
zXZqp5g-fHx997%1yh5eyOAAxnojO&!FWut|9?%OCf&0g|Cd?1RZrOgFo|r=%i7>Hq
zEbH|Q?D7Be9pn&inLjxwILfUqv#c_i?|p*lPNI^aMb+htwaw}Qp7QFMxZ><+a|KwJ
z;zp@q#k7L^ANLL(_Y}ahO=Y!ugeFad8GxjiRL^GD)QNz6C5vNsk}dD2d}G~S|3ik6
z?FwGVQ5(6^9iA7ckA`T}iBftk+{dQF|8!05XS#D`pnA;TV7hFqNGQhtu;|uotgOXE
zw~2R`q-TDFK#%15lv6hC&U(<oDgP9aDl?E)<(XxkS;ZwAOzV_TuFH=a2<iM0pILi#
z!H>=RYYs=Vda_`*LvYVH{%BlzLS3n^4M$BZ$e$j11ycWl*JXUVj>cE1R>isihPmnS
z>*u~qXa9K4zLG1tZaWI9@a(7!D-Aaet1KF2IhAQwxbt-~I{EF>hcn4F)2kL#rHxv{
z=~X@IF-NbMFwgm6_8B}4Z$pbVv#g=C()>)0@nW^+ZdX(CjEBm`T$urp<5hW3xt%D-
zkjjuz(u;jepFTYnd_vtgVgBN&6bDt``3Q&1a#xC%rUA9gp&#)>OfdS9iL_r(mrn8(
zlG(b~WMOmkCMAIYAeEM8uGj|RBjjXbw;-X}+({97q%gcseJ*Pu7BmrB&L#*(=ZZ|9
zdi?gs>RJ|mfmp&<$`R1UqMZ;W^MHFQ3-#2E+OFIkfy7cshIXs6VTf6wc1B^E%z(X#
zibS3#(;n~Rz8ij|^tcIU;Ro&V4L6YEF1<?0;-@~i=8;HgTBh7TP_H|vA0+csMpw^9
zLr{wval<3e{bZ)Y<!;Un{plSY<J9K{%CLwuG4a@<^alY-S<*AOAG;qs1&aqcU&+WS
z?YVmo_(oHmKZ^WRGZ#x14=7Yh7NXn5E9lc?O{XP6Zwxf8rY~!v`|)Odp=Xi-72^(9
z-_Zo6fHUPvg8IUJPJKUn83m&Lzw>w(=PD1mNDe>ya5E+<F`K=&ypaoyW8fjc^HwbX
zr$MC6ptVgblsbn`Wz}rUi<Q$Ab4;+z)SKE0UyyRHnev&8#B5vn(MEMtI#E0Qz90r<
zAt_Qdd%?}Wud2;ZBjj2g+Wp6BgN*yxF2skM_C;OiLCPOIFAH;b5f@Q5{q(G7(`i1|
zmt_4CT)s7}Ljn*Kt;y=eK-klg`OxfBM1Yw2MAMgaUk;OB|5L#+s#8^8PCLH)6{h=N
z9i7<~DjdTJfoR#10{fqkn1(n=gTSbL4Q-n=B2><n581JL5bqgh|94!zwf9e{QbpVP
z&h2sf8|$;XpE%#x-W<tQ2@O1x)a$kJWsw?b<~*|b6@d3%{Z4H$g7~XmlM)IpyrFS;
z>_!;GQvBOq!#*lnkE<JG*apf0SxAZ+^~lmphJ+qzy(@5ruo2M(`^`cfS-MpkV5dml
z1~eP+yu2osIC7jv#Zh18+0T-mkMdjVm<p{x$29uL$U#vbBZt>r%zI<A@l4Xt{X`b@
z0D6AVt5IWeg{oS?7U&ly;`bdC`T9OB?>+9l-O4Xszt<I!cr<YVGnQbwcJ7O}%Z{#a
zWSj-<t?6~<boOm>Ojio@5O0-jS8+?MvsN^pV$|MCpW-8nT8RLHB6{u<*QjVc6=f=P
z<?>vg(+z6035cvzT6TaXO+{Yb{rOAD5M(MAek>{Au=$%=n2x0D+`*=oygKCTol|bn
zSuF{Cu)W`<SxZ(4qHa@-r+TG|s;65+D(=62>bY#l4vD$sd^1YH|Bp6hgG~OX4_6)r
zD#P4H3urHcZ_NmOrAR)q^__OfUesO?dxGGX=iBgkb$D-<Sk6dD%xeaVm`K~t=B<v<
zn9eG<j5&S;M5YQjqO&)pYYSj%z=HmEW9+-%fMs&|b+ie!iN9p0)#>=1FPdnd#w&%;
zFDR5KrDmMO;CX@HPRC;ximG|bo$jyVSG@>3EEox<8Tu3~KeFzUv*h%qGVT&W0l-bb
z^E-L)PoCprFmd^DSf4k;XPFkKH}!A2|BRd6ya)4DA@8jjA7$*{n+c<UbRxp#M&OaI
zmNCRWCr94WP|c4JW5AG2Q{#`N_~ipYQkN5DYl3tRX|enLAEB|<7}Xsr{+ktSLXuyK
zDEj!hWHkeB;zFk{ChP=^$FTZbJq>{)JQg_%vq%ud#m;{u?t9o!yonB=&si88x3DX4
z-V((KR4QvNR2mcPBx^ou76ssI*uwe+Q~a$Aj#*g#shTUI_*lS)Z*lE4&CFffT7G}=
zReuM!*Y>>6CN-5T5|zMK)VpMoI-CW4gfo0tprT!gotAj9T}hGqO}g}NpW`=Y7f`;u
zb;?akG0nbwe&4REE$F(*PK6n&Yc1v==a%hZkmY%dA{R%4(OKG`ZcAS{bcK9sSKzO=
z>;<NKORxJLkM|<HvGa2LU3W>;Xk^=F*$~=V=EdLsTyeWJDnE4~QeoXQz5k_8_w?pZ
zoc=#5{|mV}ThwawTsaQ0G=0jUqW4D%fbKvz(nUEEp)3-$alNAB_O`6sn-j7itcQ=J
z$Qd48?T7SYeQ6s*k0xEZ=lZ!#hnM<N>`DAlMd3}+d4<tl@w^UlH~T}|VKSeJIzB0$
zVY;K%BYs)CAQvVcV3ffUM>^)Dj~!_YEdyab?Qy+_(<J|@7gw1x=$Rp!xA3k765{k+
z5fBmVXzM0>L$i9YkE;*Bc$t1P(JwwQZlyop{5%D6pVBmei>d(QBAz%jkk|XPL32jt
zmsw3yWuy=qYVBB0N4ckcE?VN2nT`9N!a(%2hc-@}@^RaDo*krvjq$~~A#H9KPdXI5
zE5FMg7kF`=Pu`4Wzg@sgZoY-@wK$pp7V>>7PKuLhzY1H!8P(+5?kTO~Z55e6>JPOo
zxcfPj#IRbA1!iH`^0~{~Z%_ZN;G0JRp)b<It8cRUSpfL#_oLB~Mqa#Ft{}eCo0<Km
zj2#_*v8&Odg8Q@`-^{q)UurZ>9f&;~dyhd_8Dx5U0d9JwR^Gi$dvsQYM6LGfPPHz7
z8bLNqEPOa>W8v47{;BYs%(nGp1j@rEpX4%4STIx55)G1qFu6XE;SFl6l$(3wAsD3j
zN}Z<09{2jrkOh3mq+4?wd-&zCM{J9IHZf2mv9%i6l^ujNn?y+*u#}GO^Ql#H&NYFm
zcgt(3*6A+xi|<rgP?sWf6nEaku%c9xbdl$A?7BFT(}oXESTm=VC{smhRJ{as`ASe*
ziM>i`v62afSLBGm{H1?}&n{d`)c<gT6c3Z%XD)&hz*@<}pJJ1JYL!Z!4LY$Su?0Q9
zXJ-r~`=%wIoQ!_sNF8rUX>ZBI{qj*+{H9CZ=`X~!^-Bqcnr)NV<Y_7nGd@_{VvSUt
zb0Sm($7PqSSHaEXTCh;wU;Z{qU7q#KS$DR;g7<y-f+w}EO}Re7Bk&EG=ijcyp|~Y$
z9V+D<>>)@v%bXSq63Vn=!bQ-p?sd<?1P6Bkh782UNc(i6nY`6pEE3E4Y;4e9@N9Bx
z^EqH~k$}@t;A8s8K&PhZc6v*b{PZRkN3M~qvxV>bdVMDTfd=qHL4RCoO)5@1X3#T2
zH1D3D7nNuHb75@odd_5C)Y%*MhcGPT%36+>sc#2<&sGw%;<_lrmmU)HU-Ir>*Mj+Y
zkomX~CY-26jV#hCUzCviOB89#4`(_Vp2f*D0!V5)8ZDW;BDk=j&E?~GnbjB418Ow&
zf9AH6vj3&2yT@=LX4G@oyfrV@HT*9H(fYb($Bc}_{Z|cksHR6z`@W<Szibi_+m+*G
z(0LxK2Vw2RyceHH7<kc67-~_-$HA`)e1{Y7k{hB~qJ-T+)zxL(J7o-7`kSV~8b<};
zYK2&0Z^P7~`&E2!Mw^hHC47I?pNHTWyqRbINUQcU!MNMhx5-29z_SDMlO@!?%M!Jt
zG@N)`(9bFl2!M*VO*hu3vzYfvi(1&c0g~0cjnb3{l}v<0*po^XfZlM~S%3vG)=5d5
zIrOq;niEmA(IiScR=I5v5Fpf1c=xvM0YeXhTydp`M*lwjNCvp@*k7fq5Xtyx%{h$Z
z4!6l#hcBP2$L*Rrs-jBDxBmJJ)VgerW9oadvG1;YWyM*ByG#Cnp_I-1aeNi!g|uyk
zKQK7{%H537PU;e+CgyLYHK+$hofEg_#~d6lMfkh9^}cA~0`0a|uqHx8e?&dU$Uj-I
z$Q{q@{PMZBDdAY6dw5ss<lm=y$pNwo$6bdufCNnF3@d&1xWhsx!xb+SwxIyVKGf_u
z7cedV%E)9x@lm0gO?Ch%Z3PE28Um{wbNrOiENKXELs3~$;nVg*KoP^)MEN6NF6EtT
zxuhKtKkm+IUe~_=w4jr5LAPn@)w{m*e{|1m7J`I|*D{??w^*8SN|tp;$KP7)tKM#M
zy5p_u)|>hC^}s+DtAu&9+_Dbp=<9p5a?;oQ_egW$=Z2c?NWOrrP}MgrqwIC|6fW<1
z`t0pbtfpPVTW)KcjF0{@bP^|==ShKA$lbupQ2sU7|BT-IvYNujQ&K(gr}x_@WtqFB
z4D@8NMkeb?#o4_6RI@YQLaghBn9Cd73ivrMCuFu^-%*|G*w%7i8#;f#o0SQn){@OD
z!gkNefAXXq&szK6l7=s&nKS&e{%cj;Q9@gH^&-7y2~t%n9W;w^i=Bo!tb_x$nNg;Q
zGjYiMDjx>{GjQgMCh3}IFU2!A{^SsSXQSIC9rtMtrQ34A9Gegoo>Vi$nC-2%Q8=LH
zf-XMIjhkgJuHJsTmcT1==v8Sw<rA2|WV#_?OjlWtxg$ZW#Sxhi+^2Q1tNzmr_O*Ko
zsSI!PLOEw$(J5Vq7xCX@U=#zHIa>yhVSeAI&V3;EH)Q_0Gh_p=IDHVmjSmE^x?e}H
zc+Tp2br`Y*Oj^(yBDu1@eL$apm|#++6{s8fs1vX6&`N19H9sKDt{Tu9Z;fyL*_cS&
zwsXIpe18m<P_n1Y7I?8duu+~2mFQD*8`eMNAQ#m3?N#a6Ka+9<*yw?-d}H?}YwDi~
zXO4#N0ZrDd5)W1}bs~}_&dP3PGG1ah<^<|k{}_^HVE-aBo^9ppPdORCX%?cp+0yd6
z)&FWIy9j|@Fk46zNArpVoz9^Dw;A~wg$T_S?r}zc;gq--^rTB`J)Z4D&kwjdF134i
zi59%g<(C>G<<78?jXB?a5h7pj@Xh`6Ny%7JwcCL;?!X=9p5}>58Iz@kY0H9@BT_C<
z(~DgjGK_Zov;S-6zeW+hRK~P+@ZjWNl!AfutvN(R7fA)Tpm^W$S?zB;Wc$QyR(@v%
zT@KALmmdy*o)FXpGizKx`|YVetO7Zcll?-J+FDA{-vxJpt|h#U(w8@zWi@~I7}<@g
zqGH&Iu4;FOy#CufUF$PV#OMwd_J4J-@N>hqFj~}2H-Px6fd+$#@ISenKGr`D&TGO~
zjqG0}D_Kp4;Vdc3f;+c>m$q%d!{>fCzo5QJ`j{4Mw5HJ#FO#|S_6{hmSEY7sIi|Gk
z&*km@p+{Dn&{|QzVKntw=o?=tc-t43w83V!ps7`=D<QWW(CTJ$Y1xax<Eo(+<RsD;
zqGp#(h0uxv@nZ>Gktr?t9V~XWpeP=v2OoYrVgg@~N_sOC#h&3|bIIOZ$7XUaF2jRi
zZ+f_;X5BPE165D9W$VLoQtr;mtrwND4KgDM?YYvLJwBUu{_=wnCS$6zKCb&<uVMHR
z_0Z;OSDz;%axJ}!(%lu@u5S=N*%lL^$WS2HTcsrm866+_zUM1dowTytoWL>Z<N4#D
zyvTFI@J3?aRdb;%<mC6T@^?|}98_i||I?qQk%X$?W_reI1`9je8|0#{|F&O{)X!UX
zBJ#JmxQ@8`eA+DzVv@ouvVK{wp2%!h<abYk&&|8!rT{i&F2~}}0ug)k!R5XlWs|tr
zAhU&p8^+-Ou2qOX%zGRbI@hK=JKKM7MWb9CoJ3Z&u<tNgamX`v=9R~g(12Mk!s?dn
zUC&b%9f`yQIg7a$cISJ@h~m;HqfmiZSLxq>)s`hFWUHkZkAxs9MGwj!))G?;5tjIj
za3vUe1y#)monGHrRd-Vyf|y9n+<Jz%AYMz$dt~e)5|-sfm4Gb@VCMzo?w`-tBqsxY
zxO&Ru+C7OIW14O=<12U6=hU_RIO3|aP|;SuD_1ysHx!x@Nr~bxg@#0qvvxdS{yq!=
zZtq*-mu%;6M`Yc6p7gj$i4+Q_gtmvTk7LPNNMrUmY8LT_Pq#2O1^o#y+f<a(>Oon@
z^p4`O6#=-Otf)(=I2bvc+T}Bgg4n{Tb0Q(!4x4!wW5&8g*MnYiW#pDPb3z`~r%LZ^
zixVc2LU|A1mU}6Bwj)?C`Nms8tWJD9d_t5qZvSn02MhC$^H~_M=0!6%&4?l>frsDW
z-`}o#ljTkj)mxtzug{R2K4q+eYB4$)KHvW$$XQ%m4Nc6DCZ8jeepQ?6Y{*3A5Z%he
z<K)e_uGq<2GQ&_Xd=d~-N<y^*NkCGUBs6W|wI7JbG`&yB=NCrnyeD=yOx5*ZqZcn?
z2Zg#CNoL1=?xc`1Ehc6z${*<xUAJ8S-Uf?jd*4%G{T^y4Q4!`AJnb?wwD_H2m8U0+
zEk}1s{oVa?{-nL{4S!te1a~{*k@icgEzHjCRCU-~?{~%)nHr)g|Fb2();^hCbMAA9
zeZ|NrpnYasdvg${c5ORLJX`)&TByAUE?&Hzms)Ts?uZiIbxY7rzHnl)q-jE~Jcl&s
z#*oS!ULn4_1?K)oG;Jhw)h|qqob^C_+xv2P`Fj-F!>w;&ieF-N@sDsvF8{72$m&q?
z@6(goDfIX5ty6Pjkq)WbzV?H8PK^bYCOT`g<HQ)L5yrAGWAS-n-WY}m9W$Kzi#nz7
zXS%nMfdOll_;9Ueou|Z(HXg#~qxHpid!?ew>Fcw}#)XCmQ1Rd<oDKQZ;8>#dF)mXZ
z1Fa-G3ZJ<H!4n+no0rY=BYtr7b7?L5eN7LC%-4U(Yf@(`Or)H<iR0!|*&V_yl^_wS
zQID1=Ohfy$X}4xZB`Eg>G<)?$t_|MoKVpkIBMEAyc7Mg$JV09D4i!r&?abEOi+jEW
zTu99Wf`yvk?4x25!dQz)a1LUquU5Bk`_)Wm=hsEiCz$OJ@|L#nprL|b<GDofY;Zo>
zcqqaiQOXO<aw5_yQXw0qCcdzFNgOW+jPgpOJ$xq4oBDkFA!8(R#HybDRBURN=uUbp
z{c~DREUKSUa)i&nm4WhfF&YbP?m4&G9Md($D9TpZ+FKlBt?Y-if2*op8)0)zfi+Gl
zKxByU1I`v%Khsga6fu5xSfwST)mg~>5J_@bLlmZG#9`GvN9=`Gab1hEc>^u{K!hc4
zC{~W#@~P_^$M0!*U4=c|Y8hdM5(B~v+QKgtHwxmb{*3Dx_qfgD@Z4)J?0zxq@4r7+
zcbna{#gAd|5;_a=6j=J-SJtdk6@<ropWj0o>!eE7-a|@BYw1_YUH9>udvW!*?l*~A
zfbzZxxs+?kc9C__0a3PIxFJiVa-A8qubc85$k2><yt)7}&wh|7J?4ne3`RM0SUj**
z^w~r}uO_z%2CZE0D0Q0M*a*}}w1>}+V_D6_7_I2A$613W!Ngp|f^GJ|r9x%!cf1j>
z($cU6esEw_^H2NO*8RSD_*7`~;uQX?`doKI=H4pu|3K_%$gInicI~7HAU+aHf!igw
zyTsB3uW7+9muDs35O{l#Uc4WO$Wl4Oj~{_I_oGuCcr!0Yg0H-_S;I(i-s{$6v+J!C
zE4E}4YUrr%Gh>&?rmNoHZ|Aw1WXdU#SlvbpCRf|hKl%4reJ#jP>C>FfkFrI1%=M8A
z#_upDOv4rl6<OE97C%VocJdCpbK0RhA1T0zUXz42PSxF;?XTJtO6@gU2)|*W_wRBQ
zb;<<&srsW^e+@l}FU?q9d-2#v?f*fxF9eDPc}6#K`N5uAT2{S{ks&CYY~~MYBdZJv
z$OjQ9C&9#<3FSpLkHt0*G-Up@e=RFcq|@yN-IdR1U2*Hp;9sLlUujQExbB^ygZioM
zbrk!_E9nin2TJfuL;9e00C2T+n_E)+n%BSFpwIR860NLYPw2tKbCNy+IPT-6=D?<P
z+KeeLCqPBm-^iT6#rC}uk(0aBGz8k#21_NJVfOcy*gwlH^SVUsETTrF5XUQ`rH;L&
z!{q?xI*8$7{bT8*cHc}y9?*gXXZQqVIKe}2XdjCs1(nLf!&1TMfRnwQurmTSp~rlJ
zI?GW7zva)-_6oQu8~s~Lsn)j7u&WH2L~7PxL>aiDxh*B-2JZIupLf=izR%r*20kB-
zX(Nr;LjTIw*;ha118R00aDe+BOM2eHA>eM-xtw|unJ?w$^Q(uNtvTn$!Y+Ip@888x
zD3uHJ{8}<0E&ny`BGyLdGIHZ@O`vSO|4}^M`hxa2pnQy@b>D}=ER6Hdp~8&SL48hN
znwkjUB9{p2@mc)HysumZoRpsbAt_j|b4BKfYgR`-swt<1h5SxpNX*a&IORodt|XV@
z-Mr##knu%VzIj_*m+hq*Lzh{vd$wuLUe{VbYeNLM(Xz|>Qw<_NS~(K0O37`!>MGkg
zUDB0i-H$4v;chT06}k|D*q%0UJrmGMadK{u=r8)^Yku3d+V@z^&D>Y35I03L%zK;l
zsO`5;`1Padmz<N#T~-gwZVXriA;hjvFV1*qN<8S-m}5BGs#T)E-d@7j08via0n3Oy
zVF&&1(@1JmUHbg`@|d7$+OjdIjeNV~jEJxhp3YdE|5_Vc_^r!W;YP!5&1o|B`$onK
zpAPlmwCs2!^kQMYVOpqYrMQz5I93H}UU)Wry<^_6+<4G|jK#<l0Z0uv^jg2RhjWg(
zqX!Rm-OtL%lK9YWvZ6ySDH}b~e_5i&h#CpIA(JHY^>&@6N8i}O12X$LuXme16Et4L
z>-9So^!cA8Y>TQrlpf4wi|j^!Lis+U^bAWa&}dP$J<G)y7XLWn86o$PXZKSjYCTpR
z5I>b!!rU!@2CDRk!WDsU1CA4FWZTUs&081S6Hkk<MU)=j9SMT_c<Q11@<(<AMmc>e
z3=AL+NkWkT>lGg6t_U`(fA{4hNWw97GK<S7<)mfJSrOb-J6Q_Y*XD@6DVK^jrttG%
zYp3BZcumKxV+|3hU#eSA^td0q@OSfMifEm+q#_%po?o&MaVve?a<YeTDWYTQl!4Xo
z+n#BS8JSO;hGXx)aXzcv%tYUtRm|&iMA&rHy;@hfEn!jSlQvLe{T>9XA@WDG#>>1<
zHM-%HhSQ>0;k2=x+=qdx0hg7!+wOKJqQo(=JFdCHAQ<9l8D%t%k5G4;`*+tkmme+=
z^^T|$r>4B+h)O%Jw*C#pN~~83=scyqy7nwR;pl;xI>x?|A<Yol{<wJUx%WhliQF0f
z@7zB_1$ZY{l1^ZhHH#%`FYApx5-IF<>RHqZ_Yq>gI``Db-G#SG4R=AFhVxymj3Z20
zY|`6Gmn(MAI+9W~UIiy0#^}&O6DLYhSUhL$tmF%%*pmsr;!3T!4i3)vl+}3?v7Z$}
z<$8`LfvpA9=fw5>DR|!u7XS*KjIHJ))}A`PT(+1Ht;@iIW=Z_rIU+T-`4<{n`yj<P
zw%0*H5`MhKnT>~2$UTT$0If{;G?Q6hA?Xp-h<pmbQ3#pwewE4Se7RhN9W`XADBG|b
zl-+f+A0*F?iRSI>#0|v;bPtR7I-zrS>QcAqSylAwWi`6=fEvj&Fufgfhj8zJKjYY+
z@k0xDEaqdH!H|N1Wi4LpKYy_>-O!u7Ka)4R)S@~~RlY^x*LbRcQ?>l;?aB|DAJkUC
zrl8&1%oVNQLN!~BA9bQfJdD1dpK=03kOE}3BmU-x8Y^0C*xZwYDFX1w|1$8EGlp75
zwKsJ1MB;a%0FLX+-J!$sO#_sZt0hxU?P_O~6urDzn5AhX`1+V1xlp@+8?||;@TQ$y
z@PmrZ+gcKEJ@Tx8dl2b9JHj@idPyZ+v+3Yusluhmg}|h-?|%gSgUv0u2aD^MTRzYr
zRvooMbDT9*Ul5gInVv;mx$XsB#Uy5{r480dfW=K%e}w4Fud!K87LhFY_AGR8qo`_K
z7n&}cAh-VKa1_*Ti|7@C7nYIUloQphe_K|W<+bw13lmH1@B+hg0XrtM%wdLnPrYB8
zBDYQ2Jq9-XMW`vr$&HSV?Mo2xC~hw0eA5~?6x@i#OM;bJm=pXt+JLd)B$qDug-Bul
zhXwX_27663ScOMH96YRShM%H($8Ho{>YzwUeaKXRxed$y64LsPqhY0+qOj8FMl{|y
z=CN#E(=#BlO;&A=WDj@>?pQc#HQkdl_zN}UP~jp|E8(e@%s^Lnjgf?_oNqmuC{u~P
za4Qk=BnEmQ3(5Jg)$^2}p<|HP{De>QFBeWO9^c3t+OuLKx2qTLSy6oAASER94d})?
zq{cW9<C1P!M;*zW;7-+LlhMRBucPYaIvjLxI5!<VF-K|o%lWS@_xr|%9)O^_Da3*6
z0u~ayByd=X{+;tjel7ksu+GeO+c(}wiOywsWNQMBp&&auhn?v>sD9bwzp0d0cJor7
zI7+i5%d^8Y;C&wtc$+GK1#wq@eK!zWdMl3p%R)=^1o33U)MLRyQynp>+Ixi#k#)}5
zOMhMYi=ru43%_sCqy%$Ou&oc&hTL$Wns4RTE3P$9racaCH_PO@3va@+NWe-+qt7Bx
zH`}IP4BeR=5NR;Dq@Gd?vXPO|TvM0OH>=o^EZv0?0n^C8)WtpfTXUDqv71pda`$?T
z&b6e-kK8UEzS4U|M^eVP=WMdDL&PnbN`y#Ep_@_t@6H$iQK!p3b?14s?sm8bIirx%
z@u2_J>{!x5V6T&X^`Dtk=Q*)>BGNi(#Q&qq_rYF!T3%!~Ekf*Y1j-WnDbN1<1FPvb
z;ik{u+M9$#)aURAHuv!dHA`jpJ*d}xmthbU?@Zx&+`R=`9V?;>a3#03lxLg@fhK3-
zSW@zkeNpluiP#mudC5h(sPu1ti1=d389yVH*L+s4u4Ajij76gRv<aYYh^hSSbiihH
zTEtee_#6I}`D}WB$ufPsg>Q2(21&0Z^>1>HI&gbFo3Ztf`~92dbKMC&6GLKC_C5tp
z!wsma;H(do1_n}!b>ZS2sO43MX>(a{{C$V(xp&HDDQn80k>vHbzlpGQUFV$_eyvP<
z%U;CkLO-2bq)o`K*77JU?SJe*KR?YxR#PWoBHKUiWq8cl9neBoAg*@L_HQ9W?!Nle
z99N`K9oPyLQq_0+f}kIE-d9s1#moF2y;1Budbrm;5xv6O&~ku>)7|gcY9aQZ7R(jI
zJ{Tt#yC*mO%Z&3tsB!OjK77oMFGFWbgcl_R>ah*s*j;n4G9oIu&AcL5&^K_V*nRJR
zZjsB3EmA?u3}uLiuby`67A}-B_r7wPnRcjf`n5b|wl9}r5Bc54X|avYw3N*pwyi50
zY>tF{SZRn><e!>@)oHepEVe|i?rbjFG$R|Uo5?%y2Jb(7qFn5XYX!@lV<-t;pDpRh
z<!tCpD7a&38QjcpF0_pA@^g>LVRfI?NN+vp*7|IQ9PPV<y3fi?fZ$YDOA3r*s2o&;
z$Z*+F-nqf+y<s<ri<WcRntEpw;k&c-EZ^+KxZJG|4#X7{Icw(!NAu#^?X-J52i*4w
z&ly6g%y*2yVpZy<^hrSl3ys;4P*}z)D8qL#m%t0>k7qbOs^E$sX<|^{8~QsD4-b{T
z9dF{jAzt5#_6)?C+AF<}bl2<OYnEs*GF)sQ_xw|F5U2(*rdL@~%J>?koA$t{WdoxI
z5>xQ7btR(}_~@JLm-|!ehkOmt2r@KaA=9gZ<E3MwXV;byT2F6HKJ87Ml1O7e!k)r?
zL$L_8qe^zUGiI6m!PrOrZ|IEq`MsX@)YL)eV`jk&?}l6OlKBGEH3A;t^3KgWEa^mf
zsz+L=m>IG>w(X1d|Dk&@c>40GH$ERuhBl>4UU+<=P+tf5fMvzrW+vHjO9l_m7a04_
za0DJO&`t|KdUuV-bK+&J3g+38_#|LtORUL$$(Sn7lp4jwyw#%k8RKZD43Gbwe5o*}
z4J@I>6u+e%yjSMT?A*uKS^cth=3wg-)=QRuSLssq-Fw&n)qB{py|kryiXD4&mHfP_
zlx^+d=qBsQVa>KbVuJ1a>_-203i-2QhToponDb#?LjOj9+~pT|D&y#83W*#O1ny0V
zc7=Jg^o7$0sZFS&hnn?2wza3C>o-TgJ-78MApugO5!T60(~b7Me(X0t_PA_uK-(89
zZAdFdN%9y^KuK{+T?<<Vsg@=A;dB^L+Q+nnUmQ(oo{&<T>kR~=NO&QQeJ6EXbJgj-
zF=p#-72+=#8KbKMJ<Z4}HCpRcxod(MtHa6?jB}e^LJZP&OWf@X_uD=+@Td71YV|)1
z``bI<%-w!HxQ!7W(Gde~TBWq635b%}zmJ_8*So?*k<_l*f5rdY8bPSVeb%Lmr-UTm
zT)6Mx)X2Hw*kDg|1AMvgr}HCE9nH}?)rt9z!55R)ap%l6tmO+(ivfCr#zA!$WK>`h
zVp~KGNW!VUD+r&R|JsWLbrWYD^J|FHafh`TG1lv6@&29Zh@)K1yIBgiyVsU|MQ|WH
zU5J0XE&SR$FX{gv$5%#_U}xxVyu~s0ql_idgr@-V_60l$isuI;7P<9=8Q8G<k3!;<
zestxVP&~Earh?|di3Fmb($CJOvD)4Z3+EH(^+S@E$ifv<$_^VwHe-G?^L&h~MZn}}
z&B2?!1C(6do6}UCUh>FxIWfua{yPzIEf^y+R15Nt)O4cGrade}L07}$ovoFqU8Own
z&Et!OAgb|?7knS7qf?Yf7@|syf{ggZ)yRfMr_U!Nb^e0wNRKTUNM9&Wyt*5m{J(pN
z2m2@|t0t;HM`h&DWg<fks+dHhp4!6a(n75=JZvl9wwZ>C7ibM%%WqykDiZQGy*ZB1
zx5*kaYA`KS&O?i;__?uAol;@Qq)6~tyac#NiuK8xW9XuB{snGl+Mh+;?BnC6-_Wpn
zdRI;kv<fO;ucIq%5L9P;iv)8he?y$db~R@L0}R5vIwslj&Y)7vM0Vnb=b;ta*Z=k4
zIqekWn?@)nT_6P+n}NooBe&^E?dR+u|5}Rw=?$E;?bdwb@%Q)&BXFfZt+iNLLKx9T
zj`8-E*8QAH0~n5U{B7SJZgK^;QpfftVbt)rv2?BLhK4ie*ZiN|q;m0sTtY`uN2HW|
z=S}unD(iN^*ypaCvvsc#f9p-&Ntw(fNz0GT_@t17<KB?wu?q-YrS7>D6V+B@-%1rT
z>!zeD;TayY|N1m_YUCNaZY>yc>9q7Er@;T6UEL3ZhkoW2Gvj3h3qiC+gW(l@%y5DC
z)N!>>{pCstuV0l=@y+2*bv-Om2M*JhFvov2^F=N8<8#({jM^~N^?9!`47{4W1zGsT
z|0{TK>A0!3Vo%Pv{QHzKiX3i}<UOy{LlNojzj{auW}UHGrFEHWv7!4}Wa)po*^IHi
zKSt>jtO_4~r$F&=mgaX<2H~XtbqiI!f`rCogS6;(nfH3rTCj{dm#oi4zwb@Lmfl8$
zk{z!8&N60%+o~=`_UrdAEg;N}U$CkF+=~+GIq#m;ygt0xxsg?}mdtKio4i>jb*kp_
z*#J4aCv79DsGISyAcH>i*b@WE`tQT)nSm_+d@uq8dJ=_^YBAn5R#La@<?ZS*{a5Ag
z8-Ydt??C_*KkL^215T5eOIowUmKpdFX?`aVlKmgs*gJYwe^Y<$!@Z>LX*feyLKBSY
z1!i7rBGlaGuJ(YwgBULSA{JzsQ<)xK`W&N?-;8mee!qw$Y(|(K?bNy*;HjysF(c)t
zVzhE(_<r${C#mP8gQ7%hu*m2qRQ+0T9IBrZ6<i}(a~T*}l}X{u)mh;BO52UjypOcF
zeHmZ13eGVZ9w4az%EeJigR+cATRbMpGnm=243GVvE$}~z9aSJzTjIQNd7gBs5FE&Q
z<*r%bw|1jf->Ho+d{i=gR!=_#=@JmzWQ+oc&ACz}ZS0xf6J|%O?kGQP%HyoaWNJ$-
z$J`=aTJ0ZgHQgUuzvWccl@7a>ioyVN1E2FW`|VUa@6h2ascS#)cPFBk1gw)y;z-86
zKDGeTtF0l9aQFnW3PDmhK(^S*&Six`J1S~i?KA<vr&~@uJHzQHNO1foSPBA)??H~C
zN*o<7SA;Uvbby>R&e^FKJE<v`hB#i6=1hB(PmXzN2e-Kg5q{$lHhuxbaDw@3LQ(2&
zGr5c%&}@OV_LK@kjg<F&=3<mw`+1iWBQsyo-C`~apA~Yx&h*{J^>@*#phtr1C3y?O
z=`=&i7F&}ka-OAdW(vEeg}ilbT&o>8Umc-36PAw!(TY1D!E~SQil`U20r{v{H+=c+
z=O45pw#-I!24X+Ik?Q)_gS#ZCC92!fCyO81d{8W2d-<g1)|CROtM49lXUa8lmZ8uY
zKEOA;r_)ohGee#}Iy)*avAWy^CZ&R#<)w$A4b_B`3g@KCq<_F{H$^>XfF7Edn4?!_
zA(0jfpM4cq<;v<}r@e$IEd27(%H2!vl|ZzPOCbv_-lldL`RF{B;VKdDUFPyyZ95he
z@;joGZS#S-<8_{vbMJ^);~uM>8!)4eT#tbBP9IM5zIQ7tE=$jtKMIcX|Cs^TKFa&5
zeB;GyAd7ZdAE^0i*tjbQoRE{j?Wf~4K1I1HE;x0!GVN{vN_k^K8eM^#gtP&LpVS<)
zsw!+P5;~H@o$czGa-lx}(aj_3TD|YBBK!6#Tl%vfX^TDNm1{ARn?4#iWBb0975SQ(
z(@Nd>T)j;-m9OGYI9&VCcgnrJ9;$ju3WPP{)Z12<h*LlarAE<KoMhSJwt%B%M?>N%
zW(+RS(Yn=eC(F&2z(Bplm70TG?Be(ZpA&Yra`#4xUZx|;>5m}cV-leFLPe<=`+v)?
zX(vKuB^KkT@YjFa3oS%8a)qe3?S{Li9{svd7c^roR-=x}aj{FG&BpH_+YV%+(#JGG
z^n2<dQ;y}pgXa!0$p&ji(i)lFgnGrPq%ceGUd|PpuhSgOfC+UEb|4eCh$p-9allb{
zatsQS>foJvuGZf;*%7ACHcJ+Y&bO#o%m=)jH0NqFy04j2!E(h3R_G_=84#6I0%1v}
zSGu@-S$vSDav&ir$MplXY31=Md0c(fZG7LVTc85Fj3&L{c6L_k%<rm0e2xuMPF(Xx
zq(J66&+d^gF(SC}K9MYh^wyHM&Nt|G(bW>y=9Ase#4KUY{U?Q-iHStQyo_f0d^^A6
zV#n6xFc+8xy>^t*5dXv1Hw@%=rtNbmav7Lgi$zK}ow?VBw%!*EdPHB%i0(fXsR|%v
z;92<!?~U6wsVHf!6C&o<$u4^Sx<P%wf2VvEQam!?k4|sNC-ImcT|JB7-8Km#D4lJ^
z+&b`A@z37xnT*##iU~~xB^Tx?3li)R@qQ4DAk(*m8}l8jHnAP>Sd`6{Ux|p(eVp>#
zY&&TEBcSKNG6XOlu3k;njQ7=|k*sh-Ea-!R=HT5a_ZSo-HmB&ic>q#rv2STUjH)WR
zVw&JfCWoVJD1PZA9)C|x^n%j#Pc3JVFk*b-&EKne=+#~o_ok7t{4Mp&5)He-&zUL>
zX@Zsh`(8vB9fuluOa_D6g)#Z0leIAkC}YYNHIhYstN?vcsev_BK%xRZohEO#3kkn)
zPwR+(Uq8I<mOpy&t`KEa#ik5a?=;4M^g7o~@;lowC5@6v#*trU`5~Ag&+L7aE!|Y~
zg*4Ks+8CcBF@**%o?BmGCRw~2fZDqP?AmS*lX|!G^jCyqcJxzmG}I^8HGqv4UcB|>
zTlR;GUgJ)<x6g+7*&U}Pma24y${Z{PxBSFXq$ri<aNaKRQLM;m?%Z#^AT34P``l^f
z{LM_9=`2>X*45Y*-e08}98n!Q%wyXI{v7;73WP&HE|UXMf)u}Eq`99nCyO4VQi6t7
z5x^{h{=D3OPm4uDxTmypSZ`)N_efr+%`Mqn$~OI5vJJSb0`EOpxbuSbpwl-{6W03J
z*;@RkmK4+xA<DTWE5m80c8Y(st!L^lb+#f@)xePco*J>lueOT%7asE`dP&954X1@_
zvU4e*XrzCAi6+|bD0=%0+G9@Ytl=qVv8r_^?`(gX(+s&veq%X%5uU|r&_#ZY;`4^w
zI$guS*Xn)94{2i{r$4DZJZ0tIvM6eRDEt!FYAGa`*J)}>b1WH+GISr$CyUkv99Y+U
z__d>c8Wovos43}44o}YSoiuHYz9mnfR4f*L31^Y#dm&+cg-b6Gpe6n1UhECQMJtK=
zHH<<xN6JjE0(>=&u+XoS`A2HUt5F&hIOO8ASiOOH_>j5Ce1$!bP+o`I$8%}cB|{~S
zR|jr3vz*zIzzdtZ-VVkgr>94ds`;Oxy{H;_yf!8VN*^_PZWAMKFkO<|l9N=V1Pi=Q
zYg((0%;9$VuzBV&b6iSap;Slp5;Wa!`n^Z>AI~56R=vBt=J1m$(R}hzNAf!-HKIl3
zJ1E|h*V`F7#MGJfi0y{|nwKmGoJK|ox$|38Z5V1E7(ui-1t&d*H<1shj6Rd2KD&g0
zzSRWxe@C0xbxz)iJ|Zt7G`i`M7OvMdsRFae#)x)Lsz>MdPNxkrN-+ZJOE}lXxp~~$
z;Q{!ecoDxI-KMQ$pEaf=>j!+i0bdH#E#0q3-Wnc>z55o5petMbicgGij_GQQs^-1%
zY7N|yLDe>g%T2qawuJBs!fU2o(iu(tjS<}=BQR4A#}l}!(^>rKT?ip}vCDA7cTn>T
zTx4vHfpg`Qr=d-(*)|Sw$(ZYw$j&W{)33g0#X_ld$h_iEw5fB6y!o3}d)Ml`PQ$op
z{ZzV6^Z|KZN=4_P+-Vo3^gY!4uLBaglrxX3Hcr%rsi6h%q<cF$K_YJ{svP#sIakw(
z5p@U3)6A<q50noQjW1Ohs!aC$=!LG?Owyz4exE@*rPJ@w0@qmQQ+T`vVHf8`%f_bN
zDob~474du=w)Ob!O!@;_;+pJyz}!;<?>WFd0?(b71&7=0U*~R8Gh4NVD6NxqLLqsb
z!_GQ-GZ}b1b3O%>v~5dO<(2w1)H*I~*p2yq_69s?d1-8H!t--QC!I@dQ<98`J^pxW
z5^*F&tOP8FJX^(_0f^a<PHBCVQ7T=P_HIpZ-gv0q)^(3Vu<{Zq3fC;8$2@^oU-y?d
zZvG$?nw)`|Fo|3`Dg>^;(M@H&q1&yBwHO1Yjx8;C>F-G@ZqZ0u5Xzu#c{Q@6?*Jy+
zcSwpPAuOQ1@Y(IowSq^huXW|e``Aj8OKVF<X}qq@P1s1M>R0ad8{1v<49x3pdKUUb
z8vTw1|2<Ar8eN$dy2d##H55?FS17;<d%VX?VLp+2A`5p2hE{^%Mzw;9{;I8Kk?>c|
z>5NI6iP46Ki%SIeoL|#R#j)yltED*2XW#q`t`$-q!i;^<kce%Fx?MiDrC;@+7VR*V
z)XdWBt~dD@6i2m>4bWB;z7#YNYq~0qBBpLut;05cl{%M2^Sa+d=X(vfppTY9O%$a{
zDfZW$IGy;M1f9^m19;O9Guxf?G@9!AhXv75Sk(^Wj+;)zJ1#Tv%H6qRI@D<YJ0~}t
zRiw+SS+4{W$>OgP10B!EXV+I&GrmYronqpE2gNINYoJedH<f4`q#A4F=Kd*g&0?vQ
zkB3Su<SIo9ns0<6JM}oI8hk7gS-DCQ|5dzJT+zG?*{3>}x!Ud7xz_2~wbtc{|EF^A
zCz|qlI05xwz1!Y-o-;|wZBK(AW)x)M?1RBz<zL9kKhaHkG!ygCK5WKNw@Oc}R;en#
z6=vvZoO;*|#z8%Ht@gb}q@aHg?we50-`jVCiah;phj1AH{#j|#Y!0fq%NrR&O!u)v
zz=L9UyP>bFIb0IRvO7ScPEt;aqwMq;(|?$1cUXNJ)Yvk5xlP$_*1FnD{G@0I1tE3d
z&tsIZSArA-=T7H0b16?2Ru%~K!Grn;?P;mIW`pTv%@?W6nO)Y*-l+cn|NVc*2)tEJ
zWZAPgOw9bbp-wG>1=2iHIw?1cB&;Iih<i((iTPunciv$}g=G9bHrndBs+_84(|B9E
zUc6Upe%!f_VU`~uoAujD<j$l_KoU#$=&X|QbhL|F4c;SUF@5F8e>YN~9CCbKGp|TC
z4^a3L^7i>R5k4B}R5Vq<30BR4(KU88bOK4GQ(=<=0a5gm&09@6=O%IWC5FmoMzs|4
zA%P)D28VUnGyUj4B)Qnb#XPn4!@28*)gO=7jhp3H7IN3MSNxiwMGi0eN(*ZhTJ#+2
zmW-_brR@f>Gi}R{L);%mEPZ=!>iD#dYh*U&$=)p59;i5aZ8!qi@cu4qn`VfJf3N)u
z8-T9$CefF~G0t6*qSdQD>F6r<80!OmlRMLO32ZOsFiLxS-klS6cCPCqC6h+{fv}2#
zrvt9NzeJ?0I}jD;AtUYtGcq5!uFF4zW^(g)@TRXPcMZosoT!)ITeKDg=GSE1wqgOd
zE<wwA>_l7S6sGnG<0`Qcu5vc7k)5#3S@htR(REb7pW;l@e1EH*Kcah`ev>r#8*l34
z%VzSz2;2rd_E>9SU9n(t4efL*(V|SJo#?gnT^9@UZO*UTd%^O#WR*GG;)^MmxBi*J
znr=~_uN#0LU5P#LvvI~N0p=^h^JU|kRdn(LG<D*s@!ne(o=93#dgVri(b5?;@Sk3E
zm7*KGa7PJ@+pjb8C5TJYZdl<6UOHOd`-4`yuzdRRp2hefX8(OiH+|T5$-_KXJs<gE
zE_hvG>-DhIQuvxBpdCiAl<D}gS6Ut;EP$fV;CTzV9_fsJMXuIOmwmc&9TKo{A_a>L
zR_|UMQKMBnTl!vX>$j(=UjmT@T2i`^&bSNx9#W7|x126>T;aKA-Cw(eBf~6(BcRHh
zp8C-TYJ1N`?v2%*U?gNzOLFi}#24W;5SLtQ_^gg`-Z&BI41G9hD(#oqRXo|qGc7jW
z@{hvHrCH~hw?tVXbZ@%P*jJtH1@OC{g`B@x<quQNjp?n%a|ihKdQ#3VTkT29WEUT~
zfS@H;K3DH$lj>Y=QdrsGa>ks$HZ3+I`&wbF+IH>R5xxlA`ko2RxXadUZ7w7-mj4Al
z6I~Xk_+y^qO>fV+btKG9fl4Ws?Xqf#zVHv{j;U`Y&v~ZvzE`KIwc-ZOctr2+fPW5e
zJ`p1=T4jZkmvz1$&99iXH(O4~%{=E8l!vdOfhcVzY&v~J<!)+1Ca)~KY<-~PgI7k&
zM?TZtpT3lA@iR1jPDTZi;yOupEqv(8&dHx1`fn^7V^ijNzI@V<FYlpD^g?%kZL8mI
z9Y@$Uk$JW}rjq2=M&%3mZp_B<0Z<Tcf+$#&*Yu625O~3+7{lcNByjtl4adGp+H;yA
z2pL!8jl)JR-YtIY+U=%t$R7s7xOrx^B=Py~{`O^>Rb5{G7a#Pi{^a3+9*xQLXcx=8
zr|Vq-J2uB2Mtl7HHD{C8!V7cRog46L$!f|O;``L_9SLHMYz5Ej@~6`qiIMo!@WdA!
zHhawr^b9zbn}#?K8yJY12lUF-1XUJR!MCjr%O5$e0B&BLmi~qVMaaSP^7S*xY95)7
zPCAht^Xql(h3ut<6z&{u#E0dOQ#5)Q3bMt$r*>DaSeN*!q=c`dxq;WTo#|CM^{U)?
zUN+?%gR;njLs22{s3o^U|LEN5gZ5C#MLpN13o)REIvTyrj*(%)Ds2A_Ag-_C-QJ*t
zw~`oOea4fj!g+b9fcEtf1{{sgS_IG!U~V%N7J}QDrn8X*)B&PLHtCq67oa9FetqXk
zf`x34P3LR71FC58zTDu$=Xu~o6yDMoRq%yU66r6%17keQZ1xXxbnV7!E&Oq>tc+ZR
z5B%zQ305BJ0OT;<?e7!-Q{I*A{9=K%7rBIHhH#x)nrhYoh5aQDf32;%6bqpoIkjr0
z^lvYpNLFXBR#2W)F?UhfAi&>VirRjHuUu~m>2}iy;$m=U7|&bIo(M;T3ObxU?_s1y
zk;uc<1=^07OiYv*)Rc#0`stD5z~`<je1KB8`sb=I-Yq=EYWF=RX+UEQkaL+v&*X;y
zyD5gbHn`ed<<SgyZ0Bs&Wm|58%ZQih?20QVubkPT|8YpKfhR0ycjtK-;>6~B_k>|`
z{qE?=E(iam9n%22359R^I~#t1X^fgpM&P@4>%z&zL`rlNaN{&T#WQH%DhxvEx0cui
zHJk*ZV{fXTaY*nc&I9u6aIEq5(HFQBi^((mQqzW`<D6zTW&u0C&A;264Y7-7q5GSN
zxdBBILaHN<f69lQhdbS(QufrE>9M6`wU8-b9aGxVIB>2G?;#Fj^skOD((?)85GV_s
zmcR*}V!0wo;TA45p^C_pHY!5^gNE_!SB*Su{>~?yaDb@ABky6@QSUol6K-W4=pa#T
z)Zn{tU$^MxQ}KzU;bZWQToNI6i~Hd2d(5XLxaMU&3uQ~64%~FU?;1|%FcSl~S2ozs
zB^k2k6@WabZSh3a@W~%BToT%|jR%9dBCuXVcG>gON=oi`Q~f>}yNN#Dc$OcGDIZ4@
z=O2#L(brVd!Of(T#x(Z<6e@fxX|J^(%o1lPgFmlp24C};WE9Ofa~T5-5Vn*o2V7)C
ze(?HGbs}tMA|G9OGOYJK;P`xGGhgAC=iHPI{YOqe2Rlz+wwg7(7-_Wlm2Y%X^-^n)
zwUq<Rv#@g>L!jR<RuY3qc*Jx$e66vgBpIY)2Gap|iSbyp<K|IA60Y9$C)z5fenfX`
zs6dj1n`I?y^hFCu8dp3iK7`5YBwr?ZsZHsyf7+8v6?m;6T<J6grW|mb8|GCI5A|j9
zi16a^c{7FMoJID^b@ZZ5at&qVH|a{z$llIW^ceP>koRnfZN1sq`@L!8R%-D2`yida
z*%rU5mtdzlJ<Y0rUj;$Z3C<ojcLzk#gyG)$Qw!%h0&j8*pOn?2Th)!VK7jh)a+WNm
z9?CCxP`M>3UgHFa8JllJJ{;G@^>zlJFj;lW8&#VQ(S=U7RDE-Cmk0ABja}VV%jvUE
zVSLi^eevW6`4(gcf;bcNJ{bWAkoUH?ifjS*G?OAKp+iNs6B!2ME0Snu!f;FV(YQeC
zU9{6$9N?Tp5_2L8<(=XFWFH?mrO;}&N4nAzQKOvvqNDx3{cQiAw!|Y$(w!?t#Fg1h
z2!ZyC)me1KrfEJv5@M1&m}%x~OpZaOI&Fg7UqskA(KK<!knk|TP}k|2<(u22CF}in
zQ1^(1@@lswKj@G3ybJmLrh?4`aF7)%YOwm)ojAP07r~Q}J3(!C^&#QW?-@+Ab*;i|
zb)=M>9aRt}#Pn>R#4)020_~W|=ZWu+1IGI<)@$VBjM?UGiwDb;*ud@P0Zo@a6;@P@
zi>2R_H|}+l?14GO>e!C6fR}%Vx|_|0_DDfnrlc=81)|ih5u)3M<-}_e?lug|ybInK
ztoh0G*LiYbyDuMns0eUhT{YhY^t2mA)tWiF7e2&-TBK7aI%C0FweNI`MOANcALp65
zccyuXxc?5XTFWy%1LY?0X=gyyKXix<X5G0YkX@AOq6jW;Wq!G8M0C;!zJ{1%R63Al
zd{;ZZQg8RW&)wpdm~AzA17s{gH6S{lyqBTUrV!fwB&*d$woqx%tG8Bov8#Y)T;$wQ
z@5x9?x81$lka$kK#?`xI-+ASp^PR$0rn~{om8xvuei_ryt>Mp>>4WVmFkgK}3tCM}
zc5*C3$bIR?XR}e}%A8*Y!cy8&?ctfH9zAMEJjNt#1Zrko;rReKjdS+1lj)hObK|ZL
zJD02vv!RoawiCw)?o2<JB#z7*B6Oj(?xQq5;*OHxnK>4$-UkOA%q!A(wfFFis+We~
zJ`nel8H>bBl4}lO=vwmE@5m}?2d`g%dCjfI2D>LCu=>KM4_qPuPy_$fg#Lu+a@K*D
zIz4~z!*?(WwJrC}TatWfhZim=S#IVXF_)+bTr#hb#yF3{Ckr=*x6oS<K>tqHj1KqB
zA>FKPh2&u*+XO$q5V#3*;sc}oBeiO9ae*NZ$oP4UUwF)4Xc}!#a3=jLlbd(<zORCC
z{&qhP49M_KCc+TE*Di2t<V~|+XCQ=J<B_Ofsg^4Cc*nXtZR4)vfou>dt{AL^erd8s
zj>r@K<eKkXt8D|746-_ynq0w?;X1!p0QtHwTYyV3^55C%7}q+&#8+VKg^{k_nq5AX
zHOi4^>~&P47~FT;B+!paU`@Hxkf@vw=||G40R^>vM^du3O>@QJ_eaC#$5Y1a>7-H(
z+qy(!8K0TZMy?&Pr{7rTOJZjF#d)s+bPN~t<<>hu{hmGRAKSJE&N&nuEOpD$!8_B<
zuJc`=a1euh{>l0!^eF8)<N6=!YU-R9*4lonNw^WTKewPAUj~tUv#4-79U6#}SeNqm
z=kQl`MSs)xQAc#SRRAwVMr`YS%5bW845JgN!EtRRPlrYTl@BE6#}EDBn~DGUeF}^(
z$j9whZb(e{EK#$Ioyr7ZY44tu!O@P)xb?)_^o56>VLb-suJjL2K_J)OIAr=(W>dtP
z$NF|${QpJPcZM~YJ#R0|DmFkxKtO^h$SO^`bd@4i1S!&j(jh>kNeImbhzLlRF1-^0
z>7huKUPGv%hZ2w)I^;cJcYnM8>;05(dCr-cGiPSb-1kt!%Z`OQef*nt&pS*Y6hkET
zdH9X%?p#4_sBi%wIfCLo>pT9%mb5FNyQn1i@xBE3^SdX<mT(PJZbKF#`H`pWsy^nV
z6J++5VGfM-GsXNhf-KoA5QK@{OX8CiUN_l}RCYs<GoE)giPjl^E{X=jGCF-oYjXEw
zNa`jQO?q}Tow?|~R#hO?-##>6Zb+NaqK&pvKLO%aZ)YXZvs7HW%8cvyI^{|eP5GK?
zFt^Gu;brrCI{(MzF^0Y`D?q<+Y*56&m`d_UJDzW<_cO05yrO#y+u7;hyfC5aP!qzv
z5mGSZsfb-P9&nDAX^-3C7FGRggRhmy==M&qJNTCClBO&-bNT=M7-%=t7j<dXTQ5m+
zio3`corA}~8YImReWjR-(z|;$2WlX318a%nZolizP5_F8+)~)$Y2vjBs4sL*p&`(Z
z@#}S^77HilMOvi(O;oWfzzJUKn5+Biggb+By^-zS@~_oxNlQ1Rr0p|JGX)cmn<8ae
zAPN#9uvcYONEdIs)umq5_kwkdHl(e7uwW@0b`Kd}s3-`-mWljl8=pCi66x#r!|KzY
zhv)i%8C@i4<0X7;32ijv1z~j8l+$l71DK&mSGOu0WkK~EPPVpr<-zU~N*yq|v9Kai
zOXiLdqsATG?;##E@#8sDD?$k9!uC-^NOgKCVLx-gIYFjfwR;a;-Nv1O-U250+YMIm
zC|}q}3qDIG2Dm*mn==)O$Gr2yGJyj!{Rrh^pI#*AP84*Yt`A_&3J`){jx)SH!)FAJ
zO1t;|B9}8;v<|N=W=(5ho8-N5O3#ndJ{noD`t$#MB_+5)me7)Zg^$)qeQTvUowzvV
z^zAPne6puE(5V!Z&7MLg#5HoJtJdu1&Z%U1>WEPkM~Zw3ZSquS5&3Q!Ye5#PCXd3=
zM2dn7{+oQ2aJfu~P}_odclQw*{l6^%EMu>+geY*8lLOr;%r;*6mxFwM&OLtz4!1QT
zp<(W~$=|E%OVZm=<jK!V4WMRSdfijzU~E+HvL=3POOP4IQ|0n&I)ZvN%NfifcscaV
zF;!EyWQ&U!Kk<MQZlcNYx9|d8?8qG{U{IP~I<Z7W81jF1rPNUQ3?teG*QTrEeQ?kH
zNaY5%FuuRLe)K0}rHovc&OtemJ~rQlFX>8KpkJ@ESGaxIcx2*%=Y`or9q8h0Iu$kl
zZ_mgS0M*1V?Vue@Rbw2J>xTcY;FR8Zw~Ez%Tv+bQwKPI@-W;QOA5K(B85qbo7v#QF
z5$(=!hIwT|h`XDP1?O<o;NJU9)slo+&=s&^klxw53f$)n;2<_MfVAY7X6BvUzn-9d
zd%jL}USNjK122^JqB_C7Wg~~hXMcN?t%CJTCQh!4xD_d{n>AIr*X55m`2rZCL(hV{
z3(bznGpzjqD3QV*Gq_hFB3(B6-uW^9#?x1Ld)CAV^5+X_<teTI{`&*?+}JBZzT3Y2
z&_tJ7mg5~Z*8qU|KNlpqI(@bK_Xnv*qaH8S?7)znco`p7(R8_J=Gwi^2OfO_U&A&7
z^_2f|0CkrGMEN3vHKf5OY@`9$PuLnE1WZ^Qyg=SQJbZ=U&<|~&_d8hWc+Z@v9F4mn
zT9W;6rgA&(XYu{d3&p+PebN=N=Xh)P3f8LY$pm<x3g)mz*}-pCbez1`@BE{Sj7M}W
zCkz9$9iObte7`3G=r45E>A(AV4y2VCmeXY7b#XdZ$S}*Xa?8)>gSvf=3!6)gIK$hW
zh4AhQTLc#t3TA-3!wni4l)Nt(M2D+%O$_q<ZB>$syWpAoO+e#iH&sHRm7=g_=iJx-
z9G3g2U$J^tx}XI)?Arl;bhV?owO#MBK9gsckuX}{Y4O@TilgXZd(}4WJohpHWM0Uc
zJ+$xq+c|#=CyVJX7}u3Q{uL9=LNs!J?l{{2$YwGCyeZ-VFG65Jky=prKu<=yyB;pU
zPfT?`_*0raqI+r7h)%JAYr;0(Wxu?@g(quv%l7~Lf9SKPw4nWgjIufR)<^{1bdDND
zc9Yk73<35zP;wjcay*<?wlvn~h?buaDW9FJ&WL0YX2vbw%kQ>Mb>5RN>@DdttD{dI
zCxN6sq}OAuK6>%lljO49`Q?AN64*FxqSRuYD^CZYVAmU6tpOR%zm|I@uS}@liop$V
zd4BRC(w5=gW$y2*+-P%k6N{n7?h{!MqG!&nU;)p_hoFMUqGYl6`?NHmr(_}R0UVZ5
zw%cDAO81Y@a_yCj*jZCSfOnDHj`Cl@{Z3fv*otWy&tkv*$H3jl3%PUv;GMjl%QAr<
zzW(QT6Av1+M0P7i&J`r4pC193bdm&vcWx0Y8w<H#^zQ?*Y|9+G9TBW4ZIoE}7myns
zX+2HBM@8}Po%z~3Myxh?;WNz~*9C|N9chHkVc>31e9aR(%klTk6HeF$DV9Hcw_#x5
zQ5dt4^a~uxtlO|;{bzWNM6Q`Bm5gZ5n(c#z^A`b?5SjKNBlu{z?-01ge%Fh2|M^Va
zzC;RZm0m~nuS6=7xf6DYTe2p~=Dy7uRpyZH(+?0k??_(`bZkLnFg|qNa{cGa3c?$`
zAP0J)Dn{UeiAF?m_xeAP2Nzjp!e$P!zww=-`q$W)37b`hxrebeK0D;t5qyN;&*m-6
zlHn&g_@Of|u4fla5u0RUKcgXY0H>v1eU@rSQkD`l8q6Pk4)WW|$E<W);!p`urw#Fc
z9OXiqnYISNN>D~y$;TQ3Y8%RbL!2Pu-ndEDm5zD0Bm~~X(u`B2$f4h>XAghvV!WS1
zS%m|ln`T{)?$U^&tJ-03NKm|IFgaWU!um~u7`SJ<c+Wl|gUKlI5}9H_>*eeJ-6LOZ
z_6`f$NWJ`fzR$NyxCI>$k1$3deqztfy5Pr^>>g%>2neO6FOn1u_|ID!A)a=#v(Ep7
zNj>1&Xzg>f1*`T6Zx_1JneVUq<3EaM-aq_>+CFHAX`x~D5h7KxIaCYof;(j1*qw_R
z_qx|@?bRI?F41yi{V_(~th?50hMiUAak815Z%wKMA!#P^F%(%ezScJiAvemA6;C9>
zN+Zau6~7F}<4Yu!HcM56Yd*C9_oIG*i(_?SyuxD`gXM+pX&k%Cj%8`yVfsbl4*0WB
zC%1R)^rvmB%GJpd|0QhACPfHMwB)Ks(}J#dC$)>+n!sB>EQ2umx2YSfnV>DUEY@$=
z+6Jc^6MZlC|9*zAxj3k;pqh#g@q!o|vWGo-nW|{xvT~y^lo)nb%*gk{w$%<rbU<hR
zl^hfAQA#NZBb*oMe5%V@%Fe>jlh#(>+_doML_0CGtMiOMfI5O(=DJbZj5g?)W(eSf
zgyKv5RoPGdYXU3>r*gdw1?-qeIc(koe;U{9G8G08FUQW~t02?*>`%YT9$av^2qGJ8
zS^VKkZ;?x2be<wt$V84^?n7$0u51fAUNS$T$N9O@gbwC{tNDJpQcHH?Z9Ok}*>=wp
zH1p@*|2?chu0L{Cw9nz+>W~ih4U07^e<hZf(h)d?yWcPBZFYPPSgj%b7)t_N7h%kX
znLYDfi^W4P6h@U=PP5(Auhk;^h43T4vP<AQ6k08FGy9G?AWPbraWWxe#crqlYlF|_
zYSH~o2mrYZB=b)AcpWB@E&Lm_Kif0j@l|brl#uy!lO9f(jnP9cj_=e4M&4sxAdJX;
z5_S$dATlv1@n;4o2r<x^la}K3#jlpS61s+5-i*-)H@a<9h1bQSAD;X7?27X0S?dl*
zlfUJv$9E=gidA?q_6bm#`MUZJ(g7hy!pQ4bHdOKdyAh%uB6U3zSYdWt+*g#{Iqh+D
zSxBbIMjFwAv$v51!cR45HGF!k6?8^Z>gkb6b7i$&R={n2IwSF&y4sX(hQ@L;-emrg
zY%%`&t&EyqJaYwLU^~@jPVvKMR$73)#HL0!K-9QCUElG?a`VwZ_lMCYS1Wc~W0sq}
zjn|-F&z&%9Dw`ly%L^11j?5)ir~Sh2?2DRnqirX8*7}ff1yO_Hb7S-YqO4tUlYz)Y
zFFrC*l=cLyaZcRSIN3dO;&}V(O~6IjRg3p$@#56X+*miIB#6u#yE1~~s0Qe(oEr?G
z)dSaxL86_=X|w>V^xpJ&bWNe<!?`2JENd3rPjm^DG8wIW{?qs1_*=}iiDFGcjxxMU
zvsJ<El$oVo>E8h$`&Z1!wpH4m6B90?4or9lxuO$2?h^pd146RI?81btimd@*;g#08
zH{pZP?O8LEFK`i`N+SKR1b5DbHOt+>C>E#)Hg$h&?+iSczt0m1s7t7~LUNYIHr#Ba
zx3kPVM5E<`dlV20OU1Q-5~5FtOT9MEr;}F9_A{6aq+<8H+H$HI9=8cf<8Q2}Y8PlP
zSw#dh#EuLkACcNvV2G%f*%h-CGg(g+wR;3o9{OBsTZ)WLXZwUK>RnT0j)g=G&V8{y
z^nx&-ab(?75<b2R593;zom-+mPv+_3leT5ids)F{JEqa+36`kUJRl(aG*%Wn)p-I0
zFj`_d(o~8C&~xhe?**P5m(>q{#zlmd_N@6$Sy911!tG0@f*Pljl%40f(fZ`ZR?Qt(
zO2D!~W{U8=X1k}75?-msD#^Y7Cn*+Ok=NBLOe2Tt_Rn_i49P+#hkx*ogc#rHqKg~R
zPIkodRll=38%>CoHjD2~{beelsGWzp)iyGZAn)g`9fH8XvHkf3Fb^(%cXhe`Bt*Ya
zZa@=NptB9=g$GJ`s#lATHu@F2?_2UXmODfrbiiJEfkXR>-TsT*!zyR^;MvJ`v^k=7
zRSfiwFS9kp;SB|V@7kOgeq^8_Qy({LXlRGPILhe9igoY#iFJop`jymP!mFGE+!#m4
z7en!7k3@!coB_*>v1?RK%JVWI4--L;rkph~udP8n+t2t3CdN2D+2lP_v9UJTZ?)F4
zuU6cWPXg)OL{EY4%Y1G!YabnT_ds}aRWn(Z#)7EQ*+=_G`hf`Awm@>LV%(e@W<E8~
zyH$yV+pzA@z!SkdZlvuJOUOK#e}-&(N}IEiXqy_0;*3ueXqN@`(mrhBDaG+x0QOpr
zf!5-m@$JaRl36=c3^ZyQz#a=l(M#S59Qij*raCwBc}3BE@h^TZ53lwG(g4MsZCx<+
zW_W>111uF6kNR*MtmyFr1vcb<Madz|8&SRMv>Ew2y%_@sJe^{d+Mi}bUYl%{Z(TzK
zfsLumZzv}p*`~}xk=TXd+BeK<`{@zEk#FG$LIJe8SQr)8!yO}~e%;o|^AblH=unoA
z<+|P5NNEHCqmFi;I2s#}xmyy^Rt|?QfPSV?d^5(cksfXH=IhbTf|f+<LqV{a`1VBW
zX=*;|j!%B_K90ujKq_#B(Y14%^FnC-n&c^J%@i<xk4{>%MUxGjWAeRvSkj`hIYJk3
zi@D;O(@$GO=jvp-$r6d!c0k^fu?Sp$l6v*NQMUNS@3ieX41wg-VAV(2dWST+>gBKn
zaTzys`LtH3)kBTipF?H~XU6q3Jwn9RWzqFg^;K@L;-oYNyjt7m5tw*KFII9_?~D`H
zmN3KGSh10~ON|bw`RR-oTE7K&bbb={#Fr{6qX0)9-Zs*&@g4xaj|^5dxz35Z7P<){
zEo!c^Ky6Miwq>P*Yl8!*VZB(P3z{trf#{e-<;}%pS%`B5KVXwtTKbd+-MwPIr7G!#
z`qQg`Ktj@@w<ARYNE@iVDU8{qI6n7{*36Qa9<K)lHQW#CliNDxuLZ6fFFzv|K%aK(
zZ<4c8HFXo5udJ!gCAW1I+3TB$)~0-L=wu_&_xgDT^!<=xE-;}kQW%ud0f`HZw8$p&
z;vPXc&09TNSPw_1zI&YR|G^nAvK|Dq6pHPaFj^Wpg+)hhJIA<!{@@U=KU6vo;9k<n
zO2Xd1116j%u%*V!X6Y51Kxh+hZ4ofjAd67H<_*xP{V~=W&F^LPilfr<K1b|JR-0-q
zL}U#amZ{|I#||bs2;tPa2MUD^$)E*5Bmpo0>@9hIZXS`+pn6^&<y}E5Y5QqED2`LK
zAm%;ZnAM~mMuCFt5@bEa&}16CLekOJ`9xl+n%xb_RF|JA8jB~#t|Z1!FX4L4d}kZ;
z35b&HBFLOY^>c|zfa&RPnwLcRC6<0~`;h(g6(*2IA-gIN1pPxfz8!_cV%KuvlN97{
z>LA!sbf-<96yS;ZI^ev_3b1nnP19Q#$2Xdt3kQ8j15W1Ewz--sh7H`Ead(z#@}C||
zevI937P{$-lltn=HBvp6u@}O>&IAY|5SyOoQ>G%9ikYDK{0^iZeK2=m=X$Dl&7quu
zMy|Zj!OYitnGAeHp3CYSX?x3>J3_e=KWMrZqPKa0Qpa=6e-ha|4<}H2fZ-#h*?K8Y
zvJp@{^q`67;Zr4PJ3VIISED=h%|A)(IHi7Hl1eq}zNDC0<fvGyd1)rcy*)?|XFc0i
zI&~N$FhR}l+l+IWH$jxH?e5311r;R+)~1-f522T^EZUB`vgmIvGrf}{3RNZy{smOA
z8X5b;IC7NCd9=j18vyupkaN1^3t@*Nj~bPe>}Irkf{><U?<7O(Qnxin%COGaFk7{e
zRa1Q5{cIDbiO4|<4H;&flAXF3-%k1$W+*1lB^)35uv;AxbqVt!I1DiH&DB_ptmUi+
zrtRA)9H||@)msT11w~!T@IXK8oW#N@n(oGm@4%hC!L0rITBNu5nbXAQU_1mI{d-<}
z7_6n4Fsb1E(09wrwz~bs<x9CFFSB?L&4Gm>*!!5`J6u=OG4m`(kFd--bXLrA&Bo?r
z4knzpR>%v*0NeL^xJxy+_*jq^V#6F8Bu(2aqzua=^!QWRwC&TTf>6`yt!Ld?4E|!`
z>HbbQ5<xpK2Pp}!3q)J-T!x_^8~6j^eB}auPZ<5<GnrTLjb`n45hX%l3!&<2nm8FD
zGq4`E?R>mvgP^lU#O#Z&WeCHyJVoik9@-%I1FLJpwUeqFt=4k9ZsYx;KWy4gX<-K(
zW4BlOTpVVceo}fgRF&BxNIRWnQw|8y{%*0Q8HY$-jO8?^Sd6ozzGuI5^Vx9#<W^B+
zBG0HCFhb@#>e!__TDVkzQIQpnO=A|81==KyGK~aHctp14?su6~0H6=oke!eDNVihO
zNB=aOS-%XhzRG;pv&~pZ1vU|x;^P}F#(DB0a&ms;CdOOl60=N16#+(UYJ<##p&8Vf
zZ1n3aGw!+4CYcsPo*5@DZxA9a(%U=*<~9oZOXmn2u|%K#czmBDzdI3)POp&ZO=$PJ
zo#6*yOXs4gQl2nFZ(yvr(JB)o_ZtY)<*Gb*Cq1&rZqEi_){a#yR>Rl>Wm3Dj{f39m
z7ib6Rd}GWjDq5>?>&RF+VDp|VIr@al@FY|9d@Xdfl!J+sEk5jA+hgoA^lD+|%CX$*
z<w}}i3Zz}B`gLS=i=3b4lbZ0?UTlI%?~02(>9W~o=4_Foy=z)v_;M&(nfxa67g8~C
z5sQ8>QMG(R<J0-&gu9OCdlHyxM*`;h!P$1I@BYcI!7X0+=;-a<b$}r2d=X;%l^Y<?
zmc+MXzRP%Q^sRNtHNZmgYLCCILhj`GiFrp0-&&KO;dYO#q4#J|ZLBDHX=7j;*9F*|
zQh$vK^Z839n~dc9xh3J=G1Rbb2kIv13XUwu?EVh8m~ITb?9_irhsxjM9RSdKrp(-1
z9wQxl`OsG4WoA9WEvaG~@7aK9JEYA7kx9@5)GyLF(ttj@OZw+Wfupn$qDIl<^729l
z0jU9*SE_r9fa|htFccFjr20F*M>0$Y>LyRQJ}?M@@VP25!)c>WJw7VhjU?}8GYX#p
z0UU^iFa&{_d1q$h{uQkT)ieQ$c}J*@V$Yf=869HIr=iT83mkihfe2cf3c6!ER2%hy
zImMZ;R^3kb-Ou5p%rEM<!E5YlQ2+iXL2^d}U%YGe&`)G*WG}s}Sak@g-{?`{uI>sq
z((cfc3MDPv0ywujiv1{$E`2z@D&O)!B@Tv&3m>+6s}+jHO8ixI17Xwtaj-g3H79U&
z#@?W7t|r@EC2ZcFwS<@7xx&gC@$N4lbprp*P%ufq5mW}GkeNs~p+YF;l7-tiEVs_p
zd@u2fR;7IBw=+M`0bA<GZGC2FjUeEgY3b*&^>e|BJc#6KKsul#To};~b|{8ELU}C)
zmB~z-Y&Nvm<`h&*?w;4xuh`n>>U0I2a65|8AJ_5RRngrQns(2R8gW}SJ3oAO6X|O*
z6Fr8<;9BI|wdIhr3=n6nZF?j!RiEawPBW9|yh07<7~BnsU0ABFZakFmuLzJH*p=Mc
z8&f=cNccjg_&Yh2;mQq?sq8WaC--TF_Y3IF&e1!)WnMmd)(F{#xM77_a$frvNgVJ(
z{QhuNLXp2}zgF!h9LHY*z#l&_iB3cdqp8)c5%glUTTcPn(06bxC&}=9nqy5$usv}s
zYbKi#!vM}|7s^+aRoRSuKJ{~faT>qs^a_z?67y-LO+8?9a8OKF6#3aBaq>o4$<oMO
zh0I!%25cTPX}=n@%@PjXryjakG!(sN#`W5uA`)QT)my>6se;>X5{kRe&MGvt&()l?
z3D`izG`Z556K`ESp}Zo)4_niwILQore^W=D|Htdx#|&nY61Di$RWaVFA!LN*)1WCN
zKvvJr@dCgu6hQMp{oslLFjRm~?JmnLm*O8$X;8)9zJ%?SfR!6@48YEAAD%fbu|;(A
zRCo?c`?v>zv@Hn~<V7CyGjWP$Kk%zb{196PCZy7_3|<!m(|5^4+?F3Hj^4bE)yWPZ
zh7}(SemRg)gLuxWr#dHb!_&zsG*OMPX@F^R4Z_m*jAy&06q?^xgx8-?K~Pb{Kd|7g
zGDF3d81iuX270-|jT-YC5sihVJ=}Fh%=c`(kQ@DL1quzhU#IM8qBA*y!t3YUdv$>h
z3gpg5-_ji2umVI0e7+aIiJ?6b25dIIbF&;bgB+Sx<l(#S7;dm?i~TXG4r2U}>lXpj
zJ`2DLrfmtW9y(-Bd@!>VyZW3W)oU<)S_;%_!ot|Gz6Dd&md6u8{gvufpMoz%rr08Q
z`y~2&ai#4Ie-+Wl9z!F88fE*3u_qgR<~rZb^5Lm~m2`1KPUg(+!~+Ig_u8#vpusbn
zoW81mhXh>t?U0h%R6tcDT&lCgq5<gY0to$K(PhFd)72GYjG&Zs`=_56bFDn^8SR@X
zK_Y0I+LlDz?S{Gh4<+03GfB?3-~T3p28hb&U1?HJa@uOzqT4zMk2jk1NJ1>h!`#rz
zEST$pU=sPBC?3=|1%hQ^X^ykml$|L0uvpAjL2;)b_gXyP;a*#h?}uM<AryKa)bp@C
zMt}fmy<^X9Dw39o^)d59liuRYHvYXYXAg_>7}lvWqrS30r?=(pXlXk?#Lh>#fCHB$
z-gICFL;zRMb3_ZHq5y$i46{eNsGimm^I&4<T+P=hYCk|vNlvl(c-fq6RO-uhr;75P
zYzE3QE@uZ;dvQcl)sJ(d*Jb{;N<fRBR)`#!Ildb`Z)9kT2q=f}8jU=(hmAPT0OrP5
z(@tk7a;E^>=FSk3z#6h5<|GcXZ$9ck2O$>rY)$GLfsn(Vd&R39&aC8FzRm+S?>>dG
zGkyrN{mdl1{ctl9_bACTan*h*`DoDUr&Qq^B6DmmU>uinJ`Vcg8Mp4^!78VBKMfT+
z92^pp0s|`Fzb1qoA7yV)MDrU6+9LwU%)&%9a{9SXR&cZI6uDLw-hVH$UFcT#1n|E1
z$dsD{nk$EH5=t}6Q++9K{IJr(=+3E)?`efv<x=w_1`PzuYQVVJC;7rqNd(mSAJ*F<
z7Nd8^b%MY8-8@sQebb8bj0<~e0cFO=PTPx2!tTMt);gamGSa73hRo2tQv+|BEwDWF
zESRqkCwfPnuY0lfDa~y1AGhq3zdR(9^VRgT=+%Pw1$Rh!|5=32xRPx70)|pT@ng*t
zXQ;Jl5kQSE$vcYC-u@Ht*}e0N_Fg}`qLAy<vz8-2^TrdE9t*Rt1e}nzX6hvE&Gwy;
zhV)?DRCSw)qaW!C4eAZKTJ>b*cB=glMN_Yz?L$aEE!f{FmEy<*dsA(6wVCQ8!?@i-
zqeh>Kt**>eTzmM|+h)ROj`2?IQ}KA_;OmFSSw&IiOYNu{QI?!Q#zSK}U7^m7Qz3Di
zJ6E+v`<As%tHr}z?peHcJdD9uKD{H73-A(SY7;xE@N7Qe!Q53ONCUwbUz@IZMz5fV
z$m>0#*=92#cK{r^@L`LZrWjhDTx)C}dSnEBl6H{7^}!F@Igh9q0I|ErKxOTu*2F{4
z-kc6*oV919FzPAd*#jqMPAxuHFy|c_*{q*DFCNW6t%q96X@1@A1zyEs9+H(WBOc>5
zQEp;iH0A2Z<76`!!u68|*kkRDm5dE4!1sCPfhd~MsP8ND*WPAoS~S0CUJU+IU!mgs
z#@U?Kgo&J~^oR?!ZJsb^1=paVtkX=kJ&zZq`xcBC3Q%*(nTDk21wDt(QL)skKF0@4
zs2_3HlRVy+DzmcquM0eEImZk&EJuG;+L6<^i&|^uQg$v=5uRE~dGJbv2$KkO9!`n<
z><x+o*0K$tQ3&K?17I{<;AV!BaRY3trQj{cIGcxU3cR0w0bE%IT;9~=9a6*Pey2vg
z^(zx6N2pNHf2Iv;M1&>i=tH9<-lb=UEEtvcWldSeoDOAn7tyD~iWYj2a(DbrZ8FSW
zkE20)5J2NxlO<q!MXph%c7J2SA0FKj<^a8oU4KerJz<;fjH2Y@m&`4eG-4IeTQVVE
zvorOma}mtjhN;6Wlf}DZ9I5}_YVcWCyTdmjmn3u-zC37XpW1kPW1Lp{fiU{yt)(*K
z@jhI66VO*OorO2V{mh!;w3RLkbk6)xiHejW3npD>X(qf}n<Kc8lRU%%>`#n(_0uym
zrs#vW;5Ef}Y;90}#w%SstRHcWwl$`7XzjA2m%)H&4cE8>tp*jld@ULdfQM~wK%6#O
zzRl``${Rj~aXBPY1LEf^JqACj=T7h(xBGlzf4YPjOARUt)%zG!K#zoNCQ0bAJc<{r
zD_{FaXabl10JNqK=$YK4!~dQ|T1J|xivgTT@#42N&chS)h<C_ep|mpledL)wl1oGP
zl;*IWd0(eWeA~|hR=}<Il~eS1z)#FX&VaH^%xmf9H6pD&IcfQ?P9J?!SlMg=+XNhf
z?H@l@`IVjhM}x7#{-FORrgQ|<B$zcWVHbJzHe4<~-115>1URUTgZ?V4D38G&52<q1
z<caztGW8Vp_y;s^$&U&rgw(_4_}NDES`DRx_8+U)=c?OArv@H0cjPhz0u9E9I@j!N
z<DVjfgk=tQ>2NGl#TkpN#Z&2J?5aVz6JT=CVEj(iYVEv81!$fO8FM*MRgA_(_hYB8
zWj&1kl4-^XoA{ynp6#nL`H^|id*N)(ln&QATiV_V$nVm`4LHA=oU8Zf&DpgAiM7at
z|Nh}(${<OEmj4W3fN4lqURX-gs+Kk~&>j;;hx%nW@$HcN_s&&M>4eyiz@z{xgw=>G
z+5I5TXi%~%09|GmrMA_8VA){tTR@rJ?8J`O`IJS(b`!QE!>X$j^)V<nsmE>Q6$>J9
zcsVL4o>R0em}%nqHFp)C;`Q`0h$`51#a3)O-Zu}>uyyPnJmuejo{i>CQ7xZ}WWlOE
z+)VU%A&qLSzMkk2Wh1mYiWt)5+;abPr0w1G-_!aMwI=#F5?^M8B-7etrYA<lsW=Zk
zeagnxImdK%T_N{(7$U${ib0j2%m{%Xm!caF(pEq;9!}<q_}`X67J2UPEgypiqTR(l
zsn&pyX?F463>KXA%st0yzLYNCoeklOT3hW040pCzpL%3pQ#WY{%f22<gLExxncQq@
z#=sVMJHq*@hwWT6_*w0>M{2x(s@`c)?DX3SVLf1($22vPLsm>OAn3KK>65H@Ra*F>
z;WSQi>VA^gFKtmxyJte3`jPVoNJHm~-O{T17_I$e?@#B92YiFUxh>j$WqIT1I_7By
zHNUac!-QSS!RFYgT$63cQxeI|^@jUf4L^<SaFWo{1WDWd@zKF4;%c<^asEb8j=RqI
zab@KZHE|WQR0|vMnOWL?AKQK`a(CLRkSohCT4@vJI4+!XAS8En;*L?QfEYFET=iS~
ziLwXs1{$gZW_#jr)8`8q2^-@@t^OVtL5)iWCDiKD>GotvW@RixvT+|Ja7EjZD%n|P
zNCUvskaK(>Rzi*MKI3X9m0h}cn@Fnf{?J%E;KS;z$iYlZy0k>X=8`_{47Yu<relVl
zqFyBxyRl8$U)dwItkOQ353ZUC-k=Ol-C<tR?Bh$*!*V>1zgK<f@|m-R*W}K;`E1*|
zSgrYR_0cM8FpV;g_}S{6L_yMC+f9Y2mf#Xy{nl0NrYGdrG-lblWCXL2n~?ueU+Pxr
zD?5QeE(J5l+BpJ}aB1^p`4>+_^ufnt{rQUtw*-f*v;1fzGP?ECXZJ@oMh6Y4z7d1e
z)aI%!@|O%|&(gdaW&ETgt+<=_ZWz#WR7m9Nn7AT~f5%wuHcs;T+P%Xd6h>;(5Q;B*
zJfQyGwz!Sa4qX-L?D|&$o5ZTn&~142yk>FfzRf}nqw@as)w2mcu{%l+SATHZQS~jD
zPruf?)m2!Ml*8d(XSljz?P2HAkwUH8O#$Bse@%h9>S6qxjj;df;?V>9k2dusc1OXV
z^z%-S7Gb8TKM4iiif^e(4lJR)eU1`$=K><vlp!RbWq!gO#w}sFo@TvF3H8FoSsA;H
z>%$>5jN!Da$sX%%ROqKg2Yd%!?NNR@mstcCcGtqYwF4dGv?tm<2OrpZ-Jl;=KA%L>
z^=k~>{u}0w+xs@iJ<fX+k**h6%#g-{dbIZ+ozAV!FMjj~{I)quUb9fR70=UgDu!IV
zF;%ut8Nb%kHodg((^W6$Sn=~6+&R=*Gckh|sl?5o6<j0r@Xif;99n0NXmXp%wSo#Y
zmMJl{Gf5vsX%l2V@>(xxYofR$p{>!mE>~mLu__q5J+$yefhDhy8X=cQ7<*vOCQ9qZ
zX_$0#W?ko%V4$v<p{O7>!iy(-k24;!+a#6yDy89d84yR#mnJi(ro0la(UBY`(zVUc
z?_oe3FO1z-1!&*3xBBncmff<A7CV~qfOxieF1uy0zoXe>f)UVxnCS!AQW{HGdl;3>
zSsDCCrkyN41;M-5t{(0=m3iw?aU~Q{8?jtwl5*pT&w30W5!$7juYW;@5uUImJQsn6
zCf(C0fAt26jr^gU-?iGKL1c3+sXVG_8PJezlKJse&L~3CsP=KR0aebrDn{CU)qU-D
z@gOVgXAR@xBIEBlUbqgfEstsW1j-H%j$|R>^P@k6C1QjpdDnGlzL&%;HM-Ri*kFc_
z%sWyf%{}Z&8VjfKI12dnWJ+i<74ydCvx9xY2lsNq(7pjLlw?|LEi!0v)09CqD{P~!
z*q-p%_3E1Li#kL4Vnm0X{je#6#=X;M;<BoIN5kjSvvQu+8F;f`sTzxr<midMuK~I7
zG!jnxLFZ|-y~^@RXl!rZd^c)A>z#py;hv`6n#glHt$qR5m8nqn0D1RSVO!|OUrp=T
z3xo7~0b9NaihuY_dp<aLvo!74kNLjQNbAX^ZkWSYV;Z|;fQYI5w)vZ@cgu0k!B<lq
zr*SFQ)rRh@5ShIWJIro)l1}@5;Y{m7i_gpxKffBB-XYGpOazMJ+p5YE5C)7f-&8EE
zqwXlyTUj%dzO!)=gw?^|VwiyW*Lp*Pnqc2^mc0f+{DwZk#KKDgfz7^#RA}VIwSYy_
zhl@M<h4x31D%t!mzuVM{*d66X8RX#qlF^@|$nlG((K<jxO*{~x5V5tQ{OW}-O?1H&
zaC*W%?`=LqpZD%(`tDn2SjPD3Ld%`azxG~ye4178S@@4%#C8)JT3g2P9nEh}Ra>=5
zITo~Dka!FCzPFhJpTjtFTGj~Kqmb0MvidaCPE}Wo(>MIOo}9WlZ$On9@KM{NikOtr
zWiRw3VeosV1WMfp<J|Lpl2|5quY}rwkWdsGDk>MVWJn(`f}Gu5%xQUEq3iy^cEsW<
z<UQ>f=w_U;ux`**SsnHG(kHw|u9=lP$(a~#RBi4di_8-f@1y+Ted5lb$MGcN`IU{p
ze98gDqth6{^5cm(m^$qe-h851fKE3d^`?+;I}iSBQnLOKO;&Gf1jTBsh^>`joP*K^
z75WV?km@3BEg>%?=!3p6-`KrL%;+Rne|6fQw>QNKiDoV9CZ@43PmL!jY<oL|=nLnW
zZ~Ng(=WduWsQ+Kl7WZvXQw@y-21BmO!XRN!fbV*Sg$HD!r~lZznD(Yet@B{vT8^_K
zlthm=s}%};7o3~HLt~i(IaDsdz7r0(fN#T(U&+%>9M3^XY|46RSG~QAAzaRGi^@Gr
z7Sh3{DCf8yKf|C$m58gaC^1aD9@#>M^f|?bJ31tXQH_KN@6V7S>Zhbu*39V5EYWe*
zx1=DoQHV%?M%AMdf;jsP2&P8QhPY7UvTV%!_yEfJ!-Z#nWYPzFNWAj+Ny33qw!z#d
zT}GFySzR!!NkV@Hs%=R~m!76pi{99?WXWT_k$F*QI>&ZVI`6x|IX|_#x6eL0T^icT
zc2DLD<egMb=5dv_7k?Wo!(;An((DClnh$dlla|OQW8XJlPuhpXQq|tQT2Offn&Y$|
z(r?c|_4Hnf@NT$G>*sb9b;c6ce00_!MebW{d2=E?Q3X@-LnriXhk1`7Tj&8)?kAGy
zF{Q>DQ*DG}Ih*uN<!?p83sI(D^3}ySaNt%Dgs-`xOIzeyc$gU-uC2uua3<vQO9qo(
zY_3JHn3S^PO{lJTa9a*Xoo}L>H`E%A=%9(WF)U-L|Hrqo7M55A>PsbGT|1tl-LICe
zt2{O^h4=|y6nBhN>vC2(IE?A8IUG5_r}`}4pkjR_(pn($C=p6D87&I6A9B(TuN-}4
zI9oB|q-`I7MBB3{1&a%n83aqWhZS$y&XyZE9g6Q^oa!q?oHzE425vKIcV{!we8X>L
zyvs>fE@mH$?=^i^5<l!De=k#P74^8{+kI*lA)O#**<yp{s3<+v*-}T)Mk|)pb*k86
zP&($@((?q_MGnvUJ1-=^C~`eLjfTLV=j3<(TnL|puLs*p_Xdz&yS2!Mhy)I{ZGZW>
zK=HH0vbX%@=xeMCx5d`+zHh#X<VSZz+weXEQ}MH*V3`GvHcF?~M-MUcuQW?{5K^Xw
zdglLl*7BQ3lk)CCOP7K#^q(tUUH(V`Kf(!x3ed_ie~2%)l}(tTm8`V+@l_T3C4^KM
zc+KTvSk67yb^0=U$wK9*v1McLoXg@bbn1s`GRQ{|b$q?BZP3#E*6#03mh0t(`CJm~
zAeb3N-VjQ$t3I@=(FK}RbjUSh2nyW4fC$%|bEZ4`;Sysnx%_9k1!1n#^0oy*&wLB!
z9;Pq+vsBHz!}P39?P%m4n{Z%DkavRYcNEOy-?gWw+j1Gk_4Xb#gy7lF_772^!IZJh
zd_sYccdh%qzSoC&`nTqW_2&Of@M$N8KUUD4EI@lFOB|!6T*oTJMVvasqv9itZ$3(h
z(Yg6ZbW!)Fe-f@lkw!8<P{cp6ufpKi-H8iEBVLH4kx70hLUJ=YuoYi>=0S5W!?<MG
zO?%W<d~23(iemKmQCWV}LW@euD5-WPjUTwf_3fXVd)V7Z$%Krur0hHGJ|XvbRasxz
z>bWi`C%kJvd`c3N=<8lMY!7R2Ip`HX)IKs$P#9!NxT%4HWH0%bs(a;3JZ`PwU!`D;
z@w{b2r+fC`$9Lq_HPKJN0F;|R^s%-o7C88|4D-jR8E{%bET_@0=+N};rS^rX3-*!l
zSf#UuNjFk=YHe3VMg>C!0y(cxLQkVhdQl$D7ZASr>V_TDClVVZ4&KC1DN%-E*V{w_
zt?*mMhcjTLqNU$&N>McKsST8+>TI62$0cp0_M^75*a>e`6r1;9g<{Py-UEgsEj%SQ
zj}kD&{ME@2uO&`m&kTRoqeM?->AhvrKs%~B_s$*JCv2WuG3V@dvlIt)?eap)a766S
zTofullo9G)rI_gbi^%N0)f$~USL2_kvvar;GwH*I*cB&EJW8a+|DsByu^Njke#fLE
z)oxcZ<Voz*xRbeB)VVMHGOFu^gkVe@TI}+%v*ioP&x)A>)Cl6)E;EJ@76LLQ>;nZ#
zCRws37+Xq?RUJXN^~!9XYP--rgteu%PdL;CIi56fpiM7bj%?*&HaEN_Xj%B)w66Vi
zndrW2_jiibz6DX3GB=3GtUD-ieZH%t&Pp7z$;aR3G#{foE6S)Cv2=>jSOPZHHs5*o
zx7L@~BMsf$Co06tt(*s*{iSB}tseL1FS734Hr2Y7cX^xAhIn_<{wjHCUno$U1cZIN
zqN2~;#J}_>X*qgJ@*~dDB*vdBvPI85C|?%n?Ks&5@8>go3}Gs^ekd?$QD+#Z#<F(K
zu&NYX_9+6i2x%fhW01c8f)Sq!>ncRTN%L@Bausd3xm?rUard`?TNr~q8~E&Ny*{fU
zjOAGlId9UOZMQVZF%(VZ5{5h~_{J)q3MBI)j}V}8<21UywBYBLCfjekEHQohZ+v1E
zX8eFpSfEwrA1dt(HiaY#H{nYBhxacr6=y*{?eUi$Nneq^Sk=!H`-I4{cKYht;EzEE
zAno8Z+d9c)w9{u`umXXS&9AYLV#HYai#nLGm0I=}>)5yLt=+K}eOD@i^?pes9ggcT
zOPNW#`p$yFtHQ!kKZDSGI>%+T8<fRYF59#Z+TZc1vlaiG1jA8oK$S*_RrTH%^C73v
z)MmyS+FBx$nC`NCaEpJpn^`{zkb<~Dte8n<DT!_#Vc1+tD<rZDS_<r~?R{8Tor*Xm
z5vxG=k%FHRH$u*9YF9IcMuLM|Sjq>aIDRn`Uh9>SJcEehA8cs&829yyjas-dZ~OVt
z3w;~eb0Kk4zg?aS_DISStvlKuUDc_I*TfuC2b4W;a$c$zHJhF9$c)>0jb;pcMHcS;
z{|WbZDzq!Kg}baqAkc4-wwhqquGq}OtakxnmP%!%Za11$ut4iB29)ocPa9g{vc%<q
zv8s4(rd;<rngVVw=vc>XXFm$^rYc3L$r4n*d=ddVKuEGXFa+-Qj+0vW%fg=S*tz#^
zU%LXx1`rs3!+S7Z$uQNsO$t-icBpX5N|@%zW0hSm#z!ILr^fEi*e1%}d_ruMq9Q~3
z_Ra)#;eQsJavJ@(V5WrkDTq*Qi>-|WCS99L6P7-@Khqi-WMeu)ZfA8n{b&xm?n()j
zrNkjkPvZ1<!y~029CZtFtRt+Sj(Ub=yi{ymKcS(N*s~IFTtJ7G)_m35mtT9hQN?um
zIxg1r>Sf3PWISy@-vx@;TUnc!jgq3L@E(c(Q&7_RRqy4PggvR^)pn2j1vVOFoxfW9
zL_>-5D=gr;6Tl4am3`p)&KL92F-a?BzakAFUepodaeNcQrO~{J8*Kvk7iaaRb3Gdd
z{hvIfw;G+eL1)Kvc1dUw^RC{%W18#_j<v)liB{lrco*2gCc@_M?2eeLROmrhg(jXm
zwdMPb+dDr$sn^9be~`^KZ`HU*N^#D59R9Sct=6-#e6%#ikz#tG)B_T7wZ}3SUUT&0
z(4uO)Vif+gQ6rA7#d(F&kTh;P%TwK*^kUn~o%W{(yA5{r+~^M>i3<pp=E}sZwEovv
z9tO9Vdy~Ap6E9z{xPv$ccYU97jJmWG)<~Ezg@nD_Co<ctybCzKyA#M`1+@J(h?C;P
zm&Z(Yc2J<cmB2xGQ@}j>x~x&pJ;v4e5|d^r6fbrT$c44|Pou|o3^ty2O?Jn+#^SdP
z9sEvxh|V|6B}KUJFSB%**nT{;asE-KwTb$`HQYk1!F4Qe-rf^0{>FOme}?<^#BdFl
zH#LL;+o+CNAN!dz1WAIkCzj09(?96#0<ID<ul)m$p+OVgVoECm(ztvr{=Ay=*_IR2
zy$UEX%X@cEqoauOO+3t&hPNavHOq~*x?{WTlf*XXs@M>t7pO1Ns*lpr(3*0(x-Vkf
z>f2j2;;?%YVm=R~r1o8Wm-?Kyk<}>D=>NaG8&v2*qZSyD%+}-#wAgw~U^0l-@Bnz7
zTfX*3p|`j9&fAk9kKN~nGqT^Cop|>qCaKAUC(z;c(%{(jS_jBwu^^ke+))_ZSVLaQ
z;*DJ~;!BI6`$zlXrFE1@U_(<{N=e{j>r#CGt8v%vSMEpI8_n&!Zqm#GuRC=oy!AFS
zJ9;H%*ZcAEi!v{LN9N&FZkPk))^dmP5s)O?y<C3^c*8R+U8Fn>!q+|lc=eT+71R1}
zHak-sqd$VE>GecsX(Gtp%$i@9L5|k<x%5fnjl$tqE+ClJ25*H^0k2F0E^NpCtkdXH
zS0F@#clN`e+Aw7rS}d}Pa*prv9rj`%ZM9lW#IXM!KT_$MD{=UJMb;uweCO6?G;1JG
za>y}VM{No_fLKaK8h%%!Nnu>N2H$oc-U&asJgpV~S)>coT5Qwhw-j*Cp^=baec{`7
z1XN;M<hBp$qs^_`SJwn5^Ql4A;!3o=M7<OTA2YZvhpN`^5+rh(d;;~+r;m<_BW!dr
zBW$!gXO8mr;1d3e@vgIuy#7~ca*rgQ4s@SdIqgf8ANCBrG2$`R!kS)OY8t+GKK>4~
zd$`2<cfM2$HUO)dM@a}ic!Q?8y7ue3rQ;*!z1L-31cYk)Ae)g<>G2tGn9X8U&zwfD
zzkta~SoWs%tXBEkdwuv>9OZMq<$t2<2O*&ay}ccwu<5U*>Y?DpuB?{?PJ-tX2_`3r
zkdz<E?6%tT8_d!g<$E8;7+w)C!3RGorF|A>o(tOOdk@o(CGaK&`PBEg==|qspYc+q
z;U%~T*V1ktc&g+8zf||HUxKVHg|7q`%p4_kjb!=cLQo`|exrwX|Fy}MGWLl<{|}xH
zdt!8?%#4^crQz3D#@*{k>0VIn@TGw308LvMhVX(2+M0(F3OmpQ%T?L2N?mcpXhE5F
zy6=9F-P12t8>34^FQo}>G}E$qaF_k*bl<zpQ@&9nrX4?FcYL|(XOieVqkBi~4P8C8
zN;pBh)4x6cgLzR-YG)1KfoC6ToVpNlHx=YbCs%(8*~oBTrio=@>YVS%MF^%AHV|>@
z77~-8z#?OAg}ptwFonY?;H)Mx3YPCW9$aP&0xox57j0oLd&9DqwMbf&e6+uKE<^`-
z9OpTI>&lkk-P}hBH=JsmJ`|;Fc&Du_ceonliWxz|j}$i<2e483quNlCj?;D9Z0Fd=
z)<t*rEaXl^`t5%rUA#Lf(#i1&#*N0+ty->s5tz(3CCGW*z*hgeC=jG%qo!R(EA0em
zZN4?%oh&J3r7vEf8HTX1R-;Pq1~#P6%GGMS?+onucL_+$C-l3lZD}^SJ(&yop<X6?
z1rp!Z{kfJj#kI*eFX397XAt+H^UrS9(Jp)O`pg}hn7Qp|2}dsGCedDr6ex>o5PY!$
zW$n14CBdP1VPrIQL@vXCf{dM4mPSWI_$?hu=+RUh1zZ}e7Swis*%6AGcyP~SWF|55
zc_M?Qx#>kE`kwwSNnOQdn$nhz<<GL(xFb<=uCWV;Tt0Poh@0KDG0BumMVz}&@p)^L
z-#w>z@%+?`d;R#anwid8(?@BQ+y~!q(T0mZfm$byfrBc_i6~?Rquc&gso-h!{vWjs
z2kV2(D3W@=T79`&9n0>I|Fcd%3e*A6{Gesf!kahxQhZxq&A+-z1A~){+Mqy*t(Dq)
zf&5A(+g<6M`TlF{h=X=V3eggFQ{raZVEepk`4{a<^WWLBJzG}{(k{O`ZneTkY_aH*
zMi+%G=Sv_LArX*NIt^59iOg8(?6@nqaGpem&a93hbvJ)Ft^7JA;WV00>9RejJZ!GR
zUP@`<LQZkO_m!K;<uT)=g*TS8{qptYuj&Y!J|L`T0@Y(A%dg#Ps{nUI-`&a1cnTCQ
z10K^flTvsA5tylS&D1c77tc-|)=G)HY|<nTtHMkty<k9zc}Wq6M{^*>_l$V7=OWJy
z)w-nJ7*w&eJKm4;BMFOzkG~|moBCmm_HMhD?;Ik48GKXO$}=-gg}Y9b80a#~c)m#E
z5$@xk>2_4D3x5ak)7um%cf`Yr9cCyg`Y*e@fsGj6*K|9CfAQx6PVz#|+R~T5*5+&P
z1&oG;qnHXEC7No=5EPT2|Cj%Px$pFa-a%<McFAtM59C`EaVcR^ygm}ei}7jm1jU7%
zme*$;H8c`>Bslba^}ayrGP>7T2BunstDdbk6y*LoH~K*EpLl`;1YQdg(9N~?PAjj=
zD9V~&)Kw+qv$<xVwSwb7-Y8al8hv^5^J$nGCA3;r#?mm8vn<B{UQ{+E?kv>D4HkE4
z9YM(!(`1%0(M_<oS5%a3aqF0VS@<MU@6HRSYO`-`aXRIbgiMnxVY##N5<4l!nA0h(
z9g;A2bvx+(#H~n-Rj3-`CT6^+q^d|`wIF<B3B<r0sW&NcVMRoBI_7qyy}<aZ_Z09o
z4z^8KH1cyrtCUo-k<{eT5D%o7+w#<QS(&~x@O<A&*jS6LwSYABRN5z^_)mv}+63|f
zg18-P3M&gXkMWln{Bj!Ybd+hIQ2OO$3s9H`FkA^sm=M_sJzFrqfn^uWNyD+y+rOgv
z;o?G~kMv9MwS#Z0i$Gmx7s?%fd#fgAd*}c@jGUnE?BF>lTJA5%0urU@>jcY8gHqzI
zaO#6%yrGZrZN42^0b2De)1=y-(qr58(=`KZ4;_N_wx|xR@(I}tKIx059R+c0LoGN<
zTeHe&?NaXn`ps`?Io+?tbbzl&$RB4_kgbJp9UK>!!k<UAuzblTkrE{M7yfV&9fi=r
z)OM~pH;~QVM%5<UwkLXrbB;d2ex;Hf$+p+&B6KT#j^%Ml2_tK9xml?wthsiKhlVi_
z9i{h6pBc>$A6+IS#!78o5=wiGm@C<NyVIs_LC(?pSw0L0Ch6K&se2o3>nHShxfu%x
zIddFP^rf$##)*!<l21b84Mtrbj7d$3(5jYCZ?v7aC%8Re-YS+>^|&3fXrP6$s-tHD
zJK2ah_0i7DQ4U-RnN$TV_V$?)86LqE7T^Xr<xrF_Cb5q;cmbJKT3oJcEqyh9iDb~<
z`DJMIql&(QGgx$Gg09F&N#p-kjg083kg(sR%F{LRY5zm_C09(A%C=@T>ebzY<z5LV
zxJ``Lm<Y!Bh2*_Tk^M$w<YMVf&YF+yc0eM^khNwPR+Rg*`p77Uq4CmVZL5cr++(Gp
zPvg7Qv0*tw^GPojRr3XCRdd3M+K?vD(B-?6`2{sQGwQF%Vs0mk85XENCSVxH*Q(Xu
zgv?#-{?R#2Z3(NgJf!UW%i@2vdwlL{mFT3A%^3c9c+B0g_WR4|x9qtCvLO;a?{Ru_
zEK<W(w1a!a!OQIh*}u*m{OC<!5;;1ORx4w@oj|{vnQtt{5kralQZR#I3+rqMs~_>d
z(&EwyKAQareVhSPp1X~@_hXRF<B&GapEIFaHk+0b7b{hBZhnVB<B1yfnraKh>h6Z?
z#(A|CJNruZ$BBB?P+9n-L^0xB<nEnJee5Orza1KF<-yXm0_Uj5gvaAvZ}!>~h2$>O
zvFeT;7KM2|-PTMHat-bY_0qeQ6XrF1BGkK;0+1vUcmLe!!jcs~4rh>EdVOnVxoQOo
zyMpvW=^upFe<={pp!%XWG@`DfR;E=y$Y%Jl`uG=~UD=8d0_v;S$G0%W`8Rb0#+^FA
zZ3nM|8I}Rp8@zDzOBw7icoC{*w?eMlih+>zQO!$X5J;Q9{uUVAG4yAd%UN88Ql=TW
z`In+iyv5|Gub0ebb`)tWc@>8TkNGLl+@)GNRBq9cwV)|vy*hrifBf_&g0gIMM8kDV
zVp1fKD>9!gyKT3Kdj5-p$cOwD?Z%n>FYwBU%cU~pm!g0$LDC<FNm{I+<i)+d&-N{!
zi(bIksY9K7mdki89f3SE1R)d13J%^|`;I#bWpu1Z5RXnCh#16Vl6SN+#f-rp6e#Xn
z6eayUn`dzCm0f$U`{8#cKFz!4C1GA#t8s#wk;|#cqZfT|<(SqHu4m*rni)QNyP*<*
zGEJGAfN>0i;&tCq=U@nk>%&z_ee?O1L)?y@^rx49E4Z1xKJlV5OmN#9^GRRIV(Var
z%dmDD0-s!&F8WBw_Xz~gf|ZLkA%*$5$-OHD{V_}Hr!7a0A*}tZEq$)!h-*uf)-erK
zhH8O!6lV3rGYka^OXz{e92*`4KYtqWZS`BmY|XDqJX-px5jScyv|pr?s`6{Zw)xt9
zl}|i1&IBKcNE~XXwN%22@RI{3I2@~1iLXo&^dF-6=nx>Ys3tJ}NpgJqsMNKYfz-cW
zOQ-6^5*uTgZ!1$^874ECKktgRT#rz~<c$D3Qt0<B?_UWChMJ_Lmd()WA+T-sy;=p0
zh810dEkFQIRd&oCxYU{k;i91%yLU1ocJCN=C!uDeZ9zqtoOv8A*h4l~=C?d%xvIS!
zB9i({B#5r!R@f)Y=PwkKqe{mXBe6+d)Yi}-JP-sUh_>G?N=w5pWk<w1G^*9QWsHt|
z3jQa|qKOVa7ZZPXc0PGyY7N1<XXET&;CsFX>e|k2xj?~z^`fm#1rN)6n%fEqJsL3<
zY>@#u=1HyqRXX%IsiQk8$sO6o&DO_;ob~=h>+Tr|+w#9P@rU%ETOHeO+<d4A6)(l!
zZlc9#>o??`Td_@V%6ksR|Ez|Om!^JcGJa6t)!zbM;O}p}mXSfHB{kgaYniOwJEYt4
z*;H-ko>fIyr*F!RI6ngUX}ou*9{~$1@D57sdl&Oa1%2G)M95z6$F_20{Whth#eV+i
zyT13WJ8Tc%$=c)G=M#!&M_N%eQ@RRD1^hMpn&53Z|JB4%_r{9H`C<(}?>3(B{EE`b
zz-CpS=VcdO=4O7^URMAFiTA@4j=$^wg543CY*Q;|TydLRrz}roY}LJsh?Lkhng7ZA
zfv+z#X}DeH_CdxWPg^9N4n-*ixr_%W+LQ#D?!WgQ;VBknOLZ=ITy>t0x!S2G9oF&W
z52d_IGY+GDMKkX`EGC2wz8Z0r)dnxe9Y!z}2q&Y9qU~R^fcI4y@F!XvTm5)1msx`g
z6_#2B3Cly^ibBovdJJAre%)BU7mSU-VQV719?w5apmQ}hi6Fc(mgE+iT>pRUy=PRD
z>9;qGGJ=Z8j8cXs3JTJtOGgxtE;Z6osZxUU7J?!oARxU7i1ZpIbVAdiOOXf&fzWG!
zKmr63Lf$*hIr=~EdDi>=UF-3KA6zq6_PwuNe!E_0R6YXV(SxCSJ7CKr^I3o))rrU1
z25Z6S6$P7Sre^Kd-2*Krm(%}D;KjkFLF6<Kl;4DM&Hf2%&`kAaYzxL~M$CFZp(8HF
zf*Bx0@H*}JCQak&)D$b0zPe=Rwc061LMzVkQU#OhN%sY#@WaEo0<h^x_}EjJ>K5oK
zDQj}o;gvx(O2hIaqgTNbR$y<PT1?-t=CWm9tKZU;c2h2aD@PVeB0bV*BAb_sx1W5w
zU>5$WEGsc6b(CbT+M3Wu_II>Ph8R@eSZ%gx%)Rn;d{O1&iQ(V^mAMjSg?%(nK-^9K
z#?|>Lz>@e9WY{ciJbMZX8aY+(k<DI1Gvq$mtPez;WfzGP?0k;1qlqDE18w}Ich<T?
zel1?gBpNv(bjJhuZQwj>HM+mO2MetgkJxhV`WlQTYF8>8<4YO3eR&%DFIa{D@Icp?
zv0SjIidX(L^GB;;B!5{FMDIXmyCJsr5%-*Cmk4#oG}}4GU_OCQ3Kk`01|^FIPoa(p
zcZ3Ib&b-#g=F63u3~j5J9o&E$=6t{#a!*eDy~!(@l2)!dMc4REA{N-D+u`WYaqTkQ
zRv8>N)b8tGKdM)PXJ<ReGr7G<C-w5wM#<Vj_V=d2DA80%@20LKAAHlQCZP}bBCd(8
z&-+R$lsZ889F%OK9n?#wVM}_hwe)omNFx;UH3)BnuACt|5!i>`vnlecK1u7`22$|;
z@J&T0o+QY+7x!d?x|F2PjM(T4K>BjdIX=&IdIlWQ`1XR51I?wZCJRp%KH3zd-%?mv
zj-k9F^l8GKitpz9HR_`Eo-@V4jIDRbEnOowYKAi)CDHNI#HXtN9x3(XKO`VLR^wuD
z(Rl${<|f1P3lA+fe2-TDTD476wNE83RPcQLlfD#pl&)HOCBnR-z|fuVvZ<d0>CL8M
z4O3qg4B*$+o4ilEYA6~xz_3w?v-T|l(Fu*wwL)hIJDuK!V<0<9#|6KUAFVChQa9{g
za{0O>8`UIaK$b7$jM%4#Z1IYw2GYs_98cU0B!e@$fQ6TD>3Hc|B_Bj{?a@Ke$0d*x
z*iGnM+(vssmCW5M(&jZxzC3{uNf7k|MtH(KbALykB$Bepq{h@IMlT@M2zFxycD|}*
zy}q*7Kb*a+pqCkX-)VZQc0jC!uvtyt3SUumeWl{!z9J4aSY{TTX(nw$H*Sz##_K(}
zF#(CHo^<>eTkG`S5)>|dnPaa%T!T(bGBNclTBIR8F{Ir8hii#VbAV_DsjGK4AmiGf
z9I?7FSkoDz$l<f}8A8&et6~O~yv$7z={qbDHicC{JYZ1&Q|qX-al~-#_0wp23iA<+
zl`U3J=lCng52E5*Oq^E9yFGS;US~5mfW2Z&L;p-y4lW05)gldoi2Gph!I`E2c<41=
zyEnJ)u#DP9!*Ch^=OqDmYw=TOMonEtglRLB{SL<DO;_*b;C-jo9LSEdccYdVA69v`
ztTIYTs~0Cu$lA4c({p)e=^3OJ@lA;Jt9T{FZ(hblzTV`!;GcNlPCLE!hT6zsL4Bje
zRYZD?TrhM+0g9Brw+c9+j(|jiiJ1V3?xXZvyoz}9A-~i;_2R$%kE*N`2w8+oL^sYd
zd*awS=Q5CHcuVEOq?Uu-snIMzi~)xZ94Q%oA^3(OX0sa4mJ{I{|4rUR%Tt5zGTU+v
z61Tt^e9^K<g}e|VWv$*!+{0tdI_Jj9*EQ17Wp=1gJjZ~WDD3EyLJiZgnbyHMx|ZIv
zxfUn>KaD)q4)tEmzk~Hu0D2kTU(V`0Qs-_emI}#(T;#}5ouiY13@tjXz4V127XuA@
z9b->{M_rThZaHU9nA<)Hs#>nUi<=ryxk`GmdHMJyJA3CML+B&UInC}x{OrF{^@?gw
zoW0WeDwmpVk22kM1cns1YIKJ$Hc6qklsD=2$xM1KsbVTe$025=cJPZw=(v{6HfL~<
z=%AYrtcuE-0k<p7TYpB_I51PSrl_ss+fU7LxXM0v&%o)%gx8fyK2@L8yq11t3&oA4
z<0BYF?lyFeaihG9DeD@`^hQ61!dba-#j97)cx+Gt_J{#+{Ta(LY0(1*qmR6W9IpS=
zMk9b14j)I}gQ{mz+-~zh7eojSsi?7Dy*3NQty+^|R_+*z@I*x0VL!hV;)PYOo3UTj
z_8KZ+(ve_Gl)*UJDh4qw*QMm$;wj~u@YJ$}4cJq6!K!H{-!WVh81iN^KWeI&F4lC~
zQMMA0&Nmy%4WYC`&F5cWLl`Zp+DIpCQq$_?p~sT}oq6KUEJGAqTh5@kuWmPBnO{3Z
zVfl!(d=kdHRSY;YTvNbwD>bjFf6LWj1x-Q9>uB-IC+Xx*!$Cq(M<nuWbb+IB1@H!r
z^j-1mNNjdP>9zE#$+TJM<jR+Lh4zQ-{4;}Ye6U1>IWDWuO@MkfE(>?r2{@W2&a!k$
zIJINsrMdC7l#qj5K;9$#NBYpNB{}DZZo`IO08JfZBN7enQconVk6_!uM(JtOO;w~0
z&J_2MAjYM-Td-(^ERLhkjir2}-|Z&sMg!N+rN^SuYrt^T4HosL6O-yKK#OM;DBsSV
zd<`ne@n4@=LZI<2Kn_++v^DuT_;jyY!_pLKPc5LXdG5ovhCbPJ53p^7xdJY$_df~0
zruvAE%8#@8dAD^P9|*nlCa=!=UHm4msTC#}(iT6xT?{wynhP<2UlYdBRi3v65w`+V
zv*$V90Sm|S#yY+=xTikfj;zw0Z3e6zTYtSQ%DTQ4L05w5b>oG_AvBH093Kl&+4AFg
z?^BpHy^xeV7RINVsccXZJrt=><@cF(w!qNSCvLjG)V}xW{;@9S;11)ynbA>@7i#&y
zs@bBx2wg0RuespclHnnWI=;XS@TjdBmvw9*;9DhTW<x!^l%D-|Bwd?iGW^)o+!M^#
za7#f?tC~Hv6IAycW{{vvIL3sFDX)Z1KN)%I=P}9WbeleV_Jyidm|9=`##<2UAt|iq
z&G8o={|(prB6pL?dVN0!tAWjdnyqD-w-f5NmxDZ(WImMtTvaWRbjNhfc_@+AuF1)i
z&Q9`dEZ1TGevxFpF~P=v5{_M`Y|9w(HwyiY(3$Z<RXAltDe?pgH|jf}-py_#Svgwu
z$x5LN>K{31$Vrbd+LW}U8!Q!?Uht*vU4DP+1AUw1TGDgaaiw{fEhn)IZfz%YS*Y*A
z=S~#+`redB1B9-2?e_fcHZ7<uSMsp6ZkI6(i=b4^`J}t~pnP+V7iJF>y_b0Wr?kWB
zMNs$aQ{AN|{c9K<tu#-3E$U@xfAZ`8``+iU3vKGOvt-{Tj@c)E24nJ|k|qNy0PuT$
z+z_51Zr7vGw3e7tc5Up(X@gK>2zk)Z>0yTalDvNIkyqeb;o&1NRQ33=RBv46O22H9
z#|@NTeUAIx$uvJkU-nI^z^c8t#}v9;G9=lQI!%9IpHl!}DtQyY_oOLo`8u5DZ&ER1
z3Jch19q<e}P=v2{EaQ;2Whec^p`ck@IdQ*X(CJ5pO5t$8G$D=S)<&_1GF_E1wN%4D
zte;zeHcgDMo}{Z0b;$0mPxQEs(y7mMSDbwHFCVW)s?&ZP>5%h{gMH;fz~ZfagjD+&
z%^<_$i5TPMur|p#2D31{FR&{dDHhqXRUbepW{Yc*D;Z9*bEFZW?Xke;K4_RF6chJB
zgbOc<#F<pu%vlVZRexx$SL|63Ptu{sZZDPCf(%xg`g~GWg@!G1Tij_US!?u{#?@=$
z9DqAc_7Fh5%@d<OkPxo>lCCY^B4;`Gqc_j&$Z$@PcTi)zbvg&f@hhQr4_}21-?79E
zm^HGTzC)2^yJo<XY@k@O`fi1rUx}YU9GocQI14l7>zU1`A_!%CXc7CX?g{bW2c&j6
z71IjOAdR>@UpucH<-O)2rpaJ0VTi&)BkSd&guiI5*ISh6oA^Pw$x00mZV*JcgSKlJ
z9jtm~6FvAY8}-#Ed309}03_1P8RwV7E=;ML*)<t%<^jNyP5v;oAKRxOd3m?pFKfNG
zP~Z4ms+-kaTKlr3gOS8LUSQ?MP56LV$bstGTO{l@=JP3C)ar2MS;kjDUg|<IsiS=F
z^_vS13!a>?TB__Fj=Zn88Tu|a1P<CA)Z#)dJhfOgXxTL1qo1K)kBvXRXF=qLq_pYe
z6=88)OHI8#Nvr(BM!9Z#S3&jB?wpgFHB}DTk@Y-OT04r=X&WAlf#`g3QZv1sFzX5;
z6sUM5Tek}l4pPsTS|fvV<ENqKVW&mRMh_J7?|eMIcN?TtUM9Jg(&_x%K)mcc$T7W*
z>PA(S)wTp!el+tAtS!gBNSJgjQE479u1a<DEE*i?Fdx5xN%4!KYZw(+&)zd43PIA^
z27KPG@(yd~W-IlK_%#{#IlldA71()$cUpit!j3SlTIQxswOy)3G}CCJo2BE&o2um0
zjkR?JoR583M*lucvf$GN$z|I*W202mQ7?@te?(Ge>G8YUx>|H4#*ozKPi+z%9W0`i
z%%|Sg7wWrOjbEd+Dx0n!NmRLSS7<mYw_dPkMihah3sqAk5I5}}VI5ZUb5A!rfA9_`
zaS{$NB3VXzA0(8Yf9j*D7SlI*JuSKv9CGfmufey(&f;T-ht>3Hr%I>W&FKn^JyP#{
zx?r$Ov|#7bb?D&89BChrtf^Geydvyz-)gkDR@BVOBE1rSk9$30PlLE;$i4o=C0rPi
zzIs(kB&xbE?#hzn2z4WQ_yuRqW1W3DZyJ#?qs*p<VW&lDb(&80X}HV&7*KmCRPODu
znW&(J>9scvGZ2Y*%>J%_E3ELeaD-X(@$|z>L<&wWT0}S@u}6n<G_6+9V?e>dUKo=y
znNq|w%C?@or%${IVPy1LmcP~ea{>BGjf>%KoPP`$Mid2eaGV`5e04Wsz8%wBSMy(=
zbi??0YUk6Nxa7qVN?N<NgM82%C3CvkQFE6E!kDv+?v68~QB!n4u>W)A{r+RlKeU)$
z-tgA<a#0gWjH$RTeY;u|7ohEOG_qJE>MA8&8priRvhn9{U)OVa&#vP_!y$h&{>=q*
zk58hUljeKDROzI--?Y~G)aKtc`al2S|NixVIq?544m8eCd@O#Ge3ftVd}013b7D?K
zQUP)=p;Ov}*i$@HLT=T?25I>UWd&$9eAci?+Wg#=?vH^xJT{;0YTInnHFqG`5FPHJ
z&z88X^J{y4s{t2WCR*J>@mzN2tMFQ%xda%u%X;$*VL8Erl!SXkJ_rN<_X&IT;cLh5
z+=t~AepB$)tNwA(^$+&haGzv;egDMT4a;V`2^Al!<vj~u3;%B)aGPPed0)jWPc#kM
z9cNb$tnzWhiQEsdVB;@6=<04;KUkJ5Y1ck&cF+43K^2!9jGGJ(4ww;`cR!x1@B$VA
zMcIcDj~Y16k@YWGs(kMT`Y(Cj)ItVkz<*50IQPM+u@D^}`P06P0&cp7B#Qc8HJlXU
z9h+8}vMP?6KU_?hHLD*u;C<G5{>yK&9|&6|eq+AYzy`MRML1D5+hXBxl1NsHP3`93
zbeJymwTSmhHgg<8JFaEJRwiH_-uZd61*2ldsd{Kh1_DtbBxH9vVPknh<*W)=kk#-V
z@qItf`-WJ9rTX(XS^xrGM0&N_IFhbFLk-OC1om{<|NiYbHQ)SO*8ij~JWfaZ4EKv!
zOY^t5tRtJqX;2=advvi4wB^+`Ik&g&_+ga6rG#;4d6?%P8mN0A%lk|(P$u<mrGInT
z{5iA%U$V{7#u44cPY*~>j4#0ceffg=J3v<9CUJRly4Dq`O2^Qoffq}9@yLJH5xl%_
zbz)*mNuB@vxIIy>Y~AMy$WWQ>fhtA))P!i^pNNH(bTf*sXUxshunYXAG~3h81{gk6
z?WDe~vk6UnAUWc<@tiwt6p1K*yq)NwxjA0vWt&~u7AxRPusAR<yB1Kiq2g7v0qq-n
zx|{|2ZrOAxUEOmkWFMd(w%P@nessRWtZVjNn=bULkfo&7K}4}WLqPgzC^v}mGobp(
ztJm<g57P$T!{dAj?r<wib@Iip+wiri%@509R7?{Vx)(=`eC$~OuV0YzL$!j-6G78|
zP4lRC&2EMbsHTvMtOBr~YAB}qWG<0oO*ZIn%D<a9<X4p+j@Pd949g3IB!~sU6OvEc
z0OHAWCbmgIgU@qH!L|Et=LfWSyQl08m5%K(0L|gkl}myzloKVwnZxjOl>p#n8{SH>
z@juQ7XfN6M_pux*;on7TUh`|zsa~0?UEdb15#Ua-X*_J+{NRXPVtVLUJ=FRP^)<+_
z6d0E6PT359Wd+*J%xXWDAM<%I7M3PwUzEgisrMwnyF!<c6hiI~b3HIT-~N*!)W2MO
zc^R4&`^=K{vo1`-eexo=YKS6Pd2;q$;@+v%)~-Q=Z=%K&R6%RJM<;}psHfuyfd;!>
zMf=o#KwO@CM*0jVlj}CFv@=6~@#AgN=SUmDjoj&SdsuZOe#)6(bC7FYgnBZkBjdHl
z;nzb3x=`AW`cfuo2!{ap-^lNoD0|Tv4CSuX=?fDkfq_8(QH`n=Geq$4*X>;u9lN>V
zzh3wLu79H729U*}i*I&C-8HOaU>y$ky-vac$ujp;vc>k6Fe$(s8+oRtU2A$G{lkB~
z9|nA>wLs158yZzP6~%VBK6m_QyWBo&%zShE{>8A;q@7&fmC_sjm6sF%yH*iFYSF{K
zn{n=o;Kn=Wh+yf1>@o;iOQfH8;3wzq$Mo`=eJl+*-tEB>^Da)1;coMYSRaxo2|?;G
zE4S|zTDI9qA+DhE^v_*zQ3@kLVl8WNk#i(9G}93+_yO+ZcE#XpRi0oM<jgYU30jpo
z^f&wdOw^dMe*`Kn+?qyCh_nokMp4VZ%JeYf8_7Hm5|o<IDNQsl5hn*)8>2}rFR;mo
zlL}M+`O$QRWkbcdir**wX()5PrAKaXvPBoxl;cAbvlU0)V!L2lR4p8G4>B;;tft2b
z3%+){4vt9hCW_h2mJv2ra9^Td6RaG*{rfl%^=nJbN=uoAwzsEi*GF0v*@m!5CbgRk
zng0HBYuWWmxbMU{-&z`u?QKe1RWPFs_q%cV2A3l+kg()9!a~`|+Gyws<bLPx^TzJ6
z`BQF2&KR_=`VWd)9%M4-(%IEJp$d$DkmEj!y}gf95#|cJYu4F-t(k2;$ejRHzn8-f
z_CEd(gA{k)A^-k)EybT46z|Usb?~1pN?2ihSVpw-MviOcmCwc4T-DeP+u<Gy`N7yJ
zm;)z??FRJcJ?rjVb--T3g79rcKYr=h$XQe2%`4F3-In@|!2L%v0IS9!bBw@6K9%Vr
zloGdF?DR6vsg;x4f-16F57*~NQb4Em4eUgkXw()dN>zGN1KqPi*8BaHS0jKEH;zB`
zLFu-UpPYj{J=-0#9W8&1Vy^r+SZT@2NV-JRKwN@jzb}K(Rlyf5i<Y9;Z9;}y_0YpB
zt@{6Q&|u{Gmd<yf-kr8K453xPJ?#eYG+HupKnBKp^2%-%@zJbnqT3-a2w0mcz)P9?
zuPc*yoAT<z+M{Ax|3j`u)k@#<b>+;NwXpf6kT%8Iq@Z(8$3oT^pH9Y!pDBT!c`NVP
zgz+Pv*j54gA7gn)x^kE&U^GZyc;aWrxae;l{8Glo2XzbE`BAbnHq{#g>kXT3nd5#7
z-|5E$@}S`UJ2aAGB}9lAHX!qrO*=(y;Mv@q&(P%Ec!rfjwNJmq00`W>IHH-o{5?mn
zJLegk@xkGV;<Ls;tt|__$6h^khNG-WH_yzQs~1SfZ;ZO3?d4To#<M8ozxb`vNmosO
zFzWXq1~P$b$Q}zp*Gb;+ng7W7ot%Jh>sO-TP?W#2$Nj9JpYx-oBa7HO8<|u*&xuPs
zPa=q5y!T6;U&DJBs+nE<T_+uJ-zFn<^ZI!{>M%C%jaPwT<nJkdH1C@kv)hcxn&?6t
z5oS6GNpE{*5NkxgzW92&0TeIbZ5=K0+fsGp_kOOn_9OH}FsV2vT$D!+4X?NCVSqGF
z#V62A>lUzKTgH)#rZk&NygK(_PPPdQ_6LBB@1{gW1Q%%O@Nv8pbI31i!1Y>eJBze6
zw3UehAB_Wj6=QFj3`<3=8fV35R-J}IcmrqA+q7U)o8V!w+nCB+=y(rj%)d{QQFT}1
zJWIe0sM1ace~7<mhMWk13$U%Ps?8f_NyS76p4H^Tsqk0Hi#lLPXdji&<00ES$%dYF
z>0D6X|G4n)*J>JD27p)n5L&A*YT~K&!(`zAFp%^&i9Z$o&qJVQ+$kL5*c~3P+^>Lb
zr}X{D7l^2L*$95PFX1?mmLrgx0;=^jAv_lzTgpr*9n8*5V^_nahz1(_@q9FPB-k|9
zIhI71tS^pwt{mR`EiBSc^Le#P8(XZ92Sox-Y+?{up!rY6wfoCcVCbQEDTzJoaMyYN
zDBX^p(&Ay|q%3z8*}LnE`x=#c{Ns8Hc9bye5wM<5yj>S7ZyV{v{r<P+b3{Hcx_AD%
zvB>1|CY-dDHx|%G8$<?`%|8K89stFu3`t$5!$YLF+3>Y1W3>ZnW0G$7ciP#OFPZ?Q
z<$8<L;a23GMcC7&LsUJG!@SmoZZK@O?|AM#E!iV}{?|QREzn>MSl*biF;H&Dsy4HT
zWhBbk*KttG8fYs@reK9be2E>fl@ud+pDYkk`ZOotlhCemsRBXt;t5pn5FOYP;iOID
zc>wJ1tax59e)C8|2k>#R@yhUlHsWpmNZa36ewEKmczYX)>kIJ{ey4g3HajXB`Ni|W
zFru+D#Yl1hc)z1aVGnWLdM?Lr(dy}ZD^F<`0a{r@G(5`|jBTVm!=I(`Y^Y!GG4tJx
z69P&D<!-Pe(3K#EY}J8hgIu%fUH`uK1;|!-ElYEa=)>u;$yUgC3Ikx7P?kX7M>GDU
zL2vRp-hHOojFCIU=HpvZ-sYpHz|?HS8T5md*;b>ve)cQJA*3sOW8ij*=aq9;xu^F#
zQ04YJLO{>8yDn<8O!TWn{NrDGe%~sw%O<nmx8X^`Rt>n}^BG+neWmde0d$MsKw4F?
zX;P*++PhtF=c1X$lm4*}B$Z0@rBv(C{f!+-2J>m^57_iRb3c|LfCm#v`>bL?5957^
zfejV%+Y*sdR4t+YxzCXQLeu4`lc4|Rw|Y#Ss5eP;7Wkah;KRQCVx^=eSuna1nBHVy
z1p{-Q`TbxUP(g=qW`OhZK}AqVylFeRdkmqbV7W@M?%NgB;#pO27;L=HL-3dCQT=^6
z9b@VmZ$`d<ZOIArKRE$hWV14iqGJ|1*ovxmpK;RR%@oB6q4RI(RsyUN%WV`wY?fQ`
z+!Cd^FXtWFQoT9vA+IrD2DmzL?x3gH(B5YwTuhmt+5i0lph6nYEXE5%&%pf}+$ek?
z?7@|KOJxF1(}b=sv|Y=(3ndiLh?}Vyx145l?B1C8qG8*V6@aSmHabf$ITlP|>#PU{
zFbrz^8rUgU<;qm`#xE0jKl8ye&?Q7L;ZVxwV($ig=VDWEg9DDXGsIk$AJ}PpuhGTI
z_sHGtk(`1BS@%mq5JtJ(^_*HW&}5&TwGd)@2DY&UUs^86_C0Lj;_)jS5mtSb_(b5h
zFugU+KOM;&P~`F#BDmo$Vco)eA9x{Fu6)(bRSATB<vvrd??~X}6#HS@Iw$C6B&U#W
z+rodG5m~V<U3Kby0EX7C6b*>^4E;=@!piVwbwYA}MQ~=@FV<W)D{bU#BW(8x1kAv!
zW;Ft+SfMzO$0VC`a;)W=H;ZTK!)#UG8cW~VsPPY;zQ8~{gK9M-A+cD7CiC&rqeY<>
zm!|%WmL(Q>+x}-rF4d;;U#{%B_1;)Zi`|cIA4}WzqFDkLLPwc2N@p_a@{WJdnoDfl
zHh4yK{Dr5-`qc2{Fd*y`){mu;)X-RF(}_=(C#QM3jaM(Z%ZFtxx-6Ns{x+Rz(=TI~
zjNiOH4YQ7{4@l2legeq7`CajL4-A_f*+qvv4he1tn{S20Uto2$TD7SR1!nqLecT3i
zgwvy95fxw(%#}rre-dbr;JE!X4)B6HejDq;<2^=#d#|cDibj6np9RhH7ZZ_E*s!HC
zkCSgzUMKyC6XEYEHCkgUgK<8=EB6V?IK9UED1u~O-CHYAwM8v?_er&oRMqL;dq`*1
zeD9dFip|eAD2ljVJS9J&A|z{37__foy1;mByTEYMI3bYirmWIFyjZd6APZ!6<8phf
zCQ-p?-;8H%0R$O+=j$jR|4RwtJK3(6&LZ=++UvH&KXoteQzoR(eYc7pR{c@0DzEK2
z`N~HRE?AIfSX2crObev7+WWM4#?Yc`tZO-yEo<;BjoQ?CmcYBfhfE^KKTK*E(klmf
zKB~`<Mih%3o=bqzB4cZlSyenlm&Q|@0{$?qc=xEYr{OEdhk8$xlO^5T=-j|@Snvhw
zG9c_Ho$NuGZmaXy5pMNZ$fIAKZ!HywK`_3N+j$fX`%pLej)q2BXWXaoi{8$eSD8*y
z@y8Fo9=yx>$K*<eYu1_1H*vhFH*uG&fIbbAA|F|9Pg!B0+<mR4Ll_yo{j5_XJuh_v
zI+;e5SzuDMO3-W$18xV2HZz`Mb#W|T(I7xvM3=U29^Dm)V(1!fKTdPyRx2jrFg#}1
z{EAdA5XvuST9e0lImT8V-Tw?!y|EmF4*t-~*%K(-ojrJ-My+6B_so?~xt!eh8us6~
z$}X-A+sIAj!jl76hzXK|rynr~CF(E-^<7*9W*M>pQ3jo7Vfl=d!fZ~;Lc8aVpUag#
zdIART5oY83ha(IlW8o3q!wsxnnB;j-_1OlWFI!Am<EI=Xn+&nxMsoC6B&v;6nMe$5
zNtfS#wT&DwYu#5%lmp&)JUz=YTz&f=cff6MoEhF^oN-^(D3KU+;zIfOT_Oi93L~#S
zVAQZJyrf}k+<urRn+?384N6ph!OYCdfPikB-*WZ@@(cYwgAkM~c>bj2TetNxBbzhK
z;_yvfxK*B><&JM-&VT?>4@1Kdac%<LF4{1AeynMAlihoI?417WS4c4CIWPFJdOjP?
z$d4aGQ3g_-R*BA8gMSwRW6&PMW7<k>9b?57?>S-+_iw}?3fq9@Zdlgf1sb*f$Qb(k
z^~|D<meo8!8c6;a8Op17AC}8Qzafj6pWpvxA~W17WiL86E`a+n0tr%NwFV?<xecNA
zL=t-BqZ8j?0bx}pud4DK%R#u()M0wFdieqLH*x$ThFSW+4-`CD*q?Qj=TV3Odbg0$
z*%Es`Sx-W$4J5<R-L(2}HJN`eNn2zW=myNtXQWZn(O?Z+?*C-}yg?Uxh5(GJRj1AD
zB?;cSIt5`;y$m1{mp8+fh`1X~5wMF54MXkUD$l4rc}4=V8Nj5gFRQBK`Bq5?oGX3#
zP%poMl{x5g`j>Anw`ph+v$gNtF@0>OAqCGoMbjGy^bn8N<MWXjPExOWRw>;FN>AcE
zos(TJl|JVcH;(2NkCrJa(rJU8qPgn$fdLW1<Nsrl6tD$fV;9^(699GFqsi9Q9r&y<
z8I8~T$m;o|k7|=pEx=1vUoFGGesaW^@BcuGSA3o?Di4~t^K|cJX1O;~YX$aazB<@E
zPXmSx_z_LQEPAi0v@!>~-AR;tmN{3&WiJc(>$n$Np=-C{$D;ahSJ=;4*44GESMs2h
zuB^YQ^A3~F=A;QPj1}3@IrRuu5dZYq10Zv02;>Xfw%Vf5GB@ad9OE$H`LZmkKM!rF
zuA@?E=EK9l7Nk5eB;|Hm@=Kbi)%WGgt*BW!dA<mW2ioIf^H7VP$2e3gRUj9it&Y9a
zF1WW{#b+X?#TxwR!IHkUk}c(LDhFMdfi}gldY=ykDIhWF!D8iB8-9ztf{2u~Dhm8R
z=>!I^D6&5(jR7c~x5x4sJ`MJ2_<V!K`wWcv?*|QRwh%?@w_D0jU)8yAx>4OyL#E=~
zc{u-7DZOmCPTkjXp&kFVXQ};|cH_D}9?oM54(pSKewy|&5Z4smk8OW!WiWdqkK0EF
z16^O-%ky2Lm-n9atzL`!bC?&_1KI_QgQ$&!uvg7ikUXG>G-^*w7WVU;6$KPxDOyPP
zDWIeH6v^j}DA4lDjl6EJk;qndFR@|B{nlV{9k7FDC~bA+HgnJ^nm$&c^Y@>toj=og
z8mmePB0jf>jI~V{4lMc@&Yi8~=Gu5w(UUkc{-G+_cg-)TaczHWVm7nx)cRJc96GiU
z2TAD{wJctuzX7BzBVlW)?Jy>H$%ODgd`?0H>ShZz$?#yxjY3`utb#{f1Q`Clw}l&^
zmWE@<-@un6Az((Zc(PU|th<GNDmOcsnRNP#9z2}or(r=W+)bRg6oa4%cVJ)%`~uq9
z24<K@j{6peg?fy{on(x@>nXoUU>vYtXv+4DXuDrdojvBdx7o*9;h>XLz&||StMkLi
z%9J~h!e;75oX;c7)~7;9tySW?dU6Tsy%7mjj0Q8)Rl}cG574A==-Q$zXiqc$7lDh6
zUmJ4Ra{gJw+qq@wTM>ia#E01$B*UEshl(vaVty(VI48f??HrZ;H7{dm63^HQG9Oo2
z!Gao=m_<PYo}u4Tm_PD?+pPW)(^+Q9aTgs|80@+XibUBq;x589uR;Krmp$*Ag<49e
zFrQ;A(nn{^%{n$spe>!RM89ph5?E0_V%4~_4n1BRq22prRlQa;;`U%^CY~2S*^F{w
zE6pYzs~TFnM7b;{WZFsPe$9SU*WU@lln;Q)|1T~^1ETuK9@a`gldv`nE9mQI&|MXF
zw~GGw-cxS1&BXRt%N7z*_Yflu8iq<vA2e1B3<5lq3I1HUqcT%O5OGVC!#zbOS`WI_
zc@GZg#82S9a6v9m;0C25obrA?1@{sI6oKoa`9~{ym;&FLUb_zLy<n0ZEYA7M5fcDc
z77)ms!?R^MJ-0Mk(hxFQs*++363y>rpt=8Q4G_3nJF5plQaauw*n^1>9;q9De4oe=
zZk>Pey)e?yDz?r*3Om&Ag#uucwA&w}$W^<r%WZ7nig$_Qr@=SbmTfOt8&t1UP4DHq
zo=PlUTdZ@hFi`GqCEh*(`6z++fLIHGGFm!Ab5$h<a>8EkQ;-~pc&-cBA}uKE+LI6i
zgU4BaY~1@VEqSn1_Yz?7)o)ZIxqiH?YNO)=Wb=%H5`Vo1ex<57G@N+2k&XSVQ6YPj
zUi#DRkIP=?4mO*?f^bv~k)d68cKpW-%gs<-X7nRYujfVIyyL1^>sW2L%aiJ6XE$J{
zPPt=Lk_bd8T^+_Xv3w{-kaJ7<4>ENIgyU;-IJvtx11F`k{e3AsmAj!_MGHoN=Pl6_
z!UZFq54%Hrl1Ak*7v%<dpWnodv&SIP9su8X-MF+v*zOox4lfz9Gf-{+s12mCW(gcM
zmXO2UhGO?{Vl!dB<V$4f2Z`lzUXQybx1VYTawn*elPsj(hT-U0q6o{?kt%M_0z%T(
zmtUPp_dt;!Q*{Y>p103m@b4O(`iYfA!!2I~*90{v=sD61(h%1`Z{5V5rukEqsB{>)
zb-Z>x-GF>g1y;n3@_F|6(R1F9cbS8>@_Vznn1e7EG;DRL|M4Y_wz>5C&jZ-F1$VZ6
zI@*Vnr7OIiIoh@_Z<MXl7CVGLw3c$yZgg4RRdEp=m6cAn4bctc_G$d^m+Mm`ecnr0
zFgPc`)%4CpuI$m`XVM9<tK*TSdM)rS_dP$J#>ZAb%%!^7g1ts5Nx&Mfr7j|vgE?nd
zTA70y3IMrNJ6`jd|7Xpo0Lff3Pj*pm>o=%hUASJXZ69?LH+45rPX0fcs!nApPWL%z
zd*X1l6)<b<)yk`teS((7o^5y;6CpJbAQ&uf-ml8ivDoIc3_}IGCD!LR1)n6(t4}zB
z(lYC4*By@r39kr?@yY@gvCZGsO}%UmB`%kUONw@`%nOVQ%I5|MTkpJ6>89w%;}t^I
zdY{>y2Z-f<$qU}6UaYheFer8LV-64Z$|=Cc-xOq;b_u!yJV4MsAboE0PYv4;0Hx4t
z{I;C;&awnLP8k5qt-?1P1R-^nRN^PT2L4Dn`)7q5+JZ++?Wb89>E^?4mz!33zoMT&
z=C9u9T#$V0xkP_HpD++#^7Nucv3qr}UduLH#cUX5rj{<dqC~l{Ve<UgHSh|v{1E1T
zJ}91KyyhVd!W;jWaoSzpJ(Bw|lnAJm9%pVNq`Tb3BkK?U*Ss)g=Ah&V-rt530brv5
zWa4S8UG_U9sdD<mayx;e8K|xy!Np49533&f*fr9~c#krUpY}kER@rF>+PDeJW?i9K
zpRa(mGZ>DA8g2KMs(a43qGm3m37Iubp4koVW;68Frrx1o@00iVy<OY$t=`k=i_n55
z)n8(2cLUu&;IVpNU^j(?%5<`U)hc<lZOPw`223Yg4B`O51s7uwey@08H>iGcmsx11
zUpmLzPP0jM(e7Z{XPCC;JX@O>GFWA|ayEr-?w_I}6ig4{G%q#2;Es@VIexLz?Ab&z
zLegGUo+j-e=gAF_giCG`4fXd7CPN1+i;6YAujBwb2LXteqB7LJPY*$)FSZTYt|<N4
ztP0jF_%BDa;Py3zaN?k-r4S1(avk5_a}Jk3SpC!OxI!;ktrf6TQM_R92fvN!>yihF
zpyKrul4O5v4#g#1vC6a<{|=a*Gr1Ig8CXH)aoGP){ft)GPop)|E&QaqUDSFlO9EWC
ze&+3!>ddC=2#Wu<%#7vNDrHGW{KvT`D1V;(diO`b^EnoXjmWurw>-tgV8}G3Wk>~}
zH3*7+)A}Ku7wb=D(`!|-#i9o)NOF7)zrl(u#B^2MHd6@UvkT+n|KIAraKm)2%AW^~
z92Qm*02bfOhDhoAL?{#Ybmu>q&6j45e|A@r^6L^tO~@g>@16Ei73}xllHx~DR+vTO
zg%-ANd*ESbRZjpYA|qNLE9v2r2jm{8?VCZOn)PEn6o}tRAs<p!3!Nv&$M9S0Spb;f
zzN#(2Zdb3eY)8c2cb)8B^ne6h0!%CT|3Kxny{=Z~K*wN%%wjxDfwE?Ko1!h4p|p2s
zX>vZ?BoV|Pj9{{4fbV`qC<>cZyqoXbulvgJdF;)7PB3ggYF4-kFV?{NEFh&<Fnd)5
zZ~<?c5qPwKPVq8!JY?RDcqopP9SBkzqBjQmM^So-0rdI3R)CtEqB;D+v!_)>aaJ@`
zhz4dVU9<eEF2SHlRoIJ?!$645`M(uD@U8fkn;vqylH8aJBt%PrCiK#Bn)i1;gZP~o
zjo@G_u;|xrMQWVE)?DaCR~X?aH^YerD;^-aE&rJ@sv&u{3-}pOo)tT8zFy5D?E`iC
zEE`{oG!>@J5`dEf<Vn5~k0Ag#{%b%V2Zo-od93z7T->Eok<f2W+g_bo3sa1yZkPb{
zNbY~@5hDwrN9hCr^bme50?Q<Xtq+5NlJrLFeqJVwGXFgUBlnWQz=ACBkfA2JcSjiX
zav}tu!<3Dt*_I9d{B<V`RW|}E2)CNGP6^Te$k>zwStRjfj~k`$KNnBoBKX9ldCY*@
z3zl@ldtI{~>!aQvvi@5(@4q>x0?psDUca83nc9=#WaE7NCV;7SU;f|_Dyx550)TQ%
z8tA3>y;jaQahB?dK;-!+PNVhSd4zXrnswDaTMilJXa^Dk`3$}z6drBxFn-$W4goMg
zEX>wJw3nY3Gz1Yrpp!5wnE<u>7+8B*<%dsB?c6JCVTgR+wI;I8LH2fFZ{;b)8i)PZ
z&aDZt0HUuvPX_+QSKL+PQB?KHV5$0l8>qLp>wSun*M>Q}inS-ckvX|%?3{NEr2snn
z3VFpx0ZM=2<5zFR*Y6^w2h1$J>&9m(y9s;=y<(QQ9KEsQ-ICc%82Q_u1p;5svt{#(
zhYeZ2)xQU1oETy0f^LZyZJ{AHfq5P|a>bhSvT44eB1{c3$1#{ej*ooal<nLIQ2!XB
zJ-Z@^Qq2cf>UC#g50d#!AaVN8Wv^-U5n58eIer_3H-h-3jN)SW^pn-}{>`NPf+V-8
z*KTIv?U!a<v=7RmwG3z@dJDciWL5TP!)e_;-dP+j*J!wArcrSmYj#wHsXQ}zujmQ3
zyn@%Ue@eXVxO?xsSBayX+%dpO09%^@t}2Q^0iFjMtURMw6FA1u>G9)Qz$?Q%wu|2r
zD}br<b2fw7M!(_IGbKk1++$T&Krm-<c32w20nGSgoiG&<p`KZPJl6c5xUZwEw<2(P
zL!>E&z|(>~NxusxilN_{)asd;hCOQA*1D^NU*H5R6xK+pGV;g0;^DO|&|j+L&zNFR
zxMG}8=3i(#PH$E8gDHQ)OH{~4<iuCYk9?|><CcD&KSff&XyB#llcHfJZy9Xf;F0<e
zXTEE;)an0%Pj4UA<BQ;?7p3)^U#VaTp9nH5)~^2_B<f%~SaWpfbRR8cu`^}Eh~FMe
ze6_wLCK;C-3a|S!yVu%(rfPmaUEKCb@R`P8ae%D0^eDo_tLX%}6oWG+pSK1rf@3W%
zZ#<dW?1?~q^f>SXt>eF(Qh-XWGRT8_YX^;&24DXc%7?`1z=o}N>^_K-9{uF%e9~Tc
z9ZbUM7!fC#d|~eF{|ww{1U|qPQY+xV>`AFEEC|+bhH#sJI<>86-Srbhh&;4UT7O&u
z3m&w5t?y86MO1I>mDw592AD{y+y`I4RsePrX7tf7>0MjwXAggoza7V45_dphf`nzW
znPAbtyF*M0lv}H@BV!15DMzVa4E(tjWmQigQ`N4|S#sjzzQn<yu)a??-@kd8U*PjG
zOEXT$mj#=v;4O|Oi#NLX+5)JYTAlw2I(8`qw$(F>-Ew5SX%@Rp8llp-GGhU3ob+rL
zUk6eQ`dFHPruF!!&)D>f$^w?L^#<NX+od}v;#lqPcDphJj7Ouo4E9zvOvSL5g~hwA
zw=v`wI*N8ybXJHi5qay8r6->Nt4Xd(_*AkWiM;;*=3w|k4ZAL3!a{0@=#}Yf0mM+j
z*V921s}&4H`g=b$W~-u$v$Gfd%+IH+WzDnQb9uP+X)t}`K%@5ZJh|2f#x4_6XMp^)
zIyUcL^!5$01v?)AT=HG?S4X1Kv)A%=y+L<}cqAQtG^ewFSxKb?aj%Fi1oeuo^pXYH
zV5`yx%^fPm+8uxWn``@pi9W?3*kIOF`jqV(R4I$Sn;&k>I<kqHsGjU)9|iL;`b9fy
zHa1>I@}tgw>;sH>dKBr?W^o9Wb?5Xw#G-r1fp^!<8(RaFd^eflvfq1FM6JwDXfh9i
zCs$_tN%%x!=%;o-3XkrFi7*S{iv99`QHdDEbsW{>i<2|>O$-RjJ!@@UT+~e<TyuZ_
zPazC{__7)hLfDc}WvkywvCl}PM>n&!#L|YV^)jpYEM+J8={Jx2A3uKQhZX|O-mP^s
z*>9{{mX5p<-F`G;^qEc(0t0Lu19?1h0y3$=vAl+^U(1&l9u3%_XyP&`toKqZ&_BiG
z*~7Zk!<3GXjGz8uGsM%f-g|U?tHiyyw<V`%RkiN`@$MBhX!pNiOOZu2Nv))itg`q`
z_`@{ZDE7d;|1Y9@(|5ebQmr9%QA2rtC;2`ut5<xsQ^j|&&?RMjoeIasI-4zU{pYm?
zKeE~-rv?RhJgD+6-yT4<t=``sfVF4Yp5FGteld)i72gW6wkUXj8mYzDUh<@rt=dVs
zX+RK%{l#;#o0hjI8uE5)ROi0dmk_xWs-7svyKcKAnzN|-?HAERrKYPy#Jb3dd~sjO
z?%^?f3lb|@RFp8lboM!2es8Slhu=Q)fgSD);vSv8q#52;0XinHwrV#CNejyZ%qRID
z)4^v_t}97iM(en;fQPZLKE2ri#QcfU(KJO*{8Yf}(Dr}uR9`8Samf=(oHlc+Doq&7
zZYT%J@TJoqirTk`CG9*_!|e1~_$a+e5fHvVA!@XFL^m;@McC<Qc+U<PdP8`Q;*&UP
z0#rIvvYChH9zl3~ZTP})=1Tbgf!gH|7vKdkW831X6hS#A1@g2lci~y@$(JpIAmZz&
zp;mE5))Y$sJhfSkTQb1<-Y{p~)u_gGxlsu|+iG_m=m2}jP{*h}mNICz)zHWDXgr3<
zp}O8S=dV<;{@xvezWw8!>XH&K2wzN283d3MJ_Yp7KE&4GE`Tt?r`GXHO!au@O2K^(
zr5Wi=-y%oOgob^=@jwKI0YLZ>5B_Jaq!dPl_v0zz%Xdv=D0tPJYLQfN?5a3)C^RSG
zRq$fY{`?DL^jq!m4{kM5nC^zpkp6YK@jd4ItxPH>(g?6^iej_ob6MNO5b~>W{5Fx%
zX{$70tf7r#`jtnst&~lkoVp2sM(-7$q~l|(2Xzxc0$U|+@kqA1d};*x-XB=mTD*0<
ze)Y0`vNmX8->_y+U?l@!Y{CB$gXNacbK)j41I*dbZ;54DOqlO80qvndl+9RX<psw+
z#(=0;?E-$-CsrGi#Q4@8I?{Cz8+31-t++w$=?s44fV5kW*)B7B7Y9-}Kqw$`yDG4f
zZdwoo87%;K`=SZN#D37Cm(R&t{A)e3_-blxZcQc-hU89i#>17xdv=M#Qu-yS!u{iv
zFH!^0?}6aC%7vQ#*u9Px{oo?phh4Ovb007)@HjV37=W?I=g={Tb8Y=xh89;t5aMsm
z7VrW4fpWe;%G~D|7m-|Ry8n(mLxm9$s1FE9P`m9>mo1d=@JW_llMylxRq&mFrksI_
ze3&I2K#((nf)y@eCTnR!Gdr-+OwJ{x^u%txAgo~*T=-(sWAnMCpUX&4pHp|~PD~_w
zW(ynL$$u3w%u=$06kPS=k>hyhH$X{)rMRyUi3uARFZmn)-c^jxTG1J4r@LCIXkGnL
zEOQy`I+JIU3oHX_%FV>Y3j=%hIy#PEy$K3PO@5XjWps?#Wkf3N!e2-SO<_@rJN7Yl
z>WhvO{gBAMhl{yn$X)zg$b%uCHnoa{NwYl6{%T5nt~XSXJbQ5Ne$Zaqk~DMBOqm2*
zkgo15+K&pBQ?QJMv-v)n3YzhZ-nn8qpSHc^!PzBi=OtVE{!kubi2rLp!=gKWaX?5R
zBs4YWah&Vu{$69fhIUg}JQ2ahA&entr72M!^3FzP@IQaUXV*NCj>X+T=#7ck^$)y1
zr1-}7Znx}30p%J1pv1p=(<E!HmxVZ#ck7g4VShH(@73;!SiFO@x?0CS_>c=NuE=6-
zS8$sX=8KUMK;-5>DaoiSPzjqwXzX*<8ZYnJ9AIprGn79d+iwN4mz8*_qJ5)^YL<ca
zFTI_ko~c~JyHBzLL}z-;0n4oXjXZRG$Ro0ARxg`<t!$69<rI>~wQPiRxBP}u^#lc`
z9LoC24DzR<p>)BaCjpy~{-wj!l(cqe;pByCkmW&V=M@;Vyoc>@@FY}H^d$8L{Iqjc
zNuKPU+g>#J=%2L5*zPZS$=ZB&dsD<qA;*I9X)>nNl`_rP*v(-<p8~?99FU$=hqGG?
zB*!3{c?Jqd%hJVtwPqWP?}}6#LiT)uB#BLqz|2Im$rC}G!Hya0#smdguOgQu!lUXl
zQ|9DzJ@xoj&nS=9voB5VTE09*@7=bbZ;t9}-CMsZoOLJ!tVi3+^s+2UAwD1ndIjn|
z!D@W`_pO+a+HPI@#V9HW?^HML`TXqZHwcd<kiG1sE>vf0D*ThN@y=}G<u4>h^E~;V
zxfmhmdtS=kGNe_zP><kn;@^@h<8!h~3opk9_l_3-^tqDAWaw?1Xh$$v8q+S}g>7Tk
z)=qk)f~^{Hpn@X!Y0BQ=>ER#5>6?rD?Sdf1jKO5D#T9pAMIFyY6Kh*Rlim`RRtm&E
zL`<TG^KeQ!leyC_DTMY}6V!$OpG9CwC%fBkj})9=H5?}xYzJA&ihNEU<bNgu(QBMK
z;CgJ3Nx6h{7+u@%UWUJP74!H5`oKQuN}NP6g=|nQ3;fS4K#C90UCu>kcclkdJIDIf
z(TD1Z6FHJiy%n=Q+&~3*wLVOCBalq62G(^nxrn(cIkM~?g_bS~GNb_cqLSLsFJ<*A
zirPY9J7=#ahpvl(cKZRRO}R()B@K#uZy1Qnedz~_0yEBS-CB36nlSTToli#&&x}8I
z6EgAWUop(6VK3X?BB++K2HT}TYRrbZWMXP|<MrsdgP|(8rPyM&(gZ=YRs?G2#dtbn
zGCoQ^VY7g5HFbpQMr;5lePH(H<Gv#L8|@djK_MFr!hkbIJW*Vd)@RU3=eF|wwytsd
zC=2^6eFjNL%Ch`zotidN9;5m&xz@Ic4-<yv3&nzP-Tv`_+Wk)wJ&O$1k7N_v;_@0K
z#6Vwy5htsFfiD=YFq|Y_dg3WH*kt=G6Z*P{a!>2v3_Q~~9?0YYfhjUiJN*Z7_HUq6
zlOtKzThZfUh$3p$Yqc3lWD5)K?RsTa@x(7MUXU4Ver4_FwpEc_IPb2aR;jLGdvwV*
z%<obg4;EO~Vvr)f#a11N4vkBA)!Z0p+4$ObW|XZma@_QlVD>!!aO<&VAk-bz+NfzH
zi(a30BawWj$Cj!5F>65lbX^8n)x$hm8F-+#@7^~4ip7$Ci#oWNEl3~*bTMYtr&1VL
zRv6I4Q({q9;Weh;S~Kll{gPufB*1Q<nY%|in-wVh-PV^_qfAO?dI8h(QXxF|Z(i=F
zRUTZ?$xNC&bskaI#hKwKo9wn8Ms(Xl-RT|-l5!=aNU73%I^aty9B4)Q+Fe$l)zSP1
z14X)5r+nyjOK=@cjTw-u-90=+{KXxE*iMPou$@WR|3>DmbNVppuAM(YaQRNmaZYOo
z5_>EQer;(!uU#+oKEyfxgd~@2xASfijFcX%zOHXVn)jw35LEW!k2rW3cY&U{D434>
z1l|~=KgQMn{k32=JrDvJyYDgvL=t-9&m_AsJ1*uq2HSjjfpJS#Rri>z8Qc3q5qBtc
z0-(MhUxe-a?<azW_}HJ>q4h)nLvln4PEx8W@3DGTX3>fX4CTamK=@^T7Tsm7)KgQ=
zc*3h@wE?Yoh^(xL6NcR$9ft}Cj$@x8-PM78O-Ik}Df_H{H%wB9v??5x0b|Q&>8(7-
zy!nl!To@7Fdpo54NvsM*U`wU!3Jh4=!1SqGdi811Go>)+;Jq-3G57iuApHVx%&a`@
za5Z5d!CF!Ra6W>_7zFVl$P>d>#^=Z~IJlyFp3GtPkTic4lu|{Ba+NLG`?0KHMR^?8
z!+G<T{%Lm6nqFbM&jaMZW!)oSkHGdcl8_PVN*Se~<?I#<u6Z`&JH0x~XMf0#^Hy+<
zej+s5^EmdeFsU9*?_Igyme_^-g3a`dTsAs0`Om%Tzb{tdcb#n|lsn@Q`vB<Jnkcfb
zK31pP1Z*1#r;`ZU9-!i*R1Ne(jhZ3(&XKTH`z03gb7ILQSbOXG3%B(x9HNR+=(I<J
zlZQ`UD)&9nf;Lpm8X=xz_2Jd##^#^CPf`9Zuq*H=?t7UOGCw(P_%vGX7TUeJP*{*)
zSbq@xvS66jFk^68XE&>QXt4r;0>m>ouYF)V>hI(f_UjxvSk>w6{M>J=rL+6|y6b`A
z|ElE(w!+PWd>!>uEz5cpe{QfP-t*5;{K~J#0r`47G@6i6Fzlh4$!}8pkJYn+D)1+#
z7sINf(&royfQ#7f`In1?F<`;Nnwauxn~2?1JN)1>UPgsuVPQAXM5f(E^keh2bp0mL
z>EWOOuv9C35(b6k#r7zE(3FrhS~tCQ13@9N&bS9haF<Q*nR$`?Fs*8IPCbB*9-n>?
zrgVLkO@3IK2$VJs8`hZ?toEbUL>01?+d9C+S?Cyrly3j*JKLcV1<T{xmM&hfS2LRu
zNVdaJ$VIjX3}nKvW0onIVCZYbgQ0{KQnqNx1j2qzw)!{9!KZjfa&)xqD*gI_n|AA#
zLx@!#Q*=B<3%CLUtX2bx^k<0D@^g1&rSSTfH41zmWpNy#4?kySybX4>Q~lJ<**FZ`
z0CM#WsS3i2Dj0@2`81`efLb4Ig}jj%yz$OsMxqC!It&Of5k7o*{N%EmF$8n*$l3z~
zs{Dr424Lg|65iaGa)0o_k{`8Jm-clRc$g#lJGXK?V}^c)X?@%67`dHtSIPA~=W@47
zNQ^{oO-u!lHY>PlS3dx`#21Ue6&>d*^iW5Cazb6(=gF}0wyvlrdC*Ug@|A-#=}q3{
zD-T$wTea)@xvy*j59Z8o02NW0;nVkXo$X=}Jg^e#B>=@K4qMnJC0h<Gp{#DBLRpBK
zI~V}^0Quyh8Tj5X1#jEQyFmRwvxl+=z+(}3-)KJz{4@!bmmC2s5^q)j{M-F?u69Jj
zWrOi2R_#E|^khO0UTtb@yZ&h(rLC8Iu7rMw?14#;3BF1}_(A=25zm^>k7Fo5s0>6M
zD!b*~uS*%4-eH6HS!+YDuzO+xDuK2b#Z3Oon&XeG0xBg2n{vYv`VuxOhp!c<oY9=P
zP1hud?uZ%>>&aps#sMDr3erJmxzYmeGkpNp{1YhSvZR|?gI&e>lKOdJCGL>=D#OC<
zHT+#;C-WFtuM^>xAH>C5av4s^#XmULoY$iw4p#xJsmb@#GGGh%?553Ff=D97du_Fp
zg#n(g6Ng?K#ftTYW7D%;CNfc@1W9mXJ78&RgIJ??yFjz0jM*y2;8v@A+n`0|{eR%F
z@~GUvJ2U>+C!Ny;6XKME=>c$g-AUX=3l=J!aF0K`#ht{m3>1E=jNa%wSgzWz+BPs}
ze|n-yKDP2gIT9?05h~DL7=Br)rahh+*xH(ifAbDpIFfA+R2x|-Lh$HOOQl!@;9P6=
zC$$~20agtyGEBQ-B9a69W#2hv`Egr8xr@F+qg^HE7c7=!^qZ4<FhDZ1A)*kHIAOwi
z6G+F#RKW~*31L7M(b%<Ys&5>dvB)SQq0j%uwnq}v{Nyzn?3}$~EpDrUHqN75Ko$yj
zRUK+3%6a;#N*4EWBA}tCohQCwk?BgyCn`lnMS|Q38xr5`ttjvQAF8fA9P0Ibx14g~
z;8Y~C6v<BZ?3E<h$~M+f*|JWy7!0R6D#RpNvxJNoOt!I&kyG|%Vhq`aY{OW_zKmsl
z@6`AAUH+A;>+*iy_gU`ezVGL6VVcmvC)d~^8zFNQ+oAT9x7`tXcvFL@;4^Ts?L7pD
zYk4i1pso}2H?x@H&hzgV@L5cFHtXb9;I8sxO1l}W{gn?<<mi<48y~yG^7Ck19TjAv
z@Oo)Ia>N{e)~MS`@@n3`>ezu7zWIf@$Uo-FoW2_tUD-x<J071fy_9Ro#wvuI`;w}N
z4}xKP@Jc$CQP_c5E#x?sYeAGfN`f!O^uYz_1#23c5S{=kMs`8zs>65q)n!;?fS~mT
zOuekLVPln2v6y=tS!0zbgEP=NSdgNMED5ChPHnJr+tzV+m)r$tpK!j{CV<B3_cnKv
z#<3l9bqf&0!Ij2zeU5MOLY!^yZ*&9x0#Wlc?#W%(a_2vyaiwCZdgPxgb?D<4LtclV
z-TN)quU5P$ZeUJ9S-~&pRjq-KHn*-4XBs~+PjgBO;I?zj_`0YE&EDPd3TSYO4Ht+2
z5#|+{f-f!BNSd8w6rj`wi2M8JYZ)fJ*3mdY$M?_N6-0m4uDtb*z><~pK6sy&L|4i5
zvHHOZX6r_sdeHswxDII^ACMJ;yERE~-?z?RmXKbJ28NNS{&2Nh3O=D0_E7jo?@^A`
zkM5@)T6jpUw(|r57pm7px4A8F{z#pDS8)EPK^~LUwDeCFMxygQ;*7fAM>T3!^&uiQ
zVz)ZW3mS^;stS`GLm|czj@jyGUa_8el=pBLH++wz!g!E43M=Bf?D2+AExfjN?{=0X
z-nAs{G8~_FC9t&Cm2MV@7;L{+@~%d68@8%yW0FMEDzXTaJX@R=$jc>t#Bc?|+5pI^
z=18rzvbn>(B-OF-tT($W&w-3d+<poqZ91E`4)`EF>H6ZUu2(hj?a4Ra7LRp##k~TP
z`^{TFNT6i^_I*BfI_Y1P<|Jz!=W}=GE{15tDjQ!qrbqt%=7b*k#B^f4Q9{Xsc~F<?
z#zR;avG^8#*!U5m^GIS6OLtX?;`3nK;Z)vB-mSaCo0<=db8FsIc_H*cNCK1B7Nyiv
zOt&7aw(`ZyvadXs(wVa(e&d0nu^3L9q4rnIeLb13;8z1vxOm`tzBYPto@4wU0<6Zf
zP=kMeDpu^Do&0<brS`rjN_G`A4-upj+;G!QpwZLc`3H*n@wdN!GMP{IY;4WJW6x`(
z*wnIxrh88ybgg^q$}@ut-*Zjt`Em3rn}KW8f4Yxa`tLhRv~rvcH2(BjDss30Pojp<
zZU>GQamOj>4K0_L5!)dw!~E*5(Nwcwn@0|1WLJmdg;7MFLO=z8g+vCde)abgg_A;2
z4#+ni$G$t~86Q+X63T?H1QHedL@O4j_U?C!uuxl(FE)Dtk>fBx0!{6KA^*~7mc00C
zbEY#u3J|pYtYRUP9F`?>kSNYOb`R3$E&>oEyY-x%CiyCz2i|c+3rr6F|Hwh02;CzZ
z`TIf^ic?%1-S#K3P8)HvTU$I>%1KW?(|A=tNHqarDW?@(HO+6Am5vICb8OBnVY1n-
zNUp}E9gGMjVSBX&VR}4kT;^b2|E2nUtJM0A53VwT<3ZXhjh*{h-U#^_T_XQCaT3rN
z$SrXUsL7)VIml_YT|&cnCe8#n$LR$wD63nG*NO-Io#wCq+4fGLXDuf>O(94hvUaf7
zfuYW52w4s4C9_~k648O>bZE)VSMT_6k`UH1>;rF2|9a?)BG2W#fx=BKxw|p}LQ|4s
z(xdtMSs`ufTyyt&Uy1%W;+g++9?k8Tz-<Hj$VrY=P0h?!ag12=e^fWO)|^b=^L?X+
zyff7`-g@X`wHNWEt74uE2pV8Y8M{h0kwg+AFvW5plmtYc!Y~Bwgq&i<qP7fK!O42=
zWu;w8kcEQw!i1Cf0sWm$y*Ot!McQ@#g0WsbPFC$|a?r#tZ*{H;xuhAg(d&E0=L$q)
z-D+o|O#q_%o>_S-h^}M9I{U@MR)Pn3z;HAQa5Q{D1P99|><vTbcwyty9l)X9E7SJ&
z-KoH{$z1SAFp~CMbb8e@JaZI0m{})=AvUln1;A4gZ_9SAj{2NG2Hh#E?-zz8L)Qj6
zk~hzh8SS9Mvu@jepc|R<Pmf}8q=l+mds*^7khK|3exdZIYHzrL+&Ucua8IqG3l*At
z8o!<J_@|QXsUE~mUWFGdUdt<~4l()kO?uyhY#H6{)F)zE|1g9@b>8~U#+Tm>9*-SU
z29t(1h5Cd0joO!8*5VK=O`MI3{lx^~8o+;riNv%}B6`fRKa@bJ!wQ0c2&5mJoa^4m
z7H8Q;lZ_-xnyYzXKwN}QDB}S*lLBz90mC@z=WR8Nulf#&cbbnV>cQlPL1WOpWw9;8
z{oID@p|UQJdX2nYekA%1-`)7CH^Q*=*>LAu@v6)5#ipe#j8gaBN+y@61w?v+CtBJY
zWr}+unwNL(v8rhcKqAy%#YE$-3pv56HWiy^9}CJGt5_Sr@1=SRlwRsFH#j<XuSJji
zR1E`qKv=_86zBm<`BVTDHU4K{R}Q5p(xNJ#<^o;ge_jZr6@O@BWbCjXk4e#fKNFPq
zyEN~Wkh0pxGppkk?bv@jC50nrW*@++@J@XR1cuzU=D79&yU^cTRWW}0`rOcjci7RG
zF9`TvD#VEMzIn|YdR%3GD3q*@IC$SW45|p6?E?Ctt4h}V-KkhDa6YW{OS?I{6BhxM
zH^E&YPZNJNwKxLQ$5~!!Mv~zAHchgJxuzMZ*T+h%_KSd9$&Ec|;Y0i(snXRH8{Y7C
z2ppg$x&0K;e&`!vmuJ{NN;%fGc4jrY``<Tn?s#{E3y)nyI#|Ns-p@S9)Z^UnNT12w
zk17tl`>9l^{jt1Bx1GAQk~%<0f8lEr5Ba)MllbnE0CAUL?Kv!u>Z@7_AYT0Tk)-V4
zznqE72<;5NhOda2TttHU?`2cyywn#+<71iCUtGSNS{)j?AI`&)^<sqfc+hz3W8AUa
zPXBW`A?z9NFPS(zkSVJb&3*u*Ky#n%CsBNxKKN}6^4RAssi=}y?p1#p!nY(Uvx4bH
z)pf^exqW?81+Bl0fpDbJyC1;TK|kXt7aVZ?Ej69ejB6igee4xNO)6yELrkvF2l7I0
z;|0L04mGo!lF4-NeOas%r%+c0>L-_?eZN16_PyZfWdIAjr5_?@fDy(pIEMXS$}<$f
zf$n|lD9cPSqYl4)<8P$<b-w%o$XKdPTd5y@zVW#UyD4^iSXv+mEP<#WdgQX`nWV=8
z`4wLKjk&0X2K~8zwiuTb*%Ff=`~^Ck85Rl}k6e9sYT05sB;_O}FbkU5n%~O5&kI>B
z6ra7^I8T$^66D-;u^Kl@t#1jCTLhWzEYBHu<kB#m4-xn$LXhU2_9|7|HK4MR*K?}g
z4HSL#v%+AN)2hqff%@w7-ihLJ)QGs_(Ae&`x*5-~uM<?>n17Dt$PbM9NMxc+QN??X
z+cmA+rK@8j2a`{U3Uzbsz-m0Yp2tz%xU%is$uJJH<>_$rl0w)>-!dM&^K`z*fhpHi
zk3{p0qb!3Eu*FM}Xm}%ZxwH}-zHI1FF@5i(<Z3(e`4moAM;IiPgmz)rhjFbK+yT-X
zVPv66{v1{w0{PeRbBFA6-q>m}SU+?i4{|;j6U1Y~o6;U+MLY*}90(3)KyYwkRu7h-
zpo4jaa+Kc0<5Y}QzHjr=1RvVzOZU(cSc&$w@pAs&1hM{Kq_WKv5UevnmA13wK`ioQ
zGGW<eS6N5%d6TdiP3N{pm4?NC#@I7(y^-!G{*p*}<NkL{PEB#K^<=;NiPw^W+;B#o
z|Mi%-(<l&F*OGOZ7$f4CO4y&W&#`jVMqTwH_hd3rx>KxE@eqs^lP(eC(5239Hqd47
zBl7{J>uftm{&E|X418^CKwhT}h{!V}-NLZ_#jVBx-OX|<z@69Yr|Jz%<(p$98V_!{
z%GETjbM;t_(LEl8I`mDaMfx3Frks>mUCIS0!&ezS@~x0Vz0j>Lq0xaGP3BhegrXr3
z*_tyg&cI_jq&O=#+6>I#1S#;0oo@`%M*$43AFnzC_!ma%(YOsmb?~AW)xPq>?tOGG
zX<Vm7#T3uKl*u*rcW+wN<j?Cd8dxw~T>s#^`}CbK%pP1c!Dw71(Ywh%tnMGB;n|-z
zj|U!ENdP$?oh%W9-%cowP07`PrCmCF7AuSi<CP=c0^2P22D^?s0yM)BzW)r|xIW0r
zlp5-?(hX2!ad@uuEyhnUSBP2(u(cd#gS~mIB?ob<n9U>FIeZI$KcDYjBIS3i%xzVZ
z)M%tNTGVkK>`b+1?z2dNoNU`1pCr6sD_pEi?h~&@UFvvBbDA>;t+@wN?^yLx$$QhO
zaWU|RUhedPPs=+1gFKuir~}5No_@EgAK5@E6*?7bK^^|q38Jjad?;@6xt!?NZQgU|
z!lv(v|EnJ~vzg)!xwrMc*b&6oWTCu^4hDntxc-B$fcC8e(4kXYa3>Bu@^7UZB!gZ|
zt6fbmC|je*4MGZC$|)^8!C$d))@JH!$~!&qp;9d#F?UTpGCLQ1^2Qb*W!?bv(JZ?d
zT;^)@Y3W4`<iHqNY4juWXp?#1lN$mrwK)%5(?%`~PYO8axN}^6%bX^JC8K#iwC-|d
zL{RyIS}z#e0?_-Yez82j+q6OLxUo!nId~Lf#<n!*ER$2K#bavEEn5v>ixR)%CU?Q&
z)sNi>v4TroXx4g4<s#<xC7@TjOB6K^cpjIUlNKbv6;{$!$6*zuwfq6D9B*Xi%(>{F
z5!&@q5{r^utmS#J8%WbNO(hHWicZpg2kRG2eBOytH~~T@#BKok${RQ0AuWsGa!%II
zclSQq<nbnm$b#(vs_5%)tQ}cc3<5z`uiLzA*8sYNREv;r4c-08*5<ZYXdFfYG!io(
z%34FK@^s|$f$_fUuZHd7Vl<BY`53c6mCc~HK~V-R&Q^!*hUG6UZT)^TtO?yJ)nfVY
z79oHOo&hkH(e;BzkuCypPHEm2%!J<&gUjhVcco)!%Nh(o+|!B@wN3WC5MF=uP)5{H
zYKP9Oy3`qE@Pb&CtQRp5FGq3l*&s62y6NT>_TJ=9lIKP#pk$M1Z_v-0-Y3~SBU!Eq
zR-L&s%2yK-G*mcXVa4cOCe<ynH5UqsgcVYn%D<dA6Y`GxH@14W{d^=}s7p<nnX6n5
z%CIC8dt;it`g-N8%0=thu5*{6-t_U)Ywf~4c>0V6sq|jJay?Pf?eBI8TeIBnX@$-k
zsXVf)*m-#~A<n84sP0|~ffIQDF%|Y;!LndP!jqZO8BJjwK6--5$5tuIxoDjGt?(0z
zD?3@AwDO<ds7mdXI(hEgu;=*20uc7J?z|$Ba8G<elOQfL9E__JDs7&31l0qevoky9
zNDyf!_C@o%j}R-Qtmzc-IV<o48iu?=WlL`~u$&8v-28jB9g4*|Mfo_r25arOK}w9<
z6IXKi)g^=I(ybdG)Uv+24(|xz*UOR{yWFM12WZuo*rRd6Pz<K!ob`jWqHByr%VDPn
zon7GYD}M*^^`pqv`Wv}P2Fm|+_g(e;$E{f_juL*F8)2WrGO|Kg1c%9dswpaNc{R~N
zFD3aV+0GbyH(5YtGPg*11EV>%X%DQ>3-=}6?vO}z@jw_1mNc8YRZ`DMuV?mGT;*oZ
z`dG46Qg-GJQFI`=*dp0+&U~>J*@v0D6L>BEFjbwVuyNY_ir9!Qz*@H+by#!_6S2G7
zj~If%>o!Esm%s|(Vs)%KPiMGgmZ}L+&6aXc0L0>A5gp+-Yk%mGm1I_L_6qe<fUG7r
zcpsDE8vk4Wz~^ftcL24ceD0Cm7=X;@8I7Pv4nb56(NB8brfj>Q{swak(5K<AwnyXg
zrn44h9900o@M&8|Mgr~SVfBpb8|Dix4P)rlvpZvqQfry;^-8#o1ZS=nUj=Y{(5-QR
zyA8OB0ttl9q>U@xzd4Sx5(9Ft#t+=@{m?3P8^`^nm~f$)D|BBuyod*B7c;Brk#_XX
zi&kOGNHPTfih%}@81kFi&OcbEl7AB$vO@H;;+>2OwKmr~8l|r0{r*-NxYE!{*f$>(
zvQ0XyWm2^lhQ>)PX77_iX^(}LD$fLo5S?z+)V`m56nJwD+9;7eJnfKEVluhA{#@An
z3TMrNI;m*>{k<MMysFUy6nJS6zNpJns}etiJ*u?*J-BSlGg{H`-Pqcpb#?dw?fYhb
zbz{3S=C`W59dV-5bewN=cf7jUZ*Qa?II~{eIeAhK3I;sNUy^IvoQ4lfCO{V|9tCbS
zbDB<czMd#M`l-%)A82FOFbc*fF3@=74Da-UXdR+K8K!eLSk(GSQjAo|5Z~JUjh7Pa
z2f}6%Di6Q8iPlGGyQDph0U>2xg3bBeCG)3DfWPfSZtJ`zz<S)Cs(vGs$+k!^C-KC9
zX7J<7?x1O_C7kxuWMPp2gn&YKv+l}C?~bph5SiWq5W-QD$Y`8j)(r^|SXLr>06*t)
zMnarUp1JAHYB(@N=o;85aFbfTZ8rA|sl#qEX>0i#AIh~TeALz`&@M@HIjYvLJGany
z%kU{8866DPWjo8v_MfTgt#Tlopsu@WJ%emy4wl_v=T}x+#84Akxw<32VE*6<9p1v-
z7!4uh&RFW>yy(m3{>Q-7U$gAy6Os(zYDysx%PSOPTEdsdoe9;A+>o(zBii}t@lrxV
zroHjkkm>qU`nsXiJ5$Pl8?9J?$2@d;z&z+AVVFC-DIR;!B*>U&4pHO;7w3^OOqPZG
z&x1ajFd>ZjHeCCn61LJ6Vmf#{m2}h~$8i8AjnVa5p%16cJg_pu;&Usz&YIa<^>iq)
z@Wj}~SEUQXaI@ierec2wj9|kT;J={M)Jf0#^Ao*(9WsbP^cvOR$7iD|@{nu}-Vrep
zbVdD7PKT(*_(#dY7<(|}Z>HszH*^CSe=a?q6tu$W=Sa>9r+0<rW!Yk{zqn|L-&qPJ
zA@2Bo+9u`<pAX!4nqPFxQdKXyP7xMnxN+7O@reNR^utTZg-c)Biy}wp7b8+2U~BfR
z<!ES|o{dOfqWPHu2^Xp2V|@Wp>kZWK`pFF}AHUInc5*?eU|9RY;fLa5Iq#m)gbZ3T
z2l~WIYDN8&VTSwA0?C`4mO6|#ICq?Pi>5*0{`MrSaO)dsxQs5l6F!DOK130C#b);m
z^--r1h1lD`I8FbCUuOIoI|wYGYC{ZS8xpGX0LpSmK^C%>Bpc@F19@`?yV1;t9Ed=>
z%T9yB?=0;6v>x<F>a<S#B%4>|rhIqLa7ka$nG+wX)&hn%k)nP+0GBBGI`8<<Q!yz8
zHSV_}$z(Ll07l>c+;S%;o2<!ML~&!4`Yo29VLJwQJwgySN)LO(zpuWh4)!nGOCLFZ
zJR1$4mXz92fG%}NZQXr~{w<EAR_{RWe3AEgr86dR#&f@~j9dL;!6)xw6+lf4`7|qH
zE`S8s8f5H6&|HL$C8R6#`ZRkg7mn|4FECx84$(Y3f2j0xy-G)`pE0p;tCUpOqAnKH
zZq{mEiS)1K37rnFZyM+{AEm!KVbUREex-^gZw3gpY+DQ7e|3Q#oI^_=P?BEXyP#ZK
zO+^Jrr+CrTEsWD@zH7#OEf-k3Sg=XA6FOdHn7^dG^9CQK2HP_SYfa2>3A-!p$d}jk
z$Q8QrRUm=Qbzt{1z8V9x-f{e)oshtk3WzGL$$UwH&HNJIzz{D^80OWp80G@Np^4Q%
z9_rfg02Y7gJf_-xtV_vPog>^QEhhEAemOO-J_L;VM_^z_EeI-Tf>6zW+U#GU`}=HZ
zuvmw>K+ELlw<e{GQt(rwG-fA)y>?U~oUUFIEB@D6y)*FXj^NZXo26WFn0O6lLc&e;
zoTe52t57IO>;DhB?b0!Fe3SXJNVA$+|66URDrfP?q9&5X&FJnJ8sk>%yYMRN2qk(v
zv96b*GOCX*I-FqnB+q*ITWfvDaDW^Kv`4B5x&w^GsyoFuLm&lG7`u;j2fx5zKFXTL
zy15f(vv8{)b~%)VI$y%jJ}H~_lP_iw=mdr?d<z&H%`tq@Va@1N2Z$*jhJf4JZ&e0F
z6(`i}TI5K?<im_-fm4N7c6#pEnv$f&SFQeiu?t$ICIXc)?y?uW=7IGLLkpz_c@Og9
z`dWZxyy}O5rRNcIcrBNCf8iX$h1|}<llm*-_*gkRA^+0%!B*p8c6OyV$WAD=YWtCB
z+;rl9SJ#frHs_$TytNG40_614(KwETW&jFheWCLaBn$xdmhqtW@cEnBAcDAvIyQH_
z?eY_9IvO~Ij~3fsL55}}1FIWQZIuACzSX)N51l}-NDc!9u&ftGop^bK1}cwJ(jSJR
ziwa(@yR0CD3eYp!C3Iv4+IIR6woUUA6(7gTR?{4rt}@-t8d}eH`y$HZAo;3`1>Kj4
zSAv${sgkLhj>g7op_?WWcG)GVrAD!5Rh5HvTnF(yj|Ja{aIAdv>_{qXHx^2*KUO)2
zgU7Vb>GX5KUwrgI%=C$Wtd+Mx%%o{UrkTSqg1E022rrUtTnF{fi_8@A7}~r1efHfv
z>VT;6;%7)#u=M}f`Y!3ePrtY|G%{$h6dSJIx`Aq|mXxp?>nkfsF;}PT1I}RyfP=BY
zVTU1S;3A1{S(=CGnJ;G-S3tjgZhGy=#J%hAamnGwaS~95Gts_&uEoJIH{+~R+I7B{
zkocgdRl<ayEz%+wg#jHhCA)S0mG&6I-KHvcmQYFqh7e5r$Y4zv^Kzg@0oA!$rG#b~
zzw_~%)UQwB2(8J=8A;v>&QP><a|o*AQuS$|8Lw@GQ@^tcym8(cpER{>{B{c14Sn<=
z2j2VidH%UX+OtRp0f~jpTIc5;8FG>OHN63!YQ?u6kZNEB?LsPs+^^D|fO<r-49~37
zy@O02@wrL-tPv}zD)zDbs=CH<4Hp(MONmc6w$YT22gycejJ6WVkB;BnuYTIrfcKx;
zSW+)puC%G9#y!feaM(K0|FqDKSo|&D)|HcEQw#Q)n_4w?YWL{bVR_Rxw~;!NoIWv+
z;Y6W+N|YiHAb?^2R$wx-9ThLm_W<?+XiuYGqmck1A=0z04<ii<4ilh-ezZoy0e)MC
zw?k=@T#F4P3KCz{^L3sv<fT3!C9$U3L%~-S6GRTDj<c^TqMz&L;f)z?!&v#I`G^4}
z2#o%{qJPLr3(V6!jm&uqzCs3VvyLtqwejT1cK-$w)gxc&*$2-Iu*}<%<Mg0|K1qQZ
zaoT6zrlAx$z*lMeOBgoS$sSRvUG<wNsXXjZs;~tB^Czc0ps5ecm-5BUecJop<qN<k
z^tAkUi|^!W2Bl%P%v-ExUtj!^K&UTNKlAsJkh+mEblt0+6=x{8ebKsagIs16i+>zT
z4QyL4lzRNk{C5cV<2o*5iyd9J<FrIisn3@*6qEz<wG;Z_i^tJK&_DTGp|yd%k~}p!
zs+^=WMy-(DZYR~7BhYUtY4FCUuy?qVjiFoZ-1x5AKP-;kG&NJCjJ?kc-C-}+SBAdR
z-n&srgBvW@_x<XqEOK8{Hv<;647Va~Evrp!ntEjqFvC^vcl6Q;pBG>qv%m+!>HK#f
zWDx+b+)psx?$8G?4}B^O3rw}264223gj^!B_aH8kCYyyZZkx|1y%4d=r^6BfSG!uA
z2_JfEmAc{x0I}*-25C7(Npkh3<cg(9xpvlXH?ka;_!XzMcJ>ajOsqURMd)mIGV<53
zu*I$f+np=T%c*pibpoiD=OQ8TZ$J$X56}@`y$R%~t9efGkXeFDg3NqSx*6@clQEGu
z5{zD)uL9`R^Hu$q;G?=-l82REhwaG5|LYqmD!G&!)k~N^${fwRM{WijPwHr8RvKp8
z{0s9N^}-tVQJMo?ce`pWMxQB%jwgCFv%>&MJgRkKSI5dwXwRstAv6J$pH3d1+~V8$
z?(j)dRcH$DsnMeg7a9vv%8%RU)^f`E8{Z!|GiTR5K35n>z7lw|<2vaB{Ms^=%r?yV
z$C<De<MfP8$o6qIJlT>tTj&#QQncK<)>LST4X>}|Ff*?E!-5hxo6o9m4^RpFBJjZF
zH>l@m1z^^hrX^dxPoIYsBEy#~b&}5J)UKyl<^Gi>JJ%a}b32;M#3%_eCz(O7Fl@O;
zRWko!YP%%x8Ct5NA)aXKr+antnC-=b<PN_Pu5=NyV)m<^^^sUj+TQcseIrd|e#CE>
z`(H3K8$ahZkwDx_s?9t*0lH^}t{O12I6KMy!3CtDuT}WOa3sP5;o}<@KIUZ@cv4&-
zF?c_D80%)#<DD||xRpui^A>rYf>O9{kBtxk^Um%6ys#3Gb&$g}Tl)AF)Zi<?v$(GS
z8nkExcUKWX-lrh_p4GAQ988*?0<>f%HnVK!N`_)u<v9)WXg+eJX)0#t*H>#7*aAjE
zz+uaTAPu2$NIAI5d{t5Mvn;XCs9VS;ke-IB6nG}%-rqFF+ptSQKZg8~m7~rD%B7>y
z5bEu_kdnT{9G|Li2*jZ{bcLU!*k&%@B2q7#imu(r$^m)&uH~|~)q4{~$oAtN0({nG
z0PX1}3o$1iNRA~oqQk^Y9ExtjT?=z!#0pCylaI0C{qktXGLC;_76=)kj)in&t*vp2
zf@v{+@$km1xm-a||M5Oko&5)!t?QeEJdP|hJNu1rz8tWpCdWDHuh|KAb<x#mDBLGX
ze0?Ym{>H+l0%%_SVM9I(0f_M5jY-l#aAeU1-k}hC-v7Tt>#5ill4-1jkIX9Au4eLS
zL$$w^RE26gUS28Wk2^;I>`CT_OPB#Tl&A~0VKG7e<O&_K_k&ZiSV#Y2Ols^uc!7D|
z9Y3N{m2SumC09tuDJc!rn;9N4<^>P`095_4LZh6~xRYS)8a8J?B_nGW@pm3)+~f*y
zN=xfL%dCo@fe8|F*RPmRp1pD$=gNI(;?{A3UuB|wmz25JQgJyZ&S)^~ZFd1MlUU+$
z-m+OWKlp2!nn1uSI&O$%6@R-BRi&R9A`!gdvR3l!*%rA=NL?*>V+k0um7Q_-jFFau
zOdMyc<_t$A>8$I0da1GYT$S|Um}!B$xsSQ-?WB)S<B0%sIsqPCQ=v`rL1W-;c~y&V
z-UI%xsJ&aa6BQpuQ{{7T)Z3#<($s!#iEUTTG?XpH@h;%k6Em5eBdLJi(522{<-jUy
zepIdoOT9fdsQMdQ1NNzh`i*G(Kq%x`)-$efms)BJCI!X%!jV_@KxI+$axiS{-r;Je
zh(PFWxMba!H4_pe<>e`oDqRdo6>3tX;w{a>CB!W6M*BQXlJT6gFWE6-z8(EkC}NYF
zR7ps=CvSn`!qh%ht!Kk!-zrtNm|YBN`&tc)VCG9!ATlhcss)p<MgK%PE>#i^WY%|n
zC<&w%+H~_|7o<%~LYXBbkZFM;CfOaJ`eB)s8!>$Vi-YSK*q6*~==h|0{yCa_qJPur
zWy^d-n-WDGwC+Ot>fwtkR+$e}9Gb;9t)}Mur_K!f#|5pI((U%iUNEaz+u4Ch%i+x!
zQKkSvm!=+@wX*aC+tU1I0!W`wH5D@}$J)IJ$UXpsujK9mvmId|t(VIH&CwR)l%WoP
zi#as@?iP0*zyx?fyDCbK{?SjNUZ(TYv)%cwrZZuHp9&*j5)r`hP0a|bhbouz(zq0?
z3`AXtlFSxW5Ug3%P=@VzO9p-BF4XJ4N0JOmp(=);(n{&dmGl)@U$j2{54Y)D$AUb@
z{*A6W#rLkG>q)gfb8OVKNYnXeqzKZqISi63Hdgf9#F{TGjBwK2V)HLE5}q=9&lepj
zG2YHd`sWThJ)4>{@}m&Zc$QQ-mMG~qUMUG{4InxF4cXvRHr)`czq%o)?C1tvX4v@~
zXr1mTlQ5#)WwU5(Rg?7mY*FvsT*#)*VQ!qZ#Y%43sz7O3CY-6aByv2n7=R|D4~vMQ
zdp&uMvo$Dm`Q!ZSxtxRktQiW{PgO#+aflonL+7_KpoP(xRCKekG$fgea7VY<o(D&O
z`7}rgFR?jr*ZgA_{_4|y;rM~2-Vcubr{*DUJhALI!z<1oyVdq`#hmm#3V*L84SUr%
zv(myiquy-i%vjNx5}aa6V$}%7r=D^$kf3Y&Vr@A=?)h4042ETGb)II`F-$vFINjKi
z$ys8G(n#K~H$JdVBn5@XUUv_1i}V<qEF7P|0FgjSruxK5uH4s{F)+LTqn+}MPy>uZ
z^!%WgDKEYRPK8}C-v{X6&w$ic19C73^JxYy@eodYcR7=Ds0y5sv>66i?G`?w{j={w
zv1-!?Nq|)ZoNgwA!=7}}`Gu>LS|2)L*cNiLC=OWf*DnFhPtBF|(u}#F(!1Q+3=I43
zrJ*gOV7kwux#-Fx57KUX=6RCIq|LosqhM5~Q!B&;7XkIbPH#N`1-5^jFm&Vxtm>1@
z-tqVu_y%^TlWu?R&waApy)>3T-LkJ^>=B|sy+yKSe2aIV2m8MEkr5;N|14<7L;&-n
z>-&3av>7SJ6ti7_kug+h8>gli6uLf^dpcy~1m!WLB_lCE?uv||z~kEk;|-C5K_i1Z
zRO|h!TtaI<!!e1#G4t_~4Yie6S14ji>|tmX8mI<V95DZxRW_*8Mvd-U)7T;yiq&e#
zO27~uFbyx%e~f97q8PHjAE<6KMEo8s0~Tt~>(d0Z+j^N;hT}ctL8!Qx<DEO9>t)&L
zIgE$^FQnS^KQCJu7?FJFcl6L|zRDt)5@qxk1uaKp`CTJ;MCjNs7^eyIB?*|_K9OyP
zY0aktHHqyMx_*f?`L2m)Kbq{`E38motd{En3!I5yCE2{OLi7#t4EmeQ=Y&j;sBET-
zxR0u)l#B9M?$Z_-r~xOxB&ef!JOi3*>P;_P8`=U4H~t)3ur7FrLg-DkaZ}%1?$^j*
zn_0LFOo=f;z!aQ(AGrM45-&NT9t)l7lnK%)!g@s!xa+egEd$;x&ch<ij_Fzzq~kkO
zXq5xujQF*uYC3!7`k+qvlu(eC_xatXxiVWcj^ttnZj?o|H$phDrArTb_tXnC+(k#V
zOD$)(HQGmUa~pu_HK+8*wdS_??2JK+*xO9GfOqJ{i{#I{qArQXU4_}jHo1?nK4@!T
zpXQW?PK3@Jo_Ct(MGiRnfcw<sGA~!ArDGNZYE<MBFfn-vhNXC*BagFLCud0`+;8on
z<|_1=b&7YbYZgObe(jZR?~iKs54p@KRC+S{)09V1!yNxd|G&Ep)K5azv|;#7Q(3$0
zXMdiui}N@|YefoC6N;)S;9As(_vRN;LbeM=`!0w*He<>9=G&r%U-}N!H7Jv@wF#6X
z15tI-+*)Iey4bt5XIu#I%qZ+2<O44NZG%wIB6SoAV<MR3j+@aypbshE7&RDyPHiyz
zcR+EK?^1i<DK}Fc<}nn^4d2*Z-Z?e)+<!D9+J8ExZ^dPvAR&R#tosl)I+#cPY{MK)
zNu~;1Det4`IN?m%(v6L8x9=HuUh?RRuJ`05Vqm?fF9R(<BwR_cnc=2dF2grVoe#o9
zb?8_=rkn#zEu!+ho{dmN76BC>IB7X9tmr&U3sBxq-PR3dII;at;Ro!h<g=x}5qpIw
zD^?~7#`(%j5aJq0Tr~<MklJCh1@zhbRxIaDt`j}llh+hJC7??;d*VZ-+bwNdsI4TN
zae0UwT@r}#HoAvQyC94<|JD;3MQXF#agAu-yjHVBFGzmK548MOtFsj?R-M9s_ZcYw
z<vdvUAO{&`<v~;qKqC@>z&>VSvUBI!(%2=Y(%kuLeXuSwgWe@7@9v?!5Yft~fyyZ^
z?7q)@s5Dpvi7@h)kDrJvuD8w^sP9&y*se&grd^89UaygZmtP7#3RB&@UdLZoG<@kf
zSfD$Is^MD?RT<k%q2G*%+wNCN++4?>$q!XCn=-xxTq(c=9w=DWKwTw=2)A>ZOPGAy
z&C$v^LF8k0ny-a1pz?Zv2tV;MAE%JJ<OZ})QzV?9az7bJTI1!`uS3={{r@S*crml#
zn0+&O1gs-B%|vP+jPTWDEdg4MDbvHGQFGN|{}deAqrP@yfA!m>T%QzYzaj&%utT5j
zp-?ke1P6VWBB~E+Xg}P7(qCj21T7&RwbW1=HVC7fn#Byepr!Ef0$YEEE}<|x82}ld
zlSX%01BXYE1@C-9zo&_!X$6pW9&*_iqm7axNJ(1RM>22Fw3qUO1tpSaYht0(mZ4>b
z?3ccp;+VHaL5Pu>8fvRz?J@uDIfrNFuMJH+hosKhSP7b63CQ8|o7<pHloBl&F_;2K
z$R8<pFaZ+PIH>!mw{yMUwYqB??Yv#|KB<<h3`aK(o#J=uv)dfhznq4s73N?P2HhX?
z73gae3ov77mL{mLf9R$<<_DZ`YsekyPn(sB(ADuVK%r6ET)3^}W8Si0LVH+%w}QVw
zq+DwOE%MW8VCUISryb8rr=xKpe^P*%NLnS0;|-W)14?cF5M9s^xbz`WH7U2A^!G!h
zd%OccReeSe`t^1+hMrza#tK~&7KFJ(*#zb~4GYS<M!FXsXDZoUc0%-Zw1MXqs&!r(
zKymv2Kj?M@3du<F3l%&1H0XdT^q7(5J<xs)`xg;po=9w3Dk-8_{uJv0X{sLJ%Eikh
zoH|bc7y^2k^!RP`GE`De9eNGNdJm(TP1Db%hp5)JN<rdy*t49Iemg}eCo~i$A+>ij
zQ=H+OdF;$ikZON9v|jrlD_;cC*19u(N1%oWHf4#+4h3ys>}_C=v$2-KvybBgo_B3d
zi*?VKjMUcT89<kMV@5l!)=e7zzVig(wfL0_6OrrQO%h+txd7-YM#Bd`Gd7Q=q7+gd
z?ZdV1`{CMFCn*boS2ZTRXB;@iPCMNykb6|&F1ZM3C4jQ>pK{SuC+n5uDpk88nri;V
z47oc}$NLKagE4n~Z@@(_WDd?dW3L|aJ%vyPP6^qeYl0=GajLZY`l>RmOh<eE`kOz!
znz#-*$ALA&_LZ|r(pTyq2Ru>bN{yy3B<Zy`{Loz!KVR-e##uUqHF*y+?QmN%`yT(L
zeb8~wtotZ9fOe*{2sZ}MXER#t<i|EgfLb25YQ4L39uUR^Xy_}W{S51g6*@>Vq!@BO
zpJrZS3x#$+%^$?Bmn`+16}_}_Ozu|94VR~?m)ncfbK&hr*%@Zok+EJS9;*rTLvIJ{
z!Omx;#FG<{DRz)pg#SAR82_P#m8x3r@&yFdC+_M@7E_86Amr}*784|*Qfns?>WzX9
zDczZ6EdpK>b@Q#spMcTI1@%?KSz<spj2ym~GZNmB2>W4<;y>j4T!R*Bmf;uvr1GQG
zRv31Fcl8`i6?t5tCHkGCm0x<p$Kelk>%NY_lwgp5O7lGBXzKJe*HB;&vGN?)IGJ#o
zNvz%k11Hb9f$B!cS{jPlw7LC#g3+fm9l`}a2@7F3x)1B0I*F{BFe@K=<q}FR1#-wx
zWApp;eRbeRy+4_CFRlG|KstyNhVA{FVci1#22%%D29gwDc*F^=g*(q>O};IGheC(}
zwg3dZ>~1?n%3513CW!6q^aq@{%6|jeCFMBMff1kbC_Wm%K~%d&>C6Zs*XSh+mXEb9
z)fv^VH*6Uj9J=MGpjAGC?pM)TYcN^L0V8d&B86PSp^@hq+t9Jz<%hIAZ;qokvzU#K
z0`gmWJMeYzmqLu_7*cNd3%*`^lFs9dW#O%8<$MNsees<sC4&v0|NHw}fbYMSbw89t
z9@QUeep6Cn&GeI|3hKj`WT6Yd&_le9{<ICumjqRvGCIu?<8Oy0vcI$WtPqGh*y8k%
z=Fx2?AQ<O~7B>M0{(ql8>I}Rk8KXh!)uAx?AjbLJ%slv951QK8M7Mv?*;kOY;IbRU
z5^vXZ_+>&XC|SFtAfEdUlzSN>fhIjWTNm`x2kcPZOIiWSL=}-@#CDHcA-pBKe=Zg2
z@g^4<zNl6H!Hm$bo}|8m%S@UsBiYF87Dl&ocD}h9GE^1_+?}beiRKjnYo%h9yy7jP
z{v$fK^}CPyX}>;_VMI)ihpYh20BP=U$Ms=<f51Zh6%>Hq)U37`06m8%A4CDAakEn5
z8DO^4)2UT*?lEjI<OZ#y#x;>wFYDdVP$o<o*b2NIw0nBH{z<u4$Jf_e0C~+_;fC-3
zs@JuDjeNfL5{esj#$UB>fD-E(b5>u}I=@n)(L@K7clh)mKr)cA=!u9SC6@P3045Y=
zpC?N6UCI?9`X7Krz0XH)P@b~cA~Q3FVUd#f8EtdHL%kh~Tbd;%+GEg)E?L}l#M<JP
zYuh3){1+q1x>*zxRplHINSjl)bjZg{CDck(y+e1xfR$YO{kUC5@1Uc8H;W%PhAUWc
zRT6p)jKKCAGlXFQpdheqTlky`m^bFQC)p@9DP)i?&-~<rTg+n9T~-E|B`C~ojXxSb
zIE{Im1Zm|=QH)!xX+DKieU#{ayWx0Zf>%eMDv)fvdMB&_=+ejm#%uRp5J{~7XJPwc
zm>yI|k32M42rxKAh)f}p{dNICZmi$~Ac}A#+|+~e4%=nvzLMBHPEWn`OtXAIz|F4v
znh!8#dUzfX_Jx@pjcw@so-yUBKq~n*YVqxy#yc!cdrh<kHmSuxw7mWO(AIFR_q$qL
z1rFSk{6vh3VZYChRSnM!e9gePRF~ORdhkLjt0-|fNK)LfVXeEavacn0M~`fv4jk-`
zAk$f<!p>77U&$>0yc<vUg#Y_)*nztdF18Nt#ws%?FhHMn4ro+#-FKcJ1%AmazPEuk
zwY_z{osQcp^LF&O1=5GVD>ttm3=Q<p=X9Zp#%=p2#>)2U$-Jr*<C-RY;D`EO&t@Io
zzOM%b22kn~wZgChn7KXcy?A-!{A0}Hxui$lp>Lyg#`c{N9P&*%UzBWO1t}Y!<b(k6
zKe`5GaESdPh$zY1z=#nHYS{)6fzGuisaQqe;^tGgIC!a!HsQERmx0VnYOCfQ`CPBP
zy=+dZ`10rcdgmL+n6+opNGXpa+zy1+Yq2WMX%t1fb<6pqBjtQ^**U9hB*f=-Z%|%_
z*AVb89>-7Cbr&#q8TvAW)cpisyYDGJPMZPhG3I-E@ZV?V5?_T|^#ZhG377EHderlY
zGGl$~WTeD_p^?8k;KYT1V$i!zBMPvX;sdfuUM)H4D)@AxUP)a)lZ>hRwrTIgbUV9U
z8nk#H+d$GFf9^mTGNJJD|H144wU3*w#(`b0JiL<M#I+9w++RKbej4(Nip{Q&?&Edd
zn=~5H3+ew_$~fT=-!1%CU<+zAEKT&kX)+vEWb$ZeMi;5s01$~hyAZHVIece2$Xwyj
z2&KPH2)&V6tA=Ps!|=O}(l!w~2ixTySsJzdbMJVHt2?AmR1?9*^$%dfP6F`i#qP|W
z9%^0xpkQ3iKgKi-^JT~}4~Q9vuPbUhUt}H;=Nw=s1M-{9EM9fN0}2~Q5G|BL?$veI
zhW#OLoCgBs+=YY~+yyLN-C%Bkb?2^Ka}TZ5(Th+;2Cf@xz);bKVMX&g>s6a@7etu<
z=|A#Y%y}KBxc$<x>jS<(hAB*}K!d6zMM<1#X$mPuAb}A>3#vwaZj0d5-_pWIqpQQR
ze|sN3#TEt(@KN4mL;di@u)n(RtBcL17ZBIqD*8A7EW=;bdA}<-cc_F(iwm@gf(V4C
zAwp(&{e6@S)vJQ1M>pr*nG(#jSd1<k9$s4AoslVYUfmyN?uKFbDElR8XQ~q8=eB_p
zYYRLT<rue{?VdIr_PXa^VR*6h>wl*uyQ$(U1DjzFqTD5ogwz>X-Zd!`?5`BN@)DbY
z@S^48q!u*7T@&cO00&<F!%xZ3O>jno{S-R_FrHx3B7e>U_eC`?57xnXlsVvX`!|rn
zEP5XRf_77-9yxd^Kl^P`#HBHGHM2GGg@YwHn8qrFHz_kzJ=id(m-pB7va2`4p)7A?
zYQOD@3Dn3<UQ^efZQbXa#>aNq1=g<ikASTJB%)wpq2M9e<pY+iLbhRcD}9wxQ^MZR
zyZNp+>|3i0a;525k^jv#ZI6tI1e;TjUi@6+<G7*XAf_YT;w!+blv(8eA&x8XphTo)
z|E9dLKVZgC*VnB1{<~uJ1OezkHQ;LKJ9o)jG~Fueq$mkgK?RYiT*EZHD;{Gi;g~0K
zQ8xychmXy-%Ytd;I&MAK*A}nZFV^lsM*I^XItdD}|5T~;U~m)L_<+(n*tLbGn0-S?
z7g!C}fztnluW!66bnHoyO|G+5L(2Cd-#06Y18s{_hrrw^TMp*D^He7w0$QWvRJprG
zRf4_K+F41@aq(!3rWl<#d@DmaNIS=*&?RIBCyb<T)(LgJSy`Jj)j@N>ll#>XYfoK*
zQbeDCwRJNtAWhp>c4e-9&<=NWj+@NhT^7s{IR^cCP5kx<+wN)1-Zei9z!rdsY<!Mh
zsZQ8TXI_rh%`NK*gC0`G3K(27+s<fV*dJ}*K!V9~!B=Qg=)hhOFbw(|NFqSN1S7@*
z_1b{V|6m}^fY3!p2xYA}iIe~8d_Q9g(EjE;Fd!W(+K-k0>1BAyNjUPpU8sp!?J}Zf
z_Rp(F|Hk)W<_~cBbLklWyDyf?50V`!j7B#;+o9ebx;W5ZY)6`%PzbysLsTTB1(n+<
z_$C$O2h<VeToH9!Qu2m}3s$E54=0WWrBc6-?#`6d9Ta4!g=dwB2#rit%eDlmb$2N3
zgHuq6Mh62e9d&)v+BMV%I2x(Kix5Gt0|2daM`3gmM?Gf>pFZoJ|DjW-5gde>6&C8+
zY+wjD%KsAAy#7OW^$b(bi|F2n8i*+Gww)iNo+L)T>YI(m`KEcq|9=h3<Y9Swftl6V
zu8s|T=}KO?YCGowP$>bq*QZvgF&pb$K2NY+4P~IuG`Ok2&Yx#yob!$gFHqh|a(mM;
zjE30-%$i)rWI)=i{YPT06X#f++12VbZPxl*CC0RfoNk!L<zSLmz!S^W=3#Evwy$7Q
zVI{SX&BJ6&I)3imfR&e$;gPnrb+$yws)vKvZY?*K&F`UO-80pQ=iMvnewxX<B^`+1
z=__(gFK=3oa|4u!cyy;4k$MqKZ8ZDw8n<eJK(6B`WjGTe9sk&i0a{vZMr9*Mo&;dJ
z0x_WlIG0<;0bC0h|E1t+e4P&p=l&%3C~NNe&7A+v!=Q+Fbdp}BI<+24!mEm-+yR(7
ze_2*))#N47w`G$3m4dO#EnM8Q5dNJ+_fuDo-Z&F79TQP=AIEhB*dzY)7uWCIeeSjM
zC81c_h|^;iC}WyhS*5LzckFzr4}SlCU~fYx;Bwq<RBdpKqA%@kn-Xv$I{WJ})V}>P
z+k9AN-PGgqi?4%CwHym-Iju{JJuz^h#d^Zw(e;(u)NUIPnE64J@J~IW7f16;Po6~N
zO8%->C}2tfnh|1LShi27&qi#1QO@^GTB-BG-d~-sUt__wKQr2WhUjbt6fPHd?E%kM
zXv7&ojxtWNLHzF#fXtDKvKe3+kM-s-=avV&Ne3En2d_3#+=nbd(qSs9eCv`c1{%IA
z@$%HxtMzYuJ*$-z28>hR9~Ne-ubaPh;VSD9v$L;{G)Acd_hKxdF3+WtLVu_NFZ%)t
zbS7HwVw@2{lNy~$eM$5<W9Aa#I`&lAwXM&_cM?%)GL{ap@Jc#zO21^BojaI8--?)S
z_qEjr2;oT5WEGe1RPceAfEr%4{m9S0He66DCkvtrK=PkY1OS`OlOE*fpiT-9^#*^g
zS_2TG{R|Gv!Wiu(rQqltYbUFp^sE2m&;7I!?_c7bOWt7IM}wV{CS)I8;Z!lMJI;)U
z2JuzZVWW}#2fzhhb@{2gLP@|d=S@t9!FurO3F5`Sj=z*$zkTg0>(SL?<0sY4E?=?B
zA1n#o%k!sXmP>&pLJ*|RylUR@^WiE!bnA=(*Q>=u#fA-^&(f(OnED!%jF4+`o;vT8
zq%3H~WA~DNn=mXHPn`Tz^Au9@>0yb;(XR=CQ`IspG(_O_V`PT_K9?tupDnF61kjL)
zATSDgjtN`@0MB*2MU_^A^9La1TnfzW|MlHX0k0L%k98Grts3D=yDT<YK{)^_egF=E
z4^*~7M*;QVMuQKNP6g|rc>{!yuGrMC?D=*C+FHpJg{@1js!Un^Ug?}pbJ!7VR%YG;
zfL#LwBd&Z?W@bA=$@tRW+6OEP^RY7Y?S^LNO}HKjmH2HTTO{&H!~EZ@^<s0aFOV}D
zG@NICw^oOge@qgrZXYy<ZHFILpM!;d1Vww@R@Qqw<A+%JhtR#fHMv56q&&C`nxQ|6
zT@B7_XNG9M2Q1nGx0*4oV7rvba{hc|pV}?`<7do*6DDi;2VCAux4^+l8Y5ROxYW;9
zA7*=-M8buf*Jug2P|TEeft?M2HT>%hFzZG*-h2`+CeHM=?DS9siSJ*fLaNymqOo7>
z1uwW0qFPCO59i8r!69oQG<n_Nf^oSzJatsTT;^=J37}{@o(!MG<Yy_DPPb#BK;=2A
z<DxVEI9ra9_viUzhiigz!`!7Jk4T)o_2Vk*?|yo)7|`xlI<+j3gTN9-bFPq{J9bzf
zOOckYkAWdGgE1qH;tqjpN15+n)D36D`Y=T-i}Pc8_>UtnEI%^P`JOmr`8g|Y^{Bv3
zwn@N~svhuEGX#U1^Dle+`wd8dH1S|`lmB#Tug#N)G!hevW>Wque<?3t-@F45^`ptQ
zS)oTBSf%#-yOeBwDGW2PX)*(9VAn7kJvU;-JktT&9RdQzIow0IEc?sQ@IP;ZM%K)J
zibScAE8dTm&+}K^>rhI)lc%V<*Mtoh>&Xh#Pjx-4bk#XK$W&lw!ix2Hd?a+|Phs<C
z*m;okOaRQM3>Lzmemnft^$QBw*I>6*WkLuGA(E+IkUFY{wPPqw?YopJ0qaTl-<cg6
z^D3ZR_+E_PuuL3|r~xJTWa3AuVBKS6z%vXMsC^m)$+(F)2K!kz{pC`*SOXS!kf%yF
zN3SUqw7%Oz!}nvl3W<Vx<dn6V{~SOpCHY}s(`2!=>;Ig<D`5;!=kx<P1r1|vv{rH*
z$e{r(q$+?u98s>B{5-GdI$qUOjoFy}1JG>KlFCg9K)XN60L(YNwuR^!Z1@%6Kzg31
z^3cP-?#Q3Fm`%L?r1+Z@WWD_a+Iwv?(~ilZn!H4IyM6NNei44UfqJ83y)!;u3Qm-$
z95u8Sj#%q<bjsAaqr<dY2OAqklgulwS1vwYJWa12?&gp1lv-}*4B*@6>WT-o5g6P6
zT+`hcZ(pTFxB*`1Xl|FsuRpf*KYuJYU2E&j#!ibOkk_~d^2Yvu8-;uYgr+;1_vRtG
z<_qkd3g}0m<qW(e6NCE)_+6A~W*rAiRWs&I*V7|cZ;VldnCeqRxS$UW`K;4ktWxX{
z`yIP%Ri!}xS;6{MS5Fj?4*a=HJHX1w*y@S6Vx~K<gz=%rc33Y<5!o!)j7&A62vId?
zUaQ;d#CspRDj)OY;H9Cofrv!)Egc>Lv1Rzq6G&V`{ML9Z?kOa0*bf=Vin|GXJ3hE7
zfMmR4)d}3i57H-6=VhfO#=e(*t;_Z{fV)tD!(jS}=_i>A?=$W|)ow8uClxGFf?*Cn
zR_KOcOsh<1n35O`MvR~m!9QgC5w-=4&~l$Gj(XZ?K7;WkWKe86Ms9x$vf&4tW0VjF
z-zV?fq4*2zl&!ke@15Cq^c0#*HIiDrwCDlFL{!?i0N4wt!wV!<yH{v#G-R&P`rBfi
zF7MKHq75HtKk?P&+KelD4Q}Cz==NYRQAr9p>ejaN@%udNu01|GwgocSW-i#;-_j~b
zry<toRlbGosM#`t(hnG?*WoT^;1O<^eeLb&?CFs0WjJIrLK6<W{Oa;MBQO=k$r1KC
zOE&vs$s3d8Z;V|n;2r*c?a6`tN-Ff=T>XeCodM(6kcj`)_V5CiIAH39nW>x_1hcY6
zLD;l}Yh_&Pw#!22)`93ES26@DPT@obAsYYoWBj?VDLX*RLvMtu7`jCrjBU*`sD$MM
z<a)#;-6lgAQ#U(sAlTvW$6rtTu*Wh%_qPH}+z`hay#|)%8jXY4O?*oV7XaMlXG}aD
zAG`|Fxu0ef^#Il+4P;=>z|0uPzz<)!7<pLY6ti>^L;}b{?s(p}&>T?Q7zf%4As)>4
zjIxkFvc4F5kKfsJGtW6x7&^Jg8aOftrwZv~@9qkau<@u^^}RkH>R@tpma@lIPs`W=
zV{_@K5vH(PsQO%xiv0Q=>GeyN=U;LicE2v3o&VzXbymHTdiEC-dC#4nWlcTtyQHx~
zcENT~qr+%UU33mx$&sAPiq~#@t;9Tyc{6oDfcYVzj<QdTE;%c#?PwCVvVU6|*}`vS
zc24bP`bVcyMy+0HOg?uJ;Y{%}cvUX3(wKHO$Z2m>R+N=|HaXY%T+)N%u-Nr3{F|V_
zyyD%eX&0zSFJ~H}wqf~R+f^yJE<xz&0InZz<R1zNt9JeT@<`57;B7>&)@JN#Z~a2A
zbyd+)`iBc_XE>ux_o}dGBJ6hQyW;Leb%lFoN1=|1xMwoA$@qkBr_XP3_kHXJ(rf(_
z=;H9*th9lO+XfB!_*~6(z8(cek1n;_5Gw7UBPI8vLwHmyt564-XgrWHePQ4ue(&=Q
z_^o@~Q*X}m)ZaaSqenwn^x)B>;kTn^<hQFyZ|}at`wY0}gXI*Qr(MHqt7&znZ!M1<
zlA5&J(t#SO)#YAs8OlHSw86oWp3yvz+wQB<JZ!(*EH;!g9_y<{7>`|1*M6@X`6g(?
z#hCHKntp$FqIT^Kx7+z7oQyY;-+s$>S8@)@FxtsG{)!E=K+avNyp8C0UP;7<2Tks@
zuAMH=>@ZXrudE1c>g*nx|5WJiO&h7(Q#cCsA9fNWIUKd|eTzegWwiVy3D@<vqwEAy
z#0bbYRSb6@nxMm4t(621V&R9f%DK{w_N8KKw}Dmq`tFzdX;J&dUc%Yr{tR8Y)kpBw
z@C)7fKlVa0R$qUXY%dRCsE9_B1I=@05ytH*5_Kq?{Pg>`xzNg`m-4wSjyvB{=2W?P
zA{HFm+mHN}JTdeRe-~T?)I`dP(EcWUzQO1EE3`zZ+>o|}Jh_?0YvRS<v1U2r0%@lv
z%Xx8fSKI1r{hi^d124CAo74Q?@U&f(hU?Prhi!Dt)R$>!J1dS?RLC7zEzT!WrgN07
z!z!h%N9==4%na-Xbdr)i?>zLG*Dl^vFM7~>g^pe|{DZZaO+Dyi9Y@&&`1mI3$itA;
z=QV2@$Px|xoq6!1`~c$;G~B!1gwHeFQ7|Odx>!eq{X0%GbO=SG&=+*&r!VX#uG8sM
z!bCV!@RYS4DQAmjmNPqgd730)m%s2<L1FsyTM@IHLXW-<Yio!1|1&WXqYcY~{>8J>
zsTi@qE9b-*{Sx=?oMQ9M{2Ncs2)&P538cI|3v(KYeHxVU)_!?LE4Uzg%0Vm2G(9Of
zIF>r8lX8}e_oFB*q#x4ZMGnA>S%ya)&Yzwh)PbFMz6)>bPnp4%<a=}*`jzmd2z|AV
z2cMo=gVWr5AK$z^>{;@x==`s%e>Dkb<8QY`p>|s)>9-9><oV7FC}S{N?(?-Jn(H01
zn=u$Iu>w=OE#2unyW$yaka6)oz5bTx?&SU|Ww(C^>2o&-UvD@N)bZsATAZg|-cCB2
zEPgg;HrAySYXnEMLnT-~@F)5GUwdEvmt^+-ZOyluvT|D7HD_wfC6ys9Tu^5+(=;=+
z+?SM5M@<++MMR}Oeag(O48;|va;e;M7e#4NC^sr|7f4CbL=Z7h5%}KLJkLMzJp6F;
zdI2x4>w2H}wViYB`}B*fbOg2arnM5v(4en3bamMyG<VzYS2D6a=suS-ijeFNY7p4w
z1q-s4E6hJr>BF_$gY4*xjy=rWe?AB71GeCVc1v!}we(;|h>yuvcSgR|^rYzxb4=#5
zlqUCj3squEu87-1F@=-ud;`$1#&F`&gV#grtLN*%?><1~@4>U78kY+>XvP(^wWscY
z7buHwv8!YiOQV0OP5lU1j{bnzJD&qF!;zzCu_>$wXpq~AD7+?`AsHceUAe${va$^7
zAPGD4MoS-T#<i;u2-ljw^eIgYcFx=%o2X$GPL9MSFfd}no7ZNKc$a9TGskwt+{C-M
zw>Xa5=!(*(K(p`gk4JrQjcIxpeBYf)nX61sw-wcemT!BJqwAa=1t(Xk5vVjZJqR<Q
z$N&t_V{^I;5RT)&=u$^rJVMCY#Di=E6X*3(auo1bg8sYSzKOb~7V8#NVkyoGJ-D*D
z_j3+}u`3x`)VdhdYp3)VqEtTrE_R7mMcH{1BAig68-m;@@28l_J`B=+>gp)#L7+)Q
zk|l}PzG@lGur*P#)-RVVFees|($jNV`DH@2WnIJ-OS+~89s3&q5#{T2;8Wa1%>1e2
znWa_HuJUG^Xa?UHG!!{Z(D^xklzFNXdX17tEf|mEu!_n!E6-M*zc75J(&=JQ?~33m
zl8{c^L+TQH*|1Hg0gW=931dMb25Wj2!qJBVvZW2x<_bG2cj=@&GiPhJs<6YRnqq;i
z1?`rZ5A^WtP$mxDieGYnlmR%06u)-WC8I;c3fR3+6sOC7R#t;OkMi@1!dOU}F^Vd#
z5%5J>^3viwZXMHWy^w^s2Im)R;;v4_^c<5k2QrjRMWvOYDV*Saa$KG1J!j@mJ+6#J
zp37WI9Hkk`{pWtlkNlzJHzTiNTl<5O95EIf0QDVQqu_iQt5B%3TrkP}TEB8~Z(`hN
zWvh>0N?lONoQd~l-fA-44)}-#WGnOn_Ku`zvI8DXWUaphh+A2SLoZKNS;BIgIp=Lt
zHeHsGi3fBMtn(c36DKCO)64d`o3msld!#e#R8C8+PB|afh3D0@V3ru1G93EP#au>x
z&WNz7DXwb?BgcUre_oP*Fc&xuEOO&M<V%-U-bG!u%oeo^HIo)Ld^Rj3-75{%@ikty
zT>(-|brQh+0RJQLz)crAmy-+jVAS@;kbVk97^!OX-5yyQ((KFVve3=bwuYC)ohHV<
zDihTr!;{+AUO04-$qNc<XG26h8e%Q+0Q=MYZZBxt^quI63V~n@KSqaA`>0a1Ls|El
zhR&0EC<;`DP{<{Na#rn_bsvIsT-L)j{@^?|UP^apZc#zj)inF67%@Sec}4EBOUX6K
z4_04a-FzA8H>&!96~yrPKqXo#wr90HUrM!VWiER|>yjhkSkA+*oQ4(kd0qb0dI@2)
zlb3tZZxn}5)oM!2`|+YUE|FL`lq~C6yZLmkg*S)~DvMg>PUPv^4@D(FtvguGIQj5u
zyGnPe9dnYYJvmrCY~s88CUBv-KcawzvC|-Q<x!ucx~Jp>iia{sAKL15LTsJ+14<tx
zs{_FE+7PbdiFH&R*G6ATJk0vx{m%haenW9pI<GxX)(A`Q<ihj^q9yNJ7E(4H+fNG~
zR!>BYOqQ{!f!RtG6d9_0)HYWpOGZsvhL^L@S)}D&9iBiu8c+LToopyod-OTl(O<rD
zFY1D2_8&egrz1<`^BW63`FP@uthLT|-q+4DBU}sby!g%61@SA)Ky=B8&1E}8Q<H7{
zoUjZ2jR(HAva!>r>QK2kRH9<<Yq4TYtL-Y<*vr_a43omSwP10<mSrOIw4|>!-dK~?
zi6qU<zbs(iuqsD|XEjuhIO3#qysH^#p7@^pkLmHt<joKK*AYqSsH#qo=W&5F2=lSI
zm)ufI|JX@n{+jnQNJ(+^hX3l^Y!OWT{o0LR^OQ4n4#EoFd&AB0v@>11X(!9{c&ArB
zi)qzN1HieJY&M5x2X?(s5Wf)PeEZGO>s&^%Qpur4H2cs^unBcdt#68d|3e!T#ieMn
ztNx?<$-YVU+V0qwlpncQRAPHl5nD%5Uwr|DlKPCljPx}6AT(~HcNeAzPfilvFsSD;
z=Ho`j{|xC5(X?U@^+-T+PQ&(XY6&4CxI~Y#Rb|f2<bw&gsMiPls9XlSSMXb2bG86X
zee2D$p$>dm=@+qfB&7LHw5xnnX*p5yvR?JuG2v$g_xhORBvijmI$-N*U!%+hm{Y%d
z`gmk&MTV0_u(<PLWQkg1BK^yJ!R*f8?oDA??4H$DmU~7ilAY7JKR?MwL%hOesO^Gb
zD%4bA1#i^!V3;{INL8QdBu@2{?q9%Qt9-o`4f-&mEqVL{VC9Q{E*U2ZtC`+i7GYnh
z)lFk^<FKcv2ESOt$1F8npzuv)rS58`n9SGdi~OIfOU-{SG|apf%Hzh@3QA3~j$p?-
zHQ{aRcr#|E39a)Bm$Bp?lGNXbhD|j=O<y?qcFBERf;$=_7P~s2ziy$r*O0^=ut)TN
z$@GZ;TSYhGsXm>UIwreya^blm)rEo_|7-zKMdQ{bp;xv)k6)ilwl%CEHa<}^UAkS4
zU9w#Oh+_3ri=z?FhXW~l=A1$O#vlF6Oytl?zru-!&7G33&9|Zv4Ofv#xIJ3}Z+gag
zBKn=uJ9S}szWtu*)_O2czKH?05-{tSdsdW2%ix-Hzm>3XccY4OBP$Lo=u9OVMIE{>
zTk24<@hL{V3@2*ZqJoic-m6Y^4Q>><WFd`p!}wHlF9x<1DT3oWhQ~Yh1YRdRDX&><
znRpdHiweg$Zi!a=7~^)p9)VW{I~((dH5*4;9MgO{fgB6b1+Wh6q}8=fM^zlLo@>C;
z2K>E?<6dg_9CDRaRJ$o`5Q1bI3p3<&8%pe}>a3&Gngd1Gtd3>EfYjuZ5d}VB1Za?;
zTBY8-2B-nq!_-F)Fn4&L9}wzj`*@6q3<sjKxjsi!w$yNZ)byq?@p1nhpU!$O{vCY&
zaED9ppusT@W^qhHZ@qyYykT6_=-^t+vPhX5=vf!qP`Ij;#P;ed3M19w#B~^0oC7k^
zMpG-(-@|N0j8S;Am=rN}x4Zzhd3Shs2s9mO>}h;wyaUYa0k|h$VRj6c7buezPCO-b
zF4nfcYEdQCd>{Qw_Z2hReL9OOt`QrOd*KF>GA;Z;=i;o377>l3+?ctymADzgp)iKO
zKU2mJ?b*J(;@1%CgG{D%_LPk)rh8nZ%&AUt6P9;G6kC>S0e5hu2~JS!86F}2=~on=
z0ko@I0k{vn%-g=|?(8>u<5XyL-3n908#|%Bg~XHleOux+%gL6ZRroc#7V>|Ee(qUL
z7B;gVYvPlHJ1Q?yWJ-s^0r_!^(ca!2SHEK6Z$E^*52tt($9p<};nd8&c&2m=Q<pS*
zf`(^%WO#rBd)jgdVOatrYO{Cq&s35czn{5d{+RI+Lu{7U+}Sr%)MvMSOZtgR##q>C
zKm3vU*o6%P%x+GNN4!&7=lc-bK5`I$_qV^~#l84%pWYy;Ip2&kH=`(Dz2x&!q56n8
zNm3uuJFeZ+W(xNf&An#DOYc=wAS0lb^;(4eF5|Yk)GD>sklh<(GgL+tCL*j6y=}wM
z87sa|2Ss5CB(FGX%EFcoFPvA;gz|S9xMh(|bVc<U(nPV7#m}?P@sB+&UW@b%pDEgJ
z!+w_5h%gQ-#ySgT>ulUdzzWIiMOLCwCa6{AP?)hH^W+ys>t4+kS(%xv_)?Y~_()IN
zWd<5Tt#NUGG?l5lU_7w*xdu=;*!p{o)h4yqo>1DoCA+%JfA!q%gQ1T2qi$Je$2CLG
z<Bw04pG|8(_ZE5VceOZPUdd%}KB;@r`hhSWcX+9Elionw=8bXAGcvZcLE*q(i|u>H
z)FDRJ2_HM)>Zg-l0}Wf5mS2`Fcz;hqQ<PJNYkge;7j%T}2_qE|!gl_nWY!u-yc`5*
z;aevSPOAH+$ErJVTIFph|2f`YbPjV+w^wA~_6%qlw|b^Wu@(_;?p5rz>YUCOXBVU}
zbdC=OdN=uR^vo25%e+TUE1VFm4&jVUI#*bUqABaRiLZ37paMxy(rjTyfV;}Hys{u*
zUiVs~pHqf|A5f$;1^2cC<#kUAyEowaa2cs)@oD?3_|PFJMOe6U@7tId_Sz$WQ#!Wr
za3cbE_&9NkTI`(gM)VU{4=S9zus>Ye7WwiJJKWePjIt=25$L4^jF>CnjH#(87MAm2
zcLdoyc;$-iM9id=dFszM_XM*E2iZ;;pk3wM2Mt)KjPC%s^(y9WMJk(-DdwrCwa=Ga
z2IX%&1i@#vwD?Eq3Xpq(5P1E?@(f2zoKwKKgcDlqaglNLv2j?I<!la?O6TfVlmfJ9
z#;OvU_y0E5lkm4_2imCMx2nf?kTcDGJZY90Jj0llt>zE{eQS!YnuUKCz4{EVRvJ?5
z&f8uc1~>-&G~gIce&XEOU$z0FuMhv@E28ct>3cl79ASiojepd~3W=Sm<ys{%XL_H$
z9-WMxcyqJDINw~7H?xXTQT7Uy=!6dZu=hCKy0ytWftGA7S<13vQ_FYh#4(K{lJbwR
z&sqd_w;f<RFi{Yy@~p}4w!a}>&R77c0rX+Qw|i{gmdVv&!ws#-FoY37qpyO>%%3dh
z=A1kkD#zP>j|rbEDuN%x<A%oisDo|6<7F0#>CUxlqcaPYrN)aoSO4*C2V&Eb3rqia
z>9||Bkiz<<(RSGETFKi8fAexJopa?{g)zT7W$4t4(SRDDJ}tIOh84hqQ~%UfFS!&>
zc9<A{_YCp{jXoyT8Vhm31oXBTSe0`N8iIO($aF!yBqnBqrFX6Cs|`mRBD<?|A;0rU
zzD(qIm(KY5yU(s|Km5@@k;&P}Ku`I0qf$1zcVzRQ3lA7CtY=H(hs@uZ9_eoTiEWp0
z2pq^QKFFrc8Gwo1ZSD+|7fJE?PBS{6{CtZCz275L)bGvQ%+TV;N$Q0S7kf7hG%Lx+
zLl^O*mE>P$T?}@WYu%5z)_dLnc6&eT>I4q~U0?C2OkP<ykFxwWyEY|e*_uQhy&5eX
z%f?+P782<unLZtQuB17RL>nq;PZ%5$9+51aBWcp*ejfWTrXho~@oIV@<b-GdCC#$#
z@1z9}>Z7-f+-q-WLHj`Kz9)|7J5S|xg8NLI3Z@N6+{|RNR;RS&Q<~zXOkH2t(-H56
zxT$u{Yo~?x9-FKsaT!*#T>G9~wj1T4a$!0vclf}&AgPgcrOw(sA(1#KFopXcqzg7Q
zqiyu8N5N4LBA+UaXXQ6wd$SC{Hr=UbLMRM1NXX_TAdegxSYi-{Ra;IJwA6<F%h!}g
zwSW$$LAfhuBqCmJ4k0GXCmGzq@5Y1eZkxII;~pDx$Y0Bpl9PelJ+s<qb$6@Xu6}S`
zcJ*yed5=r0)N3o2*+VO78Kh0wD4fK>EUcH{iEIy#kd_o;a}nXsERGFPPG-TAek}9l
z%}L{PI~1h9Yw+Y1Ex>q9v@<=vC-?c(m~qXwp$KlJx^vxJG8T4zB-%YBZ6tp{wQ(aP
zp7qecp&XADcZFOVdOqzDKPf3wDm7bY+m`+o6%3Y6`Q5E!4mFcQw+F@xHcNm4#QAuC
zpm(v^Y+>or$(3&B)O~)4NNC+GN|TO&(gaYBPe=WqSSVjGMeAZ<D2%nA95a*vN~dfU
zKM$I3E%kE7zely-Z3)hW&<+THvIu}@91Bhd(RmDuP&%HB=1&{clcS7;8jag&`*dtV
zHZ(;=A5VvE>~jv0GfkPuD8Z6M2UMkZH4Zbs%T<|=VX5Zz*mS@uf+(M_A7e5P&|!%t
zFpIea8(~bpV2Uc#q$8npfj><c0ErsS=~s|?Fa9TWq{bi$n@d_MK>!WJH-FcC7K$J;
zG<z-*86AK09yh4h3uktqNAdR!;`%Hc9-5`BwHNh6KP|V$6<e}5LJx(5j4CM7yqQ`Y
zrmec{`V~PXCr<^vN#U!6cS^E!A8=w1!xBZ~)^b!mB0e!g4^Iz<W@q++Y5xZ<TD3Hx
z3pN6W^23(4SL*_^MK&HlPK=#s$9Ww&xTTY~^A$ywe!{api@KtN_LmNysV`m}F|exW
zjv2&OYTf(LRxHfN?|z+{Z4M*crv)YUestYTnJLZ+nV3{jZpFzuLIZY?4{yam4yiym
z=tsCv*!aYJp(%<u!Fi!xnxS;L8<pqYs)d3Q1W8ns20aSe>c;gXz_L0?${h+(_tRz5
z_Xmn5+ld)XO=x);sZ)}cC#t3SO|+-rWenItX~&Q)x;zMLCKVoAsIzsXi2g=lN5w;R
z*7-8ojnze#3q`~Nc2A2BY?*Ua;mr=$=H&qZ&R_5Z6w@eFh##Y&D)D2Zjc_^hfqUW}
z)<e6|qOLw7Ex<DI%p{BrWO|Rmz{_O$3P_pNPHz}|_e4@3q{8puI$P7<c8_b@Lm^g6
z78^Mg4_{Z7b0R|4{bxhamwST^1e;3_8XTOUgvpBTEz1}&{cb$N_^p(pps@2EwV~Cr
z0|MfZkxoV&e+C7zr$WE**)2ZOz->)rv@rG2jJp~K8M_v5WNL*J8QXK&nvF?_4k4xQ
zuHsHYevPJBUch0EG}e86Y6_qCxs7QYKwH&4jad7b0Pp4K5g#WIS27rp^+n=w#z|e#
zcqYe`=+Ot>>Z*V~=M2bmZEm*s@p9&Wp4KmCmcx|JTL8b>WBto49`79%Kl5%{^8yP)
zhk<N1@XqoRVe3So!bA>YZTzMrLAHh`epB<7txo04u)0Qk$Q@r57gB;QUvLylk%uN!
z`D9wXY9%N5T;j*$<>4@Yr^6irayRM_-4*JP*~1eV2&Q_3UW{-Eh^EyT4~+A-*Uif&
zcb?rs9Cmd3)&AjOiJ02|lKKh)TF}D&msbib9supoMGG5UKHDnA(PIcdy$C<Kn7NCX
zvSi?4E1<Zg*e_sH7C8iiWFJ4Nz!f-3H(6e3FHDt3L`=~S<$+#KX^YpFr!@yMBsM(x
zip3qyFU0f&n;DBVjxMpt`=Ir|i1~A=C{=n8G!<hp=g*ysQT?Xe^*`YDw-Cf>P3(1Q
zPJMmsHRfwH4OrF?IgLYr(u`b<>i2|#b;CeZBi3#p%9hBy%K6;ca{k9wV?(%f3f;SB
z-v+@}8gX853zzc59LH3ZHPrFeT6j0J6FK1y<U|^(Pd6WiV6@TMDcKSm&}%Kp;t~8o
zx&u`2|AHrg&RWM;IfIMpzeNm%7fumINy3~#aMj-ly@>|(8QcnkI+t-n-MoU#*)Ujq
zNWXi=_}yKVTEvrvp|MWPK1g0|iFsMX*vIMDkS_+w4ka-Qt*{FIXAA9b^Nw3J?IV-`
z)LXbO&<4p0XkBK840gZ+4vJyKryY_aY9KgvZKr8b;q8mgVnp2TxwbmCEK33nTcjqJ
zhA(;&g0nck5(x?L(@tp|ePX5ZQhn9bj&A^7Ex(*z5jm~dxEJ8u?4OHa>+q5WyIvE6
z;m)KgXDeIEs`kmxO<T?<coqjCqTb!-Z*ub^Ae#|0+*>`LO|9+@(HHdL>s<6*mQ17+
zs=TYJ7A2r#c~z#YWC!pp(1r3^+xYvfMXx$qnep=UnUoC4NgjR0rY5g_ST}!5&m=lN
zz+*;MH#m~Xc??&dYY+K8xC$E=nwK*_17utDFPSY8uP}~=P6Bns*>z=I@8;D3(_|QC
z(tA!s$8J<yh>X-Y9XJ1OUszX)*iFZBb8V#VVt!{5X^J=_=4O3s#$w~;<ZAAxTRq7K
z#eG~fv)zbSy4!93B85k4B`(YAx}~RL=i9@(r7Ge8jC|HQPPo#CselJO)fA(rIQ6aY
z{*g?HE%9c;5e-7HC-+->rttjS=NLmm*NMVeP3NI=3(B)z_^X-ah&T*q?Dgs!Jj^}I
zHO=QiW!WlsvFN0MNR)X7-WM(ITz&_W$#@ScQ)XJ-HZK-7J~v<Lzh&R2E5B^C(J$?B
zC2mCf@WJ`r64^S)W(=j%E&WMsKcxe!2$0j-g5t-dPn4+ALw&bs(#yc}?r=THD!1TM
zXr#O+SxpQJOj+-7`o>rQ(`f(OKL7IacZ!>FQdKzuAe>X3KIK_CqJK3r$0)Cv0oKh!
zXIUqUF9L2eV31nY&3&71kGa;n+n~7z!OgV<=+!8)x!QXwRmYZp!tG1XwSie@8<0^U
zXg%b;pg@xDFt8c0Xf2^}5}7nB%Gy=BM1zlL?$?f6(Pd2pj~=r%3wfYTkB-!^kt*YS
zVk}hKG2^psr88ZYhPu4QHrD<NX%Z0cb(;>mD??(+8)^$;cL59$1n(?2`5uR&I#msm
zHN!XNW=ml74+HLjgoD@(IN@NUF53BRW3t#eZM(_cHgZ3zzb!-R2HP2Ck^+0m&|f`H
znB`|Yw0pd1y~Iw<NTf4>m5t@0-Hmw!ire0Ef0%OuT0x-e9kR;m13p8Ecc)fURu7X@
zz0#*{*^_Ysn<Md?<T~#2ML%2fkOxbHE_@W8<ncj54Cl=05`=phZLTZ81sC&BQ+#DA
z2wB=AZSioL!Xb62QZ;etR4KC5Fz$P9Q8SAX<fgMC7c}jCm_x0|7Jik-Y1eVX*;{v6
z`2xRyFYEL8F}qXrjZB}S;T4F}i=o?lBMRHe3W4a6KsN=Q<d*@D_59x}?+77oD|Y_m
z!zXvPtrW`jd1T3rnFIFAhFH-!=dNDLM$wFO(0Z^St*Fb#fAwKU-l@DcSS4%u8d*os
zg}3Kf%}DQxjTvW1{h4A@<|uh8hRmu5E^?#}`IIg%ear#EdjPdVXXD$lXHxD;40&~J
zz@lN4f1(AiPj%7*@}2k!KLj@aTvfE>XPg3Ye5yhLzdp(5ch~`QL>-l8c@#IE{ae-0
zpuiOirx*F-m>4J6HmJpH(=T?ni*5dN9BR^6F1o$Hl(asA4QivmY=m20TP5Rckt_ev
z6JGdKtgojxKq6J{?V2g9Q&Hr%)vaxGrepU^2gx@I8YZ;H67Npx;XIN!H%bqeb^zwv
z=}2ObOnbD-18nU;Q0*1hG~&Tg!5CNv^XbJgW;{*QaYXiVA7uP^82enBl`&&~B~5av
zONaDEo8Vqjpvi}kO9fqXCn3Eu|2b;%b1x@635n}Y&Jn-QlvMi8Q>9moW7)DOquAW`
z?`*u}W=xNHIAT5t0STwPH|NTUK}8MrPJuiNky}k31$<NJVj!sm=BfI=dMbV*ucG2u
zEPZ9v?x{vO!m0enBPXMQ34;Zk$<5XzHr9b>yZ*(_p;MycP!cPEIJmYwLTy&xvj3G(
zgfqB<Fgb2NXGFI$X>V+sw?m8Z-S?vqo96_ijwADLN4rREYr!1(>Sr1-2dGEc_-cw9
zlv_*uUB7$|O8+dk(E*Mi7pHtcZGxl{C2ZHot4aRi`i9#F>UuY30LpK%Ee$V5!-6%{
zO_w&pv3Doyb=CvPvVe2M)%Qzii_ITgTwaIIt+Z6Us4=P08nqy_VJK4xwi@YE39K2Z
z)z7+2dP0!Uy-$!rlMo4hS(0CP>EzEbakt^@hCYzzmvi6Yx~_W3cqC?8<bIb$rUA2w
z&_xJ=QvWN0xUMOw<rS{n##6VOgXBqnIdK`j#y4Q<pCS(whyTDiX&zQIcg7sFkKwV$
zp*JKU(sf$BCmjFU<u(1z(O99egG?&w&=Se+OI+Ix8~A=<jGsamrXTysjQ6nF$Nk@{
zTciMtI;Q8^DH^qKdwz~eCzJlVAZvD%@rB@{v<&GR@liqC(Oud|UbLVYt&Mr*(88L1
zr__y!Hh&bJ7i~!=HpFkNyoz`98M6U)<Cr|w8a+m6MV8DYUQwKCBO(J(X_})}wOD`o
z7zo15j=ZnQ_aY+%ve^QXpv$ulK#48QR@&AreP?dx_3(Rnpa6P6Jy`3z*@a(ewG^U<
z@MJEkS%C>Gz(!=MKLneaIrVr0{!dMI4^f}b|3hQPpNH>bPA?xYaC1MBdl385Q*qkc
z)7)vmJH(v+Q`Y6a>Bv8dooD<Ha~jO`dOs?cS6+fUGH|L-k3euWo6SN}H|A7c^ZkT<
zq^5yBJ+Ji1w*5%!nfC6lZyWzc-OwBb*M|F#wsj#(*oho<lE9{0;$|EpJlXfn2vBo>
z^20O#=40<4o|QAwb181yN0eU-tG@srYeK3lpEju9`*;7(1NMLS8)nY_BX&&7iTTrs
zyF;_l_3?{-)0-#*E$si$E)45KVIz?yso59O&X|QY&E=RMbXInVC{$$oYj_>nvC><%
zA)kZI)g1@|;g-y^%}dSe%qjjOR19sMws>dsP~C|<*R0Wk^vMJ%Qac8tIjUFd;a}(f
zi5i!&s6N{4JJWT%-0~QNNuVBuFl|jy--GT|g-D}~m~HvapY(TnUEWUXs&O--+SCpo
zHK*^)I(gFRt^Q4j>r<6in6ST1Zo$%~{rA$Y4g2q>o$Mz4oaJuT`#ztcVZYE78WXIQ
zcJ$Q2^2m$$H=w*PxYF$V+3GZU(1|X1lGOhL71OicgQ2d^jkgFa<Iks!D%XKTuLevJ
zC}c;dlRqI6Qxrb!sW|n;hIGOZiMn6a|GoUW{ztX%Pp9)<#Mv(^=DsBTl%-xd>~5ZS
zc(CX1{)^E@sgD%~b|8Pf`(EF%)#QO9+p#}sAnnX4y}O^OXBT|Me4+e7_JeHgAU)iG
z|GPO<uYGheq8QyDGk7bST;V@KjjB;;#fX*^b6ZdNeVY63iVB;#?IB=yuk8?(m%}I9
ze1GJ)x7Df*&i-w32X($UeWqC74fW`9^24(Wg&yL?VfN+hQc9RjYSP7ZEujVH)oDTt
zsV&+FvAAc-@vG%XK={87KK!WmpNz}S{l$@Q)!)vBH){<(&Fdcie6$%%`YZY2N2#qv
zTu`L|c!ajb)2^)cQH`e^CKmrH6m_fpm9V_5_H2OmQ^~}MZwoO0e)a#~{$EAl#RN~e
bZcUy;BE59+j(xcW!+HCQXKT+~{m=gbfU1`1

literal 0
HcmV?d00001

diff --git a/docs/logo/BVRLogoV03_shorttext.png b/docs/logo/BVRLogoV03_shorttext.png
new file mode 100644
index 0000000000000000000000000000000000000000..491a6ecb1d38aa38442e05c725968bcec6d911b7
GIT binary patch
literal 81189
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

literal 0
HcmV?d00001

diff --git a/examples/model-comparison/example_model_comparison.py b/examples/model-comparison/example_model_comparison.py
index d678898c1..d55aa786a 100644
--- a/examples/model-comparison/example_model_comparison.py
+++ b/examples/model-comparison/example_model_comparison.py
@@ -22,7 +22,7 @@ import scipy.io as io
 import pandas as pd
 import joblib
 import sys
-sys.path.append("../../src/bayesvalidrox/")
+#sys.path.append("../../src/bayesvalidrox/")
 sys.path.append("../../src/")
 
 from bayesvalidrox.pylink.pylink import PyLinkForwardModel
diff --git a/examples/only-model/L2_model.py b/examples/only-model/L2_model.py
new file mode 100644
index 000000000..6b28c8181
--- /dev/null
+++ b/examples/only-model/L2_model.py
@@ -0,0 +1,57 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""
+This is a simple linear model.
+
+The code for this numerical experiments is available at
+https://github.com/MichaelSinsbeck/paper_sequential-design-model-selection.
+
+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 Oct 8 2021
+
+"""
+import numpy as np
+
+
+def L2_model(xx):
+    """
+    Linear model y = a*x+b
+
+    Models adapted from Anneli Guthke's paper:
+        ch€oniger, A., T. W€ohling, L. Samaniego,and W. Nowak (2014), Model
+        selection on solid ground: Rigorous comparison ofnine ways to evaluate
+        Bayesian modelevidence,Water Resour. Res.,50,9484–9513,
+        doi:10.1002/2014WR016062
+
+    Parameters
+    ----------
+    xx : array
+        Parameters a and b.
+
+    Returns
+    -------
+    2D-array
+        The first row contains the measurement locations.
+        The second row contains the model outputs.
+
+    """
+    n_output = 15
+    meas_loc = np.linspace(0.25, 4.75, n_output)
+
+    # L2_model
+    L2_model = xx[:, 0] * meas_loc + xx[:, 1]
+
+    # Output
+    output = {
+        'x_values': meas_loc,
+        'Z': L2_model
+        }
+
+    return output
diff --git a/examples/only-model/NL2_model.py b/examples/only-model/NL2_model.py
new file mode 100644
index 000000000..5fd4820e7
--- /dev/null
+++ b/examples/only-model/NL2_model.py
@@ -0,0 +1,57 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""
+This is a nonlinear cosine model.
+
+The code for this numerical experiments is available at
+https://github.com/MichaelSinsbeck/paper_sequential-design-model-selection.
+
+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 Oct 8 2021
+
+"""
+import numpy as np
+
+
+def NL2_model(xx):
+    """
+    Nonlinear model y = exp(a*x) + b
+
+    Models adapted from Anneli Guthke's paper:
+        ch€oniger, A., T. W€ohling, L. Samaniego,and W. Nowak (2014), Model
+        selection on solid ground: Rigorous comparison ofnine ways to evaluate
+        Bayesian modelevidence,Water Resour. Res.,50,9484–9513,
+        doi:10.1002/2014WR016062
+
+    Parameters
+    ----------
+    xx : array
+        Parameters a and b.
+
+    Returns
+    -------
+    2D-array
+        The first row contains the measurement locations.
+        The second row contains the model outputs.
+
+    """
+    n_output = 15
+    meas_loc = np.linspace(0.25, 4.75, n_output)
+
+    # NL2_model
+    NL2_model = np.exp(xx[:, 0] * meas_loc) + xx[:, 1]
+
+    # Output
+    output = {
+        'x_values': meas_loc,
+        'Z': NL2_model
+        }
+
+    return output
diff --git a/examples/only-model/NL4_model.py b/examples/only-model/NL4_model.py
new file mode 100644
index 000000000..5ca495306
--- /dev/null
+++ b/examples/only-model/NL4_model.py
@@ -0,0 +1,57 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""
+This is a nonlinear cosine model.
+
+The code for this numerical experiments is available at
+https://github.com/MichaelSinsbeck/paper_sequential-design-model-selection.
+
+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 Oct 8 2021
+
+"""
+import numpy as np
+
+
+def NL4_model(xx):
+    """
+    Nonlinear model y = a*cos(b*x+c)+d
+
+    Models adapted from Anneli Guthke's paper:
+        ch€oniger, A., T. W€ohling, L. Samaniego,and W. Nowak (2014), Model
+        selection on solid ground: Rigorous comparison ofnine ways to evaluate
+        Bayesian modelevidence,Water Resour. Res.,50,9484–9513,
+        doi:10.1002/2014WR016062
+
+    Parameters
+    ----------
+    xx : array
+        Parameters a and b.
+
+    Returns
+    -------
+    2D-array
+        The first row contains the measurement locations.
+        The second row contains the model outputs.
+
+    """
+    n_output = 15
+    meas_loc = np.linspace(0.25, 4.75, n_output)
+
+    # NL4_model
+    NL4_model = xx[:, 0] * np.cos(xx[:, 1] * meas_loc + xx[:, 2]) + xx[:, 3]
+
+    # Output
+    output = {
+        'x_values': meas_loc,
+        'Z': NL4_model
+        }
+
+    return output
diff --git a/examples/only-model/bayesvalidrox/__init__.py b/examples/only-model/bayesvalidrox/__init__.py
deleted file mode 100644
index 55c146874..000000000
--- a/examples/only-model/bayesvalidrox/__init__.py
+++ /dev/null
@@ -1,23 +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.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",
-    "PostProcessing",
-    "BayesInference",
-    "BayesModelComparison"
-    ]
diff --git a/examples/only-model/bayesvalidrox/__pycache__/__init__.cpython-311.pyc b/examples/only-model/bayesvalidrox/__pycache__/__init__.cpython-311.pyc
deleted file mode 100644
index 278aab3ea132ca1f0dbb5897698da7ba6551a21c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 974
zcmZuvO=}ZD7@p17CfOvd#V_zs^dLm&(u0DiDA=kkSP6)iWnq}^j_J_(SY|f05fA+r
z-o2Eb{40A5146-*w?J<_IWskpU7dY-=6RoecjkSc<h0-K0<)z51^=i4@Y5!XWpcMJ
zq}jfL6ht8P(i-(xEvk8z*J+(KqK4xQ+GMS$<#?0&tR1x-Z_y6xMqS5!8n9l}bG%La
zY!D3`@6Z*t8m)R@4ASm5FS?cn@4>M5xw#o`hL3)E=Ki6l*GAK~gde^Z@)MHjo=7n@
zYG)7UXpyWelUIC9I5zK_yF8oZh73kR<s&H)tQ6s6tGq;0takZFEHO`P@pY%T)3yZ5
zkR(cQqX*kWB@$<dC(~g^2M``%sfgeZ%DU-Jwk%jHWy3<#f^VU1p=03Pa7_kg*Zpit
z%^2a;=04YV)kI1$MmdJe&ZWYt;Lg?es&dH8^jF_N>_&EX>s$X65^IBUjq3HxSOK%8
z7hxrLt?TuDYY!v~f5J-cX4Cg8>Ypk%227SFIuG=nYH|A4S7)F0Aw-lycm^(vS>O_G
zJ&8XkV|FYL#Q{A)NX6SCnJ~<A6~7_*&SXD!rye0nQYnsOe2iE|v5Ez!(+$^1r2?9v
zNDiU-4KCZyOvQxa=km6>&;HfacLVdf=XvLY8z;dz*eJ>|1CNVx%)pDH95e8sD8~#u
gEz0pfWv2k8n1P2yIp&RS(3*n<ocQ*UH%-sK0mp_fZ2$lO

diff --git a/examples/only-model/bayesvalidrox/bayes_inference/__init__.py b/examples/only-model/bayesvalidrox/bayes_inference/__init__.py
deleted file mode 100644
index df8d93568..000000000
--- a/examples/only-model/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/only-model/bayesvalidrox/bayes_inference/__pycache__/__init__.cpython-311.pyc b/examples/only-model/bayesvalidrox/bayes_inference/__pycache__/__init__.cpython-311.pyc
deleted file mode 100644
index cb05638998140eeacbfda327b1cbbcff8e50b2e7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 379
zcmZ9Hy-ve05XbG<NuX6>f=57#_;>(>IuImaC<|hVELmw{XoMYCc7hs-fw!o50>s;N
ztg<q(Me5dxOGG8;`E>r<_q+4?V=(9;Fyp_9ci6w$!^WInu{r`VM=46NL<&b3x7v}8
zA`t;iQu^dXG<EM$;C*9&16=Q2#+9(Q`J*r*PXyf1Q8)?>fwZ9z?gF>oAGZ+CHdL3b
zsY+DRF}2TmEG6fkXayx`t;2KnV1=>FJnM;^#Ia>pIw_UN3(Kyv;-(z4uIWoGv()Gr
z6SG)NrLaurvN}~d6>^K%8iH{cC@VNWn^x<c3#cfi7@9u3-~P=GAv6SI+;|9|EYR^^
ZU!udse+SAvSkhkOlD_xmx6AB8iyyE8Yd!z~

diff --git a/examples/only-model/bayesvalidrox/bayes_inference/__pycache__/bayes_inference.cpython-311.pyc b/examples/only-model/bayesvalidrox/bayes_inference/__pycache__/bayes_inference.cpython-311.pyc
deleted file mode 100644
index 7f5bbe1146a0ace3a1e790b0274a9167756c5c79..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 61058
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
P<tOa?rw3eRJ@|hBrAMNd

diff --git a/examples/only-model/bayesvalidrox/bayes_inference/__pycache__/bayes_model_comparison.cpython-311.pyc b/examples/only-model/bayesvalidrox/bayes_inference/__pycache__/bayes_model_comparison.cpython-311.pyc
deleted file mode 100644
index 919edf1404e4ac63d005a49146a39ded9defe066..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 28956
zcmdUYdvqJuncn~)K!6<Z36cPx;6oH4K17OoM-Nk?-V!BSiW6(?g+LBSfdT<~0O~=5
zT{Y`HhFta-a+R7%<OWF{hmM(s*?Ldeo}N?fHrdVgbX$O(mguzVs%MXz)nBFSr0aFt
z)Be6Yz+eWXY&l6!Plv;AUibao``zz#FTQWLmvA`5;+Vfl;JCk_hul$|z4^G&z;SPJ
z0(Y4c41zIexNKxs(`6H`reM*O`Lfxde6w6GX5Xw+w#&BcyOOEW%Y63UK2>(P9QQ?n
zIao1OdAZWS`O7D(a#<#;b9dUS-!$pSJtu2&ciO8iM6LEq?%rSbE^6^U{*^;8xN^6g
zU=fPnHQ_7%l|vuaz!|v{oM3&G6KwAq5f1;#aoH&tFLIue*<B?^MZYiV7u?~H`=T%E
z9-5hO@7U=c*uB4h=l=fP?j8LD`$|fl@y$f9hQ<Bvai16vN*+@xBOZfnjzoRY$YUxU
zp308+ZuujpLgRkX9~$$|n)>>-&(@C8%j>>iKoG+>`=+LYk?5_Ue@rQe0(0g17^nos
z{M=;&um)^hHrY7(6KaIwR}Ghos4kbyLak7OCky*hC-As07VP+973zdCJlTYDJe3F)
zfTe;{sKPs5a0w1v?Sct4ua_OHu;;>pKX^1eHH~^j!Xe-9peQA797FE0pf3_}N5k%E
zzc?Nir`#+;z!!24g?zzVkwB!cq(liDjf#QMnW#U)9(&b;Jx<O<qJi;%Z!{1LL~ptG
zyGO&}V2?XI9StDEAPYk|e&wn^detv#bHuZ|Ai6J?xBC)43jT55Ofc#WC^=IyS1yS&
z{wsYfS(H3FBaZq7ui%UNkhM<~eYf1<ad+gZZ`$wf3VBhOXe287roDlv80m3`yy4M^
zXOrT6IfAkwzd#6`MNQaE3HKG0#eHQY9Lkj;mxWK9Mgan$s9NEXnW<5viPETra0jA(
z(MJulG0lPg{{C#eC{u4J9EkY6LH~7s5DAY5!@hjdLvHrft$bB*NG;)}7G-S_@kcji
z(cjlUkj;Xc-5c^w`F)Wm7MniKi2f;mC>n8(g+q~mfSxb7(OcZt1Cbf@`B_#Osv~k%
zYhHj;(H{X4sXGw@FO59@OAP3rzvB1@C;s#7tA`)c=orfpH5xGVf`<IZmjT}5Vul#!
z#hr4*jCfMXMa+aJ3eS#M5uQ|H5i{edNd0EPlR5V!a2L7v3?m+kT&6FqT&Cilbt<`3
zgJ8L$5HoVArXgjke`+S^i-tu{v0N1K2ggM_G8D@QloO~RP)UGDYlJFIO@iaoxug4E
zq&^sVQM?wu8ocWBMP3{ZkIk^wfAK^hdU9s;MIEhq(SOqia^sJ@7!Cz*^-j@HF9^ZH
zdjmO&rF`|WklrzsD)dd?lC53@3q-x%*{011M_=x950!flz-?~b%C+>yizI79rnyJC
zHgwX}nQ`~iwJDQ(cDmz5^Y%FYK1Nh-OvMo%2qz5N-^2~D%_VW&c%T;;^+f(f;C;?C
zSA;%LBpB`+=Ya1?wP%Q1J}V``xMb2#Ei5(5Tye}2GYdrrP=Hu5?#%4Y43cW`T|+U|
zK7KLk6EQ4kz(sF_dofW=_}#2!F;sH&Rv}Y_Uj)bZQ~TWtG0p~!xMw1P(1b#IG5L(4
z?_iuz1Uj;jHpaRh@I8@mDx-{|U+{^(DL*Jqo_eaJyI0Lb=?y|)EDAzE7xfFJF~nXG
zB^Pgjx{U>A1S&998%g_EWKD@d^&{S=N^2r;-5+A<TwxtfomQ`8r;Z%Gpi<CrOzG|W
z^Yv5SyWNKl9iljqJh68lbibmjMlNWZN{ZX|yJ;rr**sXt8&Sp<f)Qcve?qw7Kx9nx
zPy0e+w-8eEbROk-LYy3t`0Nr)2g6bCbQn~68Z<W>cGJSn<y+)AKW2f@26U^@!ZXq7
zna{^FXnoWNa*#!Icy!V~hQ96#2@2wg(ztK<0~1&AmSzJj@u#NFkATfOI7>)RcJWH(
zIdZu27-uV3*Kp?waOC)G#W`K(M~+|e7#Ni;410R0Fzo3ek5MjDisn~{V1z~WSViJ*
z<&ykRkZo#DmhB1^rC#kF9hYmAP}%CU&Q7l_O55r}Px>|uJ?V>BkzcN!A~Df&9r_U%
z)eXdXwr5j%{DjbZkyPYw0f0O|W8nICu5CZEy8TFouU)WxWHR=b{elBXTYKX6R9(+{
z3D??}aqn6;o2tszIe@rjo#*%pskC{Wv)B%22KTHD9$y_io~fu`IJGRSo4B1P3?FgE
zomEI^XH}Z-kDp65^kXX6wkLi(RlOz6cV;|?a<`AlYvOj182{sA>P(C$sy?InzX0`r
zi;JpM8&ua2Rp)b#(^LFNc~qUjIS4j-ao}r)3B>*`aSQ7F615?x>=830HL-JVkq2(y
zS0D9h3Pz1MV#?oR)+w5_<RT@t+)M6dLAnM`8)K4MfE_5UT1L!YOzfi%x2<?8Rl;DN
zGl#0QUnlw87i|e?222vmvEjh%X^NSb%=$TR&Jy4-;~A2~p=>zx?J~^0^vgMGv?U)*
zu;|;$!0EmgCyCqHaKx<oSo$ZV(VmZjQd{$Ft`9k9iy5B=pD4G$=Jt}g(pX8%rV(nN
zqSn_raX3~YSg)}@Dfa4mYUz`Es_2Yv)zrg=oJ)0eK@ZJ~wFYkf;>PfLTp^4fyot@L
z_7Gsy=2Zpom~C?rT#rTYG*;qhbeP(J$NB#rRYy?a_?Y8k#ZTGpy{z5sb7j%qd|OP`
z<?dr;lg`|Il=#Z*F{z?_sX(lc@i9A<e!dU=ygnCRdqs%N`gwWGB;LUIQEN3<5vxcx
zXk+H?1*1@+r#k49+VVH%LdMEt<(hG*p$^DN9n-TI!-8q4RFBQMN{IDb^h>$4K=&$Q
zmHK>#3n<7OC_u6~A0vMktJ04R0~b1ju$r-|30p4M_4$A@aY=VRME)+u3uT32N%f#B
zx29EN<@(T@)Sx(4HBPFT3f~DJLuE`ZKo{XxxM@thU^kg&A`k*w9f}4pFDl>koMKjm
zK@5oBH+EG`j7`vt$(Y`l?6?@7a$iwr_bW_F4)s7XcO$bbORpwH+`<fWKvbeUUw$g;
z_5~whw=xNXF#;15glx?6jQFl+ODhC?6X3w1b@2C1^!4btd^HE+^Lj|S9)~CZCDoJ<
z%9fjm5*^D5%)}@Bf6vP2n4JQ)?}^$X3jZ6@7*SGJjssz&vQgXp^H}9P)AzYz(Tza#
zs(Ygpqj1gnUbB&J{M?ia7;&XzXE{$zU1o<ah27!|IuB!x6&9CzQ;+*rc*Y&_Luo@w
zB2xJIv;rOUHY`e{PoxP>BpwZVPo}Jxb>xM`{M~Fl8-t`KRMiTk{&{7tuS71@2tcGg
z6{5GM{c`E~QRp?UvqAKpK`!#$gwUkn_&Cay81RpYq`$=lK#yLsvbn=BXC%4*?-=K8
z(ARKc7XrLzl8t@+vgw-tmRy`|iwF^Rpqa7KpOzdTUY%Ou(CnVgxo0M!=Y)X11HteZ
z`p2QZe8fLNf{}gzFw&f%?Sw%Ke|%thaHTlep1h%btK2hgSGMbrEnBY%elLymU!~rx
z)(Y@YskC(!X=eJBEBSBql|0ERnS=UD=H5~zPa0SyJ*{#{0O|{((PMtOh#FnC9lJT^
zXB1p6RoWl~9YjPf3I-xk*$n;XR7AF(qkejRbW*N>&?AsaHrGL9Gt<z@7DYFi*PTHZ
zPdZ(>V!|IH9jc$H=b+}4i_jAyvUysB@>RBwDjOt}IDJxTF{#Zf7bBn#YHZog^mRFD
zQ?AI$QEFe7jiG7T<i9yB7YD-=-XrIZ$tA&XXhI0jj0TZA`bkzqQ@WmPK?6Vyjp9v1
z|1Fzl1JiO96W;YXDev^%qLPJED2<~0@l-QWR3sKiq~X8>RM~b8#b=GihNf(#w1=T3
zmP_(<N;b39WgF}Aq<|2+sTIsHPR#gaE9&AMW;kNuMt~RD%Ax}kVjpF;lfqXLs=O?>
zuP8FUT*YE|v!jhQYJ^5ChFsynhM-7{-E2E62utW_UL~ebr`*_^Lcqvxqf6iBez}{2
zl)3GDLb|+LD(_zBjJ915s~XVbns$D~8LD^vf&d=vyC82idKNA(9AxUoUs|{t*Fyc8
z%d_h8q+Q*Tt2^!JksLjX&q|K%%Ld7@BW}xBD<y0Fnzeh?+MTxcO4i<#wKr4SBGq<D
zwS7=emLgFm`KC%cGxg0<{kHg-_?bs^*DKWzE)PldyW?lpEu6!-R^7E)-9<um+4334
z#10S2=NK}efPir;QmS>vOENVrZ+YMJrfWK-n$C5u+E&j%{MbXjGSPYG-2A!tIozhI
zwy#y~Uai`_Jd>_EC{-Oy^M@q<P>MhFp|dkNySzo(x;O3ICpq`UPa*r3u5X9G8BRBE
zmzuY)b7uP<2JV(5Oo=aNs%sZKQhm=_{lIGdK)QYq1y5DenW?K^m|CstPSth)LCMOl
zpLV4CPe}bI@c7W#lC&)jE}NJAAMk1CLCJYA#m*0NAJWd<l5=;;x%(4j-_;*KCGj1Z
z&Yg5^f8_S8x%aQS_ov+lB=>>%>BLN$Z_-pSeh%nyIPdPhw>xglwD+#H53aTkrrUQ(
z?SxC)1tL0tX}%?XDsl5+TgN+{i%!Y2@26EiX-c)7Pq&?y+Rn#MCSE{@6yJg(xSH0S
zy{pdN4DU#Umb-xfS051II*j&r9gf=xk!Wg%?W7@x$P8b%#y79>%?mFld!e<E`2G~%
zkCL^vzhli*G%d_YEjyM6q?TRF!UxyVEki#uteXt2XQ1mKh=c)CeA9YSelB>}wk3Hj
zH8`AZJ0`UqLvYLz2o8wgfGNHig|%0%@$IX8d#Yo1n%^Vwds6Jwd`X^LKAh%{O8n6j
ze>D5PZIy3J?p?f`=J!hc-W0!g-9mI1O$A693sUFq6??kvxYTx>vOdYOKFP8^na#SQ
zKGo2hDyNRl2sWGEb$S@mBG7d5@jB+<*X*yAy;lAfH^I#n>Ev8PQaf8CxN_(vOT7f5
zGvjJ>D9})tCsqAUULKny9)KNlu+vPcdYaq4kWExQOD+sub?K=37f8sk2<5daOGWP@
z<@eRpwKkxbF;c9}>moRh*UO;|d5YRXt1w9%%Ijs!>Yz${Vsp%#R3&s>c}>v1Am#Vf
z)ES3UJZFs+-zmRSMslrIZj9_h4ORV5Qq}k9(-bUA#d?_wdXXpTfXp$QV1-N#jOTR^
z(Eq6U&tHo+<<pOu^yMAq5{8#-uiLe4cE_#?>s*pdTpNy!^7LFuv^5`WlFVW3(7jb%
z51=_InWVXf9a?RdU?`NT_2q@W=V@{IS`L@GGN`&07_Q3V<>MyE?ADm2P^#7Ex_K*T
z>!1%m$LsP`-6&$Ey7!;gN_>p})mmxXSWuqQ`FN}-xv8^8tW+P?fF3cgFQ?jOu_Arg
zq^kGH;gYWC9R}zlbUkwO78LZo=85@eT0zq{3&sevx6nb9`SxQ7s}kXfEMuvt8dNi|
zYEREuI&^Zp8w}wX8GV_~0u~ZAIWm#uOz~>e0`WJ;hiYWG{|A!(6C5^(v-`gxg6B9!
zjbUAJLD<AAgTj8MA4O!Nmjk&ts95+sG2a&qdKsfmsLDE!sF5l6qgnr<94a+w>ttp)
z3gjI&ApBZGSqq|U5z#HeQ+QX-UcsyezYF*q39{{i7zm3OVBmvksyG{gaqW-)Hx6+N
zhREh3BN=+WZlcK=!gB4L;ZD&VtpZZxMRi9r{oXas*IiV^XeLm4%;GjAB%5Hok_`bx
zUMPYlArhe}*zLZ3`*u#ICaFM?srPNl*B8oV8mU^1T8qgq(utHmxy_{<2b6PhFmY+2
z{oV@;k$b<L90IGXeo?p<nod1VaThM)ZUW?fAY0BeTPEa1k}sK@D7SkzE1B1u9m|SC
z2d|MfBZ@}`O*V3wA94~QMlouWBs)Fqj|3({8ksYP(^9Vzn&ep73<OX3<zo1`kccV{
zQ*uR6;{}0x|1`{cA}M-hGjmUpE!QD2k6n{3zUgUy2%P}#NudZ#y?#%HM*6cOiX!dV
zb)8hUQ5l(31uNwYym**^ZNBBb>H`wJ;uXrva*Negyg&~*!zQ}8C{VH_7m9v>2-#?;
zo2$n&&pe}uaKw<zZrQ9s`wCJ0?<u8kgO+~s2@t#9$GIBf_J<DV=gMS`Cdtt$IeI0>
zVB7}QSCzloI@j8Et+wsTWJ3%tzwn?m<L;2iSjn~Th6%EL4@{8ld*Z_qgn|;T0v1by
zZEL2wPO9!q@tsJmqAFgLY3^EU?ptl{OE>pR&Hd|KnXQe1J0tO<30J1PdVUU)roAoG
z(6QDqxY{td@>{8f!F0nZso~UJYr>p(In&shC`w$sYeU-i4z6=0_O?g$?T`xB>JP2f
zAIdmdGM#-WRm0(rI8#IIF9;-xA%u{e(zWXBT6AR^+ZP*1PJy6kbRh^p!i*qIZA#Lg
zd{|kVcqLugE>*U#bG)tlBLeZEOpQyb=~}FmYP#2I23Kn!hAxZgn*CDE{`m2Sb*_6i
z-WKoQTC82J{h)Eh_d&~pms2gL(k-VXz`D~?-RbzrM{PZ8Z97)mcBI>ON^Lt~*R|I%
zaJLL1;|mX)TJC=}lN*cb&|CK4HtjedISzbeGBh88NYi}i&kr5@Cle3Ge-ca|x+opG
zhzeCUeAv)*e_zJY_|Q>%@5I|j?w?9dE^m`|9C<Jx?Kt+cp;Y5Yx^YATbexwQ=V58?
ztVJ_5)}fgi>k`(46}Yq4ukr3x-ko%&`E3%vEyZuc4Wu(y!+mSADec@YIk&Gl_pLhj
zt+cK@`@oQP9+8|!)|{tTou@N=+1HKttP4%)imeizy^B7nq94|77g@VqWlSKfXi8Zd
z89f<Og$wjrVz8M2ltJ%hu4Wo)If;+T!Ne9l<4&$ZX016oFU-UW82xfC&m`v^l(Zre
z46B+_<%J;#Gu90Znhk=18d?{RYQhd}2t6C7Eepf}1C8=1k(%rw7{T_VE%Ls!5Op4c
zWmj|LI8FI1vEmKoGicL`YJ>tfaG?#~SKCqlgnVw#mFn`z8_CUrNihAMF;+UR!H+&Z
z43oTI$Qo*mLJ>X3ie^#nIlC@ZRak?2*Cwe(Rbde|RYkd^DvIS=imv2SjkZ>6q{XS8
zsg2pGB>I+(!Am<=E5gJ4-;5bP7qglW`ugiJ8!KTc{-+oe=N_}KM9b)Ac_LV=vJSJ%
zfRSUza=x-|F?=He&Ay%y&YLqXfxjIOh><7-%({l<On72oA^?XTIPR#5UB#1DWvxz)
zyRVRkWZx*cPkV#m@YwY$@bguivfMuR4xv}^=DiUJ2Hm56x5#{(V9B7;s_7{6E8bFR
znf-0nFNR^`@J*2Su^YatV!*HUC3`vso3VTQVKNB`@Q@wG%z2!g>C}8_zSP(?3TlUG
z8D>LeW(IFd{Esf?S-i+P&AOGaZZ?Z+n9I*&T;Zq;b|qU()>670F63OJRT)H+wuW(?
z_@D26w0dsz!eI{&#)K5b5yq@2OpG}Y3Hd^@nc6fW8!m}qbW_<B^oO9J2h$Q2WRp)2
z#Fyx`B}A(Cpr=gnrYfSc$-K5H^3JsAWa4j8BrCdz!k5_<jepkRm<#}j8j&kQ-Y7ib
zG``4kNxtq-zemMW!cEx}AV38&Gd?^*&K)XK!)_Q`BbVvf!6zuG^?^Duz#}sNU~amg
z%v|85>Mc@r4-}g2u6N*0)fBfUu4fuMzBl^L)y13X&b?CS-qe=8QsX|U@$dtK)OaLi
zbv>-9yZ6<M-I=QIPVqgMpK57-sx6C`fLC#~-Y@yyk#|lmes$?`x?``@u{YJemsGwb
ziGe%zhqVn0Lkq8@YrCadD8_l)mlyyGP+fCx@4`!q$5V}i>FS+Q_0IV4!@9<|FD4t)
zO?^^RU%GC)R0ln=)n3Iw!t}7#c`uN(E>^O?ql>kYyFXn!Ak_{eOr$?<eRFSOZ>GK_
zaWvy>Sh$vUdJ^V`Ev@&jW0GHZmj05ah36$l2hI4W)*KzHj*jHBi-yI$ONUlkrEYKy
z2PMbB2j;Zn*hglQ8=hhSU~`_OzXem``MZ3A$E@Gh`A+Q*tCpP09UpY2J^P^YO?B;)
zTK7YTd_B!KLw)+F+=X^iW^D~s=1ASgX6-)UMDIS9r^Q;D4@HnVHzKZje3lARPhH{g
zWfXTqF`_MpnhspM)cH|62e8=`Ip@`Fn=3QnAX1<%(W_u5^9oL#YBsOvBo}C;p_{q&
zPsGEpxnL_AO{EnhY|I8`;l&Jk4ik~PYbY`^#VmOH-Au}GGa*&=_w<Q=xBq20|1+fq
zGYmyMd4c=s$ZO6P^+he<R6vDFX~@~<kxEv^obd`dZlsn<J+tO5P09+P^a0NzaRN*p
z_t+S16r=Ql38lY7chdxzm{$Z^1^Oriu4BD~LMLaYJQhW?`!WT~i+05%+M!a+{1zca
zw?eZN5$q(MpCE!2+996<QX{V+JnU$04phPO_Hfeq{g&^xq+54Ltvk|<gAzzY)lR8u
zXT11PsSEC&wr32FYMb5)zZuR{)ZMc$fNgds+mhG7@YfB3;jbI~^T9p8zjNi;<()r1
z@WBDF`*z1KA=Wh9w<Wj!aL3ZV<*z&#NOd1ecOR1goyR5T@woj_d85i|qdTgH%4%Q6
zP<hSpS{atE!M?AxG~@?w%*Z_Sb=}zjWrvPAQ-}0-4RfXm?hbrE=Zb`)S4oeq4%0$y
zErvl6(_}wCXNhW<y1X~1o+#wB^g2cs>jDJJ?>&(f1uOey7S9I8S(}H-&_-2_HrQ`f
z=L?3C)-b3s1oJGKPd|+HWa*9}X2}Z|F`MQd-hufip;)jA@IqWFc^9PQeU+TRtMGYU
z2~|6TP#Uvr?n^50g&t(z;@&P`?cp=0)&gv_>S+moGIZ4U@vj^O;Z$KkC@%~bvu^HB
z`kQLW!u)jQSGDg##ZqNq$XIbwwN~WnMc0_|Tbxi8vjA4VT_iY`YV?>asJq%D^!<<N
z*uRQip=!JZGc7~`88HgxkU^-0(4_4_wb~vOE2SQ!jjb0;&{IEry)4>I=_$vgs`-b_
z!!T|X>Rz?pF%*s>eH*}ru{{?b*jBwdVUtk1AT<3>tjO9ha<FW%K44gCco)R)eIkJD
zn6t<1ljQ%vj?Fza3)@K-qcIm(dlee><%Z{@J*lyH<--b1Li18fA-)iLQ~yiBy?N+K
z)dTZ0dPwV?GG&~jpS1lt{bc^X2o_B6?LHHRmpZ{epIxYz70n7A4VlP9Q$L#|AzN*_
zrsFqjw$QqfY{mdQX*T}6d7f5fY9{YbtIsnrEaJ_3pKQMb4>YSE9%xZ-_?k|&PJNHY
z;K%y`vWj)*oB^yOo;Mx>tv}GsPf)JA;H731UqR?kO&z@*$O}s0>7Z}SkJsDqT6_*5
zLepZ_Sxp?r{p^=ERkLpNBHB!+{wlEjaVJuNO1<{HaxQ;4G4s~kn{&yFi(Arl{Zd`O
z`YG=TFd`emj~QD-z+;xpW8q*}lr2*}@tR+hjqud61+gCXMnH&OmCZrls6RMcO|q~%
zrvVn+qqp|ES&hYSBNe$g>oPR!8VUE2h^rCY+|yyWXu%h3)E|k$9AbjoUDi`B8_PRe
z)EBuvA)BMr57B(3qod)QSeZC>6>=#xn+|2fb2F6f#Ld@@S)@5&4Kc+u77(C{`#s|w
zqgHnWWYxeDLergM2`N(WLzED1Y9YaYQ+xsU5n?3B4x(^mzc#k+16z?Er1=TZRq?EH
zE=N+8?a8B3B{aS4?-)E_DtD;g8O~($5t7cauoT?-W1_KyGG8bZh6~)-ly6!ty%`OR
zU1Mm9$fdV54>lIed+kO<HbukJvkfms{Wqhd<F9N)=G<eNgn=C^OK93B%+}{ZYX>HA
z|NH0UYL%dzV~)$-kzwzrMSau4xW_FUp){~g`L6i|=!xXwDb~Lta@nP!BWI5dec5~T
z{Mqx*T~xfzOw+-rY>mu}Qm;qH^M|nXmHhnVB6_26+N6FEX?#)-i3a`Rcj(@7ixpM2
z+*Gb5aQ5@Ewus1<pdWozAmiF~Ebd0v8VkbGqAbE4rsN`&geek20k6VTgN78p#&Wnx
zj;gYinh`1pc=b`TEC*Vb7a)tTtYoFhHdhp61x<#hT;ckuC&@On0@l%m#apuZD2+7n
zD&<doS1uy;k8Gj>8htkvBMp%Xx!6A)3BUnSq&_1XCd7Y;YlKkbzM_Z<3d|a9&f>%D
z)~BQ<Vd{&&#HeCc8#h<8EpB^gEtxM(oLVe`(@@?`uEO*6tx{E2s=^aDXDYU&syb2?
zTjJ(NjNYsW(xDO1mvrrUsrG!lG~<A9QE792L;&iDTGzec-O#<zofELQR6T5j*VJ<B
za@%s-JK=QWZmDrMIk3Ua4*&)iLt@v%it2mTw;gZ$lS9eqJFhGcd}l7*yi01{m3Hlx
zT)Q)_?!{rrHL%<&xprn+pnSN0bJ>(>Y+h_#-nCv_RN3$m2k;95>nivq&)F;HPo-*)
zFAo3c><`YaRIm8cJ;PGZFkazI^Cu+!M2bK0kT0J<ow$|eTP40V#kaEORNam=KPd5o
zDSi+Jhd0i>e(vp#w`ZXDC|W9A9(vE7ZrLrh>`vG3k?QxTPFpPM!tNB`mgd_ez701S
zzWj|dub;_OH>N6f;auFQTmc{KAqfl3X0+4lI#SpGzzRa;zH??C-iUX||Ipbe)oooI
zSgq^9623%hqIJ17Ui`48eqmrixPNVNYr1)0d8agZG+i?+)eNt5RW>IB@H>R+=V~TL
zb+Y8;&;{J2E1s1qo`p`Tj<T++il0Efm5zI*BpKS0j>QuX8ZwPrq2)0y8t<Q9u{<y?
z$6(B<tb#G8l2kmERq-LL9kiFtpIGA?SNTS$a3rS1$?$f1*SX4fCgB{|EAhQ49?pCA
zH_pC(Hs#v$pe=qj%^#EaV=4Za`g-?+DtZm;-f)T^rZi3}>9VFfl&UziT(kW0kLz%w
zoUpOM2xo6XfvEieAmXC^teW<N|K^rlb0}&hRffdCAr63^KX!xYGwIYM7z-3J7&6KM
zg$pTdFnaQ)5^(gY8VG!_n)bVh@_sHN$0S2Dq)*ilfv{>km;k68?9g+o<yfmHn6dhX
zMt}BzcYLuXysk8bJUcwiEJ;-Y&80xsm=%Ty@+3ov^QtO%lEGh0W#Bo;3ft%4jg{1t
zJD-YR6H4HZr7HpW>nDZgm+bo5K@#mper3A+T=3y4ePVv)8}pm5M;a9cX}}Qlh0~}k
zNCWc76Vj*>HZ6xx&GZn&TCrmTHp+kvjf|WN2W)JRkr9#@l?{jBh?zE#D%HM(ex;iB
zgxbRPMyje@u1#7f*pdfWv~2E^rSI41A9ZtB6SujXUg%8-d^?e@Dp_kw@N1`Q-dx^-
z1X}bhMJ{(i(yE8lS<qi~<Cj=VcIeB4ZIT)xXEpiSKn$KFXJy5y>>7Dx2NYUQ&z7GZ
zId>5osQ8%5RbwJk(;~}>Mv!?rl`6~ei)cA>>;n@si2r~rhOKhcQqcDcV7-`WN>iLK
zD26@mLK}+T1h^!A3sA?w6L-xx_zv7;`FA@bklCd_`C$l-y-er3WKw*W41#Q!(l3e`
zM`E8PQ|X#&GnwjN5NG5@Dqzx`$CUFs9m&?@vkR3A1NR;3OE!rdhw~Oc?Te0G^<n`b
zL`$%RSHm~Pg8^*4A)6t=_#?B$?R$3Z=^q_@OjU+7NPS9t4**{VM)&#m>;cbh!zvKJ
zB86FRTn$7ZhDDg>863WEnpkMC(y+TB&gc$de6LT}m=>hQ8uQnaV8y>jMN1O+F2EO(
zRzJ68e~y+F|30NndM4ST2!4?CtmD{pf<&9yx(nF#!cUHIS^Gm)IP@4NzWEJ0-uq`i
z|FeHd$NJ$<jeXn22bA282rL7PcpTy%(!(DS_$h%uCNNCkHi54ZI0GOT12@$D!T<ZC
z3MXE!3J;8{kBI+{LjNg+w$i6t!N8PUK9Q3!lt401pK>)&K5OJJ@n2CI{~93Y;nhd!
z+0>B-#H03Js=k<^u>XO;f22S~Q@+SG**+c!qD`_pUCG8#EK)+*u>el#C9(<q1Cl%I
z9!f<F(T&bs7}1Ixdk#r|mYkr&<Bw=GyaY-K^Jg1ZQx~^Aa(JE~Du8XQuD#cDx9?ux
zo#MDD{v7d<VCNT_?zf~XJW_=xRqlaX78_MRY+syOx%5w;Pj4HRwhd!YrJctl=P@|!
zSh%u^H!i<^dBMIs{NT&+%W3-=$$lno#0N)hV&Wd`pG7tg1M#Dez*C=i{ltQ2@#Xl5
zG(RBm11WwW_clQ9x+K0U#ZF?NvC8P)-ynA}h#mm(6B)jmxblU-@<9Adn%^byyHe~_
z@*BUmp91b+Abym1_>K7?ON6d-Ex7JYQ9!o3Wmo)ohOc_#^y{Y=UI3eZI?eBt_?;<s
zu9tCj7Yq=bHV9DGk~M4ns<nRMOKIy?$+|UV-TKH{@`n9&d*bS%D{fC)2PNxZ$~uU~
zwej<|R27yq^+?v9l(h$Cu$8`1`g&>NT-w?uS=&<9HoU8HtW~zJR<@@rw@8&+sC-zF
z1OOK^FybSxk1Xs<^IIf-ONyPD%IYr^o^s_W*9_mCaHaU}g;M~^xl#wY#^!)rV<UsN
z4LgkhfG?+_-zl9hjk7<6An5moBCdyV<RbXiUyUQ5fK3H<A)Tw%uVN0?^XsvKJrm}N
zb@l?H#O%O+3&rH*vt-e)Lt#^#b<U>a<qOh;mCE!|84HQMD?TTr@uk0FA$e%dX}1Yp
ztL&O9i<NE8`O_?vmrPU+Zc`3_Qx2|d^VKfDcDj75M6q%t4B}rzHERd*J1*$ns(daa
zqS8FmfTt&}0?_lra}`4ItK3|rb_L9&Drv<k*vc8uz`V4F{TQk?=XLe9*OgP{cViX$
z{F$R#wULWeVkd}dp+qPZ_;<m{zprxha}MOUxuwaWPiwA*wu_vrMQXLNnu2e2=nE=m
zo9(7bUv<Q=y(DZjCHeM)Y*V2x1*Czpq-u-O#}_JNbp`ROmZ~?2ud!F<Q_!`OD(?sd
zYfgkpp`6*$z(>7Lyc9cFslG_61=0{pwGOh>ua|0xzO7lR&P`G+-F$rw*~0V^iO?{M
z`a$+ot#a84v&+Wt6nf721Z$iQvjuo+j5%R{YI@tW)U4M6Oc>@|z<9n(XbK>-#9VMu
zEf(CAuh2?;coq`xQky;v*f5Rr&%qtDB<r5}ZK0h}tNOWy>|NtrldjbDxol$fvBq&@
ztRdDUbO<Kw8PkyaB5Yae)LXOXno-itEq`0|m|^{8Q_Ekhc|*uzq5K-lR5Zs-!d9wl
z2>U6`wIH|6?SWlF7xWfSi8H|?cw#Mjd}!;rwC!EYe($TA8`heCoiNQ;2;FmT-MpjP
z8!-pCmwNPl3EHWlT-%{f73=E>+W!o+J2s&=R-&CdlCAkT`8%NxnuqO$>C?<3RO({4
z<>Tb<g#OK9&kyP9(w+-13<x`x1`G4jh3!zo?j#9c*u`w`yWchodzSWoX3Q<Qn0lHG
z8J~xYzt8u#!TYKbF-gOkjcBqPHp1ByJK$n}T($%(0H<2_{wZJd>i#Pu-YNHs(E!$`
zxN&<$O$T4u9xperA1<VBH8694C1WgXAK9&ARnzPjcVYeYeXMdWs!STt?0=)mEsDnA
z3G23~wG`b!;r_W>xBlwt1o06trcoz&ieOKq{SC|$q91;#Mc8r&29{Cy1BdX<93sbH
zTp(4$8iWNpqW@<0dP}zyfaX~yJuBO4$BJ&dqPfn2Yu-1hl-vCMIO&Sj*%~8^dm5)h
za44o6-6SWzJfYS1TX3+d*A7b?yvW8w-;33>5fEu>{gw2bj78^#rOv9LNftQmg9FcN
zg)u5jBY6j6tRNdk>hQk}jmxGfADnQf0wEX=u`R|llo_64k-X9%vEGoa6WCmvWL!wA
zSZ`J|7Q|i|rIDHG>97b7Uqs74_-<-<$5mW+t0R8jXjlw+X*ZQ@wArIiHg+kl<;uny
zc`eT-iO@38NCd^a&1D)|77jezvh|(klP7-o+|u)@_MHpE4?8`J9Y5;&LDzfRmbNX6
zD@T8PGrjHb1IGj3PwLX0r=-qP3#CsL25z*kEPiRF^ubrtEhAFPNXj{)h&|@WSU5^H
zaogyP?Bc-30t)n)q@NL;mWQyz`sr`uhW5)vKf~R|qi}yjnwb$61a0H7AuKf0z_d}p
zw8to7LwF#0Iy#Lq8g51?5k-|C+Z4BN(%fvmFpyD;&2gbdy+jxwS_}-hTa!cIKla^Y
zi>==|`OeAj@XLmOWd42gvhT;%53K2yy(#Bj)@Gj?dc~h3hWM8RXf#aVA4lpi%1Z+Q
z*74x<Ri9ie1g1b7Zh4ACH&vtP7Wx{~y(wC_?@?GwSXsqq5cA#)pBlE$nvNXr`qbd@
zn8e2v%;py+6b+sD13b@`p!Z_qub_WC%C=W{OauUde@KCguVVQCHfR>t>7_A0YGgC?
zHc|g^l!z6y2<n|+b|D~bU?UgP*zkr!kBQUH*6Yz>*)oRp41N)Y|7vVkADE?mT7%ez
zdm=>JM9Y=e;q@PYYpD8)<*d|lJF1>5!$(veY{f*%EYXLD*)r^Q)8Tz(pntBT>&S7B
z_+Rl-F1;XzN3$EdXLWCXdN_OYkI~Aq<pvw%vgInfivNvb@oYqTkF(v3#RqtmSI&7l
zHM+T7^ywgh-zD%<0)I^4PYC=KflmnhHGyFO_@IO*2KvRnOD||-$ozzFCK7>4lxTu%
zXQL?MRffEHmqJ)+q2>(y2*jVU2-MQvQGfIXO%}zzo7c(1Me!pjW;$HBSeP%6GFSXF
zieP&VHhZk^#O6QBLd_v)b7__dVC5#(K6qIqEcb*%1#S8roo0(9#D9y(Om~P?zgedS
zuTLOHDvdU<RpS)=DMk1n1V{rYTbPSLMA79HhtAPT(+JZG(hgeaQ$!wQGxk3624use
zayQ9zhN6jjc_~9f77H$VV<Wl=*Bjuxnx0Fj>iA)RSwB?hm&I0kXS}=vI|UtA{2b(R
z#e2f*4=TIBV;d)Qbo5^45o8$!%?eKe`^?NC8>VIRIHT{SW2k3%iYZGYttcoIkDq-g
zYRM4<o$X`=XBEynZuM=TBD76>qzuCiTFDNkm4p)Ni7pI}DhE^Sj9WgetzX#t?StPu
z_>IH&4=YP5;-wF(Y7*DdRc%sLTf7)*wHoKWvzaPavToV2f^Bb&HD%CW)sX(GrtFRl
zip@*p3Eh_LPCNS~XWu#(Fxaq55y3kr<3sV856RCV-MB+)gxYYzV8=&-iiZQ1buP4G
zDMiP<%L(HnSHqgCdlj1&xq2m6FVu3CNDm+}lyTI&HS*?2a$lO($o8h#nfZd@A5}XR
z3~%nfyBpPN-||k^LuWl4xVsj2y|aCJ@5-?c4yT<*CFfBX|J&<PzxMjXne|$8&3WuL
zlZU@7<61i<_l}ISeenj`qqQFG(MsW4>l3HetGN31HCO+tt3U19A-Q(^!E+xxzj7wM
z>!h^nWZHEyaU|2aGu65iv6Ig&RxkRN9dI&l!wO!2#Az%BakZ^Ex2-z2E$&x#8%hkV
zTMae)&<;6ZMHUOL<iIx??>8bnN9|iD-aN5z8V(6Zm#<^(>#d&+B~GLrBa&kz<rtyw
z=ifY^akjyUL|m?2F?`^9&;dncO$Q;83SNUff(Y>FJa3(T^Yp{|#`|4Jzx#go;?PRv
z0}q96DGY7Zh2HUvp8MElYNhqT-lqsX_>JECSe?2u@ZjjCp-VXTmT%8}b8hkC@)pc=
zQp;W}!9hd08#B%A-=6yB6slU2Zr&p`@1eJQ6DNUEm;1hb*|Pld2et>#|7_?dFJyWS
zE_bDR4k{=126ACta&B{^b(3jped0V;9;42u-aM6Q>{{NQY2CJX0!}QamS2AFV7hfL
z+$d_A;YLBN1OPXR8ep65O1RoOED(A=@%*E<&bwz4!wXw7TReA162}*g(|B-8PEW?w
zv~Yc)Y|*@UedQ~erq;#hmR@{7TTHts5f`QDswebP5eS9H?vC6WNid9^ee-Ox^6vS2
z=M(22^$afiesE^-%)+VU=r_(ToLzY#aV&@Rqsi)||NB$lomxJ+Qj_jHEOj2v^zY5|
z?apl3w%oZ=`GF_X+4W9v-Nw~4!WpP$C!B$5u=E+=uRl6rqJg-6$;8#U<E4rU-I{PL
zoJm=`($+4?+JzguuBuDixZ8XW>&lI`V;BqsNnKu%sKQF7n)x$pJZ;mIY9Cw)Fc+Vb
z5`QwqpQI3#iJ^pJ{`4B(y2`gEdsjSgBvPGO;LpNx#V;o$2NxsI<Esk&53SILXZSs&
zL#Lgh7H!HE@WEFw>}*7ao<faoIyZDdx6>1`B{XAxd<9gV7CKMjK{;q?)9p^Y!58I7
z5;wKsfEPKXzz(6{w-~UmQc><(sDb@Phx)9Q)C-pYYxnAgc8Bv?a;adcRdMcKdqpYK
zl-XWSY7ElL6nf+^EfaigY`WdIp&_7k7HUkaUog==NP>mZn8WW$Y_2VbHostTG<Mo8
zZs!c#3tY%_)ARy&!@w3<75n}ajj77}$FeL)#C<$0-oPFViea<Q-3zztNHlm0`@c@#
zqWw9eSW`<I)Uqj1{Yiu`y1FX6OGR#}6N&Na58`CM(J$dl)9*uU`eQgWSF2tJZZI_)
zw^>n~t#gw)*pScE1)RZma6ar81;VtNm+j2Ub|obZ2X-9E?y5*-3I_4>0?H04`Q^rx
z(<KDW|0IxmD?0fX(IhBFO=UqU{pt<v4XNUY(q}wJc0sOI-!h^saJ8vC33%sX;=E8L
z@g-oIi40g6wg=ru3=)_EfM}Ha842+Uz5HDQGJUDqSYx>qTSr2y9VKVk>`xMi=PAY&
z0^JnN%u0~kT{K%0mbq+2G-bgtDGI4JbSP|92ybSUKBZPc`9Y{Y%|0gIA%=>K)L^JO
zxypK}q75#drB(66*c(G?=v!+zyxMR$Q{lJ=V-n_{#%-9s8@I)W=g-E^g7<1{r`v~3
z?quCJUcCPz9!4HHTClUCEz{su_SOJtoIi_wQ-yZ|-|58^*hm{YHV#la18J)ht7u<d
zFEQIHvHbM@wp86toQsYnmvR?BnW?H@xOlgZEU?&BuW6NUTDZDsO7lGu--9K!I6ql8
z8W5eYh!0~g5@jh`glq|axWDJfR_>3s8jp0FJeEr%WKiTpvU4&23jB%$yf}_C5f1y`
z76GRu{1R?GWwehd`Nw#@a*3Dv=}eIBd9Rn2L1w=cW3SQhnAa<k6+(0qa1uB`AVA<G
zfwKh85g=YyB+MvVyOOe4!4{D{kpR7l{4app>fgGt+HA!xk^tMd1J4*T$4_93!*#RG
z+`7)`fpdqscAZnfq#<B1Gd{Hde$~W%2?=fKTsNIIn48wQ4e+wjV+I$Xg0C9tDV!ec
zKWK)VsS2Jkju_02bxs3Ejb0<Y+5nH3J(S)P02B6Edw5(T%~4S1VS(x`#i8R5(LC6D
zbu54vG&|8wuS`iKrs$~(x>b@Kf`QS#taK+nLupiMJ}`$HC<m3R_|GX~h35M-Idx-$
zS-LPORW2X((XIvRuCdB?v-q_*{PLS@nu(CpIyAs?(Ii$ph^Hw*^dX3z=r^n?1vvlI
zdO+z`hs0Yb9ZvXo1A==q7}hOCh9dAT043M~HN{maXNI%gW`7y3E~P&+Tumx>X1I=&
z{>*UgDgBw@np65S!*!?hCq}rT=vCWm_OIFFqw^DQ1YZv>?6|*&1gS-5x?zXZKpSW_
u?80DAwe1IeC_jL4U48%~+;9+g25g-}z#1(v0Nb0xkJ$TPJmD+r3jYWAE!z(O

diff --git a/examples/only-model/bayesvalidrox/bayes_inference/__pycache__/discrepancy.cpython-311.pyc b/examples/only-model/bayesvalidrox/bayes_inference/__pycache__/discrepancy.cpython-311.pyc
deleted file mode 100644
index 277082acf177169ba1aeb1049190f4e2821cf92f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4566
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
Q|N8zL{rubiF{%~$FR^A9djJ3c

diff --git a/examples/only-model/bayesvalidrox/bayes_inference/__pycache__/mcmc.cpython-311.pyc b/examples/only-model/bayesvalidrox/bayes_inference/__pycache__/mcmc.cpython-311.pyc
deleted file mode 100644
index 28789e25211ee767120c61154597194c2f92b447..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 35652
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
E0Sc`yVgLXD

diff --git a/examples/only-model/bayesvalidrox/bayes_inference/bayes_inference.py b/examples/only-model/bayesvalidrox/bayes_inference/bayes_inference.py
deleted file mode 100644
index d566503a5..000000000
--- a/examples/only-model/bayesvalidrox/bayes_inference/bayes_inference.py
+++ /dev/null
@@ -1,1537 +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, MetaModel, 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.MetaModel = 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
-        if self.MetaModel is not None:
-            MetaModel = self.MetaModel
-            Model = MetaModel.ModelObj
-            n_params = MetaModel.n_params
-            output_names = Model.Output.names
-            par_names = MetaModel.ExpDesign.par_names
-        else:
-            
-
-        # If the prior is set by the user, take it.
-        if self.samples is None:
-            self.samples = MetaModel.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
-                print('Create error meta model')
-                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="Boostraping 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)
-                    }
-                
-                # 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)) # changed for windows
-                    )
-
-                # 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(
-                                MetaModel.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.MCMC_Obj = MCMC_Obj
-            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(MetaModel.bound_tuples[yi])
-                for xi in range(yi):
-                    ax = axes[yi, xi]
-                    ax.set_xlim(MetaModel.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 = MetaModel.ModelObj
-
-        if samples is None:
-            self.samples = MetaModel.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.MetaModel.ModelObj
-        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 = MetaModel.ExpDesign.Y
-        Model = MetaModel.ModelObj
-
-        # 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 = MetaModel.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 = MetaModel.ExpDesign.X
-        model_outputs = MetaModel.ExpDesign.Y
-        Model = MetaModel.ModelObj
-        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
-            # account for numerical overflow, especially for windows
-            scale = 0
-            if np.max(self.log_likes[:, index])>709:
-                scale = np.max(self.log_likes[:, index])-709
-                    
-            self.log_likes[:, 0]-=scale
-            likelihoods = np.exp(self.log_likes[:, index], dtype=np.longdouble)
-        else:
-            # account for numerical overflow, especially for windows
-            scale = 0
-            if np.max(self.log_likes[:, 0])>709:            
-                scale = np.max(self.log_likes[:, 0])-709
-                
-            self.log_likes[:, 0]-=scale
-            likelihoods = np.exp(self.log_likes[:, 0], dtype=np.longdouble)
-
-        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 = MetaModel.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 = MetaModel.ModelObj
-
-        # 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 = MetaModel.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 = MetaModel.ModelObj
-        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.MetaModel.ModelObj
-        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.MetaModel.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/only-model/bayesvalidrox/bayes_inference/bayes_model_comparison.py b/examples/only-model/bayesvalidrox/bayes_inference/bayes_model_comparison.py
deleted file mode 100644
index 718abb8bd..000000000
--- a/examples/only-model/bayesvalidrox/bayes_inference/bayes_model_comparison.py
+++ /dev/null
@@ -1,714 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-"""
-Created on Sat Aug 24 16:04:06 2019
-
-@author: farid
-"""
-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,
-                 emulator=True):
-
-        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
-        self.emulator = emulator
-
-    # --------------------------------------------------------------------------
-    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
-        MetaModel = list(model_dict.items())[0][1]
-        MetaModel.ModelObj.read_observation()
-        self.n_meas = MetaModel.ModelObj.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)
-
-        # 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 = []
-        metaModel = list(model_dict.items())[0][1]
-        out_names = metaModel.ModelObj.Output.names
-
-        # Perturb observations for Bayes Factor
-        if self.perturbed_data is None:
-            self.perturbed_data = self.__perturb_data(
-                    metaModel.ModelObj.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():
-            if self.emulator:
-                y_hat, _ = metaModel.eval_metamodel(nsamples=n_bootstarp)
-                runs[key] = y_hat
-            if not self.emulator:
-               # y_hat_ = metaModel.model.                                       # TODO: run the model instead of the surrogate
-                samples = metaModel.ExpDesign.generate_samples(
-                    n_bootstarp,
-                    sampling_method = 'random'
-                    )
-                y_hat = self._eval_model(metaModel,
-                    samples=samples, key='PriorPred'
-                    )
-                #print(y_hat)
-                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()
-
-    def _eval_model(self, MetaModel, samples=None, key='MAP'):
-        """
-        Evaluates Forward Model. - mostly copy paste from BayesInference
-
-        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 = MetaModel.ModelObj
-
-        if samples is None:
-            self.samples = MetaModel.ExpDesign.generate_samples(
-                self.n_samples, 'random')
-        else:
-            self.samples = samples
-            self.n_samples = len(samples)
-
-        self.name = 'ModelComp'
-        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
\ No newline at end of file
diff --git a/examples/only-model/bayesvalidrox/bayes_inference/discrepancy.py b/examples/only-model/bayesvalidrox/bayes_inference/discrepancy.py
deleted file mode 100644
index 0f52c4f0d..000000000
--- a/examples/only-model/bayesvalidrox/bayes_inference/discrepancy.py
+++ /dev/null
@@ -1,99 +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
-        ExpDesign = ExpDesigns(self.InputDisc)
-        self.sigma2_prior = ExpDesign.generate_ED(
-            n_samples, sampling_method='random', max_pce_deg=1
-            )
-        # Store BoundTuples
-        self.ExpDesign = ExpDesign
-
-        # Naive approach: Fit a gaussian kernel to the provided data
-        self.ExpDesign.JDist = stats.gaussian_kde(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/only-model/bayesvalidrox/bayes_inference/mcmc.py b/examples/only-model/bayesvalidrox/bayes_inference/mcmc.py
deleted file mode 100644
index 6b9ca9482..000000000
--- a/examples/only-model/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.MetaModel
-        Model = MetaModel.ModelObj
-        Discrepancy = self.BayesOpts.Discrepancy
-        n_cpus = Model.n_cpus
-        priorDist = MetaModel.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
-            MetaModel.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 = MetaModel.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 = MetaModel.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 = MetaModel.ExpDesign.prior_space
-        params_range = MetaModel.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 = MetaModel.ModelObj
-
-        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/only-model/bayesvalidrox/bayesvalidrox.mplstyle b/examples/only-model/bayesvalidrox/bayesvalidrox.mplstyle
deleted file mode 100644
index 1f31c01f2..000000000
--- a/examples/only-model/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/only-model/bayesvalidrox/desktop.ini b/examples/only-model/bayesvalidrox/desktop.ini
deleted file mode 100644
index 632de13ae..000000000
--- a/examples/only-model/bayesvalidrox/desktop.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[LocalizedFileNames]
-exploration.py=@exploration.py,0
diff --git a/examples/only-model/bayesvalidrox/post_processing/__init__.py b/examples/only-model/bayesvalidrox/post_processing/__init__.py
deleted file mode 100644
index 81c982542..000000000
--- a/examples/only-model/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/only-model/bayesvalidrox/post_processing/__pycache__/__init__.cpython-311.pyc b/examples/only-model/bayesvalidrox/post_processing/__pycache__/__init__.cpython-311.pyc
deleted file mode 100644
index e9108fe43d767221eb456e5fec28ee23ba4afbe5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 320
zcmZ3^%ge<81V!vMsU<-AF^B^LOi;#W2_R!SLkdF*V-7<uV-zDJLkd$mV-!;gb1;J@
z%S%R}v?k*%zJUDVl7OQ8<kaHg%)Im>W}vX2Ci5-+0-$(&0jk6;_W1b3oSgXhl?<Oj
z*8IwMwu%WYPAw{qDay{z$jL}dERJ!>PcF?(%_}L6anCIAC{2n<N~}yRE=$bGOexB*
zh)JzT%q_@CEsn|0%c<1O%}+_qK~sTdb4+}EW?p7Ve7s&k<u48!ppMd<RJ$Thp#2~}
o6l(&B56p~=j33w-7<Dc%Xd@$_7^~<9W+ra726hlEVh5@Q02MD?Qvd(}

diff --git a/examples/only-model/bayesvalidrox/post_processing/__pycache__/post_processing.cpython-311.pyc b/examples/only-model/bayesvalidrox/post_processing/__pycache__/post_processing.cpython-311.pyc
deleted file mode 100644
index e253baea5f0711c774d08f539558c911df465f70..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 58896
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
R9KHDuCGWrfKoR!P{vW;fuO<Kh

diff --git a/examples/only-model/bayesvalidrox/post_processing/post_processing.py b/examples/only-model/bayesvalidrox/post_processing/post_processing.py
deleted file mode 100644
index 3a89cf739..000000000
--- a/examples/only-model/bayesvalidrox/post_processing/post_processing.py
+++ /dev/null
@@ -1,1352 +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, MetaModel, name='calib'):
-        self.MetaModel = MetaModel
-        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.MetaModel.ModelObj
-
-        # Read Monte-Carlo reference
-        self.mc_reference = Model.read_mc_reference()
-
-        # Set the x values
-        x_values_orig = self.MetaModel.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:
-                #print(x)
-                #print(mean_data)
-                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 = MetaModel.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 = MetaModel.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:
-            print(x_values)
-            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 = MetaModel.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 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.
-
-        """
-        PCEModel = self.MetaModel
-        n_init_samples = PCEModel.ExpDesign.n_init_samples
-        n_total_samples = PCEModel.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 = [PCEModel.SeqModifiedLOO, PCEModel.seqValidError,
-                   PCEModel.SeqKLD, PCEModel.SeqBME, PCEModel.seqRMSEMean,
-                   PCEModel.seqRMSEStd, PCEModel.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 = PCEModel.ExpDesign.n_replication
-
-                # Get the list of utility function names
-                # Handle if only one UtilityFunction is provided
-                if not isinstance(PCEModel.ExpDesign.util_func, list):
-                    util_funcs = [PCEModel.ExpDesign.util_func]
-                else:
-                    util_funcs = PCEModel.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 PCEModel.ExpDesign.n_new_samples != 1:
-                    step1 = PCEModel.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 PCEModel.ExpDesign.n_new_samples != 1:
-                        step = PCEModel.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=None, 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.
-
-        """
-        #print('arrived')
-        if not xlabel:
-            xlabel = 'Time [s]' # test workaround
-        
-        # 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))
-        #print('init done')
-        for b_i in range(PCEModel.n_bootstrap_itrs):
-
-            sobol_cell_, total_sobol_ = {}, {}
-
-            for output in PCEModel.ModelObj.Output.names:
-                #print(coeffs_dict[f'b_{b_i+1}'][output])
-                n_meas_points = len(coeffs_dict[f'b_{b_i+1}'][output])
-                #print(n_meas_points)
-                # 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))
-                #print('stop1')
-                # 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 = PCEModel.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(
-                                    PCEModel.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(PCEModel.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 PCEModel.ModelObj.Output.names:
-            self.total_sobol[output] = np.mean(total_sobol_all[output], axis=0)
-
-        # ---------------- Plot -----------------------
-        par_names = PCEModel.ExpDesign.par_names
-        x_values_orig = PCEModel.ExpDesign.x_values
-
-        newpath = (f'Outputs_PostProcessing_{self.name}/')
-        if not os.path.exists(newpath):
-            os.makedirs(newpath)
-
-        fig = plt.figure()
-
-        # Do the plots and save sobol results - uses self.total_sobol
-        for outIdx, output in enumerate(PCEModel.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():
-            print(key)
-            y_pce_val_ = y_pce_val[key]
-            y_val_ = y_val[key]
-            residuals = y_val_ - y_pce_val_
-            if residuals.shape[1] != 0:
-                sum_residuals = np.mean(residuals, axis = 1)            # TODO: mean here? or sum?
-
-            # ------ Residuals vs. predicting variables ------
-            # Check the assumptions of linearity and independence
-            fig1 = plt.figure()
-            for i, par in enumerate(MetaModel.ExpDesign.par_names):
-                plt.title(f"{key}: Residuals vs. {par}")
-                #print(samples[:, i].shape)
-                #print(residuals.shape)
-                #print(MetaModel.ExpDesign.par_names)
-                plt.scatter(
-                    x=samples[:, i], y=sum_residuals, color='blue', edgecolor='k')  # TODO: issues here with sizes for different times
-                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 = np.min(y_val_), np.max(y_val_)                # TODO: changed this here to np
-            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 / (np.max(residuals)-np.min(residuals)) # TODO: changed this here to np
-            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 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.MetaModel.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():
-                    print(Inkey.split('_'))
-                    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 = MetaModel.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
-        MetaModel = self.MetaModel
-        self.samples = MetaModel.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.MetaModel.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.MetaModel.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
-            print(y_pce_val.shape)
-            print(y_val.shape)
-            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/only-model/bayesvalidrox/pylink/__init__.py b/examples/only-model/bayesvalidrox/pylink/__init__.py
deleted file mode 100644
index 4bd81739f..000000000
--- a/examples/only-model/bayesvalidrox/pylink/__init__.py
+++ /dev/null
@@ -1,7 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from .pylink import PyLinkForwardModel
-
-__all__ = [
-    "PyLinkForwardModel"
-    ]
diff --git a/examples/only-model/bayesvalidrox/pylink/__pycache__/__init__.cpython-311.pyc b/examples/only-model/bayesvalidrox/pylink/__pycache__/__init__.cpython-311.pyc
deleted file mode 100644
index 0e142124f5bff161ebaf8f9c632cd82465101bbd..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 306
zcmZ3^%ge<81V!vMsl`D0F^B^LOi;#W2_R!SLkdF*V-7<uV-zDJLkd$mV-!;gb1;J@
z%S%R}v?k*%p@2%C%)D&3{G#&2q7>i!l+>IeW}uXxCi5+}g327A9GHKLJw84$Cnr9B
zCBtWs4ZqTytztrpQ;UjYin8-FaxxMVi(_2!lS^|`^Gb?i+%ro&N|R!e5-U@S%Mx=k
zQ;PB{Vp1y-a|?1(i(~Thaw>ImL3W|3fLIt4AD@|*SrQ+wS5Wzj!v?6ZG$+-rh!bcn
p$koM~K;i>4BO~JnHU>uZ3k+(=2q?xX`GJ{<o2`Kz1dG^#ssa8eR_*`*

diff --git a/examples/only-model/bayesvalidrox/pylink/__pycache__/pylink.cpython-311.pyc b/examples/only-model/bayesvalidrox/pylink/__pycache__/pylink.cpython-311.pyc
deleted file mode 100644
index 006f78d91ff411531d6e30040c2f8ef05bf10ab2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 30927
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

diff --git a/examples/only-model/bayesvalidrox/pylink/pylink.py b/examples/only-model/bayesvalidrox/pylink/pylink.py
deleted file mode 100644
index 2decb7da4..000000000
--- a/examples/only-model/bayesvalidrox/pylink/pylink.py
+++ /dev/null
@@ -1,664 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-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
-
-
-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 sell 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
-        
-        # added by Rebecca Kohlhaas
-        self.cellID = None
-
-    # -------------------------------------------------------------------------
-    def within_range(self, out, minout, maxout):
-        inside = False
-        if (out > minout).all() and (out < maxout).all():
-            inside = True
-        return inside
-
-    # -------------------------------------------------------------------------
-    def read_observation(self, case='calib'):
-        """
-        Reads/prepare the observation/measurement data for
-        calibration.
-
-        Returns
-        -------
-        DataFrame
-            A dataframe with the calibration data.
-
-        """
-        if case.lower() == 'calib':
-            if isinstance(self.observations, dict) and bool(self.observations):
-                obs = pd.DataFrame.from_dict(self.observations)
-            elif self.meas_file is not None:
-                file_path = os.path.join(os.getcwd(), self.meas_file)
-                obs = pd.read_csv(file_path, delimiter=',')
-            elif isinstance(self.observations, pd.DataFrame):
-                obs = 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")
-        elif case.lower() == 'valid':
-            if isinstance(self.observations_valid, dict) and \
-              bool(self.observations_valid):
-                obs = 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)
-                obs = pd.read_csv(file_path, delimiter=',')
-            elif isinstance(self.observations_valid, pd.DataFrame):
-                obs = 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
-        n_obs = obs[self.Output.names].notnull().sum().values.sum()
-
-        if case.lower() == 'calib':
-            self.observations = obs
-            self.n_obs = n_obs
-            return self.observations
-        elif case.lower() == 'valid':
-            self.observations_valid = obs
-            self.n_obs_valid = n_obs
-            return self.observations_valid
-
-    # -------------------------------------------------------------------------
-    def read_mc_reference(self):
-        """
-        Is used, if a Monte-Carlo reference is available for
-        further in-depth post-processing after meta-model training.
-
-        Returns
-        -------
-        None
-
-        """
-        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 value of \'{Process}\' is a non-zero value, '
-                          'then compilation problems \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
-        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
-        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 = {}
-
-        # 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 self.link_type.lower() == 'function':
-                group_results = Function(c_points, **self.func_args)
-            else:
-                group_results = self.run_forwardmodel(
-                    (c_points[0], prevRun_No, key_str)
-                    )
-
-        elif self.multi_process or mp:
-            with multiprocessing.Pool(n_cpus) as p:
-
-                if self.link_type.lower() == 'function':
-                    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 parametersets 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 _store_simulations(self, c_points, all_outputs, NaN_idx, key_str,
-                           prevRun_No):
-
-        # Create hdf5 metadata
-        if key_str == '':
-            hdf5file = f'ExpDesign_{self.name}.hdf5'    # added _{self.ModelObj.func_args}
-        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 file has been created successfully!\n')
-
-        return
diff --git a/examples/only-model/bayesvalidrox/surrogate_models/__init__.py b/examples/only-model/bayesvalidrox/surrogate_models/__init__.py
deleted file mode 100644
index 70bfb20f5..000000000
--- a/examples/only-model/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/only-model/bayesvalidrox/surrogate_models/__pycache__/__init__.cpython-311.pyc b/examples/only-model/bayesvalidrox/surrogate_models/__pycache__/__init__.cpython-311.pyc
deleted file mode 100644
index 61571bd1e2bf0c8b5ec4faf4c27e71b0526bc80a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 317
zcmZ8cy-EW?5Z<}fT%rV0`UZN1d4LdX6tszr*o1{;;||G@z1w4VPjX=4Tlfg#+gM*~
zWp|J+m9s%XGBeEIH^1-0;Rz#h=?kvOe#PLAl3!<gM$Q}4OoL$s%mJ8AmM~8=e_+|s
zHxQgbJD6cmGpo@!PMQ0Rw<BLWXO}9VEF$3dNSjKjjFIw#ZR3hvbv+S}9-S9%ZC7Tc
zlovPlsV=Y#Ufky4u3m_RYS2F`lWS);0ynCt40>Tp(_HR{A5<K!7E<PA9;6&s&8|PC
omfGNz8_)sq0iTiTH~@4#1{a^~{J&7{c+~OawD+1ub}3c=0Bb>8nE(I)

diff --git a/examples/only-model/bayesvalidrox/surrogate_models/__pycache__/apoly_construction.cpython-311.pyc b/examples/only-model/bayesvalidrox/surrogate_models/__pycache__/apoly_construction.cpython-311.pyc
deleted file mode 100644
index 3820b6ebf286b68cd5bedabe083f98a933a04823..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5085
zcma)ANo*U}8J-y~5;sYtcFU<oF>Gt0XvvEb%Ys(Qb{xx_5@)Fr^@%g2#v*6vnV}>q
zB&tJ;P=*SO3>l^i2Vej<m75kwfgThf1)M{R9ytXM>J$PD6h8Q-z$jqk)c+0Fk?bOm
z;+wa8@8AFb4fT7M%T7QOs}k&79YOpDPl}By3|=(A;6A|+3>hXqCK>8i#K#mvP7__G
z=NNJ&P(<RH6TT++zL=>Zh|h`7-S>$E$&f3sl%!-59)-3>d<C<wODlKWGCo&mw@Nhk
z<C3N|B4Ju_5X2oKMWoz83M8tQfm^XLrUbQOAqd8Vxf;3niLYSo>mrm$nhjjd#SO-6
zJeRZ>a6moZ5?~3;rT7d|`_5S_B`czg7(by<pZqIHzJ^1=dPOT9;86Ad&l!0o4VEg>
zG-CY3CqmL@kh>tm0h~8!PuLRVf^H1aoiM}9j_uK!HxIT<6<!NcLoi-%)zP|dMOVTO
zC-dVfhBV-M@vKZkc9qBxa&38RL>Z+s&Tzb7v@S*TC+Sw3v{gt8e&$KWlBh1wsIw7r
zDMkt6R&`OTjIB7Td;;(4uK@pb=}gkWj~*e&*HO{)vXTNGC#sBEC7lM}gO2%@a3-p6
z;Y`%qe!d?OylL6=5wS#q|1AX%G#V(C?47VA9Q)2&^iz7SikEQ&6)2b)ONdOm_$C9T
za;5<CK<v5<*qWlmz}0mCYs|n>6krJtVi{{?oX8zT%7h_)4BX4stJ<%#(dw0y!K;QU
zwgP@Lt{7)}U8-8p>x}p_`AAtVW*;SpjLKb`kq${PmSjz39Iv^J2*~1}CvAYLtwg;x
z<Ig7RDx#q!Q44mhD`z0o+=_fm)U80gV_jAtQj)dnw2mhebwTPUpBYTlBx<2X1En=L
z&QG0I&H9YNE1sf-5;aEsjM~3euO5S5ZlhL-8oe%96T0Mu3I*|P)Z-N>uR^W=Tfc`u
zzB@#vg)8s4gw-gsaRwf01L>@cow5I#+Q-vWuraP%6$o9%!wD<gz7A9cVPvPFO$fXs
zi?M*r2|O(XX+M%tFC%h`EKgq*<#~Y@#0U!0*MxAK7a|-C$C1QI`r)w{0K`GsFZz1l
z;X^)p9?fxKA3e>AAvR854I?Hl%`b4gj`p)rB+3z%mocMhSqRJ{N#+9dG#815kuCw^
z8G0H8SvgMMU?mobfq6P8i1fucBMMSnlG#X}^*bOoC&y$~-<}c}HXP>okPbw#Fi^#$
zCiz896nM-N1fQ-r|2_{YiV`OyRt8yOvK#{8y!5po3I<tz35CH3K<^Cl(r@*h88}-8
z>B>y@Mi3VsEU4-$t2)XpNxm4*^-4veK8Dqg%*%3g@WhFwr6nI=dc)GGSL5EBXX!vp
z6tSVCfXGE<nv>``B(V$)PGZ;~$8$x0A#skAMI^@QXxT$xSRrpFb~%c83H!DaU7P6g
z(o6Fkm=x$mMX)a~15J*nWndW;!eL<v>l{IREYEmQ7rd;Tm!9_NhW)@tUlEqjg3k~z
zF+RYGGU9k}-|ZOUWiH4C@{Wy3Kv}1TdA(k0x+Jj=A|TA+fZ~AMBp>2<meqZ7tl&wV
zTs~U7^ki6K7dck+(l>o{f8PMO(nr(%Z=LP!KilV}Pxken^yvruSKk=~fUm!=f8fL|
zADBV%>AQVre0_ZY(oxrth$5^EA)-%vOD#_WvV<N4HAEEG7jP=wKua_O8+kSi8xmO-
zKwym$WC|@qtVb$+mB$sh-eBdJ$QxMdXDhOAKUY0k1U3kk=D?p4&Mj<W2*E`patJa+
zsL11Tlt=}h&+&V7p!6~g6Z}F_58oFIboZ$HM2JWbpLpRlvjTOiG&Zc3UQ*Vm1Zlkf
zjU{YNe-YoH)_bRk$MAzdqxh(1l423f5*3zMvCFJczCMkNYGz!Mv}#^Lk!Tpag>OKb
zUS0ihWnysVeF<DNBQ6N@;dz9l8NU#S;dGZ~E^zY2*xbw<inG!p3Ug3EmS@=IJdqiJ
z5662WxNPi0NRW9#2+TIC?@BWWn`|~vQ73)T_>cCXFek|YArc*4Ira+3P*@0{ur%x|
z<9b1E=`?gNSBb1=D*w0Laqr~jz!z^m?980ra;t}Wa))}<dT*}YyY-=3f2M?c0q2P4
z*t%Vmh#w+0gFbqW-4uc^w5KC0C+rZb!}ORegBc+62cgDCqA^*|L#Tq2pr1&~f<Vu6
zp?SJvr6+&jnkdYL*$9U7P#QxlBr^`C%aC_Sq^E^2tX}D=*GyrS7x9lK%^YD7uUSOI
zhgi+RMxt_Dv#hXCsWnpsEo&w;Cuvrw%P1VuEE1-mnWG%PsF@f+*2woXD~d*0p3$uH
zl8gcinsrfsiZ}!z5Fp)U%`Dv(<t~qi-%2%WK3_D7VKn;`u)iAA!^0t>CGeQ;dd-dV
zWdbL~>=l8(0ymguFQ<@3O+_^7W<Vo3jl2b;sAdJ3W?|Kgh1aatX7R13neiEoToCa)
zt%P4Eeu4A6vW<%P%~SIni~tdP+KLbMf~Q`B&-aE2d!5p;c4&2cx7MSaUW>2CS1<n8
zN_ZMJo6`*&Z*0D?dTGZ|tJv2@R{eWcqW%h5@;?mz8hdj6iTM3{|LFMs=C{f3lCY$D
zrgEOC)pvnNYum%>Oq1HunQQ6Hnj3fB^_wl}lWFwebjFhz`?4YJRo%yP?&GVMo_U(n
zRJ#9xd822uXO9>qEtkn3@{g2t*Hydzp|Y4p8_SudE%M8jY*V-D>dCo!QdGsB>gve3
zI#LvtzBv!yXy0t#BWyOW-lfKN8xN%iG93@z-k9B--6Jfn4!u*zorcD=_3kC*(oTE#
zR{z%Z$ER}bCzNsJcDh56H!dm{pEfn82ktH?3tQyY%|AG{96RlFdH*F?rm<PMy*c^C
z#P3X*@yzW<lV92&*&keecvWraNsXs&uT7>V4@gF0$)HP(?X(_B2Y=g^Zd1mTv8|5c
zi9M^?b`0CC^?v)^cCgwF)!mtMcf$Vo%RP#M&Bo@<kM4hZ_tVU{+IT$Icsz9;<D1gf
z4E4yYx{v1EM==`kFJC@&xRvX7&ZW-n(r-SpWxLO9-%#n%96g$KzERrSsclTV?|hc}
zY^SAFkrcCHe%9Q&iB0d$IMiluuGy=Y^8|W^wwY}Agi8B!v>#|Z)5*f>T()~mrN?vh
zxK6p|H`2XR_oOdQJ{-urnVEYq{BT%p?#?xL|7rRg&*KmN_<`Dd8Y)Y!{)}2XkgFX~
z9Ru6-|8xvx9YecLch=)qos&7|WY#&UPe)bfSk5_?b&l;h2~Rylh`UKy&O5u>*0o1K
z2PUm=Ncs19-0ZqY?h&{LpVzmhuirhVoZD$=$sX?ALb=0z-}txPf4Q)I{m+-w!y{_L
zh~iiLPxITsZ_pN(JN)*x|B3s%3s0_p3y=$H!v!7U^e9YvY$KGZR+~CiXJ_hs>ijcs
zLvy+bi<PoI0}1sA&P!>wUB+@i4|105-FbGqBiA{!eN*k6Q0x$?{pqu6-O+5_(WkI=
z>`BLVSFY3l1h(HbZvSA@3Dyu6Tk4W(Zd&#4x;*zzDJvTzn<J|0NX~Tx;><D%JaL~Q
zciN6-5dMHqnOs}X*2?zS<6o+6BPqMmuYZtoTCHx$R<}HLG(zr5xYGUY1bx1a`g`5E
z3oZ-Xjut)^iN^J^t5+5gmlhHJ@kZzs=*Q|IxUOPhc32#MHGDTq{m|{1NRotvA?ve*
SC;zu+l}WN`k9c*jll&hMGVr$m

diff --git a/examples/only-model/bayesvalidrox/surrogate_models/__pycache__/bayes_linear.cpython-311.pyc b/examples/only-model/bayesvalidrox/surrogate_models/__pycache__/bayes_linear.cpython-311.pyc
deleted file mode 100644
index 2111e7b45606ee6d23ec37bdc6af982cf6812b80..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21670
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
ZERYEecHFXI6>Ep23Vig7buy4C{{IWmYSRD!

diff --git a/examples/only-model/bayesvalidrox/surrogate_models/__pycache__/eval_rec_rule.cpython-311.pyc b/examples/only-model/bayesvalidrox/surrogate_models/__pycache__/eval_rec_rule.cpython-311.pyc
deleted file mode 100644
index fa3d7416568a694823e30bb7eaea6b06ebab9d3d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 8179
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

diff --git a/examples/only-model/bayesvalidrox/surrogate_models/__pycache__/exp_designs.cpython-311.pyc b/examples/only-model/bayesvalidrox/surrogate_models/__pycache__/exp_designs.cpython-311.pyc
deleted file mode 100644
index af55ca5d94d223a3244bc9ce745720acc2da05dd..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 29639
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
HE5!c=3O_>^

diff --git a/examples/only-model/bayesvalidrox/surrogate_models/__pycache__/exploration.cpython-311.pyc b/examples/only-model/bayesvalidrox/surrogate_models/__pycache__/exploration.cpython-311.pyc
deleted file mode 100644
index 092cdd70d05ca0bbad7579aae82369478a7b8ae1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 12548
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

diff --git a/examples/only-model/bayesvalidrox/surrogate_models/__pycache__/glexindex.cpython-311.pyc b/examples/only-model/bayesvalidrox/surrogate_models/__pycache__/glexindex.cpython-311.pyc
deleted file mode 100644
index a8a22b9f5698e86415d782ab9609abda6c9b4508..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 10191
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
Gmj4SQl)Y>K

diff --git a/examples/only-model/bayesvalidrox/surrogate_models/__pycache__/inputs.cpython-311.pyc b/examples/only-model/bayesvalidrox/surrogate_models/__pycache__/inputs.cpython-311.pyc
deleted file mode 100644
index 5f8c85996a9c8d48326d736211a004c9f09844fd..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2846
zcmc&$&2JM&6rXjx#BoXZN>!kw9aV_bEwPF!dWcFSR9cEea{ww;!E`g;89SS<XU)tS
zNW_5y2M$~-RH>DEqC)&Lw5rr-rJni^7=;rj-g~<{PU0%+t>gH4X5O1OZ{El6<+thS
zI)h;*@2ejt8T$tp<){{u?M0Y8VHI|nN%oLQ?`egx=kU$PO3tYOXJQY>lhy02;fJLt
z{(8k?`vaIfVT!GIlC4yvw=y9sD^)r1kgfQ#3iN>V;q-ybzoPqtRQwG$);WxeJdB04
zJWaS%ok%O5t|>myp)#q6G>=f6_k|HXl`3PK_54_xny5WUm8Io^8?^jJm~Ny+Z22Nj
z+UvB3mzDdtslwDY`E{lED&1k5C3m$+2d*Vn>2@sA6tuLHBz9`9bT}{_H#I`rPGWi@
zjS{ffa-(h!BBLaSU3!mHeWj(+Y5pFkY3yBJ-V?oky!%xoT^eV3C^T=Y!dsFH3%A5^
zayQc5#oRedOG}*GY@0&LpjUe1!v?9^!FF12esZg+!NvRnpZ_j6H@~l-jBFaD8-0=<
z=m_7w|B2B%;ewkB=g;!<w{ly-mk@BH&}};5Vbbe?52Z*2?ua`gjzl|FXUUCuG7z)y
zLN~gjG#UFp_<_s`$eas#U}-_-+z89sz!Jgwnt*RnCtY@*1-MT`da!cRl0ltRmcMFL
zvMCpytUk)dXI@sdD(+Z3!e8qz7F*w1sEn5RAz6#pgs`nkNjT_1w%OL@DE)fSZnedR
zvgk``l6x&xBv~ub@y0?gkt*IJVF$(}U6HDQxVBZ4NPi=%1wo{vGzd0lD94)R8X>^W
z0(ro;PQ3f5`gmsR<oob*=n;Ij@uj<5f`CLWxdxLb;E;6`q4BG8M!AE(sXtmhh3Rv*
zd<yc<-5C!+4PCf-n*u=~BPHY#*Xr(G2teFHz{xW!hlK)S@ZdF-4vfw*2G<45IK|6}
zRy)L(8xsbt%npb?7JODKBWM7RSspPng%Z=dDs%H#?#o@9XYj~rAP?B^D4UvoJo8s=
z?vL8sFKa)o|GfTtt?_5A@uK`QZ-L-)V-n+og&YJ~J;3M<Vw@igg4+WT7o5o;kVy#J
zhx<vq5rm2AbZpRxMb}^lF^7OWW2BO-H5e!&7&Utd$OHEoR!;i0Aw%*RJAUd#b#_>-
z_<YD5sZIGG4cR!!FF@TPeBCG`xqTeA_BIu0CD2wNzEv{=Y%%K^i7rqbFhpbP06e77
z+P(^-P81S4Tb>Z$a0iNn(Mp7CqozaQb&&O+Iu2pyBDc_$ba#{<h^WPdBYpe^Bpft5
zF^HibSiU-c`d)DE^nB5GM(Db)J`|%C2tB7crV<mg(C043ZWzNUXWms<jF|@wCNW0Y
zexfD0FfWju*Kx#ty3?uJ`J5ehQ(5H*xyXevV#A%dct=DrLVHnr2&3cgxOuC1MK2*h
z+wTd5NZ!47VU2^|tCUd$xGvo!f^nI1@J|t}P@V<>H6|zx;$a08D+20GpQ6|BvnnP*
zHs#`%)km(+>LXWVlZB;wL4k^I^GJyq4p}e5eYODvkaZT3b!zLxTn@1BA;4~(JVih6
zAn)KK_!Ma1o5OI*96@pv$uT5U;&0;&F(WT<tR*U_Phnygfb1;rBUs=_&iMYRAsZ*T
zCRDQAsN`rt8h79Fy7qYvNK0l8MA7GV707VH^Soj0V-HYboV>)nS0l#v-U$zk7$+}r
K@72FB$htSG{Nlp^

diff --git a/examples/only-model/bayesvalidrox/surrogate_models/__pycache__/meta_model_engine.cpython-311.pyc b/examples/only-model/bayesvalidrox/surrogate_models/__pycache__/meta_model_engine.cpython-311.pyc
deleted file mode 100644
index ad054a2ed1f2ab163a883333d0bcc716526bc051..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 88102
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

diff --git a/examples/only-model/bayesvalidrox/surrogate_models/__pycache__/orthogonal_matching_pursuit.cpython-311.pyc b/examples/only-model/bayesvalidrox/surrogate_models/__pycache__/orthogonal_matching_pursuit.cpython-311.pyc
deleted file mode 100644
index def10cfc2a4359d25ec4f385e263aff0d27884ed..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 14816
zcmb_@ZEO=+nr@Z9;y6y6?=MKG1PDn8X%Zkn`09|52D*W!p}Vs*eLaP%oH#gksH#Am
zDbKcaXQZNq?wA%MOmDbjM(J7iZLXBLVkK7EmFCC(+drw6rLjsvi?p|YjC6ICQBUhi
z`{&;0oU+TVkihodDaXfEr_OoLd){--`<=h7uJ$pwqzYC1pZgi+U&%x9@)T~qzlNKK
zjKExD1XgfF*=r8`I-|}x*EJVQ>ReIxoadT{-n*j}bKYxS+<Sh`T&r|2?=V8e&l$lh
zdPLW6T@3RLzUFn!CpfM!eU(dxeB+YHE26-~W89<^;m$8axuHYc(81CDM@A1F<%ahU
z5Bq#?^9#yMTpH!Vyc7|9e<V;Y_OV9I2ja9O%5q$~5Lt}GP*e3@Bqs9Gg}5L_@mLv}
z5kohFQ^7>YQ5c*2xbb!3`~8<F9x@7xpTeawnX;#1EyJknZ&Ck^_0ImJ5Qv3qmO!SL
z3KA`O875;*y!eLv{ubYFtO`54r7DI2fgBhANYL(c8&3X)Y&eCuVmM;+hD*LBDTY&C
znCo*G?4rRYWYUh~{_Q`Hk6!;!7A5(*bTd8^o#A=;`b0dmFek<o`T9E%<?O<Z>o@p>
zDBtFz5kZPCUKbbnx%sFlUysM4iG6c~avNI63z8I{#xe!zTeOt09Mka_9}Uj&N@yk$
zn-0z|Nb*8N8JtfTu25W(q*`E9gRgu5#b?Zmsv7OqFBd*vNL{|WcyICUiF+p=*DtqZ
zx-yra?E2gG-?Ts3zOr3!8_cy0>Q#eluEFoojR}#WcomoM`{Ss2$cW4}7JCzW@|v@f
zsbqvI!S!?YnoDqF|GDWd^pG8RtwQjk^a_<ID+M12>o?jiS#!8hn8N$!4ET4kTs{t0
zVRuEaH}6E08LrfYEB4_Eow!eiJ{|PYUhne~KPM_!1Nykny69s#q68x`ybX!-3OCB#
zh{vNM9~<D}^9lyyqg?OAnaQya-@D44;I2vwVjt~B(77`sDl?+QDRC~uM?(uytO$o1
zt^_X}$LpDh%+ZA!<j#dTSyU_t=o#jtvN*uS;$^+=M50mdhR7|*IEay$1s(X9b0DMl
zii6XGoWLtQ2l(RRyci<q79i1+kKz~$2`+?fCQ72vSD-~GKA#9q{kUlYXEN^rZVFU4
z5d)ZrC>-NNihD%i=J*5|Hhx=_?nn_u5o3h`QE?+Ki*Fina_qe;XG)a)sL+d0jgUFU
zVVM-{YD!*8OLJ|<6h(^MSWv`G*ESRv!$AzqOA?<L;N%&8Uc@T)#)4rmxdm{l(vah5
z8;*n`<Xm#`FdaxTxf$7SbWE;y4qJn~osY|)YXqw+L}U{MwCXdF;zLU0wpcc>pd{$P
zvH3x=y<U$Ap*2VLO)MVUw<Jo~TxF;YaFb-iaB;Hp?nGqK9P$G(jAf36Hm3v50{1?z
zL<YFO8XUkWTH+%SaBke<@m(n*&&2q7iI;g{fO~(C>m53J^g!QW`SB`p6>H}fxXUOf
zi6I<Q%$Ex<#4vHtil3hcAB&(5d7>v3RnbVutiTSv!`~L8W#>Q;L-9G#G(vg|a_>v=
zkSGdRZ@Lu2hjG@&<VZ9=$4lIJJXV-1kx^G7(>SB@fQ8tV1XgBF=J=R^rgQVy8<IT0
z9o)a~;K4!K>gr^uOgb=xiBZ{ek}@%sRheLs!7-`>PnL{Pop>rTJw|om$&xJskq_*}
zK9^B#V<|>uEH2G~w=ao?$2@*UMd4IHj<{qo8kU+cpwvu?7E-jLkO_|DoO4nDcZN3z
zHU(Z4T<R{dy&~5uFulQI8^Yn`ohUwIUhWvsTsd!hen+q7x>u9mu^T^C`5is@@oV@<
zb!Zo|=79&IZcvJ-C?7H^Gm8rIlA2X^b9pSVPaSrdnPj(+!VZ<4wIuLU=WjvLZ!D@N
zLGf8@eWZV}!6+(1kp6<}se40DC)Uon1PUgxhO-qG&Pf{#$ba(!7L~<&!P8c}1?<;g
z=d!_~DjVr&tA(y$Ucj<~=o_!%s+5L%MUxRcOMpu>jt%s5tM~}6n{=&80I(0OS|W%+
z1=kX`P?C-H*zo#G&b->1<Hl9@;LOk&BptD|ZG579(Ca@$d8ZB5|L0s($1FKj^b$Nb
z>F$%Zm9Kn;s7tS0f@{N?cs9_uG)KpOV0U@2b`EeEkLn7$!B4#WKZE&<Qz1?{nhZrl
zq(a~1WrRPNuVqse0CSxIbLFU@qSAwp#vwQPMJNgTsRCkSPbUiEM6wuY#FTwgM62LA
zd7hUbZotc>$Rbr!OqGJjVl)uqF(?KQz>roZm!mx10v3X}l$C<kK!t!P402bYBU#cy
z5+R9WG8MS8g6?P^lDU`&VJ7oZ0ve444#Ea1kRmOF6xu!#1AnIzAAp(=3C%#%i`-N&
z9u7mz8sHMv-Bgg04x)D<G-JV2W_S}&d_e&utDcZ`if9T`+&&9jANLmSDHy9^;hB(v
zD1Pq^Q#ue0p}c2ltqk^ESV8W%B#08Zp_+k2w%^yR;UbIlM<Q(`!o2$Gs5Btj`+Pzo
ztj4H-j3&B_)JYl<sevj86MkBx;=^!ZJ!Hd8H64lYA<0h~Iiq6CaFIP>xXGrF4OdKv
z%o#4CnDkXhgqaxZltgx~;Vsh7s3=SimW?79-Xb++f*m0dE>k$w2InOaLZ2*Ikf@|f
z{jU*H8`_Qnn*3id?a!F?X2xH8@7OxSR(9uW>mGW(@T9M#JbG<cuC_}X`_5l;?|kZ3
zhFz&x^Y`lh-kiTzV_#MUa#bDcOnv347cFfMmNH%0uC<l{y=5TRGN7H!`>Ru}cQ0sT
z`9Q<HpRF^V>Ju;8w=eI>bgk^kcCGZUjy-#4t^K&(emvKHJXP_cx%I*H;~UH2%;hZm
z<mxKB);X+q4(B?D|8D#_`@6|!lh22KcUJE_p*Nq*HJ?m5^SkzBo!MLe&AW0TRgre4
zZ++<nzQ8{9@qK@aO|jp-ZZsf#Cw=Sw(t{;niauxW`?WF56!nW_o>_Lqx7zh=&sxi<
z-ZGkN8P(2G4AcDbbcSD^U1gtDtTi9en~&t0k7)1Y1GV>Vr|UldsrJ+Sw(ZM@e|`MR
z<5~96spV5CZ_4}KwvOc^nX#33vSTafSNUhtYuirh+fL@TolJRO25M7Xsj2j0wq-4_
zf6cr9RlR`lT&fpnkeeH<bnq?3lHm+9Yu!`50Mh;&OX6S0yCe%a&z3B6TIWncquSgy
zCw$Q^?XN>eAW)L-q$gPc$;bpPtpWU#36^w)3OrfbfDKDaiexNJ0CTi1$ZzLUmwnu%
z7r1zdbWT>Pj-*ea(%9@WTha&0YfJioW8*9~NRujX|0)XGZ-Yw?F}-ZHB^kU4o*7FL
z75kE3Iv*UhZwQy6S73vdAvjB#MY3A0_A|*E!I=yQY_b;Lx@jg^k8gtw6HAt=8|7o8
z(p4M@nu!zdvHE4&UXyJ-h$>1i8}#~Ot=eR#*Am$S&6`6=w%A}aSTI~_Q+T7!(ux_j
z3GQUO4c41>htH0U8n{XKc*-F?Rom1iQ;)kzDUG_{sCDzKTC3Itm?f+yY96U=g45LI
zq$V4-jTW|zYQqMKH7a|HZ=rW?zR&z>rM;IO)8sZ=KVo>$OWme6mR5g5p9U4Ul-?${
zQ|#$Em+I9TsaCDF?VZ=P-zRu%7?e&3G-jdV7Y=oM*ijmb=+Up%+Gj{lO-D?51Kj#@
zxU<CCGH3qp7$MpD2G~Cu=cFI}ju?BdTxy5fsdkp(=eIj-lO1Y(rbM8!{_1x7y0OGo
zGO1^qdveDXvvH_9?37J%TeR#@xeYD5)GoDEtykN^4r+-onf5Z&tXp*l=I2nm>~m6^
z)i&D8vBh{h(8I<(h@JE!Ij~Rl*<skJmF!l1YIlJHAGQz%-&Bs4o^ZO`)h5Dy2nKct
zcIe5SHvZQ_=2%*`4Q*S>PE@tpTz;C=7L$)8>tdZYh|TIw^ztkLxnGo>7&}g--mr^1
zit~_mC?|^dkPO};oWEg&N;{r{?{8d>H*j|BD>5!*P_peW!8O4{Ht<ZTawErFePr7i
zJBrwYRuw|k*7Hy9Qd<jWU|0G1hhD&0Fg9%=_)Y$dmX;g?4ZDlIq{DbB!KffR#|CvP
zJ_miJ)UR~T?K^_(E<oE^94%HMfMb-NRpN81<{v`DSQg1-1pdn(<0v1CPRHT0otZ0m
zY>8IC!DUXWEU)>#eb!i0qufuaJ+dzvxd}VaW-KO&6(qy$Mf|O@8Pb3Oxryr)(6357
zyj!p-iSaN{FgFPR__d>aj920?1aBkQ#NR+<#PoR*tP%z1E=9l^@RLmk{M5pm49H8<
zq5_c7g>rZwn8v8pvM_7wnRx5qP>$c2g}2?RC72X?!o432m+ZZ(eGY1?8I_4(3_%|$
z5~9|gME36VmygKx_opPXw=OPKorABE+RvlhQWK~UhpqhHrAy-<aUudf5(Zv!4i1Zd
z{J*%Si<_cvmqZlbf`J&0#(8DrpwvUEhETw9xELgsU(l!sCg`2vK^3v+Jkbc8r_(S7
zVZ58>BGH2lH(c(LXt;z(IE+YFEMa&MLy1j`hI1|gL-PG|7bm6NWQ0D_+=B=eiLVfS
ziL{)a;}HV8YSi6`#zQxWlNzo|SgA5Rpzr~RF~O*e#^XUcDS$+4CqgFF?P<8@CES}}
zFqWJ8@bO4}>ZZx-v*IhkzTMPzl?Dhh)OxM7*52@yHk;v@DonjV0yj)sLIE=K;1qdH
z?hN*WLRG?GC8L^p8-TnJfn{s>i1R*3>x@bmv7v|zceUX|d^4H=xcI!`!&@OpE6AJ#
z!yQ4nXn0U62o}0-(%E8B4G#)JO*+Fc`B}ic*_#GCW4LH1_JTxIe8V*b)7o%cy=u5_
zhzei8@B_n3yF_B)!X2Q=WL3y^eB)&r?oK#^mO8e!)$#f#fGGcOXttj*KXfy-ZRxu7
z*jFE{Tzh_SE%3G;csmz(`>so4wV^!MwNjybJG9Ew=*yn|KlB{?w&&RMvFEq+p0Qld
znC{(4T4~`_I4$N|JK=w>&bM?BH*~&v8*xhi;9=?;AGAH}{Gv0%X4zDyUe}+i>(@N_
zy86_}{Z`Gh?qRBHH1<VZ!-EzCE1NTHX6VuO<?VW1Pp+;94gJ+x`0iPa1*o=d%igcL
ziH*P7wbp%5?>?C8KKO_3Bj0u(dCsqOAJMzt&UL@N*7dgDI+kl4`+ZlgbwaDoxAm+w
z^=Lkf)YPn1=9}6ypIOw@YR-IZz2+vPx1~pmW4;K~r;es)^*~=P(5Jax)YRUae(YGT
z$haO=FIVd|yEP}pSM$86t$*N6_h*E)w!M1oK(2N`bHnCG;SW%hYwPbNe)+S{f0pL;
z0GA7JnWNtZ2K2zd>Y?WozpwlI$^UWccc=2T?Q6BY>DlbH?7Mp4@SmK_!Etuo%hWcd
z+0U1>r5BiYTV^DCNN*d;wGE{_AVpo{uTDRhOb?~QdgJa~<8HmSCs*5}jlF1WesC_$
zXFSUhy|Fjf*sGn%H?*a9KRBUHfB<#P>AEj`DPIQPm#w=qe6F=O<;I$&#Rtiht8CDG
zV-u$AN#DxU(a%JtWqBz(l)X$otFG+FPe=9EkzDJD-Z(;CA{dz9bD4ZH&h$siN0*Of
z*(^La_*~8IdFs;}59AsTq*#Jusi`ad@$zWqR<@3QCbBInOM2sQu5mcU<{Ml8(AfWN
zV?V~_SL>cNtnzx}kzC`E6ic>E?Jv)Nem<q>{_Q#c_BH=@)HODxE|X8%nfmC#QEkH9
zf6Zw&eenK{2RpRWFB+O2jHJ8LAKX7dNRsDvX=hS9Qwynn-QNKK?VZ2w{IWCaBIB)2
z=xs-HZAZ27l>6>^LcMxQ^n;m3y|E|P*aM<#V;BPdrH>zfu>4VGEOYD8_2uh&Q-7|h
zUz;S}pUL|^+NO0|dgyT|vl}GY^|j~8fZq95uJbLuWq+<^KO8_!t?A}WL*~PkcD-pJ
z*EFC_z6>;)%b)M;%5*J<vz~7|2UA$L@9?}cGm~9dz5Ml^wVsh&_hG&BNUrn9^T}^J
zPh(x-6jRq3NA=zpwN3E5we)AsWV@ccLvLx3Z`+>!aJhZ0xo_Qx*R<|W3|qJN&!oU3
z3NKS#k2Hew+L<4cEVJo0UMt_mtDA4*A5J?MEcem$70j+X)37|HH}vEhdNgmosU6#e
zd}h+ea!q@{E_~n`=`s3QOuw6J?#+&W+x!;cBOt!NmbwI8m0kI^j^*}@sJHFaChncj
zckcR1TDhGKuL{p*pGEaO<GDTKdgnOaUD7VS?BvJ|Xrfh_?k{TIf&r3?827~7{{B1)
zyZdXF8u_Ru!Iv`UmtCF18_QfL3Oih2B<qId|7*DdR|s0l93%|n4hbdOg3L5FjDWX7
zG70`tI$N?#NedF-TWe}$<R7V}y-BM|1mTAt<)9$VC(K~IrOK6bM-#15z`h{i&LCWX
z=mat!OkIxjRH$-?*l~<25{m1M42pwhSR@{{X>I_t1*uDe^|`2iB@y*VdY2RzQ1m%V
z+K1t$vyjOO1EMKjD++*@y0#Xvg(m-seua?j4;%v#<4N60?^^EHYj@{rcV}Hs1A6UY
z&5eUz4A~N`uXtIm*|QiQAzOB~_=cgbRX9m)rjxa=Uv;b|D{L*T9c!zljxI8UT7g6?
zn^7*XHgnLz65(OM`o@Bn^x7bnW3<6Zh@dVEp=714eaXG+v>UrgnD}t3QFxLYj=d^;
z{Ro{~Bf~vyxr5b8!9_x}b{MLUx&W#+?_;aAoP>Zx9K*nr^tHpYKNX<cUA&e9TJ_so
zOMV+Y0pGlm_Wl^tylmK6j$=5U!DPO%_>}#LIC?=d3P5g9wiRJveXH#)1-I$sl+M}4
zDUEKeBdBb-pfi?(xCD8F^U~^vy=#SDH|{MvF7_wP!L51<*ab+a+zdmL)xgSB6OKzA
z#x=36C|aZX)tV)^o8g%AgEM>h|AkFsF^lnHl9w6mBT02;&J{HIf`vx%cFMAbz<>%*
z@lt@*jHPlvnU^C!LDUct$Z0V~3_p^+H6z;6eYhJu$pHf#lEXuCT0R*r=Cu(9NNP_b
z?`)1_ti6M5p5gubj}CHU0*~x92#$h9J|B-JV)3~Mve`m2e4M6>@iAh($V8l2GbA99
z#Un}z%yA_Fz8Ih9k!VQrc*x+gh)w_;!8=&x(S(e^XD{*@VW0C+8yMt8A?=aGbK^j5
zJSs|a@tCr25=I|^G+fL`qq7*c&4LbfWkEn>cz`=iCp9$m=1JLxhu^@QV2OfA>x1Zm
z8H)&dX^jTC^KrzVK^X`Rl7+Nj;=Exx@6TYaAtVwFAK2eJ(l@}(&kqhCICyB^@PU!T
z|6VC<VTh$KrlnCyM-$UZqOMH%mP8OCR7r}^X<;3S(4#x25Xde#T1p-WSl%#T!z3>h
z5&Yt)7A6GhIny|&k`wz6tw}7OF1p#P1T9enusPaxY)v1FT<T2|+2kS!8x94nM<}ig
zQi!n{Rz_YKh2Nx1Se^xpL%kukaW2H+)IjcHxnHFWIQ7K9XTyP6m_c^JmuNViI$S>c
z`QRAh^3=ORII*b^5H4$Y=N6($WImcOymZ*1;Uk6<E-R^*y!FVp7Lc0&e}EiA6dt|-
znEZ;wheX52D|BlHhXv|Fk%*_+aLr@oq;cH#1<d%o6T8N!v9G7;^FUr1k{4xzy=buS
z!#yKME=XaD6H*)_!U7*PT)^b7j2i0h5a;Gi--|R!M^dEV1;cwa7>1K2F3E&flWkFU
zQEi5{UfNmOgBR?1x`P(w{|_L@w;^i~(SIBEK*PO+=_2?6c53~-+o@3cq#o$c1^P7?
ziRn-NYWTsiw34}^H}vHi`c~P0tpA5?YyLC3|4hz*2Bxu>m<1#0o$1@AL6EJ}8~Qab
ztSJhPzni$1&|F9aNDX~{R6CmQ=+rLeTidjA+PUvKb}WCKnabXJ@`>Itl<OE;-KBSo
zXcxb0ZC|eV%CS<J?Oo*&*bnLbqdIpi#~ssKkLOyCKUehDaqXOm@nX7C4|L}O-7t5m
zcfQ!(xjdPwG)G^A;ai=F>8*!yt%vl$NG>p<x$?lI>+>VpkzdKMB@+)4nFC+^b?UE)
zJ$dBu>E(03zWC+E|33V5WOe7W-On5Jy(e;ePw3lE=C+^I8&2gKPEqq4zKmO+AJPux
zTUud*jy>9W|4ybWBRuKVTlQ*awX;C2wf(_u?d(f$U22LtUS0-T*SxK!>0&8fSPUYb
ziTd;XKVds>X}WCi@JkaAn=YydxyfC5R(>hIuR6D=N5o#h=NI^v``qoyqWy^|Pvub$
zI<_ZvM*-@^t7JlDEG4w~j{I)G)1rdvnzd9$yW(KSA?f~cqamiv6175g6yrfQdi?nD
zJ+}U3YS9+;n^IZz*k@&bf{Je`g5|jyWG)+8dTlK&wb@o%Qh`~R171o8vJw?l%*IIj
z7X3U`jM-21Z0xb|8Ce&VP|aL?9Hg;WJIR%n5kEi<zQmcVwiraXzzJd)|AZoNyv$ud
zQr9P+jB%$wJ;r@9&P{y!DOVCtr=h1%-D3h7_c1e%4$f~_-}rA0qAWq`OYz$g!Bo^D
zL_*EofD4_9N^_J_em=huk1{dy+W3k!sWI^Sq7dUC4{4~ydP~?d8W6X7QF5CT-zP8J
zC`kLUvdO(3(z#cJej#x?8bvDJouXKdOC^ZouZM_`PE1BlH^uIBsoTWsyS)w(#8ym&
z+fu5bTv!BolVWfI1HVebb9NGLru<kVm~k2!!0D?r11?^uxyZ=`T<RL2qT4OUqqh+&
z5fdWS6b#R8BsPX_8lD;Y+vhU{x{EBZ!JanQaf6*OTodHcePx{dIIa%iJ1ouMAjw42
zC`n^e7*C*XY46s;_?6hp1dhD?78S}r3^I_q$5OZMp1gN*ovExm!@g{2OkKWzK%008
zujsAE!^<O?E_nGr%1*3yt&Y);vii=metq|e-0l-*(wN?I^7m}6`Ly16S~~;RA3UmX
z-aS0^#i`8DS2tF|*~?EqeiC1a>kT8hh7oPzJG?&k@X{BTkXl!lJ@|F=D*JWolk0zX
zn&i~|!{OgudUi=~oX9m!XlK5w4&3`FHSxH6xd#sAA^H(AhgaIOAL{J~a_tB7>VvuJ
zgPP+7Z8(-v?gsA#H3x7&#km)l-no>LKAn~xow>i1Ih{GM*1X3|7^LsgO{v9<<Ni-G
zXV#kG%-x&w?_GC0TWbEqII9DHCWS_w>UElzN>k+ZU!A-<+2<p9_%ZxDQ7~xug5=+?
z7NX?d9}Ggjix%Eg1cO366bwov`+-K`q&T^gNI`TiiLBn&3<Yg2C&^EeNI{aF<ohT-
zvp(yNPPccRAqBLl3HB_TZ|huly4`!$8GBK)%RRKtSjBtnn8V$;&Xkptu6j58yjIcs
zF6(YvXUfWJj(&IDI`e8_VoPxBtCAk!$8b}Rop})a@=a*5Qf!b|tP)W+jP_y`!i;!j
z{<GR(kT!6U2Gzv|3rG=`%`hgh{V5@&FUcLr2%{AGH}7$i+9#!7qmIZg`8O!wlxE@J
zcd@Q@h7>-AZCGRK&A&XeXU+bXXNK48e|cu-n*DFx!?JHd(<>I<>uwel*}TkDW&hKk
N=(|5}(Spw5{{c!<wxIw3

diff --git a/examples/only-model/bayesvalidrox/surrogate_models/__pycache__/reg_fast_ard.cpython-311.pyc b/examples/only-model/bayesvalidrox/surrogate_models/__pycache__/reg_fast_ard.cpython-311.pyc
deleted file mode 100644
index 87e325f39519c87f046e35417898743d42e70b28..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19769
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

diff --git a/examples/only-model/bayesvalidrox/surrogate_models/__pycache__/reg_fast_laplace.cpython-311.pyc b/examples/only-model/bayesvalidrox/surrogate_models/__pycache__/reg_fast_laplace.cpython-311.pyc
deleted file mode 100644
index 9ea9fec9d079257a40ae2d8117854c9516d47a2c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19013
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

diff --git a/examples/only-model/bayesvalidrox/surrogate_models/__pycache__/surrogate_models.cpython-311.pyc b/examples/only-model/bayesvalidrox/surrogate_models/__pycache__/surrogate_models.cpython-311.pyc
deleted file mode 100644
index 62a8185dbf2cc3a241d95a03e74c778ad96ec8c5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 61462
zcmce<d30M>dM5}FTmS+fNP-KvgZsWOlBkv9BFU0y$x^v&SuPsl0~ZMdsRvLC3rIQX
zN(XY(ry!3irV_b>O3M{Grn^`tu4!hb(nm?Ea%yJk4?O0b7V<Kh)-3K$rO%v^<EkE?
zI&-Gy_uU7)1tKN7Qaw-9#ar(E?)Ke#zx!?XkL~tc11>%%<URNw42J)m9#U6k^5*kl
zqrvc=firMMpW%Z1YrK%bo=q1_>^Jj5Ci~4=$i9$cq&OKq^Md7qh20x{xfiT>XY$z=
zY!__oU8c{zkaxk6{GPv1aG{XhXZf59MHh;a?~4~orZbF&h0+V9$v3VGE<noml`WKC
zC|{_!P?3CJd7%>Tb9_|`)fcMSJF~B5!F|Ea?k&FBg}MuM>^|35ztC`@f!$kujSEc|
zn%KR~*Syejp@rSseXR>^7upuuFSHvC83wQ6a!0CJxV-P8JwC#J`J(T~44mVe1}^`*
z8Tf+#@^zt;GoCZF7W|AJCtHn@?ex6=wCBdTX^+p#<2f^Um0Q5C>CET|eq6^q%YneW
z$A5-joc0C+uXty9{4DaV8It*ohxhn=UZ0f1d3~OnUJeOz$8Ri+c?0va{s5jVvp(;Q
zc|Yg9fd_~8n#VV_?4Q3jb;%Q$r|$(xc=L<?2~Qw6^2!)q7VBT0@+|p0(_VZidzlZ;
zEzU0bJ-*YP;Pl+QfA-8WA6T9bqBMoC9z8Yh_j-6WwNyC%?7M6fZISm*CmV$QWF;Ry
z|7+a5ho-$?<P1P3;{}t&Aphg)x!i9Wfl>{e4Zm4jBWK5NHkbEJ!-X7b>I-HrAEAXS
zK$weoh4^meoOrTvO<Xaa>|8Tfg5Nx@6mK1Pa^WeTa^PCHGTaxi`&O<3_k~;=SA}0E
zSB=<3tV?UqrEYKWcTMP2{Fko_C0sjKi<qTc9b&pTE4sKtvYhq?J*O9`Z#-6mA=izI
zUb$NW%RIk0>j`>W-3#<Rmwh`wHy?0M`#gbwJIH(H{Q<Yft;CcgcDYXk-Ja=b?@|z7
z{qA}H(sIzfc<HitI_Pd;Pg8hmW$>mK{Xu|1FS&zrUUy*0J3T)$KkW&kx7~{~>?JoJ
z2=eonmg!x<J+sKWm;KXTp3=FOfL;sUpqCFYa2`L00<rR@a=bntoI@D^VtHDI0LXKT
z*WJNIH^1y>IZQ7upo}b2k1tsZxxOPoIcu*Bzf-wbc1mU3!;~F+M=f|lTV+-Ns@%LE
zWnV~EP0m;@soX+pRk|1;RLe8PB1{EuE_sm!>Y!wCF4aBB+ESE2m;3x2??p3i_tEX)
z>C4j6A|Lc}!wRIOMc+;T;=(*?K0W7I47j~FmOTCdbwJBoXGX{0YVAPMOY`V&{-zr*
z@Y=)Pqjxz4OllHvFUhljo0q2n8P2gYfYaq3^UipdeL**n2oU6YE=_x<5O)goom=G6
zs!7>t043v~>*Ox;CcDo&1EiVv`h%<qyg(A4Z}B>?N-5qmK!BTQ56?Bvyw7vV=N*>&
zn|iOe%l-1HbHnbJd2ZfMbw1_AyyHH1b(vDgMNr`Ob-9ne^2)ILDCRbr1KqF8bF*Ie
zD@x^+nEhSuQzNect_;rO$GoShn-XuJ%Z)is0})T#!5i#yC+EXqcB2+yhXg}iZp?qf
z?pHnhd<xf<Vxv$z4MU|Ed%E118He5D3rk)eBhshBe<rS`Ti-&{y(M?-rNzY{P}Z}w
zeb*jMeWt-Lw<;QbNgkur(r-0m5?=85n%^Qs!{ZFPq4_OBa<7|{F-a*dFiMSp324C!
z90qoHfNXxZ*E5Yt0Mmp#`n)%2c4D|QGtZ-M7yaH21iqUJJQ}dmiwv)TRt#6LAb5P!
z%RbDBoLd>yizzJeF)Rsau|#eM|CHJi7)1e~_`E-;<TSawaLLQlWTzBRp5>?rN=kRY
zv#{htQ|YQt1L>{aWP8&<;=HpmcsHg=A0|!)SCiWrb+jWcCX1E;#^s3_Oq(n^0M5=|
z^ZGI7{caEEL4RDsF!9YU@|Z{$D8uD|R~_~kiZfWeSzBK6B0m|b+CCVE^cpyG&D;61
zAOEo$O!JF@Kqr>^d5-mn(iknLUVgdN?Zwi=yIb&|+F)*ec8)*<rm-d;?Cqo|x~W9h
z0#~O9YtRTYzD1AP%EvK3@|PBU^V1CO)lQ1libV`-iHsDquq<G5n(st?=0V6%)3F!V
z*nsgWg;ZxuOgCEG@9pYI_60Y;fJu$p9`ncM7rbnOMg4;}F$Zw+(v%zpY>A_aFD?gZ
z=?pA^w2`}AnXZ(wBxgi)3+N@_C1&j<e%?PlzeMvn)-|9u;V<Z+o1mxMEkv`)z|@i}
z&}hgdM;J|x_#eE!=)Uf`iJ`RU4tRaEhWizSRp1AP2`dyZXzFR?>cK>qT*I-Z_^@8n
zOzURNi4`233p#Ob(Z{)4E_s93y<We&hYj`Ko*tPzpy{|po)g?7t%TFuJceNqb@T?N
z`FS>5P#$VYnp5RVr90ZHncE5Ap+koljdPmF8UPP;rS;Z9cQab4S*gzUiBOHHrD@NU
zT8o43efzrh?c3*e*C!`3_s9!?_!$Vb^zMW1-aa+?QF&FmMyMMg5&-joPXT!b9Ss^Q
zu)MH9%T%(dH7gw&2?(8rq!S)rzzZ~GU?vxXa<?T38}{=2B2BL#l-cl0O*~2LB$`eh
z?u-DW$vfZ;vgrbyjHLp&9R%)ijKF8`i2CwShX>}c7jR!<vp2wVgonV%X-qZr5~%9F
zbTipo&-Rjs<EE6ILrbe%f%Cx6ZSuurG3Q;t7$zK6i5{BhJArZ_MBkDZm$zD}KCGC^
zY!~oeT}CB{B5HX{eLz&XQUQ5hp8z^;mo@L5!F-PK@|IHCK&ri^%t;i1c247x2}`Av
zNsHRgXjk?hWkUVwVJXAEI57=sT)Aj#MwI;L?;?255Hf}gQ_9Cs2A-5{UC4wdWh)oT
z#1o}tS11clsqL{Ll#Qp<uEr3`!Be&p(~PGa<;j94bLxqs+%3wJ0sDxI$%)on$)b?M
zl35;Gmo7^VOi)@fR?5@Uds4o##3d(7DL;L|lyZ_wo0Lm8@(eHK=|`=UlN=?jRw)xR
z)eK*WGD;Sif(CWYSL2zlp}<W+Ed_NH)KkzvK_h|ywLA^^<n_xNqr(@!62KPYB7bFZ
z&Nt`r1TKy(PA?Op2QD6)4<28>bnz0=e{4bH7jInj-k{am8@Na`MJFplS`39mmr4A<
z#q<|lOE)F+)D-qc!Kta0!qcgJT370wm&$q$!P|zXxrXxkNapRlgsT=m_C!rrBvUk3
zCaOE=w<6*0q2DUyx3n73Y>Dy){5X_YrIqwHf`6X_tYLCm!6Q5orZ60g;Vt1Hm@j%f
zG+d@s><VWD6|6HDLWau<q|3^CJv#z8rC=t*FcmWmmleE>DL9$RiGII}{~swYxQr_-
zH~vttKzT`JP;geCbFfH_by*p8%SOIBSgiSCOWp4bNjokO%brScIWKj`nUZC51PKw7
z7ni9o(Qlz$w@qzKrgnu4vHVnO?QbZ9%UaLYvvZ6FzdpB|ZE{n9Tvpm_S8Z)hmS|j8
z;=&ZTUBR$iVK~9phcaT$R7&k{DC4ryN80;8FmSo=XQbCQL^G0g<?q;>PGk67(8FVy
zB#KH|vXW~hO-}OgRERD%Sd+{HEKM?hLfsZIFpNTGG{^Q_1IqOkZ*ZCS%WMOB)-JI0
zOj*l$>3IkA?L3M~-*udf<cdw-rEGcel1!KnrCfE1TG@Ywwjo}k##9<-+&@c;xy-g9
zGMAb{O_W^KYR`XYWE0@ZWHNu+j#KpQ7P*^?%OG5_P6lW<H0KGp{a95m5e+v_Qy)!^
z_;Ax3?2@vVZer(hMao2}c*!``TFh6We<hR8>rc+or#(E%2+Bk<gCruRPC&9N%jbm8
zGs~uLDT}rfJUEa<&esu;4F8gp<L5j)@3|>u$v+k)rId|!L_H+DqCFqD5mEue0=7-S
zeu>zSl7-60*esGGMen4RBkRii(o|si5-87rl<5b%snx_cA#1r3S*MAN3=j&VXZRK>
zQ~osX#V(N`$bGz0ej2wdW>@;RYe*3|js+a^c!|MQ^weOqG$tw=B4f8tC-RH#+9O$y
zT@|Zi_b0{50l_sWx(3-CU)4x+difKpL$uaBvNmp68wG2#Xl-5_+_Lt>tv!z&&gj_P
zQ-Y&bbku%axLzK2^yBYwP3`>~Ynkgdp=MC58H{G$wE@QML!#9kJC#gXSdqv-{h2Al
zS@?4Uf~STId*M^FA+PZE*F<|=Y;Mcm6}NXKZ26CDbz8Q&*x*J(+*T*p_K3DUarXC%
zY=g5BRjE4onZf8h^m7XEXg>rnw*1=%MQhz7Ys;3kMX<Js*0!~|E$dL+I+T!0()!5S
zy=Cndti7VOcjMJ9>;AZPf5KMq$X2ywt6KHmzr6O9^$YQ~Vfjz6?H6tP<F@@z9L|W9
zZ$pbtE9(p%XjZ4^&kteN{2jyZRR2!R@3<ivFy7M8QMU}26)Gxhx@Dks?%6A3($Ah3
z5i6V-&O&M>$C$E`Y18kpN}WPZ%38N`e3VpK1$Ui7SuJ;+LZR~f-`jN>WnJBM3MRav
zy6!rKvM%pBg|c4nI)$=c?>dFDuJ1a9(!RhKN2<4Xg)b?}p={TADHK8|Q(e^=zGjDW
z07Y4)Q{|vv>;uy12VkDED(^aPWxYl{mDFQ~H~*Wk8E=%YF%5;KmO?*L!j_OZ*r|TK
zT$;KMS%N*OdxK#;Q%?z8GxBc)`_=Erw><TvAHyiu1Z$VvuoX3|NX63rhRh-BdX_$i
zuq|ZM)+V@5O%XEd^C(k3>0(*+u?`^C?PIs^0_vBYO;~)s80Dw6^_eS_Mq`HUTy`ky
znt?A4WpUYR>5wz+lh`$-(5MvWpdpmOyMiOBuLg)MwdDjgW_~|yb~Ivy|B85Ch?KNN
zV;5&h(wRA2F7Q!#k2pjGuxnSN$g04xh4bbOVF&)_`!hIuI1jZOO3RbY<9vJYSSk;L
zA$UT)*T&ZOqxK7z$Jy2$-vz9XlyxCo;4j)8q;Nr~V9XHBeDi~FVW^PHzap2ZE~p50
z4Tj5&sWQcgE_vp{PCt9SAPsk&{#xCrYEC5!o=x3hHb}!7eJ#UI@E4pa?z~fjHtg2b
zJ=Jdw+BOVj#ah)o)I0sS=L*-IX=N_*7ws->xF}S_TFuPHb#b@^rTW$8+Y6yQ-l=JM
zdni9ttkxOWNaO~)F!tJ0_uAi3iMEwE`+AYSUKcTT!=>-I!>&*%%BjrTTru*stN_#>
z7~aoN^9&W!Jb`jqS-BXU!e@nCR5JSFH|ukJ#|@}oc0OTHqei|W__|sbeGi4pLS-?{
z%&f+{Rinq0cdA2Jw=OI6$O~#_<VP|L!8cWSTnSgY?$Wnfq&i}VxMxg|iJNs}$*rz-
zoJDOleTl}>xCZ*K;d1|LL6yZuvzW5d+^U&1-r6CL6;N_0laVX`wUh~crb_U`6~Sq>
zMM4$nCH_^~;LWyhWvDz<skRbonw`pJ=U!6da}}XV6-NpCZnsB`xBqR(uElwblD-sF
zaE?v@ce6FPyPMvwN%nT-ucc){>3@X(@`c|1ddL{KnO3T+X&9i;61&2Hs$WMrzkHvj
ztursc8PvE+(+{P=`Ba-=RT)g(hsyQ17IGwKAay;eAxN12hEi#?zqe{`xhai`HG18Y
zaQT<7CuVo!o2B6@U~iQQm#bFqfyv6wWS5v+rN`tn*fl!X${yy|0^6;Ft?YJwEwF2K
zu$6t$uLX9U4z{v``nABW*TGiyTE7}>%t>X@%-gy6|Hq(G%AZTeHattma*gK<^uM*q
z^FvG=3UiSOux21cCf1VMx45_jxiKUWjK?MmaAk=ZQ$YwqItDc!?^5^DB4l?=lr}RT
zRJnx2nNvA`8kQgF(cwc%(TTW#iY`*8QX1l%k+xmBq>!Q$Q&0I$62~O(QWl@4G#!!(
zG)eUe68E3ym%XyUi=gO5kx-goJT;Fhl%z<+uVb7;D2J)CG?~{%>KK7}aQ>j90nV8$
ziq>Su#FLtezle`YqMm0tsKjndGInLnGYv$ZNN343y97BL1h^j>r7Vv4iBJ&CmbDk8
z?4*pzd}9hS9WXgpoVgH49ztViwAEHBG+bPWI7zRn%YA@dxx5Rx{ES1u(}wl@#7f!G
z#YLtMLo(A;M>7_1t4YcVE<$Q5WulR$!Nv?s&(HHjf<dJ*Gcdp6T`8QH4+bfvD&K82
z@@EKsHv%c+($vrX3oc09NQoh-g@puEE&tTz#Y+Jx=aOgoir3FgD@z|z5>ZA=+vjr#
zzHK^bFp_x3@McHY2qH`q^Oi|vkm(nMTN$@VkJj+p86o40hEUZLY_A&LGa3!IJ2^1u
zKQvCZX7I!fk;-P1>Z4Q1GEaF?15Xh8qghf$SC3?x=Wa-**QU-fuB()dhMx5X1H?3Q
zyWf8MZN_u`rRBh^*AGrLe`uvkWwt)U>g_t<TZ9@<;82$mzaDiAQ02e)d&A!wz=buK
zP8$d0@X5XdPfdoZG2{EkVq;>%QK52FtQ<|a>tnC3jj(@#wTTB``^;pl8U&BCYVfH^
zO{@i^y_Xr3nwDk4HDZ%|-h$xU#`g@f)B|~8<E@PC+VxJxZO1tS|2iUnX!y{?zkwV6
zA_ZSVkmN-t+a>n^>GjZfKeW=lyM|E`w4scj_X6Y>)GEg2!)mZuAG@~Zp?@3BwV4OM
zp?+a^tcp^`&8h8C?J{6$P_6Tyj%p#Jo~B45TNfc4Yp4{uIa6YOQaU6(Wz5^HS!xqX
zme;0athpp}`B{_dk&UOV!Iwp|K|(V>HD(IUGEW=PqAWBUY8#&B7^)7*cy>UjJSbKk
z+?-Dw8hdz_{{6)C@YNss6Ng4V%gU%4HG(aV@To}yLI(6q`0GSA-h<-vmk{W1jHi9c
zmqxCGXb+yvkF<g2Pa=@Au99F&%4V8(kN~l%3^H)0k0s?o^K10gbEF0)nWud-Q>2Ks
z0{!Ham<5_1q<}uN?DO4Z;yE8yOm#}0Y~8~Xfhr4b3TeK8LZDYwDv?zL_E1R*Jj=nw
zscZAs6m?`NXLgC@C}C9yFkN^l=hP_ERg=tEIHpj_pk$Soj^u+}5&0pPX|yNrnKB!@
z=Lsid^@HQA4WK21rKxO68LU%NvgQ?O_d#P%vQTESq|1Tj{wOKRpGdY*<`wVF0Kbm_
znP+&Y^@3!OvY0NMWbs0Ei&dGaJV-@JQIuS+R4bdXMoA7;1)o;H08cwR{xmBe>6Zm%
z^$9n<C61Jo#Y3UhD`n${TU?NG=oitXY)~Zlz|#sNWuY_>>_NeU6sJ_JC#jGrQXysl
z@<v%jnkR;ZWCwLb!%_ag(^@5&7CcM*1-i?mnM%rKWnH3j^0Vyq^dc!wa9-~cyDL~;
zf|{WhnR<~aD4jrSt-O|)Qv?wceDY(Ix?q%)hh?R}Geo5Yq+IAMf?OJ-{<Zk0n1s+v
z!a%5?NG9r)Fw6HUtyIRVl3mxL{I}?19x3{$nxK+}X`W7jM3k(4))q2mn5mOUL0&Rl
znwpm^2;{EiZxI+1`d7-9%fmB#!QxIWDP<>d(nKJ0lB!>9RgjGHJTX&vTIA#<q84{=
zfl}M~I&$O)TUhzSh`LgtAY<1vOX?pYLV)&KU*N(*(O{@<Vxq~U^zund$D@|RTP=ql
zW(h45V#|bJZj77DR)?QvLln4!@G?<R^QfYCtD;w^=oc&cAq+j0sB}N7?AxmB6DkKF
z3T5)qXJbW9J=rE+P5q;q!L6D>p=OU*vnMhp+A0&<y{oQ!R6Vd&Js?yMiPb~M;^o9P
zueQnH*@8fnDO#%^SsS*j4T7~vv^K3lM%x{?b|*?J9+h@(m39iH-C}7saygEssOS*O
zdv7@+mgqpDtm;u&=T=$g8n<ymC_5yU9fHU=50Tsrx_U4rA7|-Zh*onfCyjC#8BI7#
zMQ8IPXUCSaLvVJ9&aTK<!cq8s-Tn3$_k+fG`Cg%XuUNh}?x4R<Yg*Qd)@y{CePYc%
z&?yB3h{8L^qGPMIiH4R(4F|Ux4n91W7@q(&)OZLY-NxfsgD8xiesb`o=$Kg4^09O6
z+=s4pmsr&IgZ_=H-yiy9NGKYP7Y%>$+>TDwHQsetC_5sS9f`d3#9F*s9=F!xFVWPq
zQ7$$eKqF0xw)#YV`RZ^yzlk6^A(pl@KeiQs;&3*t6^X3}*_|4ooc3lE)834C2yz*|
zZQCasW8%PxpPbzqn2ZlhCK{RvMQW4fc0aN<ZCRTHYl~=YS)16h_QkDziK^PjWWrS*
zIgu!@jGT;|d{R{xnM{@|+cFRhilrTESGP)g;-x*0ODo<Vk2Q#OdxXlpV&&dMT@&sT
zwFhwXG{@v>`OJXe=M+SaM~?p@*WjvJJug=E38npFX@7+9qX^>k3r5QY<7e^@y4g_}
zJ^Rk}$o0pS)%Q<4s_fjV>|C4QoR3#_3YEvj%HvT>)bc5P`(QfWwqIyEfQFPQi>T#^
zt97kabPYsKJaLquzwPa-17bzb#>iI1V7y}Rv8!_R!lSCrt*TC;s#~n;jt{*Qcbybm
zCq>uEXjU}qiL36Bt7Xg8BDmT_S6eg-MRYelHJmcqsfg_7jx}nEzDi|xiOwc1K5jH_
zIrqe!d+^QGgw81*F|O5b82_YstvS)Ne{)pqIkK85x;pW_z57wy$X44(!d1O`Q*^a%
zfW|hoA4MJ+?d70@+RKHa=IH2ZNvs61`-h<OaD4S*tUl)XPUGsu)r(?L+giU+)cvFs
zr85@yA)kUjX<2JYwD+!BW21tr<%=g(^|2FTRabN(Syqgl&MjxB;OrKi-5Y~j&b@+j
z@26F*_r7-jYte~Bx%*Lh*H(Gg+D)N+pIE*xI{IYKLF9Wn))5P=^?qj=za3&x_l8L*
z8c3AZJT+L0I}+8W-k)2$6dyhruRbMIpAxH2X*UHs-9wS0sxH>_0J!v^Td3?4EBk;k
z*q{Jq5CUi9`x?5f8CW%~nt(p_O)*Yv8cQ_y#I9^KebTXc^^<O)Y2;~!j)+HlG#`H4
z+_CoR`o+!K^(mqGpxAuysR?f}bea!i=-@6ZvmU64U^NGjYwBZr?k(J3ST%iG(-3?0
z!NrZ*2UD^t2{rFo%pDZ2ni9uP{$%v0=GDymw%EnB`Zdpojj@Zdi=wM<qhECG*|cq*
zdsy&iU%{_UaE-@Z<Jd$|a<ieiccV;f+K&c(nKhoRxMQvQsR2Km{SRyZyS<xxw{6Q8
z)55<n8(KQkDr=!+pE0r-m6Y#mQ1i^1!_=0TGpd20*(d_`IQV(!{E6`|T@PK4>l&$v
z5B)lt_|vBLwTbmpn+5AH%Y*bYOJ+TEW)P&cxiVf3q|o?rYv+2^MnGuYFShPqwZ!W0
z<vl4aUp@Qo_2~83q3Cs_z(U6swM1njHf=XIo$J4Wwx&uV0J>xws_SDz4-RY?9~>5{
z`o*e#EF{G=iYZ(*J~{T%PkMiJ?I&~Mv9F>#?J?h4|Jv0L2V=gNPjvNfjEb(ko8_CH
zhsHmf#&5ac8cV!%`X`>BHpS1r_S0?}$SrG?YttLGAA0dyDY}L>0-|gG=1UI?9`^o)
zbMvLmmju@_CC%&NOBZ&X=)|d?oc(D@{LGYi;w==;v1VI4w^8unSMY0ts?^4`=o;P}
zerSAH`xmB7+zGCUL@Lci@x+_EO_OYc%i^)uci9GLhR+<V9ZzPk>G0{-GLoy-P;%88
zR93A)3>&8$(5f{=tJV<S=>k)R1@92Zn>r%AQ<oVxL@|H<N7z=qr{mkGT$^;|rEq4D
zHnzzNs+9zRU7S&6zUp~BP?q?^a8^)ZtwT_tz<~03mYR;!a)MAQRp7#z)L7x{pu#qW
zP%~Sf8x&?)nRqS@cBTdbRM)pxG$p0>%hWRL(sQH2P;rlGYLSYCGMGt?mdgS+D@)7G
z3gvLwT+X`ryQuF+N}ZveV$s$VBJmyCAe2p;sN1nnCfLXp&vmf(6vpjW*bYTjQYD*5
z)%1+)t%&VMn&dK5`8ft>3cQq-Cv7^2XUohvlS;2l;hqN>zqACv8pi1Ec+9VXxy&}7
z#5iVqRd<WBC+cvg)HhWF9@=A^Pw`D*E21)!Z@vf=wlaY<K;UAxpzQL75a#4b9a-#m
zVCocr4Xn}zNX)iW$b@$0%6nEGfB_WQ@)!}x&Wa*|8Kg0#k&Octv%C)Xe3yn5PH>2g
zt7z^gi;`-4Sj;h<*6s9XHLd<41~&|GU=shL%E((>80PF)DNUA)H_cxGHZmSF@59|B
zUxIJ~+~Qm?#!||!W*DCVd4e}vbNML6zeB-qQ*e`leF&g_yXar>!eoza@^h11g{8o}
zyz@0-50B)enj#rrlZ@D!r)q;;v95OfnhejsGKH-){|EGB0wBqntRJ;QfJAT9`0^$1
zQpqw#yGwm$%l`&upuqovSZ^DC(P1dBzF!r)A(ZuqWj&ERtbm23(W`f_uU@^oA{5k#
z1$9pi1(wsGWhjh{AVO)`-ODl8TJ3|1wb#VjA)#cCSh8o+D3%OIjy(n;zUNlxc4+nL
zmct!)xD)P{wSouMwU<Trfv6ozaB0PRi|;PR7B<d*G9{FZizVYx6I+@8aPIf#5=Et}
z1*^U6pJ#R8erc?8b39R1_cY5;(+o1Nri4hllBo5m&9HaW_;9bd=TtOr^{SX(8*35s
z+t-c>`2$}(aa6_4Rr1Q9%;Tu9vN9aOgMMXzp@oslAO#c5lV~6L!t7__GNJ4SMSzbK
zWq`0LWWv0a?fE$(Dr0GsDLTUj&C4uJWj+=3z8T|gCqqiN#(<K<L<+QLtooC-e1Q&4
z5~!;a7p%iQx2;L10!(AtDI0@n2EguSIyoauA7BD0U<v7-F``u`ogK_iDb@Dn)tI1a
z3izT)LC0X)b`}NSZvpML{d9c#d3LUvw#IC#R9v1aNUAk)zBOCQVgfG+r-F-1QZ5)_
zvPmnrd(5~OOuLk2Eit2L2?BR;miKU&vom-a!aOM$v}Vd&c4GhXrzoI7A0X0(+DsnY
zzlo=nYLx}G9pCaD8s7vF<GaaFR<~x{$OaR_oapRbe>2g)FVWV$nTefK8Mqe+FrvUz
zv17N9k6}~!ESH>0zzC`d+~|jmZm?)<o7Rnb5(D-?%0T2YFnCNWmzCx`Asa=)5+7EI
z+gVsVBe#4JPLO4xroSLL%q7nF6f--RL_-s`!|W|&J~vS#5FygM9H7B3H@0Ng*;%fX
zs?DzZ@POL89m&w%g@*Em*w}-~M0dZ~J&OHf`8YNY6oQOJNX)AU{>iP(G|P~XE@g81
z2M|;wb|lG=e1&1xs7^|pQ6>bTk@lZKs46g`#^3zoprTg>VwC!gUD{ZjN#8SJ_-qMU
zQ!$ZBndU;6`c%?VPmG2#RGUbDcfBE~XzCdZ4X`CN?hI2y67CH1b%Q_iy5WZDb;ETd
zO0U#PqsOAr)J17%6tN2}rPSuKqT!+1kcBhnp}jk$=un{cHL0}e_H)QtiO1y-k_2nj
zxak_9*bekD9m^~b@=6)fTGSlM)@v~8+aR0+LS2`u+5<_Vx!>RSOnWyzr@eDj2>QJA
z`B3e&t^R_VzL~1&bFjxkb%kA;W{aaQLD=l?dZsS5&#8+H(fT}y+B(qoMeV_4`+Y5B
ziYb<TYHz0ZJ!}P!aW)+`DOLigmHmBF*b<}(BYC|@lRsq9*B$!f&8f7&5u!NRg)LNG
zh-td&$Egum8&mZCQ?cn6byTrG<1#Hv?BX0cEL6|{b=pDue?4EXGspTEmH?q#?RXDa
z@uXM=Aot2tj+o_@`{4f6TPh)!rgII8SxwKpeK2@Xjm;J6TM9Kd#x!G8jTy?-$7JQT
zh3(L|)XYyI^x~8|l?qRq(eK|A98G;;EvbxmJ>+1u8f)3W1HJ~YG|*vRI<Cg#oO&p*
zX0@XA-KiKev=SD1dbQi%GrSl33@n7SpW1FQ^uqZFl&UU~w+s&ii%>6uaFaz(x`Mc*
zaY_PdpNE`9fCOQ#r2_LzqXe5fEkUz8B9N_~ps=tUD{D7VCi44d7irHtHla#PSw~BG
zRE!XnHv|gaSC|?Qd2%4l7b+)nTtFt3P>Q)W52A@~VDsp^safJ*L=lXSO_4IgKWV=%
z8?w{BGPUKVULe0-fkhPQlIPMqNnznvMTx>{ppwKW#p~N_!Q}?jbPe|POtYs|Rvm+<
z2zg_!+0ye}z@o{O48DEEK0fwZ_oVl_Y$3m5p+{ycFVm?cs$Q|A)VI1<GRMbW?_SB(
zq{x<|YrN4-tz>o0aWjKbCVY}ioyS(#qSQ&UE_iM*2{LvClJWHwuq7tRix?0VTbSz}
z9-AJr1a<qpUXHm-xdiu4%l_Kjm9t5s++<g}lgRARaU6KJ$4!~fKsSz@M<^z&tVmPr
zHJXQc9q4MUmj&{q%^+DQ8H*rg&J9BHojCy*Y-`Tbe8hi`Vwq2RZ;q2+9ky|o^89kc
zC1u%6C4&D~6fuiTTm$@%={}QqBK+Iz^|TKzNO+n!q>M!fzn470IVl^i`vQ=VXY*c4
zCRtUbiZOnK;zC+~L$=f{n0`jEZo9O&?B}L}%j7IU%7GcN2M*WxZ&JcSG+xsG8RiDr
ziJ*fa&C7~3p5Kd@{2>IbdGbDDj9$>PE*WPe3-K9Pb);;#YdJxBWcZbgH~0;TVoo)<
z1oW7CP0C3Q820$Ol(W1vMQ;K$Khi)|FL__Gi1#a%DuJw4KIP!>`$Q#=nTSe$+F>Xz
zyE_@NFu`zDta8iRDOfw7I9#HmPH=RA$AIrAR_Dd)-i-mFXs=kbH)?#EZ7SIRxUS(r
z%UbW+l-Pbys5>Oq9g3c~dop_Ri^n8eG8XJtgH+Tv)(;7F!(!dA95Z?nRC&RE2<Wln
z=@?w!FSZ}pJS(;zj#|Y07H}e}YVV&GD|^Jsp{ONM?T%XRTAyZT7fcu*clCWZvpz#$
zV!1+5`{U-GjWVHmzu1giGm0TFMsUx%njJHd81i`RY`l5zMn3}liH-Y&%3-l`c-5HL
zvv<{U-x_;Kbdg-lH4t|VJk3JdFHmupn`$sYvLhvY+|{!_w{dl|{FAWIH7<6ID@BMG
zwd0Q}G+{)IAk}H;Tzg%p-y_!Vd1}ZiXl22jlhKLQ(We=v;sZ*-4z5kdn-9u=V&fs9
z@~~KWcoia!FCJIaBlF?|YM><AM~U{ye`4dXP`O{M+)s&Cp@4-XD8iHG7FIgQ`x@d!
z4T=1M_j2CNxnsEt0c_NQ=B+$xgvqsCY#EMMjL3gc^J8c6-97IediPMQMR2x@&UUK)
zzQ;u+z=FB8?6n&oI%G767wrX%G6-Bdw_FhMid_?lu03McvBcg3kB1NZu<2pZk1B=X
zNpW}*N@QhSw8K4vy%&YI?2*jKEPB1PB4W91O*C~zETXv{vLHwjNll{+?Vn#7y&0<)
z98IDF!Y-TTgmJBPy*=J`5ORum;bFmcM6?}=+m0kEYadk(Y*h|yoR|Cc*6GMtv^h~;
z8#!_NWTKvl&E1LeYI=;EB*;b7FoMG^I@}+O#T_m9gUIZ`*Q1$YenULJ;nNaA;o9T0
zVJtmC8%BiG5D2MYBnaw=J38X#jsQ(}|E6Z7)bJOjtw&9!zsxXFI5grKa~OW)=omX>
z`q4on!XKAZj}K=2c(7%{o%Po>Mua+ZaN6u)NE$wG!syg*I@Jv)_+3VIo0-~v!bycO
zMroh9xD2gK1nP)@{Sp4lm!7N*V|({@nT}9ZH=r6bDLo87Qn5{O3aCc55g?*neXqzh
zK(uM!D<pF`6Go3F$bU4%HQc#mK+2M-Cx^pXp)3$=nVx@*$|z*ZIH^T5)&(hF$^Ow&
zn#qfBap&<Zf<}`aTgooGekI~7xjJpj;7WemiN$qJCR|i91dEC1hRn>{L2VsAZb2w6
zX!u`AUgI-L>TeORCFRqJR)rT)VyZgbu81+J6iVCPs~3KZfF|0$y_c7WW?+fb8vl&A
zB#hTT*=my)#av>&GDjBy{yltUiejX1$awcM&G0vrs*XP9%O0JGoStGnPozu_^Eg6K
zWKBAr_WZ5cGIu{G*(abOsQCP+1jOo5V<&a>822(jC@-(5@@o3e@Vru{uBK|6F%`r-
z)F$w4#KBTpXDBJZ`!%t+E0UYA7T!Lv+Ph_~j9V)cB~^^i?tw1SS3j&=uM|p##FC-N
zu>|D)_HSq0&5j1|hJ^eEdG6U9jF8$2{87OBMH@6QEH!J~x?k)XVfUEF?stjh{Y<+D
za~jQOC5^GKu6Z{uJgg9kPm9H;Be_o;Wzc4OmhVpN8#c>4M8Uy8#AE7GXPF(GOr*^o
z#Czw9cA9y<3$P!hKpSXoQJG*`Ic_*p_eCR}#TYkg(rCYAL!PPqrjZLLC9}2Kd5oi3
zGc#2fZSG(nWQH;kX1$-KpVxlNsFeV#Y%jPg%bv;5#|`J`oI350mp%<xRR1z;*5#qh
zkC1<4bJ>venzfQ%xR7FX(8JM6dBYY9xnYBA0&Ti5SOzJ0q1+h_3n-?{ys5UKUnWte
z+$~xtYWwN)4_kG0P?&AoLkU^+YmPP+(Z{!c7fdKksldR@A%_OPg%%0he#3U%sIVe)
zF#qRxB0yth{@0s5!5y@Bfm}P%ZYXKy11(;D{)YQZU|!v-%YKvC=*QXskKYPBk{_Lz
z96K>OeopZ(sF~?#21)uTCI{hIdDtGA%@9oSSF<VJ-M0S!KLLt7#ktwUJ;e&EUCy=>
zo&Son|66R*)vZd;Wk$S8mQ8F+sB{CB)j!2VM`Wj!+HVHno00i<LZ?p8Y1;Zl%N|6x
z+RARHEx<C<FLO*f^(;}L$yXL&10fA7Rp)_o3@~%ps_)m9l|ts<QQP<}D-JkvT=X}?
z0FA0sTZ`3E$_S7KH8z?MQ<>)j$-A83B2#sc_sqF!i^+oTOi%#<CJmReu7f}2<^KbU
zB$>g*fd!WDW~*J^l#)n`$-;S>r<vS~|2>MClWc7M6M8Z(NEsfFWM*}s&1%M_OOgo&
z1_9ELN#POul~>G<@p`35T`^V3dk-y^B%*<IrpJIC#lA;Qs9ZM276j*j=p2Zc6ISTY
z8Z85f%GO7fy<3&NLS?^L*&jKLtwK??=&X;8KxZ>z#`;)XBNjEp&Wc6N5!%Z*-C|*5
z%p(@IL~>~LEQ*H3(zdl;5jxG*&bYPnabYDC4GZ>d*u|dFha+Oo1l!oKAW_py8#inl
zQ^98@6S<i}fJN6{_zRoCQE+<}`;q2&Nt=+@F6OmIOrI8%sJRFQU1C8ODLa?5ATsi}
zz<JlT+PP+A|9aOl#q!P#<5qdEP|zn9^lkKt1%r{JPcyRY<%x=xwZgTtYsF$kchsCH
zu8A4hzuwqfEKe-%epI|?t9Z|*X>)}A<2T2Dm@Do*E)<^-i%&!|9#_@ee`C!F0Qk3&
z0XJ0T8?Ojed&R1~&~+VQ|M=+mo!n^d7muA)sHPo-Oa+OOvZw|7#V^nX_Hx=dItnAX
z0pe2sRoh6-cy7jzb92WlvVL5YF<z4O<B}}gpPyFt28c$pKBFow;4StpnQxPh6JE*}
z)_9H3Y<ucLPcLAtWBZvf+<~h4Up#gPej}HO^;TIc!LWyrPQF5E>oS*>qy}7E_U=-w
zpe7K7WN<mq#LC=NNmI@SOLgm@A|`{*LYlZCY>68Ef4ocRxk=YBO*-g`_84d7Y+NSj
zn;g#0*&$>xujhRiZS#@RK4A;KT2$Al$a{X5c{`GM*XZ(AR_A2CR^*(|<+HpC((^`c
zeY?!9FqvD4cK4Ue!^st`7pH5u0XAs2UG-5(5_VBg5xu}sP-ZBb+HbuyZEtDuCw2+f
zrIcBtEvO1Ox9fZVpX?HLSrWEO*ZPW31T9mJvRCL048s=x$}ZtoCgB%og|6F{`0Oqr
zRw)o`QzMdE`C0t;x9k#PbrNEJuwDbPX5F1egF@SJ2ghO9cjzfjh_JF?2d|6|%pcAa
z?2ttj9qM!7G@|lwuD?N-zIeOzsu)q5Ru7d?=2>zbw-+etXGOkWm#-pT)V=+ZwIQ9-
zG#ttWza>{4C=fatIsC(pAXmF109~$WFI@@}`&p(GhiY1fXZjk!!IdSH$JG+;4}n}B
zSI6#bxT|M(cHA|vyFAeQjh>IS^gfKwQ|uj3-bs~IqV`oIS~9~VkD)1nm4;l~9ZCK|
z#nKr#)m(;@P){wMPiZ_}gJbwbzQfHZF_5t-<`H}tP)Sv{^{Edj$KNT+%0HFLf&3om
z)1<zr+?D4mucnoe3AW(*o_q<YAoRrQcATMKmljv5imGZS=yDi(?!XBf8$UPt%84`Q
zPrN+&4DTyV&FDp20G|25)#|U38KrK=L7ojD;DjsLc~Iokg+zXP**2gPhOOQk@|%G7
zHMTiSDo4xby{HOmll*bu_W21_QEm2L{GUIF{ojARaY!;P`sgevW=;xiK02RZDF_Qo
zo}d4FkUz7>zxTu6|Hnrwhh{rREC18~HdKDN)k0nqnDwkFxai~m3qZs6ldMyHaK|9o
zWe*x&SOSwda*oHhH0PP>P2KcKW}j!_5=XC6cYTrxQo`B)=flsoPG35M92ijE1S*}+
zq`*i4jtw*LSrlYbfK$l~ycvO%L%Q4mFyDcv+5i5}AN}pW5B=Rin66XNwu6G|O$VU%
zB^UkDyeGhRc4{`TpT&L$DtxmXKOezt2FJE6vKh=fR(Dn!G#<=LP1i2@uo*#+;ibdB
zEadrP0ZqX(1Lj}mr}vq}bcelQ05DDC)^geRdIObq4+V`B?4#g+Mj&PQ7Nq=B>Bn=~
zQzz80b9E#O95O?faMsI7b{uo_iekdglhzYYw1H$j1%AZhDO7FrRmpblSSl7opR}g)
z4hl$hi~rXYtRs-J2&bm_2)(#TFH8_PO4&HM00&L+KgF9?hrE{~VJedzGDSuHPw0{D
z>To`s+>cWBDc1F}VfUXBv?6&wDW7SUGU$~XDBzuXjWv+uNE<2vDrjopCV%C9AC-H>
zuI~GwU`<O~;F~~YCTO&k#I04ZA{EOzU`+|@yQ1btMV(tkov?!=yR^ZrqP-Ez6L-S{
zTims0HFGs{qcLI!d()P8dnj6aYv1jCtHyT@MGhs3OWrTMUlKFkE4yEI=gr7OWa3G2
zS%mE5Y$cDZ6<gK{!CEC+t765lkc?ZK9+#G3Gq_nCFFh=j9u`XvM~>e*p0JlbvR7@{
zs|0(EXs?M4ZrNMn_7)bmc`dkElo;Bd=o?B5jV5{qH<uH=dmc7DwPv|qf>4OUpR*8F
zkTyeIQ{=d4s}^k4Po4*K!<&TH-M?9q=o#4Lb_9Cs_|rT?o=aE2eOva9xV__XY0JiP
zqJK|f&sd_Tf3uiOHIJZ76k^AUkZK1Lv9#n${W>-W6MK#%2KH`pkafDokd{JNEg~dK
zPi(f+(hhCeTjTatw9Vb$*cgwO4hyBjV(BnNPOq^h>NhsNLbYtbzLJ%YLWt5>37Pe1
zS}sZndp4KjrQ<^BxL7*AT^>rr*3GPV=^>%?kXU-?`4Kn9;-&k9(tTp-K9;qm;9ItL
zY|*o;M!{STkJWK=Ib$0TkA2_c5*O*!Kd2T;dc=~RjRLWxKXNQ`>{Gm-kC`9jiSB`o
zv!Z*CP_kDn*&8{A7PIF?3*MRd)`52p+&Xj{rq4#pxRKz@e~|GYcWo~u-|k`2J-pc~
zx({w%eON1$jEN;<kz-G4I@Z1lm)FquO*o69XX)Q+PV~avgJ6dgl-;e4<%k6>k?cfS
zO~ibgtO6=(?ls+SiZ~KYT@lA>t^m1d*U^Y0?rIav?V6VjZTM^!%(V$eb=+Jn3j>tR
zGDa)SPPEPboc#7<+iq01>?xhXc>{crn!`ElH#clyzqYWI{pN-3>^DE`(4MTI3Mk28
zjJkdQBV$n6xWY4TnqG3aKp$Jnz}FJEp#m+-TTf8ypHvd|kBs3$2o{}S9Tag{;bQHU
zDwL+<7A^s+xfH%Ci@6*!Lb!tem_tc0SsEnfUh+~!0#<{r_DUT?1!{ZlTxRml7<PS0
z$R+xkG8kn+h4cq8U7(Kv&vd3Y1=g$O@Y$%1nO1+q%y`qnVphVFou>b^J(BL}QEh8o
ztSWse)L7wa7`o-A+EV))!WUI<SigA-*B}*P?K4*hUS31hX&V_gVrw?$YNC*vGpl96
zlg1+_o-~^uY#$+X`3V2zi?vH_xDI7hx8f=Py@&O1Ro|{U{803>b$zbr!RlM=vZCpl
z#6!C-mBMDS8p5@q+E7`jl5Ljsb;!~6Nu`X}`h1e9Y?@ZF>^haUEv>suRlWV#2-$a;
zzAmKGsfE8!Hd?o-RVn|^wfeofzEHNPp)!3+{Zpv;3c~>26Dr$XdbJ(H^|}-avq1N@
zB!yq0dVS9Nr*MO|CZUE<u@(NVX_n&bzpW9F>QjLY%H}PioBfr#d=*8DXIQ7H^J*wf
zMl|ELRhLd-J*2l=xDhzmsMa3-f6Eze>2a`eyWY~IGV8FQe7o2TsvbvQ1T}Y;Q1v+c
zBB-`qLe*pTi=gK15~_X_ya;Ok?x5<{M^|Xa)k$WrtNo_OyHHVb)GPxFb`2xkq{B32
zyoB`cl}tlT`dnAAs_5T@n{^PCwQu{kp=S6-f6i#q!{!{JB3gZ~V4sC`+!=EI6GoZo
z_TT8rq>eIITCQx&hg)z40R$GQE7YQor8JQt+#1s3{?0MmLVA4OIcB@Atco2&D6OpF
zj*uRgcZS#*(&OjOG3!DFy4-hcDNP%61!;qyyh4TASxVn-@M&*QEh+eaqsysEfzYZ?
zrKRw~-J!Nnw<hl%omE9X?73JELh+>FS+B0TxP_sDPzz!Mt5tYN=hThS9(`Hxy(oA%
zRZ`eWX{ex3THH`43B7RI7uJZ66#5nrir-H=lMB{BTHBBkE=SAQP49OqF<1HrnK%mz
zW8)(>KBz=#P|~mk?D<Ss)BQVLPHAg%8iX`I&}m<vpSA*}*3~;LbtN#toodHt`{B81
zt8}g2rf-GkrmWtv@6w=b-*?Z2T@z|c|E{BD-Php5n$OYN;#{svwE$PUUZ<}IqlbIL
zeY*IHu!c*cX3)B$DOeD^G^FlB?doX}IDbBCy-`oer=@F3rQ_1({<L_CRTtN+FEy}C
zL%+vbQt-6DdO-!(lBA*9xmJ{xm|*PU+WsJuYlj6|Ki7fxt;+jO`MuG=b?Iv7P)9LK
z+x<RRt^Vq5p!P7Ry)RC!YtuHR1btk8sGl1M^<8dHy;~pD3sKYBt0NUpUw6dPj{BkX
zwhX?JN|$cA7aj<;hXyz^qt&`_w};&o;%+ayYsFnIyKBSUK6clEyJ2=$hr9jkZUDlc
z1D+^`s=}imNge|Y2PEJ$%90UsQX<>Cz#52n;m`qw#xDs?7)P8b<8bpcI0_Z6o)u8C
zNj>y~afYmX2J@E|6Ol#6i<F8`8k``fm%+fGCjE3;RT2ZBuRj;49@crSJV$m50;kp~
z<1Glq*txsRj)_|2xmnAGDabtC%K(#nq)zpfO`+5R@5&E1J0O^>sK~O6&Io=+nDb@5
zZObg`SHW9Hfp;Ou(Hsfhfztuuj7IMD4!7#dm5@O}5aM(1Am8Cn0Qs44XX0nXOXL3!
z1m|T{Fh4z)5C{GW?xdUv$Vwm|;EVBU@@M}q{9^Ox@!^;Gvh9$31~q9c{?a(Sa`Zg<
zC@Fm+=_dTzXngQ6F%!y^lsmX_qP#{OG3g^>C0jo6e5K4SYtOZu0}hho6m%;DSUA^t
zC8M=#rD}rwosjV$>YqI4Jejk1*u7%v>i4en=c=CFcYC+eckoMJE7cm|!a4O2=@j;^
znB|c?oV!wVl)8>RHbWVZIp7#xu}{9-#qg6{O$@I%^i>{S$z!R2#&nwca4ziWOh;dN
zMKYmdS~Gq|%%z`!av>MzIWzOK%*%Oc>L5tC(x2`0&0q2Q=I0i1ej^TEymk{1AgJ*z
z^6bDy@AY{OCTLmbm;^5O1R7q}3x(k862D?@xX6TZ2hpm%Gb<Slxhs~2i?USi;4jhA
zGb^TsQwM)(Y`||Wf{UjP&Z0QD{{C?C=E>oo5myNLnrCnlC>4?aE4)}a^QBw+1qqn{
zWBxK=GjBZn0^J2D?=IETj%>~s!do~+hY#N0qDcM8#~J?T^!PRfA5-ux3P@B0mmH9N
zP2q5Y>1$Jv*WsatUT4cfOSlJ~_s=Y%6MT!FU_Zo^-lc$K!jwUpkoX2EC^@0WIhn8r
zoSBiubrwI)l;>wj&Hry0Fg(-4Hz-#o+FPf)Z_>9cp3MCCuhYG0$rps=Yx&ZWZxM!r
zS;6_B58&xZ%8?OnO3J?J^IY;m0C$7^GI^ntla#39^iS^%IO1itnIkvI5igGPzAj7Y
z24yMTzo)$aR|@`)0#+W<xMaGQQtnk)Qj9WBz>-D1Eu_~;be&?z?3D_hePyF)DfiQo
zRr|mI`_I#OV1SdiR!Wg_6`iZzvld~UF6FU)IpHT2P8bkN4tVvQ^G;t0q?|s(U^DsR
z>LmHd&hax}*#Rk!J&$`}8hnm?vA_>7B+>ymqNaFkaKJtjV-^~v{3^A<Jqmswfn+<X
z^&M@3tQNMf@UR5$E(C-jpj4;<gi}-fC;T%6&lmInF3ssv@OYf;x#Z`J01k3xpJ=Y2
zDOr}5vT2%7TQZ)JG5$~K!Kp1qs^#G}Y8LviH~2G{!^tTXou^AH5A*V(nYwm=D@#vl
zY_C+Q($j4m!v8JEpTJRw7a&dTf&aw&mjyG-=c0R`xa(p^qbFc?($lwb6pmIQ%t|yg
ztz|^7L~IG=V_ie+QuIQ^3K3Fq>D}Y;s)5y@SksT+KOc=39TAF-h($+W37UU6+8`D-
zeGvG#AAT7N)<Z)30a#|remKR#L-G8>%tEESCX)B0ydvUwQdS<xdt6u?_1<Z_+ZM@z
zj5m@86PW1NVk1H^odFxSHo|pOWbzkz2ACH%MN8lByT2#4@4;ax!PXB76+>dhkWerb
z$tDTowdgElW;ts)g1bj__do_0v3^?75PMyy=!SmmQ^UB?Qt}xKZ=H-xL`Ui4SA>do
zu>!`5ZT9ldD7cdo&5U{=m~%Ivl0O*TG=2a0C&$H_gMU8#u=dYpemEo6j7M#d`6azz
z`8LKrd07_9F)vuI%J*)(dn0CwonJd3l<pNv_eL`jyRPX`?a)^3&_;0cC2`NO#2z?|
zO#UAK<Tvp6S&pghAmp%h2k+#;CGB;Hhnb_<wbm_Xf85y*H^{5G&}0^!Z6Cj~{@M>N
zeR5go91-bne9Ji=caD=b@2jiFqT^2*TBFw0F(JP;(blzgW4$Yy`+omwFg9}U+P(ev
z_Y3*WkSE9YoDln7is#pT&>st~jeO_YclJNPr|v`t`6%u<5VgI3E>;A;vnBW5xc`Qb
z-<oI}65Ghmw(an<@Y?&L*7rwanX$9q$-Z~;{z(CLxVeTRcpl3ssDA7$`8I#|>#_Z^
zi)g{wBRYFF4sAI{;?9vLtph)J<&!sHf;4zq#9!-Vyr_w)^3@MsdGOVE=V77oh}d{U
zs2UNgMxqms;SO{tb|}`pQ7hE-$Lj|0Csqs!r9)!r&}Qvc>Hc`>{wHuaoJ9tyL#qvU
z4%|Hu>)moT#GMU^qOvGFvl@yTVP*>%>%~~RP~1h9R}+b<mbDVGst0&6bZhcSbMFu8
zH)b}^et+)!ou71y%|{|9zCFF#6f3yba%bW0f?#V%bdUVF{^86|&i=*RUv&PcQ|vwy
zw^hAA9cx-E_)ZJ?lof0piPpg%Om8;9Gi=NE7d}}KTgM_N-#4vJ#Cq=?zh}R17i>+5
zUF6h4Xqdfu_0P=TKmEyRvE^vwrEdq&3bpt4-U;6g3pT1wzB4+s+JrWHHFj*P90s@@
zf}>M(bZ$7d9EanM!wGj&?Aj0NK55!0-GVK%dtcQ47{mFit8W6GUfnn?bRHEuj|x>s
zh2l}Mcr=>vX>I+3l8-aiv)A~Ix{dmc`t|D{I@TRR?Ow5V@8;3XZwLn_w`wP&dGOUn
zO5r7m{NiX9CW-vQ+t;F;&Vw9%LA&SI!sjmZ_YcIf1!pt7daoG;XDi98%YmRb?j5{;
zP%LPL%-YrZasArdhn?%4@WvXkC!E#q2V#5gh3|(&XJ^Dr1%G|@no!&%7B^w~vK6Cq
zSjULAhKMmySP9&9-Fx%?n_^)*<`sbNyMJIUTb>BSf*wp5D3W(|0$s`M=TfF~FqyVl
zYDivxIaVT+w1_3}eJ7T*!|1NAdm~4z+Z(sld`fo2J#=WwcV5Gd{3qCYMO$y&*2}!1
znw*EoLG9ey)$d#uD|>N}3Y{2@;L~DPysSeg?i7nVpJt`rqSZ<&-tUjs^vNFLH%5et
z!Hugz@jeko={c!r3<5MZ?C^GrfJ_Vyqebn7@xt+qT0)ZVpZw(H_dD?@{|UAU(KZpc
zO`uTGcIcTv+awNc6KmmTh6+nLy=}U6`u6F_X=WSUE7<x(TVLGPr}=`~M%&TYwkFZm
z6t^|8m@R7!>s^~J%!uV;+n8V*7j5Hl+c+ib#)J|U>IZ3pwhf84p}37a#KsHjKlln(
zhOp3n5SIU&9-;m4!vdjkRBRj-Y;aIM7PpPb@nUZZwtmspAGh`63~V?Qi237=0l_iw
zxV-9q$J!0W<vZqTQ}mU``OdqRczHkk28#Iu@%#aLVP18KWvv?}4}0VJ<3j$pm_Lpi
z`jWf4N64=i^XudJ_44xp%vNw55YKO6zUH^}?VYGN9J}%08}W+6%3pLWQ8XNLiM73O
z3$Oi46b-Jnh~;f-ePVf6yl61(?@7fG8Pt(@Me>h84Xy6QLbP@iOI5sRNc;CGt54Bt
zAU3wq_ptCsmGS&ZA%9ZLpTrHT?48`Zu+gB_Pj)9ERQa7(@4kxBQQI2HjSdUu>O@T=
z?)D1M7^$wu-5$^Zns-h8cz2l8Lh3tlcR(=1^<y*c_6g=HtzjtS7Rp6h3$%az{6FKZ
z-m{!)7#hk5W-2M3)!@j`9?YcbeWW}1)p5#oPJ2UXMwl=I0nGzC&BSHQ8etGhP9RO`
zE^y)FOQX)64g-F?GE@^0UEXG0d9zbB3uUXi9qH#z!_!nM8h%wbzB@SWO*8%AGOw`q
z!x_+u<XH#BssXOt;zVg}Y(@WJ2i*qC_O;b>?P7}df|3nx^n5=(pBQTIH9OQ@;f88q
zrF+>5=kC<n@EwI-R%H(`DFtzzy3~_rb#E1Y38;;yoej=q>B^~SP^@R`xyoT1najqU
zshqUG>GJSUCdo6xc7IJhNiekKQ}G6l3iLHerGh6klk7oHms07~bpLfwi_cSVzk$mL
zJMceWmsXXFW~%+I@8fU*mlevVa)%1Yzm+b%s&Qb4bP1zhpEi`oOrabhJ7Cxd274~p
z9)|9%s#B1rgS2f9`dX=SynKCZ-lpqQg^8ZlDykGR%^w*%r#gf7eAq)d^^!n+PMkS8
zMo;K!r9jq|gJw;3#kL&-ItUs((abMt<|+EJ=$}vrb0{ZSItLkCg_vBB$?vj4g)1lt
z(*$$+cWNysPGfemIM9QG<eG50I8-d-2i$*O!t|tYJx4vhY4ZG)^nga}8W=M`Ctl?e
zl2>Vsu?5(a$tR8fTxide&GlO_yL}6+cyKCH9*N)>8az%dW7Q4g17rX=Z}h&&`0;P_
zy{Tcw)7zsc(t^j|;Xc;Y;qL3{+1KSx$pV;)egG#*s+QT)bDl-!$`qc$n0dC=wJ&Yb
z;Sd(u)Nr~Dt|)mk^UN}S9m_mG?qh>EZVTVQSn}P(nO5$Wu|+cJNIPAUgLy8&Asg@x
z_b6OlEr2)IIROp|i52=<wYBKe)q-VpZkYo!p~HQYRjRl5#g$U}iE81!u_RYeZ9yM+
zHguThEEvjaA9cB3S_I1i>|QXGWpe>m=CtaZnL}Nt;i|W<zo%uW6|Rn#y88MD20Q!u
zhxTZya)x9YFFXMhd?|3|Ww&&?Vy7EfsG@{j7-^@hU(%!?Kq+SGoU+wk<Y56c3m57>
z4PKxd6--6fP!rO{aFL`4%)pwlda0ch6Y*4*9r`@SWg`(_?)2i!%=~oH2t<bIcK;KM
za+H$2!Z=OoKK#@}R$rOwL$MjNR7pemGl_;9HsbSem_l*{#uIb5^mfW$h{LC80PyJM
zxn(rfc6L8W6Q#7uzmiHK8xpx&Zn`@$lDy=l4K0#97*mV?s?20^w%{K+fAijZR}V6Y
z30T^haCZ~nU&2(zBq@yL{q{GzMp`RntBn2hg|TxPCztrlN!thxyjtUVDceWFj9DoY
z!V!-DzwjM=!$luNQ%~vM<h|+T|B>!8anQguegsQ7|DWkOm%IaUi^~weNIA*!%UtCw
z@*@w1?t<6j2PgCDGVFkGY+L}$Wqv>L0kgpMoyNhfo=bt&62|M5Ou%_&Krb^IH;@C*
z*owKp?5P0BVE~j88z-e4@Ho%ozhpcuW#ad=WSo=CslJf1fXY)h;T;dGQ=CJ(B(uvQ
zZdhDQa?S&+LP37&v}8U%HRGWPN^&YQHgVaLiA+G004@H69M4`dGx7k+wNkD!BMFd}
zQ-2>jg#Zz3FyudCB-8l0XyAj!cwUQ;*COV%MCkYyux;8_Ulj_$OC&q}!sbZMV{2aI
z`mF;R*EprF=rs1^#V+`or+>#*%kNG_a*^DgAI-US>h`IK@rliG`$W`3w=&qK)$;q5
zu@#}PPb}<<<a}zi-`@AFL+>0~Z5FI`qO~sel`U&q+}eiNFu}LH=Xlo<%X#dsdtmuv
z`ybiYX4e-sN5n2D<R2E@hab6*ZMlyL?h~T>1P-9V31cu(Ko}W;hkdgQAn)D0)$3rl
ziTTa!CF6`-j@1f|2GP+F$@~-+Dih!CySpFExeH0Q*wr6r{Ky`+O$s&~5jGjY5ke*l
z4p}RI@9Xb=J=QOjHjAarYqdgYJJ~IK0oMeUZpQpvosJC&rETQA;H*&EMPKn94&_*7
zvZGhYfm<Z&i8Vhu^3HH%I8jwiM}Cz>PLQ?1T+H|&M<{6(OIp#auqSx^&i+_V+}Rwr
zHGfLXxY%o8WxOF&^@>%!8;wHM9(FufX-%v)Hu9Z%p`-~12e``b=YRuiS!)*DeWJTh
zaN%sE{td6-+8;TAa-jM*RxN^~4qJNS7}b+kx{0VI^~rea>$kri$%IS6Xze?DBYVN*
z8n|=w?#)>LyWfa@gZO!S-#>c)#2-%n{^ZAf>q8s$pEPbdWp;v4c}T20BsdR?&cl&0
zvdFMUuD&xE8BCPAR%=&B?$zJ9j-qnkX-T#my2w?2_ZsX_s+-qZgzCPyx#CHlBVO1j
z<TXZ2aAgoZ775{Hfc8y49&}CQ8U8x2e4@>?z4x`B0;~1g-;jYzGgaVmN{hNF4x8XF
zAVcq&jj6?C;zSw@q|^mCY1;z^hc?~p3TOMjr`^cHayo50OfIQo+D&^ZDYh|sQW0Ae
zjmnowZtC7D#A_%=>&$ySN56^T%tSEi;fKv|Hm%J8grt0dC^cPSWz?t8s@Uu9bBSz)
z-MSl|f0RuLb6xI4Efhi@n;4v7qc2(5qIEHy9v2%>wCzWl_QetFr-K!#lBREWk(=fl
zXVsTK?W>JB)Q0Qn=f-+24E<&s@U={gY%XuzkyhK>Q115I_VnIoZlbX*o}sfb@;(0}
zkWirsV3;hs%#}4}lB=`3MONhqw7Rd&d)%a=F+INoGGG)+H1H>bbJ0hV^sj2#x;xrW
z&f!bY6FM~(4XODe3J9mQBA0ZJ$Vmz_a0TQr?>{p-k|aY_nom}~I4$o|c2D*w4XMyL
z&sb8YpD2ssrK{6SE-zey3u&S;y*_z&MJL(HjZfq`YkaMPXsLjx0d_R)94Lf2cm+=C
z1-yQQe+S4t3DpIgeEh1M_-8a6@e*gxPQ#WN=jKl0g=&!e%f8(zbg1!G8mTFnup1jH
zZ1IS+#O4UvO!SO4xen*p?iCx`V<am<=k6}yuy-7_@q55YDK~J9o04fW7_$C5D%7{}
zUREujsvw5aZ?awNK6;xyy}STL0R9*ODZ|#shwYn}gF`-k-h=Jj6jQmF;(x(FFpZ^g
zQZRtq-+4b1{`0r-3GN4*@WalYm4)#v_upfwRI_{5sFH1Zk=k9}%rdf&)qz=elc3q-
zLjjVbiB=jdX(ba?zl*n8zr4?$E^NW>JMb|o1+uCIhq6TnNW@_66s?_Pme`blDANr#
zd=>tlxEm2d81%pft}dj&!=FOniUjR~wL`RaJT*8h$Bj5nR;(F_+bZ#g)w!~1V<29!
zSEvAodT-=Z!sdEptK70xf=shDK;#m)H9RgXy4#A?`8W<mY&@Ch>W1-VRWID2R`r4|
zs_ISj4uDFk8pInXod@R}ij0D^u@674sl9(=%@prGvej}#s2LG!MjqCRH8?3;tU30R
zTA}7-)E2d++z$;C-5>{#YwBYA)-KB@y;2-VW#NcuSf+V!s69Szb_g}c00-3|ngC9s
zvMohmlixaa8)lirFK@Z^^6i%+FXI-Fowf1dm)NfwpuqMz6xhy4mO7G#sA*(4Xd$>w
zY#MsFH=cJ&$U7zGor;(eu8K#l)-4=N+9bGoMOSacPDI7&czu7|(H}SW2Z+J=m(J#+
z`wf4&zkJkX`m0hSLY;#og}dH_<p`FRCLX*(zf(&ds02ki?~xoWYLCQIIqPuCk+Gge
zRM29b79VIOUvL^@1W}>mwr&%jE#H&^@a4nhbPFk^m^HyQQzri|tV45VVIis|2GWnq
zgR8@7Mi5!R1J>}#Lb;rU%U!qXmuZ~3VPQI-_*GZ`m_n>1tHOTBIjp`m(Cjtuz>C+z
zQwSC<JpGcKzO>)wLOHq~Q@HgZvp%j`?r@I3OIPP?PGe)YUHuu6xBJ>={pLJ~LYi@&
zxt?tuaMraXPM*HhX(Wy#lm#n*{1=coX*}LE7=<A#=iJr?;JM`pk#ol)&pjZjLbzZd
zhlZ~Em}fZ<z$_0MWf2N|0rxmla0MR{u4ajyn4~vkua4|R(iMvW32Y!N!`d}<ca+Sp
zq~HrOK|aqfm1$~W_$M%hQXu@xv&?x0=nBU8*}-qh<nrt+JXw+o=rgLe<ToX$Dx6w9
zi5S6o4yjB$%fZESj5a|wIHl3ILoTNl7nj_NV6(Ubiwj=&6)*4i`edDInY3ZOL+V%0
z6e6kbo5~RdfmWDIEbWjP>Bh<`tg-{0XFz^Qe=xI4$Zl8sNu^zQ8sx1Rvws_wei8r2
ze>)5!Y@q2ES8StTV%dCN|7>s$ZdgDTNKWn36gylXF#G%W==vWHgBJRL$e1jq_6T?-
zul~n>`90It0hy?~{Kb(Zb@#<#I6|SQJdIi@!@tZo;bx-MBxTEuEfx8vKoMd91Orow
zBNWN1_=lOg$%wv5{vLs8rJxPLN+&fZ5|X1EqT_%7$Id9neWs}zcdQgK(vF7KD_`rA
z`H91Beh83o-T@J4GS@68i2{=8m7^0<!7E8N^Vww&NA%gWlnt62Si-+eNk}>(>xE|H
z2vDz|lS-j%3wn!Z$5l>gv~EE~G7Zl;s=zmqE=9<Fk6;j|O){s3hLo$~FVnh|a!$&a
zDP_#Uf6UR-<Lr1x{zC%RkAU$BQm9D3GWB)=U{~r@me_1^9-4y8faW3a<w#bt$d3^b
z_ZWbnr8i)3x5S-8(Y?{VOgU%d!`IhekC>l0E8d^Ie`O<(I7BBP)SM<a^9Vtm$oEC3
zjVz8>y$9#p9~z-Zqb$-Wi^T4WM&(HN{hRfPk<;)60&gBQAj}ZJmj}Bm8hmQW28ovQ
zv=FXQo*IfQWr+f3<Y=O>C^GuEsws9|K1cnj!D5HX41zoGP8c0}?CROfPD~t296So3
zWz0ngLV!gW&4~8i$%0x~fiv2BH|ssiyB4r!&fam{bwnK?&kBm(%Y8R@wQtpPfACSo
z-Yp_HhsBCvA%DM^zdz3Yo)kF0eH14OOy8NjJ1G{_M~+60g8V9M+bG>E_@q2>_z1kO
zAnU?|s81pE=@7tICfI_GZ%w>25$%n77<2Fxk%NWgSEi`sz2om5Up*T$637TsVbSWu
zbj4nc7k0^if~{M$b;oVpAQ$6>BZBRyXgeCW9c7OLYsK-x0r^j`4T`qGxNVR~%p|lY
zj)I7VIn&_(Ignynp_cHV(0Qxa%<tsHU-gecF0S9M05eHpQp6Nm4bYT}T;S{J95~e0
zrqY%{O|=bm$kNeRW7qZv6zi!V=q#|(@m=tyumfG9^(Ub@0ZZ%00R!SA{FkqE8Z?|u
zbR>Bi(J^rhsw+i3rNX>fWZ;lv%^7*StP4mA4D=$TR5T#CY@GC!w8wm3V?_^*2Pfhw
z6zk6MP;z)gfkV7p@}%<YrEgK@VdFhU5!=Igy0%la8iI`~lyvrv?pqoS_l#?D$A4w`
z`J6di5X#$Sy^U}FD^~A9SW5q@eK(7giq6JPeG;;(H2CgVrr}-Tgcfe7P|bs+=rKi~
zL+v~4#fmt~dYXm{YlD(-DO{M+d6J4Q$8Kt)%hiQ3sbQL``NHBpO)Dl`hMW}L49+T#
z>Hy(>%7twZF%%7qFI|>$Xw#JM&<15Yw}JmR!T9Y{OAeRs@Fll1B>hYfF45t)qNNc^
z^N<rR1*`a!;yivAqk6}l)_Kpltn6dp_o5<gj^1_I;BCl}bg>Cd9k%-|4dti3DZm^B
zmV3A$YP|gcda5$jX1kjCY)MVJmyuGjVc$(3hbu#sG0mBKsa%2C4t-xh6U$Cz*Yyb5
z^sp=Bxa>~erU?^p4j@YhFC+gV<VZn*ri%Lh9^R(-0yc;k7>6Kgx{VV=!&O@Q*HD_x
zI(QGq;A<!+RIQHH-OW{Rwy{xK6L!P5P}MafU&0w@jk>uvEicANsS4Gw{&R<Lr{)=|
zrnk4-Zyyh3p-g`ow(DA{F4ZzfrJ1?(?Hj94#nS$AcDQ`jt*$%7%Sn$HuGN*HAqDk$
zWeC-(bqd$%(km-gsE#uuFCCXj=~c~|&ZTsj%5`v>lyYnbCy5ic|A??aEsM6*Qh0Ow
z6L6@qkh3jhBvA<6kse&D!*dKIjk1$dj}3w*i>FgIAcmR}?QnSSRX9f_J%*(6Lznwy
zKXjJBfB++XQBh@5fcaDLzO0-i<^T105(xN@h2j7i5$~`sK9@QeanYSTk^;&w+Dh%P
zQBLi5Ql)?H=367PP_s+vbb*;LgHsvYZzb#V7Ly7jkBelvD@{e2a^4va&LyBo@|HbS
z5|$js+fyh$Iq-d+W7zXJbDfD$s5nUT;xcIR)fK0il(iNYnpO4(l(L{MrMT^VE(?St
zR8X*y8|6zC!u@4Uo=Fu2TTkHSFgvhOSBum5NbNxgoK$4NwqE1nHxT4@OnfegCZK~O
zIWI(k;0MSIfgNE@^1T?aII^331n|e?`~O7u=O`e0f^i+re~6>MQ>_`~cp^oZ^n~g8
zApJ5XvDRkw%t!uzq8K!7O8F`5O7#P?ca;weC#Np_KciqD1%E>UO{eSx48E4`u2OJ~
zf?EirEU3@~Z^~y&@$~jLkTZXs?mni#O#vANN*2N_S#*@kbbuHeg1<)bX}Xl9KLyYu
zqLbutsA*ER%724m+$0d$0qCE3IsPcUsX+i|yaD<6j<@N_gucMRnKbF~|3C@MsWB*@
zRGF7*G8wC+oTQ+Z8PekX&lDa^U4pPI*{xHT_!xo8WmDM{DPl<$B_`}#lkuc%85o^I
zNj{)?DiQye6kMeA@H9Jh#d}k-p74Vq2OToRkxZ{mo#+2sDth)!3{Gf7W!;<tL@A3o
zj+S+vsP$yUC)$}xb|v#EkI%;#E|T$zWV|L>WlP>Ee(`#Mp9RzaEpn+z;5omHD+2>n
zl$@pr53A~m>ojg*$L{rY>A(Cg_SJ!NC=BDuI7{z#!opE3?2r!&aYhb5!P#B@M<s(>
zC4-54S0caWvn*37od8l=2=|^g1Cn$-Ds0;-Y)jaj31`{UEQ7NhCOpnO#Bt^Ujtxh4
ziPoA&Rx)@Ltj(ged2MjZ+7q|-z##HbS?5++XCl9pv~*@x&)>f&l(dN@ZGclwM<bR~
zUgd?6m%vvkEsIza#ifzlPo1vSBC)JXaCVDM7(O1dG=D|`L~eA5q3Ec8<Y?V;v<i-P
z(b2xPyyX~xflUI(W?o$DSPN|Qez=U^4zX%a6lNt)s%pim&Nbgg|Hjqt53c#vd}7u9
zXf8mNRYXoCkn8b8UB{!kzOA}G0oHhR15XXzc2p7pY#Fmxvp<D(=8X^jztXNeHjeAO
z&u|Z3ONkVZU0$o@wFgP@6i?B#C{int6e-J6>_m~ZrbtnuEs^ppW$U0&B{9%-t3Q^3
z8*c&yT?I6{a+!J^xCq@pQZ)rqI}L)J#Q+>Ez(x(Aq6G?+h7+_6di}mPyR$R9q$Q-o
z;kUCh^WMIhdGp?P{J!ri4Zr-LX07Ij{%G&R+v~Su4)_BON!FpDks*-YH-wKpu&h~r
zI2(07e0}}(*#1GW;*eBvC}@x?tRO9&9}aym^l*3`o>X-uwVx9a%UnTkXcBF))kxNs
zO>1Y|+9_JQC2M!|dfYk`vkuAj`ukTSC!(d%Qy-N_PDD;f_JIwjWFOhIPsZ(&pB@wK
zXC(WXkYT6m-!MzH&p!e=7Rr&`%^wzgP!R2YbTCpNx{ph4IPoD>sObSIwd$JI_C_ty
z(;FopeFdKu3fDR>IgUO8nF^WEia%ZY-V$Y76YYm3`{9rQjjnM>)g4i9yc(G_2RCLP
zo%*ZG8<!uuTGsAF&uuhp%zV-mJr_MExsE*Qm0S~_g1i_yzMW&P9hN)#H#-i;I}Xc@
zuISjdf$JQhc)XoXsJuFz4~oL(h$&(s^j9N{z&W+JXDK3kIyXH7anHa;gXkHSJi}r0
zmb-bqC^|2?pOf6rg-!GaC0gw;C3h*{oXt{GPxQ)0H(U_$8NC9Rtw&y%c|Qd?9rA89
zxz=8aj7BTOCL~Gi$Bstl+EmmjHV#OQ1EHgj8$7|WBv5ZORIz$Ou6G4Tm87Gg?vQzP
zQZBQGI#-VeM^~wbGQZc&($+Y97)#rv(zYnF{q)63`zVK<J3JIIL`EK(!b9O9sj4Gd
zAyxGUM`d@*ru(_L`?-xd(LE};M}y;`d9kc%%jH?S5jB2Xpk#Rs9*51ktP$&DcWd$#
z+0~rhjh}aT0+S(wXn~iMGcXbKzjN}Plh}>UUbIzW4Hb$djZ#VDHfPLtGZGk)ZAdV5
zf6u0^HEwGaZEcbb34IJjI1I9iz*NCbVCq6su~H9K+1(0HOha^1>^LlS92Q-NgHyl+
zBGanV6)XzPNX3qD30&0Rp9a@I)MDYR_HC{(A31740^TQ8HTPTO;@Z%>RNMrsdbJB0
z;A+>eT+Ki5NBOY-!R@u%Kkoif_r^%H`=di2A42aavONKOZZLE;;+5>(O4_98*QL^t
zz}OQ29CIVaXlKmPBRYB{M^9ipI4=S!K)!d4;Wy$e&*@e}(^_w&F?uT2(5Gal4d#U^
z#9~LR*zvgGKx7t9*}YQ3pk{AjCBY9|a%l}RzyeH2n$yShC00s~gv<c`*+A7qnfd2s
z-IE3Rf1l5TCQNW3Shz5Ykyl+*{phzL9q9F=ND^dB+rYIt(mCilePGy?1sV@+jj7!k
zzDp=UGY?yyxrA9QVcc1!UNNj^L^FdGoaDKG)TaPU!|7JcE4gVYMK7oAg}xIy6Wtja
z?WrcJD&TSUEO=ZAv?RK+E4mW9LF4qgNTeXihgDeBJHi`Hh4sOHtZ6%R(3)>M1JU4}
zmk~!UOCL!(QdOgxy5ID<V$t87J4h0{v!ssXA{l7};V)GHy+-=^X<9mGV)FPN98dR%
ztmF57y~05<G|%wpm?|@!vN^wS^nl`+qR57XnHMz3wEvI!ILXdYc0HEYG$TIL_~JDL
zN@DzCn`3;L37!D9lfMdFI}rM6NtmS&S4vq2%;2+2OGwAC$lP|8=G9AKtP~=Y0H{vV
zEM-qk3pqR6qEk)N`#PL~P@&ug*ct&(gS!nH!DNl8kry0HJ|%|`0NR$*zd-rUzf^`}
zV+F%)L39xaN|$t4$dXuJb+L0@x}1Vf@s5B6dVWU(FD%>hDk4z5SqTH|pFqqRXW@>-
zVl**1CSkbg>-3alh$zV@DKB2U1m+W>s&EaxIZ?zqi5iflfPFp9?7_u|rZVSSx`3+R
zWJXa%a``6l-M=8ldd~>*%`aTIzO2X|0*!qM^JQ3eXI~fo311j|O(2tGb^?e|IzC1v
z3Y7;qja%<eSf=0(ggiBKV|elc4FU+(0vU1v8U2jZ8-(|1pNWM~NfaDGVh+~#{K6|#
zAu;^BrhZ85OXm1v{X%gx&?4Qkk5=PV^nVp~f*p5rCFSoH1x#{9^}AQ#rw`s2Ud_k>
zUJXWWv$i{4+b!1iNVPq*uL`WgW>rVLsza=TS2l8m-y@Twt#%W6{;UT8Z?hgyqICo)
zwnrJ#co*k)Fam=ov9DoE<h0}fZ`mbTyJ8hx;O>ovqAuCm5FVARZpljF0Vvo<&<L<v
z9ROrSU1^d!En=0dopcU@f&i@6MPN0AqNraz|L%DNp(wM#09jdmzcM@$o?Y`sMk2H8
z-VdignBM5xctdO*ky=M$4M)VvQK@n?Fd^@=ZSHf%_c>LchEchse6yrIUV^Oj(XWUl
zhoq82fg_KbI|5_(PKHJ$iz8evT3qsh_5eKY?IFKpX$T(`EzL1YGp74Mp#n-Xlpe9>
z{M2eY(q;N-Cl9K_yb}b9y4Dw8Ws@;fsRsO0u0HHkmM|Vs_M)FcV9w%S$z#e=6I`*?
zK^9X<deY8W(PYrd80d3<k1}~H=4Wf$D<86!0eYsrE^TYHYD6HXxpb!6UC+{o$o-OQ
z18cCzexD3|+B=h;s(9V6?Ae*|fGHpY=$19H?p?9$VxG-V)88pxDcl7jS3GA}&zQhj
z>r3EzS^_0HQ_~}KZl1DrZ|PnXdkrhf6pM_B$`%Y1ltawOl&z+jH_(aHp*5{+C5;jr
z6_x4a_n%MIx@nG62CekOb8}Zk*9(e^nxYv~>mVJTu(-RQovO*$Rq@6&ZYdlMT_om`
zB>SMd+>~-7rH$FCLJawOWt^(l+oe+VI?}V&8Q~K=08fGN5BOjjFlD~^34Q$)k-K=s
zg<sPan_T{uzLHMNQ>y5t2v<Ye9=bB&Gdho43KHg%*Oy5>q-3D=k1;h9oujCQ^4KQR
z42>`1JmHsAk|q*ms^MRQ3m(<@&s14{Qg!V+P5LBw2@4{2`^nIox>1@>Mf+2%=y*uo
zlbm!kK5LoBrfJHVK%JO!oCtu0Kv$*Zz~a<9q3GDGAB@)ziuFTMJzy|p`R>n&AkGTH
z2u(bJKU7h8KJwDqqG;=pY>=yHCb@&aG2XTFqV=F;JqZ6JXUC?qH}32eo&A!tA0i&f
zjUZxiJ>o#!MusA(+!Zk+n`_i0mG=g7pcT5mAHj+$JEG-MWna(?A>ZMNR7B0|c5#2d
zv>%n2N>B;N>M<m7UEV?{pGr(7^Xuc$<sYy7Xywt7PkFHq0jMToEt6v1390TxZ~~z4
zO-D!Ef%s3NV@Prg1;^!vrav3}!C++J(O7s;Y#5gs##c`SkA`~W1~;VV8AX%_dS-Pp
zIEf@j_|;;rt~sCxkVuakI35H>yawyzy|$1$wzoc(SFdE0!4py!++MbPL2BRkxQpCb
zevUhvGsmAr1dq45vq)76F5CFK>a?DY@L9e$;bRTIS;h_B`i9zx$Dz-^cop6!>;S2>
z;a_kC!5&9Y=p{`VN76A@Gl-mqoAWHfS6*ITzUCinZ)e;S;S&Lse5(zv740+ay*-`%
zeFN>C{T=;X2YdR|-<`#Ts4g^YvuW}>*m#eF<CA)b<942eR>&a>b);ijoaP|EY2;Q|
zx$Af?hg;4~SGJO27u8R*H~2fi3as!<n#q~X`5NSvls#Mc8frmOwO`;PQRwpl?uqb-
zSA9O=Gwc!i>8L^ROEuB~@+c)`E?pMhDh1*8pLlq;Twn5F+B6lvO>fiJQ5<hmj<KkA
z%UZo@b;aS*XpGD$db?P0HyEgD=&OnlS1Lv1ruO&GL>eEQT|4{W+}gQVac9tkR9|Pl
zTOeC&lIVXEP6k88_|0!t)pFl=kK`HtCYJ}D_LvfRJ|Bq_K3}51=L5@m{R(Ycd_Fkl
zUP&Iw_4($OW^n`Ps)QN33(Z8_M2JBb{v8MI&{Z73x4Y^et|s3?>LAOu#gvbRXA`9+
zszk?5(amK2ghS1G7s9k&Bl8&p+YfA)Pwj7zxeaMu2Q(jsG&`cvXz2H=%!CeU&Znc(
z=ov0uoxrIn%d?jC5!=X?Ika5Ux-=S|-f_bWMMzZNs56&g;k&As@~|}nF?I1x0HevX
zY#t#P*n9~D_w3TOn@pC(xr$ETK}c3+y;3WCHhG(I0w*uLhIw@dWG{)a3rx6H4yHMV
zDVk5dv>ZDlTWWk7>#%t7EuZ>&oxBD(`>rj+ZCHSmo@$zU<#3Nj5MZQ+7lL>M!YUC$
za|ks=XlM|A0+Pr}UA$uDI!FiJBho|UXCN3YoV1;TuE(lKlw`HfPXiXl2W5arl+nXs
z#uj?(Fz4dQ_;1<OOTwU<ef%E1Vz*Hbe46SxSSF?-jbcr^RMQ^ItCX7%s<Kkbt4G!{
zw$Xruc*=&9*Cw~C+pSwI2!JTHkBBWtq?RM8Q`}ok?ubqD91@#`q^6-{T^$Eg#}7Q-
z>xkt!lzEEY&D27pE_+ws#pVAYzx&&o)<f#wp*sehCx}`%#0T|V&M0BTo30Tq(%L8%
zg+=EotkGm~Y3E&ieg6Hr7O2Qf{DwNG=u1E+svbcsC%m4iB|TDTOJB-xD%O?{@bgFs
z{B|Bo(5{XlskH3^JeJ`3GO=QsGbGWY(B`Fen`#^^h)zi8ZUXL8+ZuHw(V{_fNZXm=
zZu<`We;De9xhT_p)L*gw8}OoN6$F-46s}&hN!51ltkKlZ!E@&1)l}-*tLif$0Oih^
z$e~$3`vXZ@t}Bs#TDh5b8G>p7#!py@wc{uBRPYW>MY&D~c_H~?#~i|GMVuew91W@J
zAmS%X%i{6^+<WH`yW`TLhHHAZp%uZiuVV1ZbY>k}0Ix<-c2w{|Dmn}W=9#^i9%HqD
zip*NF;3b;oJ#C0ZU|%0omL^d&>NV3SHiA$*loo(#Pg8jT*x6cNpjk~%WO!~8LB6nK
z@1K0hIFZrQc&)In<?+atF~?{35Pf;54PIh`H^K^N-NMsj#yiFp1FHq?`g66#<nhJ$
zLww%AU)u7pTP^zE-TAD{w~pSpTVU{K4YTam?!COiqsQh<D=}Qmig?K&5O;C!7!U)&
zQ)UnrJzoh;g02TX&Wy<1V;3($59tFteqkwz3z%awl^;LC(Nnvt$a?uxzU$YPm!@WJ
z+-gnFI6faVyLd5@@u=H|t}H>t>K|@X&;A+BKYxU}{^Ksk%+rW~S>cqFI2U#AH%0hJ
zZ?x`VzhdxK<U8V4kMRmstbSXVxXwq$q9qT#Vr{on+a1ge@v8+e=ZAPQt-o9F{ki*#
zku!)tA=$hB^32EQAB~7TUa7|`+Pz}2m(E$mzg$`sm{$15Ho7%5R|xOn`6)P=0&IDT
zGl48&I?m?ypW}22e@=cy=(r73`Vf&`A~d&?i}fYu<xGVLe5s^04q(eus7(2c5g=hE
zk&7olw+<VCdeE~lBCfh1SkSISF1<|P34}uWmQQCemn#+@+)rb)<5hY<Y*8N4-i+sQ
zt8&*z^^l&+2{aPV<+n~26*^RQzeXffh7*xu;D+qf?vNpN9=tyczh!Z6f4~S)8Bs`X
zW7qQv_<<~xgIjjT{mbFywLcK;eej(jWoh8#6WSRuuJ4Vx`bGNyPy@7o+i1#%Y_bE{
z!&!jis14V|3lGE!56Bg@l=}6tttQNWFF%wYo?E*boryd9V$MEN|8ATLj8Mds{P!Ee
z3*m)mt|I?$lx-}0Vuy4-FfKaB#rg@UenPZOO14QrEvQOpr{UrKa=fr6R#+1*lj;s`
z)(yt%2F1D|scz^|e!OlxRyWRS4!a_Kz;X<vv=4!CQc2{6UExa6)*{(j0^^X%V|g~#
zvyj4@fan6D%7qFdRw4|D#R!cGLKTQtksEWoUc9_#JUo2KroGc1<McH1Z1Dn=B~y>&
zS%scT;lHR;{Wp>SA@aXOJXG6JBF_`~Hj!@-`D-FeM7~9YL970Pwk{E&5JSQr)7Duc
zoAmWxi2Rla39^cqW<=)`Xr#*&;%HbFh}7ZV|F0;e72-yCQ{Fbms5gf@#-HHj{$csh
zu-w+Yox8^bxlT{&ou;yFPETIsZ|0bKx4A5O!_;bmAzvluc`MbZl7j`NqZmFkwCXHx
z0(?V5Z{_SaRc&*6GRF6t;M=Z}H~H6j6HFLc^qk?afr@8QulY6JRI`onG%7u7=r;k$
zqbG0j+&DkY%bo+<hB4l>Z=1`a(>YwvfPDDqwqYvA<l5%4=&QyKx@mec&$pTy=-wpB
zdEP?zCYyxDKBv9ENguLTnP6_wlfh0Czz5kx8AIvud)g9tZy~e?CUj&7055dyrZRx$
zQqTE2oRKKO+(W4xfJSJ$c9SJ_Fe{(JarB!+c{0jG8`P0WcRtjnnB9<bU;#D$8|o2A
z97>;zXc`osg8~FDEebSU3HPbCvQ%w=q9W#qA}hfqRP#-+(uuaziJ88H%o#G_*zIsz
z%CWLItKd576@E$0G{3fV0oN-K$1f1O$t1=^^M#q47yZn-DlFY-gGEqSLcqg|N-O<s
z2&RDvftW(SKx}=&{geWTE_g$k7QlUTiPoo_&a|=!Bk2>MwGn6%Nwhqr2;%f1q8So8
z0F)|_qkE$LSxa1*L1++!cO)i1G5C~H={SKD<zx0Tx`6N6b-{lfGvc0SX(+272vK_K
z0?7nIF%{c0zi<Wi@KhgVV^+ps_Pe|xMUOQsG^5wzA##3F&%?CHBXAhU7vJ4We=@f(
zmRe=5@Gkq)Z0wJ5x>e@dV)|8ILwStTtuogg)2}jD7t^mY_gqZB%3N1$msRHS@3KFc
zYmDu*s*Qiljl}e;%nir%tIQpb=~tN>kLg#LI~CKfGWTjszslVC*iNg=S?}gaoE1sa
cxjKnm_O|6_1&<MEXZktY|C?QovN7ua0GId1dH?_b

diff --git a/examples/only-model/bayesvalidrox/surrogate_models/adaptPlot.py b/examples/only-model/bayesvalidrox/surrogate_models/adaptPlot.py
deleted file mode 100644
index 102f0373c..000000000
--- a/examples/only-model/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/only-model/bayesvalidrox/surrogate_models/apoly_construction.py b/examples/only-model/bayesvalidrox/surrogate_models/apoly_construction.py
deleted file mode 100644
index a7914c7de..000000000
--- a/examples/only-model/bayesvalidrox/surrogate_models/apoly_construction.py
+++ /dev/null
@@ -1,122 +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.
-
-    """
-
-    # 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/only-model/bayesvalidrox/surrogate_models/bayes_linear.py b/examples/only-model/bayesvalidrox/surrogate_models/bayes_linear.py
deleted file mode 100644
index a7d6b5929..000000000
--- a/examples/only-model/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,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" of "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,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/only-model/bayesvalidrox/surrogate_models/desktop.ini b/examples/only-model/bayesvalidrox/surrogate_models/desktop.ini
deleted file mode 100644
index 632de13ae..000000000
--- a/examples/only-model/bayesvalidrox/surrogate_models/desktop.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[LocalizedFileNames]
-exploration.py=@exploration.py,0
diff --git a/examples/only-model/bayesvalidrox/surrogate_models/eval_rec_rule.py b/examples/only-model/bayesvalidrox/surrogate_models/eval_rec_rule.py
deleted file mode 100644
index b583c7eb2..000000000
--- a/examples/only-model/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/only-model/bayesvalidrox/surrogate_models/exp_designs.py b/examples/only-model/bayesvalidrox/surrogate_models/exp_designs.py
deleted file mode 100644
index a078aec9c..000000000
--- a/examples/only-model/bayesvalidrox/surrogate_models/exp_designs.py
+++ /dev/null
@@ -1,737 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-
-import numpy as np
-import math
-import itertools
-import chaospy
-import scipy.stats as st
-from tqdm import tqdm
-
-from .apoly_construction import apoly_construction
-
-
-class ExpDesigns:
-    """
-    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.
-    method : str
-        Type of the experimental design. The default is `'normal'`. Other
-        option is `'sequential'`.
-    meta_Model : str
-        Type of the meta_model.
-    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, method='normal', meta_Model='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):
-
-        self.InputObj = Input
-        self.method = method
-        self.meta_Model = meta_Model
-        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
-
-    # -------------------------------------------------------------------------
-    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, sampling_method='random', 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
-        -------
-        samples : array of shape (n_samples, n_params)
-            Selected training samples.
-
-        """
-        Inputs = self.InputObj
-        self.ndim = len(Inputs.Marginals)
-        if not hasattr(self, 'n_init_samples'):
-            self.n_init_samples = self.ndim + 1
-        n_samples = int(n_samples)
-
-        # Check if PCE or aPCE metamodel is selected.
-        if self.meta_Model.lower() == 'apce':
-            self.apce = True
-        else:
-            self.apce = False
-
-        # Check if input is given as dist or input_data.
-        if len(Inputs.Marginals[0].input_data):
-            self.input_data_given = True
-        else:
-            self.input_data_given = False
-
-        # 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]
-
-        # Generate the samples based on requested method
-        self.raw_data, self.bound_tuples = self.init_param_space(max_pce_deg)
-
-        # Pass user-defined samples as ED
-        if sampling_method == 'user':
-            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(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
-
-        # Transform samples to the original space
-        if transform:
-            tr_samples = self.transform(
-                samples,
-                method=sampling_method
-                )
-            if sampling_method == 'user' or not self.apce:
-                return samples, tr_samples
-            else:
-                return tr_samples, samples
-        else:
-            return samples
-
-    # -------------------------------------------------------------------------
-    def init_param_space(self, max_deg=None):
-        """
-        Initializes parameter space.
-
-        Parameters
-        ----------
-        max_deg : int, optional
-            Maximum degree. The default is `None`.
-
-        Returns
-        -------
-        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.
-
-        """
-        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
-        if max_deg is not None:
-            JDist, poly_types = self.build_dist(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)
-
-        # Create orthogonal polynomial coefficients if necessary
-        if self.apce and max_deg is not None and Inputs.poly_coeffs_flag:
-            self.polycoeffs = {}
-            for parIdx in tqdm(range(ndim), ascii=True,
-                               desc="Computing orth. polynomial coeffs"):
-                poly_coeffs = apoly_construction(
-                    self.raw_data[parIdx],
-                    max_deg
-                    )
-                self.polycoeffs[f'p_{parIdx+1}'] = poly_coeffs
-
-        # 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, up_bound = Inputs.Marginals[i].parameters
-            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)
-
-        return self.raw_data, self.bound_tuples
-
-    # -------------------------------------------------------------------------
-    def build_dist(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'
-                dist = chaospy.Uniform(lower=params[0], upper=params[1])
-
-            elif 'norm' in dist_type.lower() and \
-                 'log' not in dist_type.lower():
-                polytype = 'hermite'
-                dist = chaospy.Normal(mu=params[0], sigma=params[1])
-
-            elif 'gamma' in dist_type.lower():
-                polytype = 'laguerre'
-                dist = chaospy.Gamma(shape=params[0],
-                                     scale=params[1],
-                                     shift=params[2])
-
-            elif 'beta' in dist_type.lower():
-                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'
-                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 = 'arbitrary'
-                dist = chaospy.Exponential(scale=params[0], shift=params[1])
-
-            elif 'weibull' in dist_type.lower():
-                polytype = 'arbitrary'
-                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)
-            orig_space_dist = st.gaussian_kde(Data)
-            self.prior_space = orig_space_dist
-        else:
-            orig_space_dist = chaospy.J(*orig_joints)
-            self.prior_space = st.gaussian_kde(orig_space_dist.sample(10000))
-
-        return orig_space_dist, poly_types
-
-    # -------------------------------------------------------------------------
-    def random_sampler(self, n_samples):
-        """
-        Samples the given raw data randomly.
-
-        Parameters
-        ----------
-        n_samples : int
-            Number of requested samples.
-
-        Returns
-        -------
-        samples: array of shape (n_samples, n_params)
-            The sampling locations in the input space.
-
-        """
-        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 self._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 self._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, max_deg):
-        """
-        Generates collocation points based on the root of the polynomial
-        degrees.
-
-        Parameters
-        ----------
-        max_deg : int
-            Maximum degree defined by user.
-
-        Returns
-        -------
-        opt_col_points: array of shape (n_samples, n_params)
-            Collocation points.
-
-        """
-
-        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)
-
-        guess_Deg = np.where(M_uptoMax(max_deg) > self.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):
-            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
-
-    # -------------------------------------------------------------------------
-    def transform(self, X, params=None, method=None):
-        """
-        Transform 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.
-
-        """
-        if self.InputObj.Rosenblatt:
-            self.origJDist, _ = self.build_dist(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':
-                    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
-
-    # -------------------------------------------------------------------------
-    def fit_dist(self, y):
-        """
-        Fits the known distributions to the data.
-
-        Parameters
-        ----------
-        y : array of shape (n_samples)
-            Data to be fitted.
-
-        Returns
-        -------
-        sel_dist: string
-            Selected distribution type from `lognorm`, `norm`, `uniform` or
-            `expon`.
-        params : list
-            Parameters corresponding to the selected distibution type.
-
-        """
-        dist_results = []
-        params = {}
-        dist_names = ['lognorm', 'norm', 'uniform', 'expon']
-        for dist_name in dist_names:
-            dist = getattr(st, dist_name)
-
-            try:
-                if dist_name != 'lognorm':
-                    param = dist.fit(y)
-                else:
-                    param = dist.fit(np.exp(y), floc=0)
-            except:
-                param = dist.fit(y)
-
-            params[dist_name] = param
-            # Applying the Kolmogorov-Smirnov test
-            D, p = st.kstest(y, dist_name, args=param)
-            dist_results.append((dist_name, D))
-
-        # select the best fitted distribution
-        sel_dist, D = (min(dist_results, key=lambda item: item[1]))
-
-        if sel_dist == 'uniform':
-            params[sel_dist] = [params[sel_dist][0], params[sel_dist][0] +
-                                params[sel_dist][1]]
-        if D < 0.05:
-            return sel_dist, params[sel_dist]
-        else:
-            return None, None
-
-    # -------------------------------------------------------------------------
-    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/only-model/bayesvalidrox/surrogate_models/exploration.py b/examples/only-model/bayesvalidrox/surrogate_models/exploration.py
deleted file mode 100644
index cb3ccfcd4..000000000
--- a/examples/only-model/bayesvalidrox/surrogate_models/exploration.py
+++ /dev/null
@@ -1,468 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-
-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
-    ----------
-    MetaModel : obj
-        MetaModel 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, MetaModel, n_candidate,
-                 mc_criterion='mc-intersite-proj-th'):
-        self.MetaModel = MetaModel
-        self.Marginals = []
-        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.
-        """
-        MetaModel = self.MetaModel
-        explore_method = MetaModel.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.MetaModel.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.
-        """
-        MetaModel = self.MetaModel
-        explore_method = MetaModel.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 = MetaModel.ExpDesign.X
-        ndim = old_ED_X.shape[1]
-
-        # ----- Compute the number of random points -----
-        if all_candidates is None:
-            # Generate MC Samples
-            all_candidates = MetaModel.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.
-        """
-        MetaModel = self.MetaModel
-
-        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 = MetaModel.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
-
-#if __name__ == "__main__":
-#    import scipy.stats as stats
-#    import matplotlib.pyplot as plt
-#    import matplotlib as mpl
-#    import matplotlib.cm as cm
-#    plt.rc('font', family='sans-serif', serif='Arial')
-#    plt.rc('figure', figsize = (12, 8))
-#    
-#    def plotter(old_ED_X, all_candidates, exploration_scores):
-#        global Bounds
-#        
-#        from scipy.spatial import Voronoi, voronoi_plot_2d
-#        vor = Voronoi(old_ED_X)
-#        
-#        fig = voronoi_plot_2d(vor)
-#        
-#        # find min/max values for normalization
-##        minima = min(exploration_scores)
-##        maxima = max(exploration_scores)
-##        
-##        # normalize chosen colormap
-##        norm = mpl.colors.Normalize(vmin=minima, vmax=maxima, clip=True)
-##        mapper = cm.ScalarMappable(norm=norm, cmap=cm.Blues_r)
-##        
-##        for r in range(len(vor.point_region)):
-##            region = vor.regions[vor.point_region[r]]
-##            if not -1 in region:
-##                polygon = [vor.vertices[i] for i in region]
-##                plt.fill(*zip(*polygon), color=mapper.to_rgba(exploration_scores[r]))
-#        
-#        
-#        ax1 = fig.add_subplot(111)
-#        
-#        ax1.scatter(old_ED_X[:,0], old_ED_X[:,1], s=10, c='r', marker="s", label='Old Design Points')
-#        for i in range(old_ED_X.shape[0]):
-#            txt = 'p'+str(i+1)
-#            ax1.annotate(txt, (old_ED_X[i,0],old_ED_X[i,1]))
-#            
-##        for i in range(NrofCandGroups):
-##            Candidates = all_candidates['group_'+str(i+1)]
-##            ax1.scatter(Candidates[:,0],Candidates[:,1], s=10, c='b', marker="o", label='Design candidates')
-#        ax1.scatter(all_candidates[:,0],all_candidates[:,1], s=10, c='b', marker="o", label='Design candidates')
-#        
-#        ax1.set_xlim(Bounds[0][0], Bounds[0][1])
-#        ax1.set_ylim(Bounds[1][0], Bounds[1][1])
-#        
-#        plt.legend(loc='best');
-#        plt.show()
-#        
-#    def voronoi_volumes(points):
-#        from scipy.spatial import Voronoi, ConvexHull
-#        v = Voronoi(points)
-#        vol = np.zeros(v.npoints)
-#        
-#        for i, reg_num in enumerate(v.point_region):
-#            indices = v.regions[reg_num]
-#            if -1 in indices: # some regions can be opened
-#                vol[i] = np.inf
-#            else:
-#                
-#                #print("reg_num={0: 3.3f} X1={1: 3.3f} X2={2: 3.3f}".format(reg_num, v.points[reg_num-1, 0], v.points[reg_num-1, 1]))
-#                vol[i] = ConvexHull(v.vertices[indices]).volume
-#        
-#        print('-'*40)
-#        for i in range(nrofSamples):
-#            print("idx={0:d} X1={1: 3.3f} X2={2: 3.3f} Volume={3: 3.3f}".format(i+1, v.points[i, 0], v.points[i, 1], vol[i]))
-#        
-#        return vol    
-#    
-#    NofPa = 2
-#    
-#    Bounds = ((-5,10), (0,15))
-#    
-#    nrofSamples = 10
-#    old_ED_X = np.zeros((nrofSamples, NofPa))
-#    for idx in range(NofPa):
-#        Loc = Bounds[idx][0]
-#        Scale = Bounds[idx][1] - Bounds[idx][0]
-#        old_ED_X[:,idx] = stats.uniform(loc=Loc, scale=Scale).rvs(size=nrofSamples)
-#    
-#    
-#    nNewCandidate = 40
-#    
-#    # New Function
-#    volumes = voronoi_volumes(old_ED_X)
-#    
-#    
-#    # SUMO
-#    Exploration = Exploration(Bounds, old_ED_X, nNewCandidate)
-#    
-#    #all_candidates, Score = Exploration.get_vornoi_samples()
-#    all_candidates, Score = Exploration.get_mc_samples()
-#    
-#    print('-'*40)
-##    for i in range(nrofSamples):
-##        print("idx={0:d} X1={1: 3.3f} X2={2: 3.3f} Volume={3: 3.3f}".format(i+1, old_ED_X[i,0], old_ED_X[i,1], vornoi.areas[i]))
-#        
-#    plotter(old_ED_X, all_candidates, volumes)
-    
diff --git a/examples/only-model/bayesvalidrox/surrogate_models/glexindex.py b/examples/only-model/bayesvalidrox/surrogate_models/glexindex.py
deleted file mode 100644
index 6d9ba3c2f..000000000
--- a/examples/only-model/bayesvalidrox/surrogate_models/glexindex.py
+++ /dev/null
@@ -1,210 +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)
-    indices = _glexindex(start, stop, cross_truncation)
-    if indices.size:
-        indices = indices[glexsort(indices.T, graded=graded, reverse=reverse)]
-    return indices
-
-
-def _glexindex(start, stop, cross_truncation=1.):
-    """Backend for the glexindex function."""
-    # At the beginning the current list of indices just ranges over the
-    # last dimension.
-    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]
-
-    return numpy.array(indices, dtype=int).reshape(-1, dimensions)
-
-
-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
-
-
-def glexsort(
-    keys: numpy.typing.ArrayLike,
-    graded: bool = False,
-    reverse: bool = False,
-) -> numpy.ndarray:
-    """
-    Sort keys using graded lexicographical ordering.
-    Same as ``numpy.lexsort``, but also support graded and reverse
-    lexicographical ordering.
-    Args:
-        keys:
-            Values to sort.
-        graded:
-            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:
-            Reverse lexicographical sorting meaning that ``(1, 3)`` is
-            considered smaller than ``(3, 1)``, instead of the opposite.
-    Returns:
-        Array of indices that sort the keys along the specified axis.
-    Examples:
-        >>> indices = numpy.array([[0, 0, 0, 1, 2, 1],
-        ...                        [1, 2, 0, 0, 0, 1]])
-        >>> indices[:, numpy.lexsort(indices)]
-        array([[0, 1, 2, 0, 1, 0],
-               [0, 0, 0, 1, 1, 2]])
-        >>> indices[:, numpoly.glexsort(indices)]
-        array([[0, 1, 2, 0, 1, 0],
-               [0, 0, 0, 1, 1, 2]])
-        >>> indices[:, numpoly.glexsort(indices, reverse=True)]
-        array([[0, 0, 0, 1, 1, 2],
-               [0, 1, 2, 0, 1, 0]])
-        >>> indices[:, numpoly.glexsort(indices, graded=True)]
-        array([[0, 1, 0, 2, 1, 0],
-               [0, 0, 1, 0, 1, 2]])
-        >>> indices[:, numpoly.glexsort(indices, graded=True, reverse=True)]
-        array([[0, 0, 1, 0, 1, 2],
-               [0, 1, 0, 2, 1, 0]])
-        >>> indices = numpy.array([4, 5, 6, 3, 2, 1])
-        >>> indices[numpoly.glexsort(indices)]
-        array([1, 2, 3, 4, 5, 6])
-    """
-    keys_ = numpy.atleast_2d(keys)
-    if reverse:
-        keys_ = keys_[::-1]
-
-    indices = numpy.array(numpy.lexsort(keys_))
-    if graded:
-        indices = indices[numpy.argsort(
-            numpy.sum(keys_[:, indices], axis=0))].T
-    return indices
diff --git a/examples/only-model/bayesvalidrox/surrogate_models/inputs.py b/examples/only-model/bayesvalidrox/surrogate_models/inputs.py
deleted file mode 100644
index 783e82b05..000000000
--- a/examples/only-model/bayesvalidrox/surrogate_models/inputs.py
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-
-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/only-model/bayesvalidrox/surrogate_models/meta_model_engine.py b/examples/only-model/bayesvalidrox/surrogate_models/meta_model_engine.py
deleted file mode 100644
index 7ca9e9cca..000000000
--- a/examples/only-model/bayesvalidrox/surrogate_models/meta_model_engine.py
+++ /dev/null
@@ -1,2175 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-"""
-Created on Fri Jan 28 09:21:18 2022
-
-@author: farid
-"""
-import numpy as np
-from scipy import stats, signal, linalg, sparse
-from scipy.spatial import distance
-from copy import deepcopy, copy
-from tqdm import tqdm
-import scipy.optimize as opt
-from sklearn.metrics import mean_squared_error
-import multiprocessing
-import matplotlib.pyplot as plt
-import sys
-import os
-import gc
-import seaborn as sns
-from joblib import Parallel, delayed
-
-import bayesvalidrox
-from .exploration import Exploration
-from bayesvalidrox.bayes_inference.bayes_inference import BayesInference
-from bayesvalidrox.bayes_inference.discrepancy import Discrepancy
-import pandas as pd
-
-
-class MetaModelEngine():
-    """ Sequential experimental design
-    This class provieds method for trainig the meta-model in an iterative
-    manners.
-    The main method to execute the task is `train_seq_design`, which
-      recieves a model object and returns the trained metamodel.
-    """
-
-    def __init__(self, meta_model_opts):
-        self.MetaModel = meta_model_opts
-
-    # -------------------------------------------------------------------------
-    def run(self):
-
-        Model = self.MetaModel.ModelObj
-        self.MetaModel.n_params = len(self.MetaModel.input_obj.Marginals)
-        self.MetaModel.ExpDesignFlag = 'normal'
-        # --- Prepare pce degree ---
-        if self.MetaModel.meta_model_type.lower() == 'pce':
-            if type(self.MetaModel.pce_deg) is not np.ndarray:
-                self.MetaModel.pce_deg = np.array(self.MetaModel.pce_deg)
-
-        if self.MetaModel.ExpDesign.method == 'normal':
-            self.MetaModel.ExpDesignFlag = 'normal'
-            self.MetaModel.train_norm_design(parallel = False)
-
-        elif self.MetaModel.ExpDesign.method == 'sequential':
-            self.train_seq_design()
-        else:
-            raise Exception("The method for experimental design you requested"
-                            " has not been implemented yet.")
-
-        # Zip the model run directories
-        if self.MetaModel.ModelObj.link_type.lower() == 'pylink' and\
-           self.MetaModel.ExpDesign.sampling_method.lower() != 'user':
-            Model.zip_subdirs(Model.name, f'{Model.name}_')
-
-    # -------------------------------------------------------------------------
-    def train_seq_design(self):
-        """
-        Starts the adaptive sequential design for refining the surrogate model
-        by selecting training points in a sequential manner.
-
-        Returns
-        -------
-        MetaModel : object
-            Meta model object.
-
-        """
-        # Set model to have shorter call 
-        Model = self.MetaModel.ModelObj
-        # MetaModel = self.MetaModel
-        self.Model = Model
-
-        # Initialization
-        self.MetaModel.SeqModifiedLOO = {}
-        self.MetaModel.seqValidError = {}
-        self.MetaModel.SeqBME = {}
-        self.MetaModel.SeqKLD = {}
-        self.MetaModel.SeqDistHellinger = {}
-        self.MetaModel.seqRMSEMean = {}
-        self.MetaModel.seqRMSEStd = {}
-        self.MetaModel.seqMinDist = []
-
-        # Determine the metamodel type
-        if self.MetaModel.meta_model_type.lower() != 'gpe':
-            pce = True
-        else:
-            pce = False
-        # If given, use mc reference data
-        mc_ref = True if bool(Model.mc_reference) else False
-        if mc_ref:
-            Model.read_mc_reference()
-
-        # if valid_samples not defined, do so now
-        if not hasattr(self.MetaModel, 'valid_samples'):
-            self.MetaModel.valid_samples = []
-            self.MetaModel.valid_model_runs = []
-            self.MetaModel.valid_likelihoods = []
-
-        # Get the parameters
-        max_n_samples = self.MetaModel.ExpDesign.n_max_samples
-        mod_LOO_threshold = self.MetaModel.ExpDesign.mod_LOO_threshold
-        n_canddidate = self.MetaModel.ExpDesign.n_canddidate
-        post_snapshot = self.MetaModel.ExpDesign.post_snapshot
-        n_replication = self.MetaModel.ExpDesign.n_replication
-        util_func = self.MetaModel.ExpDesign.util_func
-        output_name = Model.Output.names
-        validError = None
-        # Handle if only one UtilityFunctions is provided
-        if not isinstance(util_func, list):
-            util_func = [self.MetaModel.ExpDesign.util_func]
-
-        # Read observations or MCReference
-        if len(Model.observations) != 0 or Model.meas_file is not None:
-            self.observations = Model.read_observation()
-            obs_data = self.observations
-        else:
-            obs_data = []
-            TotalSigma2 = {}
-            
-        # TODO: ---------- Initial self.MetaModel ----------
-        # First run MetaModel on non-sequential design
-        self.MetaModel.train_norm_design(parallel = False)
-        initMetaModel = deepcopy(self.MetaModel)
-
-        # Validation error if validation set is provided. - use as initial errors
-        if self.MetaModel.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(
-                initMetaModel, 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.MetaModel.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
-        # TODO: this sequential, or the non-sequential samples??
-        Xinit = initMetaModel.ExpDesign.X
-        init_n_samples = len(initMetaModel.ExpDesign.X)
-        initYprev = initMetaModel.ModelOutputDict
-        initLCerror = initMetaModel.LCerror
-        n_itrs = max_n_samples - init_n_samples
-
-        # Read the initial ModifiedLOO
-        if pce:
-            Scores_all, varExpDesignY = [], []
-            for out_name in output_name:
-                y = self.MetaModel.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 = {}
-        # Replicate the sequential design
-        for repIdx in range(n_replication):                     # TODO: what does this do?
-            print(f'\n>>>> Replication: {repIdx+1}<<<<')
-
-            # To avoid changes ub original aPCE object
-            self.MetaModel.ExpDesign.X = Xinit
-            self.MetaModel.ExpDesign.Y = initYprev
-            self.MetaModel.LCerror = initLCerror
-
-            for util_f in util_func:                            # TODO: recheck choices for this
-                print(f'\n>>>> Utility Function: {util_f} <<<<')
-                # To avoid changes ub original aPCE object
-                self.MetaModel.ExpDesign.X = Xinit
-                self.MetaModel.ExpDesign.Y = initYprev
-                self.MetaModel.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.MetaModel.valid_model_runs) != 0:
-                    SeqValidError = np.array(init_valid_error)
-
-                # Check if data is provided
-                if len(obs_data) != 0:
-                    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)           # Write last MetaModel here
-                    if itr_no > 1:
-                        pc_model = prevMetaModel_dict[itr_no-1]                     
-                        self._y_hat_prev, _ = pc_model.eval_metamodel(              # What's the use of this here??
-                            samples=Xfull[-1].reshape(1, -1))
-                        del prevMetaModel_dict[itr_no-1]                            # Delete second to last metamodel here?
-
-                    # Optimal Bayesian Design
-                    self.MetaModel.ExpDesignFlag = 'sequential'
-                    Xnew, updatedPrior = self.opt_SeqDesign(TotalSigma2,            # TODO: check in this!!
-                                                            n_canddidate,
-                                                            util_f)
-                    S = np.min(distance.cdist(Xinit, Xnew, 'euclidean'))
-                    self.MetaModel.seqMinDist.append(S)
-                    print(f"\nmin Dist from OldExpDesign: {S:2f}")
-                    print("\n")
-
-                    # Evaluate the full model response at the new sample
-                    Ynew, _ = 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.MetaModel, 'adapt_verbose') and \
-                       self.MetaModel.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.MetaModel.ModelOutputDict[out_name] = Yfull
-
-                    # Pass new design to the metamodel object
-                    self.MetaModel.ExpDesign.sampling_method = 'user'
-                    self.MetaModel.ExpDesign.X = Xfull
-                    self.MetaModel.ExpDesign.Y = self.MetaModel.ModelOutputDict
-
-                    # Save the Experimental Design for next iteration
-                    Xprev = Xfull
-                    Yprev = self.MetaModel.ModelOutputDict
-
-                    # Pass the new prior as the input
-                    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.MetaModel.train_norm_design(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.MetaModel.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.MetaModel.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.MetaModel.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(self.MetaModel, 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.MetaModel.ExpDesign.step_snapshot
-                        if post_snapshot and postcnt % step_snapshot == 0:
-                            parNames = self.MetaModel.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.MetaModel.SeqModifiedLOO[strKey] = SeqModifiedLOO
-                if len(self.MetaModel.valid_model_runs) != 0:
-                    self.MetaModel.seqValidError[strKey] = SeqValidError
-
-                # Check if data is provided
-                if len(obs_data) != 0:
-                    self.MetaModel.SeqBME[strKey] = SeqBME
-                    self.MetaModel.SeqKLD[strKey] = SeqKLD
-                if hasattr(self.MetaModel, 'valid_likelihoods') and \
-                   self.MetaModel.valid_likelihoods:
-                    self.MetaModel.SeqDistHellinger[strKey] = SeqDistHellinger
-                if mc_ref and pce:
-                    self.MetaModel.seqRMSEMean[strKey] = seqRMSEMean
-                    self.MetaModel.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 = MetaModel.ExpDesign.X
-        out_dict_y = MetaModel.ExpDesign.Y
-        out_names = MetaModel.ModelObj.Output.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
-        n_obs = self.Model.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))
-        for key in list(y_hat):
-            cov = np.diag(std[key]**2)
-            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)
-
-        # 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 update_metamodel(self, MetaModel, output, y_hat_can, univ_p_val, index,
-                         new_pca=False):
-        BasisIndices = MetaModel.basis_dict[output]["y_"+str(index+1)]
-        clf_poly = MetaModel.clf_poly[output]["y_"+str(index+1)]
-        Mn = clf_poly.coef_
-        Sn = clf_poly.sigma_
-        beta = clf_poly.alpha_
-        active = clf_poly.active_
-        Psi = self.MetaModel.create_psi(BasisIndices, univ_p_val)
-
-        Sn_new_inv = np.linalg.inv(Sn)
-        Sn_new_inv += beta * np.dot(Psi[:, active].T, Psi[:, active])
-        Sn_new = np.linalg.inv(Sn_new_inv)
-
-        Mn_new = np.dot(Sn_new_inv, Mn[active]).reshape(-1, 1)
-        Mn_new += beta * np.dot(Psi[:, active].T, y_hat_can)
-        Mn_new = np.dot(Sn_new, Mn_new).flatten()
-
-        # Compute the old and new moments of PCEs
-        mean_old = Mn[0]
-        mean_new = Mn_new[0]
-        std_old = np.sqrt(np.sum(np.square(Mn[1:])))
-        std_new = np.sqrt(np.sum(np.square(Mn_new[1:])))
-
-        # Back transformation if PCA is selected.
-        if MetaModel.dim_red_method.lower() == 'pca':
-            old_pca = MetaModel.pca[output]
-            mean_old = old_pca.mean_[index]
-            mean_old += np.sum(mean_old * old_pca.components_[:, index])
-            std_old = np.sqrt(np.sum(std_old**2 *
-                                     old_pca.components_[:, index]**2))
-            mean_new = new_pca.mean_[index]
-            mean_new += np.sum(mean_new * new_pca.components_[:, index])
-            std_new = np.sqrt(np.sum(std_new**2 *
-                                     new_pca.components_[:, index]**2))
-            # print(f"mean_old: {mean_old:.2f} mean_new: {mean_new:.2f}")
-            # print(f"std_old: {std_old:.2f} std_new: {std_new:.2f}")
-        # Store the old and new moments of PCEs
-        results = {
-            'mean_old': mean_old,
-            'mean_new': mean_new,
-            'std_old': std_old,
-            'std_new': std_new
-            }
-        return results
-
-    # -------------------------------------------------------------------------
-    def util_BayesianDesign_old(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
-        Model = self.Model
-        MetaModel = deepcopy(self.MetaModel)
-        old_EDY = MetaModel.ExpDesign.Y
-
-        # Evaluate the PCE metamodels using the candidate design
-        Y_PC_can, Y_std_can = self.MetaModel.eval_metamodel(
-            samples=np.array([X_can])
-            )
-
-        # Generate y from posterior predictive
-        m_size = 100
-        y_hat_samples = {}
-        for idx, key in enumerate(Model.Output.names):
-            means, stds = Y_PC_can[key][0], Y_std_can[key][0]
-            y_hat_samples[key] = np.random.multivariate_normal(
-                means, np.diag(stds), m_size)
-
-        # Create the SparseBayes-based PCE metamodel:
-        MetaModel.input_obj.poly_coeffs_flag = False
-        univ_p_val = self.MetaModel.univ_basis_vals(X_can)
-        G_n_m_all = np.zeros((m_size, len(Model.Output.names), Model.n_obs))
-
-        for i in range(m_size):
-            for idx, key in enumerate(Model.Output.names):
-                if MetaModel.dim_red_method.lower() == 'pca':
-                    # Equal number of components
-                    new_outputs = np.vstack(
-                        (old_EDY[key], y_hat_samples[key][i])
-                        )
-                    new_pca, _ = MetaModel.pca_transformation(new_outputs)
-                    target = new_pca.transform(
-                        y_hat_samples[key][i].reshape(1, -1)
-                        )[0]
-                else:
-                    new_pca, target = False, y_hat_samples[key][i]
-
-                for j in range(len(target)):
-
-                    # Update surrogate
-                    result = self.update_metamodel(
-                        MetaModel, key, target[j], univ_p_val, j, new_pca)
-
-                    # Compute Expected Information Gain (Eq. 39)
-                    G_n_m = np.log(result['std_old']/result['std_new']) - 1./2
-                    G_n_m += result['std_new']**2 / (2*result['std_old']**2)
-                    G_n_m += (result['mean_new'] - result['mean_old'])**2 /\
-                        (2*result['std_old']**2)
-
-                    G_n_m_all[i, idx, j] = G_n_m
-
-        U_J_d = G_n_m_all.mean(axis=(1, 2)).mean()
-        return -1 * U_J_d
-
-    # -------------------------------------------------------------------------
-    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 = MetaModel.ModelObj.Output.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 = MetaModel.ExpDesign.X
-        oldExpDesignY = MetaModel.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)
-        # 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])
-                )
-
-        PCE_Model_can.ExpDesign.sampling_method = 'user'
-        PCE_Model_can.ExpDesign.X = NewExpDesignX
-        PCE_Model_can.ModelOutputDict = NewExpDesignY
-        PCE_Model_can.ExpDesign.Y = NewExpDesignY
-
-        # Train the model for the observed data using x_can
-        PCE_Model_can.input_obj.poly_coeffs_flag = False
-        PCE_Model_can.train_norm_design(parallel=False)
-
-        # Set the ExpDesign to its original values
-        PCE_Model_can.ExpDesign.X = oldExpDesignX
-        PCE_Model_can.ModelOutputDict = oldExpDesignY
-        PCE_Model_can.ExpDesign.Y = oldExpDesignY
-
-        if var.lower() == 'mi':
-            # Mutual information based on Krause et al
-            # Adapted from Beck & Guillas (MICE) paper
-            _, std_PC_can = PCE_Model_can.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 = PCE_Model_can.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.MetaModel.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))
-
-            # 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 subdomain(self, 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 : TYPE
-            DESCRIPTION.
-
-        Returns
-        -------
-        Subdomains : TYPE
-            DESCRIPTION.
-
-        """
-        n_params = self.MetaModel.n_params
-        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
-
-    # -------------------------------------------------------------------------
-    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()}
-                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 algorithim 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.MetaModel.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 tradoff_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.MetaModel.ExpDesign.n_init_samples
-            n_max_samples = self.MetaModel.ExpDesign.n_max_samples
-
-            itrNumber = (self.MetaModel.ExpDesign.X.shape[0] - initNSamples)
-            itrNumber //= self.MetaModel.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.MetaModel.ExpDesign.n_init_samples
-            n_max_samples = self.MetaModel.ExpDesign.n_max_samples
-            itrNumber = (self.MetaModel.ExpDesign.X.shape[0] - initNSamples)
-            itrNumber //= self.MetaModel.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 opt_SeqDesign(self, sigma2, 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.
-
-        Raises
-        ------
-        NameError
-            Wrong utility function.
-
-        Returns
-        -------
-        Xnew : array (n_samples, n_params)
-            Selected new training point(s).
-        """
-
-        # Initialization
-        MetaModel = self.MetaModel
-        Bounds = MetaModel.bound_tuples
-        n_new_samples = MetaModel.ExpDesign.n_new_samples
-        explore_method = MetaModel.ExpDesign.explore_method
-        exploit_method = MetaModel.ExpDesign.exploit_method
-        n_cand_groups = MetaModel.ExpDesign.n_cand_groups
-        tradeoff_scheme = MetaModel.ExpDesign.tradeoff_scheme
-
-        old_EDX = MetaModel.ExpDesign.X
-        old_EDY = MetaModel.ExpDesign.Y.copy()
-        ndim = MetaModel.ExpDesign.X.shape[1]
-        OutputNames = MetaModel.ModelObj.Output.names
-
-        # -----------------------------------------
-        # ----------- CUSTOMIZED METHODS ----------
-        # -----------------------------------------
-        # Utility function exploit_method provided by user
-        if exploit_method.lower() == 'user':
-
-            Xnew, filteredSamples = MetaModel.ExpDesign.ExploitFunction(self)
-
-            print("\n")
-            print("\nXnew:\n", Xnew)
-
-            return Xnew, filteredSamples
-
-        # -----------------------------------------
-        # ---------- EXPLORATION METHODS ----------
-        # -----------------------------------------
-        if explore_method == 'dual annealing':
-            # ------- EXPLORATION: OPTIMIZATION -------
-            import time
-            start_time = time.time()
-
-            # Divide the domain to subdomains
-            args = []
-            subdomains = self.subdomain(Bounds, n_new_samples)
-            for i in range(n_new_samples):
-                args.append((exploit_method, subdomains[i], sigma2, var, i))
-
-            # Multiprocessing
-            pool = multiprocessing.Pool(multiprocessing.cpu_count())
-
-            # With Pool.starmap_async()
-            results = pool.starmap_async(self.dual_annealing, args).get()
-
-            # Close the pool
-            pool.close()
-
-            Xnew = np.array([results[i][1] for i in range(n_new_samples)])
-
-            print("\nXnew:\n", Xnew)
-
-            elapsed_time = time.time() - start_time
-            print("\n")
-            print(f"elapsed_time: {round(elapsed_time,2)} sec.")
-            print('-'*20)
-
-        elif explore_method == 'LOOCV':
-            # -----------------------------------------------------------------
-            # TODO: LOOCV model construnction based on Feng et al. (2020)
-            # 'LOOCV':
-            # Initilize the ExploitScore array
-
-            # Generate random samples
-            allCandidates = MetaModel.ExpDesign.generate_samples(n_candidates,
-                                                                'random')
-
-            # Construct error model based on LCerror
-            errorModel = 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(MetaModel, 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.tradoff_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:
-
-                # Create a sample pool for rejection sampling
-                MCsize = 15000
-                X_MC = MetaModel.ExpDesign.generate_samples(MCsize, 'random')
-                candidates = MetaModel.ExpDesign.generate_samples(
-                    MetaModel.ExpDesign.max_func_itr, 'latin_hypercube')
-
-                # Split the candidates in groups for multiprocessing
-                split_cand = np.array_split(
-                    candidates, n_cand_groups, axis=0
-                    )
-
-                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))
-                # out = map(self.run_util_func,
-                #           [exploit_method]*n_cand_groups,
-                #           split_cand,
-                #           range(n_cand_groups),
-                #           [sigma2] * n_cand_groups,
-                #           [var] * n_cand_groups,
-                #           [X_MC] * n_cand_groups
-                #           )
-                # results = list(out)
-
-                # 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)
-
-                # create surrogate model for U_J_d
-                # from sklearn.preprocessing import MinMaxScaler
-                # # Take care of inf entries
-                # good_indices = [i for i, arr in enumerate(U_J_d)
-                #                 if np.isfinite(arr).all()]
-                # scaler = MinMaxScaler()
-                # X_S = scaler.fit_transform(candidates[good_indices])
-                # gp = MetaModel.gaussian_process_emulator(
-                #     X_S, U_J_d[good_indices], autoSelect=False
-                #     )
-                # U_J_d = gp.predict(scaler.transform(allCandidates))
-
-                # 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
-            # TODO: added this, recheck!!
-            finalCandidates = np.concatenate((allCandidates, candidates), axis = 0)   
-            finalCandidates = np.unique(finalCandidates, axis = 0)
-            
-            # TODO: changed this from the above to 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]
-                
-
-            # 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:
-                # TODO: changed this from allCandiates to full set of candidates - still not changed for e.g. 'Voronoi'
-                Xnew = finalCandidates[sorted_idxtotalScore[:n_new_samples]]          # here candidates(exploitation) vs allCandidates (exploration)!!
-
-        elif exploit_method == 'VarOptDesign':
-            # ------- EXPLOITATION: VarOptDesign -------
-            UtilMethod = var
-
-            # ------- Calculate Exoploration weight -------
-            # Compute exploration weight based on trade off scheme
-            explore_w, exploit_w = self.tradoff_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]
-
-            # Find sensitive region
-            if UtilMethod == 'LOOCV':
-                LCerror = 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)
-
-            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()
-                # out = map(self.run_util_func,
-                #           [exploit_method]*len(goodSampleIdx),
-                #           split_cand,
-                #           range(len(goodSampleIdx)),
-                #           [sigma2] * len(goodSampleIdx),
-                #           [var] * len(goodSampleIdx)
-                #           )
-                # results = list(out)
-
-                # 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.')
-
-            # 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
-            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)
-
-        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
-        Model = self.Model
-        n_new_samples = MetaModelOrig.ExpDesign.n_new_samples
-        NCandidate = candidates.shape[0]
-
-        # TODO: Loop over outputs
-        OutputName = Model.Output.names[0]
-
-        # To avoid changes ub original aPCE object
-        MetaModel = deepcopy(MetaModelOrig)
-
-        # Old Experimental design
-        oldExpDesignX = MetaModel.ExpDesign.X
-
-        # TODO: Only one psi can be selected.
-        # Suggestion: Go for the one with the highest LOO error
-        Scores = list(MetaModel.score_dict[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))
-
-        BasisIndices = MetaModelOrig.basis_dict[OutputName]["y_"+str(outIdx+1)]
-        P = len(BasisIndices)
-
-        # ------ Old Psi ------------
-        univ_p_val = MetaModelOrig.univ_basis_vals(oldExpDesignX)
-        Psi = MetaModelOrig.create_psi(BasisIndices, univ_p_val)
-
-        # ------ New candidates (Psi_c) ------------
-        # Assemble Psi_c
-        univ_p_val_c = self.univ_basis_vals(candidates)
-        Psi_c = self.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 == 'D-Opt':
-                Phi[idx] = (np.linalg.det(invM)) ** (1/P)
-
-            # A-Opt
-            elif var == 'A-Opt':
-                Phi[idx] = np.trace(invM)
-
-            # K-Opt
-            elif var == 'K-Opt':
-                Phi[idx] = np.linalg.cond(M)
-
-            else:
-                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):
-
-        Model = self.Model
-        likelihoods = 1.0
-
-        # Loop over the outputs
-        for idx, out in enumerate(Model.Output.names):
-
-            # (Meta)Model Output
-            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)
-
-        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 = MetaModel.ExpDesign.X  # valid_samples
-        model_outputs = MetaModel.ExpDesign.Y  # valid_model_runs
-        Model = MetaModel.ModelObj
-        n_samples = samples.shape[0]
-
-        # Extract the requested model outputs for likelihood calulation
-        output_names = Model.Output.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] += self.__logpdf(
-                    y_m_hat, data, covMatrix_data
-                    )
-
-                # Compute likelilhood output vs surrogate
-                logLik_model[i] += self.__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 __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 = 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 __posteriorPlot(self, posterior, par_names, key):
-
-        # Initialization
-        newpath = (r'Outputs_SeqPosteriorComparison/posterior')
-        os.makedirs(newpath, exist_ok=True)
-
-        bound_tuples = self.MetaModel.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 __hellinger_distance(self, 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.
-
-        """
-        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 __BME_Calculator(self, MetaModel, obs_data, sigma2Dict, rmse=None):
-        """
-        This function computes the Bayesian model evidence (BME) via Monte
-        Carlo integration.
-
-        """
-        # Initializations
-        if hasattr(MetaModel, 'valid_likelihoods'):
-            valid_likelihoods = MetaModel.valid_likelihoods
-        else:
-            valid_likelihoods = []
-
-        post_snapshot = MetaModel.ExpDesign.post_snapshot
-        #print(f'post_snapshot: {post_snapshot}')
-        if post_snapshot or len(valid_likelihoods) != 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 = MetaModel.ExpDesign.generate_samples(
-                MCsize, SamplingMethod
-                )
-
-            # Monte Carlo simulation for the candidate design
-            Y_MC, std_MC = 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(MetaModel.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 = self.__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 MetaModel.n_params == 2 and not idx % 5:
-            BayesOpts = BayesInference(MetaModel)
-            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 -------
-            obs_data = pd.DataFrame(obs_data, columns=self.Model.Output.names)
-            BayesOpts.measurement_error = 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, MetaModel):
-
-        # MetaModel = self.MetaModel
-        Model = MetaModel.ModelObj
-        OutputName = Model.Output.names
-
-        # Extract the original model with the generated samples
-        valid_samples = MetaModel.valid_samples
-        valid_model_runs = MetaModel.valid_model_runs
-
-        # Run the PCE model with the generated samples
-        valid_PCE_runs, _ = MetaModel.eval_metamodel(samples=valid_samples)
-
-        rms_error = {}
-        valid_error = {}
-        # Loop over the keys and compute RMSE error.
-        for key in OutputName:
-            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):
-
-        MetaModel = self.MetaModel
-        # Extract the mean and std provided by user
-        df_MCReference = MetaModel.ModelObj.mc_reference
-
-        # Compute the mean and std based on the MetaModel
-        pce_means, pce_stds = self._compute_pce_moments(MetaModel)
-
-        # Compute the root mean squared error
-        for output in MetaModel.ModelObj.Output.names:
-
-            # Compute the error between mean and std of MetaModel and OrigModel
-            RMSE_Mean = mean_squared_error(
-                df_MCReference['mean'], pce_means[output], squared=False
-                )
-            RMSE_std = mean_squared_error(
-                df_MCReference['std'], pce_means[output], squared=False
-                )
-
-        return RMSE_Mean, RMSE_std
-
-    # -------------------------------------------------------------------------
-    def _compute_pce_moments(self, MetaModel):
-        """
-        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.
-
-        """
-        outputs = MetaModel.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] = 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/only-model/bayesvalidrox/surrogate_models/orthogonal_matching_pursuit.py b/examples/only-model/bayesvalidrox/surrogate_models/orthogonal_matching_pursuit.py
deleted file mode 100644
index d4f99b8a1..000000000
--- a/examples/only-model/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.float128)
-
-        # ------ 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/only-model/bayesvalidrox/surrogate_models/reg_fast_ard.py b/examples/only-model/bayesvalidrox/surrogate_models/reg_fast_ard.py
deleted file mode 100644
index 44073da8e..000000000
--- a/examples/only-model/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 "
-                               "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/only-model/bayesvalidrox/surrogate_models/reg_fast_laplace.py b/examples/only-model/bayesvalidrox/surrogate_models/reg_fast_laplace.py
deleted file mode 100644
index bdff324ed..000000000
--- a/examples/only-model/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, 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/only-model/bayesvalidrox/surrogate_models/sequential_design.py b/examples/only-model/bayesvalidrox/surrogate_models/sequential_design.py
deleted file mode 100644
index fc81dcd45..000000000
--- a/examples/only-model/bayesvalidrox/surrogate_models/sequential_design.py
+++ /dev/null
@@ -1,2187 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-"""
-Created on Fri Jan 28 09:21:18 2022
-
-@author: farid
-"""
-import numpy as np
-from scipy import stats, signal, linalg, sparse
-from scipy.spatial import distance
-from copy import deepcopy, copy
-from tqdm import tqdm
-import scipy.optimize as opt
-from sklearn.metrics import mean_squared_error
-import multiprocessing
-import matplotlib.pyplot as plt
-import sys
-import os
-import gc
-import seaborn as sns
-from joblib import Parallel, delayed
-import resource
-from .exploration import Exploration
-
-
-class SeqDesign():
-    """ Sequential experimental design
-    This class provieds method for trainig the meta-model in an iterative
-    manners.
-    The main method to execute the task is `train_seq_design`, which
-      recieves a model object and returns the trained metamodel.
-    """
-
-    # -------------------------------------------------------------------------
-    def train_seq_design(self, MetaModel):
-        """
-        Starts the adaptive sequential design for refining the surrogate model
-        by selecting training points in a sequential manner.
-
-        Parameters
-        ----------
-        Model : object
-            An object containing all model specifications.
-
-        Returns
-        -------
-        MetaModel : object
-            Meta model object.
-
-        """
-        # MetaModel = self
-        Model = MetaModel.ModelObj
-        self.MetaModel = MetaModel
-        self.Model = Model
-
-        # Initialization
-        MetaModel.SeqModifiedLOO = {}
-        MetaModel.seqValidError = {}
-        MetaModel.SeqBME = {}
-        MetaModel.SeqKLD = {}
-        MetaModel.SeqDistHellinger = {}
-        MetaModel.seqRMSEMean = {}
-        MetaModel.seqRMSEStd = {}
-        MetaModel.seqMinDist = []
-        pce = True if MetaModel.meta_model_type.lower() != 'gpe' else False
-        mc_ref = True if bool(Model.mc_reference) else False
-        if mc_ref:
-            Model.read_mc_reference()
-
-        if not hasattr(MetaModel, 'valid_likelihoods'):
-            MetaModel.valid_samples = []
-            MetaModel.valid_model_runs = []
-            MetaModel.valid_likelihoods = []
-
-        # Get the parameters
-        max_n_samples = MetaModel.ExpDesign.n_max_samples
-        mod_LOO_threshold = MetaModel.ExpDesign.mod_LOO_threshold
-        n_canddidate = MetaModel.ExpDesign.n_canddidate
-        post_snapshot = MetaModel.ExpDesign.post_snapshot
-        n_replication = MetaModel.ExpDesign.n_replication
-        util_func = MetaModel.ExpDesign.util_func
-        output_name = Model.Output.names
-        validError = None
-        # Handle if only one UtilityFunctions is provided
-        if not isinstance(util_func, list):
-            util_func = [MetaModel.ExpDesign.util_func]
-
-        # Read observations or MCReference
-        if len(Model.observations) != 0 or Model.meas_file is not None:
-            self.observations = Model.read_observation()
-            obs_data = self.observations
-        else:
-            obs_data = []
-            TotalSigma2 = {}
-        # ---------- Initial MetaModel ----------
-        initMetaModel = deepcopy(MetaModel)
-
-        # Validation error if validation set is provided.
-        if len(MetaModel.valid_model_runs) != 0:
-            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(MetaModel, 'Discrepancy'):
-            TotalSigma2 = MetaModel.Discrepancy.parameters
-
-            # Calculate the initial BME
-            out = self.__BME_Calculator(
-                initMetaModel, 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 = MetaModel.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},"
-                  f" {init_rmse_std}")
-
-        # Read the initial experimental design
-        Xinit = initMetaModel.ExpDesign.X
-        init_n_samples = len(MetaModel.ExpDesign.X)
-        initYprev = initMetaModel.ModelOutputDict
-        initLCerror = initMetaModel.LCerror
-        n_itrs = max_n_samples - init_n_samples
-
-        # Read the initial ModifiedLOO
-        if pce:
-            Scores_all, varExpDesignY = [], []
-            for out_name in output_name:
-                y = initMetaModel.ExpDesign.Y[out_name]
-                Scores_all.append(list(
-                    initMetaModel.score_dict['b_1'][out_name].values()))
-                if MetaModel.dim_red_method.lower() == 'pca':
-                    pca = 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 = {}
-        # Replicate the sequential design
-        for repIdx in range(n_replication):
-            print(f'\n>>>> Replication: {repIdx+1}<<<<')
-
-            # To avoid changes ub original aPCE object
-            MetaModel.ExpDesign.X = Xinit
-            MetaModel.ExpDesign.Y = initYprev
-            MetaModel.LCerror = initLCerror
-
-            for util_f in util_func:
-                print(f'\n>>>> Utility Function: {util_f} <<<<')
-                # To avoid changes ub original aPCE object
-                MetaModel.ExpDesign.X = Xinit
-                MetaModel.ExpDesign.Y = initYprev
-                MetaModel.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(MetaModel.valid_model_runs) != 0:
-                    SeqValidError = np.array(init_valid_error)
-
-                # Check if data is provided
-                if len(obs_data) != 0:
-                    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(MetaModel)
-                    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))
-
-                    # Optimal Bayesian Design
-                    m_1 = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/1024
-                    MetaModel.ExpDesignFlag = 'sequential'
-                    Xnew, updatedPrior = self.opt_SeqDesign(TotalSigma2,
-                                                            n_canddidate,
-                                                            util_f)
-                    m_2 = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/1024
-                    S = np.min(distance.cdist(Xinit, Xnew, 'euclidean'))
-                    MetaModel.seqMinDist.append(S)
-                    print(f"\nmin Dist from OldExpDesign: {S:2f}")
-                    print("\n")
-
-                    # Evaluate the full model response at the new sample
-                    Ynew, _ = 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(MetaModel, 'adapt_verbose') and \
-                       MetaModel.adapt_verbose:
-                        from .adaptPlot import adaptPlot
-                        y_hat, std_hat = MetaModel.eval_metamodel(samples=Xnew)
-                        adaptPlot(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]))
-                        MetaModel.ModelOutputDict[out_name] = Yfull
-
-                    # Pass new design to the metamodel object
-                    MetaModel.ExpDesign.sampling_method = 'user'
-                    MetaModel.ExpDesign.X = Xfull
-                    MetaModel.ExpDesign.Y = MetaModel.ModelOutputDict
-
-                    # Save the Experimental Design for next iteration
-                    Xprev = Xfull
-                    Yprev = MetaModel.ModelOutputDict
-
-                    # Pass the new prior as the input
-                    MetaModel.input_obj.poly_coeffs_flag = False
-                    if updatedPrior is not None:
-                        MetaModel.input_obj.poly_coeffs_flag = True
-                        print("updatedPrior:", updatedPrior.shape)
-                        # Arbitrary polynomial chaos
-                        for i in range(updatedPrior.shape[1]):
-                            MetaModel.input_obj.Marginals[i].dist_type = None
-                            x = updatedPrior[:, i]
-                            MetaModel.input_obj.Marginals[i].raw_data = x
-
-                    # Train the surrogate model for new ExpDesign
-                    MetaModel.train_norm_design(parallel=False)
-                    m_3 = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/1024
-
-                    # -------- Evaluate the retrained surrogate model -------
-                    # Extract Modified LOO from Output
-                    if pce:
-                        Scores_all, varExpDesignY = [], []
-                        for out_name in output_name:
-                            y = MetaModel.ExpDesign.Y[out_name]
-                            Scores_all.append(list(
-                                MetaModel.score_dict['b_1'][out_name].values()))
-                            if MetaModel.dim_red_method.lower() == 'pca':
-                                pca = 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 len(MetaModel.valid_model_runs) != 0:
-                        rmse, validError = self.__validError(MetaModel)
-                        ValidError = list(validError.values())
-                    else:
-                        rmse = None
-
-                    # Store updated ModifiedLOO
-                    if pce:
-                        SeqModifiedLOO = np.vstack(
-                            (SeqModifiedLOO, ModifiedLOO))
-                        if len(MetaModel.valid_model_runs) != 0:
-                            SeqValidError = np.vstack(
-                                (SeqValidError, ValidError))
-                    m_4 = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/1024
-                    # -------- Caclulation of BME as accuracy metric -------
-                    # Check if data is provided
-                    if len(obs_data) != 0:
-                        # Calculate the initial BME
-                        out = self.__BME_Calculator(MetaModel, 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 = MetaModel.ExpDesign.step_snapshot
-                        if post_snapshot and postcnt % step_snapshot == 0:
-                            parNames = MetaModel.ExpDesign.par_names
-                            print('Posterior snapshot is being plotted...')
-                            self.__posteriorPlot(Posterior, parNames,
-                                                 f'SeqPosterior_{postcnt}')
-                        postcnt += 1
-                    m_5 = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/1024
-
-                    # 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
-
-                    print(f"Memory itr {itr_no}: I: {m_2-m_1:.2f} MB")
-                    print(f"Memory itr {itr_no}: II: {m_3-m_2:.2f} MB")
-                    print(f"Memory itr {itr_no}: III: {m_4-m_3:.2f} MB")
-                    print(f"Memory itr {itr_no}: IV: {m_5-m_4:.2f} MB")
-                    m_6 = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/1024
-                    print(f"Memory itr {itr_no}: total: {m_6:.2f} MB")
-
-                    # Clean up
-                    if len(obs_data) != 0:
-                        del out
-                    gc.collect()
-                    print()
-                    print('-'*50)
-                    print()
-
-                # Store updated ModifiedLOO and BME in dictonary
-                strKey = f'{util_f}_rep_{repIdx+1}'
-                if pce:
-                    MetaModel.SeqModifiedLOO[strKey] = SeqModifiedLOO
-                if len(MetaModel.valid_model_runs) != 0:
-                    MetaModel.seqValidError[strKey] = SeqValidError
-
-                # Check if data is provided
-                if len(obs_data) != 0:
-                    MetaModel.SeqBME[strKey] = SeqBME
-                    MetaModel.SeqKLD[strKey] = SeqKLD
-                if len(MetaModel.valid_likelihoods) != 0:
-                    MetaModel.SeqDistHellinger[strKey] = SeqDistHellinger
-                if mc_ref and pce:
-                    MetaModel.seqRMSEMean[strKey] = seqRMSEMean
-                    MetaModel.seqRMSEStd[strKey] = seqRMSEStd
-
-        return 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 = MetaModel.ExpDesign.X
-        out_dict_y = MetaModel.ExpDesign.Y
-        out_names = MetaModel.ModelObj.Output.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, X_can, 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.
-
-        """
-
-        # Evaluate the PCE metamodels at that location ???
-        Y_mean_can, Y_std_can = self.MetaModel.eval_metamodel(
-            samples=np.array([X_can])
-            )
-
-        # Get the data
-        obs_data = self.observations
-        n_obs = self.Model.n_obs
-        # TODO: Analytical DKL
-        # Sample a distribution for a normal dist
-        # with Y_mean_can as the mean and Y_std_can as std.
-
-        # priorMean, priorSigma2, Obs = np.empty((0)),np.empty((0)),np.empty((0))
-
-        # for key in list(Y_mean_can):
-        #     # concatenate the measurement error
-        #     Obs = np.hstack((Obs,ObservationData[key]))
-
-        #     # concatenate the mean and variance of prior predictive
-        #     means, stds = Y_mean_can[key][0], Y_std_can[key][0]
-        #     priorMean = np.hstack((priorSigma2,means))
-        #     priorSigma2 = np.hstack((priorSigma2,stds**2))
-
-        # # Covariance Matrix of prior
-        # covPrior = np.zeros((priorSigma2.shape[0], priorSigma2.shape[0]), float)
-        # np.fill_diagonal(covPrior, priorSigma2)
-
-        # # Covariance Matrix of Likelihood
-        # covLikelihood = np.zeros((sigma2Dict.shape[0], sigma2Dict.shape[0]), float)
-        # np.fill_diagonal(covLikelihood, sigma2Dict)
-
-        # # Calculate moments of the posterior (Analytical derivation)
-        # n = priorSigma2.shape[0]
-        # covPost = np.dot(np.dot(covPrior,np.linalg.inv(covPrior+(covLikelihood/n))),covLikelihood/n)
-
-        # meanPost = np.dot(np.dot(covPrior,np.linalg.inv(covPrior+(covLikelihood/n))) , Obs) + \
-        #             np.dot(np.dot(covPrior,np.linalg.inv(covPrior+(covLikelihood/n))),
-        #                     priorMean/n)
-        # # Compute DKL from prior to posterior
-        # term1 = np.trace(np.dot(np.linalg.inv(covPrior),covPost))
-        # deltaMean = priorMean-meanPost
-        # term2 = np.dot(np.dot(deltaMean,np.linalg.inv(covPrior)),deltaMean[:,None])
-        # term3 = np.log(np.linalg.det(covPrior)/np.linalg.det(covPost))
-        # DKL = 0.5 * (term1 + term2 - n + term3)[0]
-
-        # ---------- Inner MC simulation for computing Utility Value ----------
-        # Estimation of the integral via Monte Varlo integration
-        MCsize = 20000
-        ESS = 0
-
-        while ((ESS > MCsize) or (ESS < 1)):
-
-            # 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((MCsize))
-            for key in list(Y_mean_can):
-                means, stds = Y_mean_can[key][0], Y_std_can[key][0]
-                # cov = np.zeros((means.shape[0], means.shape[0]), float)
-                # np.fill_diagonal(cov, stds**2)
-
-                Y_MC[key] = np.zeros((MCsize, n_obs))
-                logsamples = np.zeros((MCsize, n_obs))
-                for i in range(n_obs):
-                    NormalDensity = stats.norm(means[i], stds[i])
-                    Y_MC[key][:, i] = NormalDensity.rvs(MCsize)
-                    logsamples[:, i] = NormalDensity.logpdf(Y_MC[key][:, i])
-
-                logPriorLikelihoods = np.sum(logsamples, axis=1)
-                std_MC[key] = np.zeros((MCsize, means.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)
-
-            # Check the Effective Sample Size (1<ESS<MCsize)
-            ESS = 1 / np.sum(np.square(likelihoods/np.nansum(likelihoods)))
-
-            # Enlarge sample size if it doesn't fulfill the criteria
-            if ((ESS > MCsize) or (ESS < 1)):
-                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
-
-        # Prior-based estimation of BME
-        logBME = np.log(np.nanmean(likelihoods))
-
-        # 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 = logBME
-
-        # 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_mean_can, Y_std_can, 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
-        gc.collect(generation=2)
-
-        return -1 * U_J_d   # -1 is for minimization instead of maximization
-
-    # -------------------------------------------------------------------------
-    def update_metamodel(self, MetaModel, output, y_hat_can, univ_p_val, index,
-                         new_pca=False):
-        BasisIndices = MetaModel.basis_dict[output]["y_"+str(index+1)]
-        clf_poly = MetaModel.clf_poly[output]["y_"+str(index+1)]
-        Mn = clf_poly.coef_
-        Sn = clf_poly.sigma_
-        beta = clf_poly.alpha_
-        active = clf_poly.active_
-        Psi = self.MetaModel.create_psi(BasisIndices, univ_p_val)
-
-        Sn_new_inv = np.linalg.inv(Sn)
-        Sn_new_inv += beta * np.dot(Psi[:, active].T, Psi[:, active])
-        Sn_new = np.linalg.inv(Sn_new_inv)
-
-        Mn_new = np.dot(Sn_new_inv, Mn[active]).reshape(-1, 1)
-        Mn_new += beta * np.dot(Psi[:, active].T, y_hat_can)
-        Mn_new = np.dot(Sn_new, Mn_new).flatten()
-
-        # Compute the old and new moments of PCEs
-        mean_old = Mn[0]
-        mean_new = Mn_new[0]
-        std_old = np.sqrt(np.sum(np.square(Mn[1:])))
-        std_new = np.sqrt(np.sum(np.square(Mn_new[1:])))
-
-        # Back transformation if PCA is selected.
-        if MetaModel.dim_red_method.lower() == 'pca':
-            old_pca = MetaModel.pca[output]
-            mean_old = old_pca.mean_[index]
-            mean_old += np.sum(mean_old * old_pca.components_[:, index])
-            std_old = np.sqrt(np.sum(std_old**2 *
-                                     old_pca.components_[:, index]**2))
-            mean_new = new_pca.mean_[index]
-            mean_new += np.sum(mean_new * new_pca.components_[:, index])
-            std_new = np.sqrt(np.sum(std_new**2 *
-                                     new_pca.components_[:, index]**2))
-            # print(f"mean_old: {mean_old:.2f} mean_new: {mean_new:.2f}")
-            # print(f"std_old: {std_old:.2f} std_new: {std_new:.2f}")
-        # Store the old and new moments of PCEs
-        results = {
-            'mean_old': mean_old,
-            'mean_new': mean_new,
-            'std_old': std_old,
-            'std_new': std_new
-            }
-        return results
-
-    # -------------------------------------------------------------------------
-    def util_BayesianDesign_old(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
-        Model = self.Model
-        MetaModel = deepcopy(self.MetaModel)
-        old_EDY = MetaModel.ExpDesign.Y
-
-        # Evaluate the PCE metamodels using the candidate design
-        Y_PC_can, Y_std_can = self.MetaModel.eval_metamodel(
-            samples=np.array([X_can])
-            )
-
-        # Generate y from posterior predictive
-        m_size = 100
-        y_hat_samples = {}
-        for idx, key in enumerate(Model.Output.names):
-            means, stds = Y_PC_can[key][0], Y_std_can[key][0]
-            y_hat_samples[key] = np.random.multivariate_normal(
-                means, np.diag(stds), m_size)
-
-        # Create the SparseBayes-based PCE metamodel:
-        MetaModel.input_obj.poly_coeffs_flag = False
-        univ_p_val = self.MetaModel.univ_basis_vals(X_can)
-        G_n_m_all = np.zeros((m_size, len(Model.Output.names), Model.n_obs))
-
-        for i in range(m_size):
-            for idx, key in enumerate(Model.Output.names):
-                if MetaModel.dim_red_method.lower() == 'pca':
-                    # Equal number of components
-                    new_outputs = np.vstack(
-                        (old_EDY[key], y_hat_samples[key][i])
-                        )
-                    new_pca, _ = MetaModel.pca_transformation(new_outputs)
-                    target = new_pca.transform(
-                        y_hat_samples[key][i].reshape(1, -1)
-                        )[0]
-                else:
-                    new_pca, target = False, y_hat_samples[key][i]
-
-                for j in range(len(target)):
-
-                    # Update surrogate
-                    result = self.update_metamodel(
-                        MetaModel, key, target[j], univ_p_val, j, new_pca)
-
-                    # Compute Expected Information Gain (Eq. 39)
-                    G_n_m = np.log(result['std_old']/result['std_new']) - 1./2
-                    G_n_m += result['std_new']**2 / (2*result['std_old']**2)
-                    G_n_m += (result['mean_new'] - result['mean_old'])**2 /\
-                        (2*result['std_old']**2)
-
-                    G_n_m_all[i, idx, j] = G_n_m
-
-        U_J_d = G_n_m_all.mean(axis=(1, 2)).mean()
-        return -1 * U_J_d
-
-    # -------------------------------------------------------------------------
-    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
-        Model = self.Model
-        MetaModel = deepcopy(self.MetaModel)
-        out_names = MetaModel.ModelObj.Output.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 = MetaModel.ExpDesign.X
-        oldExpDesignY = MetaModel.ExpDesign.Y
-
-        # Evaluate the PCE metamodels at that location ???
-        Y_PC_can, Y_std_can = MetaModel.eval_metamodel(samples=X_can)
-
-        # Add all suggestion as new ExpDesign
-        NewExpDesignX = np.vstack((oldExpDesignX, X_can))
-
-        NewExpDesignY = {}
-        for key in oldExpDesignY.keys():
-            try:
-                NewExpDesignY[key] = np.vstack((oldExpDesignY[key],
-                                                Y_PC_can[key]))
-            except:
-                NewExpDesignY[key] = oldExpDesignY[key]
-
-        MetaModel.ExpDesign.sampling_method = 'user'
-        MetaModel.ExpDesign.X = NewExpDesignX
-        MetaModel.ExpDesign.Y = NewExpDesignY
-
-        # Train the model for the observed data using x_can
-        MetaModel.input_obj.poly_coeffs_flag = False
-        MetaModel.train_norm_design(parallel=False)
-        PCE_Model_can = MetaModel
-
-        if var.lower() == 'mi':
-            # Mutual information based on Krause et al
-            # Adapted from Beck & Guillas (MICE) paper
-            _, std_PC_can = PCE_Model_can.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 = PCE_Model_can.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.MetaModel.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.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] / 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
-        gc.collect(generation=2)
-
-        return -1 * U_J_d   # -1 is for minimization instead of maximization
-
-    # -------------------------------------------------------------------------
-    def subdomain(self, 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 : TYPE
-            DESCRIPTION.
-
-        Returns
-        -------
-        Subdomains : TYPE
-            DESCRIPTION.
-
-        """
-        n_params = self.MetaModel.n_params
-        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
-
-    # -------------------------------------------------------------------------
-    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))
-            for idx, X_can in tqdm(enumerate(candidates), ascii=True,
-                                   desc="OptBayesianDesign"):
-                U_J_d[idx] = self.util_BayesianActiveDesign(X_can, 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 algorithim 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.MetaModel.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 tradoff_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.MetaModel.ExpDesign.n_init_samples
-            n_max_samples = self.MetaModel.ExpDesign.n_max_samples
-
-            itrNumber = (self.MetaModel.ExpDesign.X.shape[0] - initNSamples)
-            itrNumber //= self.MetaModel.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.MetaModel.ExpDesign.n_init_samples
-            n_max_samples = self.MetaModel.ExpDesign.n_max_samples
-            itrNumber = (self.MetaModel.ExpDesign.X.shape[0] - initNSamples)
-            itrNumber //= self.MetaModel.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 opt_SeqDesign(self, sigma2, 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.
-
-        Raises
-        ------
-        NameError
-            Wrong utility function.
-
-        Returns
-        -------
-        Xnew : array (n_samples, n_params)
-            Selected new training point(s).
-        """
-
-        # Initialization
-        MetaModel = self.MetaModel
-        Bounds = MetaModel.bound_tuples
-        n_new_samples = MetaModel.ExpDesign.n_new_samples
-        explore_method = MetaModel.ExpDesign.explore_method
-        exploit_method = MetaModel.ExpDesign.exploit_method
-        n_cand_groups = MetaModel.ExpDesign.n_cand_groups
-        tradeoff_scheme = MetaModel.ExpDesign.tradeoff_scheme
-
-        old_EDX = MetaModel.ExpDesign.X
-        old_EDY = MetaModel.ExpDesign.Y.copy()
-        ndim = MetaModel.ExpDesign.X.shape[1]
-        OutputNames = MetaModel.ModelObj.Output.names
-
-        # -----------------------------------------
-        # ----------- CUSTOMIZED METHODS ----------
-        # -----------------------------------------
-        # Utility function exploit_method provided by user
-        if exploit_method.lower() == 'user':
-
-            Xnew, filteredSamples = MetaModel.ExpDesign.ExploitFunction(self)
-
-            print("\n")
-            print("\nXnew:\n", Xnew)
-
-            return Xnew, filteredSamples
-
-        # -----------------------------------------
-        # ---------- EXPLORATION METHODS ----------
-        # -----------------------------------------
-        if explore_method == 'dual annealing':
-            # ------- EXPLORATION: OPTIMIZATION -------
-            import time
-            start_time = time.time()
-
-            # Divide the domain to subdomains
-            args = []
-            subdomains = self.subdomain(Bounds, n_new_samples)
-            for i in range(n_new_samples):
-                args.append((exploit_method, subdomains[i], sigma2, var, i))
-
-            # Multiprocessing
-            pool = multiprocessing.Pool(multiprocessing.cpu_count())
-
-            # With Pool.starmap_async()
-            results = pool.starmap_async(self.dual_annealing, args).get()
-
-            # Close the pool
-            pool.close()
-
-            Xnew = np.array([results[i][1] for i in range(n_new_samples)])
-
-            print("\nXnew:\n", Xnew)
-
-            elapsed_time = time.time() - start_time
-            print("\n")
-            print(f"elapsed_time: {round(elapsed_time,2)} sec.")
-            print('-'*20)
-
-        elif explore_method == 'LOOCV':
-            # -----------------------------------------------------------------
-            # TODO: LOOCV model construnction based on Feng et al. (2020)
-            # 'LOOCV':
-            # Initilize the ExploitScore array
-
-            # Generate random samples
-            allCandidates = MetaModel.ExpDesign.generate_samples(n_candidates,
-                                                                'random')
-
-            # Construct error model based on LCerror
-            errorModel = 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(MetaModel, 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.tradoff_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:
-
-                # Create a sample pool for rejection sampling
-                MCsize = 15000
-                X_MC = MetaModel.ExpDesign.generate_samples(MCsize, 'random')
-                candidates = MetaModel.ExpDesign.generate_samples(
-                    MetaModel.ExpDesign.max_func_itr, 'latin_hypercube')
-
-                # Split the candidates in groups for multiprocessing
-                split_cand = np.array_split(
-                    candidates, n_cand_groups, axis=0
-                    )
-
-                results = Parallel(n_jobs=-1, backend='threading')(
-                        delayed(self.run_util_func)(
-                            exploit_method, split_cand[i], i, sigma2, var, X_MC)
-                        for i in range(n_cand_groups))
-                # out = map(self.run_util_func,
-                #           [exploit_method]*n_cand_groups,
-                #           split_cand,
-                #           range(n_cand_groups),
-                #           [sigma2] * n_cand_groups,
-                #           [var] * n_cand_groups,
-                #           [X_MC] * n_cand_groups
-                #           )
-                # results = list(out)
-
-                # 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)
-
-                # create surrogate model for U_J_d
-                from sklearn.preprocessing import MinMaxScaler
-                # Take care of inf entries
-                good_indices = [i for i, arr in enumerate(U_J_d)
-                                if np.isfinite(arr).all()]
-                scaler = MinMaxScaler()
-                X_S = scaler.fit_transform(candidates[good_indices])
-                gp = MetaModel.gaussian_process_emulator(
-                    X_S, U_J_d[good_indices], autoSelect=True
-                    )
-                U_J_d = gp.predict(scaler.transform(allCandidates))
-
-                # Normalize U_J_d
-                norm_U_J_d = U_J_d / np.sum(U_J_d)
-                print("norm_U_J_d:\n", norm_U_J_d)
-            else:
-                norm_U_J_d = np.zeros((len(scoreExploration)))
-
-            # ------- Calculate Total score -------
-            # ------- Trade off between EXPLORATION & EXPLOITATION -------
-            # 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:
-                Xnew = allCandidates[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.tradoff_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]
-
-            # Find sensitive region
-            if UtilMethod == 'LOOCV':
-                LCerror = 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)
-
-            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()
-                # out = map(self.run_util_func,
-                #           [exploit_method]*len(goodSampleIdx),
-                #           split_cand,
-                #           range(len(goodSampleIdx)),
-                #           [sigma2] * len(goodSampleIdx),
-                #           [var] * len(goodSampleIdx)
-                #           )
-                # results = list(out)
-
-                # 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
-            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)
-        gc.collect()
-
-        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
-        Model = self.Model
-        n_new_samples = MetaModelOrig.ExpDesign.n_new_samples
-        NCandidate = candidates.shape[0]
-
-        # TODO: Loop over outputs
-        OutputName = Model.Output.names[0]
-
-        # To avoid changes ub original aPCE object
-        MetaModel = deepcopy(MetaModelOrig)
-
-        # Old Experimental design
-        oldExpDesignX = MetaModel.ExpDesign.X
-
-        # TODO: Only one psi can be selected.
-        # Suggestion: Go for the one with the highest LOO error
-        Scores = list(MetaModel.score_dict[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))
-
-        BasisIndices = MetaModelOrig.basis_dict[OutputName]["y_"+str(outIdx+1)]
-        P = len(BasisIndices)
-
-        # ------ Old Psi ------------
-        univ_p_val = MetaModelOrig.univ_basis_vals(oldExpDesignX)
-        Psi = MetaModelOrig.create_psi(BasisIndices, univ_p_val)
-
-        # ------ New candidates (Psi_c) ------------
-        # Assemble Psi_c
-        univ_p_val_c = self.univ_basis_vals(candidates)
-        Psi_c = self.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 == 'D-Opt':
-                Phi[idx] = (np.linalg.det(invM)) ** (1/P)
-
-            # A-Opt
-            elif var == 'A-Opt':
-                Phi[idx] = np.trace(invM)
-
-            # K-Opt
-            elif var == 'K-Opt':
-                Phi[idx] = np.linalg.cond(M)
-
-            else:
-                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):
-
-        Model = self.Model
-        likelihoods = 1.0
-
-        # Loop over the outputs
-        for idx, out in enumerate(Model.Output.names):
-
-            # (Meta)Model Output
-            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
-
-            likelihoods *= stats.multivariate_normal.pdf(
-                y_hat_pce[out], data, np.diag(tot_sigma2s),
-                allow_singular=True)
-        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 = MetaModel.ExpDesign.X  # valid_samples
-        model_outputs = MetaModel.ExpDesign.Y  # valid_model_runs
-        Model = MetaModel.ModelObj
-        n_samples = samples.shape[0]
-
-        # Extract the requested model outputs for likelihood calulation
-        output_names = Model.Output.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] += self.__logpdf(
-                    y_m_hat, data, covMatrix_data
-                    )
-
-                # Compute likelilhood output vs surrogate
-                logLik_model[i] += self.__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 __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 = 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 __posteriorPlot(self, posterior, par_names, key):
-
-        # Initialization
-        newpath = (r'Outputs_SeqPosteriorComparison/posterior')
-        os.makedirs(newpath, exist_ok=True)
-
-        bound_tuples = self.MetaModel.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 __hellinger_distance(self, 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.
-
-        """
-        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 __BME_Calculator(self, MetaModel, obs_data, sigma2Dict, rmse=None):
-        """
-        This function computes the Bayesian model evidence (BME) via Monte
-        Carlo integration.
-
-        """
-        # Initializations
-        valid_likelihoods = MetaModel.valid_likelihoods
-
-        post_snapshot = MetaModel.ExpDesign.post_snapshot
-        if post_snapshot or len(valid_likelihoods) != 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 = MetaModel.ExpDesign.generate_samples(
-                MCsize, SamplingMethod
-                )
-
-            # Monte Carlo simulation for the candidate design
-            m_1 = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/1024
-            Y_MC, std_MC = MetaModel.eval_metamodel(samples=X_MC)
-            m_2 = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/1024
-            print(f"\nMemory eval_metamodel in BME: {m_2-m_1:.2f} MB")
-
-            # 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(MetaModel.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 len(valid_likelihoods) != 0:
-            # Hellinger distance
-            ref_like = np.log(valid_likelihoods[valid_likelihoods > 0])
-            est_like = np.log(Likelihoods[Likelihoods > 0])
-            distHellinger = self.__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 MetaModel.n_params == 2 and not idx % 5:
-            from bayes_inference.bayes_inference import BayesInference
-            from bayes_inference.discrepancy import Discrepancy
-            import pandas as pd
-            BayesOpts = BayesInference(MetaModel)
-            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 -------
-            obs_data = pd.DataFrame(obs_data, columns=self.Model.Output.names)
-            BayesOpts.measurement_error = 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
-
-        # Clean up
-        del Y_MC, std_MC
-        gc.collect()
-
-        return (logBME, KLD, X_Posterior, Likelihoods, distHellinger)
-
-    # -------------------------------------------------------------------------
-    def __validError(self, MetaModel):
-
-        # MetaModel = self.MetaModel
-        Model = MetaModel.ModelObj
-        OutputName = Model.Output.names
-
-        # Extract the original model with the generated samples
-        valid_samples = MetaModel.valid_samples
-        valid_model_runs = MetaModel.valid_model_runs
-
-        # Run the PCE model with the generated samples
-        m_1 = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/1024
-        valid_PCE_runs, valid_PCE_std = MetaModel.eval_metamodel(samples=valid_samples)
-        m_2 = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss/1024
-        print(f"\nMemory eval_metamodel: {m_2-m_1:.2f} MB")
-
-        rms_error = {}
-        valid_error = {}
-        # Loop over the keys and compute RMSE error.
-        for key in OutputName:
-            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):
-
-        MetaModel = self.MetaModel
-        # Extract the mean and std provided by user
-        df_MCReference = MetaModel.ModelObj.mc_reference
-
-        # Compute the mean and std based on the MetaModel
-        pce_means, pce_stds = self._compute_pce_moments(MetaModel)
-
-        # Compute the root mean squared error
-        for output in MetaModel.ModelObj.Output.names:
-
-            # Compute the error between mean and std of MetaModel and OrigModel
-            RMSE_Mean = mean_squared_error(
-                df_MCReference['mean'], pce_means[output], squared=False
-                )
-            RMSE_std = mean_squared_error(
-                df_MCReference['std'], pce_means[output], squared=False
-                )
-
-        return RMSE_Mean, RMSE_std
-
-    # -------------------------------------------------------------------------
-    def _compute_pce_moments(self, MetaModel):
-        """
-        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.
-
-        """
-        outputs = MetaModel.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.mean_ + np.dot(
-                        pce_mean, PCA.components_)
-                    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)
-
-        return pce_means, pce_stds
diff --git a/examples/only-model/bayesvalidrox/surrogate_models/surrogate_models.py b/examples/only-model/bayesvalidrox/surrogate_models/surrogate_models.py
deleted file mode 100644
index fc6b83947..000000000
--- a/examples/only-model/bayesvalidrox/surrogate_models/surrogate_models.py
+++ /dev/null
@@ -1,1498 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-
-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 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 bayesvalidrox.surrogate_models.exp_designs import ExpDesigns
-from bayesvalidrox.surrogate_models.glexindex import glexindex
-from bayesvalidrox.surrogate_models.eval_rec_rule import eval_univ_basis
-from bayesvalidrox.surrogate_models.reg_fast_ard import RegressionFastARD
-from bayesvalidrox.surrogate_models.reg_fast_laplace import RegressionFastLaplace
-from bayesvalidrox.surrogate_models.orthogonal_matching_pursuit import OrthogonalMatchingPursuit
-from bayesvalidrox.surrogate_models.bayes_linear import VBLinearRegression, EBLinearRegression
-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
-
-    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_ExpDesign()
-
-    Two experimental design schemes are supported: one-shot (`normal`) and
-    adaptive sequential (`sequential`) designs.
-    For experimental design refer to `ExpDesigns`.
-
-    """
-
-    def __init__(self, input_obj, model_obj = 'None', 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', verbose=False): # added the 'None' behind model_obj
-
-        self.input_obj = input_obj
-        self.ModelObj = model_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.verbose = False
-
-    # -------------------------------------------------------------------------
-    def create_metamodel(self, ModelObj = None): # added ModelObj here
-        """
-        Starts the training of the meta-model for the model objects containg
-         the given computational model.
-
-        Returns
-        -------
-        metamodel : obj
-            The meta model object.
-
-        """
-        if ModelObj:
-            self.ModelObj = ModelObj
-        Model = self.ModelObj
-        self.n_params = len(self.input_obj.Marginals)
-        self.ExpDesignFlag = 'normal'
-        # --- Prepare pce degree ---
-        if self.meta_model_type.lower() == 'pce':
-            if type(self.pce_deg) is not np.ndarray:
-                self.pce_deg = np.array(self.pce_deg)
-
-        if self.ExpDesign.method == 'sequential':
-            raise Exception(
-                "Please use MetaModelEngine class for the sequential design!"
-                )
-
-        elif self.ExpDesign.method == 'normal':
-            self.train_norm_design(Model, verbose=True)
-
-        else:
-            raise Exception("The method for experimental design you requested"
-                            " has not been implemented yet.")
-
-        # Zip the model run directories
-        if self.ModelObj.link_type.lower() == 'pylink' and\
-           self.ExpDesign.sampling_method.lower() != 'user':
-            Model.zip_subdirs(Model.name, f'{Model.name}_')
-
-        return self
-
-    # -------------------------------------------------------------------------
-    def train_norm_design(self, parallel=False, verbose=False):
-        """
-        This function loops over the outputs and each time step/point and fits
-        the meta model.
-
-        Parameters
-        ----------
-        parallel : bool
-            The parallel computation of coefficents. The default is True.
-        verbose : bool, optional
-            Flag for a sequential design in silent mode. The default is False.
-
-        Returns
-        -------
-        self: obj
-            Meta-model object.
-
-        """
-        self.ExpDesignFlag = 'normal'
-        Model = self.ModelObj
-        # Get the collocation points to run the forward model
-        CollocationPoints, OutputDict = self.generate_ExpDesign(Model)
-
-        # 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
-        n_samples, ndim = CollocationPoints.shape
-        self.deg_array = self.__select_degree(ndim, 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 = self.create_basis_indices(degree=deg,
-                                                              q_norm=q)
-                    self.allBasisIndices[str(deg)][str(q)] = basis_indices
-
-        # Evaluate the univariate polynomials on ExpDesign
-        if self.meta_model_type.lower() != 'gpe':
-            univ_p_val = self.univ_basis_vals(CollocationPoints)        # TODO: issue appears in here: 'ExpDesigns' object has no attribute 'polycoeffs'
-
-        if 'x_values' in OutputDict:
-            self.ExpDesign.x_values = OutputDict['x_values']
-            del OutputDict['x_values']
-
-        # --- 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="Boostraping 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(n_samples, size=n_samples)
-            else:
-                b_indices = np.arange(len(CollocationPoints))
-
-            X_train_b = CollocationPoints[b_indices]
-
-            if verbose and self.n_bootstrap_itrs == 1:
-                items = tqdm(OutputDict.items(), desc="Fitting regression")
-            else:
-                items = OutputDict.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 = 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):
-        """
-        Updates the PCE coefficents using only the ordinary least square method
-        for the fast version of the bootsrtrapping.
-
-        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.fit(
-                    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 create_basis_indices(self, degree, q_norm):
-        """
-        Creates set of selected multi-indices of multivariate polynomials for
-        certain parameter numbers, polynomial degree, hyperbolic (or q-norm)
-        truncation scheme.
-
-        Parameters
-        ----------
-        degree : int
-            Polynomial degree.
-        q_norm : float
-            hyperbolic (or q-norm) truncation.
-
-        Returns
-        -------
-        basis_indices : array of shape (n_terms, n_params)
-            Multi-indices of multivariate polynomials.
-
-        """
-        basis_indices = glexindex(start=0, stop=degree+1,
-                                  dimensions=self.n_params,
-                                  cross_truncation=q_norm,
-                                  reverse=False, graded=True)
-        return basis_indices
-
-    # -------------------------------------------------------------------------
-    def add_ExpDesign(self):
-        """
-        Instanciates experimental design object.
-
-        Returns
-        -------
-        None.
-
-        """
-        self.ExpDesign = ExpDesigns(self.input_obj,
-                                    meta_Model=self.meta_model_type)
-
-    # -------------------------------------------------------------------------
-    def generate_ExpDesign(self, Model):
-        """
-        Prepares the experimental design either by reading from the prescribed
-        data or running simulations.
-
-        Parameters
-        ----------
-        Model : obj
-            Model object.
-
-        Raises
-        ------
-        Exception
-            If model sumulations are not provided properly.
-
-        Returns
-        -------
-        ED_X_tr: array of shape (n_samples, n_params)
-            Training samples transformed by an isoprobabilistic transformation.
-        ED_Y: dict
-            Model simulations (target) for all outputs.
-        """
-        ExpDesign = self.ExpDesign
-        if self.ExpDesignFlag != 'sequential':
-            # Read ExpDesign (training and targets) from the provided hdf5
-            if ExpDesign.hdf5_file is not None:
-
-                # Read hdf5 file
-                f = h5py.File(ExpDesign.hdf5_file, 'r+')
-
-                # Read EDX and pass it to ExpDesign object
-                try:
-                    ExpDesign.X = np.array(f["EDX/New_init_"])
-                except KeyError:
-                    ExpDesign.X = np.array(f["EDX/init_"])
-
-                # Update number of initial samples
-                ExpDesign.n_init_samples = ExpDesign.X.shape[0]
-
-                # Read EDX and pass it to ExpDesign object
-                out_names = self.ModelObj.Output.names
-                ExpDesign.Y = {}
-
-                # Extract x values
-                try:
-                    ExpDesign.Y["x_values"] = dict()
-                    for varIdx, var in enumerate(out_names):
-                        x = np.array(f[f"x_values/{var}"])
-                        ExpDesign.Y["x_values"][var] = x
-                except KeyError:
-                    ExpDesign.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_"])
-                    ExpDesign.Y[var] = y
-                f.close()
-            else: # changed from else
-                # Check if an old hdf5 file exists: if yes, rename it
-                hdf5file = f'ExpDesign_{self.ModelObj.name}.hdf5'
-                if os.path.exists(hdf5file):
-                    os.rename(hdf5file, 'old_'+hdf5file)
-
-        # ---- Prepare X samples ----
-        ED_X, ED_X_tr = ExpDesign.generate_ED(ExpDesign.n_init_samples,
-                                              ExpDesign.sampling_method,
-                                              transform=True,
-                                              max_pce_deg=np.max(self.pce_deg))
-        ExpDesign.X = ED_X
-        ExpDesign.collocationPoints = ED_X_tr
-        self.bound_tuples = ExpDesign.bound_tuples
-
-        # ---- 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 = Model.run_model_parallel(ED_X)
-            ExpDesign.X = up_ED_X
-            self.ModelOutputDict = ED_Y
-            ExpDesign.Y = ED_Y
-        else:
-            # Check if a dict has been passed.
-            if type(ExpDesign.Y) is dict:
-                self.ModelOutputDict = ExpDesign.Y
-            else:
-                raise Exception('Please provide either a dictionary or a hdf5'
-                                'file to ExpDesign.hdf5_file argument.')
-
-        return ED_X_tr, self.ModelOutputDict
-
-    # -------------------------------------------------------------------------
-    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.ExpDesign.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.ExpDesign.input_data_given or self.ExpDesign.apce:
-            apolycoeffs = self.ExpDesign.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 fit(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':
-            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':
-            clf_poly = RegressionFastLaplace(fit_intercept=False,
-                                             bias_term=bias_term,
-                                             n_iter=1000, tol=1e-7)
-
-        elif reg_method.lower() == 'lars':
-            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')
-
-        # Fit
-        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 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.fit(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("Best score's degree:", 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
-            M = sp.linalg.solve(PsiTPsi,
-                                sp.sparse.eye(PsiTPsi.shape[0]).toarray())
-        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) # changed from np.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=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.
-        """
-        outputs = self.ModelObj.Output.names
-
-        # Generate or transform (if need be) samples
-        if samples is None:
-            # Generate
-            samples = self.ExpDesign.generate_samples(
-                nsamples,
-                sampling_method
-                )
-
-        # Transform samples to the independent space
-        samples = self.ExpDesign.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():
-
-                    # Perdiction 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:
-                        # Perdiction 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)
-
-                        # Perdiction
-                        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 outputs:
-            # 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]
-
-        if return_samples:
-            return mean_pred, std_pred, samples
-        else:
-            return mean_pred, std_pred
-
-    # -------------------------------------------------------------------------
-    def create_model_error(self, X, y, 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.
-
-        """
-        Model = self.ModelObj
-        outputNames = Model.Output.names
-        self.errorRegMethod = 'GPE'
-        self.errorclf_poly = self.auto_vivification()
-        self.errorScale = self.auto_vivification()
-
-        # Read data
-        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, InputObj, ModelObj = 'None'): # added the None here
-        """
-        This method is a convinient function to copy the metamodel options.
-
-        Parameters
-        ----------
-        InputObj : object
-            The input object.
-        ModelObj : object
-            The Model object.
-
-        Returns
-        -------
-        new_MetaModelOpts : object
-            The copied object.
-
-        """
-        new_MetaModelOpts = copy.deepcopy(self)
-        new_MetaModelOpts.ModelObj = ModelObj
-        new_MetaModelOpts.input_obj = InputObj
-        new_MetaModelOpts.ExpDesign.meta_Model = 'aPCE'
-        new_MetaModelOpts.ExpDesign.InputObj = InputObj
-        new_MetaModelOpts.ExpDesign.ndim = len(InputObj.Marginals)
-        new_MetaModelOpts.n_params = len(InputObj.Marginals)
-        new_MetaModelOpts.ExpDesign.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)
-        nitr = n_samples - self.ExpDesign.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
-
-        if self.ExpDesignFlag != 'sequential':
-            deg_new = max_deg
-        else:
-            d = nitr if nitr != 0 and self.n_params > 5 else 1
-            min_index = np.argmin(abs(M_uptoMax(max_deg)-ndim*n_samples*d))
-            deg_new = max_deg
-            # 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
diff --git a/examples/only-model/data/synth_data.mat b/examples/only-model/data/synth_data.mat
new file mode 100644
index 0000000000000000000000000000000000000000..352697fc3848c73bf8ae8819f065b873a62907f5
GIT binary patch
literal 364
zcmeZu4DoSvQZUssQ1EpO(M`+DN!3vZ$Vn_o%P-2cQV4Jk_w+L}(NS<NN=+<DO;O0t
zvr-5tO;zwuE>SQrQZO{NGB&d^Hdin*Ftku05-`93qo*%FkZl3P6>}aZCnS7eNHSA+
z)^JJT0M}Dvr9?Xgzcb!vR_dJe@jKJ$f66yC;X%u)>dJK2n1G8x)(q!na2*8cUjo-3
z!FVLc;SA$a#|F_;&)JjQ4AN3O7%$Cnh+#a!Z})ZizFR-e-FsH{AUVA8`!}V0|6l*g
z(uyqX;-3`EdRtySd2{uV`@d^9UjO-VQuym@{=W_8TI~0#<YRB{+LC=y_72~o?V<L&
zYy=8+*k4>9{+MZg^RugQUz2Y+@!c=)J{w#rP;jI2)6=)ky@&Wx#Zv9A^*ZtWuD3Xu
O`%%1*f#K2?i&6jv^NI!l

literal 0
HcmV?d00001

diff --git a/examples/only-model/test_analytical_function_noMetaMod.py b/examples/only-model/test_analytical_function_noMetaMod.py
index 99842f80f..1d5139b0d 100644
--- a/examples/only-model/test_analytical_function_noMetaMod.py
+++ b/examples/only-model/test_analytical_function_noMetaMod.py
@@ -15,23 +15,22 @@ Pfaffenwaldring 61
 Created on Fri Aug 9 2019
 
 """
-
 import numpy as np
 import pandas as pd
+import scipy.io as io
 import sys
 import joblib
 # import bayesvalidrox
 # Add BayesValidRox path
-#sys.path.append("../../src/bayesvalidrox/")
+sys.path.append("../../src/")
 
-import bayesvalidrox as bv
 from bayesvalidrox.pylink.pylink import PyLinkForwardModel
 from bayesvalidrox.surrogate_models.inputs import Input
-from bayesvalidrox.surrogate_models.surrogate_models import MetaModel
-from bayesvalidrox.surrogate_models.meta_model_engine import MetaModelEngine
-from bayesvalidrox.post_processing.post_processing import PostProcessing
+from bayesvalidrox.surrogate_models.engine import Engine
+from bayesvalidrox.surrogate_models.exp_designs import ExpDesigns
 from bayesvalidrox.bayes_inference.bayes_inference import BayesInference
 from bayesvalidrox.bayes_inference.discrepancy import Discrepancy
+from bayesvalidrox.bayes_inference.bayes_model_comparison import BayesModelComparison
 import matplotlib
 matplotlib.use('agg')
 
@@ -70,149 +69,50 @@ if __name__ == "__main__":
     # standard deviation
     Inputs = Input()
 
-    # Assuming dependent input variables
-    # Inputs.Rosenblatt = True
-
     for i in range(ndim):
         Inputs.add_marginals()
         Inputs.Marginals[i].name = "$\\theta_{"+str(i+1)+"}$"
         Inputs.Marginals[i].dist_type = 'uniform'
         Inputs.Marginals[i].parameters = [-5, 5]
 
-    # arbitrary polynomial chaos
-    # inputParams = np.load('data/InputParameters_{}.npy'.format(ndim))
-    # for i in range(ndim):
-    #     Inputs.add_marginals()
-    #     Inputs.Marginals[i].name = f'$X_{i+1}$'
-    #     Inputs.Marginals[i].input_data = inputParams[:, i]
-
-    # =====================================================
-    # ==========  DEFINITION OF THE METAMODEL  ============
-    # =====================================================
-    MetaModelOpts = MetaModel(Inputs, Model)
-
-    # Select if you want to preserve the spatial/temporal depencencies
-    # MetaModelOpts.dim_red_method = 'PCA'
-    # MetaModelOpts.var_pca_threshold = 99.999
-    # MetaModelOpts.n_pca_components = 10
-
-    # Select your metamodel method
-    # 1) PCE (Polynomial Chaos Expansion) 2) aPCE (arbitrary PCE)
-    # 3) GPE (Gaussian Process Emulator)
-    MetaModelOpts.meta_model_type = 'aPCE'
-
-    # ------------------------------------------------
-    # ------------- PCE Specification ----------------
-    # ------------------------------------------------
-    # Select the sparse least-square minimization method for
-    # the PCE coefficients calculation:
-    # 1)OLS: Ordinary Least Square  2)BRR: Bayesian Ridge Regression
-    # 3)LARS: Least angle regression  4)ARD: Bayesian ARD Regression
-    # 5)FastARD: Fast Bayesian ARD Regression
-    # 6)BCS: Bayesian Compressive Sensing
-    # 7)OMP: Orthogonal Matching Pursuit
-    # 8)VBL: Variational Bayesian Learning
-    # 9)EBL: Emperical Bayesian Learning
-    MetaModelOpts.pce_reg_method = 'FastARD'
-
-    # Bootstraping
-    # 1) normal 2) fast
-    MetaModelOpts.bootstrap_method = 'fast'
-    MetaModelOpts.n_bootstrap_itrs = 1
-
-    # Specify the max degree to be compared by the adaptive algorithm:
-    # The degree with the lowest Leave-One-Out cross-validation (LOO)
-    # error (or the highest score=1-LOO)estimator is chosen as the final
-    # metamodel. pce_deg accepts degree as a scalar or a range.
-    MetaModelOpts.pce_deg = 12
-
-    # q-quasi-norm 0<q<1 (default=1)
-    MetaModelOpts.pce_q_norm = 0.85 if ndim < 5 else 0.5
-
-    # Print summary of the regression results
-    # MetaModelOpts.verbose = True
-
     # ------------------------------------------------
     # ------ Experimental Design Configuration -------
     # ------------------------------------------------
-    MetaModelOpts.add_ExpDesign()
-
+    ExpDesign = ExpDesigns(Inputs)
+    
     # One-shot (normal) or Sequential Adaptive (sequential) Design
-    MetaModelOpts.ExpDesign.method = 'sequential'
-    MetaModelOpts.ExpDesign.n_init_samples = 3*ndim
+    ExpDesign.method = 'normal'
+    ExpDesign.n_init_samples = 3*ndim
 
     # Sampling methods
     # 1) random 2) latin_hypercube 3) sobol 4) halton 5) hammersley
     # 6) chebyshev(FT) 7) grid(FT) 8)user
-    MetaModelOpts.ExpDesign.sampling_method = 'latin_hypercube'
-
+    ExpDesign.sampling_method = 'latin_hypercube'
+    
     # Provide the experimental design object with a hdf5 file
-    # MetaModelOpts.ExpDesign.hdf5_file = 'ExpDesign_AnalyticFunc.hdf5'
-
-    # ------------------------------------------------
-    # ------- Sequential Design configuration --------
-    # ------------------------------------------------
-    # Set the sampling parameters
-    MetaModelOpts.ExpDesign.n_new_samples = 1
-    MetaModelOpts.ExpDesign.n_max_samples = 10#150
-    MetaModelOpts.ExpDesign.mod_LOO_threshold = 1e-16
-
-    # MetaModelOpts.adapt_verbose = True
-    # 1) None 2) 'equal' 3)'epsilon-decreasing' 4) 'adaptive'
-    MetaModelOpts.ExpDesign.tradeoff_scheme = None
-    # MetaModelOpts.ExpDesign.n_replication = 5
-    # -------- Exploration ------
-    # 1)'Voronoi' 2)'random' 3)'latin_hypercube' 4)'LOOCV' 5)'dual annealing'
-    MetaModelOpts.ExpDesign.explore_method = 'random'
-
-    # Use when 'dual annealing' chosen
-    MetaModelOpts.ExpDesign.max_func_itr = 1000
-
-    # Use when 'Voronoi' or 'random' or 'latin_hypercube' chosen
-    MetaModelOpts.ExpDesign.n_canddidate = 1000
-    MetaModelOpts.ExpDesign.n_cand_groups = 4
-
-    # -------- Exploitation ------
-    # 1)'BayesOptDesign' 2)'BayesActDesign' 3)'VarOptDesign' 4)'alphabetic'
-    # 5)'Space-filling'
-    MetaModelOpts.ExpDesign.exploit_method = 'BayesActDesign'
-
-    # BayesActDesign -> when data is available
-    # 1) BME (Bayesian model evidence) 2) infEntropy (Information entropy)
-    # 2)DKL (Kullback-Leibler Divergence)
-    MetaModelOpts.ExpDesign.util_func = 'DKL'
+    # ExpDesign.hdf5_file = 'ExpDesign_AnalyticFunc.hdf5'
 
     # Defining the measurement error, if it's known a priori
     obsData = pd.DataFrame(Model.observations, columns=Model.Output.names)
     DiscrepancyOpts = Discrepancy('')
     DiscrepancyOpts.type = 'Gaussian'
     DiscrepancyOpts.parameters = obsData**2
-    MetaModelOpts.Discrepancy = DiscrepancyOpts
-
-    # Plot the posterior snapshots for SeqDesign
-    MetaModelOpts.ExpDesign.post_snapshot = False
-    MetaModelOpts.ExpDesign.step_snapshot = 1
-    MetaModelOpts.ExpDesign.max_a_post = [0] * ndim
-
-    # For calculation of validation error for SeqDesign
-    prior = np.load(f"data/Prior_{ndim}.npy")
-    prior_outputs = np.load(f"data/origModelOutput_{ndim}.npy")
-    likelihood = np.load(f"data/validLikelihoods_{ndim}.npy")
-    MetaModelOpts.valid_samples = prior[:500]
-    MetaModelOpts.valid_model_runs = {'Z': prior_outputs[:500]}
-    # MetaModelOpts.valid_likelihoods = likelihood
-
-    # >>>>>>>>>>>>>>>>>>>>>> Build Surrogate <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
-    # Train the meta model
-    meta_model_engine = MetaModelEngine(MetaModelOpts)
-    #meta_model_engine.run()
-    PCEModel = meta_model_engine.MetaModel
-
 
+    # Create the engine
+    engine = Engine(None, Model, ExpDesign)
+    engine.train_normal()
+    
+    # =====================================================
+    # ========  PostProcessing on the Model only ==========
     # =====================================================
-    # ========  Bayesian inference with Emulator ==========
+    
+    # So far there is no postprocessing for the model without surrogates!
+    
+    
     # =====================================================
-    BayesOpts = BayesInference(PCEModel)
+    # ========  Bayesian inference without Emulator ==========
+    # =====================================================
+    BayesOpts = BayesInference(engine)
     BayesOpts.emulator = False
     BayesOpts.plot_post_pred = True
 
@@ -230,8 +130,6 @@ if __name__ == "__main__":
 
     # ----- Define the discrepancy model -------
     BayesOpts.measurement_error = obsData
-
-    # # -- (Option B) --
     DiscrepancyOpts = Discrepancy('')
     DiscrepancyOpts.type = 'Gaussian'
     DiscrepancyOpts.parameters = obsData**2
@@ -243,3 +141,177 @@ if __name__ == "__main__":
     # Save class objects
     with open(f'Bayes_{Model.name}.pkl', 'wb') as output:
         joblib.dump(Bayes_PCE, output, 2)
+
+    # =====================================================
+    # ========  Model Comparison without Emulator ==========
+    # =====================================================
+    sigma = 0.6
+    data = {
+        'x [m]': np.linspace(0.25, 4.75, 15),
+        'Z': io.loadmat('data/synth_data.mat')['d'].reshape(1, -1)[0]
+        }
+
+    # =====================================================
+    # ============   COMPUTATIONAL MODELS  ================
+    # =====================================================
+    # Define the models options
+    # ---------- Linear model  -------------
+    myL2Model = PyLinkForwardModel()
+
+    myL2Model.link_type = 'Function'
+    myL2Model.py_file = 'L2_model'
+    myL2Model.name = 'linear'
+    myL2Model.Output.names = ['Z']
+    myL2Model.observations = data
+    myL2Model.store = False
+
+    # -- Nonlinear exponential model -------
+    myNL2Model = PyLinkForwardModel()
+
+    myNL2Model.link_type = 'Function'
+    myNL2Model.py_file = 'NL2_model'
+    myNL2Model.name = 'exponential'
+    myNL2Model.Output.names = ['Z']
+    myNL2Model.observations = data
+    myNL2Model.store = False
+
+    # ------ Nonlinear cosine model ---------
+    # Data generating process
+    myNL4Model = PyLinkForwardModel()
+
+    myNL4Model.link_type = 'Function'
+    myNL4Model.py_file = 'NL4_model'
+    myNL4Model.name = 'cosine'
+    myNL4Model.Output.names = ['Z']
+    myNL4Model.observations = data
+    myNL4Model.store = False
+
+    # =====================================================
+    # =========   PROBABILISTIC INPUT MODEL  ==============
+    # =====================================================
+    # Define model inputs
+    n_sample = 10000
+    # ---------- Linear model  -------------
+    L2_Inputs = Input()
+    L2_prior_mean = np.array([1, 0])
+    L2_prior_cov = np.array(
+        [[0.04, -0.007],
+         [-0.007, 0.04]]
+        )
+    L2_input_params = np.random.multivariate_normal(
+        L2_prior_mean, L2_prior_cov, size=n_sample
+        )
+
+    for i in range(L2_input_params.shape[1]):
+        L2_Inputs.add_marginals()
+        L2_Inputs.Marginals[i].name = f'$X_{i+1}$'
+        L2_Inputs.Marginals[i].input_data = L2_input_params[:, i]
+
+    # ------ Nonlinear exponential model ---------
+    NL2_Inputs = Input()
+    NL2_prior_mean = np.array([0.4, -0.3])
+    NL2_prior_cov = np.array(
+        [[0.003, -0.0001],
+         [-0.0001, 0.03]]
+        )
+    NL2_input_params = np.random.multivariate_normal(
+        NL2_prior_mean, NL2_prior_cov, size=n_sample
+        )
+
+    for i in range(NL2_input_params.shape[1]):
+        NL2_Inputs.add_marginals()
+        NL2_Inputs.Marginals[i].name = f'$X_{i+1}$'
+        NL2_Inputs.Marginals[i].input_data = NL2_input_params[:, i]
+
+    # ------ Nonlinear cosine model ---------
+    NL4_Inputs = Input()
+    NL4_prior_mean = np.array([2.6, 0.5, -2.8, 2.3])
+    NL4_prior_cov = np.array(
+        [[0.46, -0.07, 0.24, -0.14],
+         [-0.07, 0.04, -0.05, 0.02],
+         [0.24, -0.05, 0.30, -0.16],
+         [-0.14, 0.02, -0.16, 0.30]]
+        )
+    NL4_input_params = np.random.multivariate_normal(
+        NL4_prior_mean, NL4_prior_cov, size=n_sample
+        )
+
+    for i in range(NL4_input_params.shape[1]):
+        NL4_Inputs.add_marginals()
+        NL4_Inputs.Marginals[i].name = f'$X_{i+1}$'
+        NL4_Inputs.Marginals[i].input_data = NL4_input_params[:, i]
+
+    # ------------------------------------------------
+    # ------ Experimental Design Configuration -------
+    # ------------------------------------------------
+    #L2_MetaModelOpts.add_ExpDesign()
+    L2_ExpDesign = ExpDesigns(L2_Inputs)
+
+    # One-shot (normal) or Sequential Adaptive (sequential) Design
+    L2_ExpDesign.n_init_samples = 100
+
+    # Sampling methods
+    # 1) random 2) latin_hypercube 3) sobol 4) halton 5) hammersley
+    # 6) chebyshev(FT) 7) grid(FT) 8)user
+    L2_ExpDesign.sampling_method = 'latin_hypercube'
+
+    # ------ Nonlinear cosine model ---------
+    NL2_ExpDesign = ExpDesigns(NL2_Inputs)
+    NL2_ExpDesign.method = 'normal'
+    NL2_ExpDesign.n_init_samples = 100
+    NL2_ExpDesign.sampling_method = 'latin_hypercube'
+
+    # ------ Nonlinear cosine model ---------
+    NL4_ExpDesign = ExpDesigns(NL4_Inputs)
+    NL4_ExpDesign.method = 'normal'
+    NL4_ExpDesign.n_init_samples = 100
+    NL4_ExpDesign.sampling_method = 'latin_hypercube'
+
+    # >>>>>> Train the Surrogates <<<<<<<<<<<
+    L2_engine = Engine(None, myL2Model, L2_ExpDesign)
+    L2_engine.train_normal()
+    NL2_engine = Engine(None, myNL2Model, NL2_ExpDesign)
+    NL2_engine.train_normal()
+    NL4_engine = Engine(None, myNL4Model, NL4_ExpDesign)
+    NL4_engine.train_normal()
+    
+    # =====================================================
+    # =========  BAYESIAN MULTIMODEL COMPARISON ===========
+    # =====================================================
+    # ----- Define the discrepancy model -------
+    sigma = np.ones(15) * np.array(sigma).flatten()
+    DiscrepancyOpts = Discrepancy('')
+    DiscrepancyOpts.type = 'Gaussian'
+    DiscrepancyOpts.parameters = pd.DataFrame(sigma**2, columns=['Z'])
+
+    # ----- Define the options model -------
+    meta_models = {
+        "linear": L2_engine,
+        "exponential": NL2_engine,
+        "cosine": NL4_engine
+        }
+
+    # BME Bootstrap options
+    opts_bootstrap = {
+        "bootstrap": True,
+        "n_samples": 100,#0,#0, # TODO: difference between this and the n_bootstrap set below?
+        "Discrepancy": DiscrepancyOpts,
+        "emulator": False,
+        "plot_post_pred": False
+        }
+
+    # Run model comparison
+    BayesOpts = BayesModelComparison(
+        justifiability=True,
+        n_bootstrap=100,#0,#00,
+        #just_n_meas=2
+        emulator = False
+        )
+    output_dict = BayesOpts.model_comparison_all(
+        meta_models,
+        opts_bootstrap
+        )
+
+    # Save the results
+    with open('model_comparison_output_dict.pkl', 'wb') as output:
+        joblib.dump(output_dict, output, 2)
diff --git a/src/bayesvalidrox/bayes_inference/bayes_model_comparison.py b/src/bayesvalidrox/bayes_inference/bayes_model_comparison.py
index a26eaa886..3cc0918e4 100644
--- a/src/bayesvalidrox/bayes_inference/bayes_model_comparison.py
+++ b/src/bayesvalidrox/bayes_inference/bayes_model_comparison.py
@@ -357,8 +357,8 @@ class BayesModelComparison:
 
         # Evaluate metamodel
         runs = {}
-        for key, metaModel in model_dict.items(): # TODO: add check for emulator vs model
-            y_hat, _ = metaModel.eval_metamodel(nsamples=n_bootstrap)
+        for key, engine in model_dict.items(): # TODO: add check for emulator vs model
+            y_hat, _ = engine.eval_metamodel(nsamples=n_bootstrap)
             runs[key] = y_hat
 
         # Generate data
diff --git a/src/bayesvalidrox/bayes_inference/mcmc.py b/src/bayesvalidrox/bayes_inference/mcmc.py
index 49748bce7..20be393d8 100755
--- a/src/bayesvalidrox/bayes_inference/mcmc.py
+++ b/src/bayesvalidrox/bayes_inference/mcmc.py
@@ -264,7 +264,7 @@ class MCMC:
         engine = self.engine
         Discrepancy = self.Discrepancy
         n_cpus = engine.Model.n_cpus
-        ndim = engine.MetaModel.n_params
+        ndim = engine.ExpDesign.ndim
         if not os.path.exists(self.out_dir):
             os.makedirs(self.out_dir)
 
@@ -556,7 +556,6 @@ class MCMC:
 
         """
         engine = self.engine
-        MetaModel = engine.MetaModel
         Discrepancy = self.Discrepancy
 
         # Find the number of sigma2 parameters
@@ -577,8 +576,8 @@ class MCMC:
             # Check if the sample is within the parameters' range
             if _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)):
+                if all(engine.ExpDesign.InputObj.Marginals[i].dist_type == 'uniform'
+                       for i in range(engine.ExpDesign.ndim)):
                     logprior[i] = 0.0
                 else:
                     logprior[i] = np.log(
diff --git a/src/bayesvalidrox/pylink/pylink.py b/src/bayesvalidrox/pylink/pylink.py
index 637f42317..3ac8ec73c 100644
--- a/src/bayesvalidrox/pylink/pylink.py
+++ b/src/bayesvalidrox/pylink/pylink.py
@@ -159,7 +159,8 @@ class PyLinkForwardModel(object):
                  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={}):
+                 obs_dict_valid={}, mc_ref_dict={}, store = True,
+                 out_dir = ''):
         self.link_type = link_type
         self.name = name
         self.shell_command = shell_command
@@ -183,6 +184,8 @@ class PyLinkForwardModel(object):
         self.observations = obs_dict
         self.observations_valid = obs_dict_valid
         self.mc_reference = mc_ref_dict
+        self.store = store
+        self.out_dir = out_dir
 
     # -------------------------------------------------------------------------
     def read_observation(self, case='calib'):
@@ -579,9 +582,10 @@ class PyLinkForwardModel(object):
             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
-            )
+        if self.store:
+            self._store_simulations(
+                c_points, all_outputs, NaN_idx, key_str, prevRun_No
+                )
 
         return all_outputs, new_c_points
     
diff --git a/src/bayesvalidrox/surrogate_models/engine.py b/src/bayesvalidrox/surrogate_models/engine.py
index 27c117a79..55417fe1a 100644
--- a/src/bayesvalidrox/surrogate_models/engine.py
+++ b/src/bayesvalidrox/surrogate_models/engine.py
@@ -23,6 +23,7 @@ from tqdm import tqdm
 from bayesvalidrox.bayes_inference.bayes_inference import BayesInference
 from bayesvalidrox.bayes_inference.discrepancy import Discrepancy
 from .exploration import Exploration
+from.surrogate_models import MetaModel as MM
 
 
 def hellinger_distance(P, Q):
@@ -152,6 +153,7 @@ class Engine:
         self.SeqModifiedLOO = None
         self.valid_likelihoods = None
         self._y_hat_prev = None
+        self.emulator = False
 
     def start_engine(self) -> None:
         """
@@ -163,7 +165,12 @@ class Engine:
 
         """
         self.out_names = self.Model.Output.names
-        self.MetaModel.out_names = self.out_names
+        if isinstance(self.MetaModel, MM):
+            print('MetaModel has been given, `emulator` will be set to `True`')
+            self.emulator = True
+            self.MetaModel.out_names = self.out_names
+        else:
+            print('MetaModel has not been given, `emulator` will be set to `False`')
 
     def train_normal(self, parallel=False, verbose=False, save=False) -> None:
         """
@@ -198,9 +205,13 @@ class Engine:
 
         # Prepare X samples 
         # For training the surrogate use ExpDesign.X_tr, ExpDesign.X is for the model to run on 
+        if self.emulator:
+            maxdeg = np.max(MetaModel.pce_deg)
+        else:
+            maxdeg = 1
         ExpDesign.generate_ED(ExpDesign.n_init_samples,
                               #transform=True,
-                              max_pce_deg=np.max(MetaModel.pce_deg))
+                              max_pce_deg=maxdeg)
 
         # Run simulations at X 
         if not hasattr(ExpDesign, 'Y') or ExpDesign.Y is None:
@@ -221,11 +232,14 @@ class Engine:
             print('No x_values are given, this might lead to issues during PostProcessing')
 
         # Fit the surrogate
-        MetaModel.fit(ExpDesign.X, ExpDesign.Y, parallel, verbose)
+        if self.emulator:
+            MetaModel.fit(ExpDesign.X, ExpDesign.Y, parallel, verbose)
 
         # Save what there is to save
         if save:
             # Save surrogate
+            if not os.path.exists('surrogates/'):
+                os.makedirs('surrogates/')
             with open(f'surrogates/surrogate_{self.Model.name}.pk1', 'wb') as output:
                 joblib.dump(MetaModel, output, 2)
 
@@ -254,7 +268,8 @@ class Engine:
 
     # -------------------------------------------------------------------------
     def eval_metamodel(self, samples=None, nsamples=None,
-                       sampling_method='random', return_samples=False):
+                       sampling_method='random', return_samples=False,
+                       parallel = False):
         """
         Evaluates metamodel at the requested samples. One can also generate
         nsamples.
@@ -271,6 +286,9 @@ class Engine:
             'random'.
         return_samples : bool, optional
             Retun samples, if no `samples` is provided. The default is False.
+        parallel : bool, optional
+            Set to true if the evaluations should be done in parallel.
+            The default is False.
 
         Returns
         -------
@@ -289,12 +307,22 @@ class Engine:
 
         # 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 self.emulator:
+            mean_pred, std_pred = self.MetaModel.eval_metamodel(samples)
+        else:
+            mean_pred , X = self.Model.run_model_parallel(samples, mp=parallel)
 
         if return_samples:
-            return mean_pred, std_pred, samples
+            if self.emulator:
+                return mean_pred, std_pred, samples
+            else:
+                return mean_pred, samples
         else:
-            return mean_pred, std_pred
+            if self.emulator:
+                return mean_pred, std_pred
+            else:
+                return mean_pred
+                
 
     # -------------------------------------------------------------------------
     def train_seq_design(self, parallel=False, verbose=False):
-- 
GitLab