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,46 @@ def param_doe() -> dict[str, list]:
3749 return param
3850
3951
40- def test_ModelicaSystemDoE (tmp_path , model_doe , param_doe ):
52+ def test_ModelicaSystemDoE_local (tmp_path , model_doe , param_doe ):
53+ tmpdir = tmp_path / 'DoE'
54+ tmpdir .mkdir (exist_ok = True )
55+
56+ doe_mod = OMPython .ModelicaSystemDoE (
57+ fileName = model_doe .as_posix (),
58+ modelName = "M" ,
59+ parameters = param_doe ,
60+ resultpath = tmpdir ,
61+ simargs = {"override" : {'stopTime' : 1.0 }},
62+ )
63+
64+ _run_ModelicaSystemDoe (doe_mod = doe_mod )
65+
66+
67+ @skip_on_windows
68+ @skip_python_older_312
69+ def test_ModelicaSystemDoE_docker (tmp_path , model_doe , param_doe ):
70+ omcp = OMPython .OMCProcessDocker (docker = "openmodelica/openmodelica:v1.25.0-minimal" )
71+ omc = OMPython .OMCSessionZMQ (omc_process = omcp )
72+ assert omc .sendExpression ("getVersion()" ) == "OpenModelica 1.25.0"
73+
74+ modelpath = omc .omcpath_tempdir () / 'M.mo'
75+ modelpath .write_text (model_doe .read_text ())
76+
77+ doe_mod = OMPython .ModelicaSystemDoE (
78+ fileName = modelpath .as_posix (),
79+ modelName = "M" ,
80+ parameters = param_doe ,
81+ omc_process = omcp ,
82+ resultpath = modelpath .parent ,
83+ simargs = {"override" : {'stopTime' : 1.0 }},
84+ )
85+
86+ _run_ModelicaSystemDoe (doe_mod = doe_mod )
87+
88+
89+ @pytest .mark .skip (reason = "Not able to run WSL on github" )
90+ @skip_python_older_312
91+ def test_ModelicaSystemDoE_WSL (tmp_path , model_doe , param_doe ):
4192 tmpdir = tmp_path / 'DoE'
4293 tmpdir .mkdir (exist_ok = True )
4394
@@ -48,20 +99,34 @@ def test_ModelicaSystemDoE(tmp_path, model_doe, param_doe):
4899 resultpath = tmpdir ,
49100 simargs = {"override" : {'stopTime' : 1.0 }},
50101 )
102+
103+ _run_ModelicaSystemDoe (doe_mod = doe_mod )
104+
105+
106+ def _run_ModelicaSystemDoe (doe_mod ):
51107 doe_count = doe_mod .prepare ()
52108 assert doe_count == 16
53109
54- doe_dict = doe_mod .get_doe ()
55- assert isinstance (doe_dict , dict )
56- assert len (doe_dict .keys ()) == 16
110+ doe_def = doe_mod .get_doe_definition ()
111+ assert isinstance (doe_def , dict )
112+ assert len (doe_def .keys ()) == doe_count
113+
114+ doe_cmd = doe_mod .get_doe_command ()
115+ assert isinstance (doe_cmd , dict )
116+ assert len (doe_cmd .keys ()) == doe_count
57117
58118 doe_status = doe_mod .simulate ()
59119 assert doe_status is True
60120
61- doe_sol = doe_mod .get_solutions ()
121+ doe_sol = doe_mod .get_doe_solutions ()
122+ assert isinstance (doe_sol , dict )
123+ assert len (doe_sol .keys ()) == doe_count
124+
125+ assert sorted (doe_def .keys ()) == sorted (doe_cmd .keys ())
126+ assert sorted (doe_cmd .keys ()) == sorted (doe_sol .keys ())
62127
63- for resultfilename in doe_dict :
64- row = doe_dict [resultfilename ]
128+ for resultfilename in doe_def :
129+ row = doe_def [resultfilename ]
65130
66131 assert resultfilename in doe_sol
67132 sol = doe_sol [resultfilename ]
0 commit comments