From 9c26569f4f5c77d91ab46b181b880ce9a45b3579 Mon Sep 17 00:00:00 2001 From: Marcus Wood Date: Tue, 5 Aug 2025 17:14:01 +0100 Subject: [PATCH] Remote the streamlit web app from this repo It is now in it's own repo in Github under cepro/streamlit-reporting --- README.md | 5 - docs/reporting_webapp_screenshot.png | Bin 136673 -> 0 bytes pyproject.toml | 1 - src/skypro/reporting_webapp/README.md | 21 -- src/skypro/reporting_webapp/__init__.py | 0 .../reporting_webapp/example_config.yaml | 5 - src/skypro/reporting_webapp/main.py | 357 ------------------ 7 files changed, 389 deletions(-) delete mode 100644 docs/reporting_webapp_screenshot.png delete mode 100644 src/skypro/reporting_webapp/README.md delete mode 100644 src/skypro/reporting_webapp/__init__.py delete mode 100644 src/skypro/reporting_webapp/example_config.yaml delete mode 100644 src/skypro/reporting_webapp/main.py diff --git a/README.md b/README.md index 0b1828a..37b3309 100644 --- a/README.md +++ b/README.md @@ -12,11 +12,6 @@ The Skypro reporting tool collates data to documents and analyse real-world perf This tool is run on the command line using `skypro report`. See `src/skypro/commands/report/README.md` for more information. -## Reporting web app -The Skypro reporting web app makes reporting results accessible to non-cli users. -This is run using Streamlit. -See `src/skypro/reporting_webapp/README.md` for more information. - ## Rates and energy flows Information about the costs and revenues associated with using power are fundamental to the codebase and a high-level understanding of how they are modelled is important for interpreting results. See `src/skypro/common/rates/README.md` for a background on how rates and energy flows are modelled in the codebase. diff --git a/docs/reporting_webapp_screenshot.png b/docs/reporting_webapp_screenshot.png deleted file mode 100644 index 0be3d58fa57df90563e5f3bef2da9d013056570a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136673 zcmeFZby$>J_dkq)ARwWLh;&GYv@n!_(jg!rrP9(l^nf5O-7tWp(mix4-8GT}l0yyM z@w++SbDqcZet+k=-uK`4dbq9`ZtmE7-)pbE*Jpj!S_G>q%i!Za#zjLz! zB0@vMXu5+1oLR0hq(wu!WoRKKr79;SMWgCqYieO-f`-N%U3VvdLATu7T;B3GPSuRg>2{=XbBr3m#7(DnC0Tj-um^kt{>C(zK7zQ z5LYd`>ej%IRaoicmeIR+c1i5h)6_@5t9%zLVi^>$r)|!KY|&IF@V;byE++A~gMEc4 z2lWCM_ann6o{Lf5SE%5OI|2BK+Akgo{T!pr^rwxuyNiBz?U7%E_H!RT7MsiS0A)>f z40T%xkM8bD(RnBGM-7hUQC=Bfyl1t>`QNVeH1q2U^jIZUtJPVFE|DfX`##158YG02(&% z`#$iI&Ora`Di%=&#$U%6O*c0_SC^8L1AeO;IhdH(IGWo!Nsix&0-AzbXlOfWD=7*a z*;;eHGq!zi!s%*lck>9Eh^sJgXl>&3j>gs6%EnRHRg~_JJA{Gbo6}r$G=JRUWGPCg zt)xmLW$R!akcn&Pd1K!z83I;TsK#^xH+G4{i|)@QIVUo!m1XoCRRGq7S@1xfIh^8 z_@9aVasU6i^6wshds6$~Pjd6~^ZfqkZ*m#e6UG0?`H!=Jpv7=Sxc)V1Vz@=Czf{oBB+%rfpKG|@+MLBsBz{5OvP(*oeN2GP z`XYpnL?c@^ijKJv=j#I!A|&(IApA>ay7$qW?n!H!YvsA(GgkrN#K?CNS^N?2!FK^MCY9eGC1L7=!UY57Y-3pcuw~dJ}pH zwAMiXyZ`tam_#%_EoT4WJuy9jVV*=r`u>x!fOo|tI=TBF2I&(4v`>AX=buCg3=U`{ z{XYnbXy+b{&%Bf*)_;&Uk;FXjKh7v{K@1qCr)<}Mk~jJtPptni$QBtNw2y>1WdA|l zfKm+p2SNQ;DgHHq|5b{ADeHfCioaIWf0g3@he}br*Zrpz^fgDnzSxiO-0N0M5`_3( zTpkN_M{@hkXy?W{t^a&p+*oZ_Inofu=9?uG(c?j!+f#1BX51OBuU7ijyY_S?q@%IX zcp#OfSb*3;)RRCmH<8@C2FiIQB zf#+}V!T03B+dEk&V>vc}wWE>5ca@E`^hc0zc6GgNrNSn1gOSf0h$AtEscM(oI?U$#SC5nWN%e`%5A4 zc0;yY%v2QxUOTaNlV{Eb?%5Ti@h`{ug3I1th9>9LludZ(OWC!;pKC1{DvY~RUpXxI zJb~+}`xNwGXg|r@RL@gR**|&-*T33=eO5aRpVsRwCHk9n4drI420cQALQc=g7|zHP);;GlRKOg&Y~Xv5Ahh zrcrQCg?M&{%R{)k$o=*1Pk5yIg3cF9EbwLf#;4WkezNr%WIX438{nx?P85K- z89Mx%ia&?6w&@u5#cRnlBf4-J!kgpyXpe8b9bUc&!@!4Z;h@za}t zu3yj~vaL|V&mGYRwS^dX9V#IwD+>5NXp8r~VNUyrPA+I2Pe3U03r1!eM#eH;ptW1y z*WDLM>(@wbH8|&`96xBZ`yPJ26!mw^#^8_UNW`f0V>q~Mh z$E~OM9QCQ-ct+VDK`D_cVs+sBDXh{2%|52&DW{)wlln?RR(t0kic*09&wlK!hg+e95migkt}+> zu8+&`H`GkSjrpjJnR{%K5x_7+*yshCCHEQ~X*fqSn9fd$ir@NP?44P*_ZxSw8Xs>r zM$<~UcPH@%BFg3X_fgHT7kZ<%O|>6A#TKQ6yf6GIp1I08knM+&5tq<&3jnHm@VQ3t z0)h3J^0=wed`^0Ab&&j1!brA69_u!VFWyDg&GJ!2apu008F&O8;F52}^w)$B0P9DSPpG zXl@ml@ZuEyP^ZeFh|)}-$aUxjDy)gYLxi( z4Ba#g6$|0KFgg;dh;1y3HSUe)pUH1yEdldx&cY0x(#M4ZYYV;r>r~#;=-A zrj--laM~xf+)XdkC(tG|&~EM5WGKwlH_;61wQy`wOyGoyHa}q1cq;!Ia#h9Ovmxtc zzdhqN4D#jEc0cHP%c#Nw@*y~)B1*D`utX}kH zJV#;m-1-PPYG&Ls7Ga!9mfHaeS}d$^I8})jcK)E#;F^Sg@a%M$y541reM*i}e&pC= z?gC}962@inBcI<}>s3VvNv~YJOHoeGR-9LlKd_0hA>8&K1`Xg5G0%bx@hrwly)%9Y z7=i>m4yhiM_6?C@_d3H#aB5}{=$D)E1*$&~bSbM`KJ)sn`zzwv7W*!9I%0zf7d(i& zq$^^^an*~R=?}YOS*W|Cb9z13?Rb&}>)}nX$LzTA=w9IkNrSqA`?aH$PDqFSrUtH1 zZ=H2mT~C}%{J;t?WV#4;qEE%H?sYKp)MzEaJAzohIS5B%?expStg{qB!);-%W$x$k z!&wH^{UaqE6|0_>15t~LJ1t=I3K^fdereH9-N(fz?R4tfC6 zaz7j*cm)Hw9qWgyfU(5F3%L)f7oRl4y1`% z7DtLPMTm22d%rmeZ63Eyb8%@Dd{ttQLInS4quMp51%3V!oUxsr+PBlBh-sP%2U zho!9;93B_ngMGYRPRoqW=93R_*S}GF(p{4a^i-vCYFK)49pou*fpQ?tX|Fow36C9# zw3?pCKX7zD`R?=<3y+4~;G)2iQcFK>$1w1q207I9Suy$IUCXiQahliBcBI5@@9Rqy zkEITvzPyQWfK&0*5wW3Xc58#^58YJh!4kuK)=X1lq$DD3fJfa3X@x{4b_ zg)i}o_~V)(34@HcrU%aaKM(sNzvQZ)ov(#@8d$D2c~>9G1irPLtyFQM3nHU;lrli0{0a3tbfet#d^{pF#_?=pEDzXtDWCk! zG6sqGwp@$8G|;uUceAauG^1fs9FqWo*vZZO-E&Tz6qbLD6pE(tu>wIG| z76+C%uLfTt344(~%pf`03-^gDQ6ncl^U=n2Z0a+6p0mtI!;QGJODvJC$09=@=aF0` zQU_@8YrB|QzeOmRsSAU$z7C79VOr2=g_LLP$%u z);P>59AVzVjE<5hPJIBXV2u5Ius+EV`yNLv z*R6uFc=~kvJRO}AUQkI|H?!=Z((Zl>{uy4E!6D0{%aeMQ1qiQL`e7X93geJNKfD%es&ebW!6W+uDU|T~C^&=iaet9s zhKX$x{{Sk|d~Uf{t7iDzE;4&-X=oA~8_<4~m= z&~Et$K|;-G09Bf2%ZSNbk1Ms20}TX5xGLEcsOcJTONDPvRdp7fkThDg`G0dUkN!T> z&DE4j>9jAb>1q`d9*nr&&1)kVa=CNryQe|p8xr{7dFrGihJfu>9YQZq z=bL{0%NFNFkJb`XS29>E)A2HGeM9fs1rso_%TSW6Ra7|i(TKi0cmB+vJn%*W^ZIx4 zl%eqkUTHfOnkPEKOnwG#)G-Ico$0sriDXMK0R}fv`DOScdb*^4 zgGjy%HwdY_;Wgg_V5>Y)k?170wO--6!;cg}2aj8_M;ubT4a6T&URjDg$Va|~Rz=Of zYDm03WoWaQJ~?LW9TexnF^gk1ac)~%P50ti)82cf8L~<$%ve9YI&1wX%Me|0uRy6- zyQy$+>E~_(TiSZ_g+n;IHqprd4#y*}5j{#Q*}$JT@lNIplt%zMWl%j8?2}%{i96t= zpsedNbUz#y>^nKvz2FFWl{P0=`l0H&yUj@B3tV0>HYlauzac-YCNDjyd*U)jMd@v; z^-nq|yL-b6Q15?q8z?v;`aFuO#0^+4qN0-1s3DxRT)13s^>#U zYMQ0UPkX}riizI_BsZO3$qZ9(X*ZynG)L-Q^8!%M`fEX_f)J%&Q+O?|-s=047R7Li z9{-dnqOCO>yJLN|Hm5o+ojSdb`U}k-$J@+XkcCgJ4y|`>vyd@J-Yx%5m=-%#_9_@Y#Je0g zBR!kfq?=gOg4o|wYP@XX>2M(+pgw9a=Cuy74zWaZd?xQXIYvjN5EzYBf3{WKI=_vF zu`S;oaEQSf8gW}#4t2BzGWm6`zPzYnT4R%`H_0PLOjx2_Hswr!f2oM?wP5j0yR0G4 zh7x{-Y~^w{@DLxSg&2tJSCWm2UpV^M6pZ?9W$V?FFOMPBc^p@?T%t`;XIbJ903xXY zF6^sv=b);$?a|0tO{svpvE;Vw98CSMcZ6lyrcn)~IcaNLxn2iJv0PdL?k?IT&h^e4 z69Uh3MI7c^p6gT`39{Hr*?Xj}OD`sC7HTg~U7b%=M&gq6oLUKL+jW|K(l#~sV4HP_ zfr@x+)&v(r1f8}Y;cLD~H`hHDR~^~kJ+U`p0J^P~ZFH}CV%sz`QhX`ptu;&oU*$zt zq1gsM`5W^=^9qO`FyMm7UjPf?Jy!vKh+A{Rq`Y2o?xV@ia=WglOW@dNMOuWY^VJE{5@Q#ra6N z3Gp|bf;y|IgL;j8rx+%20hM1t^HwFSKF^Y-TN0h=R%I`0cX1=R?Lj&93{!^MW{~@Kvg3;E~E?qzEQRlNI zPZZ)64%c5_aN@=4G)`^pjSQJRaa>VMqnpx67jiTmu7{#O@w!1*>q0hFGpRxdELNL+ z=jL2xO0E}5ffX_GvCO6)^(Olo=;)#B=`xM&i@R5i??MH20aDR#$=e+xldES(+ZFq>i zhqHM)?O+o_D8{-IW;ljM4x zQZnCIppOOM9^XoMvh-2Q&`l><(3WDg6=OC~MJx$f$L2ncit#&pfkX9-ZK*FxKYzwx z(v2)CVoHvT`INjv7DLK+WDE9s4@rZsA;5SlJk~p6!X_fVaCbPXHGe8M1`a}=?Aw4R zowlaBnOx@!OP*&*SZviD`aV4EhqLu}HVDwk@3gR-s3u^i=G~&s!rl|R+zjJdEy_gc(j$cUvk-U!% zO-zz0a}a>|!@JjAC@Ck_7G&Hf*(8nhV_mw)>icej5_X)Fn5)z*1O0+`@Ck)TH1e^&*GzsHyUvU_aB&Uax^-2a9B@1u4xAi zxlb+3=7EnTLSr<%<#=bJ5g_J116M@UyloxpDKB0jihd|BRr}W;mwuR=btSc;9MgY7?31l zlI-t5VqfDNs4k{3QMmBnIQFxcjIUX1vkIp{-6K)9R>KWS(%ra&5HJi!*|~na;FF++ zl4liv?%}%jWqmKel5zDTM+bOui{H94Zg|p*yrzknJ z7c?hyCN|27%hC|vzp+JALl+R}Rj(q_*S-NxayfsC{+<0*4x&a!DGZSE$h*iHMyH6a zRIULR*S}$g6OwrX|C7TUmz(w1idngsyRFZ^yul@2*8Ug?#aYOOcQkNJA!8DeA432QN#9lA!p%HBgu=v7DFg{2Ons38|5Pczio zXS#_BG5CiBez7&LK*yI-CV9~Zo|i$I&(Fz6T`0v@=7Onh8igFBDFwyP&OqSpJ>%Qt zZH$Iu$BRz_$y|Clwtm)5TbCh#JPr0`!E5V}^g7EqLPV!_u!*9>Uk3lphq! z`6UgCT{rtI^FRGgdFPg!_U{uejYA|6^cCjUal^@%kq#-p$ERAGxntJ4&AYxbHIZl4vGqEDAo9OCl^}M2#*RAl9(sH;H_Eqh zNt<3`9iUi3A9}M1Uo}pj><$FLYzZMJ^k({0#40qvo?J{WZZ{;_GGFK5&tWy5Z_)Db z@??>&zRwzc+5b_GTuJG+ML@f~_e{XAVXO!N@O4d&A{lQjNBC~}TPesV-Q9)u){p4d zv;0JxyyTnPLBvcmsI;zkjChPcpgvcZj|6SPEI$eB)L?xftix=mOk3%{LsKJJ{u}%5 zd*?ol57Bd5ET!jwLH?yc1K6XHT6OHxz0indcV5Gfy10BDRnx-k3ZA}i+iR`nF6zx( zqrTf(Z@y8jpMc(C8*(EAf)_M+q*uRSinH|}WGiH9fN}i&=>B#a!xl0jJIHi;RlCRxh zJo9E+*&y$Ytp>w>@@dHRQ4n;L5jPwB}T=i!Ic>PEkpLh9z7J z%I7Llk(5*-pRyR@r>nd(ZePe zv~ii$ylQaMOJMpgiEkRkiD$lZc50R$TW-=T@$q-8EGG*vC(%PGFVukulJ6S2cv3;3 z$C0<*6ymy61n}+eTPfP>i@(m-7%m9j6V?*ZM^c#3-#enyuX8Hq5Vo85+1QiS{_1GB zCf#j=e9imP?S1yij`c|PyB2-2%Qy22KHD{m6FwV1R?(qL4JxSZ;uP&hQ>f>Dzh|?_ zM&v?r(;Fm7sdleSl2&Sl>I&eoKMSU$7+y zDBVNAL`}oE_68}_Is$f#yQ57;s&r9A@>g2f0HJEK7V5WLfmFXkbrb)PP=TQR{BwgDJWwC z>fL1IcZhB{#V)i<8+6iq;!w?J;gUWBzxv|y{AFITM1*_zH$+BKU+QU&`O^h}@F_Rh z5I|m;8xAXb!IrqRGoDkzvZ*LR-~?0AmkPwFBaCVu^k86?Ns`~Dhy zjuC4+b}4-g_~*yerCJ-Eu35pAnOIpEIcbgQk(wMS^3NRwwcH&GlZL;Eu;h>lsEETX zMh&*W-h?X8(|(V%OGx7aHoXh>=_M_os=l`wRgxY$rS7&^)^j1}iYnH$&$>BCINYJ; zJKt+r#fPpoh{ToO0P*I1zDz1?@ynW-*{?5Tt@lVphDfS-VaQC6?4GUd_AUR)d+N+h zp1h`gH2o>FmVUIYQ)2iT{9<^UuojD`@?J?Zw`Q7$i)!rA+KvLf;@eJ- zwQ}a$4F-Mb%`F>oD0L`d7QpHfZ{qGMQ-Zpx;17?igSy>3CAf&^wOJmYgoS2<`87%m zo^a;lehcq7p5x#ZzwW8p3^A7?0{~C2OLcwmgLind+YE0?=b47n-^vYEEcY?=z-H8j zF-JZq09Ns1QJceW+Z~atvF{RGA+~GYit5G#DDpAj_f-F}S60+vc3EANqENaZ?WtKO z$>a1M8A$C;Q`k7XAaWr8OIAVHs%z)nU}v4qVDnRUO`~NGK^ify6akB+#&14@8xuv8 zb~=(=L&vfu6D|tr{fSS=1#I?MGTYll#+GlTU)b>;?4P#=j<)M_yj-ptt=XWb#3(KR z(}q2|l5AOCU>^$p&L0#XDd$JOkc;r%_p)s-qW{vH!1q6!@yZQ=bgX5T*US1+uvHu>~yqr}-dmmpoOTW^;_ z4*7+X5X*XC=UvuiJfJqAm9~f}RJk3G_}NK?T}bEGLMnA519B>-y$^uLQ|-$|8F;+~ zdns4vWMMQmkyxA!);u9k>n>_?-tczRrHJZP%TuQ0+aa-OPp7)bT(f)gcPd-&2GE_) z4e{JqqzoT};n@N+!BeZV2f_Vu<5Oj4fCInjdi=)BL0Pz=-~V{-?iAUUb)~o0k_)=n zNsAZH=_R<0AY|=onct{NCHbTpN;K{PG1?aq^U{SmQKJk36N4)U!D%A3*+A?{AKPVAHsftkR;kRNx3PU>(em8 zc3~{2yEAhEVQyHJRFse#&goaM=vt)em)zH!`#An@WZuV;^Ocs&cgJ)w%Geq$*xU=(oAgP1|*Jx$4dz`79`=N}nZg>hBrM9=cUOMcLRD z^|ALw^DC6nseO?YI;Rph5*Bpcn|mt<@(jG|E!mWKSf+8;F|klp46q|92*sK8`1Pc+ z33_f(JIHiK`lN~&j%R|8a=wV!k=fo-i#ILh`Qu0HqxJQD>BpbQ)V{{}^W3s?5~LKf z?l4o|`rbL5AXLKNvUB1yx3?>UQn_vxBGf$#dxKm^i_MLjocuczw^&rWdD-1u$JG`hZ8)Au9As^Q%}_;*X+wtoCn z?tWN@reKuTNGpk22|1-IyU7E%vB5WATHzA7qo?=WQJrxWh)o>eq}>nPwVx{~0#`PS z45G}~1QeB828K0u&w*SSmdT3MNIKICXG%Zl5~tltAK7I2q3vXybIRsStuCiQ0}XN{ zHzu{#AxN3gT`KsO{m47yTu6=n8Qf6Ue;s4*|$ zSdt5TV9~vvTRG0kpuBioI_3m~e}~I1;7K5RavNgq#*U#;Cw5ijbAQ-XKpQ0rn$4U#JDO^~OD_6%@&6oygx(#!2G>^y>o!ardNtZugx;-g$m3lD-tYK;xALB; z)bmHa4@srDw{43_T}u+G-8!hY?Gs+zM62ZAEP{w{!F}6NE3&^p$Q}Lp7!}i=eJ+BE z#Y<`-&#}9s&RxzXP*R5bfi?Ele0cYQBz%F09hTL2Zhv#{XA^mBy<$A4ZA{ogSja<; z^*S-U-_y=$b}?%(Xm>X!dH$51KW*vzU&wfV88hR5pgisN8v#Ni1VqSW2~a%eH(4zJHFTf!XRRZ6sGcBIf9y-> zI=o=9Vd)+qa~8YlqBv>Px;=S-tYDcLs;RVk?28xqH#f8K(uprme^Z}3425V?kDe3? z>i(I(;```Mp?sfaB14%UBAxvP;W0eXdz$vl|$}w=gvLG93HVevO z3HV(ZgP#D(Shh6D`Im^AmWN6oT6h{PTdznNJ2jeIj)5Lm?}(; zz5QXl5D4RuF#!?ipmCeZ50e_Eki&0$O~>2X$F54 z=1s&RMc|rKxB7xZCW0a+)->!8$mo(Epb*M--Q56~XLjy_#45myvHRkYa&~1J#`nMt z2dg?40i>uOD9{rnTCY){`9m?*GiJtpgCm;PEWET@=H0*M6_{b!8*>=EF*xy?PRWj- z3k$ZT&3XVCFcl7aODx@qEPloVu{u0v0}KEmtvGW2a`E^3w*i0&Y8ORxWuF(e;4ex^#u}_WHN?{QFRdc5VtU2yu1(xgQ2F zAl&Xt;+CtM42l2yee*XJ2h!uT39-6X}78?6=_!w{Rm9_i0%2UvfdD)-NNHFmTI zam7B-bna=|B`J4WRHS|T)LfTt%LU@Kf7hK4R@_!eLX zc=q>8mWp7Vy$x=7OW%WIXi;OlQU=jr1oV-^>CcB@O1eh%TXt|DgC{-5{WDhP^N07* z<@D!&{RrK=NiyE7IbLoj%W>J4B$9JUgH?HER{%2ABg8KcdgDq# zn;7V{c;-Vp^(aU*cn=Fn)^fv?%yn2VealOSU2h(*@B7cpmcGc;YXo0oM062~bK(X)kh8}BDO++I zIhq&adAcXRKK8BA!7W5$gm{Pzc`h!dT_-XoC3a~Q9|p0Ft~5XNxl1Wb*9ta;7mJRR zzETjfn}7S!7W5O#58D2*XwU((81vR8$orhqd8sVz(q!&}decqH57~TuWfnax+W7U? zLa``)-E8o9$J%OrL2;ct?!!JVAlWU*oa^ylgitV--Rob1z7PL+DS!H%qk5EF_2#5; z>#?B%-~lb4>=N(I`FE?)K(6fagJa5jwF;vric)SDvPDllE{!t4v#HI=R6O4iEul!G zi{!gKQLM{_@Z?niz_IF0uG;qZwojqUT~YKnO;Uk`)bT|S+ZYI)-LvestEHHo@BQvD zl(ww&Lu8L-&Sfv%otJ))ro{u9sa;>B0&_ZzE^{nlb3E2l(l=R<=rGoml<6uD7?AZJ zo~RXxX33~Yo|TR|@PZ1P=%H_Nr~J8t`exs3_1~KPDuG=j8ep}J^fINn$wh{sgRv}G z2cCtN4*~%M)Dt+G+q*t)nd6kCHqvZM=oqKt%WTqMc#{$1dHRE55_at~^J-bst#2$( zYteEFX4|aj3dsio`qCpgN=#sczE-|g0UiCzCewuG-45*}{tZhDcyX0RZDV=AqxYwg z34YVBu@Pcvv zVi9MCB^h{|IS-2qTXdJ-u1rd9#SGpGcj!#SHPbe~AmAa5SePRlp(f*C5UCcjhV0T~&2iw~^IVD1!8l#Lp^twt zPUYEt@doiElm2XF=ws7?PpB;-aR76cIu1QvUjCT|Z!&df0fB zeoglYFX?TIr0!?kdMDR-pxTCxLsy&zn~;jX4uWO-*Ht9mYmNoDeV^Htri^5qIdqL8^DXj6Z{t^2hRm5y(#$7H!SpZ4i$><6%M2b3`TgNTsB*^r% zrIVh|Qi_r~ZI4KKpIgTWrEMor2s!?Ir|dN2q~sgEOp!~!mn;eY$@92$)bSJ6y@nVn zu)DG)yeag7AT(SMp<%$NlE$c%0;_2C!#dpPN@pB`FP7a(8|N!M^&ykAUe2$|Y;E2s zuGhp$q)idyh6XB+7&VxoI!y*rZF8Rc2|H~5#F_r~^;TD<#c0U1&}J>^m06(P9@xfy zef6F%+w-?T)>H*=)FeqQbUqQ`cr4)4{VJoO>`iO(r1~(;%K_?pzY{G+@ z5hD$hgZp0hRdtLu*WIB9n-}l!+%9pCL`{KMz}7C1jwx_cRFZ_fUb6;$@TnghG_x|3 zee0emT%*`CMyn_x9qZg?zELt`KRJHVDgb;#%!2K8PDbfGU~#5bm&Y!Ew;kE|^_|4E zfy4HUkOvjs*h~BsG0~G3EJmDXYcr?b9-P~IJ4PM*d;Z(pLMpT4p7%SM|hvQ3c=HKU(3zoXZTdBU1{yHcqmX=QLN#gcxax@F8B{>ATk?sAYB|{ z@pET5K^~z!d3AsUt&ITHMZ24R$ere~g{wf(5*X^IMeo*J1$?FI!{z*weU*GKn_`LT z-Z@Xp)VvE)!@edBn78`**=!l{mcu?_s#)#+cc+d%UcE$|%Rc)8FIS~`E#I2}+3 z59K`B&3jQD4(vaZ4uoPq$KND&n{RF0R16f4790~F@i!9%8Q*fm9(lqm9&)LuRbX&E zQfZNHFk++@gFGoe1zf%T&5voMif>1n!oArW_P0H%8*m=E_H67fQC$0mn{ZflXuvj- zagszg+{NvyO}4Fej4eG-7Bgqjjv^`C?bejKFq;aK1J?=1`R!Q`k&Of7aki)!bkQKf zUNqoPFTD)q?>#tGd(HpwW z+Dkan;F zp{s>dCg>J2Yx-2V`Pd?)Ti|0Otoj!Of;=xgubmG}7oBXKBh;5^E=bBK1AYZsP!1eV zj7%-L$4v&`re@X zj}Vfo!9z`OBf1ikb7UF!@J06*4L~aIV&(AVP>VIkO^UC!b22D;MR+1~Tueegwh!wApEM6DWI}rj1B#DCpy^-dQ!wcG-G- zE5antiaFv_@hM6qOG@{K-J4^{*f0QJR#oFthDb%ANZ7RGc7OfoiyOM0J=K`i8_wSs zTRT+@lp56-8bd0Ecwagv1PV@9S;F*Jj(WFdepOTT63NP=yJP!O!F?H@iNDIbGzd){lR&{~J(%7V4yQl1=z$#87l_MJDAb_N^9h4=Hmb;x5j}i;*NDq63$s z8riF<{KXQ>J;6EmQkPRp_59dxnZ_#D2acfcQ3Nsv+7U8VLoe{mJDX!JtfzHMi$f|@ zfC|ke@&uncaPBXf0cKj6X zJNre-vbo;=pv&Gv*=~UN%oQbypZ#H+^_L6#c@evRp9Z69a@$5?Q;*YQHzsS9YRD>! z{T{Dbk5zh_h}&ty$`UBzo7#^}OWOm-P<85vJ9;?i%WSb#`{B|E(o6C@Uog|1d3Kek zwrl%rh>9UKujI?{M<0a2Fol$A=;jb_UE1_%`!~3o)725y8C8~4lm+h7*P-f4EuE@O zz82C0;nc*AsRM?v`gl{PZUkG4C!T*%&XgAu3ohpK;?UfNE>jEp$`Tuld@wGy1YvSZX4 z=8ceQ2~64?+E3G=Of>GTxFo$(WnB?K5sgl{URvw`%c4^U6a=Zwn(aRJzB@6o(NE%H z>PqbPQ;~fQ`mu^l75j^NAQnylAvK3{{{{BI_?WP=?X&K(3&2~>`pK@n6Qcp7DXhJ= zV*q@Dmb+U<#q%mp-1hX+`1GcA_7H9g%4x#Lq&pWAJ%S29Agc;?(+NO87Za!_Xu*6m zbrKd=ym4DN-dQIf!ldIY?8wJeE$2r`j7Vp7=NvM69iu#xFUOQb_~erV0bUMO4^3q3 zZPsM8kIIjV!E~Orchi-M@-X&PvT_DS7S4M@b z-;;~7@B3DfE?@KBhHRUk#an;HLf>cjr+D%kagI7+uqmFk9X zRhIF2SaY_{=MpUi72ztV{Rjgh$tD*k-FrYm(hDZWaqG40g5*kiiP511gEB3S62TZ2 zvBQIXhqD7Ra#d#SQlBIZH(ztJWm;ZeC>S@VNGXL6AXNmW!X=>JRZ0dtOvW~zPcJu8 zLIw|e8XFi(9eSKNKQvBp@2#(Wl@dPH<#JDZvrdvI%)J5B*II#KSB*-^i4YCBJJRJX zyix%@qQ}+comEt@ihk)f+Xn6l0_s<7PG8p;dfhLYo;qds@k=>SK7~5CvzGulO|wOn z*92@XYeUNeb!Uf`(-+TG#LO5u4U7g!+z0F!UlBO5Z^#SI*wtc~9i`SD=`H9@TC#;L zl+-zMrKcQ(jNbT7j-9I&P4T%(+fjTg1cj>6STAM=-hCN+PKFs>CowI+AsxuNY1E{( z#$5!dM^J*EUkO^plDXuSQN}aJdg+-5$a}mWBI0)BncNTdP9N$HJ9NG4ay3*>kjZ8hEiePIu`|Nk!Eu&Gbk*Z)v6RW z%~CLZa;=Fp;DSLa)4jH=2Kzp}#bEY0+U7+_9d!>ct`xI4mIdanS&yOK15|w}sg-&C zAt$#e%p(7FMV(jJR>_Gl;=fnp`9ewYZ2j?6^DUspywW#$y7A-NH*;GROC@4^ ze@l zN-&f??O}aj#~aup{|y4>wHRM{KCHV1W!s|iUc1Fj94!y6`)qQ9@r4IURHyRy@tlD8 z*_^v&!&uXXLA{Fm?JR>=D-)a$Ddsg-Wby&Env!UpxYdfCw)KWr$IR4RB~nztu;c=d z|C2GFFDzDM z%@GT<9>s}AyLkc@_C2zM%?es}n$w=&aJa%eEvH@boY!M} z2o#Pbz6FB#RZv1!Kd-Gmg_vZf>!zN$O3%v^4RNm-x-CEP7_Uy_I-vU$A)fZGB$b-4 z)V8ZWkzPh~vdSo7W;*+`Xu9X|EFsVP@1aMY#G4ndYDbi+_q|SnhFv^bn>xcDiD_&< z-RBTF(-!wo9(DmeS80?|h4f)|sg-!ElPB)X1=}@|*FfPn3|ehhW;{+C0SxiupqP2K zIHtIM`wjWnSN&Bgi=mx83am3P$(UvV0$$+yc~Z4*v#rJa@gR^l zYfKMYzj4xm^M$dvwha%x){mz}!}DeVQz(x!(ds?xs%)c98yBk3x9Lyvl&SuVJGAK2 ze5!TcX>QG!?Jd74DUzW1i0MS(-T0m>A_=b*$#-m%mNs|T!`|30reD_!a{%>j#rdvG zxNp%ojhybU_P_pty&1_Qd}@DS4DXJdYfsJG1ASv=nmWzN8dKy@-Ur7pok0&||Nmj{J;R#nwzg3zf~bIsf(=j<5NS&9 zpi-nOh>@=J7C?Fn5gRHB(rf5NTIhscM5QP60D%Mr5(0z>0Rn__7C!sk&))kz?|YqJ z=lXtpe{yAEuH{^7%{kW?_kE9h_+MsC&@}uRD(k6OM%?uMlC9>iB7aXTkeoQo0|k#z zqRr%DnH2437jLVe{KK%Ar(kyK-fy@eIW2hq%`+LfbOqmwm!trRWa-IU?c|>w>4`fV zi{rokJwylr_>--aKk33h0p>r+=xLE#eSQAY{wpEdJH^EGD@el=&}jH{P;c&gk6?V< zyBW(&=fASn>ns4jqWue;9sS=?{bLJF%B2{eYXAO6UmhTlyjg*O&{iB^Dw7&Dxo`Yq zI=ssRXsIXkl?wljHo4yPg3Z3>*{r}s^(wn!nh7BF;D_!vvEWYqu?hfcHqVKu9r<}Y z)O+HvJnLV0w|_)HfBt53^Rq<0a3#-wJN@5RY*7z@>hLLQg7UvR1N`ebuN-QqZS*=n z{I|>eCq4E5?`c5a1N0yNVVvI`3o~{^c5hR-<^kM0hEGFX>b)jFIUfnrO;k6^(-A5( zE{I!q9%j68PIV$p_*ZAV+39z#bV!cpqB@XcfRW7mKzN;m#)R;nKvC_Gwms`~b^FhS zMhkoXU}Qt4(X_-ezDs+x5tY1fqGoSjAll|XXQV))qlmL6OLU!2b@)V z9+nL|b{($vHC_0OzxBkQ2dicSDCO^q1lAt9EPT5=^Nm>LwLf*#xMLoA(dOZ~V!jt@ z*(??+p~eN;{1=8Txy4IoEKZA;Jo=zUf7~?+&~*&iu$C{ux@u*{5v( zHE})<&<9CZ0NVQlmMP!Q1G{eQVRC10`Lia^K8bQvhR-TIhre@uxOfk6!;mw){#F5_ zeuc>Lja<)13>>iebJ=xg0a;OE%E%$Zcm2f+HgmgR?h6$+=&C0e=~qRbM$Mk}ldG)5 zo*{gwYXjH9-g1n@dd`H7IJ*y`jitc6|^?dG^3y&Vk8I(?&l9@~I zTroQOYt!O%VX$`Np9y@%0AP>5npW{2ZnR_cTw+c~!W!9aSOG__WoBVwI)VoJv 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

