Skip to content

Commit afca7f0

Browse files
committed
[ModelicaSystem] use OMCPath as possible input for provided paths
* __init__:fileName * __init__:customBuildDirectory * simulate:resultfile * getSolutions:resultfile
1 parent 715270d commit afca7f0

1 file changed

Lines changed: 21 additions & 11 deletions

File tree

OMPython/ModelicaSystem.py

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -309,12 +309,12 @@ class ModelicaSystem:
309309

310310
def __init__(
311311
self,
312-
fileName: Optional[str | os.PathLike | pathlib.Path] = None,
312+
fileName: Optional[str | os.PathLike | pathlib.Path | OMCPath] = None,
313313
modelName: Optional[str] = None,
314314
lmodel: Optional[list[str | tuple[str, str]]] = None,
315315
commandLineOptions: Optional[str] = None,
316316
variableFilter: Optional[str] = None,
317-
customBuildDirectory: Optional[str | os.PathLike | pathlib.Path] = None,
317+
customBuildDirectory: Optional[str | os.PathLike | pathlib.Path | OMCPath] = None,
318318
omhome: Optional[str] = None,
319319
omc_process: Optional[OMCProcessLocal] = None,
320320
build: bool = True,
@@ -396,7 +396,11 @@ def __init__(
396396

397397
self._lmodel = lmodel # may be needed if model is derived from other model
398398
self._model_name = modelName # Model class name
399-
self._file_name: Optional[OMCPath] = self._getconn.omcpath(fileName).resolve() if fileName is not None else None # Model file/package name
399+
if fileName is not None:
400+
file_name = self._getconn.omcpath(fileName).resolve()
401+
else:
402+
file_name = None
403+
self._file_name: Optional[OMCPath] = file_name # Model file/package name
400404
self._simulated = False # True if the model has already been simulated
401405
self._result_file: Optional[OMCPath] = None # for storing result file
402406
self._variable_filter = variableFilter
@@ -460,16 +464,20 @@ def _loadLibrary(self, lmodel: list):
460464

461465
def _set_work_directory(
462466
self,
463-
customBuildDirectory: Optional[str | os.PathLike | pathlib.Path] = None,
467+
customBuildDirectory: Optional[str | os.PathLike | pathlib.Path | OMCPath] = None,
464468
) -> OMCPath:
465469
"""
466470
Define a temporary directory to use.
467471
"""
468472
# create a unique temp directory for each session and build the model in that directory
469473
if customBuildDirectory is not None:
470-
if not os.path.exists(customBuildDirectory):
474+
if os.path.exists(customBuildDirectory):
475+
tempdir = self._getconn.omcpath(customBuildDirectory).absolute()
476+
elif isinstance(customBuildDirectory, OMCPath):
477+
tempdir = customBuildDirectory
478+
479+
if not tempdir.is_dir():
471480
raise IOError(f"{customBuildDirectory} does not exist")
472-
tempdir = self._getconn.omcpath(customBuildDirectory).absolute()
473481
else:
474482
tempdir = self._getconn.omcpath_tempdir().absolute()
475483
if not tempdir.is_dir():
@@ -1025,7 +1033,7 @@ def simulate_cmd(
10251033

10261034
def simulate(
10271035
self,
1028-
resultfile: Optional[str] = None,
1036+
resultfile: Optional[str | pathlib.Path | OMCPath] = None,
10291037
simflags: Optional[str] = None,
10301038
simargs: Optional[dict[str, Optional[str | dict[str, str]]]] = None,
10311039
timeout: Optional[float] = None,
@@ -1051,10 +1059,12 @@ def simulate(
10511059
if resultfile is None:
10521060
# default result file generated by OM
10531061
self._result_file = self.getWorkDirectory() / f"{self._model_name}_res.mat"
1054-
elif os.path.exists(resultfile):
1055-
self._result_file = self._getconn.omcpath(resultfile)
1062+
elif isinstance(resultfile, OMCPath):
1063+
self._result_file = resultfile
10561064
else:
1057-
self._result_file = self.getWorkDirectory() / resultfile
1065+
self._result_file = self._getconn.omcpath(resultfile)
1066+
if not self._result_file.is_absolute():
1067+
self._result_file = self.getWorkDirectory() / resultfile
10581068

10591069
if not isinstance(self._result_file, OMCPath):
10601070
raise ModelicaSystemError(f"Invalid result file path: {self._result_file} - must be an OMCPath object!")
@@ -1087,7 +1097,7 @@ def simulate(
10871097
def getSolutions(
10881098
self,
10891099
varList: Optional[str | list[str]] = None,
1090-
resultfile: Optional[str| pathlib.Path] = None,
1100+
resultfile: Optional[str | pathlib.Path | OMCPath] = None,
10911101
) -> tuple[str] | np.ndarray:
10921102
"""Extract simulation results from a result data file.
10931103

0 commit comments

Comments
 (0)