|
32 | 32 | CONDITIONS OF OSMC-PL. |
33 | 33 | """ |
34 | 34 |
|
| 35 | +import ast |
35 | 36 | import csv |
36 | 37 | from dataclasses import dataclass |
37 | 38 | import importlib |
@@ -1181,57 +1182,37 @@ def setInputs(self, name: str | list[str] | dict[str, str | int | float]) -> boo |
1181 | 1182 | >>> setInputs(["Name1=value1","Name2=value2"]) # depreciated |
1182 | 1183 | >>> setInputs(name={"Name1": "value1", "Name2": "value2"}) |
1183 | 1184 | """ |
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 |
1198 | 1210 | self.inputFlag = True |
1199 | 1211 | 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") |
1219 | 1213 |
|
1220 | 1214 | return True |
1221 | 1215 |
|
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 | | - |
1235 | 1216 | def createCSVData(self) -> pathlib.Path: |
1236 | 1217 | start_time: float = float(self.simulateOptions["startTime"]) |
1237 | 1218 | stop_time: float = float(self.simulateOptions["stopTime"]) |
|
0 commit comments