From d3c6b9dbce3d79d8878c61a197e4610ab2de2155 Mon Sep 17 00:00:00 2001 From: Tanner Frost Date: Sun, 21 Apr 2024 19:13:34 -0600 Subject: [PATCH] Timing graph script and plot images --- docs/TimePreprocessing.png | Bin 0 -> 25954 bytes docs/TimeSolver.png | Bin 0 -> 23796 bytes docs/TimingPlot.py | 56 +++++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100755 docs/TimePreprocessing.png create mode 100755 docs/TimeSolver.png create mode 100755 docs/TimingPlot.py diff --git a/docs/TimePreprocessing.png b/docs/TimePreprocessing.png new file mode 100755 index 0000000000000000000000000000000000000000..acb5043efe887bedfaeb3749e0204c725e910f59 GIT binary patch literal 25954 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 literal 0 HcmV?d00001 diff --git a/docs/TimeSolver.png b/docs/TimeSolver.png new file mode 100755 index 0000000000000000000000000000000000000000..a28ead6c47fe227a2acbf4e2338e28ff2f60fa3b GIT binary patch literal 23796 zcmeFZXH-;M)Fp}{ARwZW6a>tINKhzHB!~*AP~;#PMG%T4S&F0}CIl3aP)JEGGD?(C zaKV5QBX=-e@#>}TxLnIEc|mA6s9fB%SmN7|<_ zpRzE!Zmo_(MxQvPmcsgkR4!d|zu=x%CvrdR&2k6FJx5-O-?I8*H@IRyy14_cJ-0`Jm4@bk`fdvH2mAl7e?-KjqGNHJ)XGiq zB-{3qR_J$Z8;{rc17J*BQx(i+wCe=M$+xw2Rv`(JO8-qF?nd4EX@zN!jZmaW&Sv(-AjXhl}6l?HT-@O z7a#6)i>ftEU?6U+Q_E65tk2bnrdrlTrcdJiHav?{w=1xo_dH12!dT?J;@r!sdQf3~ z<^+#|s5I#_acLm7XKEt9(Oo5I7lkH*%b)L=`PlT2cki5Pct;~6zjzG#-1;KF>7Cyo z*&B^r80$We-jmj_L)0*r*P(hutjdCm{r)Hvz9;~m7zDo67Uv;Nigq-~- zEUea>cEz=FeK8;1j0tn-dY#bix4GURyVMu%-V|_udU$zucybeC+WwUzTj=py1$A_Z zZ`qf)b7d)t)e6(p=}IXs|#l`@eVYqb9~ifz>{E5>YCmwjq{aBv%1zxwa6U3n7f5{Iy1MTM-?yAZO?1}{nPWJ z)RHUV$J{lVq{p)?-20rAU4FdK@1bswAA)DSjSBan{Vf394S7aujNox{L%(>y7zgDZ|`kQzdF}EUalAJlRb(% zw?7~B+w7kx8O1;EWR6SF)p1de z2HiCuo!}JzOw3%Hqh^3UdtOe-2zRlij8lNA*k6ki-L1mHLjePvMt0Xj^Q)iXRr+5! z4S$TO3SfwJ>on)#mAwvS-94qRkE%pQ^SXCcnd;Xpyk}D{ z=O9~%8dJmPRj>L=uHXJe z%+}{41FZ`jb8_nx?P4nqpHq(Ivmf1KrQOD&>6kg+qB4`2vCiM0EBCl*Zuvr8=rq&5 zr-A-(ooSyT!7x3omy0e8)oI-7K=7n}=U;WFY_cf-V1dNYHd)ls>C*9>^ht>m(w`V) zIr`;M{SO3Bt{li2m8$JD^PAiVO0_caI|o;LU{v}9XILn5;uBr^v9l8p!1FtG59rQ> z?D1xCn;z&FrqjT0$DXfFr&mW^+F+J3Zfnf2?aXmczE!&66e_=Q2jkU#Bqa%Vu(BV9 zHyxQ1CP7gQBzj2{`Z^zW|OP4QBDtelJGTA(*Z$2{G6N>Zp zL1(V2Sta(E+Y@?QX18cmz!33G-kunI(3s0ekkW`+tYm|U1qX_NA!43N(5XmgJf1fr zjb-si3X%l-md8&#Qk-2clUQ*%6JZMB#JxY#$blT0Oh~MOr{}!@5^3wT7?4Eg%8a0;SNFvL=6i*2{))U zyf4LHE#2_L(`#RiuEgC!*P+fI zdQusRQ##hg9+Q1vdBCbH^eD$IF(paM-4y?Io_1Ds1#E4EV9|(<%djUmOQyZ+{+4DL z&&`dcN_)1PS4K@-EFFwXZ)Ap_iffI#^$^oW4`xKTAJ}ns0#?+P*`yP?{tZqX?XE%< zxpApqX9_QlDW_VVAkzmd?=Hq&dMh!9BH0*n2zS2!7{n#&uA)CmCBd3jz`b0B-5@24 zrMzy8$;nJzGM}&Hcgj5NwP;t&eqQ%{6D`vtR@xI)b_ch5%V=ZpDYmL5B! z9G|+dMZ*n}$JPYRh>C!UV>~-UFf3}h&i!tkB`KL+5JI$iU$|ml92gvQ7>)BNiZUw1 zSc*0CTbDK2vPSgU zoZHJED67(@$!wE7P$l6PQ{4i?dgf#pGGpxZ?cR2rgMUVIg7(wX;Y*VXTCH6yd@Ve(pCd3^bg%F-D|I}8p+$`?jS zuirZNjadCeZDxA?WJ(lPvr(ZgZS{MA3_yp79k9NO) zlu@&6y29&?j}XoKgnK;MM#UoT{jQ2Gj1PX;Hfe8OS%{^Kzf+_Yz~32Sq`q}KYtmGw z*H$CiZ+rQ$_j>wN-V2|l{!SC-U-LyccDlV>u+4R>?Q_UWI8_ddCFVgtCNq0Nu&M15 zZfbwN!fLgCYwWSMc3<{g5-qy4l6i61tRn|&Uoq8j1wMN#Ve*KtQB#@MvT-Dynr3(? za91!>N817E-F^|UL=*Gx_Bq!HFYXY)n07if3-pOM%CxE#9wPhWadtJqJhzU^>zTK? zN@m!%$LL9RnbY?AX%#-eJv+zKF7V2|$HtvMgSSIYhb@yaL3cb0*ZDOq2g^U*ObTKG^yARnOV_q3(fh{>@7=D@WFPdu#Uj^ z-T-=~xysQq3SWyCBTemA_`yxDgp($v zZS~Qo-g&S5h+=0-iBOzAN+i(47i`BqI@-#t7%rw3C*AHn-yr3_yg2kB=&5eyFSiPq!KK2;fr+95?H5iWxo3+8H}Y-D5+_Xr0JJyn8L{4iTPy>X z*ze|DXu5cEn{52h41TMI9$Y3co@)@WquoyVwc8$o@+kYBwm#QZ^pw`O<*Bmi3F=pX z+HNYf4AX)~n!k2doW3})++%V=t*(%dBQ*ZuwYgIy!Dr-C={mWl{RP&|)jRfz{dLl) zsNVj$L8<6^Efbc5Ag`_Hzt zrEAx$E%rJt-q{wkHE?--C%42WyMksVE8;?j_^nqyMRD6ZsgO16A0NkCcbIsXXqUO$ z^PH*Nz_t&UZ*EW<5WKDw%xziJgAvj$b}(suW1%eWF=br*VGL>pq?U^+3@x(n1w@63 zLAGA~EBV3lwYfU?O6=4AQa2&V8-}4t9@7IwZMkNHS(O{BBZHe89&fIAzf*AhRvkFf zrmc?Rv3q^5pWrZ>-zeu|8%!Roth8xO4K9J`gAPB2o)|tmo|SLM(hYd_7B>oWlUvfx zdV@N+S!&DvxNMMt-@9qxc>iFINmL*^m+qt-DO2ozlu*!99OxvtqIUaX& zlV8f=rR*^TZf0|=L3uOjJgI+gxL&+bLOWIUlxX>kKg&apezzzS(VoT*BS-rIpCuC> zWA-7#BD)x-046L(P44Sm+Ipxs?c@N7m-#GB^-rz}KxFYBhf2*6scs!FRt^6}%UTfS zMrCsDH1*0RhFJR$u?u#>(Id`Yu;}#5HX*rCJxK`>bSI7^k2fU* z_=qg*PZ#)3K4a$efy2EL@|3#lM;K_I=`_^IQULbtGCt}nvh95sItw2-<`NF%jvC5u zW4{`ppjM-u`%oyiyhZN8w|5VFal^U*-Nz7K+YG2qGZeMaU52*VmbSN#WVkCAn9&`iW15b(2zi4- zCyIKRI6|md%v+G@>b0}ikVfV*&7%R;*=0HCOU*XA zQNQoj%j>jJ1oK3VeOXo7!Y?8{p<*2Hn(jW3fAjMmuWs#EHRqFRojpVhb;aKx;UdsW-KkKFNMUv^_xZ3`E=@j89gkXU2c82 zWpesW4d0@lI_j=;Dj7ERO^$Vgka`GEDTn;=I^T28`#cx=l)g{1P=(1UBU?K^yBIvPT~hqk7i3{(%ra{QJ1p;IfZ(Si_kHE|pAg2eo3h4mL9v6B zZlghnZHaPjyIgDJQ1YRp>+*OR-RI-d7$*FN>l|I`nn%)!a6CZGNx+m^aTJx0n72Cp*{2e90T0nhMjfoC|&Cb*QPw z>?Y@7J%|?N=Iy|K>+SR{+;rWJy`1QpAky!wvjei3;B-9K#(}g)tPj#e=fqfW8VB}5 z{gr(MC+k&YWKsX}tjolyee%BLMp{RVn(EqI#~J)|+?$v?!`A0tZL0RVW>#2b>}#JS zgsU{wxmCi}+afvo(j}x!=Tg*CucN$2`X`_t%j5go@5Obh#NLajSDFE*00^95{++$*Jt;%mh*E>zt#a=28iz=bN{dJrZONTfVW?G)IiS+$KL2-w1`T`;u=>1EM}vdHMR_Zi&T7ZjQ@ zy@Bep421N~bc&R2pm7-8Zezwq;$-qS{c)JIML-CN`HvJ>(@vHXXd*a%K^~5Wzu-mY zC7icjtMoEkrj+AApRrrJ?gu5Qu}z@N`a(upC2`|IXQZ`V2h`D95=+V?o@gAmWtBqt zZmf*DXE4PL*|wsk3Xg}0GWzprINec4u0_0>>{%*-oBzONR?sSGoo9^x5r4KqCXV;~ zH}t%VU>3RUiZoGshWWh9Ya7GuaXU=s^K9gb9QsR33KiA!zC6#c5j=**-E3rvPd~P{ za$)!YY0E!jjXUR2ROqOn%;%ZRax<|EfDBil>m(kLriXmr5_PR{Gsp;9|;4JRC z!A$kjc=v$C9*wtl_ltWiYYj=weQ@>k5zwi;yKO?C3eBDa(Rf^ zi~hkvhf$-<%wM$bK9=;d7)q^LpLVvVCZRjyYNFaXJ%JOL5QPD4n%XB7#f;b&mkv6T zni8h8o^P&=%BNSjyy$l2i6jSVS(#lGisTVrH?gR=lSj%Gi8@RtCYvh$<;*)_1I1Bn zd#UQ^VHOpxrV}Sfx;ophXf*{%7d!6P9A)GTzTLUvQO5&pvB5!-?xFU96+k>-iBL zt!6$EvGqKwNz-~|j$<3AsOdx`rz~IKDDcQn#~omZmwJI-{Dzg-94D{vKr574po*K%iZU@4=Y6jIvmJhrk4%20(8@F ze_P{nXPQkMGaxWVPC8LW2BIAmn3C%izy(QmIRckA66Z1CWORv{L6(K0$?^ujRO&X~ z^EIQh8E7|a0=YR4GIvhbBYXa*N+J7g-~)U9J74cvLBMbbs(cmpDBfeK-y=4=sHfH; zmw#7rzk94v{@AR{#`3Vch;jo%cZHAFx$QQ6Z=I}acs&Z16mu>5i{sBweOAeY207}4 z1z|_a{34<|EXZZi1x=Nu#ol+&Z{0^GCM?yht;|nKR}Pxb<_651(hGhYk~@%8>LdH$ zt4!3!oe*wRt=vx8FCo0=ayobqKm8SLV8Pv`q$G%%%U_?X+*ruH(Hg(Z7`|YcEP4(d zJ)uknkk`WXqM~4|GZzs`o;y|F3{;`}6eds{PZ;UGjW&HV=h0N=H12Hkabb%cq~681 z*wxL{SO-I4k}Pm#k~&DaR8%zCbdj}C;YtAJQi5U)2~dKV{Mt-_kLi*9l)T9r1{Tz$ ztr2f;tJ=8+wMXkv<8<36UZRtw`+RQd?Yjq|`Cp{#D&*Leeiqcy(nF69*8?Dp!zCM4 zC4&Yb`AASKJ@pQt4M})Hu_mIB)}8@p%hOvU;j`*WmFntjljo!3rQ?&un|SoM(+kr{ zte=SyyY9~t36xtZF(l$<IELaJp#5|UAqwpsb7yId!Fa-Ocxq#7Qf`wC2VS7H;NO94xw31yeZJNs6mN5IGi^C!3zDUMpx}zIzOCJ*@Qo>C5rAQz8 z8%fPcla}g*j)a%aPs$2P)8akW7dp#S6bs+=U|LjvR{=?!V%ZGH?qmeb=TNwa4RGsdXBw{jopUwN{vIZZDO7@%6sTDA}4p)+kk6(^c`s*MJ_jn7BTJ=Ln^K(lXZ>P_f4_wlld5fb8s8LKm<;+L*Rsig1T0c z!@KK^!a}2(#dtoWnOV93Jm#$qbF!RchOX9NUYvW+XFfLmm+T)YM>nBf?(Dd{vU9Df z_i;Wyzq!O^bb#Pl&c3@nNw6NBG^atVwD}o zotZuN?8IKLia!nyw7zn4%0rRKO}Hl zFhW2z&CKYSB?pCFRbosh=`S~a)D72>`WScO{Q!L0h$=d=Gsf_^S ze$D)pf_j@wX2l&2SF0UaA}6Bbhd_bYt1C-sJz!5_l%f|?WB?oS$IbU&rbdb}ZkA~*+#h(Ni z4NcfX`0_s??*KT{9Ps?fkTKAlpMx<2xTm@M9q#D=p6DmRNqpv5x!xf&`<`tCtOlsj zSAG@b_ROfWAmcSyMwwVmy&c{;4@^OfVi0FZHZ#NT>06)7E*{9cmjl|j6%Y;ehM0~l z8&ItI#czJvCGNN3T^zNh^mFo=BuT=iJITv#hI!QCnHnM_)(e z*7@b(&{$BcyCy&cNd?{e!v(X^FL4duKZj2S|KRz#Vzh57IMxXltJ0N&s?cWa+N@|* zeV@@iAZ&GgX|Q4D+dFhk2yX+zyDS+Hv2OE#JW7P;e%-F%+jxRl5kNE?lo;=`uDz+w z5nu)yK!Whfw{)^n%KR^yVhO*W)G^+l8LKY0k_>A*#YBV8su6E5xBQjXL-3!kKe7D3 zElwuWaEO7&GLZe*4{{E&lRzV)i``Xn%;;$R4Zb-qIAt&R@ZDg6luxR2fd1dHUagWm^T?9kuW zlX%=<$?Tq1)dDazs6yLLNyJprd+6MsCsYJQ9uLK#lza@PB;g?+CW;@(ONY-Vl9WS> z6dc3Rl1?gDM_N=w3k&VYX_D$FPt2i3-}ME3BO$`;V`jc9DLz{R3h(BY&pjcUfvEf@ z3U-BiYrFz&zAIVF%fPi4c&C)I2;Scd?koY1&0tX$HY^Zh<~;ej4%F9M8Tz>n0R#OW zgZ5E$D?M_-)eRpI))q1A@EmGqeQn=cG?G&`KBbTiZ-UvV9uE`LiuY(o;0{&#$I7va0;1# zo6Sp-3XS_@?!0F4V)Cd++lO#U;L%mgX)*(9BER6A9XB=_?DdjuofCP4=3ghY;ZXoQkcPX&pRMD2aBfs~(X!R2gq5Aia z+3baJm`-pt;S0b2S<}qd3ap<`mW?#p^AuZuy;uPN<)@6MjE*4K|jl~_|e8Q_lEu)gII%Du%N=0#U=0kb2ihz;uQiW(s~g) z%Sq$6O~Qe{ML^R}u$C=4%=~=3q~C~`ly=$Z)9={(>|Zw$$JG+TwjaVlYt$#)> zzfKA71_9OHdYOqg2ygZHD*ZU2kXz#K-N~*PS}qnC5!;!U&LHj3*f%~k6Z>%<7?!|-$&*u1kk6K zOuN!QEt@K>1Eo&XJ-`^Tu8m~ne>n|iE?00YpQ8|w{-0}kN2MWnEiRW5sSKr-$xcw+r8oofZ%r({hA8Oj$Ydt(uH*gnqe z=e?>|(aAc(Pl}G^fNCb0ywb#V(y%l63R`{^Jx??k_iPInHn0fS;0f8a4?hovGQgsO zUGbyqtK+#NkblL1W_$%6MZFW{mO|1zO0VR6>LFM5;pc!)LyldJ=PH2MJ`dX^7Vc=^ zC8U&8qhg1mD@%yolo02RBX{P$0)b1p9z^qg6w{x$`@aRePRC~BllkWTeSUv zc*i2yKeJO1Nwcg1R-40>KLeB{K*Ex23I=9TSP*=3K7fVYeHO;r`~Nu&0690icq%-n z{;)$a{sTa2q&L&j(CBh1G};W5m$0}(e7~*ox*Ajq4=5oOyU5oPTBm^b=cz<`P<@g`UuEpi|U>7emfrw54rh4a4_-a!)GNrSxi zu2X$yIi^}Tvh~k`23SA$qwZfvC^lXClurN@R4!zYWqc~aJE(Y3Sw z&)sv)fZ&gV9DYeHJuJtXJ!fO&PhN7VSYI^CAHa^MRL5RjUtMUhinX_r9Q2;gItpHq zUkDXJpS`yU+BkC7UJ#7qjA;LuKnP&eE|Q#13=(lx*>&kRURImzDYS2*ehpyl+q3P@ zIr2Yn8g<1>IrN?RR}6j$3tf`L0;^j%{Z6N`OR&%BRSJ1Ha_>CgdK`EIdUvv?gNNtr z+^540<(~6>J%^C$0`&ja*)QzC?Od`v6ogbg@CB^;BAd>fxO70Rh@rUzcg{hof}u+&s-t4HvrgmOH69J0IY zpZ`hKbONf`@Nli5%96+>F5-*~H+(nOJz6t#h2|l=#X@0mj)Q{0S8b%gf(X!4ciOU+ zoqFE~0L@~ae;npeK%qC(5&7Eh5KoP1hrp11aev3gwA*A)yX!<(vq|lrL~{WWjg@5I z?Tb8kBthrbiIhbH6)$Dc4HMK?=;G3H<#^0|qx|3o{|+n@9_!30Vr(tyh3j=h*yf)? z7J}F}rojx`84H{)u^jYf&dj3`2sQYi%JnyPtjEj7BDtcP~bs zIHwL3w+6|L1PpT*CH z&ZnT$z{qPE5?0w!-Qy(9BqZgMVOUGW2y~$@M~o_9!4%egr-w&m1l9_ArRBuBQvTIV zpw3@M2_=ywv!0m>(9nEm_Q$urb+RyuMGSQ%M}JHg5BiF;9alT4hx9h6f%TJG$^Uc~ zEG#9qd&NN#q23Q=_Qu#H_GbR|r z1JK2ZWL=$rB`77j$-2_6B=ewAg1+YbBsg=d2&&D-Sdd~Ulf9iGJ-We1TQlMJoA7&i z@dvqrnLtL59#?f}ioeHV3%2r82$ql7cC+FSWg%`8ZGsg?2n73;`i zT{E`PMUDOejKD995-v9H_f+up6ggU+>-{UlFr6kTHu#Lfan;mX<)1N<@YR0+=0E&| zLe-Cwh~L9t5+NOw`i~*B5lOnjQ0CoM$wPclTAg(szmFMRR^SLfuI{dq7b|Jc9dL?< z=KKrACYSBlm_L&MGJou8%O^xrD02Uuz(jtT4mx{*%=!CsAb23MmtUJzaD<+Q%xvZ; zB!?Ptc(y@KR?$Dk;2(rs1zm@0HN>1rx45L?(6>JSWG z4{7N8V)Wq84WV8|PXy4OT#Gc2yo<$iwhL z4uUd&GCJb;vYpQ<9Xs)_TtSMkV!~R~gt+~)hQAuwG zwFx&k{=Rp8CInNncmbj4tn&8_y{LwI!XftdIghD{e?XQ{AVN9B|73^$X0A*H5l|&b zf?B9f`12pEq0fY9Q7l;4Auj)%_QzKM<&w8vIz3?V@tn zi^mBjERTJ`^O$oUIsdMy60(ymLEROHOzYCY{Urd660wdCJY_p*8lV71#DWZfy; z?^XXVPW#2Z+2NY9&41lw^eKya1qR-mzzB@|bDMQlJdWkp0inKXBN@H;6Gfy+*~TR; zGSKkxvtB|PX2>lmL5M@j4sF67$Cw0i_J>q`O>)Y_x8dpE$4H1ghlUxiX&(#FxnF#3@`4J9)a}{l#Bo`f1V%jg;ry&Eg}t!70Eu9xAnw zsg{~wTmIU)z^Zdi+hq<^&u>6if+4d2^(^Ch+rBgI{cigCuzN}hKZfk+_$!Qd=b69o zeoK%PBoTiqQZE9DNp2fWp$JkUOwZdO^rYjP4PF}k6Mn%u;v zh6;XOgIxWyT!~UpWFR8lVsiTcd=y0K1`+C*xkL)0WZPF+_++{^{6InPU7-ok2_TH4 zqs6LB2SAfXLsdMniC5wi+L4Ob7paLeme4MSoO6%TU@sjH1);tXs;20DzgkLxL`$*D z=oj~bT&WxHxAzi6?4U}{D|Bti)E7nCCwn%Dpi6Wg*DdsE0j%1~FLrr-XJG?4wfn<{ zR+pw7J0JcMjRZ*X`jIIGZCtrv;w>7f&#aGE4n}A}!t|v74y>iYRUV3t#anV}Y|pXI z_*%PC7NKM=XyaW;JP?3nZS9exTtfOe1qTsk_p!|IgWm}2=ts56#N#Jr_F6zjTg>b8 z9F3EFpRT8-LnS;fQGhjLAqGj(Gv@%9znnS@ZpA>CXAS)anCpYk(vps8(PbHc1#3yr zCxeMq82`#tv7s23sHmN4EkaBq>$*;v2KNv_zWB)iZaojAqV$aB(K9h`UWt`J6)TzL zMsE4=pei0RZ8W5*ZpLub!vRGu6ZW&$oqLPy?O#>Gf)&4hnudn%?*BP@n<9PX;){KA zA3LYCoD6doXf$+xg-U@$u}(@0mp-!>Ig<9gC1{Qy1-`y|rfv5ejgBtJ*uYLbng5p4 zZYjzJpBVi5L~ryWeq-x--Ali$_h*3GJ+kGONUH1oY5tpt_dc2ore7{P#g;(nYQDP} zkA6%PC^!|oo2eO26dW(zs`p0n_FdXEgW1JS@T=3+i17c*@F?jI|Pog zTy2@}-HDcdT-By2Kc#BZA6~O>&egvZk`!Isl2KWT!GaOk&530>sJmuCIAPh`53P4`;59h19= zeaO~AiOXa42o*~Kdx2xSs>$cMUEi1PU(()=v6^$nI&jNN98X~-$7xewmqjg&Uq zuO=YQNqpVWpGu7Baj2AE+%>D!WoV>(7E^8fmOpcV?SA>yi%mi_B@+EwN%|jVeqH-? zD=Tk1CX+c}W9}V63n`TKX>?pXzMLI>tKwHVt(PSRvWAtIQkcMb_yq<=`)t=X;?@MR zu7uwJEvt-q#oC;T3qY-2vM!Rae|D@W{yzCL8aUJ$v@IMs5$nGY2;3E+a;u-RKmQ>p z{wrYkzd()u3*8-z1dC*Qg$AN2o1OgG>!gw4+q_g%QMn+C2e6#-)ePy4f^MfUeaf#- zUf=k@L_O3j>Yrw|BjSmWoa?w_8}{l44m>l{(bAcLG-<`bUM%0QgFi82hsS7j{4`5` zJ!Fl2+p(XRz3=Mr%5a^R7~n|*F7G>?-1*F%c;*A#(=0ml{(N)QVMkR|fi9mk(-HaS zW2h+c2>PP=E{GI6|BpWoYD(Ndx3X=kLt1q^xc{cXvY;t774-fQ@S#Z{ikht^H)x?h zo432~3vV@IH$M^Dw?xq`yYOwxiznvnKocS&XoZv%TJJSYyakOiHlS9+bw49L zNiLh~OGwEUgNW4+3X$c8Fxn156R%VNX-k1ERgz)Pn7X*NsoxlphLhp$P1h2e39y3SJ!u>sxU6vo=gJB(~5!Yb+J>x!brNunN zH*FP+>JS5o*-7Q@O)6Y|a@-j8bxcjM%IN{Iva8QJ>w8~_UB$P?ccIk2)6 z+1zeR(@ceWWs!Csp|+6MaDdrIAq`4%wyPKj*!TnJmKwZ!FCKGY#)M~`)kYQc*S>hCe|S#K_J z3LD-W)LyNpy&4ez@KS5;O_U>Ip4oK-t)4-R11g}(%bXFvj zi?#*^@S%$ZT!~&wlCch@&}GY#NalPIjGU)!Kls?iEyN`@MyrP zTD>!*m0wR9HEkLMG~g}Kj)!3&rr8Tah{it${)sgcH4j-qv7 zL$)yz0&a6ClBNVqP@3>^ghRjyOh<#k=8Gg3MtUpyV*GQ5#8kF*Enf(4cJUhgavTx( z3x${o9m>&^p6%7+X6i};_egIekxOX*@mZxOnW9l zcgt&KBD)BlnQTSyG-tPb)EeakrlOr)c+4+Lghe&iKkt0g#Y9&icthUmzKTK`!s~#$ zcCpn*t7aI=1%H`@8g#u$kxWF2@UMY&NS|XTl`)(LVNd2HuFrvg+_KXXCuUHk7G9T8 zl&BoaryBkAQV>=>&Dud$^vh@q(6*`swYZ7)IbS0^i#vEE>%V-= znU@%|qn94OZ)NE?SV5Gvt%5*d35otk&X&-4eJm^vH19ieL;>)Tg|}-gj=)POB#Qf- zgH}N1>o2@}2q*!g@8id#;tBbsq&6Q!yRqrcOYvdR%hYR_vhB4mMj=IS2{e>Vl0PSY zzu3gg_YNxA=oFQxQdBdgWVE=`z(vCiGJG4T3g(T(z1}VaA?Xy3Cx=NdOiSarbSWvB ztxDv#QBrX&=;Czh!yz*ghtt|HBImPQFI5Mpzza`Uf)k!m$JJh1BdM`iR|Z0~xYxuR z<*`#%Lf|BJ>NGw&=#Q^$O1RjMv))Ghet^VrAkNPfNNhFY71nbTV)KytaY&+6g<`H8 zlpw37c!i=Xh#h;IYy>kuMaPREYHdd0M*QCmK-3iTXx{i`%gubU(!F>n)M_HA0&SQQu?V?3);~k5Bg(GP(GE54hX8}biRVuB=YV(HHRfEOG+Lm!4A$|)lB4Q%O zy%;dbnN))4-P_wbDCTp1oBT;i&?*@CP>4;X8);}kT5v1x5N9e}c}j)*QysjLf+bJa z?00!eRCoF*m)~bodu=vWT7kROQ)F)o{(isio_bfxkD=*extYZJ81Wi}-7PwM86C2E zy4j-TVOj_=X9;;HhP?^WDQK_s+Acb7i19L5j1pfTU~@+KBg>vf=YxzFt-#aTVTXaNRe`#Qh5I zQj{t7bGCtED7vA7%f$70H!Oe&YgJy4e#gLz!mof<=`DS0E}yA-^m2_M`ZKJ8BKem{ z53m>FM#6VPfjue5b@JNRB9XY3@?+mYS3G?@&NYk};yaN}eP9~IW#;|HC;I{2U~J6Q z9J4vBAK52$DHhL9+@u&bQ8lOQ1UA-RrAK_nJeLw%#>SGbH9x_!DW zqhg>8}cU$$nRDs^=1DU}f3PqmE{;wt&9oIyMIYeY8j*_aB*5-g)ca*EbG^FOD;@tzLic3H>I5>A2#%;Y< z@iHlAJgCCE&Fs|GqIiOw9Fs@Yy5b8&H8)9mgfU*I;w`j)O?oHyWGYIUplnjZMMq2A znYb+gf1zNj>+)&^Y59fHl>q#<*a`NTcSHA4bb5iQuZ{ij@}@CQsz(4mP3LGjr}&`L zUcKuH3t;b<+ECRI#!$^ zbl~7!QYE$#F9$l+|TI%Mi@$AYy====t=o?^rG7|fm1%~2_Xp%IR62cF_=lYWg}dGZv?$9?=m6#xK%JG)H0^?C{$D!qQL^n0b z|L)9)&7hkr&OXnR%AE)bUDr!+4HPXpBMrW9C3Ix7|-8={z{^RH>`Y6|ORco5m3%s07gocnKCE#}7>V zsUbmAnAGl{?^P>Dd%@=G5}Y}{EnA-}m2YQlM`No6M#kfrecDJ@40j`kh|^+{@w zFADBN8LWsUu@ce*SttiNcbIhhExzdW`>dj>#IAZ`ZEl4IQ_V&-3t2J#^Tj-F`xjDj&4-Fh z088}abp6e|r7NT(uY(OBnB{7ZQi6D=&Mn3UuBdscLiMNTc9F63r7zh6?(DSe}Z^*|T;bG{gQxI@0ej zrJ_9|kQ_+fNXxui)a)fThPtM=bfuxcij#5ujt)PHw-`ubnYkK`2vr49HlL8O=y9wx z-?!1r4I5Z~j1MR=t#X@~mUc<($%;DFD=XCL0Q~akRrCj#iA*EI`@b_9w~UYVvXsr+ zGN2yJFkW;uu5Fd?9HWFu_HRCL8pvM@P!OG(%#ai!0YJN&-5PP4 zY>i>9jKlEwpQa;1gIjV(%6LFjNbdScvZzb@p)r-Ko$XQXrNe2|q}09k1ku*l=1r{< zY~EKaDtkX+y$h!NjYCaD#HeZr+v7_$I=5sZkgeY(F{Dz4f% zU;uR1uu{{u?VXu9rL{S&p=`vOR!tg;ygB=-^S5bbF_Pe&)gSuCPJw^VN9x8cq_oQ3 zH|yASTa&@1-SB>#?<(1yh+{wPCaJF->*)T8lhQ_(=i#SZbuL3R8zaN_eoiNLS?*cW z(we`mks41(-CL=akaz@fyL!nsd@&1CTf;n=FHS$ZOPrCuA8Ff6QS|=Q{Dumy*uIu_ zvgDeaGjDdZZPPsJz=`fJ(Fq6A3^DCYE2*c=>Qd&Qk|-6{7eqtN6)_-M)msLEeR4ym zH!QvAR2)oDDeH!l70=7$UBkt^h%8~4eDdOpQoUs#%h*G=AafPUs0W!}UFc6R4=F{Tb~ zHUy9`P%YEUD75rDUi;kf*1jjYdY75OA6zqCZe!wM!P73`!lXdkfyCu_{jlD4h8G00 z4;zauKG313wOC0(UB@63GfqdXO<%dFpjpU{$@qNfaLD=sMTS(T?6cbTJ^Jyg9nhJO^Zuu9GzRQ9Po%{b6#to}R-=Emo&Zld(#MtEh);yntrQ72I;BT|Bt?y1)p zuH^7wiC?6I(ptBG+U<>3(W*{5S$A3oFi^vkvJd4n>S9ptWJ_qs3^g??08d!TSzXO= zNB8gdU)R)aE9XX47bYvHhs#ipS)dw}eMHjqDWUkR~qgD7Q z=_p9VnVNfB3>e!)-&HuVGNTr+lx&h7|z8a%BRg=AYi(8@c- z5rvaxGIlXDJ{HZ##xQD&$6yfNh;j+(V*GGvO2OBz|CQ{4H2xwo`Rm)?+hE=R9Q0H?89gOiU0}=y?$DK#$R(`8K0gt@rQe(?1v*qjR z!Nzdy@7$-+zUv)5tF_*F=M|fid%P076ABRDO^tRdlxWp)gc?DNJcns{Z8c#+hiXdP z>!uPg^L1cI&QEt1lFM@zBA`Qv1awMD3hbvl#Oa*ch{mmM-MlLm$I)BAiYNtifsHqT zn>fhlS$fstL%ooX_fa)vE=^o}>*-U3H@JEtpnvV#kUio6t;YE}doZZzE>JL8m+A1S+h0=a}ZtKKt zkhj{`n=#hkm!Em$T)ua@FB1lRe!Z#0M>o~$mnZO}hqYSh{fsJ~4s}vqrC9KkRo7Do z;vtAdh&_fz7q_Rm^lD~&Znms`r}!-aD60#RvwNY6X8fHTZKC5U%L@U|?9fDt^ctKE-Qx*o!}5MvfzhFDPa;2wNxSCHiIXK-3N_a*IWVc`)d<%ZU&N%4(n?}l8YZ6tdBN9lF5-d5+*FBRk?n?!dy?y` zE(bRDNw>TNI}_R3xvvG>otYn(_(w4QBH}LeR+PcbcuMaa7`t@lOSoF%Y5q2){QjyC zvIu7Pht;%}Ht4+n`CvP>Qt8j86&!|}9W5_r%c?ZmKl%tamQ7_FGB-Yr8VAZC0D^K} zmqlUJC>5IBGw8>b9h7haM}W$Ni)16D+f&`;86Wcf>BO)=I7FYrFkQBa{Uacx!p1ZR zD5xI8n^m(@yE5SUPu#5fJ6cE#FV?;lnk-h^6njb-VZ zT!cdDzE>3}%-_E`<0~2HaYS_TGVVry8c6`*KXIsj9J?Ci?ZmZ?{3nV-Vxc{{rJ~Ec zlIE#uEhSLHj7n%!je(zWY6ZuD!2H%8Roc6S+RlMU!WU9o)==ei(o*oRKL81PT$7bX zp1#-kLz_hlp*U=yM6;{X(k+X`dOFofAZ=pSTG|l0#pwb;F@;3D&mn!*B!U@#RjEk? z%^S(vuvMHQ&>I^5hbAI^?#8cYnP+g2^GHd^3-x8NO zAD8ZBMdZU-N26D&j#V~v$h^6V25E3+iPFVeTs$m^!r>xehESk%Rx#tEGx+H$)LEHO zMB)qXKmnGIWr7U*K|2^PHJzv%sm;*6~ zVyb6&^Gw(ihUu}Kuyke2*O~vRmSk#TxUE9$dXy5{0PI!rKSniTp}XpR%LQqz>_5j} zS}A_WQs_*2k|tjDkUhg045)|ieSW*~vf@E-5Fq<}BdUvB8}-&T^@lrfwU&%sIs5wJ z{+{t-#F>c^@r)l_Fw|WAWgzQ##r^LgpBJ2E4r`+w2Oa9aTqO%B{2{p1lb_dho9$ffSF?kHvpdoRYRS=(TKce)B$h>jDahnx}v1&3hkR#$BD-m|eJnwuuv zQd+mnxTne4fBqvaQ7e$D3EKF4mS-t6*nhwj^A02qU zeY4%{iBgW?K=@CQaq4Z+dS3s$DDN;|S9?k7Gs=kgM9-oM3z#9kk2f%e;!hDr)mQM& zSSRsAOfIo|d=O11P_7{_jXDC}D6;y`Y9m|Ec ze%ZQ6*-F6SG&g~gkTZwkkjBY@-Rb<~WWfrwW%#3ayD}%sw*}#Lun@-7B;Gq&QF`6u zRJ)pzPZNvQpxYFJq3`toVH!&|pzqXQMoUZwbIrI3YkyJ= zYOu?lpr*+o|8GEUnDRh!lLATiQ=ig^6>Z1AGoQEzw<)Rm^cj+~WU!|!#I zE(OFGa*Bu=?+&&RY=m5Kq`J0oxxzbQL1mY{^x(TnF`=R}4za_BvI6GZQC;C4507DX zS2HGwaQN)WWrXN&3*vK=p#sgJorkc~D?7^_d`^95tcdaTioQ?hIbEG(38Ch2Z#Fqi zgdXOe_F}`t0|J<-!14%6wk^I{sNN?Y9-^|RiauIH*wbrK{yt!ecrF->S5HzaTMXvk zDt6(gT+tAw6<2ZpX70sqIJ$bMjaMP-nepXEO21hZhM%~hu^Gg~H%#}vUZp3#qRU*zWOaiGTOMDoAJ C&^qV< literal 0 HcmV?d00001 diff --git a/docs/TimingPlot.py b/docs/TimingPlot.py new file mode 100755 index 0000000..fc18242 --- /dev/null +++ b/docs/TimingPlot.py @@ -0,0 +1,56 @@ +import matplotlib.pyplot as plt + +# Timed on Matlab 2022 on intel i7, 8-core 3.8GHz + +# Preprocessing plot +m = [149.6, 377.5,1352.2] # matlab timing. time the full constructor phase. +p = [166.8, 904.4,4810.4] # Python 3.10 on same PC specs. + + +N = [50, 100,200] + # n=50 iterates over two levels. + # n= 100 has three levels + # n= 200 has four levels + + +plt.plot(N, p,marker='x', linestyle='', label='Python Implementation') +plt.plot(N, m, marker='o', linestyle='', label='Matlab Implementation') + +plt.xticks([50,100,200]) # Set the positions of the ticks +plt.gca().set_xticklabels([50,100,200]) # Set the labels of the ticks +plt.xlim(00, 250) # Adjust the limits of the x-axis to control the width + +plt.xlabel('Sqrpoisson Data set of Size N', fontsize=20) +plt.ylabel('Runtime (ms)', fontsize=20) +plt.title('Preprocessing Phase', fontsize=20) +plt.legend(fontsize=18) +plt.legend(loc='upper left') + + +plt.savefig('TimePreprocessing.png', dpi=300) # Save as PNG format with 300 dpi resolution +plt.show() + +plt.clf() +# +# Solver Phase plot +m1 = [31.0,44.2,91.3] # matlab timing. time the full solving phase. +p1 = [193.2, 1313.8,8398.9] + + + +plt.plot(N, p1,marker='x', linestyle='', label='Python Implementation') +plt.plot(N, m1, marker='o', linestyle='', label='Matlab Implementation') + +plt.xticks([50,100,200]) # Set the positions of the ticks +plt.gca().set_xticklabels([50,100,200]) # Set the labels of the ticks +plt.xlim(00, 250) # Adjust the limits of the x-axis to control the width + +plt.xlabel('Sqrpoisson Data set of Size N', fontsize=20) +plt.ylabel('Runtime (ms)', fontsize=20) +plt.title('Solver Phase', fontsize=20) +plt.legend(fontsize=18) +plt.legend(loc='upper left') + + +plt.savefig('TimeSolver.png', dpi=300) # Save as PNG format with 300 dpi resolution +plt.show() \ No newline at end of file