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.
Files changed (313) hide show
  1. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/CHANGELOG.md +92 -4
  2. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/PKG-INFO +2 -2
  3. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/cmake/fmutool.cmake +16 -1
  4. fmu_manipulation_toolbox-2.1.dev0/container/CMakeLists.txt +123 -0
  5. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/config.c +77 -7
  6. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/config.h +30 -1
  7. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/container.c +549 -546
  8. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/container.h +35 -73
  9. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/convert.c +39 -3
  10. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/convert.h +4 -1
  11. fmu_manipulation_toolbox-2.1.dev0/container/datalog.c +283 -0
  12. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/datalog.h +12 -20
  13. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/fmi2.c +46 -35
  14. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/fmi3.c +51 -37
  15. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/fmu.c +154 -163
  16. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/fmu.h +41 -25
  17. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/library.c +63 -23
  18. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/library.h +2 -1
  19. fmu_manipulation_toolbox-2.1.dev0/container/logger.c +100 -0
  20. fmu_manipulation_toolbox-2.1.dev0/container/logger.h +68 -0
  21. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/profile.c +2 -2
  22. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/profile.h +2 -1
  23. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/solver.c +29 -20
  24. fmu_manipulation_toolbox-2.1.dev0/container/tests/data/empty/container.txt +46 -0
  25. fmu_manipulation_toolbox-2.1.dev0/container/tests/data/one_fmu/container.txt.in +199 -0
  26. fmu_manipulation_toolbox-2.1.dev0/container/tests/data/one_fmu/datalog.txt.in +33 -0
  27. fmu_manipulation_toolbox-2.1.dev0/container/tests/stub_fmu.c +180 -0
  28. fmu_manipulation_toolbox-2.1.dev0/container/tests/test.h +66 -0
  29. fmu_manipulation_toolbox-2.1.dev0/container/tests/test_config.c +99 -0
  30. fmu_manipulation_toolbox-2.1.dev0/container/tests/test_configure.c +36 -0
  31. fmu_manipulation_toolbox-2.1.dev0/container/tests/test_datalog.c +73 -0
  32. fmu_manipulation_toolbox-2.1.dev0/container/tests/test_locale.c +79 -0
  33. fmu_manipulation_toolbox-2.1.dev0/container/tests/test_logger.c +109 -0
  34. fmu_manipulation_toolbox-2.1.dev0/container/tests/test_main.c +74 -0
  35. fmu_manipulation_toolbox-2.1.dev0/container/tests/test_malformed.c +209 -0
  36. fmu_manipulation_toolbox-2.1.dev0/container/tests/test_thread.c +113 -0
  37. fmu_manipulation_toolbox-2.1.dev0/container/tests/test_threads_lifecycle.c +49 -0
  38. fmu_manipulation_toolbox-2.1.dev0/container/thread.c +160 -0
  39. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/thread.h +28 -3
  40. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/_version.py +3 -3
  41. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/assembly.py +158 -23
  42. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/cli/fmutool.py +7 -2
  43. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/cli/utils.py +8 -0
  44. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/container/builder.py +35 -12
  45. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/__main__.py +49 -21
  46. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/assembly_io.py +52 -4
  47. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/details/link_assistant.py +12 -7
  48. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/details/wire_detail.py +45 -1
  49. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/graph/constants.py +4 -0
  50. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/graph/node.py +6 -0
  51. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/graph/wire.py +40 -4
  52. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/mcp_bridge.py +39 -13
  53. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/tree/model.py +16 -2
  54. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/tree/panel.py +11 -5
  55. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/tree/widget.py +118 -8
  56. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmueditor/__main__.py +10 -4
  57. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmutool/__main__.py +44 -14
  58. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/helper.py +5 -352
  59. fmu_manipulation_toolbox-2.1.dev0/fmu_manipulation_toolbox/gui/log.py +617 -0
  60. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/help.py +6 -3
  61. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox.egg-info/PKG-INFO +2 -2
  62. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox.egg-info/SOURCES.txt +19 -0
  63. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox.egg-info/requires.txt +1 -1
  64. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox.egg-info/scm_file_list.json +27 -0
  65. fmu_manipulation_toolbox-2.1.dev0/fmu_manipulation_toolbox.egg-info/scm_version.json +8 -0
  66. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/mkdocs.yml +1 -0
  67. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/pyproject.toml +1 -1
  68. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/remoting/server.c +2 -1
  69. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/_helpers/assertions.py +30 -0
  70. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/gui/test_assistant_qt_bridge.py +53 -0
  71. fmu_manipulation_toolbox-2.1.dev0/tests/gui/test_fmucontainer_architecture_wires.py +165 -0
  72. fmu_manipulation_toolbox-2.1.dev0/tests/gui/test_fmucontainer_open_file.py +76 -0
  73. fmu_manipulation_toolbox-2.1.dev0/tests/gui/test_fmucontainer_ssp_geometry.py +69 -0
  74. fmu_manipulation_toolbox-2.1.dev0/tests/gui/test_fmucontainer_step_size.py +152 -0
  75. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/gui/test_gui.py +88 -0
  76. fmu_manipulation_toolbox-2.1.dev0/tests/gui/test_gui_logging.py +470 -0
  77. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/gui/test_link_assistant.py +11 -0
  78. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_compile_sources.py +19 -0
  79. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_datalog.py +1 -1
  80. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_lsbus.py +5 -4
  81. fmu_manipulation_toolbox-2.1.dev0/tests/integration/test_ssp.py +202 -0
  82. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/make_carousel.py +95 -18
  83. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/screenshots.py +27 -1
  84. fmu_manipulation_toolbox-2.0b2/container/CMakeLists.txt +0 -44
  85. fmu_manipulation_toolbox-2.0b2/container/datalog.c +0 -257
  86. fmu_manipulation_toolbox-2.0b2/container/logger.c +0 -117
  87. fmu_manipulation_toolbox-2.0b2/container/logger.h +0 -44
  88. fmu_manipulation_toolbox-2.0b2/container/thread.c +0 -96
  89. fmu_manipulation_toolbox-2.0b2/fmu_manipulation_toolbox.egg-info/scm_version.json +0 -8
  90. fmu_manipulation_toolbox-2.0b2/tests/gui/test_gui_logging.py +0 -240
  91. fmu_manipulation_toolbox-2.0b2/tests/integration/test_ssp.py +0 -87
  92. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/.git_archival.txt +0 -0
  93. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/.gitattributes +0 -0
  94. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/.gitignore +0 -0
  95. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/CLAUDE.md +0 -0
  96. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/CONTRIBUTING.md +0 -0
  97. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/LICENSE.txt +0 -0
  98. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/MANIFEST.in +0 -0
  99. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/README.md +0 -0
  100. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/cmake/gen_version.cmake +0 -0
  101. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/cmake/pgo.cmake +0 -0
  102. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/cmake/version.h.in +0 -0
  103. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/build.bat +0 -0
  104. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/hash.c +0 -0
  105. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/hash.h +0 -0
  106. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/solver.h +0 -0
  107. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/container/test_fmi.c +0 -0
  108. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/__init__.py +0 -0
  109. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/__main__.py +0 -0
  110. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/assistant/__init__.py +0 -0
  111. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/assistant/analysis.py +0 -0
  112. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/assistant/auth.py +0 -0
  113. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/assistant/bridge.py +0 -0
  114. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/assistant/fmutools.py +0 -0
  115. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/assistant/headless.py +0 -0
  116. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/assistant/knowledge.py +0 -0
  117. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/assistant/models.py +0 -0
  118. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/assistant/paths.py +0 -0
  119. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/assistant/replay.py +0 -0
  120. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/assistant/server.py +0 -0
  121. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/checker.py +0 -0
  122. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/cli/__init__.py +0 -0
  123. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/cli/datalog2pcap.py +0 -0
  124. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/cli/fmucontainer.py +0 -0
  125. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/cli/fmusplit.py +0 -0
  126. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/cli/fmutool_mcp.py +0 -0
  127. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/compiler.py +0 -0
  128. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/container/__init__.py +0 -0
  129. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/container/arrays.py +0 -0
  130. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/container/embedded.py +0 -0
  131. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/container/errors.py +0 -0
  132. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/container/layout.py +0 -0
  133. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/container/rules.py +0 -0
  134. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/container/txt.py +0 -0
  135. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/container/types.py +0 -0
  136. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/__init__.py +0 -0
  137. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/__main__.py +0 -0
  138. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/__init__.py +0 -0
  139. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/details/__init__.py +0 -0
  140. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/details/configuration_detail.py +0 -0
  141. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/details/container_detail.py +0 -0
  142. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/details/fmu_detail.py +0 -0
  143. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/details/link_assistant_demo.py +0 -0
  144. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/details/link_matching.py +0 -0
  145. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/details/stack.py +0 -0
  146. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/graph/__init__.py +0 -0
  147. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/graph/node_info_dialog.py +0 -0
  148. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/graph/scene.py +0 -0
  149. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/graph/view.py +0 -0
  150. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/graph/widget.py +0 -0
  151. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/tree/__init__.py +0 -0
  152. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmucontainer/tree/sync.py +0 -0
  153. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmueditor/__init__.py +0 -0
  154. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/fmutool/__init__.py +0 -0
  155. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/gui/style.py +0 -0
  156. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/ls.py +0 -0
  157. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/model_description.py +0 -0
  158. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/operations.py +0 -0
  159. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/remoting.py +0 -0
  160. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/checkbox-checked-disabled.png +0 -0
  161. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/checkbox-checked-hover.png +0 -0
  162. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/checkbox-checked.png +0 -0
  163. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/checkbox-unchecked-disabled.png +0 -0
  164. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/checkbox-unchecked-hover.png +0 -0
  165. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/checkbox-unchecked.png +0 -0
  166. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/container.png +0 -0
  167. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/drop_fmu.png +0 -0
  168. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi/fmi2FunctionTypes.h +0 -0
  169. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi/fmi2Functions.h +0 -0
  170. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi/fmi2TypesPlatform.h +0 -0
  171. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi/fmi3FunctionTypes.h +0 -0
  172. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi/fmi3Functions.h +0 -0
  173. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi/fmi3PlatformTypes.h +0 -0
  174. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-2.0/fmi2Annotation.xsd +0 -0
  175. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-2.0/fmi2AttributeGroups.xsd +0 -0
  176. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-2.0/fmi2ModelDescription.xsd +0 -0
  177. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-2.0/fmi2ScalarVariable.xsd +0 -0
  178. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-2.0/fmi2Type.xsd +0 -0
  179. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-2.0/fmi2Unit.xsd +0 -0
  180. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-2.0/fmi2VariableDependency.xsd +0 -0
  181. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3Annotation.xsd +0 -0
  182. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3AttributeGroups.xsd +0 -0
  183. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3BuildDescription.xsd +0 -0
  184. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3InterfaceType.xsd +0 -0
  185. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3LayeredStandardManifest.xsd +0 -0
  186. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3ModelDescription.xsd +0 -0
  187. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3Terminal.xsd +0 -0
  188. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3TerminalsAndIcons.xsd +0 -0
  189. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3Type.xsd +0 -0
  190. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3Unit.xsd +0 -0
  191. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3Variable.xsd +0 -0
  192. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmi-3.0/fmi3VariableDependency.xsd +0 -0
  193. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmu.png +0 -0
  194. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmu_manipulation_toolbox.png +0 -0
  195. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmucontainer.png +0 -0
  196. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmueditor.png +0 -0
  197. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/fmutool.png +0 -0
  198. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/help.png +0 -0
  199. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/icon-round.png +0 -0
  200. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/icon.png +0 -0
  201. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/icon_fmu.png +0 -0
  202. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/license.txt +0 -0
  203. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/mask.png +0 -0
  204. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/radio-checked-disabled.png +0 -0
  205. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/radio-checked-hover.png +0 -0
  206. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/radio-checked.png +0 -0
  207. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/radio-unchecked-disabled.png +0 -0
  208. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/radio-unchecked-hover.png +0 -0
  209. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/resources/radio-unchecked.png +0 -0
  210. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/split.py +0 -0
  211. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/terminals.py +0 -0
  212. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/textfiles.py +0 -0
  213. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox/version.py +0 -0
  214. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox.egg-info/dependency_links.txt +0 -0
  215. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox.egg-info/entry_points.txt +0 -0
  216. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/fmu_manipulation_toolbox.egg-info/top_level.txt +0 -0
  217. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/overrides/main.html +0 -0
  218. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/remoting/CMakeLists.txt +0 -0
  219. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/remoting/build.bat +0 -0
  220. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/remoting/client.c +0 -0
  221. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/remoting/client.h +0 -0
  222. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/remoting/communication.c +0 -0
  223. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/remoting/communication.h +0 -0
  224. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/remoting/config.h.in +0 -0
  225. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/remoting/process.c +0 -0
  226. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/remoting/process.h +0 -0
  227. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/remoting/server.h +0 -0
  228. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/requirements.txt +0 -0
  229. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/setup.cfg +0 -0
  230. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/.coveragerc +0 -0
  231. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/_helpers/__init__.py +0 -0
  232. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/_helpers/archive.py +0 -0
  233. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/_helpers/assistant_bridge.py +0 -0
  234. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/_helpers/mcp_budget.py +0 -0
  235. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/_helpers/simulation.py +0 -0
  236. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/benchmarks/bench_manipulation.py +0 -0
  237. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/conftest.py +0 -0
  238. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/gui/test_fmucontainer_instances.py +0 -0
  239. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/gui/test_fmucontainer_reset_ports.py +0 -0
  240. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/gui/test_link_assistant_wire.py +0 -0
  241. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_array.py +0 -0
  242. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_assistant_stdio_server.py +0 -0
  243. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_cli.py +0 -0
  244. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_cli_errors.py +0 -0
  245. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_container.py +0 -0
  246. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_container_enumeration.py +0 -0
  247. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_container_perf.py +0 -0
  248. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_container_reset.py +0 -0
  249. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_container_txt.py +0 -0
  250. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_container_xml.py +0 -0
  251. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_me.py +0 -0
  252. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_operations_invariants.py +0 -0
  253. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_probe_fmu.py +0 -0
  254. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_remoting.py +0 -0
  255. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/integration/test_split.py +0 -0
  256. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/pytest.ini +0 -0
  257. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_assembly_errors.py +0 -0
  258. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_assembly_instances.py +0 -0
  259. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_assembly_parsing.py +0 -0
  260. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_assistant_analysis.py +0 -0
  261. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_assistant_auth.py +0 -0
  262. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_assistant_budget.py +0 -0
  263. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_assistant_fmutools.py +0 -0
  264. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_assistant_headless.py +0 -0
  265. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_assistant_server_contract.py +0 -0
  266. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_assistant_server_runtime.py +0 -0
  267. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_assistant_server_tools.py +0 -0
  268. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_checker.py +0 -0
  269. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_checker_loading.py +0 -0
  270. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_checker_semantic.py +0 -0
  271. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_compiler.py +0 -0
  272. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_container_internals.py +0 -0
  273. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_fmu_descriptor_cache.py +0 -0
  274. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_fmu_lifecycle.py +0 -0
  275. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_link_matching.py +0 -0
  276. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_model_description.py +0 -0
  277. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_model_exchange_sizes.py +0 -0
  278. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_operations.py +0 -0
  279. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_operations_conformity.py +0 -0
  280. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_operations_dependencies.py +0 -0
  281. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_operations_errors.py +0 -0
  282. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_split_parsing.py +0 -0
  283. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_terminals.py +0 -0
  284. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_textfiles.py +0 -0
  285. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_xml_assertions.py +0 -0
  286. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tests/unit/test_xml_roundtrip.py +0 -0
  287. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/bench_container.py +0 -0
  288. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/compare_traces.py +0 -0
  289. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/dist_inventory.py +0 -0
  290. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/Probe10ms.fmu +0 -0
  291. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/Probe20ms.fmu +0 -0
  292. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/Probe50ms.fmu +0 -0
  293. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/README.md +0 -0
  294. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/make_probe.py +0 -0
  295. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/probe.c +0 -0
  296. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/README.md +0 -0
  297. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/S1.json +0 -0
  298. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/S2.json +0 -0
  299. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/S3.json +0 -0
  300. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/S4a.json +0 -0
  301. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/S4b.json +0 -0
  302. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/S4c.json +0 -0
  303. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/S4d.json +0 -0
  304. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/S5j.json +0 -0
  305. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/S5r.json +0 -0
  306. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/S5s.json +0 -0
  307. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/S6m.json +0 -0
  308. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/S6s.json +0 -0
  309. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/run_container.py +0 -0
  310. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/simulink/build_scenarios.m +0 -0
  311. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/simulink/probe_scenarios.m +0 -0
  312. {fmu_manipulation_toolbox-2.0b2 → fmu_manipulation_toolbox-2.1.dev0}/tools/probe_fmu/scenarios/simulink/probe_simulink_api.m +0 -0
  313. {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 1.9.4.2, by theme: 🟢 **ADDED** new feature, 🔵 **CHANGED** change of behaviour or
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 whole log (`DEBUG`) and copies it on the
266
- standard output; without it, nothing is written on the standard output (the tree view and the AI Assistant used to
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.0b2
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: coverage-badge>=1.1.2; extra == "test"
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
- logger(LOGGER_ERROR, "Cannot allocate memory to read line #%u.", config_file->line_number + 1);
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
- logger(LOGGER_DEBUG, "Cannot open configuration file '%s'.", full_path);
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
- logger(LOGGER_ERROR, "Cannot allocate memory to read configuration file '%s'.", full_path);
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
- logger(LOGGER_DEBUG, "Reading '%s'...", filename);
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
- logger(LOGGER_ERROR, "Configuration error(%u): line #%u: %s", code_line_number, config_file->line_number, message_buffer);
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 char *dirname, const char *filename);
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