From 7188f8e92dafc16a7b6da707a295da261894191e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 1 Mar 2026 13:26:16 +0000 Subject: [PATCH 1/3] Initial plan From 6e3dfd7362cf2530f58c00a61ca01fb3e033cbe5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 1 Mar 2026 13:34:28 +0000 Subject: [PATCH 2/3] Fix CI failures: consolidate imports, fix type errors, exclude backup file from linting Co-authored-by: dantzert <47285626+dantzert@users.noreply.github.com> --- .gitignore | 6 + __pycache__/modpods.cpython-312.pyc | Bin 108498 -> 124035 bytes modpods.py | 260 +++++++++++++++++----------- modpods_bayesian.py | 255 ++++++++++++++++----------- pyproject.toml | 13 ++ test_bayesian.py | 63 ++++--- test_camels.py | 76 ++++---- test_fixed.py | 116 ++++++++----- test_integrated.py | 67 ++++--- 9 files changed, 538 insertions(+), 318 deletions(-) diff --git a/.gitignore b/.gitignore index 0d20b64..5e71c83 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,7 @@ *.pyc +*.TMP +*.h11~ +*.qeb~ +*.wa0~ +__pycache__/ +.vs/ diff --git a/__pycache__/modpods.cpython-312.pyc b/__pycache__/modpods.cpython-312.pyc index d5ab8831c79d9c9bc5949d36606c7d91f6982476..fe7767efeeb828afb443631070f6b89c738fe052 100644 GIT binary patch literal 124035 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 z zTcc`QzE$nOx3E1a$hX*V@3QSJ>{>tc8h#zVYDd21hs*UjE6loJ*3l~~Eo8sKY1y~}v9 zyNnlUm%@0YvKH zm9yGeGjoa$6s_`|=AQ{yvYLOB&|uwr{?7g-(YIk0{}ilvtDUuQn3S-#+%M4LeWI0+ zP`-Ey@LgVuM_)X96!TDK-v{K_1Ftsg5K9SGBY4&T$4!As{M49<#WDn4cou=tG&*euU3}BE@tF(Q zKZ0Y}zksR5fYWJ?vR}kE{}wx#-}d|1!J5_+5>`#xeh~X^ zgEJd!VwH`^4BCWRWO6~@Cnn9X#^|@E>5u}=737)Ffsh0WIu|X zyZ9~D)gk-%(D0-cEA(qiOrcY{SRHbB$U&91;TOJ)ov(lc)&fUC#BzGt`Plbcn3k+` zUqCt-kWR6uls%LNqT%STNzkO9wSe~b@c88TEN1tWDSQVhLfF)dY50c8ab+0N1;kPa z?I{9{^g_FJXtEG=+|6baRy{UZ#(weelhs4RM_U4szz2sFEFz*%fDlt5*9ARR7Gh2`nhA_VE$Z%#BOdG7~YwvJs9r!{?JZ0?}Y@z}cL>`_{Oon? zz-p4j{uAu{96O8H`2}|V5j+2cou6XoXW01%Z~`&Ym%v}=Gwx9jj*(RM3aL!1G@0!}4*%sMj&Mg)PV z(ecU2sUdqWju-)z!5SL`BPx)fn#n8B!+tO zAm5WYI8>Oa2QhSUR}07;*DhXU`&u9s+a|CLava;D2v!SR_k4g~d=)zzOBRT*PhYd^ zajw-IkSW_i9f5>UmmLgt{Xl$BI)om?as~~-aF$8-BwUOX?0k$<^JC{0H~}!afwnR= zGdMavV?U3d#7x`A$FPaUpoKdLPtVpF+yje-t#+eaad?Mb2^+o_omMI4gV!K{Y z`G1_d3xd*O3lH}6zJS~U1{48#E98U`J1=rJX02_P^a}f^XT;l=3einQVJn{XEmI&hLBC7BqISMFVpfH$E;zY;od zW@BUw*5<@YompS(4(fJ>y@R|LHT|Ww$(`eBThuM|P}-(D2f=v~ufZkyRMIDnJS2rO zrDs6>_|wwo;zPxYQkFsSK#hCk%d?;&3zjP`?cJ-ck-Ik+M^@vr{F+QglaDm{ZpTNO zVt+!St9l_BELjZh2s$ChugPLGg-BEA(SD>UU5^D~U<#v4;y5SgNPiB3aOQT|x>}+y z@*F{_O@RBSPhX65$D-8Ix!8}@1{UG2+^ePbbUu!yPM!6s&#jrtJU5rymTOmx{+c%G z#IV1ja=H8QE7YLvd890BQaX2VQM;-(f`LkGB9&O_t)}X`AD2>R27K!Cep4%HG7zvE>zP+*YvEFlrbgyQOW+tQtHfkYUYNoWOl8v2p?#_T2LK zB;~wC_ur-p8$N}x)Piv$;i!9{=9*xV%TRI|om}yerV{!>X6|RsEH#5q`Md&{rJrz@ zXZVowAe!xI3_sbyq4{2so{=q%Lk=?gWxx8uK{}lr9%`qIMdHR6$jV6`QI|b8{UqSz zLN+@A9X7~~36>j^o4DcARIa6@gJ?F=#&SBP;+Z5W_K?&CqRr&if@zN@;T`=$JSk0)Q(kfPUmHwn`cQx3icq-p% zc-VlFYCg-$Pjz}Kt!~-4;y?|(AL$N0i^VxwKPzJe)H>MuCTi~`gMc~VN~ROC!T2gp zqDf=oGf{lzr;=A?k)R_U<^o>jMa5_HG2<1rMWtRm#>$GFw5D06Yt|mfRiz8CXd`6|I!6 z^kbd=37ehuc*r9dl%0}}NU4!gbaD*HjB^Q|;uGw{Nt}|NU}12j=eWCbvcH!|N(W>s z1D=89c2v3_UW8jpZRR}wtbI&Y8_H^ z38k(!fGA%q^%$x8LysLkU7ufv+k`HU%5Oos{VPVKJ3<{jg>ZgXMsq@nSy6x)NZL~BPS5R6pRnmddI#--1 z?G+~N3`#pg^#j2Ps(%8dO}g6FWvZmy=V_95>2WEbzEY=gYEWc{v==x0cIiPG1*iX( zLe8HU>X(hk(Dhi246iVTQ^;`2)$ZT*!>6Vkcju!%ulDWJD7Th2?Q!+MfZi@WDg^|E-L(amEIhbw}+}bit?cQ4Wc~2=f8mR#+kfpDDN7R=R|olJv z3j-?Wcgq%I{FQr`M*#GnYCDH2F~3mdBn9B)l~*7$RV*AexDdN4h)&MJ@K$x>X4@lU zTUgZz*`nHg8l{#!G30s_$WY-u&D3_F+K!cR>gaL0wvReRFsCNbDWH6nx^{y;HM?3n z3ua3PRr|Bd zo@4Kvd3a_uYtI%@)(bF8)=MPWxvm3ixn@u9J4FwRyvH7v(z*38IZL_){Cbj_&7_)9 zs@YS@6tw`1`-<{$HeGaxI(h;XfmvQZD(a^OMp4lyH9m=oCVkTwrkkE7Q4#r3s&hRO zlYu#9ddB_crDl)ZYkPdahnosEJ>#DYFo%ZGp@(QKaU5Rj%B;_D z+||BrlH}$?4M#~*^O%$plv3h3~q(|YpetSt|H zW9)-5l+y7etJG^`DmzhS=gJN0SRY+^f~t50WxYb39!6Qil=TwIy0jDpg-a`7^kqn2 z=DD$)Nb8$dq~BJ4s6_f6KTwE)vk#WfqO9)4D1o!1D^Wf}SBPicDBy?rL$l9tP6SNV zIpG`n5A>+2)n8Nle#g5V%Q-MJDR}p=TmF{ffx@Hp^m$T{sS>|Kyk&b}LzxxczUB6B z9Q@!Qs_pjI)W6^TZufHEigx)Fs_EG3tySTz)$QL}HC28Ri}Sf2fiu6Z3za2uV_D>% zzbv0ES4y1XdIZh}45>Vaf0J^RA<-M}E0>h+nMEa?TH>4a92I2bXBgY;=oD{zP?;H=y)*yMe%t)RX+R0 z@`_J=(w}UY>%wNziL4!Ogxm7RQEy~;5x!7j#5FM0i@h6*XU7HD zF#p;|iaLL6DifQ5Vl$Z7JQNF-xhS^K)5H`vqvB?!xD6GztyoZTCyMQyllj%LF4^7A zIjPt)CuKj~u|XgHJ|CV}!bgKL<~7A##p_95iN9mE3r5>yBUpQ1_8dd1a!OwQvuDm2fTx%KERfOlvuFFI5?%Apo}G`t z^PZnQ+lR;1pFVGoWZ~asxX`f}^xYqu@OuD_9tlr=?!e2o|3RK;u|&!LLpoek^6wej~dG!izQR?p(Rskv9v^dXeo@fSQ_El7>VykLaX;cFA@GD z;Q!N@J*=H#l>Ig-1O(kq8^qa{|@XAMH5o2G3Sc5e?Z8Hh)MayNGF^J zH51Fzvc>T};fha;50}$Na(<7@mLSCDeS&os*!{f>`cZtjoN5sVLOYi)sZ`OSRAXOC zsX};{fHMCwxF*n#f64SUFPVPAOQ9dag#={wm%)F5zV@Zi7uu)pCDTuO$@G(7GX0d7 zOg|NmH7?nJ7BoBb;Uy>=4gwQf?T~s_ml<0_ghmS@2GAE(fVBwQ1^6eGC?zsDhZD{| z02KBy8P<0OYsJ_{alA&2(*QcKM)=Pl4YrU~Gy5{@ydCs{X4&6Cx|yKU#OZ}|wBlKc ztX6{4L>g@=!kfI0H1QG;#*>V&F~ZSg>5JYp!H$0_PgA(!a&eXgETUu!=;3b@FQ}vT zVhPyP0C|4P6xcU2N$n0XOk~{FF)*(tU=#+et+ybb+r-=e{B8sEZwlF z5y@fWicgmi@*6slVnZInrbeWOr7K1c73hlbN<&ZK?3yrhYeH^t=vLVHOtn~hln>4j^p0>wynY)RgU9-PFG=gc9M z&fNKvJH>^x;Y$K!-^A`xhnRQBY$78lF@IOoe#Mxj;bmc{Bw#rouB16+t}tpqO81&Iy4mw~S`#Ccgy{10 zqX{!BXCm$2e<^d%BEFWuHt}VAy9i(0#?MRNS@5|j6v7Hd@nrJF6ej@R2Itym*txdC zUL%@)RB$a>?Be+|p1s+s#ZNguKSQ?Fych;J5Ms-xqN(g%rW1x%sIH2({5Fsd{J;3y zV5W}GiLIXZ30JU|42^}NuZT=h`^8@orQ)v$Qen^EG3V?lPhq(Lr?-jhzlwLkg)M3E zc?a7_VgA}El#cfS=gWARM&*Q({Q~-0D39g0_we6=&ML5R*j;|A z!JZ`CIK_Tvu_IXxeCO>D17;*J*4xc9`}vaFT6v#vwY3X=-nS#|a#@G7c1oYD!?Fuv{`Whj{+Y`1eUOcRCCt?A|M;6QPv3d29j=%DX3e5SIsDC<-KUBq zxkxfjX+_UPQgA9-G>4bX#|p7N!&g8wQP0lOBkb1CJ4X$>FBY0zIO|~s+c24PG1u7; zoWV*5&VlUF!~E>OiW%$x=-2&{^VbZa?$}lEfBEy*#?YL!amV?q5Vw?wb~cfXFk@{1 zUN*CH*DCN;k`3W3V%gbjGg-;ccbt34y<}5R8XL*IK&#ogZ_{iPo)Pd40da-(iTN6k zwoM>yo5=d@=U?;BVICu$9~94Hhwv`$#$ zY=Ifbe)zY*m}=tZ!ooH9C9?Gl!~!*}+=B0+QJ!oG)@$mnNAA*{XgXV9=CB`D04?)v z+?U8!W9;qyw=F@$+m7XeS=kr1P~qaVzW^R5a1Tj%rGK%nm&-tgc7+HHsZHK!o1X%C65yStK{TNcwHJ zHuKA_nSgEZmiwvu;cGBQ{57~^UUsu`0c#1|&xVa)H~nUW(8HU8;P&m{BT=lQFUEq^ zkJv{Re*6%{h4qZhKSK7Xm6yFD-KNk!is)Hrzhq4Is4X;Nw2^ILu?mU+@2Q>71I$<2 zY^OG-4LDO9V%=`te&itK@Qo0--4@QmoalJe$(Lip_w6py72bn!DTW=LTIBHMf4h}z z1$QF`dd5Q9XtsecF%Iyl*alw=4bdKYF^uTt-*mQ%_%i%rOtKy4gE+85`45KH z;W_}(LHI@?UZi-tBb0WhDCUK5F>iMghaMf~btj;X1geRPcPE6@u% zY!_do%=5y;l5%^T(8GxrMh~$bj8qXFI&Orsd^RzK3 zeBl9hG#QB{xbXMrmA8X>md=CZK@RngILWqyQ>=R$ySESQLVBJR%9)mN(WzJ)_4-;kKXRVmioQ?@bvBFZ#UU2&uQH~{tJ^S|I@ZZ4P zTUh>W^&O3Q!+l4?{4}h@7ife}gOu{;&)`wR_S@iW`fZRw9h(B-HY9@%iCXoTsD?uA zN&IaoihCh!+|c}SgA@|WCZUh~8f3jAnwRvT;USyFYw+7A3X`Z;0ZG zbV8u6&TP%;f1Qzs!wAE(+JBvqzu0Qv>;EOs$ZxA|vpP^g+%#nfBMp3jk(S8k2{6)< zo#~<$FFM_w#YaoOmF`NJpMe?;ZaagqB>$SjR%3G%;p}#H z;hcO%D$@Ce7pa&h4g+))Kp2eyEEh;`d}eu4@ScT!njD|GF#{(yJM6QdT4TSBogRp1 z$IC4|$lZSSi1S(H$OY@jglT-#G^;TMiI^}ItHbnTERQ<@N-YZDp(f!(Zu}t!a6=CJ zAix#@0ulytvsVK7AW^DiRt-^2mrUH*;L=yR>?&N;_&A9 z)b8HI@!(B1I({>rg@+Tp%s=2$pS4U)UjukLz*>U0tZex- zy9!LiH&9G~x10I7@|1OGqO=V{xx&tUbN|>MF5%z9mRa4*I2T8sYd|p3r-5Z;sE~4CPGbIx`0ow z4`#6 za04Znm3Lq_+C)MXf+q$%xXQ6V1u{N1Jq;`v8VhEa0|$&W4FP;!K#ns%s{uX(D3{e< z3b1Mb*>?k4bqp|MWEu{4pRxW}1&PllPM8XFOj7`cbzykg?l5EWx(-vJ6%fC;!ox}H z?9*h(z=%R^TLF&_P|Ge&6OLI0po_84cz_J}=eTX-e$GM*n&tMt z!2Ta#hr*5y7y!)r5%#xXhs6#o3IU&);81!1+A|GJLd6m{OxK|KOtLKsH!myE0+@Hx zSL`F!0I<*wNN|CuYq(r9vpI!afGKOQi3>8D@=b+YsA-?6qO8IU`S~Vf!2T^<4N5C9 zW*r=wnX%jd6hFjzUeKhJQ_}<-E{{>{TH(oTi~|^4>HuKAQRvgk(P@BF!=V8c>m41s zI6ip;LKK+XwO4+K3zmthx!a%07*Y`$yRMx7fLl9lSnepTrIp z5_UIsSnlE8!h+1%=ddpXia4u0US)DX8?iRBIFc-IVo;7eY2gqjN&Ln>?0f;7Knw_r zL3`C8fX;>d0KLeHCwM-a%k$cL9dhq5T^hpBlNi(x-oSkhBDc&M9T%nnr_cdCG)(wx z?#AFr>(tnbRAyBycpcZbW>a|J%V3p*$Y9@^%@M`Iof%7^&Fx?|E(F&HS-doDZslMO zPvc_aFAMt|u46rhN_24WdSx??p)!0wGd(@&u)l}vybs4bft}ySw|MGihtVd8fOrz$ z!s49-c!i-frvi%0S3pROPg+_224qv$1KM%NAeTGnbgU4x5`iT4Jo-z}QHLCZLxc@5 zCZ|Sj*ynMcqT9#2u$&4cal_6a2$3?u%L)?vzrm@>iSf}<7PBxAacL47*2v^EG(`mcC#Q#I02mLz^8SFOaP&q`r+o##@DsQf0XDLjj{kt4EnB+Vj8SBn)8l=5N3l% zLnKFEAUV2`B)mgdFF{+K1dPO)3xK1@3WKqcL8xIC1u>wwG|0_F0*cX~kAtg>8y&t9I;P39D^5!E(KJgR0Gk$j0ZIA zOX8p?E)yUjS%%`EKxothAY44S;!#gFV+|-LLV4lxexf5Foe0R_!jYNageyd4g)fZ9 zA>qr8&65FrXv7=j#2<#nWW^tcXZwF)j!C|Iotxi^RzW)zc zOmScXPC&v0oDTJq%GO^GR^^lESeKrTPWzFfZ4JQr(wEYylD#VvOy?QYdB&&jXY@lz z4`^9dT0c4$x0alGZ*pOhGB>U?F>NPN+eu&YDJJe8h6^+lmK++@=d1YIBGfWOYCD3`%xmmBn{Guug*oU?IOx{rGAyx z4((9t3$$T;r&3$#)X}-v^%zO2`BO=j^0*WrUW|o|u>u(@K9!hak4s%jzc$?+y{awn z>(W{5LU#jIwtuC-r#Y}LmnRrMHdc9?R-zv(DJW@mA9Z$s8lCVNCtaODHa)|o@EeTS z$-3XP)bz&QXA*Tni>u9_SL|tfaMqjf;JmjNDv4$d7elN$l@(nHd9q?sIYxCrQKiGu^7pM@DzB=RCYB= zt?@UstVDcZSUL7V#$y#~06?^psNvLN^nKNm%H8GZp#a$|b&tPk-=gw<>{6_I%rg!R z4W-sUc`*h0SD3QYMvE3en+F0k+Eb>mdPf>yI$L8bkWx}UO!`E>i zbV#^jDS@xMi%!J_!FcB`%*VrP8}3;U;A1|;ae(AeCodXkRqlG!Sy`-ReO4|>NSw3y z6SXelYlVJIg6r5qluPQ*$O1&nbQ833)-jkFLpd^(Ka<2K)Ib}}EM+olQD*HkNnBD5 z0DBos7|O`q=h3Vu39xTt;8|=kE8v^sXl;h?5Fzr(f+d_9ar}c z`-{roF+Vg1ae0fH7kmAM#fv@QEcN(}+4s*ZopC!n)$VJ^Snh42jr&&iF>SA)wpXZ= zEXv@?0n~OL%i=bxKeNblg3hd5GXV@@v(L2mNlwvQO%Iwp4sW&R8p^3#E?`>-Amg2( zK$ti7(>eYAsyenwwXH-fccH3wcdx&q+T8=rgPu=}P}21XDE@l3M3?E-tpez#&cDy% zI?U+ukuKkT!>gwX8j-Ha-_+^qWjkvR^qAZ_q^k#nMk=kuGrpX>qJMml>bLrIqZqZZ z%%?NM_04Q1tpcT0yqCyS_Mpn1$HmNn0d#-^VjQ6l5I*}1V<(ZF^i?|Pv|B#iZ9uAG zQc6)u>7!w$tP_=WuH0n0`cW6iQ5b7prMrfF)0dg)8)*85uWZ(ra&s-!NM%&{QmetU zIOR(%#n%a6Y7tbX=O&feNToKeTci@L&PBXl_`F-ng6j79)F%Mw%2no5XW?tHPo04g zIh!bL8Ko{;Kd+Lg(-xa3RX!!pUq7Rg#AsZ#U&(w5I9lWa2^hI6y-fQl)PBmBa+*mQ zL@9&Rt0Qy@F{j?m&=qdXfpI3>2r(D^cZ$*{DTSX(+N8?*xvr1n^?2l~U#fTadZPh4 zm&x6Wa`)1?Elh4F%I#dayke(v5736*1;x`%5nDi-(uVym#S=l|?~Sc@Dc3aGd&&jn zVxCW9dQtd$Y|9|~TR+wsF*fgor3>zx-Ud{#mnmpR1??++faY7!LuVXV=z1C^oX+TQ zbphC3W)_QhEA?c(0g$_EfNI#Y)Z-rVNZ&XNy)iS}r49}o`OhTEgmEeKMk9C?N#oK* z>BqSRo@lQEaPTU><#=5GO{XvSl|`k$yq+m3bb2N0);;O}i z{_;jDy~JNowAk&>%U|qVOV4r_dfL3n%hF}@%Bjbb)VZ;b(l30HfD>7dz^SgMN_6Rq z!(ZL|F`#UAdAhx)mq%$+2S9Af#uE#7iboGf#Rx{Xlni&)SIM=;z27MNpp0oeh#C(rD)9V-m*1&%{<;=d z&%Hwnhj@vstMS)1xw`K4F7&#iJxa<{iF8$;$l@R`8It4-cjD{k**;k9J+(Zxa>J)P z=5O2^E;|h`WT&p-#iZ&sBt`40p52r}3t5lFjqmvZ85Z}GLEv*v9*4wwP}+~q$Np+2 zlmO`lxNdRruH3I&!0>Jffb(YYry1vZ0bzUY06_1}^>9uKpjj59lwuItv4sE~jD>n7 zGE_d3#3mF%GfK(Ceb(LPiEwve(96rKDHZ-y(+kgUuBJ3D-(p&hp%#oTjD_# zfLvEwhWzR<058@ffI-l1G={|!7&jeSN*trfMw)DQ1I!?D z@C?FV*XmN;i(iO$D`7rmszxv;z-ZWo9<%r4@|nkK>g145GmPhjQ$9^z5Zl^}lFgnR z&k*2SV?<|7((A)aatTT?KQUH!$?!^*Xf_)JXZNM z)qYLVdYe=N5b?S57dA~$@Jz%XZ(O`d#TQYEq9@9DN}ES3^PUjs7-x5pUs3ZqSU_ZP#ur%PQ^VTn0mWOEL{zVxGY^~yzR`tnEVc0e5kLV!97l-D(qz3oy;lO4qEzvj6CA7HDRhG(Ui z6YH^<%g>uZ+E8)XK1B{Y?=$%nSxTt7OH%4wr(bUb(ZV`{REdl=Z;&eT1T&T@ zW^SJ18S&s+p`hlvTGJ0oec1 zC~N;>ls~T!L`GiWQp_hxpbFrpv1Y(NZD^i5%&0SvI%9FxQ$%IfAayMa19QEv9l3jC z@ql}lO0PufDi)|S*KPCWFBh#$QYZR->a+Zu=BYa2^=u}w5G58qN@UCyWVWmn`_2w9 zXRYY0)n^{16UTh&3v2NSOne^TetvzJ$=`?a_buP_o$hAt zK*uuk{i;Mf?|-pdxf*C?I*j>w1#caEaL{{`sXKt`4p4pPnZ8lfH|onBV{)fZ?i4j` zr*j>YA`4>@!}n;ia^GAR#wxwOaNVu)bRkm>V`@UCCOV~gu3Pk-s*ByX;WHJwzsm+= z<{oc@PqTL|E&YDsQlY!aa|7ixFgg1H`k79%xT5(p3@WOaiZ)cyMptyec?C>iGb(I` zg9cvd_Z6OnGYQ`6e$efOvj`g2%q5;vZ>PUEvTXj7DXOsJxiV6p2!{}8BnipvgsIRI z?Na(Q6;Il_zuoj<)8p&Z0I|{p^K?pMW;CTpQ|cM>j>8%S((Dgt(?C$+k=&Ez>hoa}Y4j`ay-Kij?`rsI?yTIsXkZy+7U1fA6 z(vdJM-I9*rfhdWP&2_+n52GnSngUOx_rl6`>gssjgTF+dEzqXM{ zZhCmabIdDsU0zIBm|3(eTwA*M@{zh{O&$MQ_uX#SEAvN! z-o@IF@QgqHwVt~@uHpGZyw~ber$fGS^4=GIi`6bBsX82w%39$(}^n zfUJRhv6VJp9ZY-*#3Wi}sHz=pLl`X0diruDsZ z2e3@co$tk$5_gPGUA)m(xY+4a=fE>6vEGLpB1q1A#S6u64l@~hP{tnbP2bVu%+Y>y zwBMHj%a5bf*kwA=?o&HJdcJn^?#(x=7(+EORC{~Bcl-za-|6=mU~&hGkW;?+X;ysJ z`ZRljbE15dod0z@Q_zA6T2@rPGiRAIBk0VCuK=*r0keOWPQK~WknCH{Sdzg^Y6O2p z7ooJGM^!=m<6hsuATuzA2F85F7pQRuHFJwjyA2&OC3NJ7Dd+30Ol}Rzt$FV_Q+o*2 z9(p|C8yjcFE~Bx_zFI(<=VqBbxF6>oz;0HrY$5iEDa#cLc*zMViwTsWhB4G5IG7-9 zBW0>ZnmztzINBmOr)>1tsGNGFX?S93 zr_?!&x&WyQJTcxzs&Fq-?}Hv>$iH8{R1RO$e`=wM_M)_XOj;{SYlW4?v{pLpIFoh~ zrJbbHPS5qic;+hgsZF@*@V7c!UEnEUJ!YS}2!}u|KR*PY`bpchG#}s6e3Q=SNAU_4 z6<6(3)C5$C8>nYev}t*U#ui zk#3ZgnNvtN1)cYj^c7ZAp8T&%RKl0Aus-s$XG1z3|N5txrKwqP2ttAp%e}1EyMLrh z$2ivs#(!A95HDp11McI%bBsoJ1Do)CDbZrn%I|}lD*t}2 z#$q$dKRl9`WC3KF506QbEEDNbAC8v6HCyuG1tnZtqCT`4l@?ob^oO>5mBm&E*SbjV zz9q#np^x}*A{(yF5hJh-6#8MkB&_oJ>Hite0%uEXp&-FSNU?eon76=C$Qrk#fcb<} zq#717t_s4(M6!yi5owYsDJcb07rh)zVw@OUS|A$o5mMF^3wDRNU$|phw|W!jYr8PP zY|$y3`BkS7iBlJ)5Fs2WYQucp^xGnzQJ4y^Vp=P4%0*Pvn@GSdDd*!lBSkUewv8Dj zimBN)X0#~gwyC#+;@$u#%QzJ?TApG^xmZam!$H!Lif{*B6Vam~<1{d{QiL;wamD}) zQY0CJc?Cz>hCQ4f4!h@LD7K=qMZRJ-ev4aYx`F(R&R zTT^f(`7Kf0ZR-k*oIpj$84Iwv8A7VOkBq@az+iN#-J;B~HWMFLxDo(N$+s`4i&$H> z5XSp}&%5G^R5CRI#z%Sldqj*tS$Il{o=%N#;MBII2TnDI&&TcEluY$`N=6FpWBZzy z&i@nSv4H1*aOK;EGmeaddW2hNJfU)G;6GstIT4h>0|O8@k&GwQtn5qVuEDyFhv%{Q zIibK$?9oIVnaDkX1L^m@5E?HEEq@_YBMLQzLX|a7;RDs zbl<}q-Xd+Dv!JZ^FOjokB8lZ~vCz7BpTG+|!p>jbk^7n9xle)&*;NWzU~u?9Ln^>= zSHwUC%kv#_MyT2L6ag(?HZbokV?||TcpnJCUx7jHi-AyObK64wsPJlTnQbKWUCbJc^?@9d*%)Hwu83(CDRCj zF7GA{mX|srnUsZtkR;>5JXSX*rB<2RS*Ten()lM(Y7+qQ3U%xVDqh??)fqdYc@ zBqV$*gSo3L9Naa`1mLI)XY!WypA6Cp{yAwip8{i<%vQ(CUg1il652<4QECypi6#01 z4Fj7%%E*W@85n@2@pPRjWJ(`=IZN5EXVyF`jn4y^XQ`ZO)(}g5OATB&3x-(W6B}Yx z!uIRWK;3>2XtAbEtnpJo4K^6;iS}TO0ZOd+$a_%z28)t_ zy6?*H$k5Elg^QpQ8;~Cc)$M@%AQ;vBynW;f==XvNk9E?D1F`D<5ZK;;0Z$>=vapss zpv65t1=cp^GSgLTQE|gGa{;2U7CZ3r$V?||n#Gz(1*C^T|9BEiVBiH%<(>lnHT(Yt zD;5Dc_MVuHI7bxQe+%dQcd&!)hB&jWJJ^TKAk4-<6lmp-j*qbl^MbyAAnMW$T&h4! z-}uEVoKkWiR$MkvJ;#NE3of0*zJQZ>9h^WMDA|TsFizm(>pA16=_%HNAP@s40igRn z3dTU-pPB@{d930dh{8O87gP|)KeV$J3%`%)f~x(+XBtS`KrtKFUgATAV7_yH~+t(n(-h`RZjM)|87{6$5 z0JU3tBX*j=2`KnN1mdt_{NOaGcH4)pS|P{5dK`qDMhE?zUbr0RKaetQA0Hc^8k%HP z=tVEe9Wz$YU&rnsZ~&WHSOZD?Eiegms3(KXD3S|}-S|{_$!@(0F9I3ml=V6o+JM)7 z9+&28P!LBd__k6~=G2Z8u`$RXXO|FUi~S^&*QtQl`@y**f%Vs8(qSoc^a45xtH_tp zQTtz-9gi#DYg?B7N$2v={{;I~o;J_%hxseVP*LZq*+I#Z7EYBCs29@6BwXT4=q zz6F%0V9PKieenPsatQjip%fcEqf~aSPrb*VY-ExPQF5U#xd`e-m+|%Fx6&V^dq!wb z9nw~z3G z(!2cTQpVhX%ngeNgcyy>qf}LgFTL~Q^sMz*Acaq7&!930U#b;r&e?paW`C;jNmAz5 z_uxZKy%BUy4L(9!m(A$RNN4ucywmis$$OP5+UL`?__GR`tQwS6<2oS3X!MT4a=uT; zF7cb(z_eo6s4A7DWN?N22nxAJQc%m}H=z6mI==~a2cD#2CCu0gm)vj4bH(}#ODRpB ze?!~CS_zeKZgYwO@BO*+Jkke+bV`xmnB~q|I^~I4HI{j+m-AMn9~8dZ0{WfqgrzR` z)z$P;Z_!HR%Fu@jRMoxVapAIc#qz-gRMolRan5qm^5qXw-z^V4rGZBNa>q*62i>bx z?f#OAr9*H+c0wi8YJMHJ&AL2=@($ru?^@R(K8K}rO1ZzH2Bntb!wIhT8)$F3qV^swoeLNc%kS=q`wJe?>W49*t3r*Zb8K@D{{KHV>P`K z^WumU&RTwf8Bmgq+~_#I80Wsl6f~iNrsa0Jz_Oa!`Uxb-qU)| z)0OQYy(&9bwVgY>`$U@}2prh!YD3yKP)Pq9(1q8-27XW(^*Sm$in5MkJy1AL)t&4~ zd?)2$idRpYv5o?h(uz`AL1+AXvL7hFqoj_Xruxq@{X?i9Oesd`{xQ1y0@FQ(x~J&w zORFiD{55rp()*E1k&82nqwaC{St_GqHMR0d_{Se7Wq>Arg@vi;Mit$UGf>58lymym zpB0o^`7!2-r}9BMRoNO;?JY!=eJBgg;(nDPt}q0N2u@R=6Q4J3g(Jb?avCl#F~2Yr zgkv2%W?APs_Mn-nZfB}{QFZU*!>IZ!$^i}S3)G|&i~=u8J8%~9WgYC+Whb~hcK7a8 z*u?v1$@hAX6uQDEC#0>?*pyGs%JJCslO#L}uHTB1XcF+@z0V}l$gH^tztJ=&eJ%2C zgscK%uTE+($*s&5Jr?84h@FU5O(_YOM1}07;@KohJ5-8N}i0>>N6<0@n_F2 zM@x!kq(6Or7!J2JK9fYmCjEa=l7ysxSdRwp&wos^8YBe<ZE%hl^aiSbX^?X)Q2j`wj}fcyeJe}zSZuyNT9z0a2(d#)d! z4u9PuJ=v!8LMd+%pIz|fX$pMVBKC%y%mPFBH(?7D^O*gG-SC6W&qopb$DA#M!p6S? z%k;u#o@@p-V7Z?y+{QQk#Bcv@P`UD+Ccy8#b(>!<~reRKg~J zoK&(4xG`i*I68pA%*Tj^l+uM1cpt9m2DL4hk1Jd^ZHlUG`9c`)+lGr9 zxDwnv3~lfbp#^-vg$X?s&hdu$;~O}&ZRy#~!>}d0y_=H7e4diQCbiHKx2t))d8i1t zt;4qsy!8w92)E8SA_g`PW1N~TWEj82g*Oiq$T&id`vRH3U4xr!@$g)QpA*sSl72Ly zh8XM+Q zLIWr8=3ydG<4TtpESDPI*07t0@$BXy-a>o>I9tlMN#RP0PQ1jMhol0i;;qBD9r!x^ zFO#oi0*R$5>LISxP=!0{dOMabD!8Ud|d z3!8X5rb4Jf8;9DRXwOuJ_z*fpoqIo&Cf=;vO`1T69d~r3)~pl?-h-IR1?wn+fqrvwQj2HoVZe=||`ug(!e@7jnISQ$)BG(sCw?Vz!2hNy0M! zqZA%PbOYt~E#jxbqCTE8!*4_UPVSl5g)N+9B7sOF3`F`Pqv(VKp{(8F_?(}Y-5aPM zcrl)+oGGw1o=T=bzkq%Un8r!ru;(EZni+>_4ANRUuOL&y$0S*tdm@AF*9MSrsnD{q zBfguAV%1Ktpv?;_OA;c$5dy#3&}h0{Q$Inzl4*6 zmwf&|!`2G;w%%F+?D_YDn=4tt&6N^h1P3aIIbtuxw`JHV$4&)y;7~$ICx;AIh3~7e zQ-dA6;bE@@-wFE%;1z+KVQ{h`Q@f=LaJMX&a4R@~I28@s9T=f%{5gL0+u-~dtM38q z)_1TUmn{(Kn4TObSbRIPJPdi2-3k`yZvf2EbsRZn%sOSYv%oC@xqW(i z2H?z;0;&=2#&~xEFpbP+ZlB~e{78Y9;U}y&9QHl9Abs#mgtb(MpVeb$p>t@sw_g4^UdiG3g8vNPE6g9CUgjzMA^?=V@3!J&~G zBa`DJ95j#phd4Y6cyp6e*No=#}^vv$gIoUxoi762N!fGp#5 zvkfKKX!XRM4zPwv(BfSc_bc8jKFvNx(}6S{D?_xV`%Vu8ZnI6}ltwmw-fbF(RM`mI zG>U)Sruo-xn%|ghnu>qjp<#Duu&I6HuX~5)6WACv`s;bvf(Cc7X9jPe)*xMNK$|Xv z)VT9KW{&|vR&}+{jF8n&dLytr`AHI%OwVscu=afN>Tn38ESiC~V<;_K`DPkB!22#L1Ysjc* zV4q|nMW#Cv8!~RO764+ z@WGufe{$M0Nn~WwT+9>Ba1{0zK`6HS%a4zH8V6?)MTca=3gyB^tY#8Q9$y1@2!& z%CM`b#qK^f5*2|XQK|~;Hn*n3h1REn8_+2GbE5-#{9Yh468m!_u)iR(zcSh^{ZBV_ z|6|wR%zm*2CXcO@2tQusNC~HCFtkN7 z0<&HG#Ew5Y0tpv~W-d)m&rFUFmtDGneOOrtU)iam9l)PpZp(vLaudzJ!nwvX+JLI( z;w1n|?SKijJ&@{{m;@D`sj@ME!E*qB=-?&$G)$o!b~#STv{i7~gw;L;=$Cf9Cj3RqcaHMQ-ey(T+ zVALy<)_wNhh9HP6arnW3tuv|ghZ5}%C5b4FIJ*bg$#P best_r2: best_r2 = next_y best_params = next_x if verbose: print(f" New best R² = {best_r2:.6f}") - + # Convert best parameters back to DataFrames idx = 0 for transform in range(1, num_transforms + 1): @@ -299,21 +333,49 @@ def objective_function(params_vector): scale_factors.loc[transform, col] = best_params[idx + 1] loc_factors.loc[transform, col] = best_params[idx + 2] idx += 3 - + # Use the optimized parameters for final evaluation - prev_model = SINDY_delays_MI(shape_factors, scale_factors, loc_factors, system_data.index, - forcing, response, extra_verbose, poly_order, include_bias, - include_interaction, windup_timesteps, bibo_stable, transform_dependent=transform_dependent, - transform_only=transform_only, forcing_coef_constraints=forcing_coef_constraints) - + prev_model = SINDY_delays_MI( + shape_factors, + scale_factors, + loc_factors, + system_data.index, + forcing, + response, + extra_verbose, + poly_order, + include_bias, + include_interaction, + windup_timesteps, + bibo_stable, + transform_dependent=transform_dependent, + transform_only=transform_only, + forcing_coef_constraints=forcing_coef_constraints, + ) + else: # Default compass search optimization if verbose: - print(f"Using compass search optimization for {num_transforms} transforms...") - - prev_model = SINDY_delays_MI(shape_factors, scale_factors, loc_factors, system_data.index, - forcing, response,extra_verbose, poly_order , include_bias, - include_interaction,windup_timesteps,bibo_stable,transform_dependent=transform_dependent, - transform_only=transform_only,forcing_coef_constraints=forcing_coef_constraints) + print( + f"Using compass search optimization for {num_transforms} transforms..." + ) + + prev_model = SINDY_delays_MI( + shape_factors, + scale_factors, + loc_factors, + system_data.index, + forcing, + response, + extra_verbose, + poly_order, + include_bias, + include_interaction, + windup_timesteps, + bibo_stable, + transform_dependent=transform_dependent, + transform_only=transform_only, + forcing_coef_constraints=forcing_coef_constraints, + ) print("\nInitial model:\n") try: diff --git a/modpods_bayesian.py b/modpods_bayesian.py index 314e337..d694f8a 100644 --- a/modpods_bayesian.py +++ b/modpods_bayesian.py @@ -1,24 +1,21 @@ -import pandas as pd +from typing import Any + +import control as control import numpy as np -import pysindy as ps +import pandas as pd import scipy.stats as stats -from scipy import signal from scipy.optimize import minimize -import matplotlib.pyplot as plt -import control as control -import networkx as nx -import sys + try: - import pyswmm # not a requirement for any other function + import pyswmm # not a requirement for any other function except ImportError: pyswmm = None -import re from sklearn.gaussian_process import GaussianProcessRegressor from sklearn.gaussian_process.kernels import Matern -import warnings # Import original modpods functions -from modpods import * +from modpods import * # noqa: F401, F403 + def expected_improvement(X, X_sample, Y_sample, gpr, xi=0.01): """ @@ -28,17 +25,18 @@ def expected_improvement(X, X_sample, Y_sample, gpr, xi=0.01): mu, sigma = gpr.predict(X, return_std=True) mu = mu.reshape(-1, 1) sigma = sigma.reshape(-1, 1) - + mu_sample_opt = np.max(Y_sample) - - with np.errstate(divide='warn'): + + with np.errstate(divide="warn"): imp = mu - mu_sample_opt - xi Z = imp / sigma ei = imp * stats.norm.cdf(Z) + sigma * stats.norm.pdf(Z) ei[sigma == 0.0] = 0.0 - + return ei + def propose_location(acquisition, X_sample, Y_sample, gpr, bounds, n_restarts=25): """ Proposes the next sampling point by optimizing the acquisition function. @@ -46,30 +44,42 @@ def propose_location(acquisition, X_sample, Y_sample, gpr, bounds, n_restarts=25 dim = X_sample.shape[1] min_val = 1 min_x = None - + def min_obj(X): return -acquisition(X.reshape(-1, dim), X_sample, Y_sample, gpr).flatten() - + for x0 in np.random.uniform(bounds[:, 0], bounds[:, 1], size=(n_restarts, dim)): - res = minimize(min_obj, x0=x0, bounds=bounds, method='L-BFGS-B') + res = minimize(min_obj, x0=x0, bounds=bounds, method="L-BFGS-B") if res.fun < min_val: min_val = res.fun min_x = res.x - + return min_x.reshape(-1, 1) -def delay_io_train_bayesian(system_data, dependent_columns, independent_columns, - windup_timesteps=0, init_transforms=1, max_transforms=4, - max_iter=50, poly_order=3, transform_dependent=False, - verbose=False, extra_verbose=False, include_bias=False, - include_interaction=False, bibo_stable=False, - transform_only=None, forcing_coef_constraints=None, - early_stopping_threshold=0.005): + +def delay_io_train_bayesian( + system_data, + dependent_columns, + independent_columns, + windup_timesteps=0, + init_transforms=1, + max_transforms=4, + max_iter=50, + poly_order=3, + transform_dependent=False, + verbose=False, + extra_verbose=False, + include_bias=False, + include_interaction=False, + bibo_stable=False, + transform_only=None, + forcing_coef_constraints=None, + early_stopping_threshold=0.005, +): """ Bayesian optimization version of delay_io_train function. """ forcing = system_data[independent_columns].copy(deep=True) - orig_forcing_columns = forcing.columns response = system_data[dependent_columns].copy(deep=True) results = dict() @@ -80,29 +90,34 @@ def delay_io_train_bayesian(system_data, dependent_columns, independent_columns, transform_columns = transform_only else: transform_columns = independent_columns - + for num_transforms in range(init_transforms, max_transforms + 1): print(f"num_transforms: {num_transforms}") - + # Define parameter bounds for this number of transforms # Parameters: [shape1, scale1, loc1, shape2, scale2, loc2, ...] - n_params = len(transform_columns) * num_transforms * 3 - bounds = [] + bounds_list: list[list[float]] = [] for transform in range(1, num_transforms + 1): for col in transform_columns: - bounds.append([1.0, 50.0]) # shape_factors bounds - bounds.append([0.1, 5.0]) # scale_factors bounds - bounds.append([0.0, 20.0]) # loc_factors bounds - bounds = np.array(bounds) - + bounds_list.append([1.0, 50.0]) # shape_factors bounds + bounds_list.append([0.1, 5.0]) # scale_factors bounds + bounds_list.append([0.0, 20.0]) # loc_factors bounds + bounds = np.array(bounds_list) + def objective_function(params_vector): """Objective function that takes parameter vector and returns R²""" try: # Convert vector to DataFrames - shape_factors = pd.DataFrame(columns=transform_columns, index=range(1, num_transforms + 1)) - scale_factors = pd.DataFrame(columns=transform_columns, index=range(1, num_transforms + 1)) - loc_factors = pd.DataFrame(columns=transform_columns, index=range(1, num_transforms + 1)) - + shape_factors = pd.DataFrame( + columns=transform_columns, index=range(1, num_transforms + 1) + ) + scale_factors = pd.DataFrame( + columns=transform_columns, index=range(1, num_transforms + 1) + ) + loc_factors = pd.DataFrame( + columns=transform_columns, index=range(1, num_transforms + 1) + ) + idx = 0 for transform in range(1, num_transforms + 1): for col in transform_columns: @@ -110,15 +125,27 @@ def objective_function(params_vector): scale_factors.loc[transform, col] = params_vector[idx + 1] loc_factors.loc[transform, col] = params_vector[idx + 2] idx += 3 - + # Evaluate using SINDY_delays_MI - result = SINDY_delays_MI(shape_factors, scale_factors, loc_factors, - system_data.index, forcing, response, False, - poly_order, include_bias, include_interaction, - windup_timesteps, bibo_stable, transform_dependent, - transform_only, forcing_coef_constraints) - - r2 = result['error_metrics']['r2'] + result = SINDY_delays_MI( # noqa: F405 + shape_factors, + scale_factors, + loc_factors, + system_data.index, + forcing, + response, + False, + poly_order, + include_bias, + include_interaction, + windup_timesteps, + bibo_stable, + transform_dependent, + transform_only, + forcing_coef_constraints, + ) + + r2 = result["error_metrics"]["r2"] if verbose: print(f" R² = {r2:.6f}") return r2 @@ -126,64 +153,79 @@ def objective_function(params_vector): if verbose: print(f" Evaluation failed: {e}") return -1.0 # Poor score for failed evaluations - + # Bayesian optimization n_initial = min(10, max(5, max_iter // 4)) - X_sample = [] - Y_sample = [] - + X_sample_list: list[Any] = [] + Y_sample_list: list[Any] = [] + if verbose: print(f"Starting Bayesian optimization with {n_initial} initial samples...") - + # Generate initial random samples for i in range(n_initial): x = np.random.uniform(bounds[:, 0], bounds[:, 1]) y = objective_function(x) - X_sample.append(x) - Y_sample.append(y) + X_sample_list.append(x) + Y_sample_list.append(y) if verbose: print(f" Initial sample {i+1}/{n_initial}: R² = {y:.6f}") - - X_sample = np.array(X_sample) - Y_sample = np.array(Y_sample).reshape(-1, 1) - + + X_sample: np.ndarray = np.array(X_sample_list) + Y_sample: np.ndarray = np.array(Y_sample_list).reshape(-1, 1) + # Main Bayesian optimization loop best_r2 = np.max(Y_sample) - best_params = X_sample[np.argmax(Y_sample)] - + best_params: np.ndarray = X_sample[np.argmax(Y_sample)] + # Gaussian Process setup kernel = Matern(length_scale=1.0, nu=2.5) - gpr = GaussianProcessRegressor(kernel=kernel, alpha=1e-6, normalize_y=True, - n_restarts_optimizer=5, random_state=42) - + gpr = GaussianProcessRegressor( + kernel=kernel, + alpha=1e-6, + normalize_y=True, + n_restarts_optimizer=5, + random_state=42, + ) + for iteration in range(max_iter - n_initial): # Fit GP and find next point gpr.fit(X_sample, Y_sample.ravel()) - next_x = propose_location(expected_improvement, X_sample, Y_sample, gpr, bounds) + next_x = propose_location( + expected_improvement, X_sample, Y_sample, gpr, bounds + ) next_x = next_x.flatten() - + # Evaluate objective next_y = objective_function(next_x) - + if verbose: - print(f" BO iteration {iteration+1}/{max_iter-n_initial}: R² = {next_y:.6f}") - + print( + f" BO iteration {iteration+1}/{max_iter-n_initial}: R² = {next_y:.6f}" + ) + # Update samples X_sample = np.append(X_sample, [next_x], axis=0) Y_sample = np.append(Y_sample, next_y) - + # Update best if next_y > best_r2: best_r2 = next_y best_params = next_x if verbose: print(f" New best R² = {best_r2:.6f}") - + # Convert best parameters back to DataFrames - shape_factors = pd.DataFrame(columns=transform_columns, index=range(1, num_transforms + 1)) - scale_factors = pd.DataFrame(columns=transform_columns, index=range(1, num_transforms + 1)) - loc_factors = pd.DataFrame(columns=transform_columns, index=range(1, num_transforms + 1)) - + shape_factors = pd.DataFrame( + columns=transform_columns, index=range(1, num_transforms + 1) + ) + scale_factors = pd.DataFrame( + columns=transform_columns, index=range(1, num_transforms + 1) + ) + loc_factors = pd.DataFrame( + columns=transform_columns, index=range(1, num_transforms + 1) + ) + idx = 0 for transform in range(1, num_transforms + 1): for col in transform_columns: @@ -191,17 +233,29 @@ def objective_function(params_vector): scale_factors.loc[transform, col] = best_params[idx + 1] loc_factors.loc[transform, col] = best_params[idx + 2] idx += 3 - + # Final evaluation - final_model = SINDY_delays_MI(shape_factors, scale_factors, loc_factors, - system_data.index, forcing, response, True, - poly_order, include_bias, include_interaction, - windup_timesteps, bibo_stable, transform_dependent, - transform_only, forcing_coef_constraints) - + final_model = SINDY_delays_MI( # noqa: F405 + shape_factors, + scale_factors, + loc_factors, + system_data.index, + forcing, + response, + True, + poly_order, + include_bias, + include_interaction, + windup_timesteps, + bibo_stable, + transform_dependent, + transform_only, + forcing_coef_constraints, + ) + print(f"\nFinal model for {num_transforms} transforms:") try: - print(final_model['model'].print(precision=5)) + print(final_model["model"].print(precision=5)) except Exception as e: print(e) print(f"R² = {final_model['error_metrics']['r2']:.6f}") @@ -212,23 +266,28 @@ def objective_function(params_vector): print("Location factors:") print(loc_factors) print() - + # Store results results[num_transforms] = { - 'final_model': final_model.copy(), - 'shape_factors': shape_factors.copy(deep=True), - 'scale_factors': scale_factors.copy(deep=True), - 'loc_factors': loc_factors.copy(deep=True), - 'windup_timesteps': windup_timesteps, - 'dependent_columns': dependent_columns, - 'independent_columns': independent_columns + "final_model": final_model.copy(), + "shape_factors": shape_factors.copy(deep=True), + "scale_factors": scale_factors.copy(deep=True), + "loc_factors": loc_factors.copy(deep=True), + "windup_timesteps": windup_timesteps, + "dependent_columns": dependent_columns, + "independent_columns": independent_columns, } - + # Early stopping check - if (num_transforms > init_transforms and - results[num_transforms]['final_model']['error_metrics']['r2'] - - results[num_transforms-1]['final_model']['error_metrics']['r2'] < early_stopping_threshold): - print(f"Last transformation added less than {early_stopping_threshold*100}% to R² score. Terminating early.") + if ( + num_transforms > init_transforms + and results[num_transforms]["final_model"]["error_metrics"]["r2"] + - results[num_transforms - 1]["final_model"]["error_metrics"]["r2"] + < early_stopping_threshold + ): + print( + f"Last transformation added less than {early_stopping_threshold*100}% to R² score. Terminating early." + ) break - - return results \ No newline at end of file + + return results diff --git a/pyproject.toml b/pyproject.toml index 4f557b9..7471176 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,10 +1,19 @@ [tool.black] line-length = 88 target-version = ["py310", "py311", "py312"] +exclude = "modpods_backup\\.py" [tool.ruff] line-length = 88 target-version = "py310" +exclude = [ + "modpods_backup.py", + "*.TMP", + "*.h11~", + "*.qeb~", + "*.wa0~", + ".vs", +] [tool.ruff.lint] select = ["E", "F", "W", "I"] @@ -15,6 +24,10 @@ ignore_missing_imports = true no_strict_optional = true warn_return_any = true check_untyped_defs = true +explicit_package_bases = true +exclude = [ + "modpods_backup\\.py", +] [tool.pytest.ini_options] testpaths = ["tests"] diff --git a/test_bayesian.py b/test_bayesian.py index bd6ea33..9cd4b95 100644 --- a/test_bayesian.py +++ b/test_bayesian.py @@ -1,6 +1,6 @@ import numpy as np import pandas as pd -import matplotlib.pyplot as plt + import modpods import modpods_bayesian @@ -14,13 +14,14 @@ # Simple system: output depends on delayed and transformed input input_signal = np.random.randn(n_samples) * 0.5 + np.sin(t * 0.1) delayed_input = np.concatenate([np.zeros(5), input_signal[:-5]]) # 5-step delay -output_signal = 0.7 * delayed_input + 0.3 * np.roll(delayed_input, 3) + 0.1 * np.random.randn(n_samples) +output_signal = ( + 0.7 * delayed_input + + 0.3 * np.roll(delayed_input, 3) + + 0.1 * np.random.randn(n_samples) +) # Create DataFrame -test_data = pd.DataFrame({ - 'input': input_signal, - 'output': output_signal -}) +test_data = pd.DataFrame({"input": input_signal, "output": output_signal}) # Test with minimal parameters print("Testing Bayesian optimization with minimal example...") @@ -28,31 +29,51 @@ # Test compass search first (original function) print("\n=== Testing Original Compass Search ===") model_compass = modpods.delay_io_train( - test_data, ['output'], ['input'], - windup_timesteps=10, init_transforms=1, max_transforms=1, - max_iter=5, verbose=True, poly_order=1 + test_data, + ["output"], + ["input"], + windup_timesteps=10, + init_transforms=1, + max_transforms=1, + max_iter=5, + verbose=True, + poly_order=1, ) print("Compass search completed successfully!") print(f"R² = {model_compass[1]['final_model']['error_metrics']['r2']:.6f}") - - # Test Bayesian optimization + + # Test Bayesian optimization print("\n=== Testing Bayesian Optimization ===") model_bayesian = modpods_bayesian.delay_io_train_bayesian( - test_data, ['output'], ['input'], - windup_timesteps=10, init_transforms=1, max_transforms=1, - max_iter=15, verbose=True, poly_order=1 + test_data, + ["output"], + ["input"], + windup_timesteps=10, + init_transforms=1, + max_transforms=1, + max_iter=15, + verbose=True, + poly_order=1, ) print("Bayesian optimization completed successfully!") print(f"R² = {model_bayesian[1]['final_model']['error_metrics']['r2']:.6f}") - + print("\n=== Comparison ===") - print(f"Compass search R²: {model_compass[1]['final_model']['error_metrics']['r2']:.6f}") - print(f"Bayesian opt R²: {model_bayesian[1]['final_model']['error_metrics']['r2']:.6f}") - - improvement = model_bayesian[1]['final_model']['error_metrics']['r2'] - model_compass[1]['final_model']['error_metrics']['r2'] + print( + f"Compass search R²: {model_compass[1]['final_model']['error_metrics']['r2']:.6f}" + ) + print( + f"Bayesian opt R²: {model_bayesian[1]['final_model']['error_metrics']['r2']:.6f}" + ) + + improvement = ( + model_bayesian[1]["final_model"]["error_metrics"]["r2"] + - model_compass[1]["final_model"]["error_metrics"]["r2"] + ) print(f"Improvement: {improvement:.6f}") - + except Exception as e: print(f"Error: {e}") import traceback - traceback.print_exc() \ No newline at end of file + + traceback.print_exc() diff --git a/test_camels.py b/test_camels.py index 3d4f2b2..42c04f2 100644 --- a/test_camels.py +++ b/test_camels.py @@ -1,6 +1,5 @@ -import numpy as np import pandas as pd -import matplotlib.pyplot as plt + import modpods # Test with the original CAMELS dataset @@ -8,14 +7,16 @@ # Load the original dataset filepath = "./03439000_05_model_output.txt" -df = pd.read_csv(filepath, sep=r'\s+') +df = pd.read_csv(filepath, sep=r"\s+") print("Data loaded successfully!") print(f"Dataset shape: {df.shape}") # Prepare data as in original test -df.rename({'YR':'year','MNTH':'month','DY':'day','HR':'hour'},axis=1,inplace=True) -df['datetime'] = pd.to_datetime(df[['year','month','day','hour']]) -df.set_index('datetime',inplace=True) +df.rename( + {"YR": "year", "MNTH": "month", "DY": "day", "HR": "hour"}, axis=1, inplace=True +) +df["datetime"] = pd.to_datetime(df[["year", "month", "day", "hour"]]) +df.set_index("datetime", inplace=True) # Shift forcing to make system causal df.RAIM = df.RAIM.shift(-1) @@ -24,11 +25,11 @@ # Use subset for testing windup_timesteps = 30 years = 1 -df_train = df.iloc[:365*years + windup_timesteps,:] +df_train = df.iloc[: 365 * years + windup_timesteps, :] # Test both methods on real data -forcing_coef_constraints = {'RAIM':-1, 'PET':1,'PRCP':-1} -df_train = df_train[['OBS_RUN','RAIM','PET','PRCP']] +forcing_coef_constraints = {"RAIM": -1, "PET": 1, "PRCP": -1} +df_train = df_train[["OBS_RUN", "RAIM", "PET", "PRCP"]] print(f"\nTraining data shape: {df_train.shape}") print("Training both optimization methods...") @@ -37,58 +38,71 @@ # Compass search print("\n=== Compass Search on CAMELS Data ===") model_compass = modpods.delay_io_train( - df_train, ['OBS_RUN'], ['RAIM','PET','PRCP'], + df_train, + ["OBS_RUN"], + ["RAIM", "PET", "PRCP"], windup_timesteps=windup_timesteps, - init_transforms=1, max_transforms=1, max_iter=20, - verbose=False, forcing_coef_constraints=forcing_coef_constraints, - poly_order=1, bibo_stable=False, - optimization_method="compass_search" + init_transforms=1, + max_transforms=1, + max_iter=20, + verbose=False, + forcing_coef_constraints=forcing_coef_constraints, + poly_order=1, + bibo_stable=False, + optimization_method="compass_search", ) - compass_r2 = model_compass[1]['final_model']['error_metrics']['r2'] + compass_r2 = model_compass[1]["final_model"]["error_metrics"]["r2"] print(f"Compass search R² = {compass_r2:.6f}") - + # Bayesian optimization print("\n=== Bayesian Optimization on CAMELS Data ===") model_bayesian = modpods.delay_io_train( - df_train, ['OBS_RUN'], ['RAIM','PET','PRCP'], + df_train, + ["OBS_RUN"], + ["RAIM", "PET", "PRCP"], windup_timesteps=windup_timesteps, - init_transforms=1, max_transforms=1, max_iter=25, - verbose=False, forcing_coef_constraints=forcing_coef_constraints, - poly_order=1, bibo_stable=False, - optimization_method="bayesian" + init_transforms=1, + max_transforms=1, + max_iter=25, + verbose=False, + forcing_coef_constraints=forcing_coef_constraints, + poly_order=1, + bibo_stable=False, + optimization_method="bayesian", ) - bayesian_r2 = model_bayesian[1]['final_model']['error_metrics']['r2'] + bayesian_r2 = model_bayesian[1]["final_model"]["error_metrics"]["r2"] print(f"Bayesian optimization R² = {bayesian_r2:.6f}") - + # Results improvement = bayesian_r2 - compass_r2 pct_improvement = (improvement / compass_r2) * 100 if compass_r2 > 0 else 0 - - print(f"\n=== CAMELS Dataset Results ===") + + print("\n=== CAMELS Dataset Results ===") print(f"Compass search R²: {compass_r2:.6f}") print(f"Bayesian opt R²: {bayesian_r2:.6f}") print(f"Absolute improvement: {improvement:.6f}") print(f"Percent improvement: {pct_improvement:.1f}%") - + if improvement > 0: print("✓ Bayesian optimization found a better solution!") else: print("→ Compass search performed better on this dataset") - + print("\n=== Parameter Comparison ===") print("Compass search factors:") print(f" Shape: {model_compass[1]['shape_factors'].iloc[0,0]:.3f}") print(f" Scale: {model_compass[1]['scale_factors'].iloc[0,0]:.3f}") print(f" Location: {model_compass[1]['loc_factors'].iloc[0,0]:.3f}") - + print("Bayesian optimization factors:") print(f" Shape: {model_bayesian[1]['shape_factors'].iloc[0,0]:.3f}") print(f" Scale: {model_bayesian[1]['scale_factors'].iloc[0,0]:.3f}") print(f" Location: {model_bayesian[1]['loc_factors'].iloc[0,0]:.3f}") - + print("\n=== SUCCESS: Both methods completed successfully! ===") - + except Exception as e: print(f"Error: {e}") import traceback - traceback.print_exc() \ No newline at end of file + + traceback.print_exc() diff --git a/test_fixed.py b/test_fixed.py index dee5867..2415cc5 100644 --- a/test_fixed.py +++ b/test_fixed.py @@ -1,8 +1,6 @@ -import numpy as np -import pandas as pd -import scipy.stats as stats -import os import matplotlib.pyplot as plt +import pandas as pd + import modpods # basic funcionality tests and a bit of a tutorial @@ -13,67 +11,91 @@ filepath = "./03439000_05_model_output.txt" -df = pd.read_csv(filepath, sep='\s+') +df = pd.read_csv(filepath, sep=r"\s+") print(df) print(df.columns) # combine the columns YR, MNTH, DY, and YR into a single datetime column -df.rename({'YR':'year','MNTH':'month','DY':'day','HR':'hour'},axis=1,inplace=True) -df['datetime'] = pd.to_datetime(df[['year','month','day','hour']]) +df.rename( + {"YR": "year", "MNTH": "month", "DY": "day", "HR": "hour"}, axis=1, inplace=True +) +df["datetime"] = pd.to_datetime(df[["year", "month", "day", "hour"]]) # set the index to the datetime column -df.set_index('datetime',inplace=True) +df.set_index("datetime", inplace=True) # shift the forcing back one timestep (one day) to make the system causal -print(df[['OBS_RUN','RAIM']]) +print(df[["OBS_RUN", "RAIM"]]) df.RAIM = df.RAIM.shift(-1) df.dropna(inplace=True) -print(df[['OBS_RUN','RAIM']]) +print(df[["OBS_RUN", "RAIM"]]) # for better results (and slower run) up the max iterations, model complexity (poly_order and max_transforms), and the number of years used to train - # drop all columns except for RAIM (surface water input) and OBS_RUN (observed runoff) for actual CAMELS training # but for testing the MIMO delay_io_model I want multiple inputs and multiple outputs -windup_timesteps = 30 # days of windup +windup_timesteps = 30 # days of windup years = 1 -df_train = df.iloc[:365*years + windup_timesteps,:] # total data used, actually trained on this less the windup period -df_eval = df.iloc[-(365*years + windup_timesteps):,:] # data for evaluation, not used in training - -#df.plot(y=['OBS_RUN','RAIM']) -#plt.show() +df_train = df.iloc[ + : 365 * years + windup_timesteps, : +] # total data used, actually trained on this less the windup period +df_eval = df.iloc[ + -(365 * years + windup_timesteps) :, : +] # data for evaluation, not used in training +# df.plot(y=['OBS_RUN','RAIM']) +# plt.show() -#df['ones'] = np.ones(len(df.OBS_RUN)) # to make sure MIMO error metrics are working correctly +# df['ones'] = np.ones(len(df.OBS_RUN)) # to make sure MIMO error metrics are working correctly print(df_train) -forcing_coef_constraints = {'RAIM':-1, 'PET':1,'PRCP':-1} -df_train = df_train[['OBS_RUN','RAIM','PET','PRCP']] -rainfall_runoff_model = modpods.delay_io_train(df_train, ['OBS_RUN'],['RAIM','PET','PRCP'],windup_timesteps=windup_timesteps, - init_transforms=1, max_transforms=1,max_iter=10, verbose=True, forcing_coef_constraints= forcing_coef_constraints, - poly_order=1, bibo_stable=False) +forcing_coef_constraints = {"RAIM": -1, "PET": 1, "PRCP": -1} +df_train = df_train[["OBS_RUN", "RAIM", "PET", "PRCP"]] +rainfall_runoff_model = modpods.delay_io_train( + df_train, + ["OBS_RUN"], + ["RAIM", "PET", "PRCP"], + windup_timesteps=windup_timesteps, + init_transforms=1, + max_transforms=1, + max_iter=10, + verbose=True, + forcing_coef_constraints=forcing_coef_constraints, + poly_order=1, + bibo_stable=False, +) print(rainfall_runoff_model) print(rainfall_runoff_model[1]) print("error metrics") -print(rainfall_runoff_model[1]['final_model']['error_metrics']) -#print(rainfall_runoff_model[2]['final_model']['error_metrics']) -#print(rainfall_runoff_model[3]['final_model']['error_metrics']) +print(rainfall_runoff_model[1]["final_model"]["error_metrics"]) +# print(rainfall_runoff_model[2]['final_model']['error_metrics']) +# print(rainfall_runoff_model[3]['final_model']['error_metrics']) print("shapes") -print(rainfall_runoff_model[1]['shape_factors']) -#print(rainfall_runoff_model[2]['shape_factors']) -#print(rainfall_runoff_model[3]['shape_factors']) +print(rainfall_runoff_model[1]["shape_factors"]) +# print(rainfall_runoff_model[2]['shape_factors']) +# print(rainfall_runoff_model[3]['shape_factors']) # plot the results -fig, ax = plt.subplots(1,1,figsize=(8,4)) -ax.plot(df_train.index[windup_timesteps+1:],rainfall_runoff_model[1]['final_model']['response']['OBS_RUN'][windup_timesteps+1:],label='observed') -ax.plot(df_train.index[windup_timesteps+1:],rainfall_runoff_model[1]['final_model']['simulated'][:,0],label='simulated') -#ax.set_title('1 transformation') +fig, ax = plt.subplots(1, 1, figsize=(8, 4)) +ax.plot( + df_train.index[windup_timesteps + 1 :], + rainfall_runoff_model[1]["final_model"]["response"]["OBS_RUN"][ + windup_timesteps + 1 : + ], + label="observed", +) +ax.plot( + df_train.index[windup_timesteps + 1 :], + rainfall_runoff_model[1]["final_model"]["simulated"][:, 0], + label="simulated", +) +# ax.set_title('1 transformation') ax.legend() plt.title("training") -''' +""" ax[1].plot(df.index[windup_timesteps+1:],rainfall_runoff_model[2]['final_model']['response']['OBS_RUN'][windup_timesteps+1:],label='observed') ax[1].plot(df.index[windup_timesteps+1:],rainfall_runoff_model[2]['final_model']['simulated'][:,0],label='simulated') ax[1].set_title('2 transformations') @@ -82,23 +104,25 @@ ax[2].plot(df.index[windup_timesteps+1:],rainfall_runoff_model[3]['final_model']['simulated'][:,0],label='simulated') ax[2].set_title('3 transformations') ax[2].legend() -''' +""" plt.show() -plt.close('all') - +plt.close("all") # now test prediction / evaluation -eval_sim = modpods.delay_io_predict(rainfall_runoff_model, df_eval, 1,evaluation=True) +eval_sim = modpods.delay_io_predict(rainfall_runoff_model, df_eval, 1, evaluation=True) print("error metrics") -print(eval_sim['error_metrics']) -fig, ax = plt.subplots(1,1,figsize=(8,4)) -ax.plot(df_eval.index[windup_timesteps+1:],df_eval['OBS_RUN'][windup_timesteps+1:],label='observed') -ax.plot(df_eval.index[windup_timesteps+1:],eval_sim['prediction'],label='simulated') -#ax.set_title('1 transformation') +print(eval_sim["error_metrics"]) +fig, ax = plt.subplots(1, 1, figsize=(8, 4)) +ax.plot( + df_eval.index[windup_timesteps + 1 :], + df_eval["OBS_RUN"][windup_timesteps + 1 :], + label="observed", +) +ax.plot( + df_eval.index[windup_timesteps + 1 :], eval_sim["prediction"], label="simulated" +) +# ax.set_title('1 transformation') ax.legend() plt.title("evaluation") plt.show() - - - diff --git a/test_integrated.py b/test_integrated.py index a216329..a08fd97 100644 --- a/test_integrated.py +++ b/test_integrated.py @@ -1,6 +1,6 @@ import numpy as np import pandas as pd -import matplotlib.pyplot as plt + import modpods # Create a simple test case @@ -13,13 +13,14 @@ # Simple system: output depends on delayed and transformed input input_signal = np.random.randn(n_samples) * 0.5 + np.sin(t * 0.1) delayed_input = np.concatenate([np.zeros(5), input_signal[:-5]]) # 5-step delay -output_signal = 0.7 * delayed_input + 0.3 * np.roll(delayed_input, 3) + 0.1 * np.random.randn(n_samples) +output_signal = ( + 0.7 * delayed_input + + 0.3 * np.roll(delayed_input, 3) + + 0.1 * np.random.randn(n_samples) +) # Create DataFrame -test_data = pd.DataFrame({ - 'input': input_signal, - 'output': output_signal -}) +test_data = pd.DataFrame({"input": input_signal, "output": output_signal}) # Test integrated Bayesian optimization print("Testing integrated Bayesian optimization in delay_io_train...") @@ -27,35 +28,55 @@ # Test compass search first (default) print("\n=== Testing Compass Search ===") model_compass = modpods.delay_io_train( - test_data, ['output'], ['input'], - windup_timesteps=10, init_transforms=1, max_transforms=1, - max_iter=5, verbose=True, poly_order=1, - optimization_method="compass_search" + test_data, + ["output"], + ["input"], + windup_timesteps=10, + init_transforms=1, + max_transforms=1, + max_iter=5, + verbose=True, + poly_order=1, + optimization_method="compass_search", ) print("Compass search completed successfully!") print(f"R² = {model_compass[1]['final_model']['error_metrics']['r2']:.6f}") - + # Test integrated Bayesian optimization print("\n=== Testing Integrated Bayesian Optimization ===") model_bayesian = modpods.delay_io_train( - test_data, ['output'], ['input'], - windup_timesteps=10, init_transforms=1, max_transforms=1, - max_iter=15, verbose=True, poly_order=1, - optimization_method="bayesian" + test_data, + ["output"], + ["input"], + windup_timesteps=10, + init_transforms=1, + max_transforms=1, + max_iter=15, + verbose=True, + poly_order=1, + optimization_method="bayesian", ) print("Bayesian optimization completed successfully!") print(f"R² = {model_bayesian[1]['final_model']['error_metrics']['r2']:.6f}") - + print("\n=== Comparison ===") - print(f"Compass search R²: {model_compass[1]['final_model']['error_metrics']['r2']:.6f}") - print(f"Bayesian opt R²: {model_bayesian[1]['final_model']['error_metrics']['r2']:.6f}") - - improvement = model_bayesian[1]['final_model']['error_metrics']['r2'] - model_compass[1]['final_model']['error_metrics']['r2'] + print( + f"Compass search R²: {model_compass[1]['final_model']['error_metrics']['r2']:.6f}" + ) + print( + f"Bayesian opt R²: {model_bayesian[1]['final_model']['error_metrics']['r2']:.6f}" + ) + + improvement = ( + model_bayesian[1]["final_model"]["error_metrics"]["r2"] + - model_compass[1]["final_model"]["error_metrics"]["r2"] + ) print(f"Improvement: {improvement:.6f}") - + print("\n=== SUCCESS: Bayesian optimization integrated successfully! ===") - + except Exception as e: print(f"Error: {e}") import traceback - traceback.print_exc() \ No newline at end of file + + traceback.print_exc() From 84ebc1ffb344ae49048307c9cc7ae4440754c739 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 1 Mar 2026 13:39:18 +0000 Subject: [PATCH 3/3] Add optimization method comparison tests; remove temp files from git tracking; fix gitignore Co-authored-by: dantzert <47285626+dantzert@users.noreply.github.com> --- .vs/ProjectSettings.json | 3 - .vs/VSWorkspaceState.json | 7 - ...021492eb-36bb-40ae-82c0-d2b946f1f986.vsidx | Bin 190349 -> 0 bytes ...1115c48f-8b44-44b5-9c76-cd02e1ad0d3c.vsidx | Bin 73510 -> 0 bytes ...3538d893-0576-4bfa-8963-dbb4d747b7b3.vsidx | Bin 11423 -> 0 bytes ...4726c3f9-a22a-4893-80c6-d12979a64b18.vsidx | Bin 442 -> 0 bytes ...aec5ee9b-f924-4b68-8ac3-bc9f9583b29c.vsidx | Bin 15212 -> 0 bytes .vs/modpods/v17/.wsuo | Bin 52224 -> 0 bytes .vs/slnx.sqlite | Bin 131072 -> 0 bytes 1gktfkct.h11~ | 412 ---------------- 5wkkup1r.qeb~ | 0 __pycache__/__init__.cpython-38.pyc | Bin 141 -> 0 bytes __pycache__/__init__.cpython-39.pyc | Bin 137 -> 0 bytes __pycache__/modpods.cpython-312.pyc | Bin 124035 -> 0 bytes __pycache__/modpods.cpython-38.pyc | Bin 38415 -> 0 bytes __pycache__/modpods.cpython-39.pyc | Bin 38170 -> 0 bytes .../modpods.cpython-39.pyc.1669562004624 | 0 .../modpods.cpython-39.pyc.1915384797088 | 0 .../modpods.cpython-39.pyc.2433066808016 | 0 __pycache__/modpods_bayesian.cpython-312.pyc | Bin 10457 -> 0 bytes afuitcsp.wa0~ | 0 modpods.pyw~RFa860ffd2.TMP | 0 test_lti_control_of_swmm.py~RFb6efb78e.TMP | 0 test_lti_control_of_swmm.py~RFdf17d1.TMP | 445 ------------------ tests/test_modpods.py | 121 +++++ 25 files changed, 121 insertions(+), 867 deletions(-) delete mode 100644 .vs/ProjectSettings.json delete mode 100644 .vs/VSWorkspaceState.json delete mode 100644 .vs/modpods/FileContentIndex/021492eb-36bb-40ae-82c0-d2b946f1f986.vsidx delete mode 100644 .vs/modpods/FileContentIndex/1115c48f-8b44-44b5-9c76-cd02e1ad0d3c.vsidx delete mode 100644 .vs/modpods/FileContentIndex/3538d893-0576-4bfa-8963-dbb4d747b7b3.vsidx delete mode 100644 .vs/modpods/FileContentIndex/4726c3f9-a22a-4893-80c6-d12979a64b18.vsidx delete mode 100644 .vs/modpods/FileContentIndex/aec5ee9b-f924-4b68-8ac3-bc9f9583b29c.vsidx delete mode 100644 .vs/modpods/v17/.wsuo delete mode 100644 .vs/slnx.sqlite delete mode 100644 1gktfkct.h11~ delete mode 100644 5wkkup1r.qeb~ delete mode 100644 __pycache__/__init__.cpython-38.pyc delete mode 100644 __pycache__/__init__.cpython-39.pyc delete mode 100644 __pycache__/modpods.cpython-312.pyc delete mode 100644 __pycache__/modpods.cpython-38.pyc delete mode 100644 __pycache__/modpods.cpython-39.pyc delete mode 100644 __pycache__/modpods.cpython-39.pyc.1669562004624 delete mode 100644 __pycache__/modpods.cpython-39.pyc.1915384797088 delete mode 100644 __pycache__/modpods.cpython-39.pyc.2433066808016 delete mode 100644 __pycache__/modpods_bayesian.cpython-312.pyc delete mode 100644 afuitcsp.wa0~ delete mode 100644 modpods.pyw~RFa860ffd2.TMP delete mode 100644 test_lti_control_of_swmm.py~RFb6efb78e.TMP delete mode 100644 test_lti_control_of_swmm.py~RFdf17d1.TMP diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json deleted file mode 100644 index f8b4888..0000000 --- a/.vs/ProjectSettings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "CurrentProjectSetting": null -} \ No newline at end of file diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json deleted file mode 100644 index 553b4d3..0000000 --- a/.vs/VSWorkspaceState.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "ExpandedNodes": [ - "" - ], - "SelectedNode": "\\test.py", - "PreviewInSolutionExplorer": false -} \ No newline at end of file diff --git a/.vs/modpods/FileContentIndex/021492eb-36bb-40ae-82c0-d2b946f1f986.vsidx b/.vs/modpods/FileContentIndex/021492eb-36bb-40ae-82c0-d2b946f1f986.vsidx deleted file mode 100644 index ebe044f0223b343e3132f48226fe83b6ec553c5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190349 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

;?02#oslB#iui#(d7# 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 diff --git a/.vs/modpods/FileContentIndex/1115c48f-8b44-44b5-9c76-cd02e1ad0d3c.vsidx b/.vs/modpods/FileContentIndex/1115c48f-8b44-44b5-9c76-cd02e1ad0d3c.vsidx deleted file mode 100644 index bb82930f51b05b7e380c3ac7d161aabc617ebd39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73510 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 diff --git a/.vs/modpods/FileContentIndex/3538d893-0576-4bfa-8963-dbb4d747b7b3.vsidx b/.vs/modpods/FileContentIndex/3538d893-0576-4bfa-8963-dbb4d747b7b3.vsidx deleted file mode 100644 index 46f1f469b2ac219b09dc901c2d4daa548c035e04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11423 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 diff --git a/.vs/modpods/FileContentIndex/aec5ee9b-f924-4b68-8ac3-bc9f9583b29c.vsidx b/.vs/modpods/FileContentIndex/aec5ee9b-f924-4b68-8ac3-bc9f9583b29c.vsidx deleted file mode 100644 index d4d19b63649c31c0a0f6ad6e32f4afb53b1e92d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15212 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 diff --git a/.vs/modpods/v17/.wsuo b/.vs/modpods/v17/.wsuo deleted file mode 100644 index bcde4e89e91d20d0c83e15505b4be1b36d9a0e08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52224 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 diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite deleted file mode 100644 index aa312954d2a1625f383839ef8cce67bd849aa841..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131072 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 F{{aL)G&%qP diff --git a/1gktfkct.h11~ b/1gktfkct.h11~ deleted file mode 100644 index 9db1a73..0000000 --- a/1gktfkct.h11~ +++ /dev/null @@ -1,412 +0,0 @@ -# reference: https://colab.research.google.com/github/kLabUM/pystorms/blob/master/tutorials/Scenario_Gamma.ipynb - -import sys -#from modpods import topo_from_pystorms -#sys.path.append("G:/My Drive/modpods") -import modpods -import pystorms -import numpy as np -import matplotlib.pyplot as plt -import pandas as pd -import control as ct -import dill as pickle -use_blind = False - -''' -# uncontrolled -env = pystorms.scenarios.gamma() -done = False - -while not done: - # Query the current state of the simulation - state = env.state() - - # Initialize actions to have each asset open - actions = np.ones(11) - - # Set the actions and progress the simulation - done = env.step(actions) - -# Calculate the performance measure for the uncontrolled simulation -uncontrolled_perf = sum(env.data_log["performance_measure"]) - -print("The calculated performance for the uncontrolled case of Scenario gamma is:") -print("{}.".format(uncontrolled_perf)) - -basin_max_depths = [5., 10., 10., 10.] - -plt.figure(figsize=(15,6)) -plt.subplot(1,2,1) -plt.plot(np.asarray(env.data_log['depthN']['1'])/basin_max_depths[0], label='Basin 1') -plt.plot(np.asarray(env.data_log['depthN']['2'])/basin_max_depths[1], label='Basin 2') -plt.plot(np.asarray(env.data_log['depthN']['3'])/basin_max_depths[2], label='Basin 3') -plt.plot(np.asarray(env.data_log['depthN']['4'])/basin_max_depths[3], label='Basin 4') -plt.xlabel('Simulation Timestep') -plt.ylabel('Filling Degree') -plt.legend() - -plt.subplot(1,2,2) -plt.plot(env.data_log['flow']['O1'], label='Basin 1') -plt.plot(env.data_log['flow']['O2'], label='Basin 2') -plt.plot(env.data_log['flow']['O3'], label='Basin 3') -plt.plot(env.data_log['flow']['O4'], label='Basin 4') -plt.xlabel('Simulation Timestep') -plt.ylabel('Basin Outflow (cfs)') -plt.legend() -plt.show() - -uncontrolled_data = env.data_log -''' -def controller_efd(state, max_depths): - # Initialize the action space so that we can compute the new settings - new_settings = np.ones(len(state)) - # Set equal filling degree parameters - c = 1.5 - theta = 0.25 - - # Assign the current depth in each basin - depths = state - - # Compute the filling degrees - fd = depths/max_depths - # Compute the average filling degree across each controlled basin - fd_average = sum(fd)/len(fd) - - # Update each valve setting based on the relative fullness of each basin - for i in range(0,len(fd)): - - # If a basin is very full compared to the average, we should open its - # valve to release some water - if fd[i] > fd_average: - new_settings[i] = c*(fd[i]-fd_average) - - # If a basin's filling degree is close to the average (within some value - # theta), its setting can be close to that average - elif fd_average-fd[i] <= theta: - new_settings[i] = fd_average - - # If a basin is very empty compared to the average, we can close its - # valve to store more water at that location, prioritizing releasing at - # the other locations - else: - new_settings[i] = 0. - - # Make sure the settings are in bounds [0,1] - new_settings[i] = min(new_settings[i], 1.) - new_settings[i] = max(new_settings[i], 0.) - - return new_settings - - - -env = pystorms.scenarios.gamma() -done = False - -# Specify the maximum depths for each basin we are controlling -basin_max_depths = [5., 10., 10., 10.] - -while not done: - # Query the current state of the simulation - state = env.state() - # Isolate only the states that we need (the 4 downstream basin depths) - states_relevant = state[0:4] - - # Pass the current, relevant states and the maximum basin - # depths into our equal filling degree logic - actions_efd = controller_efd(states_relevant, basin_max_depths) - # Specify that the other 7 valves in the network should be - # open since we are not controlling them here - actions_uncontrolled = np.ones(7) - # Join the two above action arrays - actions = np.concatenate((actions_efd, actions_uncontrolled), axis=0) - - # Set the actions and progress the simulation - done = env.step(actions) - -# Calculate the performance measure for the uncontrolled simulation -equalfilling_perf = sum(env.data_log["performance_measure"]) - -print("The calculated performance for the equal filling degree case of Scenario gamma is:") -print("{}.".format(equalfilling_perf)) -''' -plt.figure(figsize=(15,6)) -plt.subplot(1,2,1) -plt.plot(np.asarray(env.data_log['depthN']['1'])/basin_max_depths[0], label='Basin 1') -plt.plot(np.asarray(env.data_log['depthN']['2'])/basin_max_depths[1], label='Basin 2') -plt.plot(np.asarray(env.data_log['depthN']['3'])/basin_max_depths[2], label='Basin 3') -plt.plot(np.asarray(env.data_log['depthN']['4'])/basin_max_depths[3], label='Basin 4') -plt.xlabel('Simulation Timestep') -plt.ylabel('Filling Degree') -plt.legend() - -plt.subplot(1,2,2) -plt.plot(env.data_log['flow']['O1'], label='Basin 1') -plt.plot(env.data_log['flow']['O2'], label='Basin 2') -plt.plot(env.data_log['flow']['O3'], label='Basin 3') -plt.plot(env.data_log['flow']['O4'], label='Basin 4') -plt.xlabel('Simulation Timestep') -plt.ylabel('Basin Outflow (cfs)') -plt.legend() -''' -ef_data = env.data_log - -# get the responses into one dataframe with zero pads in between -#uncontrolled_flows = pd.DataFrame.from_dict(uncontrolled_data['flow']) -#uncontrolled_depthN = pd.DataFrame.from_dict(uncontrolled_data['depthN']) -#uncontrolled_response = pd.concat([uncontrolled_flows, uncontrolled_depthN], axis=1) -#print(uncontrolled_response) -ef_flows = pd.DataFrame.from_dict(ef_data['flow']) -ef_flows.columns = env.config['action_space'] -ef_depthN = pd.DataFrame.from_dict(ef_data['depthN']) -ef_depthN.columns = env.config['states'] -ef_response = pd.concat([ef_flows, ef_depthN], axis=1) -ef_response.index = env.data_log['simulation_time'] -print(ef_response) -# for the columns of ef_response which do not contain the string "O" (i.e. the depths) -# if the current column name is "X", make it "(X, depthN)" -# this is because the modpods library expects the depths to be named "X, depthN" -# where X is the name of the corresponding flow -for col in ef_response.columns: - if "O" in col: # the orifices - # if there's a number in that column name that's greater than 4, drop this column - # this is because we're only controlling the first 4 orifices and these measurements are redundant to the storage node depths if the orifices are always open - if int(col[1:]) > 4: - ef_response.drop(columns=col, inplace=True) - - ef_response.rename(columns={col: (col, "flow")}, inplace=True) - - - -print(ef_response) - - - -# for debugging resample to a coarser time step (native resolution is about one minute but not consistent) -# need a consistent time step for modpods -ef_response = ef_response.resample('5T',axis='index').mean().copy(deep=True) -print(ef_response) -# we'll only use the ef response to infer the topology and dynamics -# for this experiment assume all of flow O1-O11 and depth 1-11 are observable -# but only O1-O4 are controllable -independent_columns = ef_response.columns[0:4] # orifices O1 through O4 -dependent_columns = ef_response.drop(columns=independent_columns).columns - - -# learn the topology from the data -# this will be the "blind" plant model -if use_blind: # don't have this on all the time because it's very expensive - blind_topo = modpods.infer_causative_topology(ef_response, dependent_columns = dependent_columns, - independent_columns = independent_columns, verbose=True) - - print(blind_topo.causative_topo) - print(blind_topo.total_graph) - - -# read the topology from the swmm file (this is much cheaper) -env.config['states'] = dependent_columns -env.config['action_space'] = independent_columns -# the default is controlling all 11 orifices so we need to edit the environment -print("defining topology") -swmm_topo = modpods.topo_from_pystorms(env) -# the index of the causative topology should be the dependent columns -#swmm_topo.index = dependent_columns -# the columns of the causative topology should be the dependent columns plus the independent columns -#swmm_topo.columns = dependent_columns.append(independent_columns) - -# show all columns when printing dataframes -pd.set_option('display.max_columns', None) -print(swmm_topo) - -if use_blind: - print("differences in topology") - print(blind_topo.causative_topo.compare(swmm_topo)) - -# learn the dynamics now, or load a previously learned model -''' -# learn the dynamics from the efd response -print("learning dynamics") -lti_plant_approx_seeing = modpods.lti_system_gen(swmm_topo, ef_response, - independent_columns= independent_columns, - dependent_columns = dependent_columns, max_iter = 0, - swmm=True,bibo_stable=True) -# pickle the plant approximation to load later -with open('G:/My Drive/modpods/swmm_lti_plant_approx_seeing.pickle', 'wb') as handle: - pickle.dump(lti_plant_approx_seeing, handle) -''' - -# load the plant approximation from a pickle -with open('G:/My Drive/modpods/swmm_lti_plant_approx_seeing.pickle', 'rb') as handle: - print("loading previously trained model") - lti_plant_approx_seeing = pickle.load(handle) - -if use_blind: - lti_plant_approx_blind = modpods.lti_system_gen(blind_topo, ef_response, - independent_columns= independent_columns, - dependent_columns = dependent_columns) - - - -# cast the columns of dataframes to strings for easier indexing -ef_response.columns = ef_response.columns.astype(str) -dependent_columns = [str(col) for col in dependent_columns] -independent_columns = [str(col) for col in independent_columns] -# reindex the ef_response to an integer step -ef_response.index = np.arange(0,len(ef_response),1) - -# evaluate the plant approximation accuracy -# only plot the depths at 1, 2, 3, and 4 -# the forcing is the flows at O1, O2, O3, and O4 -approx_response = ct.forced_response(lti_plant_approx_seeing['system'], U=np.transpose(ef_response[independent_columns].values), T=ef_response.index.values) -approx_data = pd.DataFrame(index=ef_response.index.values) -approx_data[dependent_columns[0]] = approx_response.outputs[0][:] -approx_data[dependent_columns[1]] = approx_response.outputs[1][:] -approx_data[dependent_columns[2]] = approx_response.outputs[2][:] -approx_data[dependent_columns[3]] = approx_response.outputs[3][:] - -output_columns = dependent_columns[0:4] # depth at 1,2,3,4 - -# create a vertical subplot of 3 axes -fig, axes = plt.subplots(4, 1, figsize=(10, 10)) - -for idx in range(len(output_columns)): - axes[idx].plot(ef_response[output_columns[idx]],label='actual') - axes[idx].plot(approx_data[output_columns[idx]],label='approx') - if idx == 0: - axes[idx].legend(fontsize='x-large',loc='best') - axes[idx].set_ylabel(output_columns[idx],fontsize='large') - if idx == len(output_columns)-1: - axes[idx].set_xlabel("time",fontsize='x-large') -# label the left column of plots "training" -axes[0].set_title("outputs",fontsize='xx-large') - -plt.savefig("G:/My Drive/modpods/test_lti_control_of_swmm_plant_approx.png") -plt.savefig("G:/My Drive/modpods/test_lti_control_of_swmm_plant_approx.svg") -#plt.show() - -# same plot, but just the first few timesteps (this is the accuracy that matters for feedback control) -# create a vertical subplot of 3 axes -fig, axes = plt.subplots(4, 1, figsize=(10, 10)) - -for idx in range(len(output_columns)): - axes[idx].plot(ef_response[output_columns[idx]][:10],label='actual') - axes[idx].plot(approx_data[output_columns[idx]][:10],label='approx') - if idx == 0: - axes[idx].legend(fontsize='x-large',loc='best') - axes[idx].set_ylabel(output_columns[idx],fontsize='large') - if idx == len(output_columns)-1: - axes[idx].set_xlabel("time",fontsize='x-large') -# label the left column of plots "training" -axes[0].set_title("outputs",fontsize='xx-large') - -plt.savefig("G:/My Drive/modpods/test_lti_control_of_swmm_plant_approx_first10.png") -plt.savefig("G:/My Drive/modpods/test_lti_control_of_swmm_plant_approx_first10.svg") -#plt.show() - - -# define the cost function -Q = np.eye(len(lti_plant_approx_seeing['A'].columns)) / 10e12 # we don't want to penalize the transition states as their magnitude doesn't have directly tractable physical meaning -# bryson's rule based on the maxiumum depth of each basin -# note: the swmm file gamma.inp actually specifies the maximum depth of storage node 1 as 10 feet, -# but i'll be consistent with the configuration of the efd controller for consistent comparison -basin_max_depths_all = [5.0, 10.0, 10.0, 10.0, 10.0,20.0, 10.0, 10.0,10.0, 13.72, 14.96] -for asset_index in range(len(dependent_columns)): - Q[lti_plant_approx_seeing['A'].columns.get_loc(dependent_columns[asset_index]),lti_plant_approx_seeing['A'].columns.get_loc(dependent_columns[asset_index])] = 1 / ((basin_max_depths_all[asset_index])**2 ) - -# threshold on flows at 0.11 m^3 / s which is 3.9 cfs -R = np.eye(len(lti_plant_approx_seeing['B'].columns)) / (3.9**2) # bryson's rule on maximum allowable flow -# define the system -# sys_response_to_control = ct.ss(lti_plant_approx_seeing['A'],lti_plant_approx_seeing['B'],lti_plant_approx_seeing['C'],0) # just for defining the controller gain -# (not necessary in this case, but would be if you've got disturbances) -# find the state feedback gain for the linear quadratic regulator -K,S,E = ct.lqr(lti_plant_approx_seeing['system'],Q,R) # one row of K should be zeros to reflect that u1 is not used as a control but is the disturbance - -# define the observer gain -L,P,E = ct.lqe(lti_plant_approx_seeing['system'],np.eye(len(lti_plant_approx_seeing['B'].columns)),np.eye(len(lti_plant_approx_seeing['C'].index)) ) # unit covariance on process noise and measurement error - -''' -# define the observer based compensator (per freudenberg 560 course notes 2.4) -obc_A = lti_plant_approx_seeing['A'].values-lti_plant_approx_seeing['B'].values@K - L@lti_plant_approx_seeing['C'].values -# ingests measurements, returns control actions -obc = ct.ss(obc_A, L, -K, 0, inputs=list(lti_plant_approx_seeing['C'].index),outputs=list(lti_plant_approx_seeing['B'].columns)) # negate K to give back commanded flows which are positive - - -# need to separately define the observer and controller because we can't close the loop in the typical way -# the observer takes the control input and measured output as inputs and outputs the estimated full state -#observer_input = np.concatenate((lti_plant_approx_seeing['B'].values,L),axis = 1) -#observer = ct.ss(lti_plant_approx_seeing['A'] - L@lti_plant_approx_seeing['C'].values, observer_input, np.eye(len(lti_plant_approx_seeing['A']) ) , 0 ) - -# the controller takes in an estiamte of the state and returns a control command -# this is just, u = -K @ xhat, not necessary to define a state space model for that as there's no evolution - -# can't form the closed loop system because the plant is not a state space system, but rather a software model -# the state estimate and control actions will be computed iteratively as the simulation is stepped through -''' -env = pystorms.scenarios.gamma() -done = False -u = np.zeros((len(lti_plant_approx_seeing['B'].columns),1) ) # start with all orifices completely closed -xhat = np.zeros((len(lti_plant_approx_seeing['A'].columns),1)) # initial state estimate -while not done: - # Query the current state of the simulation - observables = env.state() - - # update the observer based on these measurements (xhat_dot = (A-LC) xhat + B u + L y_m) - state_evolution = (lti_plant_approx_seeing['A'] - L@lti_plant_approx_seeing['C'].values) @ xhat - impact_of_control = lti_plant_approx_seeing['B'].values @ u - output_updating = (L @ np.transpose(observables)).reshape((-1,1)) # provided as row vector, need a column vector. also need to reshape to 2d array with 1 column - xhat_dot = state_evolution + impact_of_control + output_updating - xhat += xhat_dot # update the state estimate - yhat = lti_plant_approx_seeing['C'] @ xhat # just for reference, could be useful for plotting later - u = -K @ xhat # calculate control command - - # convert control command (flow) into orifice open percentage - # per the EPA-SWMM user manual volume ii hydraulics, orifices (section 6.2, page 107) - https://nepis.epa.gov/Exe/ZyPDF.cgi/P100S9AS.PDF?Dockey=P100S9AS.PDF - # all orifices in gamma are "bottom" - Cd = 0.65 # happens to be the same for all of them - Ao = 1 # area is one square foot. again, happens to be the same for all of them. - g = 32.2 # ft / s^2 - # the expression for discharge is found using Torricelli's equation: Q = Cd * (Ao*open_pct) sqrt(2*g*H_e) - # H_e is the effective head in feet, which is just the depth in the basin as the orifices are "bottom" - # to get the action command as a percent open, we solve as: open_pct = Q_desired / (Cd * Ao * sqrt(2*g*H_e)) - u_open_pct = u*-1 - for idx in range(len(u)): - u_open_pct.iloc[idx,0] = u.iloc[idx,0] / (Cd*Ao * np.sqrt(2*g*observables[idx])) - - - # Specify that the other 7 valves in the network should be - # open since we are not controlling them here - actions_uncontrolled = np.ones(7) - # Join the two above action arrays - actions = np.concatenate((u_open_pct.flatten(), actions_uncontrolled), axis=0) - - # Set the actions and progress the simulation - done = env.step(actions) - - -# Calculate the performance measure for the uncontrolled simulation -obc_perf = sum(env.data_log["performance_measure"]) - -print("The calculated performance for the observer based compensator case of Scenario gamma is:") -print("{}.".format(obc_perf)) - -plt.figure(figsize=(15,6)) -plt.subplot(1,2,1) -plt.plot(np.asarray(env.data_log['depthN']['1'])/basin_max_depths[0], label='Basin 1') -plt.plot(np.asarray(env.data_log['depthN']['2'])/basin_max_depths[1], label='Basin 2') -plt.plot(np.asarray(env.data_log['depthN']['3'])/basin_max_depths[2], label='Basin 3') -plt.plot(np.asarray(env.data_log['depthN']['4'])/basin_max_depths[3], label='Basin 4') -plt.xlabel('Simulation Timestep') -plt.ylabel('Filling Degree') -plt.legend() - -plt.subplot(1,2,2) -plt.plot(env.data_log['flow']['O1'], label='Basin 1') -plt.plot(env.data_log['flow']['O2'], label='Basin 2') -plt.plot(env.data_log['flow']['O3'], label='Basin 3') -plt.plot(env.data_log['flow']['O4'], label='Basin 4') -plt.xlabel('Simulation Timestep') -plt.ylabel('Basin Outflow (cfs)') -plt.legend() - - -print("done") - diff --git a/5wkkup1r.qeb~ b/5wkkup1r.qeb~ deleted file mode 100644 index e69de29..0000000 diff --git a/__pycache__/__init__.cpython-38.pyc b/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index 6ce662f04c6d28761541dcacd74120d22e37733b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141 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 }abN@ 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 RXbP$-MQ}bG+7~BR|8JlVB*g## diff --git a/__pycache__/modpods.cpython-39.pyc b/__pycache__/modpods.cpython-39.pyc deleted file mode 100644 index 6fad2fbcb4755e0c569c7e77e0f0a936df233395..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38170 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 Z_Gb**ppR7D4cNyG+U|Dc$89*o{|{?v`oaJJ diff --git a/afuitcsp.wa0~ b/afuitcsp.wa0~ deleted file mode 100644 index e69de29..0000000 diff --git a/modpods.pyw~RFa860ffd2.TMP b/modpods.pyw~RFa860ffd2.TMP deleted file mode 100644 index e69de29..0000000 diff --git a/test_lti_control_of_swmm.py~RFb6efb78e.TMP b/test_lti_control_of_swmm.py~RFb6efb78e.TMP deleted file mode 100644 index e69de29..0000000 diff --git a/test_lti_control_of_swmm.py~RFdf17d1.TMP b/test_lti_control_of_swmm.py~RFdf17d1.TMP deleted file mode 100644 index 89076f0..0000000 --- a/test_lti_control_of_swmm.py~RFdf17d1.TMP +++ /dev/null @@ -1,445 +0,0 @@ -# reference: https://colab.research.google.com/github/kLabUM/pystorms/blob/master/tutorials/Scenario_Gamma.ipynb - -import sys -#from modpods import topo_from_pystorms -#sys.path.append("G:/My Drive/modpods") -import modpods -import pystorms -import numpy as np -import matplotlib.pyplot as plt -import pandas as pd -import control as ct -import dill as pickle -use_blind = False - -''' -# uncontrolled -env = pystorms.scenarios.gamma() -done = False - -while not done: - # Query the current state of the simulation - state = env.state() - - # Initialize actions to have each asset open - actions = np.ones(11) - - # Set the actions and progress the simulation - done = env.step(actions) - -# Calculate the performance measure for the uncontrolled simulation -uncontrolled_perf = sum(env.data_log["performance_measure"]) - -print("The calculated performance for the uncontrolled case of Scenario gamma is:") -print("{}.".format(uncontrolled_perf)) - -basin_max_depths = [5., 10., 10., 10.] - -plt.figure(figsize=(15,6)) -plt.subplot(1,2,1) -plt.plot(np.asarray(env.data_log['depthN']['1'])/basin_max_depths[0], label='Basin 1') -plt.plot(np.asarray(env.data_log['depthN']['2'])/basin_max_depths[1], label='Basin 2') -plt.plot(np.asarray(env.data_log['depthN']['3'])/basin_max_depths[2], label='Basin 3') -plt.plot(np.asarray(env.data_log['depthN']['4'])/basin_max_depths[3], label='Basin 4') -plt.xlabel('Simulation Timestep') -plt.ylabel('Filling Degree') -plt.legend() - -plt.subplot(1,2,2) -plt.plot(env.data_log['flow']['O1'], label='Basin 1') -plt.plot(env.data_log['flow']['O2'], label='Basin 2') -plt.plot(env.data_log['flow']['O3'], label='Basin 3') -plt.plot(env.data_log['flow']['O4'], label='Basin 4') -plt.xlabel('Simulation Timestep') -plt.ylabel('Basin Outflow (cfs)') -plt.legend() -plt.show() - -uncontrolled_data = env.data_log -''' -def controller_efd(state, max_depths): - # Initialize the action space so that we can compute the new settings - new_settings = np.ones(len(state)) - # Set equal filling degree parameters - c = 1.5 - theta = 0.25 - - # Assign the current depth in each basin - depths = state - - # Compute the filling degrees - fd = depths/max_depths - # Compute the average filling degree across each controlled basin - fd_average = sum(fd)/len(fd) - - # Update each valve setting based on the relative fullness of each basin - for i in range(0,len(fd)): - - # If a basin is very full compared to the average, we should open its - # valve to release some water - if fd[i] > fd_average: - new_settings[i] = c*(fd[i]-fd_average) - - # If a basin's filling degree is close to the average (within some value - # theta), its setting can be close to that average - elif fd_average-fd[i] <= theta: - new_settings[i] = fd_average - - # If a basin is very empty compared to the average, we can close its - # valve to store more water at that location, prioritizing releasing at - # the other locations - else: - new_settings[i] = 0. - - # Make sure the settings are in bounds [0,1] - new_settings[i] = min(new_settings[i], 1.) - new_settings[i] = max(new_settings[i], 0.) - - return new_settings - - - -env = pystorms.scenarios.gamma() -done = False - -# Specify the maximum depths for each basin we are controlling -basin_max_depths = [5., 10., 10., 10.] - -while not done: - # Query the current state of the simulation - state = env.state() - # Isolate only the states that we need (the 4 downstream basin depths) - states_relevant = state[0:4] - - # Pass the current, relevant states and the maximum basin - # depths into our equal filling degree logic - actions_efd = controller_efd(states_relevant, basin_max_depths) - # Specify that the other 7 valves in the network should be - # open since we are not controlling them here - actions_uncontrolled = np.ones(7) - # Join the two above action arrays - actions = np.concatenate((actions_efd, actions_uncontrolled), axis=0) - - # Set the actions and progress the simulation - done = env.step(actions) - -# Calculate the performance measure for the uncontrolled simulation -equalfilling_perf = sum(env.data_log["performance_measure"]) - -print("The calculated performance for the equal filling degree case of Scenario gamma is:") -print("{}.".format(equalfilling_perf)) -''' -plt.figure(figsize=(15,6)) -plt.subplot(1,2,1) -plt.plot(np.asarray(env.data_log['depthN']['1'])/basin_max_depths[0], label='Basin 1') -plt.plot(np.asarray(env.data_log['depthN']['2'])/basin_max_depths[1], label='Basin 2') -plt.plot(np.asarray(env.data_log['depthN']['3'])/basin_max_depths[2], label='Basin 3') -plt.plot(np.asarray(env.data_log['depthN']['4'])/basin_max_depths[3], label='Basin 4') -plt.xlabel('Simulation Timestep') -plt.ylabel('Filling Degree') -plt.legend() - -plt.subplot(1,2,2) -plt.plot(env.data_log['flow']['O1'], label='Basin 1') -plt.plot(env.data_log['flow']['O2'], label='Basin 2') -plt.plot(env.data_log['flow']['O3'], label='Basin 3') -plt.plot(env.data_log['flow']['O4'], label='Basin 4') -plt.xlabel('Simulation Timestep') -plt.ylabel('Basin Outflow (cfs)') -plt.legend() -''' -ef_data = env.data_log - -# get the responses into one dataframe with zero pads in between -#uncontrolled_flows = pd.DataFrame.from_dict(uncontrolled_data['flow']) -#uncontrolled_depthN = pd.DataFrame.from_dict(uncontrolled_data['depthN']) -#uncontrolled_response = pd.concat([uncontrolled_flows, uncontrolled_depthN], axis=1) -#print(uncontrolled_response) -ef_flows = pd.DataFrame.from_dict(ef_data['flow']) -ef_flows.columns = env.config['action_space'] -ef_depthN = pd.DataFrame.from_dict(ef_data['depthN']) -ef_depthN.columns = env.config['states'] -ef_response = pd.concat([ef_flows, ef_depthN], axis=1) -ef_response.index = env.data_log['simulation_time'] -print(ef_response) -# for the columns of ef_response which do not contain the string "O" (i.e. the depths) -# if the current column name is "X", make it "(X, depthN)" -# this is because the modpods library expects the depths to be named "X, depthN" -# where X is the name of the corresponding flow -for col in ef_response.columns: - if "O" in col: # the orifices - # if there's a number in that column name that's greater than 4, drop this column - # this is because we're only controlling the first 4 orifices and these measurements are redundant to the storage node depths if the orifices are always open - if int(col[1:]) > 4: - ef_response.drop(columns=col, inplace=True) - - ef_response.rename(columns={col: (col, "flow")}, inplace=True) - - - -print(ef_response) - - - -# for debugging resample to a coarser time step (native resolution is about one minute but not consistent) -# need a consistent time step for modpods -orig_index_length = len(ef_response.index) -ef_response = ef_response.resample('1H',axis='index').mean().copy(deep=True) -print(ef_response) -training_dt = orig_index_length / len(ef_response.index) -# we'll only use the ef response to infer the topology and dynamics -# for this experiment assume all of flow O1-O11 and depth 1-11 are observable -# but only O1-O4 are controllable -independent_columns = ef_response.columns[0:4] # orifices O1 through O4 -dependent_columns = ef_response.drop(columns=independent_columns).columns - - -# learn the topology from the data -# this will be the "blind" plant model -if use_blind: # don't have this on all the time because it's very expensive - blind_topo = modpods.infer_causative_topology(ef_response, dependent_columns = dependent_columns, - independent_columns = independent_columns, verbose=True) - - print(blind_topo.causative_topo) - print(blind_topo.total_graph) - - -# read the topology from the swmm file (this is much cheaper) -env.config['states'] = dependent_columns -env.config['action_space'] = independent_columns -# the default is controlling all 11 orifices so we need to edit the environment -print("defining topology") -swmm_topo = modpods.topo_from_pystorms(env) -# the index of the causative topology should be the dependent columns -#swmm_topo.index = dependent_columns -# the columns of the causative topology should be the dependent columns plus the independent columns -#swmm_topo.columns = dependent_columns.append(independent_columns) - -# show all columns when printing dataframes -pd.set_option('display.max_columns', None) -#print(swmm_topo) - -if use_blind: - print("differences in topology") - print(blind_topo.causative_topo.compare(swmm_topo)) - -# learn the dynamics now, or load a previously learned model - -# learn the dynamics from the efd response -print("learning dynamics") -lti_plant_approx_seeing = modpods.lti_system_gen(swmm_topo, ef_response, - independent_columns= independent_columns, - dependent_columns = dependent_columns, max_iter = 0, - swmm=True,bibo_stable=True,max_transition_state_dim=5) -# pickle the plant approximation to load later -with open('G:/My Drive/modpods/swmm_lti_plant_approx_seeing.pickle', 'wb') as handle: - pickle.dump(lti_plant_approx_seeing, handle) -''' - -# load the plant approximation from a pickle -with open('G:/My Drive/modpods/swmm_lti_plant_approx_seeing.pickle', 'rb') as handle: - print("loading previously trained model") - lti_plant_approx_seeing = pickle.load(handle) - ''' -if use_blind: - lti_plant_approx_blind = modpods.lti_system_gen(blind_topo, ef_response, - independent_columns= independent_columns, - dependent_columns = dependent_columns) - - - -# is the plant approximation internally stable? -plant_eigenvalues,_ = np.linalg.eig(lti_plant_approx_seeing['A'].values) - -# cast the columns of dataframes to strings for easier indexing -ef_response.columns = ef_response.columns.astype(str) -dependent_columns = [str(col) for col in dependent_columns] -independent_columns = [str(col) for col in independent_columns] -# reindex the ef_response to an integer step -ef_response.index = np.arange(0,len(ef_response),1) - -# evaluate the plant approximation accuracy -# only plot the depths at 1, 2, 3, and 4 -# the forcing is the flows at O1, O2, O3, and O4 -approx_response = ct.forced_response(lti_plant_approx_seeing['system'], U=np.transpose(ef_response[independent_columns].values), T=ef_response.index.values) -approx_data = pd.DataFrame(index=ef_response.index.values) -approx_data[dependent_columns[0]] = approx_response.outputs[0][:] -approx_data[dependent_columns[1]] = approx_response.outputs[1][:] -approx_data[dependent_columns[2]] = approx_response.outputs[2][:] -approx_data[dependent_columns[3]] = approx_response.outputs[3][:] - -output_columns = dependent_columns[0:4] # depth at 1,2,3,4 - -# create a vertical subplot of 3 axes -fig, axes = plt.subplots(4, 1, figsize=(10, 10)) - -for idx in range(len(output_columns)): - axes[idx].plot(ef_response[output_columns[idx]],label='actual') - axes[idx].plot(approx_data[output_columns[idx]],label='approx') - if idx == 0: - axes[idx].legend(fontsize='x-large',loc='best') - axes[idx].set_ylabel(output_columns[idx],fontsize='large') - if idx == len(output_columns)-1: - axes[idx].set_xlabel("time",fontsize='x-large') -# label the left column of plots "training" -axes[0].set_title("outputs",fontsize='xx-large') - -plt.savefig("G:/My Drive/modpods/test_lti_control_of_swmm_plant_approx.png") -plt.savefig("G:/My Drive/modpods/test_lti_control_of_swmm_plant_approx.svg") -#plt.show() -plt.close() -# same plot, but just the first few timesteps (this is the accuracy that matters for feedback control) -# create a vertical subplot of 3 axes -fig, axes = plt.subplots(4, 1, figsize=(10, 10)) - -for idx in range(len(output_columns)): - axes[idx].plot(ef_response[output_columns[idx]][:10],label='actual') - axes[idx].plot(approx_data[output_columns[idx]][:10],label='approx') - if idx == 0: - axes[idx].legend(fontsize='x-large',loc='best') - axes[idx].set_ylabel(output_columns[idx],fontsize='large') - if idx == len(output_columns)-1: - axes[idx].set_xlabel("time",fontsize='x-large') -# label the left column of plots "training" -axes[0].set_title("outputs",fontsize='xx-large') - -plt.savefig("G:/My Drive/modpods/test_lti_control_of_swmm_plant_approx_first10.png") -plt.savefig("G:/My Drive/modpods/test_lti_control_of_swmm_plant_approx_first10.svg") -#plt.show() -plt.close() - -# define the cost function -Q = np.eye(len(lti_plant_approx_seeing['A'].columns)) / 10e12 # we don't want to penalize the transition states as their magnitude doesn't have directly tractable physical meaning -# bryson's rule based on the maxiumum depth of each basin -# note: the swmm file gamma.inp actually specifies the maximum depth of storage node 1 as 10 feet, -# but i'll be consistent with the configuration of the efd controller for consistent comparison -basin_max_depths_all = [5.0, 10.0, 10.0, 10.0, 10.0,20.0, 10.0, 10.0,10.0, 13.72, 14.96] -for asset_index in range(len(dependent_columns)): - Q[lti_plant_approx_seeing['A'].columns.get_loc(dependent_columns[asset_index]),lti_plant_approx_seeing['A'].columns.get_loc(dependent_columns[asset_index])] = 1 / ((basin_max_depths_all[asset_index])**2 ) - -flood_weighting = 10 # how much more important is flooding than the other objectives? -Q = Q * flood_weighting # set flood_weighting = 1 for basic bryson's rule (care about flows as much as flooding) -# threshold on flows at 0.11 m^3 / s which is 3.9 cfs -R = np.eye(len(lti_plant_approx_seeing['B'].columns)) / (3.9**2) # bryson's rule on maximum allowable flow -# define the system -# sys_response_to_control = ct.ss(lti_plant_approx_seeing['A'],lti_plant_approx_seeing['B'],lti_plant_approx_seeing['C'],0) # just for defining the controller gain -# (not necessary in this case, but would be if you've got disturbances) -# find the state feedback gain for the linear quadratic regulator -K,S,E = ct.lqr(lti_plant_approx_seeing['system'],Q,R) # one row of K should be zeros to reflect that u1 is not used as a control but is the disturbance - -# define the observer gain -noise_level = 1 # noise on depth measurements -L,P,E = ct.lqe(lti_plant_approx_seeing['system'],np.eye(len(lti_plant_approx_seeing['B'].columns)),noise_level*np.eye(len(lti_plant_approx_seeing['C'].index)) ) # unit covariance on process noise and measurement error - -''' -# define the observer based compensator (per freudenberg 560 course notes 2.4) -obc_A = lti_plant_approx_seeing['A'].values-lti_plant_approx_seeing['B'].values@K - L@lti_plant_approx_seeing['C'].values -# ingests measurements, returns control actions -obc = ct.ss(obc_A, L, -K, 0, inputs=list(lti_plant_approx_seeing['C'].index),outputs=list(lti_plant_approx_seeing['B'].columns)) # negate K to give back commanded flows which are positive - - -# need to separately define the observer and controller because we can't close the loop in the typical way -# the observer takes the control input and measured output as inputs and outputs the estimated full state -#observer_input = np.concatenate((lti_plant_approx_seeing['B'].values,L),axis = 1) -#observer = ct.ss(lti_plant_approx_seeing['A'] - L@lti_plant_approx_seeing['C'].values, observer_input, np.eye(len(lti_plant_approx_seeing['A']) ) , 0 ) - -# the controller takes in an estiamte of the state and returns a control command -# this is just, u = -K @ xhat, not necessary to define a state space model for that as there's no evolution - -# can't form the closed loop system because the plant is not a state space system, but rather a software model -# the state estimate and control actions will be computed iteratively as the simulation is stepped through -''' -env = pystorms.scenarios.gamma() -done = False - -u = np.zeros((len(lti_plant_approx_seeing['B'].columns),1) ) # start with all orifices completely closed -u_open_pct = np.zeros((len(lti_plant_approx_seeing['B'].columns),1) ) # start with all orifices completely closed -xhat = np.zeros((len(lti_plant_approx_seeing['A'].columns),1)) # initial state estimate - -steps = 0 # make sure the estimator and controller operate at the frequency the approxiation was trained at - -# convert control command (flow) into orifice open percentage -# per the EPA-SWMM user manual volume ii hydraulics, orifices (section 6.2, page 107) - https://nepis.epa.gov/Exe/ZyPDF.cgi/P100S9AS.PDF?Dockey=P100S9AS.PDF -# all orifices in gamma are "bottom" -Cd = 0.65 # happens to be the same for all of them -Ao = 1 # area is one square foot. again, happens to be the same for all of them. -g = 32.2 # ft / s^2 -# the expression for discharge is found using Torricelli's equation: Q = Cd * (Ao*open_pct) sqrt(2*g*H_e) -# H_e is the effective head in feet, which is just the depth in the basin as the orifices are "bottom" -# to get the action command as a percent open, we solve as: open_pct = Q_desired / (Cd * Ao * sqrt(2*g*H_e)) - -while not done: - #if steps % 5 == 0: # match to the frequency of the approximation - # Query the current state of the simulation - observables = env.state() - # for updating the plant, calculate the "u" that is actually applied to the plant, not the desired control input - for idx in range(len(u)): - u[idx,0] = Cd*Ao*u_open_pct[idx,0]*np.sqrt(2*g*observables[idx]) # calculate the actual flow through the orifice - - # update the observer based on these measurements (xhat_dot = (A-LC) xhat + B u + L y_m) - state_evolution = (lti_plant_approx_seeing['A'].values - L@lti_plant_approx_seeing['C'].values) @ xhat # TODO: this is being absurdbly fast / aggressive right now, tone it down - # causing the state estimation to diverge to crazy values - impact_of_control = lti_plant_approx_seeing['B'].values @ u - output_updating = (L @ np.transpose(observables)).reshape((-1,1)) # provided as row vector, need a column vector. also need to reshape to 2d array with 1 column - xhat_dot = (state_evolution + impact_of_control + output_updating) / training_dt # divide by the training frequency to get the change in state over the time step - xhat += xhat_dot # update the state estimate - yhat = lti_plant_approx_seeing['C'] @ xhat # just for reference, could be useful for plotting later - observables_error = yhat - observables.reshape(-1,1) # cast observables to be 2 dimensional - # note that this is only truly the error if there is zero error in the measurements. Generally, data is not truth. - u = -K @ xhat # calculate control command - - - u_open_pct = u*-1 - for idx in range(len(u)): - head = 2*g*observables[idx] - - if head < 0.01: # if the head is less than 0.01 ft, the basin is empty, so close the orifice - u_open_pct[idx,0] = 0 - else: - u_open_pct[idx,0] = u[idx,0] / (Cd*Ao * np.sqrt(2*g*observables[idx])) # open percentage for desired flow rate - - if u_open_pct[idx,0] > 1: # if the calculated open percentage is greater than 1, the orifice is fully open - u_open_pct[idx,0] = 1 - elif u_open_pct[idx,0]< 0: # if the calculated open percentage is less than 0, the orifice is fully closed - u_open_pct[idx,0] = 0 - - - # Specify that the other 7 valves in the network should be - # open since we are not controlling them here - actions_uncontrolled = np.ones(7) - # Join the two above action arrays - actions = np.concatenate((u_open_pct.flatten(), actions_uncontrolled), axis=0) - - # Set the actions and progress the simulation - done = env.step(actions) - steps += 1 - - -# Calculate the performance measure for the uncontrolled simulation -obc_perf = sum(env.data_log["performance_measure"]) - -print("The calculated performance for the observer based compensator case of Scenario gamma is:") -print("{}.".format(obc_perf)) - -plt.figure(figsize=(15,6)) -plt.subplot(1,2,1) -plt.plot(np.asarray(env.data_log['depthN']['1'])/basin_max_depths[0], label='Basin 1') -plt.plot(np.asarray(env.data_log['depthN']['2'])/basin_max_depths[1], label='Basin 2') -plt.plot(np.asarray(env.data_log['depthN']['3'])/basin_max_depths[2], label='Basin 3') -plt.plot(np.asarray(env.data_log['depthN']['4'])/basin_max_depths[3], label='Basin 4') -plt.xlabel('Simulation Timestep') -plt.ylabel('Filling Degree') -plt.legend() - -plt.subplot(1,2,2) -plt.plot(env.data_log['flow']['O1'], label='Basin 1') -plt.plot(env.data_log['flow']['O2'], label='Basin 2') -plt.plot(env.data_log['flow']['O3'], label='Basin 3') -plt.plot(env.data_log['flow']['O4'], label='Basin 4') -plt.xlabel('Simulation Timestep') -plt.ylabel('Basin Outflow (cfs)') -plt.legend() - - -print("done") - diff --git a/tests/test_modpods.py b/tests/test_modpods.py index 9f7f713..fb536a6 100644 --- a/tests/test_modpods.py +++ b/tests/test_modpods.py @@ -238,6 +238,127 @@ def test_delay_io_predict_returns_expected_shape( assert pred["prediction"].shape[0] > 0 +# --------------------------------------------------------------------------- +# Optimization method comparison tests +# --------------------------------------------------------------------------- + + +@pytest.fixture(scope="module") +def compass_model(simple_lti_data: pd.DataFrame) -> dict[Any, Any]: + """Train a model using the default compass-search optimizer.""" + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + model = modpods.delay_io_train( + simple_lti_data, + dependent_columns=["x1"], + independent_columns=["u"], + windup_timesteps=0, + init_transforms=1, + max_transforms=1, + max_iter=20, + poly_order=1, + verbose=False, + optimization_method="compass_search", + ) + return cast(dict[Any, Any], model) + + +@pytest.fixture(scope="module") +def bayesian_model(simple_lti_data: pd.DataFrame) -> dict[Any, Any]: + """Train a model using Bayesian optimization.""" + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + model = modpods.delay_io_train( + simple_lti_data, + dependent_columns=["x1"], + independent_columns=["u"], + windup_timesteps=0, + init_transforms=1, + max_transforms=1, + max_iter=20, + poly_order=1, + verbose=False, + optimization_method="bayesian", + ) + return cast(dict[Any, Any], model) + + +def test_compass_search_returns_valid_model( + compass_model: dict[Any, Any], +) -> None: + """Compass-search optimizer must return a well-formed model dict.""" + assert isinstance(compass_model, dict) + assert 1 in compass_model + assert "final_model" in compass_model[1] + assert "error_metrics" in compass_model[1]["final_model"] + r2 = float(compass_model[1]["final_model"]["error_metrics"]["r2"]) + assert r2 > -1.0, f"Compass R² {r2:.4f} is unreasonably low" + + +def test_bayesian_returns_valid_model( + bayesian_model: dict[Any, Any], +) -> None: + """Bayesian optimizer must return a well-formed model dict.""" + assert isinstance(bayesian_model, dict) + assert 1 in bayesian_model + assert "final_model" in bayesian_model[1] + assert "error_metrics" in bayesian_model[1]["final_model"] + r2 = float(bayesian_model[1]["final_model"]["error_metrics"]["r2"]) + assert r2 > -1.0, f"Bayesian R² {r2:.4f} is unreasonably low" + + +def test_both_methods_produce_comparable_r2( + compass_model: dict[Any, Any], + bayesian_model: dict[Any, Any], +) -> None: + """Both optimization methods should achieve similar R² on the same data. + + The difference in R² should be within a reasonable margin, confirming + that both methods solve the same underlying optimization problem. + """ + r2_compass = float(compass_model[1]["final_model"]["error_metrics"]["r2"]) + r2_bayesian = float(bayesian_model[1]["final_model"]["error_metrics"]["r2"]) + # Both should be positive (reasonable fit) + assert r2_compass > 0.0, f"Compass R² {r2_compass:.4f} is non-positive" + assert r2_bayesian > 0.0, f"Bayesian R² {r2_bayesian:.4f} is non-positive" + # Neither method should be dramatically worse than the other + assert abs(r2_compass - r2_bayesian) < 0.5, ( + f"Methods diverge too much: compass={r2_compass:.4f}, " + f"bayesian={r2_bayesian:.4f}" + ) + + +def test_compass_and_bayesian_predictions_agree( + compass_model: dict[Any, Any], + bayesian_model: dict[Any, Any], + simple_lti_data: pd.DataFrame, +) -> None: + """Predictions from compass and Bayesian models should broadly agree.""" + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + pred_compass = modpods.delay_io_predict( + compass_model, simple_lti_data, num_transforms=1 + ) + pred_bayesian = modpods.delay_io_predict( + bayesian_model, simple_lti_data, num_transforms=1 + ) + assert "prediction" in pred_compass + assert "prediction" in pred_bayesian + p_c = pred_compass["prediction"].ravel() + p_b = pred_bayesian["prediction"].ravel() + assert p_c.shape == p_b.shape, "Prediction shapes differ between methods" + # Both predictions must be finite (no NaN or Inf) + assert np.all(np.isfinite(p_c)), "Compass predictions contain NaN/Inf" + assert np.all(np.isfinite(p_b)), "Bayesian predictions contain NaN/Inf" + # Correlation of predictions should be high (both are fitting the same signal) + # Guard against constant predictions (std == 0) which yield undefined correlation + if p_c.std() > 0 and p_b.std() > 0: + corr = float(np.corrcoef(p_c, p_b)[0, 1]) + assert ( + corr > 0.5 + ), f"Compass and Bayesian predictions are poorly correlated: {corr:.4f}" + + # --------------------------------------------------------------------------- # infer_causative_topology tests (from test_topo_inference.py) # ---------------------------------------------------------------------------