From 814549bf9f35d76f3e070c2a85f15b608f2a3935 Mon Sep 17 00:00:00 2001 From: jkriwet <jonathan.kriwet@eonerc.rwth-aachen.de> Date: Tue, 5 Nov 2024 08:32:34 +0100 Subject: [PATCH] added simulation and calibration capability --- .../__pycache__/__init__.cpython-310.pyc | Bin 157 -> 0 bytes .../calibration_class.cpython-310.pyc | Bin 18874 -> 0 bytes .../energy_plus_api.cpython-310.pyc | Bin 21651 -> 0 bytes .../__pycache__/utils.cpython-310.pyc | Bin 3043 -> 0 bytes energyplus_calibrator/energy_plus_api.py | 64 ++++++++++-------- examples/e1_run_energyplus_simulation.py | 9 +++ 6 files changed, 44 insertions(+), 29 deletions(-) delete mode 100644 energyplus_calibrator/__pycache__/__init__.cpython-310.pyc delete mode 100644 energyplus_calibrator/__pycache__/calibration_class.cpython-310.pyc delete mode 100644 energyplus_calibrator/__pycache__/energy_plus_api.cpython-310.pyc delete mode 100644 energyplus_calibrator/__pycache__/utils.cpython-310.pyc diff --git a/energyplus_calibrator/__pycache__/__init__.cpython-310.pyc b/energyplus_calibrator/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index cc656954d093f4c5933f27c989dd3fa3c11b6f1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157 zcmd1j<>g{vU|`t%t2hlrKL!!Vn2~{j!GVE+p_qk%fgyz<m_d`#ZzV$!NEku<a!9d? zDM~HKFOEsgOD#&TEXXM>j!#a^$xJFrEXgmzAsQc_nU`4-AFo$Xd5gm)H$SB`C)EyQ MaxoJF0|N^K01nS5ng9R* diff --git a/energyplus_calibrator/__pycache__/calibration_class.cpython-310.pyc b/energyplus_calibrator/__pycache__/calibration_class.cpython-310.pyc deleted file mode 100644 index a06ba46d2fd037c5de118254a50a2126fe8a3f69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18874 zcmd1j<>g{vU|_K1*G%uoW?*;>;vi#Y1_lNP1_p-WeGCi?DGVu$ISf${nlXwog&~D0 zhbfmSiir^<#+<{P%M!%`X0zn5=CVbx<+4Yy=W;}G<Z?!F=5j@G<#I=HgXI}>cyf88 z_@He5C;_n9f>A;#3@NNR!nq<*BDtbbqPb#GV!7f`;$U@bITE>&QIcRbdyZ7Dbd)rh z&5<LMD;p&XW^?Aq<;q9NGcvd{q;REhw=kq|H#0>kq%a0EX!5)S`OHs~@fJr)Vo7RA zW^Sq`<1Lne#F7k6wp+}Od6l<VTr!hOZn5}e7MI-O@GmII%+E{Axy2e%T9A`^i#0Sa zGe1w0<(7bRVoqjKQ6fm%IVZ8W_!bvTB){kut9yQ8PVp_SkkY)=qJYGr#9~dxTYMpz zxv9aaMVYC^E{P?HnvA!Ef=d!hGK)(xlZzem5_2l6Qj0VhZ}Gb3r52@E2IQ0$I|g`a zGTxHP%uCBJj!!Gf&y7z;SR0>{pPmfz4l-7OMb;%o28L7yPy|IWr7%V@b24!<aWZqV za58bSax$furLd*4q_C&5q;RCNq;RIPq;RFOrf{dSrLv~7r!h$~r0}G2fO(v$T&W<; z1rmkfRPIz(Nd^!vg%`q3;Y;Po;!WWP>tO}U2&D3Xd7P>IsbCS1s3b#*U@Bj#fFwhT zP%3MRa4LU_2wWX&D%=)Hh7{3M!4$DnKCn$nDdH&-Ev!*ODds6sDbg)0QNk&bP}8xv zFO4ZhCPlV|B}yd4JVh==zJ(=9G*v7`0jvY!KSi*6mB6GVh)m;1QBF~5VQFTJ5>Js# zl}KYsQB6^6VTqDVQ3vbeNaaHKBSjM8?=+SajTFrmmMEzd^AxQV?G~0O=@j!6ofO>` zmM9rcy%dWS{Z!TzgH+ZO!&Lqh$rPqEjufL5;}+H^S+ERPG?f!<1K4E<7AU;Z*iuYV zOj}r@<WiV|88j_#i6D{(BE=<oGcqu6DJUo?I4UHAlA}Ueevtw^vE-#IAap6@=BK3Q z6e}dACuZgqmnh_>CKi_#rKTvPB$g!Vae++<$;d2*8dOk}UzVAYTC9*(nwJbp?uj{> zC6x*#`Bq?+hI$IYsU-@f1qz9IDGFtYIhml0rBIxiTbcvT9SQ}BMTxnoC8<TlU=2ok z3eNet1&Kwe$cl<mi%WA#iWSN;OEMISQWJAv&dN>AD}iV<)>8mw$K1@SREQUlOjan# zSIEuG%LGf7WTYyjWTvI17NzDTr-Cgt(Nl0w%}XsxEJ=mAF*83;p&%!}q!{e*Vt7sj ztM|Lb;^*t+`jU}>fx+z-Q*z2JE^w&D7bKQs+~Q3wD34Fe%t?iC#Xu&fR~F=y7RQ4^ zG%+V9J|(m0mJpJ7S!z*nW`5o+0Yt#W7pIn#7Tn@40TmMQpinBl#hMN-ID|nV5D$tE zFp&ldz+0jqx%jfgqWI+eyt34ylK7O&<dR#w#mO0|DWy57AgSV8;>n3Q$?=J4C8<U6 z#hJPBuvojrlUh`iUlgC4T2hpme2X<NKDnUu7FSw+QF3a0abj-jEs@l`vecaXf>h)} z<`z#;YH@sCVs2`DVoFM~5K>tq!oa}5$H2hg45}L<7#SF9cvBe57>hVc7*d#;8Jieu zcxxEq8B3UI7*m*Qm};0)m}^*T_-nXpcxqT`_-X`FSbBMC7~(;q4Dl>AOf?MgtToIv z4DoC=EHw=A>@@;44DlQ_>@^JWoHhJ44Dnnw+$pT33`OSY47J=f+%*jG+%*gfcos4+ zGL-Pvu$S;PGZlH%Ff8C-$N<*ES;G)7P{WYLoF!PpmcrJ{$jDH`R>Kf41QrucVNGFA z;pk<m6{-=cVTc#0;izGV7p>u{VTc#2VOSszHdmsCAxo^8F@-amxu^wFpMXRbNG@b> zVQ6No6|P~(63CLO5l-Pr;q3+a0c4{z$et__kX#C1FUU^<H4F=6!0wU-$;Hdn2&S-> zG8WCP5zJ#u0r^foMF3P=)i7j<f=mXvF<v2sHJCwDFwue)n!Q0;+%qq;Br`Dwln+2j z9Vurc3Iu3A1}S$eN-u`wRS*w^lT)k|!t;x=GxO3FQZkEDlS}f8Dp5;}{5)_z0I3FH zMB=wn09BTt{Dx$&r;8gjOM-F*icXZQg3w%^npl#NTBLxf9$fjM=OruT@(Y^BAf*f3 z{iwDgOo8S+6ceCg3dJQwnR)3bI??l|l>(?e0BQsjRVpOs=anR8=7GWup$@4SLNN&` zUxWM&%EO>S5EOJtsqnHnHAP1uH4_{biNy+_9IcRFq>z(YT!La4DDM|rDS%of3i)XY z`K2WVr6mewiA9--Nja&-AVXoLeJZSEM==0PiDISTi(K?W5&*bp&MZcYe~|T{@&%>n zu~P6&EGPg4Mp9}?d1`7Na)A!24WKm(s0c?m6~$F3Wfw|N=cg&aBoTT+-b4vI6vJ?o zd{znp`Nbu=1x5MEsl~-0=fcWFu#b@<5?TqN7>ZnKS}C}K%1{MJ84A`73v^IzqM;6| zGt_ky)SbhEe1l!pbwE+64rXei7z!?YtrYx9bCXhwK=J7u5UP-zUj&KB(qc%Z1<H6J zj3}eg(-Bw(6ez`sx!{VeG!;@;g0z7!wj$k1Av_}$oZw3G5y?;irW99lMy>~}6dY4h zG9irtXeI)O1|$H%nOXr<XB0zP6CjraC1w_<qLo8_iMgrZ5Vcb9OjAG(X@$&Uh0Hu~ zYXT+U!V+^zk+gtnNKmFM&MYoT%}cISNX|%2&MsC+OU%rH>(gW|5@ujvxWxvEm0K*J z2&pmyTMUcJ+|uF_g``wiPE-O#q>_$;5=4s<C?1tS+LS^xd5T0C7#O0s^UG3;iZWAD z<C9a0#6afrz>2zp#FC6C!IadT)RNTrlGNM+a9g3cNRokpp-34-$b$$45Fr5~lt2dZ z!6G0YT-f?)GDdNND)3@ZD<O&-)K!Tu2KOE`nQn1`nhTIdRTOVgYDsBPUVJ{duTlhR zvLu5DSXB+`zp*edFa(3@X^=}Z8EP0}*<+Y$8Ectpm}(d&GZiugGpuAN(qdp>&}6>F zq-Su8IXkuT7IRr*4p<OO{PIk(iYZDh$S;mTYS_RsKz<PpQJ8|v{JeN@(^RjZ@)nm3 zsH98I&n>X40Xd6}fq{XGfr*jpf0ZGkUO}qP;^Q;(GE3s)^=xwTlM{1_?eq{P6oFbI zD;c9$5-T!`HJNYm!GjIbLSh5)Q_^m+L(0IkTMQ`S!^FVA01qEf0|y*FthJ0aj42F| zu+e1n0|&uMrXp=nR5NCRxe!7R6ovW>3=CZ$pMXpgV$f8)#R*T{MT#I50w9h2kdTW9 z*KdghnUFLAij*P^kRot$0QKQ+@gS;?++swkxg``2PUG<i>Ec^lnZ@8bF)umw77M8A zxFs5&o?3#e1`-mSkPt{LNsQtxPAvg95W(rINDAaS4rp1JdW#d1Zd1~VZ?VOL3jg9; zVqhAh61c?!br3`qb53gBE!NDE)ZF4*Y(=S{Lg1D-R0Sxvf+`SLZoQ=%pInrhSdto_ zm{|c%CZ!pP$c;}(dbuSCmMa3+_fR1*kkg?Z3`jc~?7<>cP)=fp)Q-iPBDYwIQ*+Y5 z85W#Ji^So949<)oUl&P(#AHB(EQpW;5r_;5jyq5Wg~S0UZosw_frdn)xFKGISPsfQ zh$L}~1D0k%#ugVaFfefFGBGkSvixUb0@2tp#}_tUHYPSkFl1t5<X~iBWMkxD;$q@r zWMkq3%djxA{byqVso(&Ma4@p{7h+;zVq#=rWMSm^%f-gVD8wkiR3(cyFM%QmRC1u? z22f69Wnf?cl^Vrm3=9mMj47NcOeG8{%q5IzEbR<wj43QBtS!8?j2#SFOfC$uyr5E~ zgCUE#jG>mfh7sJ-XX|BRWGEEqV8~)gVJ~GYG6%61u!7pmu>vtnwJf!)HH<YZ&7c-J zV-0Hxha>}tU8s@59?Ss3np}yCVO?5K^$`Z^Sc20%QXK_r>?oi$g~5d=sBS7vE-5Wa zMQRU&`?k5MB^miCu==7TBe4Y0L^jk@aLma;wj;G7v$#YdGY@PD*kpL^Vx*@48sLGH z#R@s8i7BA^I5D}TG%*L%)htad)=|jIFHuM<Edp1%pn?zFoXkY3tBv&(f}!0wq}EPG zVp*y}K~a7|Y7w||j_?jC^(wrofH)(+G%p3@6;y9P!x*`8Md&LoDT0Ke0+wpo?G`Io z<t_fq;&@n-4OC1dgNi~}B?L-Rph6Z@6Bl<dFfi0GEMQ1sT*z3<)WML&n8mb!c_BFY z6baWbr7)#1w=zjGfD)DqL#$veOASj6a~VUCLJe~bizGuWbD?MnOAW(ph7^{$kgg_U zky#3B4RaY|kx2<FScVNE0~$3cVXI*-VQ*$Ca)QdSBjhwW68(`A8Ym!~L9Gad%)FG$ zvdk1vJc2z48o~g@Xl6=gNhMNx0_ni)V}V4$+K}383ZRw&_OJ&jM+-khI}L0O*!s+3 zg+$DDF(Ng9jKS8@0*S-xBXDaAVJ0YXX68ZqZ}4Od(g4C}4K9Q(q%?u0o%V}S-|yxB z|NsA2se;lB$clo*q7qP37nD!IX-^>~wK%yb6WnUK#R94vsvJOyQ9Y=mkW^X%%6CPn zAj!OZ1tpMDB~UPejDj>dL9KdF#;OWbC{9hy1^0)NQWbJDAr1aSWV;l~GcuDiz*!Zf zE)f)`rKx%fo+S#!C7C%n3aNQ1pw_2CBDg!I$#ILdxF9F9q{sqPN3y3D#Ag-f=iOpS z&M&AeG6#uqAwsFh8YI91a*HNwksqio@dt}!r&bo<;)b;CAk~Eq0|UcK#v*T!8gSJC zYDnDThE(t1fSv_vP^f{LMtnSsEKEF%9E=={T#QUi9E>dgS(rH(nLyRUe-<V#CO$@% z|5Y~Fi+hNP;DQq}%!Ft}L8QQzX)+dpT<QmIKx#6&fyTp&ONwr>B<1Jl6j_2?39c2v z4OmxDOOXxY_Gpk4+^10-;7&<=Nq!V`a0xVS4XGBRKq^7LEV5!?VCVt)4paj(@pJrV zV&wbJrNYI?$H>Jb#K^(O$H?-Rg|SMVNFSk8VVuwg9e7|Wfq{V`lcAQeh9Qf=g&|f0 zRHiIo1eZL_H4IryS<DMq7BbYb)G)g+#In`0*09vDN;1^46pGZa)Uu^8)v$>$)Uu~A zgK3T$wi=Ea_B5t6CQwCZ!%)at1DaM~DK$kdL!7~_8U=8OBUdA!Q~@sfD<R{YNuaX0 zSOFA33dyBKMX7lukZcG^lEp}cOc1z@kJf)e8kqo(n}XvJTuy-6UBwEC#R{Ng2Oi)o z0nJ|&E99r4WN{5pt2#3=C%z2SvC>h{$jL8HEs6&_Oh=)#pa90v)C8FZR)y55^UE(u zMbw+1^1=z?CGhBOY6+++Jhai&Koyknp;kfs26shK00RR<I;5KTVgDS$cwn!|3Q2OH zP765W6@`EjPbeteae~ub6n|c7IdT&hlG`Fc$|6AoD1Sw<Lv4-X%E(O5fOss5Gbg_s z!i1ztc<w8*Wnf@94oa7xCOHca7b6!V52*3Q$if23d!R;El@|6iiLJqnk}N^h9|(h! zWgBQNjWLC(g`tF@h9QfwnGrPR2TrD-HkC0bnbv?tQ>99nYnWy;q%cFOEYK)v7E2jp zk!}qWSSM>UNR=*B6|6dB$YQAhRiMl@%t)#nN|<YyXEUU*Ld+`UO<@aW&}2_kLr%Q# zmKIX0TOl1ZEDdjJC6*;-=77eXz^xLbR0^&*krJt)o&tC#Oab12g7z>#!zGYbIy@m5 zVW>qOJ_42b3L22XzMM)>f4nR+5!CgE4&`Yg>OgGuA8OqP@eQa_N&_WVP*sBLt|H{Q z2e236jzo!2Q2PcHp`bKc4C;fXgF4o1kdC7y!$femT9Xl6ph6OwDJWfnQyZ876@|CB zY(PCWa98*vDCL1n6=A3{#h%I_1vc0Nh*BJ3LX|qCk}LrgJMiij>N)5X4|q1ADjb_a zQ1=k*VLgSAjLf`jg~X)%(h`NlloU_}o0zANnpaX(2?{Sz)eCY3sG$ey)4}H>s+8~= z47S`)ldZ@G6cnI7RFNZy1*%7joIor)P!?x_WN}bW9@NWAO^Hv=&ndpe0<tnn5Jbjj z=EZ}Y3!Wf>gf2Wxi$GcIDJU>OV=N*(T#T@)l8c!SRK+m!L90%t|14jt6bS}(ks-)s zMj*nNfq@|z)H#BbR16HDhzE6=Kz0_t08N81q%eZos5J~Jpe)Ez!;->W%2>o-!&1wd zCk&bfDP=4Yt6{EX&Eu(INMVr#wPRUp7*g0kthvnTjJ2%k47F@EtS$_(Dz)r2><buD zSQj$JFx7I@a+WYIV5;FrVPD8p%K>I{g4vukoHZQTj782R%qbk;$rrW-EHxZ8oM}u8 z85tQ0)zTSixoX&47-D-N=G1VOux7EPaHeqeGKw?Qa@H_rvDYwWanx{Rvw&&NY(@tL zNrnZS3qg}DOj+zTOi)=6jV#Mk!=1&I!Y#>A!vmqSnTy&>m{WK_?kM3d0m*YL;9bbD zfNvo~3MZs(-^|#|Sj$_&U&9NXTv<@UoWcvzQNxpkp}Ll@h8JW5)XjXoj1mmB{ODrh z47CC^d^P;p3=0GnGSmu!CYiEXz-*x!!Q%5ZLPeKLm{a({ws2>0)bPY})Nn0eso?>K zk$(wmmS7E63U`V?FH@~>jWEPFHH;8Co4M#y33G}dShsL6gQieoH*&!VF8n}65^Q`! z0n4yBc(esvA%jXZq@okE2LT$j0xJhM7p)Y65mTyQVNe!Fo>&D{zaR|Kmy(8}9@0oI zRsgL#a05+5zzZ~x21qtavw}?rfXC}W&O=fU*MPMl5&#)nPfbB7IpMZJT04n3ndy0{ zDGH#G%;J*7+ybPA1hz68(WnM@Sila-%uCMCgNAP=Xigebe#6~%ix=eg%)FA+qB79> z3z1Y%g9S2f1Q+#-;wmml1kIi%mZVm(fSM>#oW&*i1>ln87l&%3u4=BXYD$$>Fi4pK zY-l(sH7y@BXI+wC04e~BGjkQ-W`ai`H5sE=QW7hR!R39GZg56o0k{W}n^=;Zft(h= zB`i1%fI=S3t5QdbU07_vY)&mp&C97&C@x4$2CY_M&&|v$ElDk|G6F3q@yts}tpGKz z;AX+fUu1153aNSdrRf<(1`G@gRdQ%<1J4#K6r|`S=jSCSmS_qUfvU73P)&4;qqwA~ z02F0KVW55tTVg>$YF^4Mrh=3xPLTa6sW~NyQOr5{$+uWDL2fAmwb5>|7K6MGF6D1A z7pIm)ahBvmhp(epK$G)DE+FHW6Z0x>u|cgBK`Um95<vxS5@<+|6CTu2T=57t4|06p zVg<+REf!E@Msdccq=74l;wW|yvp6#s!YE2jjN%1(2<&puI3h9^B+HbO6vb4U6vYK; z43}i2=0$OXnvbbP@n8-+)M)f-$DM(Jfsv7cp*RgR*eA@v$N?U}V`CIyX8F&;1nSlB zfZLNCi~>w7Ogu~iAReeM$H?@b2hyu!Wcn|{3>q3_`7g%|>hXy&i7<*V@_>4O;9*0S z{~XLbjC_nDAoYw@I`}FtP@VzR&d?lFiPC)GXJBApht1!g1GmC!8PgeRnbJW6F$`G@ z3mC!Ub)um0x)`Qf)>^h2Q02n{DlBW57BJPYf?3Q9m}=NStU~S**!Uk~FLNz>CPOU; zXqYC871X)~kNa`fa-}fUaL#6!%T&u!!&SqT!aRqmhNFhXhM`cugsp}li+usdLeRWA zcMW$IC#Z6)1yvuMDWFanZwVK&8qj=w7Iz9;FLNzl2~P@p4Nnbk4POm=3P&$!)||6y z1-xW{_Q;T%w8{B-X_@JzMd0E=p%gqZh%^q3R5W8P@?dilnfZC(^<N6G5qMAy05&)^ z1yb%|bOS+Cqo5`XVyaG)`4%g<%XW(o+FyZm$ck^VfxBYGQQ(Ck@hh34SU|1fDCXkK zTyQy46bNcAG2apZ3CEWt7J<4UplH9v2b&xQuihw*5{55vNz91{sV*%_y~UoAnwD6a zQ=-Xwiv{F>ThOu*ls|4kN<|Q}2s}Iv8YtJ~h4jln0{}&!WM0Gz%Ez3kd8N7F<u#Dz z93Lp>f?9H*5pvK>1Egrk015Me2=K5vXx*VEKe(w^ln)XG4U!iXf>@xD=O|v3z=&dp z^x29bBlaaAdl~bJKpp&|VvwG45K#dlz|I9X2f+lWon7R?z`)=O%ABB9CJP5>q+E;< z(!pZ_XDlX0w!bWFLd>867A8iXe|)SUStdpv(3m|V+g~O&P_~3%w%=7&I5Hl%?@wSx zgAd+QF9uE9p^TJ*Mo2ke*>V~asB>J)1RA}_0!>IU_A=Ij$1Q4EG8t-FOF(QEaQ6CL z%T~i&!zRf98fIU>wveHgy@mya&rt*F79y+QEMZ>&7R}-WwN)1~)^dTC)}%Ak@|1AZ zaDmO0jbW<gt>pvh&El@%l?1iB__KIYn6sIS{0r@CxEJu&@PV>_4bKAJ8vX@*DJ%;a zLHt7dOomK`6xKORHLNvkHVh^FSpqejHS8&Dy-X?WA`Bo=Ne0l+e+nm9RuG3Q7g!dg zmjg{Nw<H6SUTm@;y+T=##W{?O3?)KYA~jq!oGE-M{JqR@K1YfG3ZFei5XN613Mt%5 zgcgXU2!Z@nB9tW#TEvthoFW1-V}S%{sZb5u0?8E76tRU&3nWv-p|k{)mW0w$P+A&F z%Yf)w(2^mBEU6lS*$gSNbD5+;ZC9oRyf8l0R_Pi+&{{^&)JlmEXfY8ZL!oeqEI4gQ zr6@=<q$oBs^$XMrmB?ku*Ra+Ir6{E+gIpNSkfOrEz{1eX%*c?(X~-~vu~?^^k&yue zBN-SOYM2)ArYL}IQGl3M!;qy2VWp@_Go+}2OaZG>1*xh5twdC>x{F@CmSq-~g4QKL zid4wrI#9<p5wyxiA-^ayJu@#cM@IoPQw>_Fm!bo11wjiVlm&>Ob}43)7&Y5i!Pf(( zAlkx^;U(mzCAN_>*g6`>{9_98iUp9(Agsw)qzNiZKvU`9_FWNZv8^W4Eg?ut5P72V zmLRwZg)CH5#K6GtG6iHpEr<YR>mtxtZV_n0Ta)P}Xg>HQXsA+?F^WAcGrc&oDz%Cq z9u}aMYihA3V-#ynVp3{Ol`^6e50O%UI0L?dBQrm*N(n;|*j*@UcwIn?AQMXz3=FLd z3|{Jj>JP>!j-q_f3dsDtUyKU37~{dCa=#d@elbS>VvPO8sPT(Yvx-HpATK?NwInk= zqePQ2iaRMOzal;}FF7N%xJneMYK_k>$Sl?a50W#MzXXkttYnO01JwX|C4N=>kkyOn zptYGG12vg%aTkGCe}Y$2M)8*xr>4Y17K4;j7NkaT7AKZLR$6K*L52eDK>-RLI{=R& zfa@8KlKl9*(%gc|DE73R#FCQKyjx6p1yO8?MTvRosYRI}EtMbwR0l<|WaO6?f$J}D z12+v^$$=U~QJmmaM0vSMsZrcuW^!3kZgJ`@=7OA(C^ksN9>oGm+fi(l;HZgWtANoZ znaSD3QEWM>>7X_;dr@jZPGWNEEx~fgVmr{PP{?AtD0Yyi(lXO;u_ou_7pLB0$uCIF zyTt+yG?tXo+=3!OkYhpBq^2;WhO7ovc<d$l@t}!^D6W(=P}>z$eME7?*hQJ?Q5>L! zI-rr}DCXq+oG7-+_=2L;lqhZp9S_QdAi<KN($pxX%!(-H_{@qZj`)gru;YuWK-QXp z+T1K4fhewckW0aB2xv@z+X;+mXpP@nJdnH;4+@&%I#5Lm8slW)0Zm!6F!C`8FbXgV zF$yuVFtIQSF!6xqF&McRg&0AVFV}xI7A8iP|4fWb|M~v2u@YwUuz<`H09W7wj2w(M zj6#e8jC@R7j3P`zjB@|Em^qkO7`YhP{&6w0Fya{EL3S}p(-@Ry;dSr~@N8ukLl$ES zqclS;WI-!aGgCirEmH~e0+t%4g^ab#;S4Fv@G_RekfB%_rG#b3Vy$5YHD^H$*%VN1 z2wE1)-ptg`2Q~#%cQY+yVr0ND#~#fbh6U_3;QBR%Iha9{qiQdr6oxDdhUa!rcO10T z8#2M*73}W^>g<BnYNq8E<tCQs!F9qJp#`AT+r^;yHslqT&_Py(%#_r;lFYQs)FN=f z4avzR5aqcbtKbGf+S8y>LPRqO)G`K*6Q&j+Z2ko=I8sv}lVi|=qsT9cJq)sFx{4FZ zP%w-Vf;uH0;gq6IP!YxfDH<k%lJ8^?F$I)eSaR|cQy`0Mrh?M6Fx1K5DZKcS{P@h2 zG)>50<1GxAfXkzz=^%ZqVBeu9d0v=lVA->vG!I%o#KQsVt;zfsVg~ioWc~{<S1BPv z0oHNIF9LP9LE!=MH%bBoO+UaBpc4}VLkU9(XbOudi@6z`3{xNpkg<ei0V^mu)G}ct z9P|Xpl*P7y9X!bnn)c$T0j<eq0QIqYnQNJAn80!@HK5rCn_AWy)*6N^&N7CgA`lIl z5{qG~WvgYcVFIyhIcnHbShJamib}X@I7+yinTm@_cxpIO*hCnb8B^G#K|Md-8jfbh zTFw$)&@iL~1E|T@%vcL*d~wWXN#U&FO5vEzGM5>=lAEc9)rO(a48xaP;0yxtB_C*| z8rBTbkDNh}LWx@%)Qn}Q;YmR@g}H_it0|k1O@XW-XJjZ5SRlBNp_aFXcY#m}&qBsp zP%~IKg}IcW=u8S|b-Qp0XpOgUGh+&0HcQd%8a~iU?kr(Y|5ltKkFkcYmcN9tM6{VP zODqMn<wa1Mp@v@?G)yUwC7vRbA`DuSp3aaWvWT%(unN=^m#AS$5$$EH6$)p_;{r9% z7#T_=Q^Y{4W6~LFg(4Yh1Z#xM8EOR)KCKn55p)5q!x5<wt`U)Ds1+@dTEJc-S|b4R z=>*0?L2ywap2&bQTnX-|fb(&FQF>w?XgPTrsC@=6KR}Z-keay|kzwIE9MYvmo$P_7 z?NsCj8OjoG(C!cD7A8dTlnGkFtN|{dKz(CR7dOOmSz|qgFwABp+!ZFE-6RE|p}@qP z9B?xZG^eisbv9ykJ6yvrDOgJ-H3d8y4q3SaE_I4#F)%RrX);GaH+z6;QAi^YH1mCn z1=LD-2^tl932JvlF&h}A6t#fL8c+#TG!rzmCI}loj92y0RrS?X4K6YPsQ|Ykn?Wql zd_j~j%n_hfkx<8mXfobn2knc=D=F4wh8QOTQwJ{{GgH!v=79=4#v)LIph^p}jx{q+ z0bHAb=4rq+u%3cTK4ij9AvZCvG%+WqQd7DJTrz@YFOW)0P(fKV8{{<j6l;`Xat5f` z1Sy%o<InM+8D^vaD*^=xc(p@O45*}KEdmY2-eS(oD=7jMwMBD5CV~R%7IR*Hc~KvT z3tFBB8TjLf2QP|^k1tvT)}5Q3l37#)s%mes78GUXmE2-0&L}O(%+VBsw0=OvFgPxv z1kl4I3b{L7TAT`*2nGc<Xa#H0Emm-YIf@n3<|{4&HOXPiX~E0?i{^lwwiHy%^Fb=c zlGGH?U~p;_cUpc<N@@|L^}`2^r+A29(KL__P_q-%9y7YdU7TME+DlUa+9AXOO7u}Y z@knCmm4^^GzEb1Cc@7*H#ScI=2xwUZ4>zbK1Zf5FFv|SnVPRtg4Lq<gvi;>?<6r`< zli&cicsQ5@7==J9K^k~KgBbrIdiWS+{xN~{fcZSke2g;xIhaBExR}@&mB4K-rvEIA zOyCw5NDmJa2NM&k0BETp2s433Bf+DTe{rnAz;yjf(9p{*PVfw0d45s$EjGv^yIUN& ziJ;bHZfY{9T?Lyr19g4iRa^lh149a^f@6pWk)YKT%qdL0OrW7h&?pC}u+0LEUNB^V zrpsAVnCCFpur6WjW2|K>VJl$=_f=V%8B<uK8B$omy<qkdjx5d^R?v7u3OlI(8qScy zfzm>=LN4-AOyNW`g$0i(u{cfPf|?>&3vmlW78f3K8j;PZVawu9;RUTRN#UNuRKo)H zDF=!hd7!5AflOb(30ju|D(*3SxfaD-=ys_Tj$j5&zC=gl3L&Tzvc3_Py+Fl3bkhWu z;@=TtR}nno;r(*RH~?H6)cQo<+W<)-XgVN*;L%g)noGDD@Nyi~MTey;&_<Ms%-qsk zg`(0tP$3PTph->6&r3m!v4S+fbz?4E2~I3aEyh;$fon)eYA;p*XI4lx12-!~lc{I} zs0i5vDwdgxKuypncF@cOXo0sUs8$fmE>A2<FNTi~<QGBe8*se=S~gzP4XSynB%tb` z10>+^1FNhOh4$=0^#yqL4=fC`c_YYrP^|ziWHfofrF)ccX>n?NT7D7STF?eW3Gm8r zEcO&}gA4&Vz6j)Iq^bg3L4eD2FHl(x>LG)-KBpF~1Nj)T90w8vV26Oh;g&EKD{cuw z1z|}nzvz}IWJNr9K|Dej-0B9cPcAOaDFJ&5LV!ndw=gg;7%(v~6oZO#4gpZn$n~Fv znGL-9ndL7N3)>$a&{!?F@MB^W0vDi&0u`Mv!YK0()cs^)WckO$%=VXu6`>YXkn*rp z$zgB4!x}Ou>j6N6+MqFU@Opr6&}BX;pf#-^%$&lK!j!_A!dAnS!aj$mmN|tjg#$DT zpTZ5=K$yaq!Z(MbmZgLNG)tYrm?AKTsg^Z`J4G->D3dXT8w!Qzu+_4qh@`NA#v4I9 zqf>ZNxKkwOaMZG=NTu+kaHO!MNP~7j&ta?Os9{Wz%VsKauVJa>%#*8OOp(uKD)Osg ztL4lSuVGA4$Yv@EtzoU@%oC_#Oi|2cDvGILujS0+tYJ)1%4RA`uHmTV%wx&~uMtR5 z%w{es2Q662VoDLpW+^H!VNOx5VVup7qB55mJTuN&!<+^hA5=~3LM~n0Q%hjue&A#c z>I{NMQy{#g#NyNxh5S4PcuuEbnFFnkNG~?9&IEx^1^~^#Y9MFZct}#$ffp(HMNlC` z+ZLrr!ZrmSQdxks+X)^t3Mu)i#d+!_3dN-b1^GoK3b~~@C7IB&8q@+T&q&Qv$V*L4 zNlk$lQ{d?$xAZ?NKVI@p3b2o2F33yI6i{bi$aHYxXVBz{;slkP;7QRaF7TKSs0~vb z#b1_Ml$2kb3Oa5eJu@#oinBN)zZ^Ww6U7fH7voEcQy>DoV2yCD2wZ7=K_aL$0$CBo z2Wp^#TRidL0X|;PcCGmQJjkG5lt58x326EYA;JqP=rc=Fi<0w8^Gb?9<;zRZf^to! zqBu~Y1!_{Kr-8vUd%ut<KG4qdyo}0%)S~3lq*P6gTkN@s6(9qm*bDLtKqIZUIC4uN z1D>G$Q_1<cNtt=zlo-WQoSK>v#a57?lUbY*#R8gwiegDD$<F~VQcOL2)=`rwN+_=s zv9%ghzUCB1@fGLil%*EMrxp}v=H%x^vE?RKq?P7@$Bs4GqL@qabE4QmNhCk7IEovz zj-jL|F*C2EIEpzdF*%AQBel3ViWNi_yaX*Z0!^JI=EN5z=B4E4MzKL@4$wS*d~s4m z6l6P7L9Ql86h}dRK|IJ?QLK6K>8W{99L0&b1v!w|O3g_H@7s^!OfJeVE(Y&g+YM^F zilpXb=7PMP8lO^Hkdv95Sdv;C#giAGpO#h(YJ{g3zXZ*nMKPsjrq7xQ0yph7*`jzL zPKgIiD5ge<CFX#ZQ>K(AK}?7*$On6h8x(Rd4qIM4IQS*9GxJj7^V8x%P5aD}O8EBl zD5i?cD4F8q%!0~z(DDG#-hI#}=lImJ{G3wIPQxfZh-@x&n|~B<N={}{JdAsbwV*OL zKR-$|DX}uOI5QElA1*hu3LL9d0`8e*sYs=ZLX|5x7lHRgz_O7qYBtgf$Vp8sPE{x^ zPE`OK4q5_RnO|CjR7h#E6fFTILD1UpBG5LWTb%GrtH}lFy1*L;Mccr^4k;PpA>K*J zOau8biXSQp^Hh`oQ~;tZH#0Aa2Py(~3tR)tzeQU??f}IXQdPN`fq@|rR8@i|9hd|` zeF!wn#Kg$<g^3?kl<g-Q2NNUPe<mhS<qDBw`wg7{1@$w)y%Dw_Ok5B-5XttNgA24> z2^F(2i7*K;axhitVy!}PHAXbq{rteYHo>{a&&^MhsmK@9MABp|S`TV;$b+_5fkvX^ z<8N`rgZinU6A<EW@x;d$mL}#vW!U56Q}UDJ<BPyuUQj=^2vlwqf%+jupbkh8s0VV3 zH7zGUv7`vJimwQi%cD5qOP7j3D<r^Ce2XJFF$cWrwI~)8(mo&pw2mFTXc)ZY@D>j! zOJpWP+OI{R<se0%<^Xu^8Qi&r^ol{vrXo-)rU(>2kmy2-IM6sE2p2B^EhS-KVPp~o z1u_h?ya%^Yn3(=CF*E&TVqyBj#LD!Wi;d}*8aopx@_w*zGJWUbV)`b=&GeOxhv^Fw zFVklxKBiA%{7fI21eiXs339#X%2%`Il4FwLV+3^tS(upqu`u!c<MU=R6k=rh&&J60 zpUa<1m?@a$FN$r<Tz{DiVIopYeE*6-F4a^l0yh*_g2Dyd?`H>fg+Zs}fI|NkTS+Bo zuQ(*^!La}iZ*cg6VgVc<QG&UNC7|jdCo@T}pc2H2VuR2{{h-Xl3ZCOB>IF4K*$NW# zQWA?HQO1q5b^{XV;Pxzdu>q(#7A26Hlw44$2U;5eu6BxxK#LTj<RQYK@~Bu39DU&P zc;XYG2l5nwXN6R;wo>&VqKMs`pgFxLX^1FVi&hV817ubQ6kOP1{T7E!Za(NJ4?ECs cQ88#00|x^KBWTT#0wbhHE&=9&#+QYd0at-_@&Et; diff --git a/energyplus_calibrator/__pycache__/energy_plus_api.cpython-310.pyc b/energyplus_calibrator/__pycache__/energy_plus_api.cpython-310.pyc deleted file mode 100644 index 62f438879a721f3c291cee585ba7cb6b7f901289..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21651 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 BO_cxu diff --git a/energyplus_calibrator/__pycache__/utils.cpython-310.pyc b/energyplus_calibrator/__pycache__/utils.cpython-310.pyc deleted file mode 100644 index 31985f0c4c5f92099425d6221cbe3d778021570e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3043 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 diff --git a/energyplus_calibrator/energy_plus_api.py b/energyplus_calibrator/energy_plus_api.py index 8542706..bc08172 100644 --- a/energyplus_calibrator/energy_plus_api.py +++ b/energyplus_calibrator/energy_plus_api.py @@ -34,13 +34,13 @@ class EPlusSimulationSetup(SimulationSetup): _default_solver: Default solver setting _allowed_solvers: List of allowed solver options """ - sim_intervals: List[str] = Field( + sim_intervals: List[Union[str, Tuple[datetime, datetime]]] = Field( default=['2024-01-01 to 2024-01-02'], description='One or many simulation intervals in format "YYYY-MM-DD to YYYY-MM-DD"', title='sim_intervals' ) - evaluation_intervals: List[str] = Field( + evaluation_intervals: List[Union[str, Tuple[datetime, datetime]]] = Field( default=['2024-01-01 to 2024-01-02'], description='One or many evaluation intervals in format "YYYY-MM-DD to YYYY-MM-DD"', title='evaluation_intervals' @@ -50,7 +50,7 @@ class EPlusSimulationSetup(SimulationSetup): default='Timestep', description='Interval of the resulting dataframe ("Hourly" or "Timestep")', title='dataframe_interval' - ), + ) n_steps_per_hour: int = Field( default=6, @@ -63,42 +63,55 @@ class EPlusSimulationSetup(SimulationSetup): @field_validator('sim_intervals', 'evaluation_intervals') @classmethod - def check_intervals(cls, - intervals: List[str]) -> List[Tuple[datetime, datetime]]: + def check_intervals( + cls, + intervals: List[Union[str, Tuple[datetime, datetime]]]) -> List[Tuple[datetime, datetime]]: """ - Validate and convert interval strings to datetime tuples. + Validate and convert interval strings or datetime tuples. Args: - intervals: List of interval strings in format "YYYY-MM-DD to YYYY-MM-DD" + intervals: List of either: + - interval strings in format "YYYY-MM-DD to YYYY-MM-DD" + - tuples of (start_datetime, stop_datetime) Returns: - List of (start, stop) datetime tuples + List of (start_datetime, stop_datetime) tuples Raises: ValueError: If intervals are invalid or not chronologically ordered """ + if intervals is None: return intervals + _intervals = [] - for sim_interval in intervals: - if not isinstance(sim_interval, str): - return intervals - start, stop = sim_interval.split(' to ') - start = datetime.strptime(start, "%Y-%m-%d") - stop = datetime.strptime(stop, "%Y-%m-%d") + for interval in intervals: + # If already a datetime tuple, validate and add directly + if isinstance(interval, tuple): + start, stop = interval + if not (isinstance(start, datetime) and isinstance(stop, datetime)): + raise ValueError('Tuple intervals must contain datetime objects') + # If string, parse to datetime tuple + elif isinstance(interval, str): + start, stop = interval.split(' to ') + start = datetime.strptime(start, "%Y-%m-%d") + stop = datetime.strptime(stop, "%Y-%m-%d") + else: + raise ValueError('Intervals must be either strings or datetime tuples') if stop <= start: - raise ValueError('Start must be before stop in sim intervals') - + raise ValueError('Start must be before stop in intervals') + _intervals.append((start, stop)) + # Check chronological order for n in range(len(_intervals) - 1): if _intervals[n][1] > _intervals[n + 1][0]: raise ValueError( - 'When specifying sim intervals, they must be increasing in time, meaning the first' - 'simulation interval is the "oldest" interval') + 'Intervals must be increasing in time, meaning the first ' + 'interval is the "oldest" interval') - return intervals + return _intervals @field_validator('dataframe_interval') @classmethod @@ -192,8 +205,7 @@ class EnergyPlusAPI(SimulationAPI): model_name=str(model_path), n_cpu=n_cpu ) - - # set via the sim_intervals in the simulation setup + # will be set via the intervals in the simulation setup self._start_date = None self._stop_date = None @@ -299,10 +311,7 @@ class EnergyPlusAPI(SimulationAPI): _dfs = [] - for interval in self.sim_setup.sim_intervals: - start, stop = interval.split(' to ') - start = datetime.strptime(start, "%Y-%m-%d") - stop = datetime.strptime(stop, "%Y-%m-%d") + for start, stop in self.sim_setup.sim_intervals: self._start_date = start self._stop_date = stop @@ -521,10 +530,7 @@ class EnergyPlusAPI(SimulationAPI): """ _df_list = [] - for interval in self.sim_setup.evaluation_intervals: - start, stop = interval.split(' to ') - start = datetime.strptime(start, "%Y-%m-%d") - stop = datetime.strptime(stop, "%Y-%m-%d") + for start, stop in self.sim_setup.evaluation_intervals: _df = df.loc[(df.index > start) & (df.index <= stop + pd.Timedelta(days=1))].copy() _df_list.append(_df) diff --git a/examples/e1_run_energyplus_simulation.py b/examples/e1_run_energyplus_simulation.py index 2a15861..d696ab7 100644 --- a/examples/e1_run_energyplus_simulation.py +++ b/examples/e1_run_energyplus_simulation.py @@ -18,6 +18,15 @@ def main(): '2015-01-01 to 2015-02-01' ]} + simulation_setup = {"output_interval": 600, + "sim_intervals": [ + '2015-01-01 to 2015-02-01' + ], + "evaluation_intervals": [ + '2015-01-01 to 2015-02-01' + ], + "dataframe_interval": "Hourly"} + parameters = None EP_API = EnergyPlusAPI( -- GitLab