Skip to content

Commit 7fe92d1

Browse files
committed
Add --hide-large-arrays option
fixes #39
1 parent 7b3724a commit 7fe92d1

File tree

8 files changed

+107
-76
lines changed

8 files changed

+107
-76
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ build/
66
dist/
77
*.egg-info/
88
modelica_fmi/tests/work/
9+
modelica_fmi/tests/resources/

modelica_fmi/src/modelica_fmi/cli.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ def main():
2929
action="store_true",
3030
help="Hide the connectors in the graphical representation",
3131
)
32+
parser.add_argument(
33+
"--hide-large-arrays",
34+
action="store_true",
35+
help="Hide large parameter arrays in Dymola",
36+
)
3237
parser.add_argument("fmu_path", help="Path of the FMU to import")
3338
parser.add_argument("model_path", help="Path of the Modelica file to generate")
3439

@@ -40,4 +45,5 @@ def main():
4045
interface_type="CoSimulation",
4146
basic=args.basic,
4247
hide_connectors=args.hide_connectors,
48+
hide_large_arrays=args.hide_large_arrays,
4349
)

modelica_fmi/src/modelica_fmi/gui/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ def main():
8484
fmu_path=dialog.ui.fmuPathLineEdit.text(),
8585
model_path=dialog.ui.modelPathLineEdit.text(),
8686
hide_connectors=dialog.ui.hideConnectorsCheckBox.isChecked(),
87+
hide_large_arrays=dialog.ui.hideLargeArraysCheckBox.isChecked(),
8788
)
8889
except Exception as ex:
8990
QMessageBox.critical(dialog, "Failed to import FMU", str(ex))

modelica_fmi/src/modelica_fmi/gui/forms/ImportDialog.ui

