Skip to content

Commit

Permalink
Merge branch 'master' into fmiregression
Browse files Browse the repository at this point in the history
  • Loading branch information
arun3688 authored Nov 3, 2023
2 parents 13f3487 + 62771af commit 091c7ad
Show file tree
Hide file tree
Showing 9 changed files with 81 additions and 90 deletions.
3 changes: 1 addition & 2 deletions .github/workflows/FMITest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ jobs:
verbose: true
emoji: true
job-summary: true
custom-arguments: 'test_FMIRegression.py -v'
custom-arguments: 'tests/test_FMIRegression.py -v'
click-to-expand: true
report-title: 'FMI Test Report'

23 changes: 17 additions & 6 deletions .github/workflows/Test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ jobs:
version: ${{ matrix.omc-version }}
packages: |
omc
libraries: |
'Modelica 4.0.0'
- run: "omc --version"

Expand All @@ -37,10 +39,19 @@ jobs:
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install future pyparsing numpy psutil pyzmq
pip install future pyparsing numpy psutil pyzmq pytest pytest-md pytest-emoji
- name: Test OMPython
run: |
python -m unittest tests/test_ModelicaSystem.py
python -m unittest tests/test_OMParser.py
python -m unittest tests/test_ZMQ.py
- name: Set timezone
uses: szenius/set-timezone@v1.2
with:
timezoneLinux: 'Europe/Berlin'

- name: Run pytest
uses: pavelzw/pytest-action@v2
with:
verbose: true
emoji: true
job-summary: true
custom-arguments: '-v'
click-to-expand: true
report-title: 'Test Report'
10 changes: 0 additions & 10 deletions .jenkins/python2/Dockerfile

This file was deleted.

10 changes: 0 additions & 10 deletions .jenkins/python3/Dockerfile

This file was deleted.

49 changes: 0 additions & 49 deletions Jenkinsfile

This file was deleted.

