Skip to content

Commit 06d0ead

Browse files
committed
[ModelicaSystem] update setInput()
* replace eval() with ast.literal_eval() as a saver version * use _prepare_input_data() * simplify code
1 parent 8845d46 commit 06d0ead

1 file changed

Lines changed: 27 additions & 46 deletions

File tree

OMPython/ModelicaSystem.py

Lines changed: 27 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
CONDITIONS OF OSMC-PL.
3333
"""
3434

35+
import ast
3536
import csv
3637
from dataclasses import dataclass
3738
import importlib
@@ -1190,57 +1191,37 @@ def setInputs(self, name: str | list[str] | dict[str, str | int | float]) -> boo
11901191
>>> setInputs(["Name1=value1","Name2=value2"]) # depreciated
11911192
>>> setInputs(name={"Name1": "value1", "Name2": "value2"})
11921193
"""
1193-
# inputdata = self._prepare_input_data(raw_input=name)
1194-
1195-
if isinstance(name, str):
1196-
name1: str = name
1197-
name1 = name1.replace(" ", "")
1198-
value1 = name1.split("=")
1199-
if value1[0] in self.inputlist:
1200-
tmpvalue = eval(value1[1])
1201-
if isinstance(tmpvalue, (int, float)):
1202-
self.inputlist[value1[0]] = [(float(self.simulateOptions["startTime"]), float(value1[1])),
1203-
(float(self.simulateOptions["stopTime"]), float(value1[1]))]
1204-
elif isinstance(tmpvalue, list):
1205-
self.checkValidInputs(tmpvalue)
1206-
self.inputlist[value1[0]] = tmpvalue
1194+
inputdata = self._prepare_input_data(raw_input=name)
1195+
1196+
for key, val in inputdata.items():
1197+
if key in self.inputlist:
1198+
val_evaluated = ast.literal_eval(val)
1199+
if isinstance(val_evaluated, (int, float)):
1200+
self.inputlist[key] = [(float(self.simulateOptions["startTime"]), float(val)),
1201+
(float(self.simulateOptions["stopTime"]), float(val))]
1202+
elif isinstance(val_evaluated, list):
1203+
if not all([isinstance(item, tuple) for item in val_evaluated]):
1204+
raise ModelicaSystemError("Value for setInput() must be in tuple format; "
1205+
f"got {repr(val_evaluated)}")
1206+
if val_evaluated != sorted(val_evaluated, key=lambda x: x[0]):
1207+
raise ModelicaSystemError("Time value should be in increasing order; "
1208+
f"got {repr(val_evaluated)}")
1209+
1210+
for item in val_evaluated:
1211+
if item[0] < float(self.simulateOptions["startTime"]):
1212+
raise ModelicaSystemError(f"Time value in {repr(item)} of {repr(val_evaluated)} is less "
1213+
"than the simulation start time")
1214+
if len(item) != 2:
1215+
raise ModelicaSystemError(f"Value {repr(item)} of {repr(val_evaluated)} "
1216+
"is in incorrect format!")
1217+
1218+
self.inputlist[key] = val_evaluated
12071219
self.inputFlag = True
12081220
else:
1209-
raise ModelicaSystemError(f"{value1[0]} is not an input")
1210-
elif isinstance(name, list):
1211-
name_list: list[str] = name
1212-
for name2 in name_list:
1213-
name2 = name2.replace(" ", "")
1214-
value2 = name2.split("=")
1215-
if value2[0] in self.inputlist:
1216-
tmpvalue = eval(value2[1])
1217-
if isinstance(tmpvalue, (int, float)):
1218-
self.inputlist[value2[0]] = [(float(self.simulateOptions["startTime"]), float(value2[1])),
1219-
(float(self.simulateOptions["stopTime"]), float(value2[1]))]
1220-
elif isinstance(tmpvalue, list):
1221-
self.checkValidInputs(tmpvalue)
1222-
self.inputlist[value2[0]] = tmpvalue
1223-
self.inputFlag = True
1224-
else:
1225-
raise ModelicaSystemError(f"{value2[0]} is not an input!")
1226-
elif isinstance(name, dict):
1227-
raise NotImplementedError("Must be defined!")
1221+
raise ModelicaSystemError(f"{key} is not an input")
12281222

12291223
return True
12301224

1231-
def checkValidInputs(self, name):
1232-
if name != sorted(name, key=lambda x: x[0]):
1233-
raise ModelicaSystemError('Time value should be in increasing order')
1234-
for l in name:
1235-
if isinstance(l, tuple):
1236-
# if l[0] < float(self.simValuesList[0]):
1237-
if l[0] < float(self.simulateOptions["startTime"]):
1238-
raise ModelicaSystemError('Input time value is less than simulation startTime')
1239-
if len(l) != 2:
1240-
raise ModelicaSystemError(f'Value for {l} is in incorrect format!')
1241-
else:
1242-
raise ModelicaSystemError('Error!!! Value must be in tuple format')
1243-
12441225
def createCSVData(self) -> pathlib.Path:
12451226
start_time: float = float(self.simulateOptions["startTime"])
12461227
stop_time: float = float(self.simulateOptions["stopTime"])

0 commit comments

Comments
 (0)