From b57c012d7bef2fb57ff67b80e96b679fc951621d Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 17 Mar 2026 01:23:36 +0000 Subject: [PATCH 1/3] fix: Interpolate grid for cfd_python in cross-validation This patch addresses the TODO tag in `validation/compare_cavity_external.py` where a `cfd_python` result and an `external_result` may have mismatched grid shapes. When that occurs, we now transpose the output fields and use `scipy.interpolate.RectBivariateSpline` to interpolate them onto the external reference grid. Also fixes `__pycache__` tracking in git by adding it to `.gitignore` and untracking existing files. Co-authored-by: ryancinsight <55164720+ryancinsight@users.noreply.github.com> --- .gitignore | 7 +++++++ .../__pycache__/__init__.cpython-313.pyc | Bin 180 -> 0 bytes .../fenics_reference.cpython-313.pyc | Bin 15535 -> 0 bytes .../reference_cavity_mac.cpython-313.pyc | Bin 22900 -> 0 bytes .../reference_cavity_psiomega.cpython-313.pyc | Bin 18779 -> 0 bytes .../validation_analytical.cpython-313.pyc | Bin 23790 -> 0 bytes validation/compare_cavity_external.py | 19 ++++++++++++++++-- 7 files changed, 24 insertions(+), 2 deletions(-) delete mode 100644 validation/__pycache__/__init__.cpython-313.pyc delete mode 100644 validation/__pycache__/fenics_reference.cpython-313.pyc delete mode 100644 validation/__pycache__/reference_cavity_mac.cpython-313.pyc delete mode 100644 validation/__pycache__/reference_cavity_psiomega.cpython-313.pyc delete mode 100644 validation/__pycache__/validation_analytical.cpython-313.pyc diff --git a/.gitignore b/.gitignore index 066d60e1..fab6f320 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,10 @@ report/ *.dll *.so *.dylib +.venv/ + +# Python compilation artifacts +__pycache__/ +*.pyc +*.pyo +*.pyd diff --git a/validation/__pycache__/__init__.cpython-313.pyc b/validation/__pycache__/__init__.cpython-313.pyc deleted file mode 100644 index 5198d1c6597686d754d874abff89c2af43fba8be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 zcmey&%ge<81iX=LnIQTxh=2h`DC08=kTI1Zok5e)ZzV$!6Oi{ABy}s;*(xTqIJKxa zCa5wo&p9VCuOvS&COtVPGp0B{t)x7$C^aTGGbblAEvGayB{MlbCABy+Juk-D%>}5Z zEHNiDC9xzEs3kr=GcU6wK3=b&@)n0pZhlH>PO4oIE6@&*8;U`UkIamWj77{q764}Y BFbx0z diff --git a/validation/__pycache__/fenics_reference.cpython-313.pyc b/validation/__pycache__/fenics_reference.cpython-313.pyc deleted file mode 100644 index d4d28b3d07bd2a55a1c10219fb0c7db84e7b4850..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15535 zcmdseeQX<7p4bdI{Lq;CroLrsM17HpsBb%2t(BOTEXlIuNE%VrTJq9klA@WVhSCga zN!(uJ1NOGc?X{7TOHJj1HI*FB)ZuVT9SVd7wy3gKviCzeZ7u}){ zh`Z8C)1#T=8^{=+5f48#N>dNbKmfV|8T~EH0?^TKzYT=qd{Pl-g!~0l3uC;~vS>0f zz08O)nPk3Py(?uyYL%J#^LyjCH5@J722MY#iO>F}@ypeJ0{uaJ$HbT!;{s0q>SO5* zvVZk46fc@^Td5v<8RJ|Fb4SX>MHjt(-oXhgX#5U0k{eO#)Xew+SHI28dz?PT%QI5K z2$bY*c|C4B1N@nDdz?~Z5_mfTT;e<)kumaKv*>Xz$i)lL8ZP$web6FJr(`+V;Y`O3 z<{}6;?-W`Xww2+4q^#ZR^R+M|trM+`0kQQMUm(K^n1gI(m21&}M>x}Y0|b7a<6D@a z*1lF~+YPD%oQ7`tTZbV7^>hs}96&6P!x)aY2T}wO0~|=sWvB+?dq-A4xsR?JNwH_f z1n(OllReCBpKn3zX=|Hv@@~5b#6sDvUcuEyKSug})uc$!9=FE^A}+X>6SQ3vl4%o} z(1;6Iob8e+kYZi(<%tgx?-8?vK!RNYdn71Xg+Q^&SrtpcPc^G%)$r56Pdlsb23u1} zyg>;XmWI+(@YBtzy47qh&egJc0GAIx-E0oz7T{bO-cEHZ*h2iKV~d1bSFuT-C*dfW*3_}>AuMIWb}Y+;^jTR`2cB3Op;4)b_N+5%vmA7jS`LGig;ZjU=4Sr|}S z?vB^(pn+i^lyhd$zmS$*#wfby-5yRr$}L%jXxhSao)yVj z0?GVH&#>)IQxcn5N%j236=WxjpZ)$A)5dgu_RA3y)6A^E&o~6S4(*{H?nqGW_+`Pk zjH--*x*}@;HQR8dWjdkYm*KaPAV(79P(m^9PbeH?c1=>0&;w={{Cg6G#Cybafd}Q{ zFwJ<9lMz8ow|kOP8Kf_GP%Q~&%p*^h#Pm&%DwW@1K1C2#!lO>*TukPqdbg4+X@+7e z2r+t^p*Gae$~9Ppm6#}y-_p+{T#lUMQkp3LSMWw(h8fNcMm^vJ_Kzm#1YosAa3u{5 zzud!I_0Qje=@U#xYQ_P|Et?&9LP4`9A~C=6EXb7;kRv@z-)#}K zphTx|aSL7bgf;rKoe$NRketjq3k&x+nT-xAEQv!Hn%_ngP? zcDU^}=*{ioXTd#zI>~t!C_5_|M4KS{GOY_M39Stz*X^^}64hDkORHS^GT&&A7{p;!mG zrDZ|={pyYCcuB)5^-t+1&;yYm-3juIgj#Td&%xVM;toYAg=vNtP#9(cRX7nc1R9HW zJz-J=n)|#wm>eHtbho@=!hQ_cFrXILKQLH`MGTK+vsFN1Zz3^=OiG~?-h?U?RYN2q z6o4y289Wm-ss{vgIF}P=ve7SHK8Y%qLv)w;BER6?;QC;YTfY*|XF?tE{Q8)-UZ_MZ zlFJEl<=B{!ila`S{2Peg10~HqX2?$&2>?t6NnIyU8z%xP!A3!mgh?5TG@w;s2Kh$i zJj`=EmA!9XWmU1t>4L1ifNG@LP)~PT)!juhs`^{Es_+LevAn5*YYqVc2Za?CH+jPt4Skqw-#Up14IeZ zpCIofC}hqP?9c2hyo>?D5ORcqmOr*w|`%QQP z-_QhbBCr~av$jpaY5@Y7^%FsYXj5eLm6yG(?Ddh+mGI^BzX?ZHlfC6Mju;{fmI&e) zjs?~NYpxk|n=ef304${>?FC2yIrNXAwCI_oZ$N1=;Dctf6Tw;t)GF#$z|aVsE|$`G z0xATarOTAoj566j<@Hwm^xt7<9g59h%OFn+zG@Msm%>_%p52OG_`|*E&ES!VN>R~- z`b_0ObKb{))~i)h87IU|dfpfaSFeCacF ztn0ZNSc5e185Wuxf|j3W!-xLI|8Exj|BZFb&R59IW@RzAF;DZYrT<_nSeBvv$L0N` zmX>9a>{2-Nqi4(D&=0T#f}}|y?a37rLxWIOp3!D% zE`~B#hvzF`WkO-qNScamN;$G@I1gJioL6ze+NCVJRffiv-I|0$HYIZ=7=`ayG|JJ- z$>&V+DQh}4`roCTLDeXDj0m=k;49%*mBt;ooyD6>`d*|oc06O&p>Z9nm&K>dQV)DB zz8reV;#peDtrfCw##h5zRzC&Nia%|wc(z>fXRH;h7Hx<);IkJ)W*HOSFzJBu%8Ap` zxH4nlO*QH%^~AGl+Vf!uYgN{IIc!cQ)aZ|)hjIxU4&(%|23vMASWjEe$Rqc|Hw|CI zGkooLi_nC?W&h7J8$6Yzz-v>29{>&PDMBNjZlvCZZ#xx zCvu+W8cMPcWm#lTp2cOV@D0C#J{o@m zeKh?B`lvZ(b)HFGnYJJ$@BiP}sv*$a-+-m6mn{q^1z~MKHc*mPYpO(&7F^z#wH)gp zE^o>xe<4c)Rw30RL-4huza?qp=m*j>gP&PfG&0IThfW4qGik8aps!l^c7*yePrk8M zjReo0LUW>A3waxInm0nrjn*c>-yS!u04hlj1RwaiJBW$7qF00HX&RbtppS>Z+@B>aTzP3*}#& zH>m~00|8ky!30r4=eMQT>=If}rw#X+$eHJsrKG7;Kx=412?AH}3kg-g348yrpuZ^i z5-Ne?T~2930B;STxhtUzxB(6iM1ap#LO|9TFGD8O&Slv3b_j^h2{mlH!%ITt^TKwd zfCMz56#erFC3K%qa<@d22`^SA$SVnQAd%zZ{Gw=E@QHGA36cuu3jCH~uK{m4D6TjY z3K#4{EWytOMN2CQwd1PIu?#Eh!wJga^bIFe!?4(SC!xam36e{Yw-VGH*cM5UR})$v z=eI403oaNWYzC&+!4ukB_TJ6zW$%lbW=gs+MS)P~X9{O^~*P(hVCU zN`OyjKD|MQ z`X3B$4#&#c_H^y57Eg2^DSlg4aUh8$Spa zhC8?P;l(X&q$4u1-5o95Hb%J}#Y0DQaL4lSa;$pbIDBpR;#PfF6Ct;9B9_Rl?fz)( z_A62ifS(5VBbD-{$|r=VY76P*Zn*X=5p@|3%qWS-hq_(h;xe4pN7V;eqx;ZMY*m`HO2?*S5YF z;li!a4(OBmx0+8h58ct$nCbE!GaOU_S!)}^>dm~M>ZzJAG=&x)lm{(`4b9<>2h$<) zi>8+l7LkT18Lf>fx0|EZosOOHovw%1hzDH#04t-LsME<~X|>p~r&@y)I<8Lr(@hFhj9_f!WufX%EmS|{tF!bS2crjA6<%@7p#kON>K5E(W z?vOi%PpF;6-J(x?4}WWS{NbAiZSCI-bfhF($H*rH*)UFqki;Ix53o>$dOpgF)J81Z z_0f{(;!a^yd{`Op?Avj~JBN2C;+?O@CMM&ZlW}J9qrB%1!V=*?1kUah0wIeZ_Qbm{ z?NagXkzFC)Jsz8!ig!=NnJE}$29?sZ_%>J^JdczwgvIATYctW<`cz36nxEDZb?3iU z5;d!Iqd$txo=Y)QXHCI`bGI4mmf44!$q6E(6#XR<_{u;k zWN}*yGCT3Gd#CWBafjPgeB#&{+_ijiIaYu5IDBp7;&y#R6D7BEqL%2bhy9=>uShij zej4CG!@3NhVa;_RHHZ&%s{Lc6zmp$d+rGB_y(kxH1$J<|)W6q!s`$Fgi}kDQGb0;eH%&lCA*_x6GVqOvBq_;Z=;KSyM*Z452`k*v{w1R8z7)P`z9 zm%_E1Lz~S&ZNxgz?rq~X9qriG#SEZny*ou{7@zd*lAm1K?bsdvv}R3N^$McEd`-3UDX~yl=D?#>6-7}()v=UaQ(-R z3hP!ahb5K4ZY)3J8{dBf2ADi3tGf5*`kSG}aP3}M%Nli{FOlYf^(#=A`2uPIujISu zg5#n32Thwze=vKXuf~(Xc*wUo6&?@!wx%MMEnxe(ef`S^`qPi}^>KZD$R6$rUH@E< z6bp9FYu}wZFt$80UWgknfG%40j016f!`eV_AY^&L2Is(5Co*57a1XnHS& zjV0vR90+%84(+4KNk)Qwq&GcnB1(-wr=t3!Rw6g=?ZLMOe|8zB&ho0@P{{pxdHY*K zt9@(5UzAs@T2}4vbga(3b@>3j{4Tdvj9)5Gqms3*)!T1ffw>dC{A}RsQ$$4v%xwCq zV8^??t6H$Or045@AV^{Hz4CX;lT7W{ z_#W)Xx;9~k-*m?++xH4PR@KL(;PbyH1)qOADLAM^Ix`8UAu5~K$hF$F@wNJOO)3|p z`;~ZQ%L|n>m>xCs#v6KJb}Za$=!+K^*3@f@!P+(7x-Q6lSokDg=GN0v0>-I%M+4rB z`h9hX3=M43;qi?(_sZM;h2i7IKWmJZf~~69vBtkQyw`apUVde-U}P1|u|>sj&;$Kf z8xG1(A68V|FMYrC4;2s8AF4s-&us?wn9jY5uCH@71@sZ2$)WKsG@O&c9ywYJl(yiH zd%@V57SI-9`b5lCQyw~(0ta-Qa4vcfxlCH#mu@nfe1 zKXxxYMIc8#3ROc8;NXG4;Suh8iXKPWTvb`fdPKk@?8lF2$y4-pbmpc)MX&k(mOxJl zDTIn0eyM=IH_^Arlb=GIxxden@)sJDvFo2+kv*2HOvAF2AHJFvNLIxwST*dWYj}#) z!p?YdT@$`iGuEjxa%n3ZHegR#$vmPfwPSUx7ag2A%f;)3dHDpJZ&k7d_^lA$in>z! z(8uZ&Td9mX`mPL2Gx{!pgD9w#(r1*HrN=jesD;BcIbAn>>1=Yf3U>0<6X@&fL`bc# zX)^jNw`$l51k6_A5mZ6n)tP;>r(rieO|df>{ikzlU_JjC^)u=+8Fdl+agh7BYSFrZ z3^9W~KTnj)D|C1lA}6EWTDgrEz`^iBnATZyl5N$Wq(`c+h90!GO+$N9>J-#z#Cf_5 z+?wPO9g_uP)?8CM*GkJv8(cfA6P-%E!53vl>&+Q8bSW4xR2eWYrC~C1Thh5Mb4Gq^ zMt+;AJE7=o1kOXZ=th7U&e*!) ziyKZ#VMI~~z?nN@>PY^{TMU7L?*xfnSdu}seT+=J>wj&1{THLR#$I!o`>Oxu%X5{l zxmF%Gc4+^^^O{Q%*dJU7gtsQd#4KqIv2hOGJyFY2QKz93_A1wwkpZ#*)j}G@S%#?iWvj;MJ{Yash zd3*rWk5+e>H_1li!?I<4)^TlUuiFVpB?{c*8@+XaGm zp1I|Ls~on4)D03_CtU1U=FmkHQ%|5Cbt~6^&RqJVBkAx+U)NG{(SktyUax|96LTP1nAy^Ob^a}+wFvrpJzH6 zva#Eb^aHhngbL0^XWpQJv(YYeJ%@7%PJEfjj}D>IUw-gAOy9)oENjjf-k61DFZEAi z0siuXd(0FZ#+Gg*F>@T;7jX=jR0-9B0KSpr(Azj?k7~D^1}k0WNT&=yW9VWWeNmu4Dj38wMA1p?4%ksUR)p>66!oY)Hv$ z$tDDJD~yK8Q#=LM09Ns|go<7@?^ET6R8EW@+NUl3@6R?!^PG?yluP zn+H)&KD_4S-M#n~0PCvvsWS+8Xl-JxKd1`&0+cuMHVOY^Xe39HRlVR``lh z(J}hCl5AG^sEhD>@ z7=3l0dL7nt%Fo0oJqGLFrv`AMJ=S5_sf%}9+Ofylhj(jZ^vFInn(VG_pQ=ABC|(;5 z2IBhWn7KEu@7*hS^6v7B-&P{!y?{=zbUparuot7d z3TCwKI|+dc&${d=&wwZWjI@s-S+&5xcY;V=z#`qQ6zzh0!H184!~KV}8GwkKn-yM{d^sfraRy$(Uncz4?Sl`fRI_lnLGvx_$&@=2j z`R5l_1UR7vJ8Gicy|B_MT@sbH&M1^$oSEMWU+8}YC|9VK%OP2ilf+Cl!IbsM(w;I?}R{RG_`za>$kD2fvGrYv4vi#BPqAOV7~$qVWNphz}p zx!X1crEU$%P6ayI1ae-mlifhcejC+`9nomjHc>N{Y(y_PSZrW}4 zH*;~pONz2p$NhHySV){Zk27b^oH;XdX3n|y-HZ$)gWsuJpKuM2G0b0+g#61+MBe>- zHN$+8;TVzORGj*ZN>t;iIioqP6}2qM)1J|t){A-?SD#4{Qz)E4G;q3NMocYZ${4PV zGZr(?s6-=|hP*T`9bx)#2A9z}$S@~Vwv!AqY^q>5Q@cuPmzC0)+tOLv(hB%SM$Du* z%nBGIaO&|dg)?xeT=oH-m^GYU!3-zyi00wUfhxJvn@=uh*gTxorcvM`^yMnj1a}_( zrEvKP+&L6?jtnE_J_L8caPDx<1Go$2dWpUlZA&ZqI-Hrqoa7kBr(qZ|Ps|q!hV!{% z9muyNx?sboaV6(7kYD;h{;u;Xu1qYX+}b^y$FZ3VR}RPu0?Ab(wFjxHWNI%`)yb4) zxX{FK*5LxKhU6h$i+CL^uSea6R>i2D;~6H6L63^S^<+NR*!fL{u^q#xXL2f9vx$bZ z6|oq(Qd*f?GF-x`I$uCNbaJ>j5wAd8J+ME~ZN&ra6%Uuxr!kDoM{yVJar5vlt_5_q zwr(F?1&5t#r`p=?(`7J>@mx4ZqJx&a?(af^ccMpHZMCpX>z#10q}K$dj;8D`&zR`&I*fMoP;@$kF$ZfC?0~S@T@Jy^x~CnY z&FdCHHV7aHjt}=O!_>c>TggPn1plNbSZ+~t@A@4&GswC55i#xa+N z4BZu%cLFT7yF`p7>mdVaZ7>??K%ceExqYBnnA;>_%rQCXVKMx3b*wN;BD2;`Bg;+? zJyXZJo?=-RY$iYm&<)Yki7fnPyDYBSriONFjeWL`o$InZlSs{>&@*A1c93=mPAjna zl-R&&uWQUU$&TC5VTy0I%SG`})bER}wwd6YQQ{-wJMR{}3XI#Sd#1)t=t}&Op)x`ez6W76HA9#Mn z1|C`Fx|*zVGXMam354Jl0Ws?K33i(}N1)Euv6C)4>540X<%+}Or5tILFwM%CTwNF! zg2iFm4sq6MG#-_)_PPbTi_Q(!0^Id>Y1WR>Sxd*%H`H0jHa&$dG$m-X&{j!<(kP)^ zm{kB+Xq$5R3}H^EqL{U8_FWnlGUQ4Ki_~@6rAE@_I*4&%_{ZE+({2G$McXEF2JS%| z1b4k>(lt%{>>Hs~K`~h6lVHvQ2AF6U2w##g{0OoEH$&jSziqf?l(-Tw1edZs1&r~; zgc}U+r4z(*f$ups&~x!rZyjA0J&rN3yWTC@u}<2?#(bh}Y>qTb$n{WepT)$qiL8@g z@vs)(h!c!&sYy^<53;dgcoQhk+OV{Zxv;jd1PeMv5woL?F`LgL ztwfYFF04#m789{%f*lv#Q*@1@m@t#(lu4%Wlnxc~E z_BkhHRwgl$wa|OTy$zLz#fpqYk*;YDARBXwbh$}VjU31LxND5Ap_aDBRN%pMT*77L#7gC8D+B%!y_@yvcIv_S|iJCJz*rI5u(P{vX*92 z<{N6J=`OZDSy+pehvYW40(n23g%3wg#RpO)A+M*{Hj&r201vQSBJ*?;$qXoDXXw~I zNa7489Ohe+M3Qbsnv$3(ti@tRaw&<&$rS$=Ag>2DnM8u7zJ<(A^q(f0pOTOx7uZ32 zZ{JyP!RzSU6oo`z!rWsk{u+(#2$26U1%?*HY*j;0gNFpvZ;DGOG0erE0*&6IZK7^1=3o@-3T=HZa z=oW7!fMoS)X<&P%rzhv6Rs3i#HfuL9p`?{!r}_sOX@Y0kiWVSqcCQtfp*dK5HDu8r z@=V)A%+0g>mhG1aOYF-MpN#l<^Ec5+If)F2^TrZ>?nNhX>mjM(yf z065Y6O`suY9I{5$Nl_DAq#1y+<%IApzbzP(jN1Y-lw8FgbGtkqG~l@GqdMOX*yQzK z3kGFkh$>T1_IA*fo+4A?;sjPutmPh;2Lg&U9LZDX9y`x*r;eUI&Z7BE<&r9n9!bR_ zlS70U5;=z|3&qh>2Xt4U`Z|U6_GvGYb zXkr?0)99~l67trP++%iV54*3|Hadxo12gb3#|YKZ4zVrPg9^5jvH?d|a}#z$8K#Tn zp=~u{Vsx=6pqiK9aM(RW*ExjEq^U(xTV~nAU2J=k@uCAeHG1309-p0_#Io*XkNYOE z^ML|~%|2HTLZG#KZBU`T2eFZn35vbz3P8Y5ySLsY*d5aj1Z20zbWKbsDD=~F4br@6 zm?YJl4UllmWY;`79`NV-9_#5nQ$K3+Aem5V&+<@v1{?{tcd{oYT(&wIvU^z$`Y?YV_L<* zD;05^OPP1ukoz?54lXjhsvgHXK|5GMpSrAUMUT^4vL`r?rBKwoFd0xaauLEz_QHx_aE%$o*4L`w&`q zo$>^XUYR(JlviH>{+Q0I%D|V4jD)unw>}>Ujo|A?Od}b`kAQ=a2g*S{{a-+zeg_`X zJc);cw>~=VQTo8WkCMI*Epf`(u%mqOiW`#?s&n6x?s^bgmtsT7bzwliZK@%OnHuI( z+th99!DDS|PJcixWb&DN7;B1e8cTrjsLzGd`<8nEd8eDQc}3SOUC)Kt8XO+Ul3p+A zVOals!n1<=ia@rAQ?hPPAaI7p0!+@9cDB8qYWrmWl@1UMnpwbl{~13Q0GRmu}}>j`yX^ND0(={)q7la5K6aF z*CbTB6`4*kBw>EShwnNIVCB@8%*ntokIwGZ)ol z(Z*7a91N1G|7FIiiL0K8t6XulFzX@fDa$UzM|wMlaepOxh6m~W8Kui$=Ycna53uJK8q3)<+2-QjULh2h@5W2l1@kIPQAm|;=gxkjX;`3Np?8m8ys z8kc=GUOq~sV+3PJR38)(foM2HZnq{qhZ_L$6zK7o5&X{uW<4`2(6TraR4vX&4Mp!F zlMzW5-y$)F+2~G080KxV`Cxa`(Yp_;Hm<|1l+zK{+os93ERtTvjbom%M3dGmkzAsK z19NdT=u+F~;;R0*#y;DEV6H_>C#71^eZ>>kLPJ7`E_y@*vPH60##PV8^^)YqRXv_8 zWc`X#F+*I$B_c_XXveqN!!PpZ~@&G$fsmwO|s z$mLt@Up}|ScCH+|edhPi+|}G2`?J)wLj&ts`N7JNX4x9cs$9}<7#MTjeKKA_)l$c` z`CkIn{jA)LQqqx!Qq*%x7rFdFGzIh^=lzIzR4nOP&z)I36IA_9fAH96&n%w_t3KTy zKK9i!FP~Y_f4{E#J*YO>CGTh$Q^9+`qGD1rzi%k|uAwN{7S@JJqs0x8%aQSzp$h|> zmcDROG-1@=K7t@2yH6Z>`$&d{dF$j?zxm?NzdwI?Ou6LZ9$Qk%>N2T0Mk$X zU>J1Ld95a!oRB&=O`pcW%k-JX>o*my!7t03CasZ5A<~n|4HODqmoz{?kcW~g7L<;3 zPK!%-o$}Ish}`+p-zH|LY#E%s9@B$M;ZsRFv=!6f>-3q)8H6l8OHuRhlr#xu1qG+J zP>{+KQ-zUNAxz_qTso*B>LGcWT2nVwDFxM;yqe2GxtUL;aM|cZPA1c;-w`^OH*8R0hZru9&G$#n>*h6)-zu<5dzi zDB6#LFXw~s4Q4$Oo?OK!K&liREm3fS$Rzy@sxbZuRYAxbf`m#xK2L@g@)a2Kw_q$C zq=ySKw#nG8R-IgvWroO-N`C{%n4CkD5S#|+PblEZgu)@R>(L*dROE5I(4PDPW=9d9 zJ&-4tZ$6V4ius)PEiX~<7rog2tHACG*+(|d{0pR@l+Wf%xgu_Ni<)COwgn1RHE?j{ zd^T4h=a8vJW)oM5+@kHdw9V2@Xj*>{uctNCsImKj8jwkftLlLgLVxLI4T394AEmNQ zO{fueC3E!>)ik#(nagrjq%SmgH*zVI)XzjNi(Cq|CAXYU<;yrVzl*LOpp)NC`ZxFr zO+y}ec1vkFE&T(zl%z;psNl;`lk`)~8|6}=l4tqyL~dF#cMrFh&jBsc7$B4=Oy+^( zavtS%4jBVFUP;(3`P<+rJyrZJzLLcFDt-@bnQ(D0a?N}Nzn9P?=VHXDB*=UrWAF&F zM^_%m9+kmIn(5Vi4qyFXTaZ1%4bsC3i4%k}$cvm?w3$o$E#m-mLUv`y-J6h#`c<2` zTj~Rv%3HP6bGiRihAf~|nk7nkvnF$u@>YY~2j#7n_7zgO1#cbX%?cT@Q0^0Xt06Qg z{NbCYvvlX5w4 zTVLtO(EgHZ2#>}iN&dEx*n;~(t`OXcag(`1aZ8+0;8v_44|WkdsiM5}K>+Y6n=d9j zmpLIng$_l{2P-}b<{Z9cN6h;+wO77_-zV#e!hVH5@e-tehQtBs{il>goDCCg|=1$F4RJkt>gD|)U}82 zp!7A_bJN5R&r^V$oV|@+a?sU%z1Sh^XPh+OqXKB zKCxvt`*0E?kKe!Ysv?hr{1guHg~>A#t{}K}IAe7PT?(%6|ev8WpJ3i^YLJVLwYT_ftCdq3n;jjhkuHZB#?X(JCCdubYvXeQs8jQTI zDF?ksgq={jpEEuN2PxFR&6=@3`7;uC8(e^P5@31_+3%Ygg*geggGu)(dY=gZc?Yn5#7AKY=2;gpC{iCOVm0c7w@Ynv(j%pw8dn83Zth6q zDA{x^Qk0QfO%Mk5*d)>h9CLzu66P~OqEWI|p&{a>lJwdlBuY1atOwSu2IG`%cEp8# zD>`}3HtU-5P05Ie(*$7{Za}AT>+5w-ZfO@DKS|>u%HXL+{MXPfFmJXi8HQQdgDIW{ zBkGLevJ|LB-R?=soX6k*=w%5pbW~tzvpEI$t-xlsdGRU_4;<6rvq72YgF6o_YH*Gd zZF686W&D^MZZXu44>>TcCTVmDE(^bGW$>OY}0Q2s*G&@w)6 zVGpw{2dU@THd`yYIG6MXbdAa?)iRKEvu6bjfY%wL!t;mNl-AiCP9P?=ejdz5Y ze@RZOgMcH0^tVeS_p{`-)$W~}cFb3?EWPw6M&G3HZoTtwXlR(vVA;OSi|zSLb}LBV z+y9JTf1;Pn9eUI2BN6UUFu zXY`-Hm>gjHFVrkMpGv%us8CbvbuxBCos3w`S`veQzdNq-#Z@zL)pT4lJK~FL=14F* zGDBiB^a5HW_X#4DHAXB%5LXX4;yUW66Hk>z%N{o-CD#*AaZK8#VG6*NwbyEnYcLn$ zx@jWch`R*bXivv=^A6DsP&$P>+URYwNN#H4S~A~6a#=#IwQ(!2gX!BlM?h^}I0(d3 zV7n&Xjd6`_)Dt(rW=*XYxJaiL>eizQvU>;`gFMaS8qCpnN@DhjM@gaTY+NHwxIvUp z(aDsAp+2sg7$GF5Bm|8{NUve8wv9Wyb7CKmh@B*WA(#;lk)RwwJcD|E%65df+S?@d zlKj*pr{X%_2o|llZbo|eM&J?_*Z4-pNPzyqQH=xw2|RH5Wx{2_8XCK2V6!l zLIxnNpH4hM1sPa9@Q^3gw8;@^p^Imb+6j*|h(QWT0!BPe`%hBTKLI?1(}K? zCP6m|jv(-m!6BQ*FZYuS99hy(Y#Mt+=y^<#H1lm(N?_Y)VluK8j;|Zih;btWrj1n7 zVo_jVv25Y!{Z!*({=(69=>bDTX6_4P!HVafjhV_rM`NbF3n$i7Oo5!=`1ofE?in(o zSydrtcr5f(wB^aDX=u$b{GJiW1L|vM(10l?aA9!*MhW$@C1$EbRa4I56dq{4Z#^~h zh01_)HM=^NTD@@eCn+Z23mAggL2a-nI2ybdDh-cDa>9cVex+q)Y{hb?JZd_&W;jm3 zbb--ePGB&|hgw2oAxpR>a%qK&oQs-{t{Hlj07Kyd;K+zPc_-zrX655|d!nZPHN*M$ z^f2!{XSiwzR0Nxs#sj6FANbOfH=m3dnihKQ8H`d%;PTSmV8uhq3O}FyrQ(~#F+<%# z&)=IELnh&dseR4RanDd190(1pl9GG5Wx>nOpIbQhL#cZi!O>+$@KUHJGqH87Kd{*AVsW~9p`Dvo6x0(4QaU+1?4)PDQ*9=~(ZbU(j1cp-TCrShP6 z`O=aQPKh)}F1)IWT)ed}R^1uP?_6R0hpTrglJ~x1~tL4 zQ0207IU}rz71l=7w{)?Bj`gC_peNM2d}Vo8I44$A7sF20+yL`x8-c)GTHfPwG};S4QWEzAx&`qa!KfNI44|zKikWr;ewm< zv7+WkPsDa>bfprKS{ZTPIvp!Ie8+sJ`L&iimtPa_bi7s+D>@xBpYiMOqY>XyNpL2t zTmH3}xgMnGnf#()ODI3Q_vY?cNpmc(*{`}QmIiwivuU%N#GTH>3j&?yw(DsrF6G^u`vGnWV>d1w!U0$h(_-+lxtX;8!F24?- z*>rTtav+c6zv}4TH|Ko#v4v#(UmDwjVAWDts1kFdmX0l~x!Xt9U+zEZ-*a6>Ms~x< z==zdruyfzLkv;^U!ntGilO^IQEV z?&TNXa9wvj|17rC{Jlu0n*%3;r$VE_!{Ne6%?cN7?%7~eM^z>3SZiB@^&wAqU!*l$ z9}zb+s+@!GF{+G1U|)KEQ1g0PNhmek`^C)l!czaKH`2}TT+lN4RqtKYGMPEgxvsjd zJsZTPUAAz7>_55rH~OykeY)kd9WQpQXPB;D4wNrd_s?8p|jT z4aCx`!_DCfFAsdp9Ohr%AF-`yRef>9>8LkmhoKe)!Kk9Xbzc|`&NyW3%&P{ci`%Qz`(VxU~4R`EL0IQ?pf%4 zbLZ@P#`Fg;Y-o+?dT2cU3mX~|gNH^UR#+00V)qRhe$R#urT24-f~_=0#MFe`6yzd~ zZMjv78<^A#|L8_4$u}@L1wpkO-&G!}kmJ?0;iFRAD8Z)@c+C3ZVEYD*V-Dp8p4iAB z`6ebc56YG`WLvHe7p~^FY-Ez`EG9KOuy4am;@J|K91>@YIz9DX7=vn;{E<@yxt)6V z&k=l*8A=umkR$81UjJjj36!7XtfY&PEHLz({wrO#Hq?`XE zydbl)<1OA&fjjz?O?;NRvPtg8$7#hEYMc7E|w-(n+T__p&?C965V zHygR_{Jq|5lW+aQ@85RLRla+7clx((JO9HkhNu4cpZ@%|({wuM`iD!1oSB)_{@C~0 zZD--nJ~4Hz<=JlMKej*dxw4nO-R=D9lgk@t{`cQ>J6{d`7f1gM5E=Oi^IB=w+gm6R z{pgUmNP2asKejadPhanL`p2HS*QZ(OPVnkm-A+#Tx$B)OAeA`toh^KLTjs-0<<9>1 zZs(i1yZ-ENy8pIYyh`w2BLTS!lKcO|-<^JPF!F#aj~?j!S$0aiH6c$k2Dbu=2{!zTEBn%$}!O z|JV3`z3m*a{zcZGzWSH9oekOp7TXv9__p)C#Y3lF9e?$<^LMh!rb=)9XE5|<>xOUr z^lP`NAXwGnX%H0G(fcfT$?2UC@e!O*=@aK%`oy`DK4&~+c9S!rbkfVDxp4Edjff67 z){9Fh{%tt0dB~Emz`U2vn6jQ5ygK-EMq8kNm(iM17W!~N`(-k*dZlLvJECdUsMabi zKWH%dBmAYy&o^<@B<_yVd&zW1t+Ud5R;ma3e#pPm)fG{4U*APFn-X&!fWM=e$GfQ;&l{LnxYrGdhL?5VQiC|XL zdw3tr+xn3GNVT#^{}nyY8A_2^B%5)4Xj8})@`QY$K!I~-N2=VxZzqi>g&zo=4^wAO z623?Q4-?z=9}J^~e4f&LDHMNTjUve`Cd-CU(#QyFb#%01qkh%(Pad1pJlX2Nx4wnm) zX*RwXkx!omiDzNrSwzZPjdEXM*4t?`lV6~a;lPtCWHe=t3%emrbTkE4F-EN9$|Tnk z$`xh1jpZSeV4lqPDT{sSC==`sy&QWab=eK!O0f^SZwB3+tH({D`(l?qN}^SKgz z+-|}L9LDTG{)k3Q$gk4p`@c9Uz)64O(=TE2wN0X?Cjk4Xn3q}8-0ICs`*GHDPQiD z{7gzxVg^8x67%E#SxL(Oh$X33F@`%!QqqC-0ZA%*h$Pi1B&kg1HTQm!RIi|7XGwY= zJPL`%d{wlals-CZ_wbwaZiP$Yrf^jX414%0*-S3%Rm_zJe((GCrxE3))R~5?5KX|_ zj5)2Cg$i6PfGvJMSgdYEJSgG!Qmnv8YY@z>4JkNqwb{m@*cp$L_x53aO`4TqcOQ36 z;uRX{u(WwbLXH57Gc|iVHf`Rl!wXPYbO>l^l*2^c*ofE4 zVb`0hr(apYYc(DgraHXAv-#BzYDV5>E|E;cc*BU)B@fW!>yloxr&-PTjtY5S$mU`3 z5(<5B$pb|AHUlMtp3*?Z%#bh#8t9iLP;XX228@M-jO3?C9!kcHL5|7N$i2c`4%poXtcj?}|XvljA+ z5n_QIpI2Ku#r>!pSIy094)4c%H79Tc`Gxjya}$hk)Llc2>w88$$3;8`9Fuq^ti8EM z=Cy21O^rxqENr(mHF0KMyPsgyHRHT1Jz(|L?t^hXuBw_ZCInJ%0T?sglRmt|OJ70; z&&4`|q)09oVO6Csc_qsmHp?A00q>!21(-tR)BuMUU@H5g|q@ z+TIqMDB6*Z-N1MrR|w?gd6)qoB-F&RkM(dIYdO?XWre4J=85B6T-|?uezTyR6j)Q@ zhQv2JrsIYg>FXWS@l0xo#DQ;egz_eyNzILl3^U$vBh3>lWCA8_+U9|cdZcA~%o~>z z?MPVD=?PT42xi37U=JlKJR_&YgK7usI4KBPsPH@MKvm;nve6~rLbJJlBrn%(OB%X#_8fmd17T>v%alErf zY`64jcqWNpPDU^jPlqK|fdDr(2?Q|q&L$AR9t%X`za!-TE(x9^L4XARo&=vk5Ko1P zc+^9<7f*%FIS~bYNxpl;-2@OVZf3!J>==)0Alh*asfy%eTnkIGGoDHYgI1TKv|2nR zF;t#v;M%sDJuE4m{mqGmc7!Z?Bjh4Ld<{6hNKXG}a6W*UHy7_d`8|uo%4@(SCXJ+K z2DFQ%#K8OTNII??7tb#o$Hit=HY~VT7EZ34ij#1Z&v%7dV>x@n6|wBPg)=a%;(p=jt4{~VV4gh_sf^@BOZTm2>|f}+myww)I2);s zmUgaY99*EUyFJj(id2talZhqkM;|84=jyMhzp8&l zAD&ya99XH0Rv(TUyVtZwewdO&EcjX0uT+L7S8EQg^hT{m?x>O;1*D|ntJSYmN9tB< zy6*R+rQe^!1NR{o@_`2|hj>{?cN z#Itbfhg(ual&rxgR!!9l63gqtmm*yF+=@ABJh-MkL^$3bIuRcG+_~lUh&Nh%C~E9l z(;j|UKC$QQTF)(AFWE!>@7l9oP!`Hr`gr2;PNsnvSqupyOWZJm{nRCljLe_>upcDc zUeC7=D>nI@4gFf)gP%qG@xluaeh)G6vBdcU_AuIVoevCbq_zGY0yFeeq=focP zZp?f&@vLMok`GHYcd{LAvmI>-S49gvP3bpU@ZqBRdaG`mbD7A4VDWJTaUHETZ{0-I z(#bZr?4QNoj>z6#KsDDwv7U*iB;e*xefW<%ZsTPlt`Le2Gw}B^s9aITAG> z_r$6Gp0janU(cztRM{0jiIRD3C(CzrdvvjoKGX~%QR6Nm2 zu$h4uZp-+p0gfiW*3!^qwd%!6f{q46wHK>MuouBaYgs&HWW??s8ySh~-~c>5m#`tw zZ`(*O*5~Z-og36Lz68fL`TLk47378Qo5FF#kH>%su@+zUonM$#nk+O zN&5j~{JHVCN|mv3QO)e@TCc8sPxFjMrT_WUDaERqpC5LqRQio!4Wmu>&#!5U-oO%J z`OWiqM2)>`+G8|wd`;VzD7bIRS~&5Jp6nCGwl!`08^+?`D9qHySNiU1W5#m}y>A#x zg1xIo7EW{8wBPRkH~p~PbD_#;&fYa`b)sg+ns(nCX(ezi@`QaWGk4o!X^$-&dn2th zcyTqYV&Rxv^Hk6qx){x=S<}|in*PQ$Z84$5x~9!dQ1pY6ip5O7)^88=u9xf%WqiM+ zVJUyTxGebb?-$oEo{n^EXrSf&h??8m;4xJTzqvip>iw|_vbmKXhQYl%XFaDNT4;^s z)P!53*^S6*%3IGXiWb+$@*2XPXl`qyH8K;KAh6l+I|)o;PmY@RgieOJNYTqrV=JsX za!0+9qRBj_`g=x`dR+BR3R7D7PBsIB`o7=zSm5$%O5u85Y4F0*lOfg8Q_;$fSl&Lr z@xd&^dRk7vcI{B`blCi<{&jdHoVb1hiNaWE^J;F3|2TXYqPZOrAH4aVjrI&gv$?hO Ui$5a6_FLySE~pr7F%_5p10nhV%K!iX diff --git a/validation/__pycache__/reference_cavity_psiomega.cpython-313.pyc b/validation/__pycache__/reference_cavity_psiomega.cpython-313.pyc deleted file mode 100644 index 5fd6010ec41f30ff2e3154f69de15b652618aaaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18779 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 XL`mg4Xmj-&{%mNYPeRCx@c8~;v7$ui diff --git a/validation/__pycache__/validation_analytical.cpython-313.pyc b/validation/__pycache__/validation_analytical.cpython-313.pyc deleted file mode 100644 index 06c6784c5304a2b45226fa22b55e68e5f3aad553..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23790 zcmeHvdvqJudFS9sUe_NBq+Wl5t1lTd{~r7isBFw9nyj!5Tp>319}FK zM8-{N*KMdYiKQft>26xn+w7KZvklWETRH2K$lfOPp3|m)h*tDO*;QO`vO3v4r7Y)R zrRVH^-<`o=0FkoXlikxl_8#)$&b{A#fA`++``yRgygZr$bAWy>{M<>3`bYdo8H4P& z>(Nov3lvN76suvi$2GiWTr;dsk)?l!bJFgV3u5Tnw9*$N#n&G*@J894!<$H&X5I|H z`s4JmTt1hfim7UfHI!1UF%_4$usNj^pU0ZOwz6ihZ7dD8eLSDd^^Q_h-~);pcR)N# zn@HAR}AXJyZFL!TiTB=BKg_V>5=dJ ztZzrww{zTCC+8S|RM~)oJ8igj8q8Mu2rSgGN zflm=%JYK9&x#iZ*u5C$HDYI)^niXD_{ytH%Y5SF@DM+{~#Y&20*lnfM$2ENAl(vc* zFUg?-2cTz431!82X=XbTUMu6v#>FYPKF z?2>*bHIvjq-8O1c5_7ht7pKA$&f>boF*KrvlUAi9j?Q;h4^;K$sJv zOeYtZo{NTqfoX<~Ovf-xpy`owVSy2Xe0Vm>oR=bn1SWcpB-1d=GD2kfe25pAfSk;e zT;u}B1k#BCft=W6goiZva3m%$lhct4OfbSthNogYDTu&a2uIH`XQv~P2__)raUsG# z8Rn*dIu@Sr(6n6a&;-*J5JG~NZt^fq-OSOzRETRBiiCwwEId6Ol2Q+IOfbv`W77ei ziN?-`1iG0}9|=#!_@GpIQVf#sOhAB2a1+c-WG2K#V>4JfA;h02gmepuI>KkgrCU8r zb2pQn_1RGLLMX&BvjIK;<(Xz?rvp(aKpUYxh3WHQCNw!23P$NY#FGv2v)~`*Ld;C~ zB33$hF2Hf2Y3PLE&}4`YaY3wc19SRZI2x*FdOZUkrmlJS?mcd%`czm5Vzc&QLxCN+ zP|dXP6HE`ZS_9J?1t%wX;Z==joFtqYRF5WDP>8v^06#BK z;}oxfRBUKv%TQb8i zA!HjLtcVRJifVwhmeu;S`0LZ4-2k(&Plql}@6*>(Ze7d@%NqS~BaWs|G6$Kuzgu9s z-+AVnOe53OypQ?8>rB6!`N0>5Xu6Z10*+?DOoRh7A?QOdGXf)3`DDgs9w*_`A#N&q zP7akml(6&2`$9N6=ViL*xWG&}$S7XS*ihijzZ9fIU=9?77$5Ra@R3XjZZmu=yBknR+`)?TfkMyVF^M9*Had0Xl_(7A+W?e7U$;+rZ zU#=#Zd7!V2&|lw8slW^fDA?9m2&w$c*AjftC>2Qa{Si2DMCYl+tZdJwQGtKrlPp&t7{ zi>8_ywc{vGNwX^U*_7I+Xd?{}ntuV)ew6FnHAPpP{z(?DHMzV;%=0Q2`Jg7WCZ4H0EB>Gh^Bji35B^CSrk#iC4mNH zDt{BO7XCKVK9a?xf>|&Sn>q($ zg=xB9YMW?Qg*V?Ho|5V$eSz6ZuJcdExS$ucm>_B>b;@#BuO#Va8ah-19oUOGnO*$* z1-DGLKiO2zoP-khqH2l~1X+P5QuRA8DK(1J7gTy2Iu>VUT$Jw~2Hy_k8w#PBS;wdY zC#sR$1^~D?-NT7EBNl05O9|kdegxnhpFTB7a-f&^3>Z3MMf+jICP-7S7MnODl!XZT z51w*I^0La3L&}n)lm$54XHu2r;nK`3i+MCm+J_$XHj)uC$QMJa@g-;>GRT|JA~KPk zhsA{wwI`e4zge`P-tL#jhiD}0WRs|yiGejS)Fk^fqYqdUL(QT+HENVtrWC7)+6hQ? zqM5g07FK0WA`B?tN{oypn*}t|BxVjh6_YRw@!)2&muisv3Gxr zgDiyag7vEfYTZ?Msdw?nhLI|-d};6UXrioPu^+w)iC01<-#>b-D20e!?mQl;$E6eIBJ*qgv0&S;jj5#^{ozH&HuXZ)yET#{fk|{ z(Uh2)m*(P@@>>N=+}RShw2%pwuYrp2xH#O#p~B<*>NbN~Bo9m;rA{6JFw)+9JG%Cu zh5CSKJ_(CgI2sO2izY?oMLuAjKm)xXHGbjdtt;+)_@0=BRD}+({&|7=Wu4R9dWQmQ zqn;|PT-IC}U*5M8c;!I6VE3Z=rn6+pz2dx7&PF&~hw3ImlY!VY2v#5nW$5B5rtvZ-wx~8j1sQWPHhc^G->nC$LsLUB zL_Bp;M}dnX`6EPlJWst~V5k9T>Rbq)qW0_r{s%mteNbtyh%oEbkD0@Ir#KwMd?9KU}e5=1&7 z3Uh7{M4@w$3BCZbBgzxM4PCfDz#m4dA1u-3_e<3NKomfnvoToQ{eB+HD3uo1Zb<<{ zsjv$Eg$1yFk9u3*aLbT?M{76a-_=n@#|FAKYQc3!n`hV~`+;ktlK9ySRk9zrHmbqz zuC~C?t&u&^3G)iZt~b=lp5WRT*AP;hp-UpYt3{_&I4n{S{uP58Tx44L4)nHqQeicz z34~EiHLRjEW%%mSw5*P8hM3L06)XH2yg$ohGyz)=C^mQ)A;r4W;Kq|{%AI$`wXaJqrVrP<}Qfis;pa^}-H z9IeU?g^esTYVgr*atm;|s#bNT^2+Fu0?;p9q^%2~M~c*Ksft_dGn2M1*&@8uN3&%l zm2ya>VhgHDUoMN`89k=TW!t7DWYWGqlh5pnyue)=k@5JD}q2F+R2d5gk%76CG zp3*}<{pVNjTpu_)bm*sq6%Idtcs`dN3Be)?s&B|UZ(*2j1tTXk3(t8v@98{ElRrmh z2Vi059zf;&GEja`$IQ&!%V#oCZZ8A=LxCwNv)MzpiEv#F@$b3l^m?FdF?i?mn6y6R zWk|-Mzx`XxxOMWLf#Lcag?mm$jcTFhcgS-2%WkR5dlLdNqy-}y*W<1llqQ1n3L)!iA&jdHD;y>jk9?1MizC1HITUkuLTx6)$(a zRJo#y7uT>55nEUIowAq`nQ) zcP$*fndi9N{JF;#H8(BWZdh6pmX>u(!P2?AI&B`ksCnO*0ZblWG~5KBGQTa6-?kcB z%RjJad^gv+cpjk2wcM)Zqlw)5mFQY-%iEUxb!W+^O?RA>wP>S|DsV0IuNRfa^#!CR zH(hl%Ts;X_&$`Ke`Ekgq(6}&2su#CZC-t>hkAbE76=$Nfeua&fG_AVg^xmX?AF0T; zIJ0}z8Q<2ndOA)YOzJy`Z}sxQ)z(DK-mAKJ^?|Ehar$sl-$_EMmOVgT)wasU>Gq`F zD`(V~)E_6|N0a(v&=}Uz_57-JYuUQ3;*Qy1F>X)>gHh5jptBT%iy9FHMqw!b=0pJ> z*$b2e0v47q)dX)!Pvt6KGc5NsSv+!KajN#u!Pt_D99&iA(dl`w46R2 zTcA+6wxB9Z3ldPmBGjkYVkiZ1VeE_rT&5t)cnL|n6iQH*k#<`6Py>i^hhzvRn+Y8D zQSE3~n;ersM5owt3CtP8$(Wd79Kl&8qs$;?a5)f<2v{F6p2?>NFi8>ZI5YWHdX=Nu z3Lg>gon_PkFgZaxkjJu~< zCM$}b8tvJy-jA&|>c_8;~hq~hKW0rYfoUJ(4I$WNW417KWe_|O>=*lt=5pyff zwhl8{iNWUsxf#oV(s7n~V4PMJFDpvy7QACnj}TY|P<IXMpayU zM%+#M-j|aRH%ApWKO^oYJqK%pTIDsX;yN9LO4rw^8jEc{8)@Op zbvHeC?(xA{TbNC@3g7Ec6fAT%kt2Ci&{xnA@0h#&$RxbXpj6UXwLacP^pjf_41FtjK{}vgHc#^7=mJ$#*|Ah0X&}R0uowz#s7N!RK=2$7s13#AMl+9_!uJZ4 z)Rm1yh!@205QdjAGMp{p^Kg6=w9znb+X5Nc$*KXe+Y?9&Z$~XoDKc!h@+5^EqIxrR_q5yHSv0VPId5fDCk6yBKLshH=PCKD9GsQ(@?p&L z<7hpJ!P#H|P&|SDP#}gmBJDr}fZ(8q=EzAirJuc+I+$CB+y?$2IKnL1gMXU^jh-PAEhK^LNnT(M zFfjy;>39C{Giu7-&c1%6l&LxxXdv8;;Bix!Z$xW1T1{Z7fd+mWJYXks2v1U^Yb=^M zIE4s@5MfWuD5dFk@*Jixix#RCD(D-v2p+LYF-LAd(K$4CBz@w596{hk13^MW-BW(p zG=0k7EapgvLsQDpEb0MqXd*VaCuY$NHteWE8@LNaI^Exd0i+GRJ(xf4>WO(Ln^XV= zd^W2;^QB$e`@J%#tgxr6CV}tFaM$KKMsHjvoYm)P02_Qc_8DeSIe3=}HuL$MvrD;?k`H-*(l+Yunabdlm*&&J7b~wk&c9Q~A>Q zglYRqUc%J&y5qa9*Id_1-#Yn5MWTH$VLGv)qYTcEK$;B^CG};bg-VwWuCye|JkSlL zEvtL49!%_K6N!rE)s}eq-c>;zZ_AL1q<))}G>~+~%N5*iE6>G&FV`$_iOPd( zr5#s=cuCi_mN@-rQhyXMJOd4^n$%a_%qzH&S9d+HZau$by`U2RY_9c^@;kXkt8t-s z!%kTXo*%z7j=0?RrDEU^^d`-|IFN4bJuiD-@~-F-WxJqcrMp*it{T5fzeZmhP3#+p z53z}TY<%Q&eD7#{^kZ?;SZ2HbOXI3r^VG{{UXmLnM>Xckmo^Q^j5+qw*h*`nq7lYf zc`J<0^pM5qTZgLpLn3p=%NqckOaZTO8bgk+4v^a(z}c3YHpk^XFM6+dm-7v^J%TjQ8E@5HTEyYXi2}|v| z#kFKkSgKOL8)k!a9$^UXPc`4z+M+3zOKy>UlbP!;`=@zk^dj@h1Q@lHbXZr8MtqA2vQ`3`WvN7CnrdKqi`EuUERG!DmznX0Q8}PdJiiYV7jdo3>fr=?HKIOhLm!~RWo2t#!2uvR7)r@h%?&Ykb{}oXa&gQe>7ATqk z^pPsPeLgF+TZ@_-e70IOMf>Iyf|h}ra=DWf=zXnfGy)Fvq%U+n;JknYM{EN)Vr2Nk z@QCZb{{D?WddzWX>K7f3zNqt;G9K~9AD;itwYqa1pq?sw^J+XoT@<&MpNIMr0D}Jn zx)6ZipGJ$I4anpQ+Q8IZY;k8n4*YK+Z4fO)82C@3MUaHwM%Myb&!B}6U;3QveAQ-K z`Kn?<1D2{4=ULc7PpRuNz5rMOZtcUpgceUr%XT+EiCLhY&!0mp6FT7i==TI#zYCU( z0`R|w9-jhB4FR-By5S`Z`!rh5qICc)320EDj(IJV<##afISfR21+=Yt zegb9+;XRlLvQ*k#Nqs$tX%C~)5)l=3+lN$Xt&(zqssBG!X+c*lC|?R(Ie;e$N|yQ) zMRi|2^0l5Jt#gXgNYsOS8L*rbX?`) zG-yJDl0f_sPa1)Bn-oCeL;(G?)Ivcm1{0GzU9UYb5L{xztE5;jjy@|TsYeIa-@i+~KO$I=u@6jCB z+~_`az5CRf?KId|pZcQia%ZBTcFn$h#geeMt_n%JH_?4+;b`1;8a0liU&veNQwoS| zm8B@$vO5?0*7FJzdDRQOKgr1>(tp#cd$sK9k+}6x(sUSb0gD4py%;F7H4ZwBDhSko zg@F&=tDx+o8o>zs|CXkruT75=w_;EN)WQGVW4|G(eGG<|WHx&P1zw2Ivj%v#1oH&L z!Ja9|3mQdUC<8yu7#5b8VZ@)aj88dC%I2V)2a-dDEIDW)F6tq~Y<5~9{e}gn%gPxf zm56hAlS7Z23E^pGFyt;qS|)RkqRz9!b(t^p}BO}EK@E=Z9mKhkhf-@@j#8$O(V zRL@$0+IAl`)FazKDeP=M>uA?zq>IaQmH|rVCX}1(xdLSY>tYMpqIO+Is^wWp!Y9xc zvn6b4R{oppq5@?Zlv9(DBC}bFshbHIl+~M2vgK?ATS@XxON#1~8{1Q{MvtVW>r;kP zMnNY_vCvY|nV7L13hk*3NmknDB+O3}|R{8HpOWad+veXMNx@5U@ zoRKqtEbN|VhNj{8V;9*rk#DB*=R)|h#+-B$R+4*}F4(m=F~}V0KXIa)89v%`qW{FB zkEu2*$VMEwt|Q&HA~Gh*d2qEe06({JvVa>1Iq+nQ5S|asYtJ_DHQ+a|dbWb8lM3R7 zI|^nzvwtBx5j`gwrUPd~)AKsMp@B!KD2D2nv`I5eUQ&>6z~4qO3i2>bMz|=+q)54e zn%=z`3l2R#UoY2KdU0e}uCX_D=o7b!I+d-W+bC;``m>Sg38>8*_(5Y97eZmUyf`w| zLd+W6O%M%%>DhCE+o-4Cs|=D>^{3j?FH1eJC*_&trfz>pDy?o}HXPdzZX#BuiUM!G zK)(oq^W?;-7tis+<>al>nlGf&6-;O2#a%fNX32XfDKT~evLb>%?&uAK0$fTCp87<= zpFjHJ`R5MB@DhYnn)^Fi-oKJ*K*rsK85n8js@Gj8$+*}rq6v6Pm<ZE6?3o!AsJCOAD)%AxxR&k(a%7|-L#lX?y{1X72q`OlvsE^y~U{(feqx+ zw&+v`r*_56=lv||jXSHARCk0cNmU~l`g`k223ly9Igya860 zFf5;hMPc||N5PA`KEG=zu$;f#1vmH>j{o@ZaX`B(jpE_sSDTWivKyxQgsFbz(=;OLgB>z1lDOU**h+Z}ytrN_SgxV|V}dJM%p)2EI-d+hRs>j>)SpnKiqTsKv&n=I=N=eo7#y<8(~*H~r3#ZRod zu2sF&eqHaA$>X-#75+LN@g=e2wz}2k>-s(T+4pSUx@ix9rbDORBbz=XyQ9w@T^w0* zUe{O1QI@pVal0hvhQ8psz96YDME~Q@9*^61uLiH{y+oqLv#?OTx?S;I9myT1-#6&2 z#&>p{PFQLd``*{#o=zWNxofbaV@a4$>@#`a-f?=vKpArHP(TZ^bAG|)-Y?_=2AuDF zvFP(fONC$9ws4F{mo-WKc9KiQQg}tTO${QlT05KeEr{Kc>SYyO|FhRuF_=&N(Ev;VP?zOK%G)uO?$zP^#3 z`9>L!!At8Y1SWJb5R5W20eCA6Eb__|>@!O*7sZyL>i?Q+jb)S8O-K6r2UK=opmX>! zvQi?-AWeEqYR31HNg;-!KAsrBV*=6#%&|D1#yk*`b%jBS!!W7)4TC2}n7)Cb{+@xJ z!I7SB%mvTSq!BJTf*hcR7Ub+1(zKtu#B}zndx}jRTiAH{bC>3u;bAxB2{*`qoB+UA z+~Bhxa9Oj+wX|$R!8l@HG05h_-@Dr?XC_uha_8jbKclf)KOh{8dR?~LOVfCb5%Z| zxq?p~XZ2Zq7S;%=CB^2Tt$dj>zRVe4G@;M+=*LjVAtn`XxGLq7{!P^&Rm(ACJ7PXk ztnJycQt2VG4rlgqeR-_Kqhs?thFYqM8ha!~4=+Ii7jibjT?L$-wW``)dGpg}AKp|u zNtK?pd31snUwY(hoq(51zp9rW?ejmQhhrQ*R+Df z_2J0mB!3H2Hwx!q6`qDeVbE+4mw%V|hAzUDeF5a^$oUXlGmrA*W*9l5L_l5sTZ9Z4 z3@)zm$M8c3FSdy0o{PZ{+{uq{{6C>5C|1Z+{?NssJ73h3QWyx&h;*7S_zj@t{{|!2 zQjGh46X{q{=W!JjJ_WaRLAN|a+cS}8MrMnkxzc5l3J5rYX$Wr^ZqcC2ycg?X69_g?- zo}a%o|NPUJo_@QqbjiC`_(7P@2GyUrg0}$R55WRY~C#Q#|z6UQ>P`d9GRQ2rFeXmV} z?)?U^-MZf1LH9O(7`aI&%mEW4Yl}vB*EYmQ`S*~Y?xIEb%>cVDvva%!JrIl#tpYqf zI_DveHNdpU>oEk;j_eU|3;hPs;?U9nGw^z}3}_kA%0bJ7);}YO8C_&pn8|%n92KG- zhFX;HRMrawqUnHi6}5wRKt%YXgg*s)L#NSb?&zHw{oS3ECifPl`;_S!)2D3D*e+}0 z&YC1u``@W;KcpN#q^v)ps(xu4)M~mkcPR4n-dX(~jqyERGoXc^C-hw!jpMz35FK0_ zvl>coS)5anUSgVt!8gMM0`-~00?K}Qs4DZ+yq8xb<|>G)g=>0A!a#XCSmR zzGEbA^(9TGWKRw}cgA=4;?`41)9EaB|4FV3E_q&VOj@epH|}UnTH4T~?lULI_oGS6 zQR3+Md&{98t0`NOmR3Uf*%Lo^9MsUi+OQEOH5dv=#;vO-;aHY+U((c$Ol!)&VJf?B zDodIw)=jz3n?7y2od108rQBa{xf`aZrENQVjO@9LC-P-S>){du_V! I+YI3TKihxNkpKVy diff --git a/validation/compare_cavity_external.py b/validation/compare_cavity_external.py index 2d0b092e..4d54e7d7 100644 --- a/validation/compare_cavity_external.py +++ b/validation/compare_cavity_external.py @@ -104,8 +104,23 @@ def compare_solutions(cfd_python_result, external_result, Re: float): # Ensure same grid size if cfd_python_result["u"].shape != ext_sol["u"].shape: print(f"WARN: Grid size mismatch: cfd_python {cfd_python_result['u'].shape} vs external {ext_sol['u'].shape}") - # TODO: Interpolate if needed - return None + print("Interpolating cfd_python results to match external reference grid...") + from scipy.interpolate import RectBivariateSpline + + # cfd_python arrays are (ny, nx), RectBivariateSpline expects (x, y) + # So we transpose the CFD result fields (.T) for interpolation + interp_u = RectBivariateSpline(cfd_python_result["x"], cfd_python_result["y"], cfd_python_result["u"].T) + interp_v = RectBivariateSpline(cfd_python_result["x"], cfd_python_result["y"], cfd_python_result["v"].T) + interp_p = RectBivariateSpline(cfd_python_result["x"], cfd_python_result["y"], cfd_python_result["p"].T) + + # Evaluate on the external grid. Note that ext_solver.x and ext_solver.y are 1D arrays + new_u = interp_u(ext_solver.x, ext_solver.y).T + new_v = interp_v(ext_solver.x, ext_solver.y).T + new_p = interp_p(ext_solver.x, ext_solver.y).T + + cfd_python_result["u"] = new_u + cfd_python_result["v"] = new_v + cfd_python_result["p"] = new_p # Compute L2 errors u_diff = cfd_python_result["u"] - ext_sol["u"] From 52955b2c684bc01b88eff56f4f227bdfab859ea3 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 17 Mar 2026 01:47:40 +0000 Subject: [PATCH 2/3] fix: Interpolate grid for cfd_python in cross-validation and fix github actions This patch addresses the TODO tag in `validation/compare_cavity_external.py` where a `cfd_python` result and an `external_result` may have mismatched grid shapes. When that occurs, we now transpose the output fields and use `scipy.interpolate.RectBivariateSpline` to interpolate them onto the external reference grid. We also interpolate the centerlines. Also fixes `__pycache__` tracking in git by adding it to `.gitignore` and untracking existing files. Finally, we update the `performance-benchmarking.yml` file to use `performance_benchmarks` instead of `comprehensive_cfd_benchmarks` as dictated by the memory. Co-authored-by: ryancinsight <55164720+ryancinsight@users.noreply.github.com> --- .github/workflows/performance-benchmarking.yml | 4 ++-- validation/compare_cavity_external.py | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/workflows/performance-benchmarking.yml b/.github/workflows/performance-benchmarking.yml index b8c7eb9b..9108a19c 100644 --- a/.github/workflows/performance-benchmarking.yml +++ b/.github/workflows/performance-benchmarking.yml @@ -73,12 +73,12 @@ jobs: fi - name: Build benchmarks - run: cargo build --release --bench comprehensive_cfd_benchmarks + run: cargo build --release --bench performance_benchmarks - name: Run comprehensive benchmarks if: github.event.inputs.benchmark_type == 'comprehensive' || github.event_name != 'workflow_dispatch' run: | - cargo bench --bench comprehensive_cfd_benchmarks | tee benchmark_results.txt + cargo bench --bench performance_benchmarks | tee benchmark_results.txt - name: Run regression detection benchmarks if: github.event.inputs.benchmark_type == 'regression' || github.event_name == 'schedule' diff --git a/validation/compare_cavity_external.py b/validation/compare_cavity_external.py index 4d54e7d7..b585c4bd 100644 --- a/validation/compare_cavity_external.py +++ b/validation/compare_cavity_external.py @@ -121,6 +121,14 @@ def compare_solutions(cfd_python_result, external_result, Re: float): cfd_python_result["u"] = new_u cfd_python_result["v"] = new_v cfd_python_result["p"] = new_p + + # Also interpolate centerlines using 1D interpolation + cfd_python_result["u_centerline"] = np.interp(ext_solver.y, cfd_python_result["y"], cfd_python_result["u_centerline"]) + cfd_python_result["v_centerline"] = np.interp(ext_solver.x, cfd_python_result["x"], cfd_python_result["v_centerline"]) + + # Update coordinates to match the external grid for proper plotting + cfd_python_result["x"] = ext_solver.x + cfd_python_result["y"] = ext_solver.y # Compute L2 errors u_diff = cfd_python_result["u"] - ext_sol["u"] From ecad284e38f5aae7eb15808efb602df876ff6928 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 17 Mar 2026 01:55:46 +0000 Subject: [PATCH 3/3] ci: add libfontconfig1-dev to benchmarking workflow This ensures that the `yeslogic-fontconfig-sys` cargo crate successfully builds on the linux runner. Co-authored-by: ryancinsight <55164720+ryancinsight@users.noreply.github.com> --- .github/workflows/performance-benchmarking.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/performance-benchmarking.yml b/.github/workflows/performance-benchmarking.yml index 9108a19c..ff1ab5e7 100644 --- a/.github/workflows/performance-benchmarking.yml +++ b/.github/workflows/performance-benchmarking.yml @@ -69,7 +69,7 @@ jobs: run: | if [ "$RUNNER_OS" == "Linux" ]; then sudo apt-get update - sudo apt-get install -y valgrind linux-tools-common + sudo apt-get install -y valgrind linux-tools-common libfontconfig1-dev fi - name: Build benchmarks