Skip to content

Commit 4524b3e

Browse files
authored
Fix default_experiment (#158)
1 parent ae50251 commit 4524b3e

File tree

4 files changed

+34
-12
lines changed

4 files changed

+34
-12
lines changed

pythonfmu/default_experiment.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
class DefaultExperiment:
22

3-
def __init__(self, start_time: float = None, stop_time: float = None, tolerance: float = None):
3+
def __init__(self, start_time: float = None, stop_time: float = None, step_size: float = None, tolerance: float = None):
44
self.start_time = start_time
55
self.stop_time = stop_time
6+
self.step_size = step_size
67
self.tolerance = tolerance

pythonfmu/fmi2slave.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,18 @@ def to_xml(self, model_options: Dict[str, str] = dict()) -> Element:
110110
)
111111
)
112112

113+
if self.default_experiment is not None:
114+
attrib = dict()
115+
if self.default_experiment.start_time is not None:
116+
attrib["startTime"] = str(self.default_experiment.start_time)
117+
if self.default_experiment.stop_time is not None:
118+
attrib["stopTime"] = str(self.default_experiment.stop_time)
119+
if self.default_experiment.step_size is not None:
120+
attrib["stepSize"] = str(self.default_experiment.step_size)
121+
if self.default_experiment.tolerance is not None:
122+
attrib["tolerance"] = str(self.default_experiment.tolerance)
123+
SubElement(root, "DefaultExperiment", attrib)
124+
113125
variables = SubElement(root, "ModelVariables")
114126
for v in self.vars.values():
115127
if ScalarVariable.requires_start(v):
@@ -127,16 +139,6 @@ def to_xml(self, model_options: Dict[str, str] = dict()) -> Element:
127139
if v.causality == Fmi2Causality.output:
128140
SubElement(outputs_node, "Unknown", attrib=dict(index=str(i + 1)))
129141

130-
if self.default_experiment is not None:
131-
attrib = dict()
132-
if self.default_experiment.start_time is not None:
133-
attrib["startTime"] = self.default_experiment.start_time
134-
if self.default_experiment.stop_time is not None:
135-
attrib["stopTime"] = self.default_experiment.stop_time
136-
if self.default_experiment.tolerance is not None:
137-
attrib["tolerance"] = self.default_experiment.tolerance
138-
SubElement(root, "DefaultExperiment", attrib)
139-
140142
return root
141143

142144
def __apply_start_value(self, var: ScalarVariable):

pythonfmu/tests/slaves/pythonslave_read_file.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
from pythonfmu.fmi2slave import Fmi2Slave, Fmi2Causality, Fmi2Variability, String
1+
from pythonfmu.fmi2slave import Fmi2Slave, Fmi2Causality, Fmi2Variability, String, DefaultExperiment
22

33

44
class PythonSlaveReadFile(Fmi2Slave):
55

6+
default_experiment = DefaultExperiment(start_time=0)
7+
68
def __init__(self, **kwargs):
79
super().__init__(**kwargs)
810

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import pytest
2+
from pathlib import Path
3+
4+
from pythonfmu.csvbuilder import FmuBuilder
5+
6+
7+
def test_default_experiment(tmp_path):
8+
fmpy = pytest.importorskip(
9+
"fmpy", reason="fmpy is not available for testing the produced FMU"
10+
)
11+
12+
script_file = Path(__file__).parent / "slaves/pythonslave_read_file.py"
13+
project_file = Path(__file__).parent / "data/hello.txt"
14+
fmu = FmuBuilder.build_FMU(script_file, project_files=[project_file], dest=tmp_path, needsExecutionTool="false")
15+
assert fmu.exists()
16+
17+
model_description = fmpy.read_model_description(fmu)

0 commit comments

Comments
 (0)