fmu-manipulation-toolbox 2.0b2__tar.gz → 2.1.dev0__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-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/CHANGELOG.md +92 -4
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/PKG-INFO +2 -2
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/cmake/fmutool.cmake +16 -1
- fmu_manipulation_toolbox-2.1.dev0/container/CMakeLists.txt +123 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/config.c +77 -7
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/config.h +30 -1
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/container.c +549 -546
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/container.h +35 -73
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/convert.c +39 -3
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/convert.h +4 -1
- fmu_manipulation_toolbox-2.1.dev0/container/datalog.c +283 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/datalog.h +12 -20
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/fmi2.c +46 -35
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/fmi3.c +51 -37
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/fmu.c +154 -163
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/fmu.h +41 -25
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/library.c +63 -23
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/library.h +2 -1
- fmu_manipulation_toolbox-2.1.dev0/container/logger.c +100 -0
- fmu_manipulation_toolbox-2.1.dev0/container/logger.h +68 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/profile.c +2 -2
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/profile.h +2 -1
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/solver.c +29 -20
- fmu_manipulation_toolbox-2.1.dev0/container/tests/data/empty/container.txt +46 -0
- fmu_manipulation_toolbox-2.1.dev0/container/tests/data/one_fmu/container.txt.in +199 -0
- fmu_manipulation_toolbox-2.1.dev0/container/tests/data/one_fmu/datalog.txt.in +33 -0
- fmu_manipulation_toolbox-2.1.dev0/container/tests/stub_fmu.c +180 -0
- fmu_manipulation_toolbox-2.1.dev0/container/tests/test.h +66 -0
- fmu_manipulation_toolbox-2.1.dev0/container/tests/test_config.c +99 -0
- fmu_manipulation_toolbox-2.1.dev0/container/tests/test_configure.c +36 -0
- fmu_manipulation_toolbox-2.1.dev0/container/tests/test_datalog.c +73 -0
- fmu_manipulation_toolbox-2.1.dev0/container/tests/test_locale.c +79 -0
- fmu_manipulation_toolbox-2.1.dev0/container/tests/test_logger.c +109 -0
- fmu_manipulation_toolbox-2.1.dev0/container/tests/test_main.c +74 -0
- fmu_manipulation_toolbox-2.1.dev0/container/tests/test_malformed.c +209 -0
- fmu_manipulation_toolbox-2.1.dev0/container/tests/test_thread.c +113 -0
- fmu_manipulation_toolbox-2.1.dev0/container/tests/test_threads_lifecycle.c +49 -0
- fmu_manipulation_toolbox-2.1.dev0/container/thread.c +160 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/thread.h +28 -3
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/_version.py +3 -3
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/assembly.py +158 -23
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/cli/fmutool.py +7 -2
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/cli/utils.py +8 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/container/builder.py +35 -12
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/__main__.py +49 -21
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/assembly_io.py +52 -4
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/details/link_assistant.py +12 -7
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/details/wire_detail.py +45 -1
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/graph/constants.py +4 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/graph/node.py +6 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/graph/wire.py +40 -4
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/mcp_bridge.py +39 -13
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/tree/model.py +16 -2
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/tree/panel.py +11 -5
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/tree/widget.py +118 -8
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmueditor/__main__.py +10 -4
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmutool/__main__.py +44 -14
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/helper.py +5 -352
- fmu_manipulation_toolbox-2.1.dev0/fmu_manipulation_toolbox/gui/log.py +617 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/help.py +6 -3
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox.egg-info/PKG-INFO +2 -2
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox.egg-info/SOURCES.txt +19 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox.egg-info/requires.txt +1 -1
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox.egg-info/scm_file_list.json +27 -0
- fmu_manipulation_toolbox-2.1.dev0/fmu_manipulation_toolbox.egg-info/scm_version.json +8 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/mkdocs.yml +1 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/pyproject.toml +1 -1
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/remoting/server.c +2 -1
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/_helpers/assertions.py +30 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/gui/test_assistant_qt_bridge.py +53 -0
- fmu_manipulation_toolbox-2.1.dev0/tests/gui/test_fmucontainer_architecture_wires.py +165 -0
- fmu_manipulation_toolbox-2.1.dev0/tests/gui/test_fmucontainer_open_file.py +76 -0
- fmu_manipulation_toolbox-2.1.dev0/tests/gui/test_fmucontainer_ssp_geometry.py +69 -0
- fmu_manipulation_toolbox-2.1.dev0/tests/gui/test_fmucontainer_step_size.py +152 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/gui/test_gui.py +88 -0
- fmu_manipulation_toolbox-2.1.dev0/tests/gui/test_gui_logging.py +470 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/gui/test_link_assistant.py +11 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_compile_sources.py +19 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_datalog.py +1 -1
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_lsbus.py +5 -4
- fmu_manipulation_toolbox-2.1.dev0/tests/integration/test_ssp.py +202 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/make_carousel.py +95 -18
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/screenshots.py +27 -1
- fmu_manipulation_toolbox-2.0b2/container/CMakeLists.txt +0 -44
- fmu_manipulation_toolbox-2.0b2/container/datalog.c +0 -257
- fmu_manipulation_toolbox-2.0b2/container/logger.c +0 -117
- fmu_manipulation_toolbox-2.0b2/container/logger.h +0 -44
- fmu_manipulation_toolbox-2.0b2/container/thread.c +0 -96
- fmu_manipulation_toolbox-2.0b2/fmu_manipulation_toolbox.egg-info/scm_version.json +0 -8
- fmu_manipulation_toolbox-2.0b2/tests/gui/test_gui_logging.py +0 -240
- fmu_manipulation_toolbox-2.0b2/tests/integration/test_ssp.py +0 -87
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/.git_archival.txt +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/.gitattributes +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/.gitignore +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/CLAUDE.md +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/CONTRIBUTING.md +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/LICENSE.txt +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/MANIFEST.in +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/README.md +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/cmake/gen_version.cmake +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/cmake/pgo.cmake +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/cmake/version.h.in +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/build.bat +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/hash.c +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/hash.h +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/solver.h +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/test_fmi.c +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/__init__.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/__main__.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/assistant/__init__.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/assistant/analysis.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/assistant/auth.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/assistant/bridge.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/assistant/fmutools.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/assistant/headless.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/assistant/knowledge.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/assistant/models.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/assistant/paths.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/assistant/replay.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/assistant/server.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/checker.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/cli/__init__.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/cli/datalog2pcap.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/cli/fmucontainer.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/cli/fmusplit.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/cli/fmutool_mcp.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/compiler.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/container/__init__.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/container/arrays.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/container/embedded.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/container/errors.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/container/layout.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/container/rules.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/container/txt.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/container/types.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/__init__.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/__main__.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/__init__.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/details/__init__.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/details/configuration_detail.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/details/container_detail.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/details/fmu_detail.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/details/link_assistant_demo.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/details/link_matching.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/details/stack.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/graph/__init__.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/graph/node_info_dialog.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/graph/scene.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/graph/view.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/graph/widget.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/tree/__init__.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/tree/sync.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmueditor/__init__.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmutool/__init__.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/style.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/ls.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/model_description.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/operations.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/remoting.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/checkbox-checked-disabled.png +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/checkbox-checked-hover.png +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/checkbox-checked.png +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/checkbox-unchecked-disabled.png +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/checkbox-unchecked-hover.png +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/checkbox-unchecked.png +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/container.png +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/drop_fmu.png +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi/fmi2FunctionTypes.h +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi/fmi2Functions.h +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi/fmi2TypesPlatform.h +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi/fmi3FunctionTypes.h +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi/fmi3Functions.h +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi/fmi3PlatformTypes.h +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-2.0/fmi2Annotation.xsd +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-2.0/fmi2AttributeGroups.xsd +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-2.0/fmi2ModelDescription.xsd +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-2.0/fmi2ScalarVariable.xsd +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-2.0/fmi2Type.xsd +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-2.0/fmi2Unit.xsd +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-2.0/fmi2VariableDependency.xsd +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3Annotation.xsd +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3AttributeGroups.xsd +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3BuildDescription.xsd +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3InterfaceType.xsd +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3LayeredStandardManifest.xsd +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3ModelDescription.xsd +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3Terminal.xsd +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3TerminalsAndIcons.xsd +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3Type.xsd +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3Unit.xsd +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3Variable.xsd +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3VariableDependency.xsd +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmu.png +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmu_manipulation_toolbox.png +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmucontainer.png +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmueditor.png +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmutool.png +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/help.png +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/icon-round.png +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/icon.png +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/icon_fmu.png +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/license.txt +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/mask.png +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/radio-checked-disabled.png +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/radio-checked-hover.png +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/radio-checked.png +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/radio-unchecked-disabled.png +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/radio-unchecked-hover.png +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/radio-unchecked.png +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/split.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/terminals.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/textfiles.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/version.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox.egg-info/dependency_links.txt +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox.egg-info/entry_points.txt +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox.egg-info/top_level.txt +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/overrides/main.html +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/remoting/CMakeLists.txt +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/remoting/build.bat +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/remoting/client.c +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/remoting/client.h +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/remoting/communication.c +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/remoting/communication.h +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/remoting/config.h.in +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/remoting/process.c +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/remoting/process.h +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/remoting/server.h +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/requirements.txt +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/setup.cfg +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/.coveragerc +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/_helpers/__init__.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/_helpers/archive.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/_helpers/assistant_bridge.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/_helpers/mcp_budget.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/_helpers/simulation.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/benchmarks/bench_manipulation.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/conftest.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/gui/test_fmucontainer_instances.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/gui/test_fmucontainer_reset_ports.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/gui/test_link_assistant_wire.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_array.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_assistant_stdio_server.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_cli.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_cli_errors.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_container.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_container_enumeration.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_container_perf.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_container_reset.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_container_txt.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_container_xml.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_me.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_operations_invariants.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_probe_fmu.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_remoting.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_split.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/pytest.ini +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_assembly_errors.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_assembly_instances.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_assembly_parsing.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_assistant_analysis.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_assistant_auth.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_assistant_budget.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_assistant_fmutools.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_assistant_headless.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_assistant_server_contract.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_assistant_server_runtime.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_assistant_server_tools.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_checker.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_checker_loading.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_checker_semantic.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_compiler.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_container_internals.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_fmu_descriptor_cache.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_fmu_lifecycle.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_link_matching.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_model_description.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_model_exchange_sizes.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_operations.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_operations_conformity.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_operations_dependencies.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_operations_errors.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_split_parsing.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_terminals.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_textfiles.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_xml_assertions.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_xml_roundtrip.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/bench_container.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/compare_traces.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/dist_inventory.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/Probe10ms.fmu +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/Probe20ms.fmu +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/Probe50ms.fmu +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/README.md +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/make_probe.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/probe.c +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/README.md +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/S1.json +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/S2.json +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/S3.json +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/S4a.json +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/S4b.json +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/S4c.json +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/S4d.json +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/S5j.json +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/S5r.json +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/S5s.json +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/S6m.json +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/S6s.json +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/run_container.py +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/simulink/build_scenarios.m +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/simulink/probe_scenarios.m +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/simulink/probe_simulink_api.m +0 -0
- {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/simulink/run_scenarios.m +0 -0
|
@@ -3,7 +3,39 @@ This package was formerly known as `fmutool`.
|
|
|
3
3
|
|
|
4
4
|
# Upstream
|
|
5
5
|
|
|
6
|
-
Not released yet. Changes since
|
|
6
|
+
Not released yet. Changes since 2.0, with the same legend as 2.0.
|
|
7
|
+
|
|
8
|
+
## FMU Container
|
|
9
|
+
|
|
10
|
+
- 🟢 **ADDED** **architecture wires** in SSP files: a connection annotated
|
|
11
|
+
`fmu_manipulation_toolbox.architecture-wire` describes a dependency between two components (directed,
|
|
12
|
+
bidirectional or undirected, with a Markdown description) before the exchanged variables are known. It is not a
|
|
13
|
+
link: it takes no part in the container and is not written in the JSON description; the Container Builder shows it
|
|
14
|
+
as a hint. See [Architecture wires](docs/user-guide/fmucontainer/container.md#architecture-wires).
|
|
15
|
+
- 🔵 **CHANGED** SSP import: each component is embedded as `<component name>.fmu` (it was named after its FMU file,
|
|
16
|
+
`<file>-<n>.fmu` for the components sharing a source), and the FMUs are extracted keeping their path inside the
|
|
17
|
+
archive: two FMUs with the same file name in different directories no longer overwrite each other. A component
|
|
18
|
+
`source` outside the archive is refused. SSP 2.0 files are read; a component without `source` (SSP 2.0) is
|
|
19
|
+
ignored with a warning, together with its connections.
|
|
20
|
+
|
|
21
|
+
## fmutool and the Python API
|
|
22
|
+
|
|
23
|
+
- 🟢 **ADDED** `-debug` option of `fmutool` and `fmutool-gui` (at launch): the `DEBUG` lines are logged, in the log
|
|
24
|
+
area for `fmutool-gui`, e.g. the command lines of the compiler and of the linker of `-compile-sources`.
|
|
25
|
+
|
|
26
|
+
## Graphical User Interfaces
|
|
27
|
+
|
|
28
|
+
- 🟢 **ADDED** `fmucontainer-gui <file>` opens an FMU container (`.fmu`) or imports an assembly file (`.json`,
|
|
29
|
+
`.csv`, `.ssp`) given on the command line.
|
|
30
|
+
- 🟢 **ADDED** Container Builder: the nodes imported from an SSP file are placed after the geometry of their
|
|
31
|
+
components, and the [architecture wires](docs/user-guide/fmucontainer/gui-usage.md#architecture-wires) of the file
|
|
32
|
+
are shown as dashed wires until their links are defined, with their direction and description in the wire details.
|
|
33
|
+
- 🟠 **FIXED** status bar of the GUIs: a long log record is elided (the whole line in the tooltip) instead
|
|
34
|
+
of widening the window.
|
|
35
|
+
|
|
36
|
+
# Version 2.0
|
|
37
|
+
|
|
38
|
+
Changes since 1.9.4.2, by theme: 🟢 **ADDED** new feature, 🔵 **CHANGED** change of behaviour or
|
|
7
39
|
API, 🟠 **FIXED** bug fix; 🔴 **BREAKING** marks what may require changes in scripts, custom operations or checkers.
|
|
8
40
|
|
|
9
41
|
## Installation and platforms
|
|
@@ -12,6 +44,8 @@ API, 🟠 **FIXED** bug fix; 🔴 **BREAKING** marks what may require changes in
|
|
|
12
44
|
October 2025. On Python 3.9, pip installs 1.9.4.2, the last release supporting it.
|
|
13
45
|
- 🟢 **ADDED** Python 3.14 is supported, and tested by the CI on Windows, Linux and macOS. Python 3.13 remains the
|
|
14
46
|
recommended version.
|
|
47
|
+
- 🟠 **FIXED** the Linux binaries (container, remoting) load again on Ubuntu 22.04 and the distributions with
|
|
48
|
+
glibc 2.35 or newer: those of 1.9.4.2, built on Ubuntu 24.04, required glibc 2.38.
|
|
15
49
|
- 🔵 **CHANGED** `PySide6` (the GUI toolkit) is no longer installed by default. `pip install fmu-manipulation-toolbox`
|
|
16
50
|
only installs the **CLI** (`fmutool`, `fmucontainer`, `fmusplit`, `datalog2pcap`) and the
|
|
17
51
|
**Python API**, neither of which import `PySide6`. Extras: `gui` for the **Graphical User
|
|
@@ -31,6 +65,9 @@ API, 🟠 **FIXED** bug fix; 🔴 **BREAKING** marks what may require changes in
|
|
|
31
65
|
sdist). The remoting code is now compiled in C23 with the same warnings and optimizations as the container
|
|
32
66
|
(IPO/LTO, optional PGO). The build options are renamed `FMUTOOL_WARNINGS_AS_ERRORS`, `FMUTOOL_STRICT_CONVERSION`
|
|
33
67
|
and `FMUTOOL_PGO` (formerly `CONTAINER_*`). See the [Installation Guide](docs/installation.md).
|
|
68
|
+
- 🟢 **ADDED** native tests of the container runtime (`container/tests`, run by CTest and by the CI on every
|
|
69
|
+
platform) and the build option `FMUTOOL_SANITIZE` (AddressSanitizer and UndefinedBehaviorSanitizer), used by a new
|
|
70
|
+
CI job. See [Native runtime of the container](docs/developer/native-runtime.md).
|
|
34
71
|
|
|
35
72
|
## AI Assistant (MCP server)
|
|
36
73
|
|
|
@@ -79,11 +116,17 @@ API, 🟠 **FIXED** bug fix; 🔴 **BREAKING** marks what may require changes in
|
|
|
79
116
|
|
|
80
117
|
## FMU Container
|
|
81
118
|
|
|
119
|
+
- 🟢 **ADDED** **several instances of the same FMU** in a container: each instance has its own name
|
|
120
|
+
(`bb_position-1.fmu`, ...) and its file in the new optional `path` block of the JSON; the Container Builder,
|
|
121
|
+
the MCP tools, SSP import and `fmusplit` handle them. See
|
|
122
|
+
[Embedding the same FMU several times](docs/user-guide/fmucontainer/container.md#embedding-the-same-fmu-several-times).
|
|
82
123
|
- 🟠 **FIXED** a container called with a communication step that is not a multiple of its internal step (e.g. a
|
|
83
124
|
sub-container at 0.02 s in a parent at 0.01 s) returned without reaching the end of the step, and made its
|
|
84
125
|
internal step later with the inputs of a later instant. Each internal step now uses the inputs of its beginning
|
|
85
126
|
and holds its outputs until its end; the warning "CommunicationStepSize should be divisible" is removed. See
|
|
86
127
|
[Communication step and internal step](docs/user-guide/fmucontainer/container.md#communication-step-and-internal-step).
|
|
128
|
+
- 🟠 **FIXED** a `TS_MULTIPLIER` below 1 (e.g. 0, received during the initialization) gave a nominal step of 0 and
|
|
129
|
+
a `doStep` of 0 to the embedded FMUs: it counts as 1, as it already did for the step of the container.
|
|
87
130
|
- 🔵 **CHANGED** the container **propagates the links** between its embedded FMUs **during the initialization**:
|
|
88
131
|
in the order of the links, each FMU gets its linked inputs, leaves its Initialization Mode, then its outputs are
|
|
89
132
|
read for the FMUs after it, so that an FMU is initialized with the values of the FMUs it depends on (as Simulink
|
|
@@ -166,6 +209,9 @@ API, 🟠 **FIXED** bug fix; 🔴 **BREAKING** marks what may require changes in
|
|
|
166
209
|
- 🟠 **FIXED** the runtime reads the lines of `container.txt` of any length: a line longer than 4095 characters
|
|
167
210
|
(the start values of a large array, a string start value of more than 4095 characters) was cut and shifted the
|
|
168
211
|
reading of the rest of the file, so that the container failed to instantiate.
|
|
212
|
+
- 🟠 **FIXED** Windows: an embedded FMU, or an FMU run by the remoting server, whose DLL depends on other DLLs
|
|
213
|
+
shipped next to it in `binaries/win64` (or `win32`) failed to load. The dependencies of the DLL are now searched
|
|
214
|
+
first in its own directory.
|
|
169
215
|
- 🔵 **CHANGED** the runtime checks the format version of `container.txt` and refuses, with an explicit error, a
|
|
170
216
|
container whose `container.txt` does not come from the same version of the toolbox. See
|
|
171
217
|
[Troubleshooting](docs/help/troubleshooting.md#fmu-container-fails-to-instantiate-format-version-of-containertxt).
|
|
@@ -180,6 +226,35 @@ API, 🟠 **FIXED** bug fix; 🔴 **BREAKING** marks what may require changes in
|
|
|
180
226
|
simulation loop of Model-Exchange FMUs fed by Co-Simulation FMUs takes about a third less time (1.5 times
|
|
181
227
|
faster), about 5 % less without coupling between them.
|
|
182
228
|
|
|
229
|
+
- 🟠 **FIXED** several instances of containers in one process: each instance has its own logger. They overwrote
|
|
230
|
+
each other's logging callback and debug flag, and an instance could log through the name of an instance already
|
|
231
|
+
freed. `fmi2SetDebugLogging` / `fmi3SetDebugLogging` only change their own instance. A `NULL` logging callback,
|
|
232
|
+
allowed by FMI 3.0, no longer crashes.
|
|
233
|
+
- 🟠 **FIXED** a multi-thread container whose configuration fails (e.g. an embedded FMU that cannot be
|
|
234
|
+
instantiated) crashed or hung when it was freed. The worker threads are started once all of them are launched,
|
|
235
|
+
and stopped only if they were.
|
|
236
|
+
- 🟠 **FIXED** the container no longer changes the host process: the numeric locale of the importer is left
|
|
237
|
+
unchanged (`container.txt` is read with a decimal dot on the thread of the instantiation only), and on Windows
|
|
238
|
+
the priority class of the process is no longer raised (the worker threads keep a high priority).
|
|
239
|
+
- 🟠 **FIXED** the runtime checks the values read from `container.txt`: value references, FMU indexes, clocks and
|
|
240
|
+
local variables out of range, malformed lines and too many start values are configuration errors instead of
|
|
241
|
+
out-of-bounds accesses. An embedded FMU that cannot be loaded no longer leaks the FMUs loaded before it.
|
|
242
|
+
- 🟠 **FIXED** a container built on Windows could not load its embedded FMUs on Linux or macOS: the runtime kept the
|
|
243
|
+
`\r` of the CRLF line endings of `container.txt` in the names it reads.
|
|
244
|
+
- 🟠 **FIXED** a start value refused by an embedded FMU went unnoticed: it is logged and makes the initialization
|
|
245
|
+
(or the reset of the FMU) fail. The start value of an FMI-3 array was given with one value instead of all of them.
|
|
246
|
+
- 🟠 **FIXED** the instantiation returns `NULL` instead of crashing on an allocation failure or invalid arguments
|
|
247
|
+
(`NULL` callbacks, GUID or resource location).
|
|
248
|
+
- 🟠 **FIXED** the `String` start values: an array of strings leaked all its values but the first one, and a
|
|
249
|
+
`container.txt` cut in their section crashed the importer when the container was freed. `fmi2FreeInstance` /
|
|
250
|
+
`fmi3FreeInstance` with a `NULL` instance are ignored, as FMI requires, instead of crashing.
|
|
251
|
+
- 🟠 **FIXED** a path of the directory of an embedded FMU too long for the runtime is a configuration error: it was
|
|
252
|
+
cut without notice, and the FMU was looked for in a wrong directory.
|
|
253
|
+
- 🔵 **CHANGED** datalog: the time and the reals are written with every significant digit (`%.17g`, `%.9g`
|
|
254
|
+
for `Float32`) instead of 7 and 6 decimals, always with a decimal dot; strings and column names with a comma, a
|
|
255
|
+
double quote or a line break are quoted (RFC 4180). See
|
|
256
|
+
[Container with datalog](docs/user-guide/fmucontainer/datalog.md#csv-format).
|
|
257
|
+
|
|
183
258
|
## fmutool and the Python API
|
|
184
259
|
|
|
185
260
|
- 🟢 **ADDED** compilation of the sources embedded in an FMU when the binary of the current platform is missing:
|
|
@@ -262,13 +337,26 @@ API, 🟠 **FIXED** bug fix; 🔴 **BREAKING** marks what may require changes in
|
|
|
262
337
|
search, **Save Logs…** and **Clear**. In `fmucontainer-gui`, the messages that were lost outside the progress
|
|
263
338
|
dialog are now visible there, among them the `[AI] …` change journal and the token of the AI Assistant. See the
|
|
264
339
|
[Container Builder GUI guide](docs/user-guide/fmucontainer/gui-usage.md#log).
|
|
265
|
-
- 🔵 **CHANGED** `fmucontainer-gui`: **Verbose Mode** sets the level of the
|
|
266
|
-
standard output; without it, nothing is written on the standard output (the tree view and the
|
|
267
|
-
write their messages there in any case).
|
|
340
|
+
- 🔵 **CHANGED** `fmucontainer-gui`: **Verbose Mode** sets the level of the log of its window (`DEBUG`) and copies
|
|
341
|
+
its messages on the standard output; without it, nothing is written on the standard output (the tree view and the
|
|
342
|
+
AI Assistant used to write their messages there in any case).
|
|
343
|
+
- 🟠 **FIXED** `fmutoolbox`: the windows opened from the launcher shared one log. Each window now has its own: an
|
|
344
|
+
operation of an FMU Tool window, a build or a request of the AI Assistant of a Container Builder are only shown in
|
|
345
|
+
that window (log area, status bar, log window), **Clear** only forgets the messages of its window, and opening a
|
|
346
|
+
window no longer turns off the **Verbose Mode** of an open Container Builder. The few messages that do not come
|
|
347
|
+
from a window are shown in all of them. See the [Launcher guide](docs/user-guide/launcher.md).
|
|
268
348
|
- 🟢 **ADDED** `fmucontainer-gui`: the `reset_ports` checkbox of a container (root included) adds a
|
|
269
349
|
`<fmu>.reset` port per FMU, or sub-container, to the `configuration` node; a wire to it resets the FMU. Selecting
|
|
270
350
|
the node lists its reset ports, to expose them as container inputs. See
|
|
271
351
|
[The configuration Node](docs/user-guide/fmucontainer/gui-usage.md#the-configuration-node).
|
|
352
|
+
- 🟢 **ADDED** `fmucontainer-gui`: a second, read-only, column of the tree view shows the step size of each FMU and
|
|
353
|
+
container; the step size of a container whose `step_size` is empty is the one deduced at build time, in italics.
|
|
354
|
+
See [Step Size Column](docs/user-guide/fmucontainer/gui-usage.md#step-size-column).
|
|
355
|
+
- 🟠 **FIXED** `fmucontainer-gui`: the column headers of the **Link Assistant** (e.g. *Direction* of the staged links)
|
|
356
|
+
were truncated on Windows; a column is never narrower than its header.
|
|
357
|
+
- 🟢 **ADDED** documentation: the criteria of the **Link Assistant** step by step, **Replace prefix / suffix** and
|
|
358
|
+
**Regular expression** with examples, a syntax reminder and the pitfalls. See
|
|
359
|
+
[Rules tab](docs/user-guide/fmucontainer/gui-usage.md#rules-tab).
|
|
272
360
|
|
|
273
361
|
# Version 1.9.4.2
|
|
274
362
|
* ADDED: Container thread synchronization on macOS now uses a semaphore instead of a barrier
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fmu_manipulation_toolbox
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.1.dev0
|
|
4
4
|
Summary: FMU Manipulation Toolbox is a python package which helps to analyze, modify, validate, combine or split Functional Mock-up Units (FMUs) without recompilation, through a GUI, a CLI or a Python API.
|
|
5
5
|
Author-email: Nicolas LAURENT <Nicolas.LAURENT@Renault.com>
|
|
6
6
|
License-Expression: BSD-2-Clause
|
|
@@ -41,7 +41,7 @@ Requires-Dist: PySide6>=6.8.0; extra == "test"
|
|
|
41
41
|
Requires-Dist: pytest>=9.0.3; extra == "test"
|
|
42
42
|
Requires-Dist: pytest-qt>=4.4.0; extra == "test"
|
|
43
43
|
Requires-Dist: pytest-cov>=7.0.0; extra == "test"
|
|
44
|
-
Requires-Dist:
|
|
44
|
+
Requires-Dist: anybadge>=1.16.0; extra == "test"
|
|
45
45
|
Requires-Dist: fmpy>=0.3.20; extra == "test"
|
|
46
46
|
Requires-Dist: numpy; extra == "test"
|
|
47
47
|
Provides-Extra: all
|
|
@@ -6,6 +6,7 @@ set(FMUTOOL_CMAKE_DIR ${CMAKE_CURRENT_LIST_DIR})
|
|
|
6
6
|
|
|
7
7
|
option(FMUTOOL_WARNINGS_AS_ERRORS "Treat compiler warnings as errors" OFF)
|
|
8
8
|
option(FMUTOOL_STRICT_CONVERSION "Enable -Wconversion / -Wsign-conversion" OFF)
|
|
9
|
+
option(FMUTOOL_SANITIZE "Build with AddressSanitizer and UndefinedBehaviorSanitizer (GCC, Clang)" OFF)
|
|
9
10
|
|
|
10
11
|
set(CMAKE_C_STANDARD 23)
|
|
11
12
|
|
|
@@ -83,6 +84,19 @@ else()
|
|
|
83
84
|
if(FMUTOOL_STRICT_CONVERSION)
|
|
84
85
|
target_compile_options(fmutool_flags INTERFACE -Wconversion -Wsign-conversion)
|
|
85
86
|
endif()
|
|
87
|
+
if(FMUTOOL_SANITIZE)
|
|
88
|
+
# Any undefined behaviour aborts, so that a test fails on it.
|
|
89
|
+
target_compile_options(fmutool_flags INTERFACE
|
|
90
|
+
-fsanitize=address,undefined
|
|
91
|
+
-fno-sanitize-recover=undefined
|
|
92
|
+
-fno-omit-frame-pointer
|
|
93
|
+
-g
|
|
94
|
+
)
|
|
95
|
+
target_link_options(fmutool_flags INTERFACE -fsanitize=address,undefined)
|
|
96
|
+
endif()
|
|
97
|
+
endif()
|
|
98
|
+
if(FMUTOOL_SANITIZE AND MSVC)
|
|
99
|
+
message(FATAL_ERROR "FMUTOOL_SANITIZE is supported with GCC and Clang only.")
|
|
86
100
|
endif()
|
|
87
101
|
|
|
88
102
|
# -----------------------------------------------------------------------------
|
|
@@ -142,5 +156,6 @@ function(fmutool_summary)
|
|
|
142
156
|
message(STATUS " Build type : ${CMAKE_BUILD_TYPE}${CMAKE_CONFIGURATION_TYPES}")
|
|
143
157
|
message(STATUS " IPO/LTO : ${FMUTOOL_IPO_SUPPORTED}")
|
|
144
158
|
message(STATUS " Options : FMUTOOL_WARNINGS_AS_ERRORS=${FMUTOOL_WARNINGS_AS_ERRORS}"
|
|
145
|
-
" FMUTOOL_STRICT_CONVERSION=${FMUTOOL_STRICT_CONVERSION} FMUTOOL_PGO=${FMUTOOL_PGO}"
|
|
159
|
+
" FMUTOOL_STRICT_CONVERSION=${FMUTOOL_STRICT_CONVERSION} FMUTOOL_PGO=${FMUTOOL_PGO}"
|
|
160
|
+
" FMUTOOL_SANITIZE=${FMUTOOL_SANITIZE}")
|
|
146
161
|
endfunction()
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
cmake_minimum_required(VERSION 3.21)
|
|
2
|
+
project(container C)
|
|
3
|
+
include(${CMAKE_CURRENT_SOURCE_DIR}/../cmake/fmutool.cmake)
|
|
4
|
+
|
|
5
|
+
# -----------------------------------------------------------------------------
|
|
6
|
+
# FMI sanity check: FMI 2.0 and 3.0 data types must share the same storage.
|
|
7
|
+
# -----------------------------------------------------------------------------
|
|
8
|
+
try_run(test_fmi test_fmi_compilation
|
|
9
|
+
${CMAKE_CURRENT_BINARY_DIR}
|
|
10
|
+
${CMAKE_CURRENT_SOURCE_DIR}/test_fmi.c
|
|
11
|
+
CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${CMAKE_CURRENT_SOURCE_DIR}/../fmu_manipulation_toolbox/resources/fmi"
|
|
12
|
+
COMPILE_OUTPUT_VARIABLE test_fmi_compilation_output
|
|
13
|
+
RUN_OUTPUT_VARIABLE test_fmi_output
|
|
14
|
+
)
|
|
15
|
+
if(NOT test_fmi_compilation OR NOT test_fmi EQUAL 0)
|
|
16
|
+
message(FATAL_ERROR "FMI sanity check failed:\n${test_fmi_compilation_output}${test_fmi_output}")
|
|
17
|
+
endif()
|
|
18
|
+
|
|
19
|
+
# -----------------------------------------------------------------------------
|
|
20
|
+
# container: the shared library embedded in the container FMUs.
|
|
21
|
+
# -----------------------------------------------------------------------------
|
|
22
|
+
set(CONTAINER_SOURCES
|
|
23
|
+
config.c config.h
|
|
24
|
+
container.c container.h
|
|
25
|
+
convert.c convert.h
|
|
26
|
+
datalog.c datalog.h
|
|
27
|
+
fmi2.c
|
|
28
|
+
fmi3.c
|
|
29
|
+
fmu.c fmu.h
|
|
30
|
+
hash.c hash.h
|
|
31
|
+
library.c library.h
|
|
32
|
+
logger.c logger.h
|
|
33
|
+
profile.c profile.h
|
|
34
|
+
solver.c solver.h
|
|
35
|
+
thread.c thread.h
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
# container_link_platform(<target>): system libraries of the runtime.
|
|
39
|
+
function(container_link_platform target)
|
|
40
|
+
if(WIN32)
|
|
41
|
+
target_link_libraries(${target} PRIVATE Imagehlp.lib)
|
|
42
|
+
elseif(NOT APPLE)
|
|
43
|
+
target_link_libraries(${target} PRIVATE Threads::Threads)
|
|
44
|
+
endif()
|
|
45
|
+
endfunction()
|
|
46
|
+
|
|
47
|
+
add_library(container SHARED ${CONTAINER_SOURCES})
|
|
48
|
+
container_link_platform(container)
|
|
49
|
+
fmutool_native_target(container)
|
|
50
|
+
|
|
51
|
+
# -----------------------------------------------------------------------------
|
|
52
|
+
# Native tests: the sources of the runtime compiled again with the tests, so
|
|
53
|
+
# that the internal functions can be called (the shared library exports only
|
|
54
|
+
# the FMI API). Run with: ctest --test-dir <build dir> -C <config>
|
|
55
|
+
# -----------------------------------------------------------------------------
|
|
56
|
+
include(CTest)
|
|
57
|
+
if(BUILD_TESTING)
|
|
58
|
+
add_executable(container_tests
|
|
59
|
+
${CONTAINER_SOURCES}
|
|
60
|
+
tests/test.h
|
|
61
|
+
tests/test_main.c
|
|
62
|
+
tests/test_config.c
|
|
63
|
+
tests/test_configure.c
|
|
64
|
+
tests/test_logger.c
|
|
65
|
+
tests/test_locale.c
|
|
66
|
+
tests/test_malformed.c
|
|
67
|
+
tests/test_datalog.c
|
|
68
|
+
tests/test_thread.c
|
|
69
|
+
tests/test_threads_lifecycle.c
|
|
70
|
+
)
|
|
71
|
+
target_link_libraries(container_tests PRIVATE fmutool_flags)
|
|
72
|
+
target_include_directories(container_tests PRIVATE
|
|
73
|
+
${CMAKE_CURRENT_SOURCE_DIR}
|
|
74
|
+
${FMUTOOL_CMAKE_DIR}/../fmu_manipulation_toolbox/resources/fmi
|
|
75
|
+
${CMAKE_CURRENT_BINARY_DIR} # version.h
|
|
76
|
+
)
|
|
77
|
+
target_compile_definitions(container_tests PRIVATE
|
|
78
|
+
TEST_DATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/tests/data"
|
|
79
|
+
TEST_BINARY_DIR="${CMAKE_CURRENT_BINARY_DIR}"
|
|
80
|
+
)
|
|
81
|
+
container_link_platform(container_tests)
|
|
82
|
+
add_dependencies(container_tests version_h)
|
|
83
|
+
add_test(NAME container_tests COMMAND container_tests)
|
|
84
|
+
|
|
85
|
+
# FMI 2.0 FMU of the tests, embedded in the fixtures made of tests/data/one_fmu/container.txt.in.
|
|
86
|
+
add_library(stub_fmu MODULE tests/stub_fmu.c)
|
|
87
|
+
target_link_libraries(stub_fmu PRIVATE fmutool_flags)
|
|
88
|
+
target_include_directories(stub_fmu PRIVATE ${FMUTOOL_CMAKE_DIR}/../fmu_manipulation_toolbox/resources/fmi)
|
|
89
|
+
if(WIN32)
|
|
90
|
+
set(_stub_suffix ".dll")
|
|
91
|
+
elseif(APPLE)
|
|
92
|
+
set(_stub_suffix ".dylib")
|
|
93
|
+
else()
|
|
94
|
+
set(_stub_suffix ".so")
|
|
95
|
+
endif()
|
|
96
|
+
set_target_properties(stub_fmu PROPERTIES PREFIX "" SUFFIX "${_stub_suffix}" C_VISIBILITY_PRESET hidden)
|
|
97
|
+
add_dependencies(container_tests stub_fmu)
|
|
98
|
+
|
|
99
|
+
set(TEST_FIXTURES_DIR "${CMAKE_CURRENT_BINARY_DIR}/fixtures")
|
|
100
|
+
target_compile_definitions(container_tests PRIVATE TEST_FIXTURES_DIR="${TEST_FIXTURES_DIR}")
|
|
101
|
+
|
|
102
|
+
# container_fixture(<name> <guid> <mt>): container.txt with the stub FMU, given its GUID (which selects its
|
|
103
|
+
# behaviour, see tests/stub_fmu.c) and the multi-thread flag.
|
|
104
|
+
function(container_fixture name guid mt)
|
|
105
|
+
set(GUID "${guid}")
|
|
106
|
+
set(MT "${mt}")
|
|
107
|
+
set(_dir "${TEST_FIXTURES_DIR}/${name}")
|
|
108
|
+
configure_file(tests/data/one_fmu/container.txt.in "${_dir}/container.txt" @ONLY)
|
|
109
|
+
add_custom_command(TARGET stub_fmu POST_BUILD
|
|
110
|
+
COMMAND ${CMAKE_COMMAND} -E make_directory "${_dir}/00/binaries/${FMI_PLATFORM}"
|
|
111
|
+
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:stub_fmu> "${_dir}/00/binaries/${FMI_PLATFORM}/stub${_stub_suffix}"
|
|
112
|
+
)
|
|
113
|
+
endfunction()
|
|
114
|
+
container_fixture(one_fmu "{stub}" 0)
|
|
115
|
+
container_fixture(one_fmu_datalog "{stub}" 0)
|
|
116
|
+
set(DATALOG_FILE "${TEST_FIXTURES_DIR}/one_fmu_datalog/datalog.csv")
|
|
117
|
+
configure_file(tests/data/one_fmu/datalog.txt.in "${TEST_FIXTURES_DIR}/one_fmu_datalog/datalog.txt" @ONLY)
|
|
118
|
+
container_fixture(one_fmu_mt "{stub}" 1)
|
|
119
|
+
container_fixture(mt_instantiate_fails "{stub-fail-instantiate}" 1)
|
|
120
|
+
container_fixture(malformed "{stub}" 0) # container.txt rewritten by the tests
|
|
121
|
+
endif()
|
|
122
|
+
|
|
123
|
+
fmutool_summary()
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* Return 0, -1 at the end of the file, -2 when the buffer cannot grow.
|
|
16
16
|
*/
|
|
17
17
|
static int read_line(config_file_t* config_file) {
|
|
18
|
+
const logger_t *logger = config_file->logger;
|
|
18
19
|
size_t len = 0;
|
|
19
20
|
|
|
20
21
|
config_file->line[0] = '\0';
|
|
@@ -27,7 +28,7 @@ static int read_line(config_file_t* config_file) {
|
|
|
27
28
|
|
|
28
29
|
char *line = realloc(config_file->line, 2 * config_file->line_size);
|
|
29
30
|
if (!line) {
|
|
30
|
-
|
|
31
|
+
LOGGER_ERROR("Cannot allocate memory to read line #%u.", config_file->line_number + 1);
|
|
31
32
|
return -2;
|
|
32
33
|
}
|
|
33
34
|
config_file->line = line;
|
|
@@ -38,8 +39,10 @@ static int read_line(config_file_t* config_file) {
|
|
|
38
39
|
return -1;
|
|
39
40
|
config_file->line_number += 1;
|
|
40
41
|
|
|
41
|
-
/* CHOMP() */
|
|
42
|
+
/* CHOMP(): "\n" or "\r\n" (a file written on Windows, read on another platform) */
|
|
42
43
|
if (config_file->line[len - 1] == '\n')
|
|
44
|
+
config_file->line[--len] = '\0';
|
|
45
|
+
if (len > 0 && config_file->line[len - 1] == '\r')
|
|
43
46
|
config_file->line[len - 1] = '\0';
|
|
44
47
|
|
|
45
48
|
return 0;
|
|
@@ -73,9 +76,10 @@ int config_file_version(config_file_t* config_file, int *version) {
|
|
|
73
76
|
}
|
|
74
77
|
|
|
75
78
|
|
|
76
|
-
int config_file_open(config_file_t* config_file, const char *dirname, const char *filename) {
|
|
79
|
+
int config_file_open(config_file_t* config_file, const logger_t *logger, const char *dirname, const char *filename) {
|
|
77
80
|
char full_path[CONFIG_FILE_SZ];
|
|
78
81
|
|
|
82
|
+
config_file->logger = logger;
|
|
79
83
|
STRLCPY(full_path, dirname, sizeof(full_path));
|
|
80
84
|
STRLCAT(full_path, "/", sizeof(full_path));
|
|
81
85
|
STRLCAT(full_path, filename, sizeof(full_path));
|
|
@@ -83,20 +87,20 @@ int config_file_open(config_file_t* config_file, const char *dirname, const char
|
|
|
83
87
|
config_file->line = NULL;
|
|
84
88
|
config_file->fp = fopen(full_path, "rt");
|
|
85
89
|
if (! config_file->fp) {
|
|
86
|
-
|
|
90
|
+
LOGGER_DEBUG("Cannot open configuration file '%s'.", full_path);
|
|
87
91
|
return -1;
|
|
88
92
|
}
|
|
89
93
|
|
|
90
94
|
config_file->line_size = CONFIG_FILE_SZ;
|
|
91
95
|
config_file->line = malloc(config_file->line_size);
|
|
92
96
|
if (! config_file->line) {
|
|
93
|
-
|
|
97
|
+
LOGGER_ERROR("Cannot allocate memory to read configuration file '%s'.", full_path);
|
|
94
98
|
fclose(config_file->fp);
|
|
95
99
|
config_file->fp = NULL;
|
|
96
100
|
return -1;
|
|
97
101
|
}
|
|
98
102
|
|
|
99
|
-
|
|
103
|
+
LOGGER_DEBUG("Reading '%s'...", filename);
|
|
100
104
|
|
|
101
105
|
config_file->line_number = 0;
|
|
102
106
|
|
|
@@ -114,6 +118,7 @@ void config_file_close(config_file_t* config_file) {
|
|
|
114
118
|
}
|
|
115
119
|
|
|
116
120
|
void config_file_error(config_file_t *config_file, unsigned int code_line_number, const char *message, ...) {
|
|
121
|
+
const logger_t *logger = config_file->logger;
|
|
117
122
|
char message_buffer[256];
|
|
118
123
|
va_list ap;
|
|
119
124
|
|
|
@@ -121,5 +126,70 @@ void config_file_error(config_file_t *config_file, unsigned int code_line_number
|
|
|
121
126
|
vsnprintf(message_buffer, sizeof(message_buffer), message, ap);
|
|
122
127
|
va_end(ap);
|
|
123
128
|
|
|
124
|
-
|
|
129
|
+
LOGGER_ERROR("Configuration error(%u): line #%u: %s", code_line_number, config_file->line_number, message_buffer);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
/*
|
|
134
|
+
* C numeric locale of the current thread: the configuration files and the datalog use a decimal dot whatever the
|
|
135
|
+
* locale of the host. enter / leave switch the current thread only; they may be called several times.
|
|
136
|
+
*/
|
|
137
|
+
int config_c_locale_init(config_c_locale_t *c_locale) {
|
|
138
|
+
#ifdef _WIN32
|
|
139
|
+
c_locale->per_thread = 0;
|
|
140
|
+
c_locale->previous = NULL;
|
|
141
|
+
c_locale->locale = _create_locale(LC_NUMERIC, "C");
|
|
142
|
+
return c_locale->locale ? 0 : -1;
|
|
143
|
+
#else
|
|
144
|
+
c_locale->previous = (locale_t)0;
|
|
145
|
+
locale_t base = duplocale(LC_GLOBAL_LOCALE);
|
|
146
|
+
if (!base)
|
|
147
|
+
return -1;
|
|
148
|
+
c_locale->c_locale = newlocale(LC_NUMERIC_MASK, "C", base);
|
|
149
|
+
if (!c_locale->c_locale) {
|
|
150
|
+
freelocale(base);
|
|
151
|
+
return -1;
|
|
152
|
+
}
|
|
153
|
+
return 0;
|
|
154
|
+
#endif
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
void config_c_locale_enter(config_c_locale_t *c_locale) {
|
|
159
|
+
#ifdef _WIN32
|
|
160
|
+
c_locale->per_thread = _configthreadlocale(_ENABLE_PER_THREAD_LOCALE);
|
|
161
|
+
const char *previous = setlocale(LC_NUMERIC, NULL);
|
|
162
|
+
c_locale->previous = previous ? _strdup(previous) : NULL;
|
|
163
|
+
setlocale(LC_NUMERIC, "C");
|
|
164
|
+
#else
|
|
165
|
+
c_locale->previous = uselocale(c_locale->c_locale);
|
|
166
|
+
#endif
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
void config_c_locale_leave(config_c_locale_t *c_locale) {
|
|
171
|
+
#ifdef _WIN32
|
|
172
|
+
if (c_locale->previous) {
|
|
173
|
+
setlocale(LC_NUMERIC, c_locale->previous);
|
|
174
|
+
free(c_locale->previous);
|
|
175
|
+
c_locale->previous = NULL;
|
|
176
|
+
}
|
|
177
|
+
if (c_locale->per_thread != -1)
|
|
178
|
+
_configthreadlocale(c_locale->per_thread);
|
|
179
|
+
#else
|
|
180
|
+
if (c_locale->previous)
|
|
181
|
+
uselocale(c_locale->previous);
|
|
182
|
+
c_locale->previous = (locale_t)0;
|
|
183
|
+
#endif
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
void config_c_locale_free(config_c_locale_t *c_locale) {
|
|
188
|
+
#ifdef _WIN32
|
|
189
|
+
free(c_locale->previous);
|
|
190
|
+
c_locale->previous = NULL;
|
|
191
|
+
_free_locale(c_locale->locale);
|
|
192
|
+
#else
|
|
193
|
+
freelocale(c_locale->c_locale);
|
|
194
|
+
#endif
|
|
125
195
|
}
|
|
@@ -6,6 +6,10 @@ extern "C" {
|
|
|
6
6
|
# endif
|
|
7
7
|
|
|
8
8
|
#include <stdio.h>
|
|
9
|
+
#include <locale.h>
|
|
10
|
+
#ifdef __APPLE__
|
|
11
|
+
# include <xlocale.h>
|
|
12
|
+
#endif
|
|
9
13
|
|
|
10
14
|
|
|
11
15
|
#ifdef _WIN32
|
|
@@ -25,7 +29,10 @@ extern "C" {
|
|
|
25
29
|
C O N F I G _ F I L E _ T
|
|
26
30
|
----------------------------------------------------------------------------*/
|
|
27
31
|
#define CONFIG_FILE_SZ 4096 /* size of the path buffers, initial size of the line buffer */
|
|
32
|
+
struct logger_s;
|
|
33
|
+
|
|
28
34
|
typedef struct {
|
|
35
|
+
const struct logger_s *logger; /* logger of the container that reads the file */
|
|
29
36
|
FILE *fp;
|
|
30
37
|
char *line; /* current line, grown to hold a line of any length */
|
|
31
38
|
size_t line_size;
|
|
@@ -33,14 +40,36 @@ typedef struct {
|
|
|
33
40
|
} config_file_t;
|
|
34
41
|
|
|
35
42
|
|
|
43
|
+
/*----------------------------------------------------------------------------
|
|
44
|
+
C O N F I G _ C _ L O C A L E _ T
|
|
45
|
+
----------------------------------------------------------------------------*/
|
|
46
|
+
|
|
47
|
+
/* C numeric locale (decimal dot) for the current thread only: the locale of the host is never changed. */
|
|
48
|
+
typedef struct {
|
|
49
|
+
#ifdef _WIN32
|
|
50
|
+
_locale_t locale; /* C numeric locale, for the _l functions (_fprintf_l...) */
|
|
51
|
+
int per_thread; /* setting of _configthreadlocale() before enter */
|
|
52
|
+
char *previous; /* LC_NUMERIC of the thread before enter */
|
|
53
|
+
#else
|
|
54
|
+
locale_t c_locale; /* copy of the global locale with the C numeric category */
|
|
55
|
+
locale_t previous; /* locale of the thread before enter */
|
|
56
|
+
#endif
|
|
57
|
+
} config_c_locale_t;
|
|
58
|
+
|
|
59
|
+
|
|
36
60
|
/*----------------------------------------------------------------------------
|
|
37
61
|
P R O T O T Y P E S
|
|
38
62
|
----------------------------------------------------------------------------*/
|
|
39
63
|
|
|
40
64
|
int get_line(config_file_t* config_file);
|
|
41
65
|
extern int config_file_version(config_file_t* config_file, int *version);
|
|
42
|
-
extern int config_file_open(config_file_t* config_file, const
|
|
66
|
+
extern int config_file_open(config_file_t* config_file, const struct logger_s *logger, const char *dirname,
|
|
67
|
+
const char *filename);
|
|
43
68
|
extern void config_file_close(config_file_t* config_file);
|
|
69
|
+
extern int config_c_locale_init(config_c_locale_t *c_locale);
|
|
70
|
+
extern void config_c_locale_enter(config_c_locale_t *c_locale);
|
|
71
|
+
extern void config_c_locale_leave(config_c_locale_t *c_locale);
|
|
72
|
+
extern void config_c_locale_free(config_c_locale_t *c_locale);
|
|
44
73
|
extern void config_file_error(config_file_t *config_file, unsigned int code_line_number, const char *message, ...) __attribute__((__format__(__printf__, 3, 4)));
|
|
45
74
|
|
|
46
75
|
# ifdef __cplusplus
|