Skip to content

Commit 2f8c6d2

Browse files
syntronadeas31
andauthored
(A013) [ModelicaSystemDoE] simplify definition (#423)
* update docstring of __init__.py - do not promote depreciated OMCSessionZMQ * reorder imports in __init__.py * [OMCSession] use function keyword arguments if possible * (A013) [ModelicaSystemDoE] simplify definition [ModelicaSystemDoE] simplify definition; use a Modelicasystem instance as argument [ModelicaSystemDoE] update docstring [ModelicaSystemDoE] fix for relative paths [ModelicaSystemDoE] fix unittest * test_ModelicaSystemDoE_local is tested * test_ModelicaSystemDoE_docker should work * test_ModelicaSystemDoE_WSL is untested * do not compare to a hard-coded version string but verify that there is a (gerneric) OpenModelica version string --------- Co-authored-by: Adeel Asghar <adeel.asghar@liu.se>
1 parent 8da06a2 commit 2f8c6d2

File tree

4 files changed

+59
-42
lines changed

4 files changed

+59
-42
lines changed

OMPython/ModelicaSystem.py

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,15 @@ def get_session(self) -> OMCSession:
461461
"""
462462
return self._session
463463

464+
def get_model_name(self) -> str:
465+
"""
466+
Return the defined model name.
467+
"""
468+
if not isinstance(self._model_name, str):
469+
raise ModelicaSystemError("No model name defined!")
470+
471+
return self._model_name
472+
464473
def set_command_line_options(self, command_line_option: str):
465474
"""
466475
Set the provided command line option via OMC setCommandLineOptions().
@@ -2051,9 +2060,13 @@ def run_doe():
20512060
resdir = mypath / 'DoE'
20522061
resdir.mkdir(exist_ok=True)
20532062
2054-
doe_mod = OMPython.ModelicaSystemDoE(
2063+
mod = OMPython.ModelicaSystem()
2064+
mod.model(
20552065
model_name="M",
20562066
model_file=model.as_posix(),
2067+
)
2068+
doe_mod = OMPython.ModelicaSystemDoE(
2069+
mod=mod,
20572070
parameters=param,
20582071
resultpath=resdir,
20592072
simargs={"override": {'stopTime': 1.0}},
@@ -2080,15 +2093,8 @@ def run_doe():
20802093

20812094
def __init__(
20822095
self,
2083-
# data to be used for ModelicaSystem
2084-
model_file: Optional[str | os.PathLike] = None,
2085-
model_name: Optional[str] = None,
2086-
libraries: Optional[list[str | tuple[str, str]]] = None,
2087-
command_line_options: Optional[list[str]] = None,
2088-
variable_filter: Optional[str] = None,
2089-
work_directory: Optional[str | os.PathLike] = None,
2090-
omhome: Optional[str] = None,
2091-
session: Optional[OMCSession] = None,
2096+
# ModelicaSystem definition to use
2097+
mod: ModelicaSystem,
20922098
# simulation specific input
20932099
# TODO: add more settings (simulation options, input options, ...)
20942100
simargs: Optional[dict[str, Optional[str | dict[str, str] | numbers.Number]]] = None,
@@ -2101,30 +2107,18 @@ def __init__(
21012107
ModelicaSystem.simulate(). Additionally, the path to store the result files is needed (= resultpath) as well as
21022108
a list of parameters to vary for the Doe (= parameters). All possible combinations are considered.
21032109
"""
2104-
if model_name is None:
2105-
raise ModelicaSystemError("No model name provided!")
2106-
2107-
self._mod = ModelicaSystem(
2108-
command_line_options=command_line_options,
2109-
work_directory=work_directory,
2110-
omhome=omhome,
2111-
session=session,
2112-
)
2113-
self._mod.model(
2114-
model_file=model_file,
2115-
model_name=model_name,
2116-
libraries=libraries,
2117-
variable_filter=variable_filter,
2118-
)
2110+
if not isinstance(mod, ModelicaSystem):
2111+
raise ModelicaSystemError("Missing definition of ModelicaSystem!")
21192112

2120-
self._model_name = model_name
2113+
self._mod = mod
2114+
self._model_name = mod.get_model_name()
21212115

21222116
self._simargs = simargs
21232117

21242118
if resultpath is None:
21252119
self._resultpath = self.get_session().omcpath_tempdir()
21262120
else:
2127-
self._resultpath = self.get_session().omcpath(resultpath)
2121+
self._resultpath = self.get_session().omcpath(resultpath).resolve()
21282122
if not self._resultpath.is_dir():
21292123
raise ModelicaSystemError("Argument resultpath must be set to a valid path within the environment used "
21302124
f"for the OpenModelica session: {resultpath}!")

tests/test_ModelicaSystemDoE.py

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,17 @@ def test_ModelicaSystemDoE_local(tmp_path, model_doe, param_doe):
5555
tmpdir = tmp_path / 'DoE'
5656
tmpdir.mkdir(exist_ok=True)
5757

58-
doe_mod = OMPython.ModelicaSystemDoE(
58+
mod = OMPython.ModelicaSystem()
59+
mod.model(
5960
model_file=model_doe,
6061
model_name="M",
62+
)
63+
64+
doe_mod = OMPython.ModelicaSystemDoE(
65+
mod=mod,
6166
parameters=param_doe,
6267
resultpath=tmpdir,
63-
simargs={"override": {'stopTime': 1.0}},
68+
simargs={"override": {'stopTime': '1.0'}},
6469
)
6570

6671
_run_ModelicaSystemDoe(doe_mod=doe_mod)
@@ -70,14 +75,21 @@ def test_ModelicaSystemDoE_local(tmp_path, model_doe, param_doe):
7075
@skip_python_older_312
7176
def test_ModelicaSystemDoE_docker(tmp_path, model_doe, param_doe):
7277
omcs = OMPython.OMCSessionDocker(docker="openmodelica/openmodelica:v1.25.0-minimal")
73-
assert omcs.sendExpression("getVersion()") == "OpenModelica 1.25.0"
78+
omversion = omcs.sendExpression("getVersion()")
79+
assert isinstance(omversion, str) and omversion.startswith("OpenModelica")
7480

75-
doe_mod = OMPython.ModelicaSystemDoE(
81+
mod = OMPython.ModelicaSystem(
82+
session=omcs,
83+
)
84+
mod.model(
7685
model_file=model_doe,
7786
model_name="M",
87+
)
88+
89+
doe_mod = OMPython.ModelicaSystemDoE(
90+
mod=mod,
7891
parameters=param_doe,
79-
session=omcs,
80-
simargs={"override": {'stopTime': 1.0}},
92+
simargs={"override": {'stopTime': '1.0'}},
8193
)
8294

8395
_run_ModelicaSystemDoe(doe_mod=doe_mod)
@@ -86,15 +98,22 @@ def test_ModelicaSystemDoE_docker(tmp_path, model_doe, param_doe):
8698
@pytest.mark.skip(reason="Not able to run WSL on github")
8799
@skip_python_older_312
88100
def test_ModelicaSystemDoE_WSL(tmp_path, model_doe, param_doe):
89-
tmpdir = tmp_path / 'DoE'
90-
tmpdir.mkdir(exist_ok=True)
101+
omcs = OMPython.OMCSessionWSL()
102+
omversion = omcs.sendExpression("getVersion()")
103+
assert isinstance(omversion, str) and omversion.startswith("OpenModelica")
91104

92-
doe_mod = OMPython.ModelicaSystemDoE(
105+
mod = OMPython.ModelicaSystem(
106+
session=omcs,
107+
)
108+
mod.model(
93109
model_file=model_doe,
94110
model_name="M",
111+
)
112+
113+
doe_mod = OMPython.ModelicaSystemDoE(
114+
mod=mod,
95115
parameters=param_doe,
96-
resultpath=tmpdir,
97-
simargs={"override": {'stopTime': 1.0}},
116+
simargs={"override": {'stopTime': '1.0'}},
98117
)
99118

100119
_run_ModelicaSystemDoe(doe_mod=doe_mod)

tests/test_OMCPath.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ def test_OMCPath_OMCProcessLocal():
2727
@skip_python_older_312
2828
def test_OMCPath_OMCProcessDocker():
2929
omcs = OMPython.OMCSessionDocker(docker="openmodelica/openmodelica:v1.25.0-minimal")
30-
assert omcs.sendExpression("getVersion()") == "OpenModelica 1.25.0"
30+
omversion = omcs.sendExpression("getVersion()")
31+
assert isinstance(omversion, str) and omversion.startswith("OpenModelica")
3132

3233
_run_OMCPath_checks(omcs)
3334

tests/test_docker.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,16 @@
1111
@skip_on_windows
1212
def test_docker():
1313
omcs = OMPython.OMCSessionDocker(docker="openmodelica/openmodelica:v1.25.0-minimal")
14-
assert omcs.sendExpression("getVersion()") == "OpenModelica 1.25.0"
14+
omversion = omcs.sendExpression("getVersion()")
15+
assert isinstance(omversion, str) and omversion.startswith("OpenModelica")
1516

1617
omcsInner = OMPython.OMCSessionDockerContainer(dockerContainer=omcs.get_docker_container_id())
17-
assert omcsInner.sendExpression("getVersion()") == "OpenModelica 1.25.0"
18+
omversion = omcsInner.sendExpression("getVersion()")
19+
assert isinstance(omversion, str) and omversion.startswith("OpenModelica")
1820

1921
omcs2 = OMPython.OMCSessionDocker(docker="openmodelica/openmodelica:v1.25.0-minimal", port=11111)
20-
assert omcs2.sendExpression("getVersion()") == "OpenModelica 1.25.0"
22+
omversion = omcs2.sendExpression("getVersion()")
23+
assert isinstance(omversion, str) and omversion.startswith("OpenModelica")
2124

2225
del omcs2
2326

0 commit comments

Comments
 (0)