Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,829 changes: 998 additions & 831 deletions OMPython/ModelicaSystem.py

Large diffs are not rendered by default.

285 changes: 101 additions & 184 deletions OMPython/OMCSession.py

Large diffs are not rendered by default.

47 changes: 33 additions & 14 deletions OMPython/__init__.py
Original file line number Diff line number Diff line change
@@ -1,51 +1,70 @@
# -*- coding: utf-8 -*-
"""
OMPython is a Python interface to OpenModelica.
To get started, create an OMCSessionZMQ object:
from OMPython import OMCSessionZMQ
omc = OMCSessionZMQ()
To get started on a local OMC server, create an OMCSessionLocal object:

```
import OMPython
omc = OMPython.OMCSessionLocal()
omc.sendExpression("command")
```

"""

from OMPython.ModelicaSystem import (
LinearizationResult,
ModelicaSystem,
ModelicaSystemCmd,
ModelicaSystemOMC,
ModelExecutionCmd,
ModelicaSystemDoE,
ModelicaDoEOMC,
ModelicaSystemError,

doe_get_solutions,
)
from OMPython.OMCSession import (
OMCPath,
OMCSession,

ModelExecutionData,
ModelExecutionException,

OMCSessionCmd,
OMCSessionException,
OMCSessionRunData,
OMCSessionZMQ,
OMCSessionPort,
OMCSessionLocal,
OMCSessionDocker,
OMCSessionDockerContainer,
OMCSessionException,
OMCSessionLocal,
OMCSessionPort,
OMCSessionWSL,
OMCSessionZMQ,
)

# global names imported if import 'from OMPython import *' is used
__all__ = [
'LinearizationResult',

'ModelExecutionData',
'ModelExecutionException',

'ModelicaSystem',
'ModelicaSystemCmd',
'ModelicaSystemOMC',
'ModelExecutionCmd',
'ModelicaSystemDoE',
'ModelicaDoEOMC',
'ModelicaSystemError',

'OMCPath',

'OMCSession',

'doe_get_solutions',

'OMCSessionCmd',
'OMCSessionDocker',
'OMCSessionDockerContainer',
'OMCSessionException',
'OMCSessionRunData',
'OMCSessionZMQ',
'OMCSessionPort',
'OMCSessionLocal',
'OMCSessionDocker',
'OMCSessionDockerContainer',
'OMCSessionWSL',
'OMCSessionZMQ',
]
4 changes: 2 additions & 2 deletions tests/test_FMIExport.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@