Lines changed: 48 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
<rect>
77
<x>0</x>
88
<y>0</y>
9-
<width>529</width>
10-
<height>148</height>
9+
<width>533</width>
10+
<height>202</height>
1111
</rect>
1212
</property>
1313
<property name="windowTitle">
@@ -33,33 +33,16 @@
3333
<property name="spacing">
3434
<number>12</number>
3535
</property>
36-
<item row="0" column="0">
37-
<widget class="QLabel" name="label">
38-
<property name="text">
39-
<string>FMU</string>
40-
</property>
41-
</widget>
42-
</item>
43-
<item row="4" column="0" colspan="2">
44-
<widget class="QDialogButtonBox" name="buttonBox">
45-
<property name="orientation">
46-
<enum>Qt::Orientation::Horizontal</enum>
47-
</property>
48-
<property name="standardButtons">
49-
<set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok</set>
50-
</property>
51-
</widget>
52-
</item>
5336
<item row="1" column="0">
5437
<widget class="QLabel" name="mo">
5538
<property name="text">
5639
<string>Modelica File</string>
5740
</property>
5841
</widget>
5942
</item>
60-
<item row="1" column="1">
61-
<widget class="QWidget" name="widget" native="true">
62-
<layout class="QHBoxLayout" name="horizontalLayout">
43+
<item row="0" column="1">
44+
<widget class="QWidget" name="widget_2" native="true">
45+
<layout class="QHBoxLayout" name="horizontalLayout_2">
6346
<property name="leftMargin">
6447
<number>0</number>
6548
</property>
@@ -73,10 +56,10 @@
7356
<number>0</number>
7457
</property>
7558
<item>
76-
<widget class="QLineEdit" name="modelPathLineEdit"/>
59+
<widget class="QLineEdit" name="fmuPathLineEdit"/>
7760
</item>
7861
<item>
79-
<widget class="QToolButton" name="selectModelPathButton">
62+
<widget class="QToolButton" name="selectFMUPathButton">
8063
<property name="text">
8164
<string>...</string>
8265
</property>
@@ -85,9 +68,29 @@
8568
</layout>
8669
</widget>
8770
</item>
88-
<item row="0" column="1">
89-
<widget class="QWidget" name="widget_2" native="true">
90-
<layout class="QHBoxLayout" name="horizontalLayout_2">
71+
<item row="0" column="0">
72+
<widget class="QLabel" name="label">
73+
<property name="text">
74+
<string>FMU</string>
75+
</property>
76+
</widget>
77+
</item>
78+
<item row="4" column="0">
79+
<spacer name="verticalSpacer">
80+
<property name="orientation">
81+
<enum>Qt::Orientation::Vertical</enum>
82+
</property>
83+
<property name="sizeHint" stdset="0">
84+
<size>
85+
<width>20</width>
86+
<height>40</height>
87+
</size>
88+
</property>
89+
</spacer>
90+
</item>
91+
<item row="1" column="1">
92+
<widget class="QWidget" name="widget" native="true">
93+
<layout class="QHBoxLayout" name="horizontalLayout">
9194
<property name="leftMargin">
9295
<number>0</number>
9396
</property>
@@ -101,10 +104,10 @@
101104
<number>0</number>
102105
</property>
103106
<item>
104-
<widget class="QLineEdit" name="fmuPathLineEdit"/>
107+
<widget class="QLineEdit" name="modelPathLineEdit"/>
105108
</item>
106109
<item>
107-
<widget class="QToolButton" name="selectFMUPathButton">
110+
<widget class="QToolButton" name="selectModelPathButton">
108111
<property name="text">
109112
<string>...</string>
110113
</property>
@@ -113,23 +116,27 @@
113116
</layout>
114117
</widget>
115118
</item>
116-
<item row="3" column="0">
117-
<spacer name="verticalSpacer">
119+
<item row="2" column="0" colspan="2">
120+
<widget class="QCheckBox" name="hideConnectorsCheckBox">
121+
<property name="text">
122+
<string>Hide Connectors</string>
123+
</property>
124+
</widget>
125+
</item>
126+
<item row="6" column="0" colspan="2">
127+
<widget class="QDialogButtonBox" name="buttonBox">
118128
<property name="orientation">
119-
<enum>Qt::Orientation::Vertical</enum>
129+
<enum>Qt::Orientation::Horizontal</enum>
120130
</property>
121-
<property name="sizeHint" stdset="0">
122-
<size>
123-
<width>20</width>
124-
<height>40</height>
125-
</size>
131+
<property name="standardButtons">
132+
<set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok</set>
126133
</property>
127-
</spacer>
134+
</widget>
128135
</item>
129-
<item row="2" column="0" colspan="2">
130-
<widget class="QCheckBox" name="hideConnectorsCheckBox">
136+
<item row="3" column="0" colspan="2">
137+
<widget class="QCheckBox" name="hideLargeArraysCheckBox">
131138
<property name="text">
132-
<string>Hide Connectors</string>
139+
<string>Hide Large Arrays</string>
133140
</property>
134141
</widget>
135142
</item>

modelica_fmi/src/modelica_fmi/gui/generated/ImportDialog.py