38 changes: 29 additions & 9 deletions OMPython/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -798,18 +798,14 @@ def __init__(self, fileName=None, modelName=None, lmodel=[], useCorba=False, com
Note: If the model file is not in the current working directory, then the path where file is located must be included together with file name. Besides, if the Modelica model contains several different models within the same package, then in order to build the specific model, in second argument, user must put the package name with dot(.) followed by specific model name.
ex: myModel = ModelicaSystem("ModelicaModel.mo", "modelName")
"""

if fileName is None and modelName is None and not lmodel: # all None
if useCorba:
self.getconn = OMCSession()
else:
self.getconn = OMCSessionZMQ()
return

if fileName is None:
return "File does not exist"
self.tree = None

self.quantitiesList=[]
self.paramlist={}
self.inputlist={}
Expand All @@ -830,6 +826,10 @@ def __init__(self, fileName=None, modelName=None, lmodel=[], useCorba=False, com
else:
self.getconn = OMCSessionZMQ()

## needed for properly deleting the OMCSessionZMQ
self._omc_log_file = self.getconn._omc_log_file
self._omc_process = self.getconn._omc_process

## set commandLineOptions if provided by users
if commandLineOptions is not None:
exp="".join(["setCommandLineOptions(","\"",commandLineOptions,"\"",")"])
Expand All @@ -846,7 +846,7 @@ def __init__(self, fileName=None, modelName=None, lmodel=[], useCorba=False, com
self.resultfile="" # for storing result file
self.variableFilter = variableFilter

if not os.path.exists(self.fileName): # if file does not eixt
if fileName is not None and not os.path.exists(self.fileName): # if file does not eixt
print("File Error:" + os.path.abspath(self.fileName) + " does not exist!!!")
return

Expand All @@ -856,19 +856,37 @@ def __init__(self, fileName=None, modelName=None, lmodel=[], useCorba=False, com
self.getconn.sendExpression("setCommandLineOptions(\"--linearizationDumpLanguage=python\")")
self.getconn.sendExpression("setCommandLineOptions(\"--generateSymbolicLinearization\")")

self.loadingModel()
self.setTempDirectory()

if fileName is not None:
self.loadFile()

## allow directly loading models from MSL without fileName
if fileName is None and modelName is not None:
self.loadLibrary()

self.buildModel()

def __del__(self):
OMCSessionBase.__del__(self)

# for loading file/package, loading model and building model
def loadingModel(self):
def setCommandLineOptions(self):
## set commandLineOptions if provided by users
if commandLineOptions is not None:
exp="".join(["setCommandLineOptions(","\"",commandLineOptions,"\"",")"])
cmdexp = self.getconn.sendExpression(exp)
if not cmdexp:
return print(self.getconn.sendExpression("getErrorString()"))

def loadFile(self):
# load file
loadFileExp="".join(["loadFile(","\"",self.fileName,"\"",")"]).replace("\\","/")
loadMsg = self.getconn.sendExpression(loadFileExp)
if not loadMsg:
return print(self.getconn.sendExpression("getErrorString()"))

# for loading file/package, loading model and building model
def loadLibrary(self):
# load Modelica standard libraries or Modelica files if needed
for element in self.lmodel:
if element is not None:
Expand All @@ -892,6 +910,7 @@ def loadingModel(self):
if loadmodelError:
print(loadmodelError)

def setTempDirectory(self):
# create a unique temp directory for each session and build the model in that directory
self.tempdir = tempfile.mkdtemp()
if not os.path.exists(self.tempdir):
Expand All @@ -900,7 +919,8 @@ def loadingModel(self):
exp="".join(["cd(","\"",self.tempdir,"\"",")"]).replace("\\","/")
self.getconn.sendExpression(exp)

self.buildModel()
def getWorkDirectory(self):
return self.tempdir

def buildModel(self, variableFilter=None):
if variableFilter is not None:
Expand Down
30 changes: 30 additions & 0 deletions tests/test_FMIExport.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import OMPython
import unittest
import tempfile, shutil, os

class testFMIExport(unittest.TestCase):
def __init__(self, *args, **kwargs):
super(testFMIExport, self).__init__(*args, **kwargs)
self.tmp = ""

def __del__(self):
shutil.rmtree(self.tmp, ignore_errors=True)

def testCauerLowPassAnalog(self):
print("testing Cauer")
mod = OMPython.ModelicaSystem(modelName="Modelica.Electrical.Analog.Examples.CauerLowPassAnalog", lmodel="Modelica")
self.tmp = mod.getWorkDirectory()

fmu = mod.convertMo2Fmu(fileNamePrefix="CauerLowPassAnalog")
self.assertEqual(True, os.path.exists(fmu))

def testDrumBoiler(self):
print("testing DrumBoiler")
mod = OMPython.ModelicaSystem(modelName="Modelica.Fluid.Examples.DrumBoiler.DrumBoiler", lmodel="Modelica")
self.tmp = mod.getWorkDirectory()

fmu = mod.convertMo2Fmu(fileNamePrefix="DrumBoiler")
self.assertEqual(True, os.path.exists(fmu))

if __name__ == '__main__':
unittest.main()
6 changes: 2 additions & 4 deletions tests/test_ModelicaSystem.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,10 @@ def __del__(self):

def testModelicaSystemLoop(self):
def worker():
origDir = os.getcwd()
os.chdir(self.tmp)
m = OMPython.ModelicaSystem("M.mo", "M")
filePath = os.path.join(self.tmp,"M.mo").replace("\\", "/")
m = OMPython.ModelicaSystem(filePath, "M")
m.simulate()
m.convertMo2Fmu(fmuType="me")
os.chdir(origDir)
for _ in range(10):
worker()

Expand Down
2 changes: 2 additions & 0 deletions tests/test_docker.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import OMPython
import unittest
import tempfile, shutil, os
import pytest

class DockerTester(unittest.TestCase):
@pytest.mark.skip(reason="This test would fail")
def testDocker(self):
om = OMPython.OMCSessionZMQ(docker="openmodelica/openmodelica:v1.16.1-minimal")
assert(om.sendExpression("getVersion()") == "OpenModelica 1.16.1")
Expand Down

0 comments on commit 091c7ad

Please sign in to comment.