From c6864e7d2c71475633447dfdc976e4549ac548e5 Mon Sep 17 00:00:00 2001 From: Angela Zhao Date: Thu, 20 Mar 2025 10:53:30 -0400 Subject: [PATCH 1/5] new branch for lint cleanup --- pygridsim/__pycache__/core.cpython-312.pyc | Bin 8097 -> 8180 bytes sim.json | 8 ++++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pygridsim/__pycache__/core.cpython-312.pyc b/pygridsim/__pycache__/core.cpython-312.pyc index 25909de3d0158837daedee9b626940722544cb36..cf4dd1e48b4b8726328a3186c556edb3f8f4429b 100644 GIT binary patch delta 474 zcmZ2z|HYp7G%qg~0}z-zyOsWaBX1`o7dwax1fTCrUceZsmcpFMl_drdLMAgA(wI|N zQ(04ZQ@PSuCQCBOxTOfE@};q*h_tXq@uxGSF{X&7a-=b(hynQmDdH^*QGzKFKvF10 zHbpX(Bb7xGXdX~r3Mem}A`O%gsg%)_+nmbunV0t#cS%uVUU6D}QEqC{<_LjDjI2d2 zK=qT|h3dI)v1jI`WG1H;Co@f+$Re`&j*uaff)7x($QMZ5V#zK`EGjYsGBw$YD;TF~?zI28(#uSkj#wh+2(H4d%ffO+yDVQRaA`TQ2N|6BagexUAr8hS+edgWV zDDa4p_ZD|aQDR_vQ!Ue;7AEl@w&;yv1Hvnp%_zl>aSNz{DsrIY(BD(Qoo} zS<}gvWGxvtOy-e`3bb@%yl&xr(Zc&eSj0yLekPF>yq`hT2NecKMpwoYMHdoNKQeGJ zi7!xDP`Xh21Bkgp`7?<6Ai VTO2mI`6;D2sdh!Blefq_007)BXJ7yT diff --git a/sim.json b/sim.json index 52d4e25..71dc8cf 100644 --- a/sim.json +++ b/sim.json @@ -1,10 +1,10 @@ { "Voltages": { - "source": 1391.2908459682467, - "load0": 202.6090367072441 + "source": 1780.380636334411, + "load0": 131.72617974134454 }, "Losses": { - "Active Power Loss": 78708.71838388889, - "Reactive Power Loss": 163597.67777927459 + "Active Power Loss": 241674.29037881663, + "Reactive Power Loss": 502464.37327243283 } } \ No newline at end of file From e15ad0cbf7aa2e5547bf1a5376882292103d06e8 Mon Sep 17 00:00:00 2001 From: Angela Zhao Date: Thu, 20 Mar 2025 11:43:05 -0400 Subject: [PATCH 2/5] remove TODO from code: either resolved or for future update --- pygridsim/core.py | 5 ----- pygridsim/enums.py | 1 - pygridsim/parameters.py | 2 -- pygridsim/results.py | 1 - tests/test_circuit.py | 1 - 5 files changed, 10 deletions(-) diff --git a/pygridsim/core.py b/pygridsim/core.py index 450164f..ad70d96 100644 --- a/pygridsim/core.py +++ b/pygridsim/core.py @@ -134,8 +134,6 @@ def view_source_node(self): Args: indices (optional): Which indices to view the nodes at. If none given, display all - - TODO once capability for more source nodes is initialized """ source_obj = altdss.Vsource["source"] source_info = {} @@ -146,8 +144,6 @@ def view_source_node(self): def solve(self): """ Initialize "solve" mode in AltDSS, then allowing the user to query various results on the circuit - - TODO: error handling here """ altdss.Solution.Solve() @@ -170,7 +166,6 @@ def clear(self): Must call after we are done using the circuit, or will cause re-creation errors. We only work with one circuit at a time, can only have one PyGridSim object at a time. - TODO: maybe this isn't necessary because it's done in the beginning """ altdss.ClearAll() self.num_loads = 0 diff --git a/pygridsim/enums.py b/pygridsim/enums.py index e75a4b1..4ed5450 100644 --- a/pygridsim/enums.py +++ b/pygridsim/enums.py @@ -1,7 +1,6 @@ from enum import Enum import pygridsim.defaults as defaults -# todo: update to have a name so that users can query from name class SourceType(Enum): TURBINE = "turbine" POWER_PLANT = "powerplant" diff --git a/pygridsim/parameters.py b/pygridsim/parameters.py index 40c6eef..cdb7298 100644 --- a/pygridsim/parameters.py +++ b/pygridsim/parameters.py @@ -27,7 +27,6 @@ def random_param(range): [lower_bound, upper_bound]; range of typical value Return: Randomly selected value in range - TODO: allow for non-uniform distributions """ if type(range) is not list: return range @@ -120,7 +119,6 @@ def make_pv(load_node, params, num_panels, count): pv.Bus1 = load_node pv.Phases = get_param(params, "phases", defaults.PHASES) pv.kV = get_param(params, "kV", random_param(defaults.SOLAR_PANEL_BASE_KV) * num_panels) - # todo: inverter capacity? def make_generator(params, gen_type, count): """ diff --git a/pygridsim/results.py b/pygridsim/results.py index 6883aaa..05b1562 100644 --- a/pygridsim/results.py +++ b/pygridsim/results.py @@ -11,7 +11,6 @@ def query_solution(query): Args: query: a query for the solve function - TODO: only BusVMag, Losses, TotalPower is supported, need to make accessible which queries are supported Return: Query result or the string "Invalid" if the query is not supported """ diff --git a/tests/test_circuit.py b/tests/test_circuit.py index f132abf..db9f4cc 100644 --- a/tests/test_circuit.py +++ b/tests/test_circuit.py @@ -98,7 +98,6 @@ def test_006_update_multiple_source(self): circuit.add_lines([("source", "load0")], "HV") circuit.solve() print(circuit.results(["Voltages"])) - # TODO: can add assert to make sure it's in reasonable range? def test_007_export(self): circuit = PyGridSim() From ec8bccd8f767b07bc4a33ba1984c27495c012235 Mon Sep 17 00:00:00 2001 From: Angela Zhao Date: Thu, 20 Mar 2025 12:02:35 -0400 Subject: [PATCH 3/5] remove temp.py test file, make ruff linter fixes --- pygridsim.egg-info/PKG-INFO | 2 +- pygridsim/__init__.py | 2 +- .../__pycache__/__init__.cpython-312.pyc | Bin 360 -> 360 bytes pygridsim/__pycache__/configs.cpython-312.pyc | Bin 1771 -> 2437 bytes pygridsim/__pycache__/core.cpython-312.pyc | Bin 8180 -> 7736 bytes .../__pycache__/defaults.cpython-312.pyc | Bin 1899 -> 1877 bytes pygridsim/__pycache__/enums.cpython-312.pyc | Bin 1281 -> 1236 bytes pygridsim/__pycache__/lines.cpython-312.pyc | Bin 3147 -> 3135 bytes .../__pycache__/parameters.cpython-312.pyc | Bin 7362 -> 7348 bytes pygridsim/__pycache__/results.cpython-312.pyc | Bin 1789 -> 1673 bytes pygridsim/configs.py | 52 +++++++++--------- pygridsim/core.py | 7 +-- pygridsim/defaults.py | 1 - pygridsim/enums.py | 1 - pygridsim/lines.py | 4 +- pygridsim/parameters.py | 6 +- sim.json | 8 +-- .../__pycache__/test_circuit.cpython-312.pyc | Bin 15733 -> 15721 bytes tests/temp.py | 36 ------------ tests/test_circuit.py | 8 +-- 20 files changed, 41 insertions(+), 86 deletions(-) delete mode 100644 tests/temp.py diff --git a/pygridsim.egg-info/PKG-INFO b/pygridsim.egg-info/PKG-INFO index e2dd3db..b4213d1 100644 --- a/pygridsim.egg-info/PKG-INFO +++ b/pygridsim.egg-info/PKG-INFO @@ -63,7 +63,7 @@ Package to simulate OpenDSS circuits on Python # Overview -TODO: Provide a short overview of the project here. +PyGridSim aims to make building electrical circuits and corresponding circuit simulations easy for a Python coder. It builds on the distribution system OpenDSS and corresponding python package AltDSS. # Install diff --git a/pygridsim/__init__.py b/pygridsim/__init__.py index d712b60..066174b 100644 --- a/pygridsim/__init__.py +++ b/pygridsim/__init__.py @@ -6,4 +6,4 @@ __email__ = 'amzhao@mit.edu' __version__ = '0.1.0.0' -from pygridsim.core import PyGridSim \ No newline at end of file +from pygridsim.core import PyGridSim as PyGridSim \ No newline at end of file diff --git a/pygridsim/__pycache__/__init__.cpython-312.pyc b/pygridsim/__pycache__/__init__.cpython-312.pyc index d3ebbc9cffe9c46c583cb66c309eb7ab0b69c378..6cd83eea70072500443f0591beb9661ca7d92d78 100644 GIT binary patch delta 29 hcmaFC^n!`^G%qg~0}$w0-bp{akvEi)&9De0004R;2L%8C delta 29 hcmaFC^n!`^G%qg~0}xyhyPm#nBX1}pn@SN#004nT2WbER diff --git a/pygridsim/__pycache__/configs.cpython-312.pyc b/pygridsim/__pycache__/configs.cpython-312.pyc index 974acdbc277e73055c1b923b048bbae0a34202ed..22e49178c7e13dd34d479824cd2deb556d6d7d34 100644 GIT binary patch literal 2437 zcmbu9%WoQ26vpp77!WmM0ya37UAyt4P&p>8s;Wt&NZ2Nrb_^E7qe4{?G7}8pVGX8| zyX&f5cGpe*fo}SbRH{1a0_&<(7hQEnlwDRmb3KOxNf(WZ1mE{N=euX_+!^t6C=_Jy zxxW8<>nDw|zg)mi$TKf~Q5gGyHCa>YvYu3vdU8$fDK(|1)>O%@%Uxejt7#Imq>hfu zNiD4tCPD|*2zpYeE)k(?D$f*{9YZFC{0b2|sIHF?i^r+wCRI0IwD2~*N{7pkw``Um>8YNe~LsZ z@&++F*ppIw*HSvCSRsWS6^YP6wS=CusXdcnN`)%uApbdfQmEF5(0Nn-{T=-RQ=~BE zOCogc6u7H!SU)w=`4ZP>KwQhH)XnmNSrTLT@*GY_gihvDb4aP<`P3XvQ@S}<=dpR7 z=9bMuxpZ;e;ar7N%tz&D=QP;fIo}=$UYvcd5)*W@-8+g~z@4~=MZSqd^HtckHvM0`A z$x)ZC1L5xz<4DqpBq0(P*MuW_)7E0}<_K1qFEVq$TaLaZ4%ju%eF~gw;6EnBfw<2z Y;pho5!!Y>v9szef(pgJb9AxOC(6i=xsKOz&h zqPIPDk9*rouY1_T{v~@Ur=U^QOHaK~_106L2M>d@RkW&Qc;EN^%skH<5B#gDF$5R> z<-GNmjL;iDVV4?+_pb$n{zMLPgbw;g6lO~B6&BkH8_pw^u#6Q)d=UYzai1w1#b4l9 zz*EfS5iesEYd&`)$8nr!-{6cXCxTa80oXQkcm%de*=_DI1uR8bo;f@MTc_+U_m~2f zq3j-Wcm%fL3a)aT#n;>SxzCg%;VqbZy}iR69)aDU>;d-*l>@Q%vOjO3l_u zl!nH`qq(Y+81sr2iS1Sn4s>g`Tr`NvwLc-0)=4}>{i$VhuVz;*I+bfWbuophi|G+e zO&XQrUSqdnJ}8%JRFSrNHEXAA>LebB#!k`J{nA$sD|Ov!92!Nl zO0g3CX7aP?0k5wn@fOL4v73;#H{zmWp-@=C<3$+3E z28Cv?g*(k>kDL9%UjJm+#l5pZ;c!%fV{g0N!u-4!PWrt^ZflS~9g*nI-M%yI;QQWB zPzwG&(cme3Pa}dLyh7PmXltqb15~JQj_TN@BL{+ysG$50W&j}GQQaZGt114v9tl^OYJ7Oo1f!m z$5NJ7xCIrql<8N=tFV%_=^fg`>R4KxL=%7H0j6nrXzc%(@z|`P43byaR%9kx=A9gY ceTZJ-(w4N%iM9!2p{1m{A&$|y_XE6uk6Ez3tpET3 diff --git a/pygridsim/__pycache__/core.cpython-312.pyc b/pygridsim/__pycache__/core.cpython-312.pyc index cf4dd1e48b4b8726328a3186c556edb3f8f4429b..553349cbb67c662f6cd64728c389802efa4ef39f 100644 GIT binary patch delta 1625 zcmY*Z-D@0G6u)K#=SS|l9}D* z&L)zgq=i7AtjK+^K8O{3k+u-nhxSh>^r?u5SEW9v=v$gZ6h-iynIzSL`OQ7Q^L5WT zckce&-I?zD$z+_s^Wh8M*KTJ%>dtRkAbm_2Vbmcmu?WSr=1^C&G&f|0T;0-L!!mq6 zUb6>+0h)R%Q9=Eki!B{8Cr1;UIi!ooK-%s`0MwGlC+zv0rPDr`G#=6R;Bx?Ovf zFFQ?}EjOBzjH@1>@S1C)%7FqVFsbnd7k0ZTRK&MvtxJtrRw3~sP)uCM4UwPjdw)>9{}7x*-f@~#57us*J{3{R|tSr#mkHL^lkKaZ|xEC+Ho z%Wn}Y#R`BuY?uvzpN@W@9|V0bD}pAyF=URY*tv}bQD^7tZk2YfX?G}%cTVf?X_JFs zZ-$g1>_&|X9VC%LDlGbOT?A0!mMv`86GQT^@G#BELS&Nm%Z12kTIgJhENUfTpi3xl z8AHDkfENNNl}aKf)A0#9E@$HdVcee>?YtFV(iZ*Px{6n9XN|uq1oSX$w_3cx1a?fM z0S-4ZibM%v96&|SRs11%O2-*_VIUzDJdiDuH0en>n_Tj{s0`1w9jEhY@;h1%Qi>4_ zG=YGQq7UFO(GU_(Ba{GC{Aj+OI0nT3Gd)O6&@=L%R0TTmM$fPG6vi)`n&^VB=m9Vz zL06tb;v_-|;duZR@su4Q0S;or^4bQvjUdXNAF$50J5Q*UrD_;LI~I9eSQr=l}%ldU;? qR@6a($Hc=1?u00%Ka;{kVtqxdhh*jlGWH`$|DoF&E$$LTKghpb!+qNT delta 2028 zcmY*aO>7%Q6rNeHH@4%S*m2@GKg~7}TGyoErvi~il(Z=&YLX%)O<@D18}B&TW_NAP z+L2r#nV$$G#HB0}g+tXNv>;W=rAH1G2jD=9P^F=$a40PTiT(*LNbufnQd%qd{N9^4 z-@N(e&G`K2-95=~5{Vdr&#qs^(w`kCl3mRY!TX39#Gn?jiAE^e64+FuwxmgRNDJAr zCfi{xY%7}LkB6)lJEBGGs225o*@}H3`BvC!wc}dcPG||=SFEI+(o(+NVzt?6Ep2DC zjNPua+gUA3nx#DqLq(G3wroT?bi3e1^hy~+v_IHto6J7&!lv6+gs$}qfoA9wrzWCL8T6SyqfJWTciznHn7|QkINP@Y{^s8qv~5 z7huNdGx9J`#(6N_4dd-b&sq!7vW?!tmi24&0;P%dGoja|BM(DPAtb_}(-IR&TVG)d z7VKlefnD=1994KfeDOg5p;UFQ+b(|uo!GrZSI`Alftc!lxax6bh~~Z1%JXz!{kn2Q z8WL?jcW?wgdm$7M4RX8xo%8tgO1};(*=pQApssw zp(W5@F9!A@_~nj+B|Hh!&*eslP;l)EV9evtBfVEwDE3{50pybumf^Qd<%U+hyM z!b2;T>W^J3R8WjgD2QnE9ESZi2+k>5P3D%s3T6|UeunNBeu-|w$ z!u>l0UxZ5*)A@1l>z=m6rx0+lPeIhAcfDt8E8di8c>YMC!)xyyY;Fag9|8~|)2ZpYYKu$h zljEn`Kc2Wlz`WBNlX?SoB%UsG1{%q@N*Doq(7z=-f>snjMBz7OCv)oX?8PwHiotBP zu>?oz!jbwI_aT~23bk`D$6}IdE>LiUuF&d=7Bm|$Wu3x4>Xh3Emk-% z>9k>@O?J>mhwRd6g+1zN62V*??52*t^-^7)T$KxnCSf!%~=Vwv0vQDR$xVV_>4+bmDJw?Ok#BpISt| P3`5MdrKG$3NzLRJyC7gV delta 446 zcmXYuJ4*vW6ou#RGq2sevw26OiLPKNHvR?+%V~moAWedh*k}{*AIKK=wwC!B79uEu zAP6>sjTXVylek;Vch0?Y?hLcf{+I9FdtOTM`#pFWeq4LC*@-B1qoA~cz!=F`w8&DM z)P^=hB^4}f!qyg*19xa>8x|6zgCs1{g^LuKKpGh`2@h#971z`7k)_Wdhdk+VQbGHi zGAq(%8OxD5lu#z~s30H#|QA3?9#r-nlB{W#6aKv(FfM9h%6-{{bwfF+{cyfaY zA2vHp*l3Y0w9p-tV z$)96v2oDyGk5=3{#-tNDo56#I+msdS5hvCkvI~d^XbTF8h%c?ccnGYiE=-paW ZF8MRQO%eGq46zoDlKPu!%|Gq2`~k0qV?h7_ diff --git a/pygridsim/__pycache__/enums.cpython-312.pyc b/pygridsim/__pycache__/enums.cpython-312.pyc index e0896e36f347edf56ae5f549f2720989e9591d7d..3a1315451ccea646d9f5c5ceb8046ca19386d705 100644 GIT binary patch delta 225 zcmZqVy28nKnwOW00SE-F@1%cVoX96pp8@1eXGmd4Va#F3WsG8EWME=&XGmdcVMt+4 zWn9e+Qq8~+#RL{*0gAFBi86yl*?^+#NTMuYQ4XLeCz2>@C6^}mOORojjJH@^^Gb7* zf$WW&>=_xECx2o*#K=8)E7K`PfyoWb+ZjbCTd*ke`DwD4BO~Ko2GK7plh3gj0|44cEj$1K delta 267 zcmcb@*~rCrnwOW00SHWOucwDGP2`iPF9GtVGo&!2Fy=7iGDa~ng4j$sOu5Wa%!~|7 z4DJjm%q|MX|CVKh0ctOtdpNI9%AI3yn^WzqtN7H=IxB)leJltwKX|zv7`c36@lDv zOQ@hSy(lxKI5Sr-B{eOvG^eEa76*(qIfg|~$`GiG5r~Vefy4)9Mn=ZF45D`#RKKuI IUdUn$0H!-TqyPW_ diff --git a/pygridsim/__pycache__/lines.cpython-312.pyc b/pygridsim/__pycache__/lines.cpython-312.pyc index bba4c5cfea5a0bcba691e194331f66500cbde042..2b3b7a44576522100cd5f2d4e1b3e554cc6eb97f 100644 GIT binary patch delta 428 zcmX>tv0sAsG%qg~0}z;7-$}Qh$SbK)2INdmLm zmpO`gVnB*2<1OxxqQt!7wEUvn)FMsBTf#n`ey;J({(f$r?x8`BA)fwz!5c3ZFfmGO zc41CoW#pW^l0%mbWML88l$lbTnX8wapO==IUJQ27Yx&-r%+HRf)XSsu@pq1?BYet8Mm$7S(#ZOe}*m5xnl