def test_CauerLowPassAnalog():
mod = OMPython.ModelicaSystem()
mod = OMPython.ModelicaSystemOMC()
mod.model(
model_name="Modelica.Electrical.Analog.Examples.CauerLowPassAnalog",
libraries=["Modelica"],
Expand All @@ -20,7 +20,7 @@ def test_CauerLowPassAnalog():


def test_DrumBoiler():
mod = OMPython.ModelicaSystem()
mod = OMPython.ModelicaSystemOMC()
mod.model(
model_name="Modelica.Fluid.Examples.DrumBoiler.DrumBoiler",
libraries=["Modelica"],
Expand Down
4 changes: 2 additions & 2 deletions tests/test_FMIImport.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ def model_firstorder(tmp_path):

def test_FMIImport(model_firstorder):
# create model & simulate it
mod1 = OMPython.ModelicaSystem()
mod1 = OMPython.ModelicaSystemOMC()
mod1.model(
model_file=model_firstorder,
model_name="M",
Expand All @@ -35,7 +35,7 @@ def test_FMIImport(model_firstorder):

# import FMU & check & simulate
# TODO: why is '--allowNonStandardModelica=reinitInAlgorithms' needed? any example without this possible?
mod2 = OMPython.ModelicaSystem(command_line_options=['--allowNonStandardModelica=reinitInAlgorithms'])
mod2 = OMPython.ModelicaSystemOMC(command_line_options=['--allowNonStandardModelica=reinitInAlgorithms'])
mo = mod2.convertFmu2Mo(fmu=fmu)
assert os.path.exists(mo)

Expand Down
51 changes: 34 additions & 17 deletions tests/test_ModelicaSystemDoE.py → tests/test_ModelicaDoEOMC.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,56 +51,73 @@ def param_doe() -> dict[str, list]:
return param


def test_ModelicaSystemDoE_local(tmp_path, model_doe, param_doe):
def test_ModelicaDoEOMC_local(tmp_path, model_doe, param_doe):
tmpdir = tmp_path / 'DoE'
tmpdir.mkdir(exist_ok=True)

doe_mod = OMPython.ModelicaSystemDoE(
mod = OMPython.ModelicaSystemOMC()
mod.model(
model_file=model_doe,
model_name="M",
)

doe_mod = OMPython.ModelicaDoEOMC(
mod=mod,
parameters=param_doe,
resultpath=tmpdir,
simargs={"override": {'stopTime': 1.0}},
simargs={"override": {'stopTime': '1.0'}},
)

_run_ModelicaSystemDoe(doe_mod=doe_mod)
_run_ModelicaDoEOMC(doe_mod=doe_mod)


@skip_on_windows
@skip_python_older_312
def test_ModelicaSystemDoE_docker(tmp_path, model_doe, param_doe):
def test_ModelicaDoEOMC_docker(tmp_path, model_doe, param_doe):
omcs = OMPython.OMCSessionDocker(docker="openmodelica/openmodelica:v1.25.0-minimal")
assert omcs.sendExpression("getVersion()") == "OpenModelica 1.25.0"

doe_mod = OMPython.ModelicaSystemDoE(
mod = OMPython.ModelicaSystemOMC(
session=omcs,
)
mod.model(
model_file=model_doe,
model_name="M",
)

doe_mod = OMPython.ModelicaDoEOMC(
mod=mod,
parameters=param_doe,
session=omcs,
simargs={"override": {'stopTime': 1.0}},
simargs={"override": {'stopTime': '1.0'}},
)

_run_ModelicaSystemDoe(doe_mod=doe_mod)
_run_ModelicaDoEOMC(doe_mod=doe_mod)


@pytest.mark.skip(reason="Not able to run WSL on github")
@skip_python_older_312
def test_ModelicaSystemDoE_WSL(tmp_path, model_doe, param_doe):
tmpdir = tmp_path / 'DoE'
tmpdir.mkdir(exist_ok=True)
def test_ModelicaDoEOMC_WSL(tmp_path, model_doe, param_doe):
omcs = OMPython.OMCSessionWSL()
assert omcs.sendExpression("getVersion()") == "OpenModelica 1.25.0"

doe_mod = OMPython.ModelicaSystemDoE(
mod = OMPython.ModelicaSystemOMC(
session=omcs,
)
mod.model(
model_file=model_doe,
model_name="M",
)

doe_mod = OMPython.ModelicaDoEOMC(
mod=mod,
parameters=param_doe,
resultpath=tmpdir,
simargs={"override": {'stopTime': 1.0}},
simargs={"override": {'stopTime': '1.0'}},
)

_run_ModelicaSystemDoe(doe_mod=doe_mod)
_run_ModelicaDoEOMC(doe_mod=doe_mod)


def _run_ModelicaSystemDoe(doe_mod):
def _run_ModelicaDoEOMC(doe_mod):
doe_count = doe_mod.prepare()
assert doe_count == 16

Expand Down
12 changes: 8 additions & 4 deletions tests/test_ModelicaSystemCmd.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,20 @@ def model_firstorder(tmp_path):

@pytest.fixture
def mscmd_firstorder(model_firstorder):
mod = OMPython.ModelicaSystem()
mod = OMPython.ModelicaSystemOMC()
mod.model(
model_file=model_firstorder,
model_name="M",
)
mscmd = OMPython.ModelicaSystemCmd(
session=mod.get_session(),

mscmd = OMPython.ModelExecutionCmd(
runpath=mod.getWorkDirectory(),
modelname=mod._model_name,
cmd_local=mod.get_session().model_execution_local,
cmd_windows=mod.get_session().model_execution_windows,
cmd_prefix=mod.get_session().model_execution_prefix(cwd=mod.getWorkDirectory()),
model_name=mod._model_name,
)

return mscmd


Expand Down
22 changes: 13 additions & 9 deletions tests/test_ModelicaSystem.py → tests/test_ModelicaSystemOMC.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ def model_firstorder(tmp_path, model_firstorder_content):

def test_ModelicaSystem_loop(model_firstorder):
def worker():
mod = OMPython.ModelicaSystem()
mod = OMPython.ModelicaSystemOMC()
mod.model(
model_file=model_firstorder,
model_name="M",
Expand All @@ -56,7 +56,9 @@ def test_setParameters():
omcs = OMPython.OMCSessionLocal()
model_path_str = omcs.sendExpression("getInstallationDirectoryPath()") + "/share/doc/omc/testmodels"
model_path = omcs.omcpath(model_path_str)
mod = OMPython.ModelicaSystem()
mod = OMPython.ModelicaSystemOMC(
session=omcs,
)
mod.model(
model_file=model_path / "BouncingBall.mo",
model_name="BouncingBall",
Expand Down Expand Up @@ -91,7 +93,9 @@ def test_setSimulationOptions():
omcs = OMPython.OMCSessionLocal()
model_path_str = omcs.sendExpression("getInstallationDirectoryPath()") + "/share/doc/omc/testmodels"
model_path = omcs.omcpath(model_path_str)
mod = OMPython.ModelicaSystem()
mod = OMPython.ModelicaSystemOMC(
session=omcs,
)
mod.model(
model_file=model_path / "BouncingBall.mo",
model_name="BouncingBall",
Expand Down Expand Up @@ -128,7 +132,7 @@ def test_relative_path(model_firstorder):
model_relative = str(model_file)
assert "/" not in model_relative

mod = OMPython.ModelicaSystem()
mod = OMPython.ModelicaSystemOMC()
mod.model(
model_file=model_relative,
model_name="M",
Expand All @@ -141,7 +145,7 @@ def test_relative_path(model_firstorder):
def test_customBuildDirectory(tmp_path, model_firstorder):
tmpdir = tmp_path / "tmpdir1"
tmpdir.mkdir()
mod = OMPython.ModelicaSystem(work_directory=tmpdir)
mod = OMPython.ModelicaSystemOMC(work_directory=tmpdir)
mod.model(
model_file=model_firstorder,
model_name="M",
Expand All @@ -157,7 +161,7 @@ def test_customBuildDirectory(tmp_path, model_firstorder):
@skip_python_older_312
def test_getSolutions_docker(model_firstorder):
omcs = OMPython.OMCSessionDocker(docker="openmodelica/openmodelica:v1.25.0-minimal")
mod = OMPython.ModelicaSystem(
mod = OMPython.ModelicaSystemOMC(
session=omcs,
)
mod.model(
Expand All @@ -169,7 +173,7 @@ def test_getSolutions_docker(model_firstorder):


def test_getSolutions(model_firstorder):
mod = OMPython.ModelicaSystem()
mod = OMPython.ModelicaSystemOMC()
mod.model(
model_file=model_firstorder,
model_name="M",
Expand Down Expand Up @@ -217,7 +221,7 @@ def test_getters(tmp_path):
y = der(x);
end M_getters;
""")
mod = OMPython.ModelicaSystem()
mod = OMPython.ModelicaSystemOMC()
mod.model(
model_file=model_file,
model_name="M_getters",
Expand Down Expand Up @@ -426,7 +430,7 @@ def test_simulate_inputs(tmp_path):
y = x;
end M_input;
""")
mod = OMPython.ModelicaSystem()
mod = OMPython.ModelicaSystemOMC()
mod.model(
model_file=model_file,
model_name="M_input",
Expand Down
2 changes: 1 addition & 1 deletion tests/test_OMSessionCmd.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ def test_isPackage():


def test_isPackage2():
mod = OMPython.ModelicaSystem()
mod = OMPython.ModelicaSystemOMC()
mod.model(
model_name="Modelica.Electrical.Analog.Examples.CauerLowPassAnalog",
libraries=["Modelica"],
Expand Down
4 changes: 2 additions & 2 deletions tests/test_linearization.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ def model_linearTest(tmp_path):


def test_example(model_linearTest):
mod = OMPython.ModelicaSystem()
mod = OMPython.ModelicaSystemOMC()
mod.model(
model_file=model_linearTest,
model_name="linearTest",
Expand Down Expand Up @@ -60,7 +60,7 @@ def test_getters(tmp_path):
y2 = phi + u1;
end Pendulum;
""")
mod = OMPython.ModelicaSystem()
mod = OMPython.ModelicaSystemOMC()
mod.model(
model_file=model_file,
model_name="Pendulum",
Expand Down
2 changes: 1 addition & 1 deletion tests/test_optimization.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ def test_optimization_example(tmp_path):
end BangBang2021;
""")

mod = OMPython.ModelicaSystem()
mod = OMPython.ModelicaSystemOMC()
mod.model(
model_file=model_file,
model_name="BangBang2021",
Expand Down
Loading