Lines changed: 40 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -25,49 +25,19 @@ class Ui_ImportDialog(object):
2525
def setupUi(self, ImportDialog):
2626
if not ImportDialog.objectName():
2727
ImportDialog.setObjectName(u"ImportDialog")
28-
ImportDialog.resize(529, 148)
28+
ImportDialog.resize(533, 202)
2929
icon = QIcon()
3030
icon.addFile(u":/fmi.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
3131
ImportDialog.setWindowIcon(icon)
3232
self.gridLayout = QGridLayout(ImportDialog)
3333
self.gridLayout.setSpacing(12)
3434
self.gridLayout.setObjectName(u"gridLayout")
3535
self.gridLayout.setContentsMargins(12, 12, 12, 12)
36-
self.label = QLabel(ImportDialog)
37-
self.label.setObjectName(u"label")
38-
39-
self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
40-
41-
self.buttonBox = QDialogButtonBox(ImportDialog)
42-
self.buttonBox.setObjectName(u"buttonBox")
43-
self.buttonBox.setOrientation(Qt.Orientation.Horizontal)
44-
self.buttonBox.setStandardButtons(QDialogButtonBox.StandardButton.Cancel|QDialogButtonBox.StandardButton.Ok)
45-
46-
self.gridLayout.addWidget(self.buttonBox, 4, 0, 1, 2)
47-
4836
self.mo = QLabel(ImportDialog)
4937
self.mo.setObjectName(u"mo")
5038

5139
self.gridLayout.addWidget(self.mo, 1, 0, 1, 1)
5240

53-
self.widget = QWidget(ImportDialog)
54-
self.widget.setObjectName(u"widget")
55-
self.horizontalLayout = QHBoxLayout(self.widget)
56-
self.horizontalLayout.setObjectName(u"horizontalLayout")
57-
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
58-
self.modelPathLineEdit = QLineEdit(self.widget)
59-
self.modelPathLineEdit.setObjectName(u"modelPathLineEdit")
60-
61-
self.horizontalLayout.addWidget(self.modelPathLineEdit)
62-
63-
self.selectModelPathButton = QToolButton(self.widget)
64-
self.selectModelPathButton.setObjectName(u"selectModelPathButton")
65-
66-
self.horizontalLayout.addWidget(self.selectModelPathButton)
67-
68-
69-
self.gridLayout.addWidget(self.widget, 1, 1, 1, 1)
70-
7141
self.widget_2 = QWidget(ImportDialog)
7242
self.widget_2.setObjectName(u"widget_2")
7343
self.horizontalLayout_2 = QHBoxLayout(self.widget_2)
@@ -86,15 +56,50 @@ def setupUi(self, ImportDialog):
8656

8757
self.gridLayout.addWidget(self.widget_2, 0, 1, 1, 1)
8858

59+
self.label = QLabel(ImportDialog)
60+
self.label.setObjectName(u"label")
61+
62+
self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
63+
8964
self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
9065

91-
self.gridLayout.addItem(self.verticalSpacer, 3, 0, 1, 1)
66+
self.gridLayout.addItem(self.verticalSpacer, 4, 0, 1, 1)
67+
68+
self.widget = QWidget(ImportDialog)
69+
self.widget.setObjectName(u"widget")
70+
self.horizontalLayout = QHBoxLayout(self.widget)
71+
self.horizontalLayout.setObjectName(u"horizontalLayout")
72+
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
73+
self.modelPathLineEdit = QLineEdit(self.widget)
74+
self.modelPathLineEdit.setObjectName(u"modelPathLineEdit")
75+
76+
self.horizontalLayout.addWidget(self.modelPathLineEdit)
77+
78+
self.selectModelPathButton = QToolButton(self.widget)
79+
self.selectModelPathButton.setObjectName(u"selectModelPathButton")
80+
81+
self.horizontalLayout.addWidget(self.selectModelPathButton)
82+
83+
84+
self.gridLayout.addWidget(self.widget, 1, 1, 1, 1)
9285

9386
self.hideConnectorsCheckBox = QCheckBox(ImportDialog)
9487
self.hideConnectorsCheckBox.setObjectName(u"hideConnectorsCheckBox")
9588

9689
self.gridLayout.addWidget(self.hideConnectorsCheckBox, 2, 0, 1, 2)
9790

91+
self.buttonBox = QDialogButtonBox(ImportDialog)
92+
self.buttonBox.setObjectName(u"buttonBox")
93+
self.buttonBox.setOrientation(Qt.Orientation.Horizontal)
94+
self.buttonBox.setStandardButtons(QDialogButtonBox.StandardButton.Cancel|QDialogButtonBox.StandardButton.Ok)
95+
96+
self.gridLayout.addWidget(self.buttonBox, 6, 0, 1, 2)
97+
98+
self.hideLargeArraysCheckBox = QCheckBox(ImportDialog)
99+
self.hideLargeArraysCheckBox.setObjectName(u"hideLargeArraysCheckBox")
100+
101+
self.gridLayout.addWidget(self.hideLargeArraysCheckBox, 3, 0, 1, 2)
102+
98103

99104
self.retranslateUi(ImportDialog)
100105
self.buttonBox.accepted.connect(ImportDialog.accept)
@@ -105,10 +110,11 @@ def setupUi(self, ImportDialog):
105110

106111
def retranslateUi(self, ImportDialog):
107112
ImportDialog.setWindowTitle(QCoreApplication.translate("ImportDialog", u"Import an FMU to Modelica", None))
108-
self.label.setText(QCoreApplication.translate("ImportDialog", u"FMU", None))
109113
self.mo.setText(QCoreApplication.translate("ImportDialog", u"Modelica File", None))
110-
self.selectModelPathButton.setText(QCoreApplication.translate("ImportDialog", u"...", None))
111114
self.selectFMUPathButton.setText(QCoreApplication.translate("ImportDialog", u"...", None))
115+
self.label.setText(QCoreApplication.translate("ImportDialog", u"FMU", None))
116+
self.selectModelPathButton.setText(QCoreApplication.translate("ImportDialog", u"...", None))
112117
self.hideConnectorsCheckBox.setText(QCoreApplication.translate("ImportDialog", u"Hide Connectors", None))
118+
self.hideLargeArraysCheckBox.setText(QCoreApplication.translate("ImportDialog", u"Hide Large Arrays", None))
113119
# retranslateUi
114120

modelica_fmi/src/modelica_fmi/import_fmu_to_modelica.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ def import_fmu_to_modelica(
2828
variables: Iterable[str] | None = None,
2929
basic: bool = False,
3030
hide_connectors=False,
31+
hide_large_arrays=False,
3132
):
3233
from os import makedirs
3334
from pathlib import Path
@@ -177,6 +178,13 @@ def import_fmu_to_modelica(
177178
for variable in model_description.modelVariables
178179
)
179180

181+
if hide_large_arrays:
182+
for variable in parameters:
183+
if numel(variables, variable) > 50:
184+
annotations[variable.name] = (
185+
" annotation(Evaluate=true, __Dymola_HideArray=true)"
186+
)
187+
180188
template.globals.update(
181189
{
182190
"start_value": lambda *args, **kwargs: start_value(

modelica_fmi/src/modelica_fmi/templates/FMU.mo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ block @=modelName=@
8585
parameter Modelica.Units.SI.Time communicationStepSize = @=communicationStepSize=@ annotation(Dialog(tab="FMI", group="Parameters"));
8686
@@ for variable in parameters @@
8787

88-
parameter @=fmi_type(variable, prefix=True, declared=True)=@ @=name(variable)=@@@ if variable.dimensions @@@=subscripts(variable)=@@@ endif @@@=modifiers(variable)=@ = @=start_value(variable)=@@@ if variable.description @@ "@=variable.description=@"@@ endif @@;
88+
parameter @=fmi_type(variable, prefix=True, declared=True)=@ @=name(variable)=@@@ if variable.dimensions @@@=subscripts(variable)=@@@ endif @@@=modifiers(variable)=@ = @=start_value(variable)=@@@ if variable.description @@ "@=variable.description=@"@@ endif @@@=annotations[variable.name]=@;
8989
@@ endfor @@
9090
@@ block inputs @@
9191
@@ endblock @@

modelica_fmi/tests/conftest.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import shutil
12
from os import makedirs
23
import pytest
34
from pathlib import Path
@@ -19,6 +20,7 @@ def package_dir():
1920
@pytest.fixture(scope="session")
2021
def work_dir():
2122
path = Path(__file__).parent / "work"
23+
shutil.rmtree(path)
2224
makedirs(path)
2325
yield path
2426

0 commit comments

Comments
 (0)