Skip to content

Commit 1cbd1f7

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

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
@@ -1197,57 +1198,37 @@ def setInputs(self, name: str | list[str] | dict[str, str | int | float]) -> boo
11971198
>>> setInputs(["Name1=value1","Name2=value2"]) # depreciated
11981199
>>> setInputs(name={"Name1": "value1", "Name2": "value2"})
11991200
"""
1200-
# inputdata = self._prepare_input_data(raw_input=name)
1201-
1202-
if isinstance(name, str):
1203-
name1: str = name
1204-
name1 = name1.replace(" ", "")
1205-
value1 = name1.split("=")
1206-
if value1[0] in self.inputlist:
1207-
tmpvalue = eval(value1[1])
1208-
if isinstance(tmpvalue, (int, float)):
1209-
self.inputlist[value1[0]] = [(float(self.simulateOptions["startTime"]), float(value1[1])),
1210-
(float(self.simulateOptions["stopTime"]), float(value1[1]))]
1211-
elif isinstance(tmpvalue, list):
1212-
self.checkValidInputs(tmpvalue)
1213-
self.inputlist[value1[0]] = tmpvalue
1201+
inputdata = self._prepare_input_data(raw_input=name)
1202+
1203+
for key, val in inputdata.items():
1204+
if key in self.inputlist:
1205+
val_evaluated = ast.literal_eval(val)
1206+
if isinstance(val_evaluated, (int, float)):
1207+
self.inputlist[key] = [(float(self.simulateOptions["startTime"]), float(val)),
1208+
(float(self.simulateOptions["stopTime"]), float(val))]
1209+
elif isinstance(val_evaluated, list):
1210+
if not all([isinstance(item, tuple) for item in val_evaluated]):
1211+
raise ModelicaSystemError("Value for setInput() must be in tuple format; "
1212+
f"got {repr(val_evaluated)}")
1213+
if val_evaluated != sorted(val_evaluated, key=lambda x: x[0]):
1214+
raise ModelicaSystemError("Time value should be in increasing order; "
1215+
f"got {repr(val_evaluated)}")
1216+
1217+
for item in val_evaluated:
1218+
if item[0] < float(self.simulateOptions["startTime"]):
1219+
raise ModelicaSystemError(f"Time value in {repr(item)} of {repr(val_evaluated)} is less "
1220+
"than the simulation start time")
1221+
if len(item) != 2:
1222+
raise ModelicaSystemError(f"Value {repr(item)} of {repr(val_evaluated)} "
1223+
"is in incorrect format!")
1224+
1225+
self.inputlist[key] = val_evaluated
12141226
self.inputFlag = True
12151227
else:
1216-
raise ModelicaSystemError(f"{value1[0]} is not an input")
1217-
elif isinstance(name, list):
1218-
name_list: list[str] = name
1219-
for name2 in name_list:
1220-
name2 = name2.replace(" ", "")
1221-
value2 = name2.split("=")
1222-
if value2[0] in self.inputlist:
1223-
tmpvalue = eval(value2[1])
1224-
if isinstance(tmpvalue, (int, float)):
1225-
self.inputlist[value2[0]] = [(float(self.simulateOptions["startTime"]), float(value2[1])),
1226-
(float(self.simulateOptions["stopTime"]), float(value2[1]))]
1227-
elif isinstance(tmpvalue, list):
1228-
self.checkValidInputs(tmpvalue)
1229-
self.inputlist[value2[0]] = tmpvalue
1230-
self.inputFlag = True
1231-
else:
1232-
raise ModelicaSystemError(f"{value2[0]} is not an input!")
1233-
elif isinstance(name, dict):
1234-
raise NotImplementedError("Must be defined!")
1228+
raise ModelicaSystemError(f"{key} is not an input")
12351229

12361230
return True
12371231

1238-
def checkValidInputs(self, name):
1239-
if name != sorted(name, key=lambda x: x[0]):
1240-
raise ModelicaSystemError('Time value should be in increasing order')
1241-
for l in name:
1242-
if isinstance(l, tuple):
1243-
# if l[0] < float(self.simValuesList[0]):
1244-
if l[0] < float(self.simulateOptions["startTime"]):
1245-
raise ModelicaSystemError('Input time value is less than simulation startTime')
1246-
if len(l) != 2:
1247-
raise ModelicaSystemError(f'Value for {l} is in incorrect format!')
1248-
else:
1249-
raise ModelicaSystemError('Error!!! Value must be in tuple format')
1250-
12511232
def createCSVData(self) -> pathlib.Path:
12521233
start_time: float = float(self.simulateOptions["startTime"])
12531234
stop_time: float = float(self.simulateOptions["stopTime"])

0 commit comments

Comments
 (0)