22import OMPython
33import pathlib
44import pytest
5+ import sys
6+
7+ skip_on_windows = pytest .mark .skipif (
8+ sys .platform .startswith ("win" ),
9+ reason = "OpenModelica Docker image is Linux-only; skipping on Windows." ,
10+ )
11+
12+ skip_python_older_312 = pytest .mark .skipif (
13+ sys .version_info < (3 , 12 ),
14+ reason = "OMCPath(non-local) only working for Python >= 3.12." ,
15+ )
516
617
718@pytest .fixture
819def model_doe (tmp_path : pathlib .Path ) -> pathlib .Path :
920 # see: https://trac.openmodelica.org/OpenModelica/ticket/4052
1021 mod = tmp_path / "M.mo"
22+ # TODO: update for bool and string parameters; check if these can be used in DoE
1123 mod .write_text ("""
1224model M
1325 parameter Integer p=1;
@@ -37,7 +49,47 @@ def param_doe() -> dict[str, list]:
3749 return param
3850
3951
40- def test_ModelicaSystemDoE (tmp_path , model_doe , param_doe ):
52+ # @pytest.mark.skip(reason="No OMC")
53+ def test_ModelicaSystemDoE_local (tmp_path , model_doe , param_doe ):
54+ tmpdir = tmp_path / 'DoE'
55+ tmpdir .mkdir (exist_ok = True )
56+
57+ doe_mod = OMPython .ModelicaSystemDoE (
58+ fileName = model_doe .as_posix (),
59+ modelName = "M" ,
60+ parameters = param_doe ,
61+ resultpath = tmpdir ,
62+ simargs = {"override" : {'stopTime' : 1.0 }},
63+ )
64+
65+ _run_ModelicaSystemDoe (doe_mod = doe_mod )
66+
67+
68+ @skip_on_windows
69+ @skip_python_older_312
70+ def test_ModelicaSystemDoE_docker (tmp_path , model_doe , param_doe ):
71+ omcp = OMPython .OMCProcessDocker (docker = "openmodelica/openmodelica:v1.25.0-minimal" )
72+ omc = OMPython .OMCSessionZMQ (omc_process = omcp )
73+ assert omc .sendExpression ("getVersion()" ) == "OpenModelica 1.25.0"
74+
75+ modelpath = omc .omcpath_tempdir () / 'M.mo'
76+ modelpath .write_text (model_doe .read_text ())
77+
78+ doe_mod = OMPython .ModelicaSystemDoE (
79+ fileName = modelpath .as_posix (),
80+ modelName = "M" ,
81+ parameters = param_doe ,
82+ omc_process = omcp ,
83+ resultpath = modelpath .parent ,
84+ simargs = {"override" : {'stopTime' : 1.0 }},
85+ )
86+
87+ _run_ModelicaSystemDoe (doe_mod = doe_mod )
88+
89+
90+ @pytest .mark .skip (reason = "Not able to run WSL on github" )
91+ @skip_python_older_312
92+ def test_ModelicaSystemDoE_WSL (tmp_path , model_doe , param_doe ):
4193 tmpdir = tmp_path / 'DoE'
4294 tmpdir .mkdir (exist_ok = True )
4395
@@ -48,20 +100,34 @@ def test_ModelicaSystemDoE(tmp_path, model_doe, param_doe):
48100 resultpath = tmpdir ,
49101 simargs = {"override" : {'stopTime' : 1.0 }},
50102 )
103+
104+ _run_ModelicaSystemDoe (doe_mod = doe_mod )
105+
106+
107+ def _run_ModelicaSystemDoe (doe_mod ):
51108 doe_count = doe_mod .prepare ()
52109 assert doe_count == 16
53110
54- doe_dict = doe_mod .get_doe ()
55- assert isinstance (doe_dict , dict )
56- assert len (doe_dict .keys ()) == 16
111+ doe_def = doe_mod .get_doe_definition ()
112+ assert isinstance (doe_def , dict )
113+ assert len (doe_def .keys ()) == doe_count
114+
115+ doe_cmd = doe_mod .get_doe_command ()
116+ assert isinstance (doe_cmd , dict )
117+ assert len (doe_cmd .keys ()) == doe_count
57118
58119 doe_status = doe_mod .simulate ()
59120 assert doe_status is True
60121
61- doe_sol = doe_mod .get_solutions ()
122+ doe_sol = doe_mod .get_doe_solutions ()
123+ assert isinstance (doe_sol , dict )
124+ assert len (doe_sol .keys ()) == doe_count
125+
126+ assert sorted (doe_def .keys ()) == sorted (doe_cmd .keys ())
127+ assert sorted (doe_cmd .keys ()) == sorted (doe_sol .keys ())
62128
63- for resultfilename in doe_dict :
64- row = doe_dict [resultfilename ]
129+ for resultfilename in doe_def :
130+ row = doe_def [resultfilename ]
65131
66132 assert resultfilename in doe_sol
67133 sol = doe_sol [resultfilename ]
0 commit comments