fmu-manipulation-toolbox 0.0.dev3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fmu_manipulation_toolbox-0.0.dev3/.git_archival.txt +3 -0
- fmu_manipulation_toolbox-0.0.dev3/.gitattributes +1 -0
- fmu_manipulation_toolbox-0.0.dev3/.gitignore +31 -0
- fmu_manipulation_toolbox-0.0.dev3/CHANGELOG.md +347 -0
- fmu_manipulation_toolbox-0.0.dev3/CLAUDE.md +3 -0
- fmu_manipulation_toolbox-0.0.dev3/CONTRIBUTING.md +104 -0
- fmu_manipulation_toolbox-0.0.dev3/LICENSE.txt +22 -0
- fmu_manipulation_toolbox-0.0.dev3/MANIFEST.in +15 -0
- fmu_manipulation_toolbox-0.0.dev3/PKG-INFO +369 -0
- fmu_manipulation_toolbox-0.0.dev3/README.md +318 -0
- fmu_manipulation_toolbox-0.0.dev3/container/CMakeLists.txt +260 -0
- fmu_manipulation_toolbox-0.0.dev3/container/build.bat +16 -0
- fmu_manipulation_toolbox-0.0.dev3/container/cmake/gen_version.cmake +19 -0
- fmu_manipulation_toolbox-0.0.dev3/container/config.c +66 -0
- fmu_manipulation_toolbox-0.0.dev3/container/config.h +47 -0
- fmu_manipulation_toolbox-0.0.dev3/container/container.c +1991 -0
- fmu_manipulation_toolbox-0.0.dev3/container/container.h +212 -0
- fmu_manipulation_toolbox-0.0.dev3/container/convert.c +460 -0
- fmu_manipulation_toolbox-0.0.dev3/container/convert.h +53 -0
- fmu_manipulation_toolbox-0.0.dev3/container/datalog.c +257 -0
- fmu_manipulation_toolbox-0.0.dev3/container/datalog.h +53 -0
- fmu_manipulation_toolbox-0.0.dev3/container/fmi2.c +587 -0
- fmu_manipulation_toolbox-0.0.dev3/container/fmi3.c +1037 -0
- fmu_manipulation_toolbox-0.0.dev3/container/fmu.c +1521 -0
- fmu_manipulation_toolbox-0.0.dev3/container/fmu.h +530 -0
- fmu_manipulation_toolbox-0.0.dev3/container/hash.c +163 -0
- fmu_manipulation_toolbox-0.0.dev3/container/hash.h +54 -0
- fmu_manipulation_toolbox-0.0.dev3/container/library.c +206 -0
- fmu_manipulation_toolbox-0.0.dev3/container/library.h +34 -0
- fmu_manipulation_toolbox-0.0.dev3/container/logger.c +117 -0
- fmu_manipulation_toolbox-0.0.dev3/container/logger.h +44 -0
- fmu_manipulation_toolbox-0.0.dev3/container/profile.c +69 -0
- fmu_manipulation_toolbox-0.0.dev3/container/profile.h +37 -0
- fmu_manipulation_toolbox-0.0.dev3/container/solver.c +511 -0
- fmu_manipulation_toolbox-0.0.dev3/container/solver.h +96 -0
- fmu_manipulation_toolbox-0.0.dev3/container/test_fmi.c +52 -0
- fmu_manipulation_toolbox-0.0.dev3/container/thread.c +96 -0
- fmu_manipulation_toolbox-0.0.dev3/container/thread.h +61 -0
- fmu_manipulation_toolbox-0.0.dev3/container/version.h.in +6 -0
- fmu_manipulation_toolbox-0.0.dev3/fmi/fmi2FunctionTypes.h +271 -0
- fmu_manipulation_toolbox-0.0.dev3/fmi/fmi2Functions.h +327 -0
- fmu_manipulation_toolbox-0.0.dev3/fmi/fmi2TypesPlatform.h +108 -0
- fmu_manipulation_toolbox-0.0.dev3/fmi/fmi3FunctionTypes.h +638 -0
- fmu_manipulation_toolbox-0.0.dev3/fmi/fmi3Functions.h +343 -0
- fmu_manipulation_toolbox-0.0.dev3/fmi/fmi3PlatformTypes.h +94 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/__init__.py +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/__main__.py +25 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/_version.py +24 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/assembly.py +1033 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/assistant/__init__.py +37 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/assistant/auth.py +115 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/assistant/bridge.py +112 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/assistant/fmutools.py +274 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/assistant/headless.py +379 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/assistant/knowledge.py +285 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/assistant/models.py +211 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/assistant/paths.py +142 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/assistant/server.py +791 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/checker.py +378 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/cli/__init__.py +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/cli/datalog2pcap.py +173 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/cli/fmucontainer.py +115 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/cli/fmusplit.py +50 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/cli/fmutool.py +153 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/cli/fmutool_mcp.py +170 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/cli/utils.py +70 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/container.py +2367 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/__init__.py +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/__main__.py +195 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmucontainer/__init__.py +2 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmucontainer/__main__.py +339 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmucontainer/assembly_io.py +631 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmucontainer/details/__init__.py +19 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmucontainer/details/container_detail.py +112 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmucontainer/details/fmu_detail.py +384 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmucontainer/details/stack.py +88 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmucontainer/details/wire_detail.py +901 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmucontainer/graph/__init__.py +41 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmucontainer/graph/constants.py +42 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmucontainer/graph/node.py +643 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmucontainer/graph/node_info_dialog.py +93 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmucontainer/graph/scene.py +225 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmucontainer/graph/view.py +295 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmucontainer/graph/widget.py +49 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmucontainer/graph/wire.py +499 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmucontainer/mcp_bridge.py +693 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmucontainer/tree/__init__.py +19 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmucontainer/tree/model.py +78 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmucontainer/tree/panel.py +207 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmucontainer/tree/sync.py +44 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmucontainer/tree/widget.py +515 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmueditor/__init__.py +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmueditor/__main__.py +625 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmutool/__init__.py +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/fmutool/__main__.py +313 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/helper.py +581 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/gui/style.py +311 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/help.py +109 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/ls.py +35 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/model_description.py +488 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/operations.py +1060 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/remoting.py +168 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/checkbox-checked-disabled.png +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/checkbox-checked-hover.png +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/checkbox-checked.png +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/checkbox-unchecked-disabled.png +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/checkbox-unchecked-hover.png +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/checkbox-unchecked.png +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/container.png +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/drop_fmu.png +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/fmi-2.0/fmi2Annotation.xsd +58 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/fmi-2.0/fmi2AttributeGroups.xsd +78 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/fmi-2.0/fmi2ModelDescription.xsd +345 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/fmi-2.0/fmi2ScalarVariable.xsd +218 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/fmi-2.0/fmi2Type.xsd +89 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/fmi-2.0/fmi2Unit.xsd +116 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/fmi-2.0/fmi2VariableDependency.xsd +92 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3Annotation.xsd +51 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3AttributeGroups.xsd +119 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3BuildDescription.xsd +117 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3InterfaceType.xsd +80 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3LayeredStandardManifest.xsd +93 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3ModelDescription.xsd +131 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3Terminal.xsd +87 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3TerminalsAndIcons.xsd +84 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3Type.xsd +207 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3Unit.xsd +69 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3Variable.xsd +413 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3VariableDependency.xsd +64 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/fmu.png +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/fmu_manipulation_toolbox.png +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/fmucontainer.png +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/fmueditor.png +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/fmutool.png +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/help.png +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/icon-round.png +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/icon.png +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/icon_fmu.png +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/license.txt +34 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/mask.png +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/radio-checked-disabled.png +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/radio-checked-hover.png +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/radio-checked.png +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/radio-unchecked-disabled.png +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/radio-unchecked-hover.png +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/resources/radio-unchecked.png +0 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/split.py +708 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/terminals.py +156 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/textfiles.py +41 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox/version.py +15 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox.egg-info/PKG-INFO +369 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox.egg-info/SOURCES.txt +218 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox.egg-info/dependency_links.txt +1 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox.egg-info/entry_points.txt +12 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox.egg-info/requires.txt +27 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox.egg-info/scm_file_list.json +972 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox.egg-info/scm_version.json +8 -0
- fmu_manipulation_toolbox-0.0.dev3/fmu_manipulation_toolbox.egg-info/top_level.txt +1 -0
- fmu_manipulation_toolbox-0.0.dev3/mkdocs.yml +179 -0
- fmu_manipulation_toolbox-0.0.dev3/package.py +17 -0
- fmu_manipulation_toolbox-0.0.dev3/pyproject.toml +125 -0
- fmu_manipulation_toolbox-0.0.dev3/remoting/CMakeLists.txt +134 -0
- fmu_manipulation_toolbox-0.0.dev3/remoting/build.bat +26 -0
- fmu_manipulation_toolbox-0.0.dev3/remoting/client.c +863 -0
- fmu_manipulation_toolbox-0.0.dev3/remoting/client.h +23 -0
- fmu_manipulation_toolbox-0.0.dev3/remoting/cmake/gen_version.cmake +19 -0
- fmu_manipulation_toolbox-0.0.dev3/remoting/communication.c +475 -0
- fmu_manipulation_toolbox-0.0.dev3/remoting/communication.h +134 -0
- fmu_manipulation_toolbox-0.0.dev3/remoting/config.h.in +25 -0
- fmu_manipulation_toolbox-0.0.dev3/remoting/process.c +108 -0
- fmu_manipulation_toolbox-0.0.dev3/remoting/process.h +30 -0
- fmu_manipulation_toolbox-0.0.dev3/remoting/server.c +552 -0
- fmu_manipulation_toolbox-0.0.dev3/remoting/server.h +88 -0
- fmu_manipulation_toolbox-0.0.dev3/remoting/version.h.in +6 -0
- fmu_manipulation_toolbox-0.0.dev3/requirements.txt +11 -0
- fmu_manipulation_toolbox-0.0.dev3/setup.cfg +4 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/.coveragerc +5 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/_helpers/__init__.py +5 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/_helpers/assertions.py +135 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/_helpers/simulation.py +74 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/benchmarks/bench_manipulation.py +131 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/conftest.py +176 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/gui/test_assistant_qt_bridge.py +306 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/gui/test_gui.py +99 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/integration/test_array.py +71 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/integration/test_assistant_stdio_server.py +153 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/integration/test_cli.py +57 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/integration/test_cli_errors.py +207 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/integration/test_container.py +188 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/integration/test_container_xml.py +106 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/integration/test_datalog.py +49 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/integration/test_lsbus.py +34 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/integration/test_me.py +42 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/integration/test_operations_characterization.py +238 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/integration/test_remoting.py +30 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/integration/test_split.py +52 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/integration/test_ssp.py +55 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/pytest.ini +31 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/unit/test_assembly_errors.py +58 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/unit/test_assembly_parsing.py +150 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/unit/test_assistant_auth.py +140 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/unit/test_assistant_fmutools.py +208 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/unit/test_assistant_headless.py +310 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/unit/test_assistant_server.py +1150 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/unit/test_checker.py +17 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/unit/test_checker_semantic.py +164 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/unit/test_fmu_descriptor_cache.py +112 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/unit/test_fmu_lifecycle.py +141 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/unit/test_model_description.py +358 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/unit/test_model_exchange_sizes.py +127 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/unit/test_operations.py +50 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/unit/test_operations_conformity.py +165 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/unit/test_operations_dependencies.py +130 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/unit/test_operations_errors.py +126 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/unit/test_split_parsing.py +108 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/unit/test_terminals.py +131 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/unit/test_textfiles.py +76 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/unit/test_xml_assertions.py +66 -0
- fmu_manipulation_toolbox-0.0.dev3/tests/unit/test_xml_roundtrip.py +148 -0
- fmu_manipulation_toolbox-0.0.dev3/tools/dist_inventory.py +166 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.git_archival.txt export-subst
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__
|
|
3
|
+
*.pyc
|
|
4
|
+
.idea
|
|
5
|
+
.vs
|
|
6
|
+
.vscode
|
|
7
|
+
# OS
|
|
8
|
+
.DS_Store
|
|
9
|
+
# Compiled binaries (not committed except the pre-built resources)
|
|
10
|
+
*.dll
|
|
11
|
+
*.exe
|
|
12
|
+
# Build outputs
|
|
13
|
+
dist
|
|
14
|
+
site
|
|
15
|
+
remoting/out
|
|
16
|
+
remoting/build
|
|
17
|
+
container/build
|
|
18
|
+
container/build-win64
|
|
19
|
+
container/out
|
|
20
|
+
container/.vscode
|
|
21
|
+
# Locally built darwin binaries (shipped via CI artifacts, not committed)
|
|
22
|
+
fmu_manipulation_toolbox/resources/darwin64/client_sm.dylib
|
|
23
|
+
fmu_manipulation_toolbox/resources/darwin64/container.dylib
|
|
24
|
+
fmu_manipulation_toolbox/resources/darwin64/server_sm
|
|
25
|
+
tests/tmp/
|
|
26
|
+
tests/.coverage
|
|
27
|
+
tests/.pytest_cache/
|
|
28
|
+
tests/coverage.svg
|
|
29
|
+
|
|
30
|
+
# Version file generated by setuptools-scm
|
|
31
|
+
fmu_manipulation_toolbox/_version.py
|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
# FMU Manipulation Toolbox changelog
|
|
2
|
+
This package was formerly known as `fmutool`.
|
|
3
|
+
|
|
4
|
+
# Upstream
|
|
5
|
+
* FIXED: text files are written and read in UTF-8 on every platform: assembly descriptions (CSV, JSON),
|
|
6
|
+
the port names CSV (`-dump-csv`, `-rename-from-csv`), `container.txt` and `datalog.txt`, and the log
|
|
7
|
+
saved by `fmutool-gui`. They used the platform encoding, cp1252 on most Windows installations, so
|
|
8
|
+
a non-ASCII name written on one platform was misread on another. A UTF-8 byte order mark (added
|
|
9
|
+
by Excel) is accepted, and a file that is not UTF-8 is still read with the platform encoding,
|
|
10
|
+
with a warning.
|
|
11
|
+
* FIXED: reading an SSP archive: the elements of `SystemStructure.ssd` are recognized by their namespace
|
|
12
|
+
(SSP 1.0) instead of the literal `ssd:` prefix. A valid SSD using another prefix or a default
|
|
13
|
+
namespace failed with `AttributeError`. An invalid SSD (other namespace, not well-formed,
|
|
14
|
+
reference to an unknown element) now raises `AssemblyError` with a clear message.
|
|
15
|
+
* REMOVED: `ModelStructureCounter`. The Model Exchange sizes are computed from the descriptor tree by
|
|
16
|
+
`ModelDescription.model_exchange_sizes()`. `OperationSummary.structure` is replaced by
|
|
17
|
+
`OperationSummary.number_of_continuous_states` and `number_of_event_indicators`, which
|
|
18
|
+
`EmbeddedFMU` already provided.
|
|
19
|
+
* CHANGED (**breaking**): `fmutool`, `fmucontainer` and `fmusplit` exit with positive codes, shared by
|
|
20
|
+
the three tools: 2 invalid command line, 3 input missing or unreadable, 4 invalid input,
|
|
21
|
+
5 operation or build refused or failed, 6 output cannot be written, 7 `-check` found the FMU
|
|
22
|
+
non-compliant (see the CLI guide). They used negative codes (`-1` to `-6`), with a different
|
|
23
|
+
meaning for each tool. Scripts that test the exact value must be updated.
|
|
24
|
+
* ADDED: `fmutool -check` exits with status 7 when a checker reports an error, so that it can be used
|
|
25
|
+
in CI. The XSD checker reports every violation instead of the first one only.
|
|
26
|
+
* ADDED: `OperationSemanticCheck`, a built-in checker for the rules of FMI 2.0 and 3.0 that the XSD
|
|
27
|
+
cannot express: unique names and value references, allowed `causality`/`variability`/`initial`
|
|
28
|
+
combinations, `start` values, references between variables and in `<ModelStructure>`.
|
|
29
|
+
* CHANGED: an `FMU` parses its `modelDescription.xml` once for all the operations applied to it, and
|
|
30
|
+
operations declared `read_only` (summary, CSV dump, checkers) no longer rewrite it: the
|
|
31
|
+
descriptor stays exactly as in the archive.
|
|
32
|
+
* FIXED: `get_checkers()` added the checkers registered through entry points again at each call.
|
|
33
|
+
* FIXED: `fmusplit` failed with `KeyError` on an FMI-3 variable without `causality` attribute.
|
|
34
|
+
* FIXED: `fmucontainer`: the `modelDescription.xml` of the container is now built with ElementTree.
|
|
35
|
+
Names and descriptions coming from the embedded FMUs are escaped (a `&`, `<` or `"` made
|
|
36
|
+
the descriptor invalid), and the file is written in UTF-8 as required by FMI 2.0 and 3.0
|
|
37
|
+
(it declared ISO-8859-1 but was written with the encoding of the locale).
|
|
38
|
+
* FIXED: `fmucontainer`: in FMI-2 containers with profiling, `ts_multiplier` or a Model Exchange
|
|
39
|
+
solver, `<ModelStructure>` listed local variables instead of the outputs.
|
|
40
|
+
* CHANGED: `FMU` can be used as a context manager (`with FMU(...) as fmu:`), and has a `close()`
|
|
41
|
+
method. Its temporary directory is now also removed at interpreter exit, and when opening
|
|
42
|
+
fails.
|
|
43
|
+
* FIXED: opening a file that is not a ZIP archive, or a directory, raised a raw exception instead
|
|
44
|
+
of `FMUError`. `fmutool` now reports these errors, and an unreadable `modelDescription.xml`,
|
|
45
|
+
with a clear message instead of a traceback.
|
|
46
|
+
* CHANGED: `fmutool` operations: `modelDescription.xml` is now modified in place with ElementTree
|
|
47
|
+
instead of being re-generated, so that everything an operation does not touch is kept as
|
|
48
|
+
is. Fixes text and attribute values written unescaped or unescaped twice (which produced
|
|
49
|
+
invalid XML, and made the second of two chained operations fail), and the loss of
|
|
50
|
+
`<Annotations>` of FMI-2 variables, FMI-3 `<Alias>`, all but the first `<Start>` of FMI-3
|
|
51
|
+
`String` arrays, empty FMI-3 `<Start value="">`, FMI-3 `<Dimension start="1">` (the
|
|
52
|
+
array became a scalar), comments and the XML declaration (required by FMI 2.0 and 3.0).
|
|
53
|
+
The descriptor is always written in UTF-8.
|
|
54
|
+
* FIXED: removing ports from an FMI-2 FMU did not renumber the `derivative` attribute, which
|
|
55
|
+
then pointed to the wrong variable.
|
|
56
|
+
* CHANGED: an operation is now refused with `OperationError`, leaving the FMU unchanged, if its
|
|
57
|
+
result would break the FMI standard: removing every variable, removing a variable still
|
|
58
|
+
referenced by a kept one (`derivative`, `previous`, `clocks`, `<Dimension
|
|
59
|
+
valueReference>`), or giving the same name to several variables (or FMI-3 aliases).
|
|
60
|
+
* FIXED: `-remove-sources` also removes the `<SourceFiles>` elements of the descriptor, and now
|
|
61
|
+
works on Model Exchange-only FMUs.
|
|
62
|
+
* CHANGED: `FMUPort` is now a view on the descriptor tree. Building a detached `FMUPort()` and
|
|
63
|
+
`push_attrs()` are deprecated. Operations can reach the whole tree through their new
|
|
64
|
+
`model_description` attribute. Namespaced attributes are still given to the callbacks as
|
|
65
|
+
`prefix:name`, but the `xmlns:*` declarations are no longer listed (`-summary` no
|
|
66
|
+
longer prints them).
|
|
67
|
+
* FIXED: MCP server: invalid arguments are reported with a short, actionable message (unknown option or
|
|
68
|
+
argument with the list of the allowed ones, missing argument, value outside its constraint)
|
|
69
|
+
instead of the raw Pydantic text and its documentation link.
|
|
70
|
+
* ADDED: MCP server: **single-FMU tools** beyond container assembly — `summarize_fmu`,
|
|
71
|
+
`check_fmu` (FMI schema conformity), `dump_ports_csv`, `rename_ports_from_csv` and
|
|
72
|
+
`apply_operation` (prefix stripping/merging, trimming, regexp filtering). The tools that
|
|
73
|
+
rewrite an FMU always produce a new file and leave the source untouched.
|
|
74
|
+
* ADDED: MCP server: assembly edition is now reversible and batchable — `remove_link`,
|
|
75
|
+
`unset_start_value` and `add_links` (bulk wiring, reporting per-link failures).
|
|
76
|
+
* ADDED: MCP server: optional **bearer-token authentication** for the HTTP transport
|
|
77
|
+
(`--token generate`, or `FMUCONTAINER_MCP_TOKEN`). The loopback interface keeps remote
|
|
78
|
+
machines out, but not the other processes of the same machine, which can otherwise read
|
|
79
|
+
and write files through the server.
|
|
80
|
+
* FIXED: `Checker`: XSD validation errors were lost instead of being reported — the error was
|
|
81
|
+
logged with a malformed `logger.error(reason, msg)` call, which raised at formatting time.
|
|
82
|
+
* ADDED: `fmutool-mcp`: a **standalone MCP server**, launched by the MCP client over the
|
|
83
|
+
**stdio** transport (Claude Desktop, VS Code, Cline, ...) and requiring neither a display
|
|
84
|
+
nor a running GUI. It serves exactly the same tools as the GUI assistant, on top of the
|
|
85
|
+
public `Assembly` API. `--root DIR` (or `FMUCONTAINER_MCP_ROOT`) confines the agent to a
|
|
86
|
+
directory tree; `--transport http` is also available for clients that attach to an
|
|
87
|
+
already-running server. The server advertises itself to clients as `fmutool`.
|
|
88
|
+
Requires Python >= 3.10 and the `mcp` extra.
|
|
89
|
+
* ADDED: `fmucontainer-gui`: **AI Assistant** — the Container Builder can expose its assembly
|
|
90
|
+
capabilities to an AI agent (e.g. GitHub Copilot in *Agent* mode) through a
|
|
91
|
+
[Model Context Protocol](https://modelcontextprotocol.io/) (MCP) server. Toggle it from the
|
|
92
|
+
**Configuration** menu (*AI Assistant On/Off*); the agent drives the live canvas (add FMUs,
|
|
93
|
+
wire ports, expose inputs/outputs, set start values and options, build the container FMU),
|
|
94
|
+
with every action marked as an unsaved change and written to the log panel. Port
|
|
95
|
+
introspection reports every variable with its causality, variability, type, unit, start
|
|
96
|
+
value and description, and is filterable (by causality or name pattern) and paginated so
|
|
97
|
+
that industrial FMUs do not saturate the agent context. The server also ships its own
|
|
98
|
+
know-how, so that any MCP client benefits from it: three prompts (`build_container`,
|
|
99
|
+
`diagnose_assembly`, `inspect_fmu`) describing complete procedures, and reference
|
|
100
|
+
resources (`guide://usage`, `fmi://conventions`, `container://options`,
|
|
101
|
+
`assembly://current`, `fmu://{name}/ports`). Building a container reports its progress
|
|
102
|
+
to the client instead of running silently, and the time the tools wait for the GUI is
|
|
103
|
+
configurable with `FMUCONTAINER_MCP_TIMEOUT` (60 s by default, ten times that for
|
|
104
|
+
builds). The server uses
|
|
105
|
+
the Streamable HTTP transport bound to `127.0.0.1:8765/mcp` (port overridable with the
|
|
106
|
+
`FMUCONTAINER_MCP_PORT` environment variable). This feature requires Python >= 3.10 and the
|
|
107
|
+
new `mcp` extra: `pip install "fmu-manipulation-toolbox[gui,mcp]"`. See
|
|
108
|
+
[AI Assistant (MCP server)](docs/user-guide/fmucontainer/ai-assistant.md).
|
|
109
|
+
* ADDED: Model-Exchange FMUs: the number of continuous states (`nx`) and of event indicators (`nz`)
|
|
110
|
+
are now computed from `<ModelStructure>` (FMI-2 `<Derivatives>` / FMI-3 `<ContinuousStateDerivative>`
|
|
111
|
+
and `<EventIndicator>`, array variables counted per element).
|
|
112
|
+
* ADDED: `fmucontainer`: embedded fixed-step solver for Model-Exchange FMUs. All ME FMUs are advanced in a
|
|
113
|
+
single container-wide loop so their state derivatives, state events and time events stay consistent
|
|
114
|
+
across the coupled set. A forward-Euler integrator is used by default, with an RK4 integrator also
|
|
115
|
+
available. An FMU providing both Co-Simulation and Model-Exchange is now embedded in Co-Simulation mode.
|
|
116
|
+
Assemblies mixing Co-Simulation and Model-Exchange FMUs are supported.
|
|
117
|
+
* CHANGE:`PySide6` (the GUI toolkit) is no longer installed by default. `pip install fmu-manipulation-toolbox`
|
|
118
|
+
now only installs the **CLI** (`fmutool`, `fmucontainer`, `fmusplit`, `datalog2pcap`) and the
|
|
119
|
+
**Python API**, neither of which import `PySide6`. To use the **Graphical User Interfaces**
|
|
120
|
+
(`fmutoolbox`, `fmutool-gui`, `fmueditor`, `fmucontainer-gui`), install the new `gui` extra:
|
|
121
|
+
`pip install "fmu-manipulation-toolbox[gui]"`. A convenience `all` extra (`gui` + `test`) is also
|
|
122
|
+
available. See the [Installation Guide](docs/installation.md).
|
|
123
|
+
* CHANGE: CI improved.
|
|
124
|
+
* CHANGE: Test plan improved.
|
|
125
|
+
|
|
126
|
+
# Version 1.9.4.2
|
|
127
|
+
* ADDED: Container thread synchronization on macOS now uses a semaphore instead of a barrier
|
|
128
|
+
(macOS does not implement POSIX `pthread_barrier`).
|
|
129
|
+
* ADDED: GUI: `fmucontainer` FMU detail panel now offers a right-click **Select all** / **Select none**
|
|
130
|
+
context menu on the *Input Ports* and *Output Ports* tables to expose ports in one click.
|
|
131
|
+
* FIXED: Container datalog: samples are now logged during event handling so the recorded outputs
|
|
132
|
+
reflect the freshly updated discrete state.
|
|
133
|
+
* FIXED: Container now decodes the `fmuResourceLocation` URI following RFC 3986 (percent-encoded
|
|
134
|
+
octets such as `%20` are decoded, drive letter handled), fixing resource paths that
|
|
135
|
+
contain spaces or special characters.
|
|
136
|
+
* FIXED: FMI-3 model icon support: `fmutool`, `fmueditor` and `fmucontainer` builder now read the
|
|
137
|
+
icon from `terminalsAndIcons/icon.png`, and generated FMI-3 containers store their icon there.
|
|
138
|
+
* FIXED: GUI: `fmucontainer` right-click on a node now first selects the pointed node; "Replace FMU" (Info)
|
|
139
|
+
also refreshes the tree view.
|
|
140
|
+
* FIXED: Container Event Mode: each FMU is now driven `Set inputs -> fmi3UpdateDiscreteStates -> Get outputs`
|
|
141
|
+
within the same Gauss-Seidel sweep, so read-back outputs reflect the freshly updated discrete state.
|
|
142
|
+
|
|
143
|
+
# Version 1.9.4.1
|
|
144
|
+
* FIXED: Minor regression on GUI-only virtual `configuration`
|
|
145
|
+
|
|
146
|
+
# Version 1.9.4
|
|
147
|
+
* INFO : Linux builds are made on Ubuntu 2024.04
|
|
148
|
+
* ADDED: Change the way the threads are synchronized for container.
|
|
149
|
+
* ADDED: force locale LC_NUMERIC="C" during container runtime to avoid (rare) issue during configuration.
|
|
150
|
+
* ADDED: GUI: `fmucontainer` builder now displays each FMU's icon (`model.png`) inside its node.
|
|
151
|
+
* ADDED: GUI: the progress dialog shown during **Load**, **Import**, **Export**, and **Save**
|
|
152
|
+
operations now has a **Save Logs...** button to export the displayed execution logs
|
|
153
|
+
to a `.txt` file.
|
|
154
|
+
* ADDED: GUI: `ts_multiplier` on a sub-container now materializes a GUI-only virtual `configuration`
|
|
155
|
+
node on the canvas, exposing one input port per checked sub-container
|
|
156
|
+
(`<container>.ts_multiplier`), wireable from any FMU. This node is purely a visual aid and
|
|
157
|
+
is never exported to the assembly (JSON/FMU). Unchecking `ts_multiplier` keeps the wire but
|
|
158
|
+
turns it (and the port) red until re-checked; the node is removed automatically once all
|
|
159
|
+
its ports are inactive and no wire (including red ones) references it anymore. Checking
|
|
160
|
+
`ts_multiplier` on the root container has no effect.
|
|
161
|
+
* ADDED: GUI: a wire is now drawn in **red** on the canvas as soon as one of its port mappings is
|
|
162
|
+
invalid (broken port after "Replace FMU", or inactive `ts_multiplier` port on the
|
|
163
|
+
`configuration` node) — matching the red text already shown for invalid ports in the
|
|
164
|
+
*Wire Details* panel.
|
|
165
|
+
* ADDED: `Assembly.write_json()`: FMU paths referenced in the `fmu`, `link`, `input`, `output`,
|
|
166
|
+
`start` and `drop` blocks are now made relative to the directory of the produced JSON
|
|
167
|
+
file, so exported assemblies stay portable (e.g. GUI **Export as JSON**). A new
|
|
168
|
+
`basenames_only` option references embedded FMUs by their bare filename instead
|
|
169
|
+
(used for the documentation copy embedded inside built FMU containers).
|
|
170
|
+
* ADDED: GUI: new **Input Ports** tab in the FMU detail panel, symmetric to the existing
|
|
171
|
+
**Output Ports** tab. Each input port can be explicitly marked as *exposed*, causing
|
|
172
|
+
the generated assembly to declare it explicitly as a container input (via `add_input`)
|
|
173
|
+
instead of relying solely on `auto_input`. Exposed inputs on FMUs nested inside
|
|
174
|
+
sub-containers are automatically propagated up through parent containers.
|
|
175
|
+
* FIXED: `fmusplit`: correct handling of FMI-3 array port connections (arrays are now properly
|
|
176
|
+
detected and linked in the generated assembly).
|
|
177
|
+
* ADDED: GUI: when a wire is selected, a yellow direction indicator is drawn on the wire to
|
|
178
|
+
reflect the currently active tab of the *Wire Details* panel (A→B / B→A arrowhead at
|
|
179
|
+
the corresponding extremity, or a divergent ◀▶ marker at the middle for *Terminals*).
|
|
180
|
+
* ADDED: `fmusplit`: detect terminal-to-terminal connections. Groups of port-to-port links whose
|
|
181
|
+
endpoints belong to two compatible terminals (same `terminalKind` / `matchingRule`) are
|
|
182
|
+
collapsed into a single terminal-level link in the produced JSON assembly. This lifts the
|
|
183
|
+
previous "LS-BUS clocks connection are not supported in GUI" limitation for FMU containers
|
|
184
|
+
where the peer FMU does not emit clocks (typical LS-BUS bus/node setups).
|
|
185
|
+
* FIXED: `fmusplit`: correct parsing of clocked inputs/outputs in container.txt file format 4
|
|
186
|
+
(indexing bug that produced spurious cross-links between FMUs sharing a bus).
|
|
187
|
+
* ADDED: GUI: on import, links between terminals declared in an assembly JSON are correctly
|
|
188
|
+
detected and routed to the wire's terminal mappings (visible in the `WireDetail` panel).
|
|
189
|
+
* ADDED: `fmucontainer`: extended type conversions between all numeric types and booleans.
|
|
190
|
+
Lossy conversions (narrowing, sign change, real↔integer, numeric→boolean) are applied with a warning.
|
|
191
|
+
* ADDED: `fmucontainer`: support links between FMI-2 array-like ports (notation `name[k]`) and
|
|
192
|
+
FMI-3 array ports. FMI-2 element ports sharing a common `basename[]` are automatically
|
|
193
|
+
aggregated into a virtual array port named `basename` (dimension = number of elements),
|
|
194
|
+
which can be linked to an FMI-3 array port of the same dimension.
|
|
195
|
+
Multi-dimensional arrays are also supported using the Modelica-style comma notation
|
|
196
|
+
`name[i,j,...]` (conforming to FMI-2.0); elements are flattened in row-major order to
|
|
197
|
+
match the FMI-3 array layout.
|
|
198
|
+
|
|
199
|
+
# Version 1.9.3.1
|
|
200
|
+
* FIXED: `fmucontainer`: correct `fmi3SetString` for array variables (dimension > 1) and `fmi2GetBooleanStatus`
|
|
201
|
+
* FIXED: `fmucontainer`: memory leaks and crashes under memory pressure; state machine improvements
|
|
202
|
+
* FIXED: `fmucontainer`: `auto_parameter` works even if `auto_input` is not set.
|
|
203
|
+
* FIXED: `fmucontainer`: Clocks and Clocked variables management is made in Event Mode only
|
|
204
|
+
* ADDED: GUI: Ability to replace a FMU in a Container
|
|
205
|
+
* FIXED: `fmuplit` is able to parse conversion table
|
|
206
|
+
* ADDED: FMI-3: support next event time
|
|
207
|
+
* FIXED: GUI: Remove annoying Qt Runtime error message appearing during shutdown
|
|
208
|
+
* ADDED: GUI: Terminals are supported in link definitions
|
|
209
|
+
* ADDED: GUI: Contextual menu of FMUs to launch fmueditor, fmutool or FMPy (if installed)
|
|
210
|
+
* ADDED: GUI: Highlight FMUs nested in the selected container
|
|
211
|
+
* ADDED: GUI: Display tooltips for container parameters
|
|
212
|
+
* ADDED: GUI: Easier link creation when FMU contains many variables (parameters displayed in italic)
|
|
213
|
+
* ADDED: GUI: Import process now able to load SSP files
|
|
214
|
+
* ADDED: GUI: Import/Export link definitions as CSV files (4-column format: FMU From, Port From, FMU To, Port To)
|
|
215
|
+
* FIXED: FMU extraction of a container when using relative paths
|
|
216
|
+
* FIXED: GUI: Import of containers with multiple levels of nesting (FMU inside FMU)
|
|
217
|
+
|
|
218
|
+
# Version 1.9.3
|
|
219
|
+
* ADDED: Graphical User Interfaces for quick FMU variable edition and build FMU Container
|
|
220
|
+
* ADDED: Support of array variables
|
|
221
|
+
* CHANGE: refactor the documentation
|
|
222
|
+
* FIXED: `remoting` (rare) race condition when multiple instances share the same unzip directory
|
|
223
|
+
* ADDED: `OperationSummary` display defined Terminals (if any)
|
|
224
|
+
|
|
225
|
+
# Version 1.9.2.1
|
|
226
|
+
* FIXED: `fmucontainer` embed the _original_ modelDescription.xml of the nested FMU instead.
|
|
227
|
+
|
|
228
|
+
# Version 1.9.2
|
|
229
|
+
* ADDED: `fmucontainer` support of Terminals
|
|
230
|
+
* ADDED: support of Clock and Binary types
|
|
231
|
+
* ADDED: `fmucontainer` support of Event-Mode
|
|
232
|
+
* ADDED: `fmucontainer` support of LS-BUS. See [ls-bus.md](docs/user-guide/fmucontainer/ls-bus.md)
|
|
233
|
+
* ADDED: `fmucontainer` support of `-datalog` option to log values at each step. See [datalog.md](docs/user-guide/fmucontainer/datalog.md)
|
|
234
|
+
* ADDED: `datalog2pcap` command to convert datalog (csv file) into PCAP (binary file) to enable network analysis tools.
|
|
235
|
+
This tool is experimental.
|
|
236
|
+
* FIXED: `fmucontainer` log correctly for FMU3 embedded inside FMU2 container
|
|
237
|
+
* FIXED: `fmucontainer` correctly set start values
|
|
238
|
+
* FIXED: `fmucontainer` correctly handle tolerance. See [issue 35](https://github.com/grouperenault/fmu_manipulation_toolbox/issues/35)
|
|
239
|
+
* FIXED: `remoting` fix for very long path on windows
|
|
240
|
+
|
|
241
|
+
# Version 1.9.1.3
|
|
242
|
+
* FIXED: `remoting` code should allow multiple FMUs to be instanciated (in less than 1 second).
|
|
243
|
+
There was a race condition in SHM name computation.
|
|
244
|
+
See [issue 38](https://github.com/grouperenault/fmu_manipulation_toolbox/issues/38)
|
|
245
|
+
* FIXED: `fmucontainer` dynamic change of time_step: fix number of doStep() calls
|
|
246
|
+
|
|
247
|
+
# Version 1.9.1.2
|
|
248
|
+
* FIXED: Avoid usage of NULL pointer for category in logs. Despite this is legal,
|
|
249
|
+
some FMI importers don't support it.
|
|
250
|
+
|
|
251
|
+
# Version 1.9.1.1
|
|
252
|
+
* FIXED: command line interface for `fmucontainer`, `fmutool and `fmusplit`
|
|
253
|
+
|
|
254
|
+
# Version 1.9.1
|
|
255
|
+
* FIXED: `fmucontainer` handle correctly start/stop in <DefaultExperiment>
|
|
256
|
+
* ADDED: `fmucontainer` ability to dynamically change time_step. See [container-vr.md](docs/user-guide/fmucontainer/container-vr.md)
|
|
257
|
+
|
|
258
|
+
# Version 1.9
|
|
259
|
+
* CHANGE: `remoting` code rewrite to (drastically) improve performance
|
|
260
|
+
* ADDED: `fmusplit` command to split container into FMU's and provide a json file
|
|
261
|
+
* ADDED: `fmucontainer` support of `-sequential` mode
|
|
262
|
+
* ADDED: FMI-3.0 early support. Use `-fmi 3` option for `fmucontainer`
|
|
263
|
+
* FIXED: `fmucontainer` MT mode on Linux and Darwin
|
|
264
|
+
* FIXED: `fmutool` command line for various operations
|
|
265
|
+
* FIXED: `fmutool` handle correctly <ModelStructure>: remove empty tags
|
|
266
|
+
* CHANGE: (API) `fmu_operations` and `fmu_container` packages are renamed `operations` and `container`
|
|
267
|
+
* CHANGE: (API) Introduction of `FMUPort` and `port_attrs` method to replace `scalar_attrs` and `scalar_type`
|
|
268
|
+
* CHANGE: (API) `FMUException` and `OperationException` classes are renamed `FMUError` and `OperationError`
|
|
269
|
+
* CHANGE: (CI/CT) Add some simulation steps
|
|
270
|
+
|
|
271
|
+
# Version 1.8.4.2
|
|
272
|
+
* FIXED: `fmucontainer` re-set start values for causality=input after fmi2EnterInitialization as workaround for some FMUs.
|
|
273
|
+
|
|
274
|
+
# Version 1.8.4.1
|
|
275
|
+
* FIXED: `fmucontainer` store embedded FMUs into shorter named directories to avoid windows-long-path-issue
|
|
276
|
+
* FIXED: `fmucontainer` can refer to FMU located in subdirectory
|
|
277
|
+
* FIXED: `fmucontainer` profiling reported incorrect values
|
|
278
|
+
|
|
279
|
+
# Version 1.8.4
|
|
280
|
+
* CHANGE: `fmucontainer` option `-dump` saves explicitly auto-wiring data. Auto-wiring is off for SSP format.
|
|
281
|
+
|
|
282
|
+
# Version 1.8.3
|
|
283
|
+
* FIXED: `fmucontainer` supports correctly auto-link for 1-to-n links
|
|
284
|
+
|
|
285
|
+
# Version 1.8.2.2
|
|
286
|
+
* ADDED: `fmucontainer` support fmi2Strings
|
|
287
|
+
* FIXED: `fmucontainer` freeInstance correctly frees memory
|
|
288
|
+
|
|
289
|
+
## Version 1.8.2.1
|
|
290
|
+
* FIXED: `fmucontainer` exposed parameters name (using fmu name instead of fmu's model identifier)
|
|
291
|
+
* FIXED: `fmucontainer` support for long path (on Windows)
|
|
292
|
+
|
|
293
|
+
## Version 1.8.2
|
|
294
|
+
* FIXED: `fmucontainer` identifier (for coSimulation) does not contain ".fmu" anymore
|
|
295
|
+
* ADDED: `fmucontainer` log more information when embedded FMU cannot be loaded
|
|
296
|
+
* ADDED: `fmucontainer` startTime and stopTime are deduced from the 1st embedded FMU
|
|
297
|
+
* ADDED: `fmucontainer` support `-auto-local` option to expose local variables of the embedded FMU
|
|
298
|
+
* ADDED: `fmucontainer` support new option `-auto-parameter` (parameters are not exposed by default)
|
|
299
|
+
* FIXED: `fmutool` support "apply on" filter correctly
|
|
300
|
+
* DEV: preliminary version of GUI for `fmucontainer`
|
|
301
|
+
|
|
302
|
+
## Version 1.8.1
|
|
303
|
+
* FIXED: `fmucontainer` read links from `.json` input files
|
|
304
|
+
* CHANGE: switch to PyQT6 and add minor GUI improvements
|
|
305
|
+
|
|
306
|
+
## Version 1.8
|
|
307
|
+
* CHANGE: Python Package in now known as `fmu-manipulation-toolbox`
|
|
308
|
+
* ADDED: `fmucontainer` support `canHandleVariableCommunicationStepSize`
|
|
309
|
+
* ADDED: `fmucontainer` support `.ssp` or `.json` as input files
|
|
310
|
+
* ADDED: `fmucontainer` new `-dump` option to save container description
|
|
311
|
+
|
|
312
|
+
## Version 1.7.4
|
|
313
|
+
* ADDED: `fmucontainer` Linux support
|
|
314
|
+
* ADDED: `-fmu-directory` option defaults to "." if not set
|
|
315
|
+
* FIXED: `fmucontainer` ensures that FMUs are compliant with version 2.0 of FMU Standard
|
|
316
|
+
* FIXED: `fmucontainer` handles the lack of DefaultExperiment section in modelDescription.xml
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
## Version 1.7.3
|
|
320
|
+
* ADDED: `fmucontainer` supports `-profile` option to expose RT ratio of embedded FMUs during simulation
|
|
321
|
+
* ADDED: Ability to expose local variables of embedded FMUs at container level
|
|
322
|
+
* FIXED: `fmucontainer` handles missing causality and handle better variability
|
|
323
|
+
|
|
324
|
+
## Version 1.7.2
|
|
325
|
+
* FIXED: handle `<ModelStructure>` section for `fmucontainer`
|
|
326
|
+
* FIXED: brought back `-h` option to get help for `fmucontainer`
|
|
327
|
+
* CHANGED: make compatibility with python >= 3.9
|
|
328
|
+
|
|
329
|
+
## Version 1.7.1
|
|
330
|
+
* FIXED: add missing *.xsd file that prevented checker to work
|
|
331
|
+
* CHANGED: Checker use API instead of environment variable to declare custom checkers.
|
|
332
|
+
|
|
333
|
+
## Version 1.7
|
|
334
|
+
* ADDED: FMUContainer tool
|
|
335
|
+
|
|
336
|
+
## Version 1.6.2
|
|
337
|
+
* ADDED: Ability to add your own FMU Checker.
|
|
338
|
+
* ADDED: SaveNamesToCSV will dump scalar types and start values.
|
|
339
|
+
* CHANGED: Default (Generic) Checker checks the `modelDescription.xml` conformity against the XSD specification file.
|
|
340
|
+
|
|
341
|
+
## Version 1.6.1
|
|
342
|
+
* FIXED: publication workflow is fully automated.
|
|
343
|
+
* FIXED: `fmutool` script is now part of the distribution.
|
|
344
|
+
* CHANGED: minor enhancement in the README file
|
|
345
|
+
|
|
346
|
+
## Version 1.6
|
|
347
|
+
* First public release
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
|
|
2
|
+
You’re welcome to share your ideas or join us in contributing to the project.
|
|
3
|
+
By getting involved, you help enhance the project and make it accessible to a wider community.
|
|
4
|
+
|
|
5
|
+
# How to Contribute
|
|
6
|
+
We value all types of contributions. Whether you discover bugs, improve the documentation,
|
|
7
|
+
or develop new features, there are many ways to get involved.
|
|
8
|
+
|
|
9
|
+
## Reporting Issues
|
|
10
|
+
|
|
11
|
+
If you encounter a bug or unexpected behavior, please follow these steps:
|
|
12
|
+
|
|
13
|
+
1. Check the existing issues to see if the problem has already been reported.
|
|
14
|
+
2. If not, open a new issue and include:
|
|
15
|
+
- A clear and concise description of the problem.
|
|
16
|
+
- Steps to reproduce the issue, if applicable.
|
|
17
|
+
- Details about your environment (e.g., operating system, Python version).
|
|
18
|
+
- Any relevant error messages or logs.
|
|
19
|
+
|
|
20
|
+
## Suggestions for Improvements
|
|
21
|
+
|
|
22
|
+
We’re always happy to hear new ideas for features or enhancements! If you’d like to suggest one:
|
|
23
|
+
|
|
24
|
+
1. Check whether someone has already proposed it.
|
|
25
|
+
2. If not, open a new issue describing the improvement and include:
|
|
26
|
+
- A clear explanation of the feature and its use cases.
|
|
27
|
+
- Why it would add value to the project.
|
|
28
|
+
- Examples of how the feature could work, if applicable.
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
## Submitting Code
|
|
32
|
+
|
|
33
|
+
For legal reasons, we are unable to accept pull requests. If you have ideas for improvements,
|
|
34
|
+
please create an issue or get in touch with the development team.
|
|
35
|
+
|
|
36
|
+
## Running tests
|
|
37
|
+
|
|
38
|
+
The test suite lives under `tests/` and uses [pytest](https://docs.pytest.org/). It is organised
|
|
39
|
+
by test type:
|
|
40
|
+
|
|
41
|
+
| Directory | Contents |
|
|
42
|
+
|-----------|----------|
|
|
43
|
+
| `tests/unit/` | fast, pure-Python tests (operations, checker) — no FMI simulation |
|
|
44
|
+
| `tests/integration/` | container / split / CLI tests, file I/O, optional FMI simulation (`fmpy`) |
|
|
45
|
+
| `tests/gui/` | PySide6 GUI tests (require `pytest-qt`) |
|
|
46
|
+
| `tests/data/<area>/` | read-only reference data (FMUs, JSON, CSV, …) per functional area |
|
|
47
|
+
|
|
48
|
+
### Install the test dependencies
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
pip install -e ".[test]" # pytest, pytest-qt, pytest-cov, fmpy, numpy, PySide6
|
|
52
|
+
# or, for a full dev setup:
|
|
53
|
+
pip install -r requirements.txt
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Run the suite
|
|
57
|
+
|
|
58
|
+
Tests are run from the `tests/` directory (the `pytest.ini` there sets the import paths):
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
cd tests
|
|
62
|
+
pytest # run everything
|
|
63
|
+
pytest --cov=fmu_manipulation_toolbox # with coverage
|
|
64
|
+
pytest -v integration/test_container.py # a single module
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Selecting a subset with markers
|
|
68
|
+
|
|
69
|
+
Markers are declared in `tests/pytest.ini`. Select (or exclude) with `-m`:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
pytest -m unit # fast unit tests only
|
|
73
|
+
pytest -m "not gui" # skip the GUI tests
|
|
74
|
+
pytest -m "integration and fmi3"
|
|
75
|
+
pytest -m lsbus # LS-BUS tests
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
| Marker | Meaning |
|
|
79
|
+
|--------|---------|
|
|
80
|
+
| `unit` / `integration` / `gui` | test type |
|
|
81
|
+
| `slow` | end-to-end test running an FMI simulation |
|
|
82
|
+
| `needs_fmpy` | requires the `fmpy` package |
|
|
83
|
+
| `needs_container` / `needs_remoting` | requires the compiled container / remoting binaries |
|
|
84
|
+
| `windows_only` | only runs on win32 (auto-skipped elsewhere) |
|
|
85
|
+
| `fmi2` / `fmi3` | exercises a specific FMI version |
|
|
86
|
+
| `lsbus` | exercises the LS-BUS feature |
|
|
87
|
+
| `area(name)` | selects the `tests/data/<name>` directory copied into `tests/tmp/<test>` |
|
|
88
|
+
|
|
89
|
+
Platform- or binary-dependent tests are skipped automatically (with an explicit reason) when their
|
|
90
|
+
prerequisites are missing — they never fail silently.
|
|
91
|
+
|
|
92
|
+
### Adding a test
|
|
93
|
+
|
|
94
|
+
1. Put reference data under `tests/data/<area>/` (inputs and `REF-*` files only — never commit
|
|
95
|
+
generated outputs).
|
|
96
|
+
2. Add the test to the matching module in `tests/unit/`, `tests/integration/` or `tests/gui/`.
|
|
97
|
+
3. Decorate it with the relevant markers, e.g. `@pytest.mark.area("<area>")`. The `area_dir`
|
|
98
|
+
fixture copies that data directory into `tests/tmp/<test>/` and `chdir`s into it, so your test
|
|
99
|
+
can refer to files by their bare names and write outputs without polluting the source tree.
|
|
100
|
+
The `tests/tmp/` tree is wiped at the start of every session and kept afterwards, so the
|
|
101
|
+
generated artefacts are easy to inspect when debugging a failure.
|
|
102
|
+
4. Reuse the shared helpers in `tests/_helpers/` (`assertions.py`, `simulation.py`).
|
|
103
|
+
|
|
104
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Copyright (c) 2024-2026 Renault SAS
|
|
2
|
+
|
|
3
|
+
Redistribution and use in source and binary forms, with or without
|
|
4
|
+
modification, are permitted provided that the following conditions
|
|
5
|
+
are met:
|
|
6
|
+
1. Redistributions of source code must retain the above copyright
|
|
7
|
+
notice, this list of conditions and the following disclaimer.
|
|
8
|
+
2. Redistributions in binary form must reproduce the above copyright
|
|
9
|
+
notice, this list of conditions and the following disclaimer in the
|
|
10
|
+
documentation and/or other materials provided with the distribution.
|
|
11
|
+
|
|
12
|
+
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
|
|
13
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
14
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
15
|
+
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
16
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
17
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
18
|
+
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
19
|
+
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
20
|
+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
21
|
+
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
22
|
+
SUCH DAMAGE.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Content of the sdist (docs/local/packaging.md, decision D3).
|
|
2
|
+
# With setuptools-scm, every file tracked by git goes into the sdist by default. Keep the Python package and the C
|
|
3
|
+
# sources of the native binaries (container/, remoting/, fmi/); leave out the test data, the documentation, the CI
|
|
4
|
+
# configuration and the prebuilt binaries.
|
|
5
|
+
#
|
|
6
|
+
# The wheel needs the prebuilt binaries: build it from the source tree, not from the sdist
|
|
7
|
+
# (`python -m build --sdist --wheel`).
|
|
8
|
+
prune tests/data
|
|
9
|
+
prune docs
|
|
10
|
+
prune .github
|
|
11
|
+
recursive-exclude fmu_manipulation_toolbox/resources/win32 *
|
|
12
|
+
recursive-exclude fmu_manipulation_toolbox/resources/win64 *
|
|
13
|
+
recursive-exclude fmu_manipulation_toolbox/resources/linux32 *
|
|
14
|
+
recursive-exclude fmu_manipulation_toolbox/resources/linux64 *
|
|
15
|
+
recursive-exclude fmu_manipulation_toolbox/resources/darwin64 *
|