ltbams 1.0.10__py3-none-any.whl → 1.0.12__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ams/_version.py +3 -3
- ams/core/documenter.py +130 -62
- ams/core/matprocessor.py +13 -14
- ams/interface.py +2 -2
- ams/io/matpower.py +51 -20
- ams/io/psse.py +2 -0
- ams/routines/grbopt.py +14 -9
- ams/routines/pypower.py +20 -20
- ams/routines/routine.py +9 -14
- ams/system.py +43 -5
- ams/utils/paths.py +67 -3
- docs/source/examples/index.rst +2 -1
- docs/source/genroutineref.py +1 -1
- docs/source/release-notes.rst +35 -22
- {ltbams-1.0.10.dist-info → ltbams-1.0.12.dist-info}/METADATA +7 -10
- {ltbams-1.0.10.dist-info → ltbams-1.0.12.dist-info}/RECORD +23 -23
- {ltbams-1.0.10.dist-info → ltbams-1.0.12.dist-info}/WHEEL +1 -1
- tests/test_1st_system.py +1 -1
- tests/test_io.py +10 -0
- tests/test_paths.py +68 -1
- tests/test_rtn_dcopf.py +20 -0
- {ltbams-1.0.10.dist-info → ltbams-1.0.12.dist-info}/entry_points.txt +0 -0
- {ltbams-1.0.10.dist-info → ltbams-1.0.12.dist-info}/top_level.txt +0 -0
@@ -1,12 +1,12 @@
|
|
1
1
|
ams/__init__.py,sha256=q-9-f0YCg6aaTW19VCkY6VosfvRA2ObI9mF1f_3016Y,313
|
2
2
|
ams/__main__.py,sha256=EB4GfGiKgvnQ_psNr0QwPoziYvjmGvQ2yVsBwQtfrLw,170
|
3
|
-
ams/_version.py,sha256=
|
3
|
+
ams/_version.py,sha256=jNLhv-DaZngBxRAi3mCJd0jmQgAAbgAoAn-N8TbLgbQ,498
|
4
4
|
ams/cli.py,sha256=EyNFXn565gFCppTxpyTZviBdPgUuKtgAPZ4WE6xewRk,6164
|
5
|
-
ams/interface.py,sha256=-
|
5
|
+
ams/interface.py,sha256=-UN7-TiSt7mOS0W7526LuOk4KCIGDZSguRaVmh_KMRM,45240
|
6
6
|
ams/main.py,sha256=lIqC16TO0pye75Wv8l_6EemNtm15iyMdvu8YQFkdd_4,23599
|
7
7
|
ams/report.py,sha256=ewcffopOzT5o45eJNmcV8pxeQqPIjKbarGN33-yHGA8,10961
|
8
8
|
ams/shared.py,sha256=4sY2U0sghs_S2V6C7Z0OyQ6WZRfpCXk2_Cf_Mg24Vr4,3900
|
9
|
-
ams/system.py,sha256=
|
9
|
+
ams/system.py,sha256=bGbZQrN5N2tx1tnxoPz6JSGE568EGH1Oi1zQIyLFLug,31948
|
10
10
|
ams/cases/5bus/pjm5bus_demo.json,sha256=IpxO2vzB9-9Kg9xjOXREKeXEz9wjFE7cuQbcUu8VORA,23152
|
11
11
|
ams/cases/5bus/pjm5bus_demo.xlsx,sha256=OWIUprkg8_aQ_bTCaEFMl7Bhfa1R20zxAHXRQtXBix0,32607
|
12
12
|
ams/cases/5bus/pjm5bus_ev.xlsx,sha256=vR8dJv5jIxib1pgcMonhzvraoqZVJWhBSJdVXDL0qsI,19498
|
@@ -37,8 +37,8 @@ ams/cases/wecc/wecc.m,sha256=8Wqal6H5r1wNxLLQBCXo2V3v3JZY5IJDEkyrEGCrCWE,30498
|
|
37
37
|
ams/cases/wecc/wecc_uced.xlsx,sha256=R3tZgxEqz_ctKcjA1wwFecxn-QZXutvf7NzgnCg_078,94767
|
38
38
|
ams/core/__init__.py,sha256=lIvrAvYf2yrHWqYi0rVuJgJt8KNA8nTmN2iuZ125z9Q,123
|
39
39
|
ams/core/common.py,sha256=934J7xq5JvC14yKp2Z4hWKUFJFhxzAnxB_8_99CChY0,704
|
40
|
-
ams/core/documenter.py,sha256=
|
41
|
-
ams/core/matprocessor.py,sha256=
|
40
|
+
ams/core/documenter.py,sha256=3-jUYrtN8zDZXd8tQZlmZouJluJPH9_xIDbK9ZEEnRU,25762
|
41
|
+
ams/core/matprocessor.py,sha256=gOEqg5xYpzmj4aMgTdzYeOPaL-5Bp493TrxUVmMaiTw,26453
|
42
42
|
ams/core/model.py,sha256=LNZtzyf2A7Tz3pn9IDs35JYaHSkQRqhqZicTpZGSqsc,10926
|
43
43
|
ams/core/param.py,sha256=LPH48xUHyqWqODD6IsiamUtkJDDSgGCEMAo6vroFoHE,11130
|
44
44
|
ams/core/service.py,sha256=Q4aeaYFWycIEH7I8DSO8Itah2CJxc3oAW46dtKCQEyA,28041
|
@@ -48,8 +48,8 @@ ams/extension/__init__.py,sha256=5IFTNirDL0uDaUsg05_oociVT9VCy2rhPx1ad4LGveM,65
|
|
48
48
|
ams/extension/eva.py,sha256=4_q4ME0WrQIcd205SBTjv0-rMRZZIdQ07QJuEHwLIC8,16340
|
49
49
|
ams/io/__init__.py,sha256=GIfF7X44olHaySL8EzOBU1eXUnunr1owzzdPfPvvHZU,3802
|
50
50
|
ams/io/json.py,sha256=IurwcZDuKczSbRTpcbQZiIi0ARCrMK6kJ0E3wS8ENy8,2585
|
51
|
-
ams/io/matpower.py,sha256=
|
52
|
-
ams/io/psse.py,sha256=
|
51
|
+
ams/io/matpower.py,sha256=R8ynl88bWJAzISYZKfMQi7AFRUINwqk_e-Zsh_pnVCE,27541
|
52
|
+
ams/io/psse.py,sha256=S2JqpEFaXEiazbVtU77i93BA4ZnoKP7jDZ1rQGg24sE,13684
|
53
53
|
ams/io/pypower.py,sha256=Fe0sxzC5DZegtYksTixadXk_LcfJ1GNetWu9EuHCkG8,2790
|
54
54
|
ams/io/xlsx.py,sha256=7ATW1seyxsGn7d5p5IuSRFHcoCHVVjMu3E7mP1Mc74U,2460
|
55
55
|
ams/models/__init__.py,sha256=EGkViLkVX_We9FAGuEkgfleMNmPw_vGp2Nq1OQimL7U,691
|
@@ -88,29 +88,29 @@ ams/routines/dcopf2.py,sha256=sDCP8zqYHDh7s7p9SX6G8QhMfIxCg3VPYJn6r3pRKyo,3620
|
|
88
88
|
ams/routines/dcpf.py,sha256=lGZ9LmCL1DsFB-sNxI7NGrq0qd_iBRMDPJmU5022t20,8242
|
89
89
|
ams/routines/dopf.py,sha256=8D36-FkPORYGaMnwGTqwz8HxAXk5ywo3mk8NlGq327g,6289
|
90
90
|
ams/routines/ed.py,sha256=9Hf_ZqD6poIxCIBfsTMC0DGoPNEja1ZtVxqhb4ijhgE,11875
|
91
|
-
ams/routines/grbopt.py,sha256=
|
91
|
+
ams/routines/grbopt.py,sha256=RjrMq6XPHeBEbf-Pt9sLk2D1vnXZYYwaic4BP8lbACg,5480
|
92
92
|
ams/routines/pflow.py,sha256=5_9n10r_PfsVXIRkaBgKxVITumImZ8mvpHnwxX_ECdw,9432
|
93
|
-
ams/routines/pypower.py,sha256=
|
94
|
-
ams/routines/routine.py,sha256=
|
93
|
+
ams/routines/pypower.py,sha256=3nKm7VoVXWsiiBK0fEdHv0W2T2AsJ4a6Nqb9ts-1u1A,27214
|
94
|
+
ams/routines/routine.py,sha256=teafNQ7DmXntwNP-RbtJJ9Ixa5xOEioO-nXFhY1psmA,35574
|
95
95
|
ams/routines/rted.py,sha256=GOHRxo0-HS5HhwQg8lv7-2VcGr_M_TdUvvomgJ31fDQ,22070
|
96
96
|
ams/routines/type.py,sha256=lvTWSnCYIbRJXIm3HX6jA0Hv-WWYusTOUPfoW8DITlU,3877
|
97
97
|
ams/routines/uc.py,sha256=VcuNy2TnBjsewKEGIqeo2EFTyuhpx5QsEvgpAtscDIQ,15648
|
98
98
|
ams/utils/__init__.py,sha256=2hAQmWRgmnE-bCGT9cJoW9FkPDMGRiGkbBcUgj-bgjI,122
|
99
99
|
ams/utils/misc.py,sha256=Y6tPKpUKJa7bL9alroJuG2UNW9vdQjnfAmKb2EbIls8,2027
|
100
|
-
ams/utils/paths.py,sha256=
|
100
|
+
ams/utils/paths.py,sha256=6iTux5UaHzRi6mGHnpbYUp-MoD-IFny4IuRsV8FKDcQ,9481
|
101
101
|
docs/Makefile,sha256=UKXBFAbKGPt1Xw9J84343v0Mh8ylAZ-tE0uCd74DrQU,725
|
102
102
|
docs/make.bat,sha256=9UgKGb4SdP006622fJiFxeFT1BeycYAs6hDbV1xwPy8,804
|
103
103
|
docs/source/api.rst,sha256=BRzdDFDzDwVL7Jr_Xj-O5Icgx0gt5hNNd1OjvPl7ap0,1490
|
104
104
|
docs/source/conf.py,sha256=UyoWogZTUNSJU7pQS_JaR28nKddW94zr01LYoIciZZw,6688
|
105
105
|
docs/source/genmodelref.py,sha256=IhmF7bDw8BXPvLD8V3WjQNrfc-H07r5iS-_4DHbbp-8,1420
|
106
|
-
docs/source/genroutineref.py,sha256=
|
106
|
+
docs/source/genroutineref.py,sha256=glHhbWUXfZzMDrkque9CBZu8QtdxlxPojInERzAAOwA,1063
|
107
107
|
docs/source/index.rst,sha256=N5phQS5RIyYs-NZo_5yYB8LjvHzOKLeXzRA-M8i-g3Q,2688
|
108
|
-
docs/source/release-notes.rst,sha256=
|
108
|
+
docs/source/release-notes.rst,sha256=zBHZ9dALCLSKKz5lwwalCQJiNCD2l2d3iJjISWtUiPg,14031
|
109
109
|
docs/source/_templates/autosummary/base.rst,sha256=zl3U4baR4a6YjsHyT-x9zCOrHwKZOVUdWn1NPX2u3bc,106
|
110
110
|
docs/source/_templates/autosummary/class.rst,sha256=Hv_igCsLsUpM62_zN0nqj6FSfKnS5xLyu8ZldMbfOAk,668
|
111
111
|
docs/source/_templates/autosummary/module.rst,sha256=YdbpCudOrEU-JbuSlzGvcOI2hn_KrCM6FW5HcGqkaEE,1113
|
112
112
|
docs/source/_templates/autosummary/module_toctree.rst,sha256=sg30OdqFDLyo8Y3hl9V-s2BXb1bzcjjqqWaWi-C3qFM,1126
|
113
|
-
docs/source/examples/index.rst,sha256=
|
113
|
+
docs/source/examples/index.rst,sha256=yXR54WHHcBY38-h9LkdTBcNq3HDeT6eSNyrMmafq12E,792
|
114
114
|
docs/source/getting_started/copyright.rst,sha256=d3S7FjrbysVqQd3pEBadrrkcQOZ7sYYeDTCOS4goPC8,715
|
115
115
|
docs/source/getting_started/index.rst,sha256=mcp1NdUwbPoNzpn7Owf5Qzfd6J_--ToU52PjmrbwjBY,1512
|
116
116
|
docs/source/getting_started/install.rst,sha256=pCL5GDNxwkWnrPaO48i9c0bBPT_dYAWvD2CQ7Oi2P_0,7400
|
@@ -136,25 +136,25 @@ docs/source/modeling/model.rst,sha256=j7OSvoXnDht6rGpgwPiJklsCWrebfx4DxIN-G8r6iF
|
|
136
136
|
docs/source/modeling/routine.rst,sha256=BkUE3y5L1lA7LP9Nyzc4zzY-tF3t4k7egBE188kybHY,4286
|
137
137
|
docs/source/modeling/system.rst,sha256=NMOPNMOKG1_dRyNPPx-MiCKbbpadxWJxGyU6geRUsvQ,1374
|
138
138
|
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
139
|
-
tests/test_1st_system.py,sha256=
|
139
|
+
tests/test_1st_system.py,sha256=WoCgeyUCjBVwyYCqzwDkYy8F3dWArMQBESqIUQk6tOk,1907
|
140
140
|
tests/test_addressing.py,sha256=MIT713KCqMg0h2o4rBDZsGUrpGadmMlXnrrdq-wB77E,1364
|
141
141
|
tests/test_case.py,sha256=b_YZhwIN9sX3FCMD03hRNygV-mYthNj7cOhEv7-by-g,8857
|
142
142
|
tests/test_cli.py,sha256=TtCGBy2e7Ll_2gJTFo9juZtzhaakho_MqkcqhG2w2dk,870
|
143
143
|
tests/test_export_csv.py,sha256=NTULXfTexgI1jf5koUMOYi3RLrSQouS7zxRjXo3ng50,2921
|
144
144
|
tests/test_group.py,sha256=Tq0s9gtenqrv4ws5YNzWxbiF4WgyhtMEAXZfJtew6M4,2699
|
145
145
|
tests/test_interface.py,sha256=8hOZ1caRfoyoEdy1lnh8Y4rIL97FLb2oUKfX_N1lEDo,8838
|
146
|
-
tests/test_io.py,sha256=
|
146
|
+
tests/test_io.py,sha256=OXt1C6F_RAt0RoRj3xLKdbA3raKEAjvVyWlKD7Ju7BA,6947
|
147
147
|
tests/test_jumper.py,sha256=bdOknplEGnO_tiJc7p3xQvgTe2b6Dz53bOgbFaXKMAI,537
|
148
148
|
tests/test_known_good.py,sha256=NBrlAxnVMxIHXR2cWps-Kwjh36fiU4Y-eupspZkM0ks,9670
|
149
149
|
tests/test_matp.py,sha256=LkjhqxSFr6oY_ENpduDQ77rhLLBl6RzIHZ2d0m_8i-8,17262
|
150
150
|
tests/test_model.py,sha256=ZgghNYmEeALf8_1sPjq9lIJwuYDQ2SelivJNEYpHxJU,1621
|
151
151
|
tests/test_omodel.py,sha256=niVdTZJEZNSVHz-ocA0nnVx84Dt3-8P5FUrwKkNiA0I,4305
|
152
|
-
tests/test_paths.py,sha256=
|
152
|
+
tests/test_paths.py,sha256=j_D9-Cjg73mwhTS3sUHDfQ8mCebD8enCQxjyRaR2ZH4,3020
|
153
153
|
tests/test_report.py,sha256=RR23by4G-cyleaHTy9A7SEVet0eOVS-Tm0kk1GXY5dM,8134
|
154
154
|
tests/test_repr.py,sha256=g7MRdxLcZRI1PlREFdUG_npp0LkcQiJZfOPw1aq0EFM,570
|
155
155
|
tests/test_routine.py,sha256=DP5CwKtzliw2gNLW2W_3kp0Ihy4rCaxeBxMpgyN5AXA,6234
|
156
156
|
tests/test_rtn_acopf.py,sha256=Kg-RHflrrwyX2uHr16xSAze9XAdYcK7eg1LHMyr1uyA,2354
|
157
|
-
tests/test_rtn_dcopf.py,sha256=
|
157
|
+
tests/test_rtn_dcopf.py,sha256=qFY9mKTAIG-qDlU9-loHZddKDDszdGQwRjL-ZDnESu8,4204
|
158
158
|
tests/test_rtn_dcopf2.py,sha256=57_62TnHW-cS6iK2zXT_eXChnh83YiYoPypJwub3VmQ,3747
|
159
159
|
tests/test_rtn_ed.py,sha256=SeSuzqpTZZnBph41PV2Piplo9yxR3qpbhQUa6UCYnSw,10267
|
160
160
|
tests/test_rtn_opf.py,sha256=MmMNwb9-G0KzHcrrP4uHTvs9DBU71_XPIJqNnkQQPHo,4846
|
@@ -163,8 +163,8 @@ tests/test_rtn_pypower.py,sha256=KO5VOZxETxVH2mY1mgNvzj1gz1Gdak1sAWxYleDU4E8,104
|
|
163
163
|
tests/test_rtn_rted.py,sha256=QHDUymorCqQAJKFlDgTy40JyLTGDvNVNU3tjbjDl3-0,9850
|
164
164
|
tests/test_rtn_uc.py,sha256=UbMeaam3dZwgq2LAJokGOl3LT5B3TWKMjCp4dRcLs40,8497
|
165
165
|
tests/test_service.py,sha256=6IP6CAH2xHxGHZM4-R8LjZxVJ2L10LcGaPDyRIqKLmc,2438
|
166
|
-
ltbams-1.0.
|
167
|
-
ltbams-1.0.
|
168
|
-
ltbams-1.0.
|
169
|
-
ltbams-1.0.
|
170
|
-
ltbams-1.0.
|
166
|
+
ltbams-1.0.12.dist-info/METADATA,sha256=ZKZlrfSVEg8RkdZ-YjEWGZfY4p7kdEGppQfhHV6hgpg,13808
|
167
|
+
ltbams-1.0.12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
168
|
+
ltbams-1.0.12.dist-info/entry_points.txt,sha256=FA56FlhO_yVNeEf810SrorVQb7_Xsmo3_EW-W-ijUfA,37
|
169
|
+
ltbams-1.0.12.dist-info/top_level.txt,sha256=pyKDqG2kj13F9-BYd_wkruRdBSqLXw8Nwc-cmljqrxg,15
|
170
|
+
ltbams-1.0.12.dist-info/RECORD,,
|
tests/test_1st_system.py
CHANGED
@@ -30,7 +30,7 @@ class TestCodegen(unittest.TestCase):
|
|
30
30
|
docum._var_doc(max_width=78, export=export)
|
31
31
|
docum._service_doc(max_width=78, export=export)
|
32
32
|
docum._param_doc(max_width=78, export=export)
|
33
|
-
docum.config.doc(max_width=78, export=export)
|
33
|
+
docum.parent.config.doc(max_width=78, export=export)
|
34
34
|
|
35
35
|
|
36
36
|
class TestParamCorrection(unittest.TestCase):
|
tests/test_io.py
CHANGED
@@ -85,6 +85,16 @@ class TestMATPOWER(unittest.TestCase):
|
|
85
85
|
self.assertEqual(np.unique(mpc5['bus'][:, 10]).shape[0],
|
86
86
|
np.unique(self.mpc5['bus'][:, 10]).shape[0])
|
87
87
|
|
88
|
+
def test_system2mpc_pq(self):
|
89
|
+
"""Test AMS System to MPC conversion with multiple PQ at one bus."""
|
90
|
+
system = ams.load(ams.get_case('5bus/pjm5bus_demo.json'),
|
91
|
+
setup=False, no_output=True)
|
92
|
+
system.add('PQ', dict(bus=1, p0=0.2))
|
93
|
+
|
94
|
+
mpc = system.to_mpc()
|
95
|
+
np.testing.assert_almost_equal(mpc['bus'][:, 2].sum(),
|
96
|
+
system.config.mva * system.PQ.p0.v.sum())
|
97
|
+
|
88
98
|
def test_gencost1(self):
|
89
99
|
"""Test when gencost is type 1."""
|
90
100
|
mpcgc1 = self.mpc14.copy()
|
tests/test_paths.py
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
import unittest
|
2
2
|
|
3
|
+
import os
|
4
|
+
|
3
5
|
import ams
|
4
|
-
from ams.utils.paths import list_cases
|
6
|
+
from ams.utils.paths import list_cases, get_export_path
|
5
7
|
|
6
8
|
|
7
9
|
class TestPaths(unittest.TestCase):
|
@@ -20,3 +22,68 @@ class TestPaths(unittest.TestCase):
|
|
20
22
|
no_output=True, default_config=True,
|
21
23
|
)
|
22
24
|
self.assertNotEqual(ss, None)
|
25
|
+
|
26
|
+
|
27
|
+
class TestExportPath(unittest.TestCase):
|
28
|
+
|
29
|
+
def setUp(self) -> None:
|
30
|
+
self.ss = ams.load(ams.get_case('5bus/pjm5bus_demo.json'),
|
31
|
+
setup=True, no_output=True)
|
32
|
+
|
33
|
+
def test_no_fullname(self):
|
34
|
+
"""
|
35
|
+
Test export path with no full name specified.
|
36
|
+
"""
|
37
|
+
self.ss.files.full_name = None
|
38
|
+
|
39
|
+
path, file_name = get_export_path(self.ss,
|
40
|
+
'DCOPF',
|
41
|
+
path=None,
|
42
|
+
fmt='csv')
|
43
|
+
|
44
|
+
dir_path, only_file_name = os.path.split(path)
|
45
|
+
self.assertTrue(os.path.exists(dir_path))
|
46
|
+
self.assertIsNotNone(only_file_name)
|
47
|
+
self.assertEqual(only_file_name, file_name)
|
48
|
+
|
49
|
+
def test_no_path(self):
|
50
|
+
"""
|
51
|
+
Test export path with no path specified.
|
52
|
+
"""
|
53
|
+
path, file_name = get_export_path(self.ss,
|
54
|
+
'DCOPF',
|
55
|
+
path=None,
|
56
|
+
fmt='csv')
|
57
|
+
|
58
|
+
dir_path, only_file_name = os.path.split(path)
|
59
|
+
self.assertTrue(os.path.exists(dir_path))
|
60
|
+
self.assertIsNotNone(only_file_name)
|
61
|
+
self.assertEqual(only_file_name, file_name)
|
62
|
+
|
63
|
+
def test_current_path(self):
|
64
|
+
"""
|
65
|
+
Test export path with current path specified.
|
66
|
+
"""
|
67
|
+
path, file_name = get_export_path(self.ss,
|
68
|
+
'DCOPF',
|
69
|
+
path='.',
|
70
|
+
fmt='csv')
|
71
|
+
|
72
|
+
dir_path, only_file_name = os.path.split(path)
|
73
|
+
self.assertTrue(os.path.exists(dir_path))
|
74
|
+
self.assertIsNotNone(only_file_name)
|
75
|
+
self.assertEqual(only_file_name, file_name)
|
76
|
+
|
77
|
+
def test_path_with_file_name(self):
|
78
|
+
"""
|
79
|
+
Test export path with path and file name specified.
|
80
|
+
"""
|
81
|
+
path, file_name = get_export_path(self.ss,
|
82
|
+
'DCOPF',
|
83
|
+
path='./test_export.csv',
|
84
|
+
fmt='csv',)
|
85
|
+
|
86
|
+
dir_path, only_file_name = os.path.split(path)
|
87
|
+
self.assertTrue(os.path.exists(dir_path))
|
88
|
+
self.assertEqual(only_file_name, 'test_export.csv')
|
89
|
+
self.assertEqual(only_file_name, file_name)
|
tests/test_rtn_dcopf.py
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
import os
|
2
|
+
|
1
3
|
import unittest
|
2
4
|
import numpy as np
|
3
5
|
|
@@ -99,3 +101,21 @@ class TestDCOPF(unittest.TestCase):
|
|
99
101
|
a_dcopf = self.ss.DCOPF.get(src='aBus', attr='v', idx=bus_idx)
|
100
102
|
a_acopf = self.ss.ACOPF.get(src='aBus', attr='v', idx=bus_idx)
|
101
103
|
np.testing.assert_almost_equal(a_dcopf, a_acopf, decimal=3)
|
104
|
+
|
105
|
+
def test_export_csv(self):
|
106
|
+
"""
|
107
|
+
Test `Routine.export_csv()` method.
|
108
|
+
"""
|
109
|
+
self.ss.DCOPF.run(solver='CLARABEL')
|
110
|
+
|
111
|
+
# test when path is none
|
112
|
+
out = self.ss.DCOPF.export_csv()
|
113
|
+
self.assertTrue(os.path.exists(out), "CSV export failed!")
|
114
|
+
|
115
|
+
# test when path is not none
|
116
|
+
out2 = self.ss.DCOPF.export_csv(path='test_dcopf.csv')
|
117
|
+
self.assertTrue(os.path.exists(out2), "CSV export with path failed!")
|
118
|
+
|
119
|
+
# Clean up
|
120
|
+
os.remove(out)
|
121
|
+
os.remove(out2)
|
File without changes
|
File without changes
|