&H-m$yrTBVHgRf zdO?ed_H-@y(Q^m7q=o>#*{COvfg;>yL-H>s{Z{ZJ{ywMCLDOLb?pMcZa*uO3Slwqz2n5 zA?M;$6$cGT2uojlIJT&bnC%w(9vRpc;~Ogp;X!ZY_>5+ycYSq%$;f45zvpPG`oABQ yKTPH3+(3*Km!_B$lM>1TUI3MYEQi#~u7^erKBkq2*p~JU@?Rhwq+;2S^!x%*J96p( diff --git a/pygridsim/__pycache__/parameters.cpython-312.pyc b/pygridsim/__pycache__/parameters.cpython-312.pyc index dfc0714e6cd0d21af68ee9015b65bb98a91f9a94..4058003e64c661375e760b2286b22ec6a78b41d0 100644 GIT binary patch delta 1307 zcmaKrL2MgE6oz-a_O9)C?bu12*hC>sW4T*OT8Ki4QW{L-#%YV4#BD$eXtnihoXB3= z%-TVLLqOt!5JJ&#hZ7P9Dj}m@I3OW$Xt@xnr!6Qq&Jcmbk@seef)HY*{XO&M&GYB~ zJ%6|O^`iEJrbQ)qK3Mvx{@S6IA)g%P^9Mwtga(@-M==yfHB={TghedWj5tvv>I@k} zPRxjjn9|goxDg+$6Gnon?@Puo4TC0W1T;mXpd)k$bd<(G$EXIHrg6~meML{aU5u9O zX2)jJ+r8G|_cw^l=g8za*$dxlTlDsR$M&Mtc8}F;vDQ}Ymd&hgo8eZM`B$;@rLk(| z&gQkEd96~uzP5U2vv7N@Qm%RvtHp8=HkHkPo%GA3Lr8{y8~BA>>VGcJ6Rw7yot*$X zycn}uwC$K3i&+kvfzTMd?(-n;O23ctH$n>}%X#QvOr%HZc6X3_4pL@$UO5}g!irZ& zx=)okLPj`O7f6mjP@kL9MAMW4u2_+pNF6q zXuRSD8+#UGdD!YnHqWcEGo=h{n2I8!1VKExWxwUgZkKt%mwN6q42e8ty;P_ctMIvF zxwgx&>z?Y`U8~z=Y=$4jmdFCvw0u^;#T~0*n@#ZEY_+M)N|1h;m$ffQw*RO0k*qui z0d}5$m^{0M&}DTLn!Dr zdx~dL?@bDpVZq|x@@Wjn*x>h5-vA98xfj^*X&_qGA10tx0o~bS7Q`F;QF;$p zZ;n3%iMetC-D!BT8*chg~h=R`PD$DVE*)ycZf6V6o z+0FXj{~5LedGGMV6Q3R6jOr7fYMQiNGtJW}V!|c-b}!M{ud`k1?mBZe{B+l!H_=h# z^pdCNwRUTJx9(4u-%Nz_Ql}Zz-nM$pt}7bE4yNGPpAgY?F%Dv$N_c>M76uApHj7&% z_AL%yaoV)kw68J;Vgz1y1LRkk5b|3fK!SfL63HG*7mlP0$I|kVw0tbxJ(BMJEae_c c+DT9)qw2}1MlPOA@lPi+(di_4m5BO(0XTv^0RR91 delta 1239 zcmaJ#K6X4#9LJv+L)^L{89uF|67@@ksY5;_c4en2GAhF~Z)!~DMN7^GH zD?7<{k}B^=ZJnx!DXJlk(m3K6O(3S}2;w+RB4((LII$xesogKGO(|TdI{jL!#Yfh` z@`9T_xHfQgBk%{XX|n<;#Rw-)?0-mlgydN!`U`nw|F7t2Vyri6jq_#8as1n5Oe=f7 z_w>N)iV9`g4f@c%G3a-FFJQCsnG-o2lqazT^A-%=I{Nwa(EJgKnX)G3lG{-#C9HXtnfgblG@g1tsyrjw&$7LAWlc;0XGGJ?Ms;<$X0{qvo0k{N zE7fLotp%a(L@PAsNVy`CE(#EG;aLHf5ZEn}SHnGn!Ls9Tl|ngVp`4+?LqRWNY?FOD z{y7TrG9O1WLqW*ajT8(eu~WI?2~AW!FW`cJ|7eNRySd2~v3o=2@uQ(D$nb`^|s*#@(%kpw~d!#Pn+C-HUCMZD5Mz?5Dj1+p>B*lRQP1E zv>7f)U$i|NtiBINJBo{h|CP=QiwpGyw6oFtm$&eoNG>B7Dpc6J#bboByT$2$+S_^9 z61Fhz4fbpCgN=g7$a2**slREO!)q2p62!<5+9qxtgnJbV`Dkya16>+)-IF#hE8yuP zV$=6-b~^!k@JRNKxFS#zASNDq9GV}xwIn#u`FS~&3QncP zVZMp!Ito7d#l@+`Itn5AC5br!`Q@oa3YoS#l@LPIjIWe8JWo$3WcSqMVYC^3W-Ij2u)ld%Ysr%N{jNWz-$GD&9|7U85u=3 chp|jzWK@~_l65k#6r=2C3noT`B5|Ob0Xt(li~s-t diff --git a/pygridsim/configs.py b/pygridsim/configs.py index d1eb8cf..226698f 100644 --- a/pygridsim/configs.py +++ b/pygridsim/configs.py @@ -1,68 +1,68 @@ -from pygridsim.enums import * -from pygridsim.defaults import * +from pygridsim.enums import LoadType, LineType, GeneratorType, SourceType +import pygridsim.defaults as defaults LOAD_CONFIGURATIONS = { LoadType.HOUSE: { - "kV": HOUSE_KV, - "kW": HOUSE_KW, - "kvar": HOUSE_KVAR + "kV": defaults.HOUSE_KV, + "kW": defaults.HOUSE_KW, + "kvar": defaults.HOUSE_KVAR }, LoadType.COMMERCIAL: { - "kV": COMMERCIAL_KV, - "kW": COMMERCIAL_KW, - "kvar": COMMERCIAL_KVAR + "kV": defaults.COMMERCIAL_KV, + "kW": defaults.COMMERCIAL_KW, + "kvar": defaults.COMMERCIAL_KVAR }, LoadType.INDUSTRIAL: { - "kV": INDUSTRIAL_KV, - "kW": INDUSTRIAL_KW, - "kvar": INDUSTRIAL_KVAR + "kV": defaults.INDUSTRIAL_KV, + "kW": defaults.INDUSTRIAL_KW, + "kvar": defaults.INDUSTRIAL_KVAR } } SOURCE_CONFIGURATIONS = { SourceType.TURBINE: { - "kV": TURBINE_BASE_KV + "kV": defaults.TURBINE_BASE_KV }, SourceType.POWER_PLANT: { - "kV": POWER_PLANT_KV + "kV": defaults.POWER_PLANT_KV }, SourceType.LV_SUBSTATION: { - "kV": LV_SUBSTATION_BASE_KV + "kV": defaults.LV_SUBSTATION_BASE_KV }, SourceType.MV_SUBSTATION: { - "kV": MV_SUBSTATION_BASE_KV + "kV": defaults.MV_SUBSTATION_BASE_KV }, SourceType.HV_SUBSTATION: { - "kV": HV_SUBSTATION_BASE_KV + "kV": defaults.HV_SUBSTATION_BASE_KV }, SourceType.SHV_SUBSTATION: { - "kV": SHV_SUBSTATION_BASE_KV + "kV": defaults.SHV_SUBSTATION_BASE_KV }, } LINE_CONFIGURATIONS = { LineType.LV_LINE: { - "length": LV_LINE_LENGTH + "length": defaults.LV_LINE_LENGTH }, LineType.MV_LINE: { - "length": MV_LINE_LENGTH + "length": defaults.MV_LINE_LENGTH }, LineType.HV_LINE: { - "length": HV_LINE_LENGTH + "length": defaults.HV_LINE_LENGTH } } GENERATOR_CONFIGURATIONS = { GeneratorType.SMALL: { - "kV": SMALL_GEN_KV, - "kW": SMALL_GEN_KW, + "kV": defaults.SMALL_GEN_KV, + "kW": defaults.SMALL_GEN_KW, }, GeneratorType.LARGE: { - "kV": LARGE_GEN_KV, - "kW": LARGE_GEN_KW, + "kV": defaults.LARGE_GEN_KV, + "kW": defaults.LARGE_GEN_KW, }, GeneratorType.INDUSTRIAL: { - "kV": INDUSTRIAL_GEN_KV, - "kW": INDUSTRIAL_GEN_KW, + "kV": defaults.INDUSTRIAL_GEN_KV, + "kW": defaults.INDUSTRIAL_GEN_KW, } } \ No newline at end of file diff --git a/pygridsim/core.py b/pygridsim/core.py index ad70d96..eeba652 100644 --- a/pygridsim/core.py +++ b/pygridsim/core.py @@ -1,11 +1,8 @@ # -*- coding: utf-8 -*- from altdss import altdss -from altdss import AltDSS, Transformer, Vsource, Load, LoadModel, LoadShape -from dss.enums import LineUnits, SolveModes -from pygridsim.parameters import * +from pygridsim.parameters import make_load_node, make_source_node, make_generator, make_pv from pygridsim.results import query_solution, export_results from pygridsim.lines import make_line -from pygridsim.enums import LineType, SourceType, LoadType, GeneratorType """Main module.""" @@ -74,7 +71,7 @@ def add_PVSystem(self, load_nodes: list[str], params = {}, num_panels: int = 1): self.num_pv += 1 return PV_nodes - def add_generator(self, num: int = 1, gen_type: GeneratorType = GeneratorType.SMALL, params = {}): + def add_generator(self, num: int = 1, gen_type: str = "small", params = {}): """ Specify parameters for a generator to add to the circuit diff --git a/pygridsim/defaults.py b/pygridsim/defaults.py index cade565..cc081d6 100644 --- a/pygridsim/defaults.py +++ b/pygridsim/defaults.py @@ -1,7 +1,6 @@ """ Set any defaults (i.e. default source voltage, default node load etc.) """ -from altdss import altdss from altdss import Connection """ Overall Defaults, used for load, sources, lines, etc. diff --git a/pygridsim/enums.py b/pygridsim/enums.py index 4ed5450..b6ed6d3 100644 --- a/pygridsim/enums.py +++ b/pygridsim/enums.py @@ -1,5 +1,4 @@ from enum import Enum -import pygridsim.defaults as defaults class SourceType(Enum): TURBINE = "turbine" diff --git a/pygridsim/lines.py b/pygridsim/lines.py index 241fad7..c9c6306 100644 --- a/pygridsim/lines.py +++ b/pygridsim/lines.py @@ -1,6 +1,6 @@ from altdss import altdss -from altdss import Transformer, Connection -from pygridsim.configs import * +from altdss import Transformer +from pygridsim.configs import LINE_CONFIGURATIONS import pygridsim.defaults as defaults from pygridsim.enums import LineType from pygridsim.parameters import get_param, random_param, check_valid_params, get_enum_obj diff --git a/pygridsim/parameters.py b/pygridsim/parameters.py index cdb7298..0f8dcc8 100644 --- a/pygridsim/parameters.py +++ b/pygridsim/parameters.py @@ -2,9 +2,9 @@ Helper functions to parse the parameters used for loads and sources """ from altdss import altdss -from altdss import AltDSS, Transformer, Vsource, Load, PVSystem, Generator -from pygridsim.enums import * -from pygridsim.configs import * +from altdss import Load, PVSystem, Generator +from pygridsim.enums import LoadType, SourceType, GeneratorType +from pygridsim.configs import LOAD_CONFIGURATIONS, SOURCE_CONFIGURATIONS, GENERATOR_CONFIGURATIONS import pygridsim.defaults as defaults import random diff --git a/sim.json b/sim.json index 71dc8cf..6029a3f 100644 --- a/sim.json +++ b/sim.json @@ -1,10 +1,10 @@ { "Voltages": { - "source": 1780.380636334411, - "load0": 131.72617974134454 + "source": 2282.7562444775963, + "load0": 206.47949848565221 }, "Losses": { - "Active Power Loss": 241674.29037881663, - "Reactive Power Loss": 502464.37327243283 + "Active Power Loss": 370747.6727038353, + "Reactive Power Loss": 770855.4012118444 } } \ No newline at end of file diff --git a/tests/__pycache__/test_circuit.cpython-312.pyc b/tests/__pycache__/test_circuit.cpython-312.pyc index 2ecda2f375d7f5552b6b23459443fbd29e5ba253..17a626c7cb6e6be94185fcb2a22b56ae42e625dc 100644 GIT binary patch delta 3077 zcma);U2IfE6vyw}-Fx?|Tei!xv~0U6r3G7r0@^}pOG+se3R%Fib}waNKkD3F zNgGZ5K%k>x2*FrR$Vp4YlC(yw zNhP8r)rd+Y2i{l`wunuZI;5EOs1#E)+aV7tvCTbk!9K?!%qlnArkkC@Z0BajG;^nG z#1eK+KuVYxj^2?D8jtnGlVPi2?~bRm9V5dUAEl!)F>>~$vvkn3x;wO#Mx&WD#jD&r z(kv4n>$Ye`bGSF1aD-?HyJT7JE`>qncuJx^cA>Z|=e2Gj#Lf0Ae!qv?4clOx4rb#S zF)M_1$CVbf9P4(o{r=5t+^4W|)y;QUSXP$Xpq?dU0sF~TU0s3YYIj=KH9hR47XC;V z0wJIhaI+QmC6$XXtOBZm#T=8n@v%|PF51i4DSI6XW0#Yz=W zfXUDd<*{fYt4)hg#D=iK3Ki$+Nbt)W$ncAy%doZqsNvAzDuh2;!birEjHYK!7FV$w z?pD&ms*8_tO&5wQNylW+6GBH}&|#Sduv|&-)L3cAo&9FSvjjWevq$a1&T)Q`^VmzC z-TY{I4zRyGMk@}`u(w5H+ju-9=WJ6!&Wz5@XPVbnc$N#i8_0I{us82Dcg^c0YbLeN zdSMU2mAIgd7!~^S`Sz(1Zq`$IxgmDmx6aH4W|=qc5_fK1FZ*R)g?APo75;T(knQmg zW zu$q0gpqXS&1|H2H#EXIB`DE|Mwp)N6tPpv$Vgfyp_5!cJxmb{;o)bQ1Em`EQh-J8$;>b zy0focv;sppnC4@{^++^^nh>QY?)f1;GfZd;|3?wEq4aHO?M{f`3|l5k+q!z%MRyr> z4X2OrvK~%EQ<<>GR3Bm`RZDtA12_N|LO3eYuyytibYrau$TsP^+w6a69ENSj&h5f~ zVUoX6^&oj6cdg1M$Iuk07eJS$OMoWe0bniA3bX?qz-C|vun&j6kP9n|fa#wSJVWScfDJG8 zdvquCs3^k#phB61Ia&49_4;TEKQd`c>)ZR}nv8%Pm zc~wT1y+_92o<0sd4Pa+_6c9q5#prpCe5M!l+WQNhn&}IeTmj%?)AKJnf}$WB8yW`E z{IkF=)s?U_bifJGkD@Hyg&F!zV;A`{ceAm^vKxvf{^EamF`}vvcl-@* zEbyL$yAX%r?8hgvozgTlw-a?!xJSBa3%QZI)O3ZcpZb_Jh1GoF!Iw}fgujNzyPaUK zAp3Jwko~x-ncU8mKTt~A#TmNv42`FTx>Cd0j8Go7nvUVlaNtLiDK7-i1Evl&4BfR>? z1NSIAcD^OxQV3u9Kg(^-+TfTI^GC5AHtFFh3U zf7>Z5ZnJk_PPoV@9v&IuzhCuuvVJg4HOkJf^^c)fnm?e>5vk~t_G~JiK}{I;9h@7Y zx@NX3aWrDvLMeuQZ89CpCbaeREce3YNIIJNuNFecZ>mHVe=l`?C3THU)jvpc?l=cz d(nii4{5H6}=z4JZ9Z5Xj*~mKAg{?S>zX9n*gzo?V delta 2982 zcma);YfKzf6vyYzGPAS0EZxGELKo;-D(ym{MWIT8YD*}^P^eO{q7_$m1mZsGouw8M z1C6!y(Z-PLqoyVr6HQ2bH5=n2KGF}y_)OHOablAu8V#R()#wLfJ^wpfmc_PlKK%CH zGxwhJzxSSVXXmH>nDT$@_j?t3+CKbt^vtZk{D!xv^Q00}Vl1vC*brlAt8w)uRkmDl zSHd;qlI;R&7Yr3J#e*?gTpQ9|$kwWU<}cv?k(d%hpEXW|YsVe3>|;1zA8m zp|$F(F>|lDC$K^!OPj?ffnru7PF0m>cIhuLRxZxD*RHLA8@(rGS*8{7au;=Z6@bY+ z3>1nsV_n4+Xs!XOfwcswDh!>|#?AVASRSQl?c&{_TZBD**=P@W3fUgKLo%lNj>d%Stj|_(s`uF35ua zh}SlH#*^lr$^EA7?N3ec5vOhRq@poca|^e%1JU?|xoG`zu%1WQvCLkZ)dO?kziU|U6H(ZjS4IJVP82J2ebhxr1`%HM~G%2$!q*5V}VYFpho z=xoA&*DnHrTUn2Y2e{*0{1vdbVJmH8do*?<>7Sf)=N7eeHAo)kF!Od*loWU91N6@7 zyO1^B6Y(#L>b^2I@RH1{#no)f!U8UOklW!{9^4MJ^1b_m`}BSAo+R(h;`v~^lOf{o z;8~x{1Lw%aPb(^mFEYQhv|S&?{K2fc&TNK#TDqL+4G0(#Kdh|nTjYz35o5_l*oDzp zY?_;GQsSAigV}hE<;83(;@QTinRGG%G3Qj|hgg-Z_3zr&6PMy`cY1lGc;xXJUv-4vSzUE@u$g{=RF1Q_=?-!L446VIZtsXTo|wNW8B`n zi~X2+vH26$lKTWTM|7v?;l`ONg`Yt8B2G?Sa|`=3qf%=|4{p286`PmXNr=8jT7yI0lx&W(aG^k1iF|KuqB>$Jub4I?RT za&fY)R7at6U7T(!8aWTgJ&=q#&cS_|M qrTmOi`3rjAE6dJ#?@-xxc4F+Cs*RslZ9J#Q?ztVJtvynJ75@wVZFe;Q diff --git a/tests/temp.py b/tests/temp.py deleted file mode 100644 index 9147595..0000000 --- a/tests/temp.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -from altdss import altdss -from altdss import AltDSS, Transformer, Vsource, Load, LoadModel, LoadShape -from dss.enums import LineUnits, SolveModes -""" -this is from colab stuff, delete later -""" - -altdss('new circuit.IEEE13Nodeckt') - -# create voltage source -source1 = altdss.Vsource[0] -source1.Bus1 = 'SourceBus' -source1.BasekV = 0.6 -source1.Phases = 3 -source1.Frequency = 60 - -# create load -load1 : Load = altdss.Load.new('load1') -load1.Bus1 = 'LoadBus' -load1.Phases = 3 -load1.kV = 200 -load1.kW = 1.2 -load1.kvar = 0.6 - -# line between voltage source and load -line1 = altdss.Line.new('line1') -line1.Phases = 3 -line1.Bus1 = 'SourceBus' -line1.Bus2 = 'LoadBus' -line1.Length = 0.1 -line1.Units = LineUnits.km - -# "solve" the circuit -altdss.Solution.Solve() -print(altdss.BusVMag()) \ No newline at end of file diff --git a/tests/test_circuit.py b/tests/test_circuit.py index db9f4cc..2af257c 100644 --- a/tests/test_circuit.py +++ b/tests/test_circuit.py @@ -1,15 +1,11 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- from pygridsim.core import PyGridSim -from pygridsim.enums import * -from altdss import altdss -from altdss import Connection - +from pygridsim.enums import LineType, LoadType, SourceType, GeneratorType +import unittest """Tests for `pygridsim` package.""" -import unittest - # from pygridsim import pygridsim From d9309efef26ac42ec35d6584534574ef80504285 Mon Sep 17 00:00:00 2001 From: Angela Zhao Date: Fri, 21 Mar 2025 15:01:13 -0400 Subject: [PATCH 4/5] remove unnecessary view functions --- pygridsim/core.py | 37 ------------------ sim.json | 8 ++-- .../__pycache__/test_circuit.cpython-312.pyc | Bin 15721 -> 15479 bytes tests/test_circuit.py | 3 -- 4 files changed, 4 insertions(+), 44 deletions(-) diff --git a/pygridsim/core.py b/pygridsim/core.py index eeba652..71e23ba 100644 --- a/pygridsim/core.py +++ b/pygridsim/core.py @@ -101,43 +101,6 @@ def add_lines(self, connections: list[tuple], line_type: str = "lv", params = {} make_line(src, dst, line_type, self.num_lines, params, transformer) self.num_lines += 1 - def view_load_nodes(self, indices: list = []): - """ - View load nodes (what their parameters are) at the given indices. - - Args: - indices (optional): Which indices to view the nodes at. - If none given, display all - """ - load_nodes = [] - if not indices: - indices = [i for i in range(self.num_loads)] - - for idx in indices: - load_obj = altdss.Load["load" + str(idx)] - load_info = {} - load_info["name"] = "load" + str(idx) - load_info["kV"] = load_obj.kV - load_info["kW"] = load_obj.kW - load_info["kVar"] = load_obj.kvar - load_nodes.append(load_info) - return load_nodes - - - def view_source_node(self): - """ - View source nodes (what their parameters are) at the given indices. - - Args: - indices (optional): Which indices to view the nodes at. - If none given, display all - """ - source_obj = altdss.Vsource["source"] - source_info = {} - source_info["name"] = "source" - source_info["kV"] = source_obj.BasekV - return source_info - def solve(self): """ Initialize "solve" mode in AltDSS, then allowing the user to query various results on the circuit diff --git a/sim.json b/sim.json index 6029a3f..aa5fffd 100644 --- a/sim.json +++ b/sim.json @@ -1,10 +1,10 @@ { "Voltages": { - "source": 2282.7562444775963, - "load0": 206.47949848565221 + "source": 1735.8007811315708, + "load0": 205.64441923330276 }, "Losses": { - "Active Power Loss": 370747.6727038353, - "Reactive Power Loss": 770855.4012118444 + "Active Power Loss": 198582.96141955358, + "Reactive Power Loss": 412884.39931989944 } } \ No newline at end of file diff --git a/tests/__pycache__/test_circuit.cpython-312.pyc b/tests/__pycache__/test_circuit.cpython-312.pyc index 17a626c7cb6e6be94185fcb2a22b56ae42e625dc..330fa5625f8a7598826272a82aa227c9b20dac03 100644 GIT binary patch delta 1133 zcmZwGUrbY190&0GySLmzI}or^pca&}VhIevFjgo`ONfG9!7)4NmXVq=L~5(2uqay` zYMgs8QS&p=_$O-OvKaTU<;0-VxXsrsOUxb?yZ9&Zse9PW!otI1-1%P7WQ+IV)7#(q zo$on4_clMfxToaD;$nxUuEhMki7y+DmxLWjEor3eaeI;WP5d97mUGOwKyJBc z&g=;9E?vRtigx~~)W>s0Mf^j_Cp@`)h;O(n__57L4!&VuUo5<;J7-2R+3a|h?>O9i zuyB~_IaM0wTP_c`yylm4MR$psW!!mNrw-{YiR#oRQ>DL?8O2hAFP6INs+QlEx016* z)vaU^<_jGwxXd+b#?YHqz3uV~*BH^Wk?M+|IfjuKQe?Vftxgm2eC4Qa?m~I{Qn*Vt zc>bW?cM!Z8L=?G#R3?#Z%j0ka_9C_dtRw;;q)<%>F)qq^a$B+9FS4P*9Av9U;hv`+;M`Z9D# ze&_S(>(*iXbIb1;_h3h3VAxUu#FaB22MC1%Eu~0-H>w*02DCUCLMB=&vkL>V+0?cCaQ)%#E251A z9Wxn=nVBb>m>8M=n3=`Q<(e25{l{eb$25vtBx#oTbAR*?7q^ith8Vr)t$(QT{qf1Y z=bZ2N+;{GKcV8&vwp_8>tp@S@5x72mqV?340jtFjH^hxe^Q8IWz#mHM@f)`VX7I??c3hOl@5@@qjGnlHC+n*4!xE+HymT)FhJU0j z2xdJkotNS+H$r~CKhi9XW|Jhkh4cJbL>!}xMgl( zo0mfwO-pF16@M>tbl53W`uuESKAIH5XqtriGCiQ_Vm-tfMIC#9(1br(9Qd(0BKyQv zdtJQTVDqnv{dj6+|GK+#&E0v`z4MyVeO-hyEA#7~?ln*MRZs6VC4gtkEAin6n`s98 zP32pFc0ObMT!J8Pvxg-ZMw>FgKP^26@>AsfBn^%)mcI-qRd!v>|Ok#V-w&o|Dbw8lCzYWDW)oUSM5!Bbc}pQ2w{P|i6*h5 zK-bJh3Hu4-1eLH$KorH;bV4<aSE|Nf% z7>V=BGqLz+jKxyALs*|7JEaQ=A;SOJ(hnqtyqEGz1o|*kGc(fqFd<3s5E=*v2>M0f z4NEzm+dc%}@tfP5jea^u;VZET*_gbSGJ?T2|>_0`~)y?=rUF9#BhRuJhN)zCGDRhj*_6NZBB zt*cZ)08y`%i^Va+ElDydw`Ixn&>gE}vg-zH6)`x`q&L+y)g&ZqMxwmZm&(NFl8IgH oJuK^Ud44oB{bDHHutp^qfR&l``fY3V+cpgPc4N?lPxSf!28S|KWB>pF diff --git a/tests/test_circuit.py b/tests/test_circuit.py index 2af257c..a2de2ef 100644 --- a/tests/test_circuit.py +++ b/tests/test_circuit.py @@ -38,9 +38,6 @@ def test_001_one_source_one_load(self): circuit.update_source(source_type="turbine") circuit.add_load_nodes(num=1, load_type="house") circuit.add_lines([("source", "load0")], "MV") - #circuit.add_transformers([("source", "load0")], params={"Conns": [Connection.wye, Connection.delta]}) - print("Load Nodes:", circuit.view_load_nodes()) - print("Source Nodes:", circuit.view_source_node()) circuit.solve() print(circuit.results(["Voltages", "Losses"])) circuit.clear() From 6a5fd2d17e3ec7470f4d27b3bd72f0f11314dd13 Mon Sep 17 00:00:00 2001 From: Angela Zhao Date: Fri, 21 Mar 2025 15:04:43 -0400 Subject: [PATCH 5/5] update core docstrings --- pygridsim/core.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/pygridsim/core.py b/pygridsim/core.py index 71e23ba..c3a7b75 100644 --- a/pygridsim/core.py +++ b/pygridsim/core.py @@ -42,11 +42,8 @@ def update_source(self, source_type: str = "turbine", params = {}): Adds a main voltage source if it doesn't exist, otherwise edits it Args: - params: load parameters for these manual additions source_type: source type as a string - num (optional): number of sources to create with these parameters (removed for now) - (removed) num_in_batch: how many to batch together directly (so they can't be connected to lines separately, etc. - most common use case is if a house has 20 solar panels it's more useful to group them together) + params: load parameters for these manual additions Return: List of source_nodes """ @@ -96,6 +93,8 @@ def add_lines(self, connections: list[tuple], line_type: str = "lv", params = {} Args: connections: a list of new connections to add. Each item of the list follows the form (source1, load1) line_type: a string representing linetype if user wants to use preset parameters + params: any custom parameters for lines or transformers + transformer: whether or not to include a transformer, default yes """ for src, dst in connections: make_line(src, dst, line_type, self.num_lines, params, transformer) @@ -110,8 +109,11 @@ def solve(self): def results(self, queries: list[str], export_path = ""): """ Allow the user to query for many results at once instead of learning how to manually query - - Returns: + + Args: + queries: List of queries to fetch the result of + export_path: if specified, exports result to this string + Return: Results for each query, in a dictionary """ results = {}