M 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 diff --git a/pyproject.toml b/pyproject.toml index c37c3fb..f071687 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,7 +21,6 @@ sqlalchemy = "^2.0.37" psycopg2-binary = "^2.9.10" requests = "^2.32.3" arrow = "^1.3.0" -streamlit = "^1.45.1" [[tool.poetry.source]] name = "testpypi" diff --git a/src/skypro/reporting_webapp/README.md b/src/skypro/reporting_webapp/README.md deleted file mode 100644 index ac9e24d..0000000 --- a/src/skypro/reporting_webapp/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Skypro reporting web app - -This is a Streamlit web app that makes the reporting functionality available over a web front end. - -The app supports different 'scenarios'- each of which have an associated reporting configuration file. -This is useful because it allows multiple microgrids to be reviewed from the same app. -It also means you can compare multiple Supplier arrangements, for example, you could have a scenario where P395 is active, and one where it's not. - -The app calls into the main reporting code (using the appropriate configuration file) and visualises the results. - -![screenshot](../../../docs/reporting_webapp_screenshot.png) - -## Usage - -The Streamlit app can be launched with: -``` -SKIP_PASSWORD=true CONFIG_FILE=src/skypro/reporting_webapp/example_config.yaml streamlit run src/skypro/reporting_webapp/main.py -``` -This should open a window in your default browser. -This example configuration uses the integration testing fixtures which only have data available for August 2024 - so that is the only month that works in this example! - \ No newline at end of file diff --git a/src/skypro/reporting_webapp/__init__.py b/src/skypro/reporting_webapp/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/skypro/reporting_webapp/example_config.yaml b/src/skypro/reporting_webapp/example_config.yaml deleted file mode 100644 index a92b484..0000000 --- a/src/skypro/reporting_webapp/example_config.yaml +++ /dev/null @@ -1,5 +0,0 @@ -vars: {} - -reportScenarios: - "Some scenario": - config: "./src/tests/integration/fixtures/reporting/config.yaml" diff --git a/src/skypro/reporting_webapp/main.py b/src/skypro/reporting_webapp/main.py deleted file mode 100644 index 71683b3..0000000 --- a/src/skypro/reporting_webapp/main.py +++ /dev/null @@ -1,357 +0,0 @@ -import calendar -import logging -import os -from datetime import datetime, time, timedelta - -import hmac -from typing import List - -import pandas as pd -import pytz -import streamlit as st -import plotly.graph_objects as go -from dateutil.relativedelta import relativedelta -from skypro.common.cli_utils.cli_utils import read_yaml_file -from skypro.commands.report.config.config import parse_config -from skypro.commands.report.main import report, Report -from skypro.common.cli_utils.cli_utils import substitute_vars -from skypro.common.microgrid_analysis.output import generate_output_df -from skypro.common.microgrid_analysis.bill_match import bill_match -from skypro.common.notice.notice import Notice - -TIMEZONE = pytz.timezone("Europe/London") - -# This is a Streamlit web app that uses the reporting functionality from `skypro/commands/report` - - -def main(): - logging.basicConfig(level=logging.INFO) # Set to logging.INFO for non-debug mode - - skip_password = os.environ.get("SKIP_PASSWORD") - if skip_password == "true": - logging.info("Skipping password gate...") - else: - password = os.environ.get("PASSWORD") - if password is None: - raise ValueError("No password defined") - if not check_password(password): - st.stop() # Do not continue if check_password is not True. - - flows_db_url = get_db_url("FLOWS_DB_URL", "~/.simt/env.json", "flows") - rates_db_url = get_db_url("RATES_DB_URL", "~/.simt/env.json", "rates") - - config_path = os.environ.get("CONFIG_FILE", "./config/config.yaml") - config = read_yaml_file(config_path) - - st.title("Simtricity Reporting") - - # Draw the first row, which contains three columns: - # 1. A scenario selection (the scenarios are defined in the config file) - # 2. A month selector - # 3. A custom date range selector - # Either the month selector or custom date range selector will be used to set the time range of the reporting - now = datetime.now() - _, num_days = calendar.monthrange(now.year, now.month-1) - col1, col2, col3 = st.columns(3) - with col1: - scenario_name = st.selectbox( - "Select Scenario", - config["reportScenarios"].keys(), - ) - with col2: - months_df = get_previous_months_df(24) - month_select_start = st.selectbox( - label="Select month", - options=months_df["start"], - index=None, # select nothing by default - placeholder="Choose an option", - format_func=lambda x: x.strftime("%Y %B") - ) - if month_select_start is None: - month_select_end = None - else: - i = months_df.index[months_df["start"] == month_select_start].to_list()[0] - month_select_end = months_df.loc[i, "end"] - - with col3: - custom_selected = st.date_input( - label="Or select a custom time range", - value=[], - format="DD/MM/YYYY", - ) - if isinstance(custom_selected, tuple) and len(custom_selected) == 2: - custom_selected_start = custom_selected[0] - custom_selected_end = custom_selected[1] - else: - custom_selected_start = None - custom_selected_end = None - - start = month_select_start - end = month_select_end - if custom_selected_start is not None: - start = custom_selected_start - end = custom_selected_end - - if start is None: - st.stop() - - # Convert the start and end dates to aware datetimes - step_size = timedelta(minutes=5) - start = TIMEZONE.localize(datetime.combine(date=start, time=time())) - end = TIMEZONE.localize(datetime.combine(date=end, time=time())) + timedelta(days=1) - step_size - st.write(f"Reporting for period: {start} -> {end}") - - # Read in the reporting configuration for this scenario - report_config_path = config["reportScenarios"][scenario_name]["config"] - report_config = parse_config(report_config_path, env_vars=config["vars"]) - - with st.spinner("Running report..."): - result = report( - config=report_config, - flows_db_url=flows_db_url, - rates_db_url=rates_db_url, - start=start, - end=end, - step_size=step_size, - file_path_resolver_func=lambda file: os.path.expanduser(substitute_vars(file, config["vars"])), # Substitutes env vars and resolves `~` in file paths. This captures the `config` variable. - ) - - # The reporting run has produced a set of 'notices' for the user - display them in a table, highlighting any severe notices - notice_df = get_notice_df(result.notices) - num_important_notices = len(notice_df[notice_df["level_number"] >= 2]) - num_notices = len(notice_df) - with st.expander(f"{num_important_notices} important notices ({num_notices} in total)", icon="⚠️" if num_important_notices > 0 else None): - st.dataframe(notice_df[["Level", "Description"]], hide_index=True) - - # Present the import and export invoice estimates using 'bill matching' so that they are formatted like we see from our suppliers - import_bill = bill_match( - grid_energy_flow=result.df["grid_import"], - mkt_vol_grid_rates_df=result.mkt_vol_rates_dfs["grid_to_batt"], # use the grid rates for grid_to_batt as these include info about any OSAM rates - mkt_fixed_costs_df=result.mkt_fixed_cost_dfs["import"], - osam_rates=result.osam_rates, - osam_df=result.osam_df, - cepro_mkt_vol_bill_total_expected=result.breakdown.total_mkt_vol_costs["grid_to_batt"] + result.breakdown.total_mkt_vol_costs["grid_to_load"], - context="import", - line_items=report_config.reporting.bill_match.import_direction.line_items, - ) - - export_bill = bill_match( - grid_energy_flow=result.df["grid_export"], - mkt_vol_grid_rates_df=result.mkt_vol_rates_dfs["batt_to_grid"], # we have to pick one set of rates for all exports, so use batt_to_grid here, although solar_to_grid should also be the same - mkt_fixed_costs_df=result.mkt_fixed_cost_dfs["export"], - osam_rates=result.osam_rates, - osam_df=result.osam_df, - cepro_mkt_vol_bill_total_expected=result.breakdown.total_mkt_vol_costs["batt_to_grid"] + result.breakdown.total_mkt_vol_costs["solar_to_grid"], - context="export", - line_items=report_config.reporting.bill_match.export_direction.line_items, - ) - - with st.expander(f"Import Bill: £{import_bill.bill_total / 100:.2f}"): - st.write("Note that TNUoS, Ripple, and Capacity Market are not currently accounted for.") - st.dataframe(import_bill.bill_by_line_items_df, hide_index=False) - - with st.expander(f"Export Bill: £{export_bill.bill_total / 100:.2f}"): - st.dataframe(export_bill.bill_by_line_items_df, hide_index=False) - - with st.expander("Remote Generator: £N/A"): - st.write("Remote generators (e.g. Ripple) are not currently accounted for") - - with st.expander("Customer Income: £N/A"): - st.write("Detailed breakdown not yet available") - - st.write(f"Average cycles per day: {result.total_cycles/result.num_days:.1f}") - - draw_sankey(result) - - # Provide an option to download a CSV file for further analysis - output_df = generate_output_df( - df=result.df, - int_final_vol_rates_dfs=result.int_vol_rates_dfs, - mkt_final_vol_rates_dfs=result.mkt_vol_rates_dfs, - int_live_vol_rates_dfs=None, - mkt_live_vol_rates_dfs=None, - mkt_fixed_costs_dfs=result.mkt_fixed_cost_dfs, - customer_fixed_cost_dfs=result.customer_fixed_cost_dfs, - customer_vol_rates_dfs=result.customer_vol_rates_dfs, - load_energy_breakdown_df=None, - aggregate_timebase="30min", - rate_detail="all", - config_entries=[], - ) - output_csv = output_df.to_csv( - index_label="utctime" - ).encode("utf-8") - - st.download_button( - "Download CSV", - output_csv, - f"{scenario_name.lower().replace(' ', '_')}_report_{start.date().isoformat().replace('-', '_')}_{end.date().isoformat().replace('-', '_')}.csv", - "text/csv", - on_click="ignore", - key='download-csv' - ) - - -def get_db_url(env_var_name: str, env_config_path: str, env_config_section: str): - """ - Get database URL from environment variable or environment config file. - """ - db_url = os.environ.get(env_var_name) - if db_url is None: - logging.info(f"No {env_var_name} defined, trying {env_config_path}...") - try: - env_config = read_yaml_file(env_config_path) - except FileNotFoundError: - raise ValueError(f"Failed to find {env_var_name} in either environment variables or {env_config_path}") - - db_url = env_config[env_config_section]["dbUrl"] - if db_url is None: - raise ValueError(f"Failed to find {env_var_name} in either environment variables or {env_config_path}") - - return db_url - - -def get_previous_months_df(num_months: int) -> pd.DataFrame: - """ - Returns a dataframe containing the start and end dates of the previous months. - """ - starts = [] - ends = [] - current_date = datetime.now() - - # Generate the previous months - for i in range(1, num_months): - # Subtract i months from current date - past_date = current_date - relativedelta(months=i) - - # Create first day of the month - start_of_month = datetime(past_date.year, past_date.month, 1) - - # Create last day of the month (first day of next month - 1 day) - if past_date.month == 12: - end_of_month = datetime(past_date.year + 1, 1, 1) - timedelta(days=1) - else: - end_of_month = datetime(past_date.year, past_date.month + 1, 1) - timedelta(days=1) - - starts.append(start_of_month.date()) - ends.append(end_of_month.date()) - - # Create and return DataFrame - df = pd.DataFrame({ - 'start': starts, - 'end': ends - }) - - return df - - -def check_password(password: str): - """Returns `True` if the user had the correct password.""" - - def password_entered(): - """Checks whether a password entered by the user is correct.""" - if hmac.compare_digest(st.session_state["password"], password): - st.session_state["password_correct"] = True - del st.session_state["password"] # Don't store the password. - else: - st.session_state["password_correct"] = False - - # Return True if the password is validated. - if st.session_state.get("password_correct", False): - return True - - # Show input for password. - st.text_input( - "Password", type="password", on_change=password_entered, key="password" - ) - if "password_correct" in st.session_state: - st.error("😕 Password incorrect") - return False - - -def draw_sankey(result: Report): - """ - Plots a Sankey diagram of the energy flows in the microgrid - """ - color_blue = "rgba(38, 70, 83, 0.5)" - color_orange = "rgba(231, 111, 81, 0.5)" - color_teal = "rgba(42, 157, 143, 0.5)" - color_yellow = "rgba(233, 196, 106, 0.5)" - color_grey = "rgba(224, 225, 221, 0.7)" - sankey_df = pd.DataFrame.from_dict( - { - 0: ["Imports", "Battery", result.breakdown.total_flows["grid_to_batt"], color_grey, f"{result.breakdown.avg_mkt_vol_rates['grid_to_batt']:.2f} p/kWh"], - 1: ["Imports", "Loads", result.breakdown.total_flows["grid_to_load"], color_grey, f"{result.breakdown.avg_mkt_vol_rates['grid_to_load']:.2f} p/kWh"], - 2: ["Solar", "Battery", result.breakdown.total_flows["solar_to_batt"], color_yellow, f"{result.breakdown.avg_int_vol_rates['solar_to_batt']:.2f} p/kWh (displaced export rate)"], - 3: ["Solar", "Exports", result.breakdown.total_flows["solar_to_grid"], color_yellow, f"{result.breakdown.avg_mkt_vol_rates['solar_to_grid']:.2f} p/kWh"], - 4: ["Solar", "Loads", result.breakdown.total_flows["solar_to_load"], color_yellow, f"{result.breakdown.avg_int_vol_rates['solar_to_load']:.2f} p/kWh (displaced import rate)"], - 5: ["Battery", "Exports", result.breakdown.total_flows["batt_to_grid"], color_blue, f"{result.breakdown.avg_mkt_vol_rates['batt_to_grid']:.2f} p/kWh"], - 6: ["Battery", "Loads", result.breakdown.total_flows["batt_to_load"], color_blue, f"{result.breakdown.avg_int_vol_rates['batt_to_load']:.2f} p/kWh (displaced import rate)"], - 7: ["Battery", "Losses", result.breakdown.total_flows["bess_losses"], color_orange, ""], - # 8: ["Microgrid", "Power", 1, color_teal, ""], - # 9: ["Microgrid", "EVs", 1, color_teal, ""], - # 10: ["Microgrid", "Heat", 1, color_teal, ""], - }, - orient="index" - ) - sankey_df = sankey_df.rename(columns={ - 0: "source", - 1: "target", - 2: "value", - 3: "color", - 4: "label" - }) - - unique_source_target = list(pd.unique(sankey_df[['source', 'target']].values.ravel('K'))) - mapping_dict = {k: v for v, k in enumerate(unique_source_target)} - sankey_df['source'] = sankey_df['source'].map(mapping_dict) - sankey_df['target'] = sankey_df['target'].map(mapping_dict) - links_dict = sankey_df.to_dict(orient='list') - - fig = go.Figure(data=[go.Sankey( - arrangement="snap", - node=dict( - pad=15, - thickness=15, - line=dict(color="black", width=0.5), - label=unique_source_target, - color=[color_grey, color_yellow, color_blue, color_teal, color_grey, color_orange, color_teal, color_teal, - color_teal] - ), - link=dict( - source=links_dict["source"], - target=links_dict["target"], - value=links_dict["value"], - label=links_dict["label"], - color=links_dict["color"] - ))]) - - fig.update_layout(font_size=10) - - st.write("") - st.write("") - st.subheader("Energy Flows") - st.plotly_chart(fig) - - -def get_notice_df(notices: List[Notice]) -> pd.DataFrame: - """ - Returns a dataframe summarising the Notices, which can then be presented to the user. - """ - df = pd.DataFrame(columns=["level_number", "Description"]) - for notice in notices: - df.loc[len(df)] = [notice.level.value, notice.detail] - df = df.sort_values("level_number", ascending=False) - - df["Level"] = "N/A" - df.loc[df["level_number"] == 1, "Level"] = "Info" - df.loc[df["level_number"] == 2, "Level"] = "⚠️ Noteworthy" - df.loc[df["level_number"] == 3, "Level"] = "⚠️ Serious" - - df = df.reset_index(drop=True) - - return df - - -if __name__ == '__main__': - main()