Skip to content

Commit fbbbd78

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

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
@@ -1181,57 +1182,37 @@ def setInputs(self, name: str | list[str] | dict[str, str | int | float]) -> boo
11811182
>>> setInputs(["Name1=value1","Name2=value2"]) # depreciated
11821183
>>> setInputs(name={"Name1": "value1", "Name2": "value2"})
11831184
"""
1184-
# inputdata = self._prepare_input_data(raw_input=name)
1185-
1186-
if isinstance(name, str):
1187-
name1: str = name
1188-
name1 = name1.replace(" ", "")
1189-
value1 = name1.split("=")
1190-
if value1[0] in self.inputlist:
1191-
tmpvalue = eval(value1[1])
1192-
if isinstance(tmpvalue, (int, float)):
1193-
self.inputlist[value1[0]] = [(float(self.simulateOptions["startTime"]), float(value1[1])),
1194-
(float(self.simulateOptions["stopTime"]), float(value1[1]))]
1195-
elif isinstance(tmpvalue, list):
1196-
self.checkValidInputs(tmpvalue)
1197-
self.inputlist[value1[0]] = tmpvalue
1185+
inputdata = self._prepare_input_data(raw_input=name)
1186+
1187+
for key, val in inputdata.items():
1188+
if key in self.inputlist:
1189+
val_evaluated = ast.literal_eval(val)
1190+
if isinstance(val_evaluated, (int, float)):
1191+
self.inputlist[key] = [(float(self.simulateOptions["startTime"]), float(val)),
1192+
(float(self.simulateOptions["stopTime"]), float(val))]
1193+
elif isinstance(val_evaluated, list):
1194+
if not all([isinstance(item, tuple) for item in val_evaluated]):
1195+
raise ModelicaSystemError("Value for setInput() must be in tuple format; "
1196+
f"got {repr(val_evaluated)}")
1197+
if val_evaluated != sorted(val_evaluated, key=lambda x: x[0]):
1198+
raise ModelicaSystemError("Time value should be in increasing order; "
1199+
f"got {repr(val_evaluated)}")
1200+
1201+
for item in val_evaluated:
1202+
if item[0] < float(self.simulateOptions["startTime"]):
1203+
raise ModelicaSystemError(f"Time value in {repr(item)} of {repr(val_evaluated)} is less "
1204+
"than the simulation start time")
1205+
if len(item) != 2:
1206+
raise ModelicaSystemError(f"Value {repr(item)} of {repr(val_evaluated)} "
1207+
"is in incorrect format!")
1208+
1209+
self.inputlist[key] = val_evaluated
11981210
self.inputFlag = True
11991211
else:
1200-
raise ModelicaSystemError(f"{value1[0]} is not an input")
1201-
elif isinstance(name, list):
1202-
name_list: list[str] = name
1203-
for name2 in name_list:
1204-
name2 = name2.replace(" ", "")
1205-
value2 = name2.split("=")
1206-
if value2[0] in self.inputlist:
1207-
tmpvalue = eval(value2[1])
1208-
if isinstance(tmpvalue, (int, float)):
1209-
self.inputlist[value2[0]] = [(float(self.simulateOptions["startTime"]), float(value2[1])),
1210-
(float(self.simulateOptions["stopTime"]), float(value2[1]))]
1211-
elif isinstance(tmpvalue, list):
1212-
self.checkValidInputs(tmpvalue)
1213-
self.inputlist[value2[0]] = tmpvalue
1214-
self.inputFlag = True
1215-
else:
1216-
raise ModelicaSystemError(f"{value2[0]} is not an input!")
1217-
elif isinstance(name, dict):
1218-
raise NotImplementedError("Must be defined!")
1212+
raise ModelicaSystemError(f"{key} is not an input")
12191213

12201214
return True
12211215

1222-
def checkValidInputs(self, name):
1223-
if name != sorted(name, key=lambda x: x[0]):
1224-
raise ModelicaSystemError('Time value should be in increasing order')
1225-
for l in name:
1226-
if isinstance(l, tuple):
1227-
# if l[0] < float(self.simValuesList[0]):
1228-
if l[0] < float(self.simulateOptions["startTime"]):
1229-
raise ModelicaSystemError('Input time value is less than simulation startTime')
1230-
if len(l) != 2:
1231-
raise ModelicaSystemError(f'Value for {l} is in incorrect format!')
1232-
else:
1233-
raise ModelicaSystemError('Error!!! Value must be in tuple format')
1234-
12351216
def createCSVData(self) -> pathlib.Path:
12361217
start_time: float = float(self.simulateOptions["startTime"])
12371218
stop_time: float = float(self.simulateOptions["stopTime"])

0 commit comments

Comments
 (0)