Skip to content

Commit 90bb065

Browse files
committed
[ModelicaSystem] define doe_get_solutions() as separate method
1 parent 52b6403 commit 90bb065

2 files changed

Lines changed: 69 additions & 48 deletions

File tree

OMPython/ModelicaSystem.py

Lines changed: 65 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2485,66 +2485,83 @@ def get_doe_solutions(
24852485
var_list: Optional[list] = None,
24862486
) -> Optional[tuple[str] | dict[str, dict[str, np.ndarray]]]:
24872487
"""
2488-
Get all solutions of the DoE run. The following return values are possible:
2488+
Wrapper for doe_get_solutions()
2489+
"""
2490+
if not isinstance(self._mod, ModelicaSystemOMC):
2491+
raise ModelicaSystemError(f"Invalid definition for mod: {type(self._mod)} - expect ModelicaSystemOMC!")
24892492

2490-
* A list of variables if val_list == None
2493+
return doe_get_solutions(
2494+
msomc=self._mod,
2495+
resultpath=self._resultpath,
2496+
doe_def=self.get_doe_definition(),
2497+
var_list=var_list,
2498+
)
24912499

2492-
* The Solutions as dict[str, pd.DataFrame] if a value list (== val_list) is defined.
24932500

2494-
The following code snippet can be used to convert the solution data for each run to a pandas dataframe:
2501+
def doe_get_solutions(
2502+
msomc: ModelicaSystemOMC,
2503+
resultpath: OMCPath,
2504+
doe_def: Optional[dict] = None,
2505+
var_list: Optional[list] = None,
2506+
) -> Optional[tuple[str] | dict[str, dict[str, np.ndarray]]]:
2507+
"""
2508+
Get all solutions of the DoE run. The following return values are possible:
24952509
2496-
```
2497-
import pandas as pd
2510+
* A list of variables if val_list == None
24982511
2499-
doe_sol = doe_mod.get_doe_solutions()
2500-
for key in doe_sol:
2501-
data = doe_sol[key]['data']
2502-
if data:
2503-
doe_sol[key]['df'] = pd.DataFrame.from_dict(data=data)
2504-
else:
2505-
doe_sol[key]['df'] = None
2506-
```
2512+
* The Solutions as dict[str, pd.DataFrame] if a value list (== val_list) is defined.
25072513
2508-
"""
2509-
if not isinstance(self._mod, ModelicaSystemOMC):
2510-
raise ModelicaSystemError(f"Invalid definition for mod: {type(self._mod)} - expect ModelicaSystemOMC!")
2514+
The following code snippet can be used to convert the solution data for each run to a pandas dataframe:
25112515
2512-
if not isinstance(self._doe_def, dict):
2513-
return None
2516+
```
2517+
import pandas as pd
25142518
2515-
if len(self._doe_def) == 0:
2516-
raise ModelicaSystemError("No result files available - all simulations did fail?")
2519+
doe_sol = doe_mod.get_doe_solutions()
2520+
for key in doe_sol:
2521+
data = doe_sol[key]['data']
2522+
if data:
2523+
doe_sol[key]['df'] = pd.DataFrame.from_dict(data=data)
2524+
else:
2525+
doe_sol[key]['df'] = None
2526+
```
25172527
2518-
sol_dict: dict[str, dict[str, Any]] = {}
2519-
for resultfilename in self._doe_def:
2520-
resultfile = self._resultpath / resultfilename
2528+
"""
2529+
if not isinstance(doe_def, dict):
2530+
return None
25212531

2522-
sol_dict[resultfilename] = {}
2532+
if len(doe_def) == 0:
2533+
raise ModelicaSystemError("No result files available - all simulations did fail?")
25232534

2524-
if not self._doe_def[resultfilename][self.DICT_RESULT_AVAILABLE]:
2525-
msg = f"No result file available for {resultfilename}"
2526-
logger.warning(msg)
2527-
sol_dict[resultfilename]['msg'] = msg
2528-
sol_dict[resultfilename]['data'] = {}
2529-
continue
2535+
sol_dict: dict[str, dict[str, Any]] = {}
2536+
for resultfilename in doe_def:
2537+
resultfile = resultpath / resultfilename
25302538

2531-
if var_list is None:
2532-
var_list_row = list(self._mod.getSolutions(resultfile=resultfile))
2533-
else:
2534-
var_list_row = var_list
2535-
2536-
try:
2537-
sol = self._mod.getSolutions(varList=var_list_row, resultfile=resultfile)
2538-
sol_data = {var: sol[idx] for idx, var in enumerate(var_list_row)}
2539-
sol_dict[resultfilename]['msg'] = 'Simulation available'
2540-
sol_dict[resultfilename]['data'] = sol_data
2541-
except ModelicaSystemError as ex:
2542-
msg = f"Error reading solution for {resultfilename}: {ex}"
2543-
logger.warning(msg)
2544-
sol_dict[resultfilename]['msg'] = msg
2545-
sol_dict[resultfilename]['data'] = {}
2546-
2547-
return sol_dict
2539+
sol_dict[resultfilename] = {}
2540+
2541+
if not doe_def[resultfilename][ModelicaDoEABC.DICT_RESULT_AVAILABLE]:
2542+
msg = f"No result file available for {resultfilename}"
2543+
logger.warning(msg)
2544+
sol_dict[resultfilename]['msg'] = msg
2545+
sol_dict[resultfilename]['data'] = {}
2546+
continue
2547+
2548+
if var_list is None:
2549+
var_list_row = list(msomc.getSolutions(resultfile=resultfile))
2550+
else:
2551+
var_list_row = var_list
2552+
2553+
try:
2554+
sol = msomc.getSolutions(varList=var_list_row, resultfile=resultfile)
2555+
sol_data = {var: sol[idx] for idx, var in enumerate(var_list_row)}
2556+
sol_dict[resultfilename]['msg'] = 'Simulation available'
2557+
sol_dict[resultfilename]['data'] = sol_data
2558+
except ModelicaSystemError as ex:
2559+
msg = f"Error reading solution for {resultfilename}: {ex}"
2560+
logger.warning(msg)
2561+
sol_dict[resultfilename]['msg'] = msg
2562+
sol_dict[resultfilename]['data'] = {}
2563+
2564+
return sol_dict
25482565

25492566

25502567
class ModelicaSystemDoE(ModelicaDoEOMC):

OMPython/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
ModelicaSystemDoE,
2020
ModelicaDoEOMC,
2121
ModelicaSystemError,
22+
23+
doe_get_solutions,
2224
)
2325
from OMPython.OMCSession import (
2426
ModelExecutionData,
@@ -48,6 +50,8 @@
4850
'ModelicaDoEOMC',
4951
'ModelicaSystemError',
5052

53+
'doe_get_solutions',
54+
5155
'OMCSessionCmd',
5256
'OMCSessionException',
5357
'OMCSessionZMQ',

0 commit comments

Comments
 (0)