fmu-manipulation-toolbox 1.9.1.3__py3-none-any.whl → 1.9.2b2__py3-none-any.whl

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 (32) hide show
  1. fmu_manipulation_toolbox/__main__.py +2 -2
  2. fmu_manipulation_toolbox/__version__.py +1 -1
  3. fmu_manipulation_toolbox/assembly.py +12 -8
  4. fmu_manipulation_toolbox/checker.py +4 -2
  5. fmu_manipulation_toolbox/cli/fmucontainer.py +27 -19
  6. fmu_manipulation_toolbox/cli/fmusplit.py +5 -2
  7. fmu_manipulation_toolbox/cli/fmutool.py +8 -3
  8. fmu_manipulation_toolbox/cli/utils.py +11 -1
  9. fmu_manipulation_toolbox/container.py +292 -82
  10. fmu_manipulation_toolbox/ls.py +35 -0
  11. fmu_manipulation_toolbox/operations.py +3 -2
  12. fmu_manipulation_toolbox/resources/darwin64/container.dylib +0 -0
  13. fmu_manipulation_toolbox/resources/linux32/client_sm.so +0 -0
  14. fmu_manipulation_toolbox/resources/linux64/client_sm.so +0 -0
  15. fmu_manipulation_toolbox/resources/linux64/container.so +0 -0
  16. fmu_manipulation_toolbox/resources/win32/client_sm.dll +0 -0
  17. fmu_manipulation_toolbox/resources/win32/server_sm.exe +0 -0
  18. fmu_manipulation_toolbox/resources/win64/client_sm.dll +0 -0
  19. fmu_manipulation_toolbox/resources/win64/container.dll +0 -0
  20. fmu_manipulation_toolbox/resources/win64/server_sm.exe +0 -0
  21. fmu_manipulation_toolbox/split.py +59 -3
  22. fmu_manipulation_toolbox/terminals.py +137 -0
  23. fmu_manipulation_toolbox/version.py +1 -1
  24. fmu_manipulation_toolbox-1.9.2b2.dist-info/METADATA +42 -0
  25. {fmu_manipulation_toolbox-1.9.1.3.dist-info → fmu_manipulation_toolbox-1.9.2b2.dist-info}/RECORD +29 -29
  26. {fmu_manipulation_toolbox-1.9.1.3.dist-info → fmu_manipulation_toolbox-1.9.2b2.dist-info}/entry_points.txt +1 -1
  27. {fmu_manipulation_toolbox-1.9.1.3.dist-info → fmu_manipulation_toolbox-1.9.2b2.dist-info}/licenses/LICENSE.txt +1 -1
  28. fmu_manipulation_toolbox/gui.py +0 -749
  29. fmu_manipulation_toolbox/gui_style.py +0 -252
  30. fmu_manipulation_toolbox-1.9.1.3.dist-info/METADATA +0 -30
  31. {fmu_manipulation_toolbox-1.9.1.3.dist-info → fmu_manipulation_toolbox-1.9.2b2.dist-info}/WHEEL +0 -0
  32. {fmu_manipulation_toolbox-1.9.1.3.dist-info → fmu_manipulation_toolbox-1.9.2b2.dist-info}/top_level.txt +0 -0
@@ -19,7 +19,7 @@ class FMU:
19
19
  FMI2_TYPES = ('Real', 'Integer', 'String', 'Boolean', 'Enumeration')
20
20
  FMI3_TYPES = ('Float64', 'Float32',
21
21
  'Int8', 'UInt8', 'Int16', 'UInt16', 'Int32', 'UInt32', 'Int64', 'UInt64',
22
- 'String', 'Boolean', 'Enumeration')
22
+ 'String', 'Boolean', 'Enumeration', 'Clock', 'Binary')
23
23
 
24
24
  def __init__(self, fmu_filename):
25
25
  self.fmu_filename = fmu_filename
@@ -121,7 +121,8 @@ class Manipulation:
121
121
  TAGS_MODEL_STRUCTURE = ("InitialUnknowns", "Derivatives", "Outputs")
122
122
 
123
123
  def __init__(self, operation, fmu):
124
- self.output_filename = tempfile.mktemp()
124
+ (fd, self.output_filename) = tempfile.mkstemp()
125
+ os.close(fd) # File will be re-opened later
125
126
  self.out = None
126
127
  self.operation = operation
127
128
  self.parser = xml.parsers.expat.ParserCreate()
@@ -6,6 +6,15 @@ import xml.parsers.expat
6
6
  from typing import *
7
7
  from pathlib import Path
8
8
 
9
+ from .container import EmbeddedFMUPort
10
+ import logging
11
+ import zipfile
12
+ import json
13
+ import xml.parsers.expat
14
+
15
+ from typing import *
16
+ from pathlib import Path
17
+
9
18
  from .container import EmbeddedFMUPort
10
19
 
11
20
  logger = logging.getLogger("fmu_manipulation_toolbox")
@@ -48,7 +57,7 @@ class FMUSplitter:
48
57
  self.dir_set = self.get_dir_set()
49
58
 
50
59
  if "resources/container.txt" not in self.filenames_list:
51
- raise FMUSplitterError(f"FMU file {self.fmu_filename} is not an FMU Container.")
60
+ raise FMUSplitterError(f"FMU file {self.fmu_filename} is not an FMU Container.")
52
61
 
53
62
  self.directory.mkdir(exist_ok=True)
54
63
  logger.info(f"Preparing to split '{self.fmu_filename}' into '{self.directory}'")
@@ -123,6 +132,7 @@ class FMUSplitterDescription:
123
132
  "auto_local": False,
124
133
  "auto_link": False,
125
134
  }
135
+ self.format = 0
126
136
  self.fmu_filename_list = []
127
137
 
128
138
  # used for modelDescription.xml parsing
@@ -137,6 +147,7 @@ class FMUSplitterDescription:
137
147
  def get_line(file):
138
148
  for line in file:
139
149
  line = line.decode('utf-8').strip()
150
+ logger.debug(line)
140
151
  if line and not line.startswith("#"):
141
152
  return line
142
153
  raise StopIteration
@@ -189,7 +200,7 @@ class FMUSplitterDescription:
189
200
  self.config["mt"] = flags[0] == "1"
190
201
  self.config["profiling"] = self.get_line(file) == "1"
191
202
  self.config["sequential"] = False
192
- elif len(flags) == 3:
203
+ elif len(flags) >= 3:
193
204
  self.supported_fmi_types = EmbeddedFMUPort.ALL_TYPES
194
205
  self.config["mt"] = flags[0] == "1"
195
206
  self.config["profiling"] = flags[1] == "1"
@@ -263,6 +274,17 @@ class FMUSplitterDescription:
263
274
  fmu_vr = int(tokens[2])
264
275
  self.add_port(fmi_type, fmu_id, fmu_vr, container_vr)
265
276
 
277
+ @staticmethod
278
+ def get_nb(line):
279
+ try:
280
+ (nb_str, _) = line.split(" ")
281
+ nb = int(nb_str)
282
+ except ValueError:
283
+ nb = int(line)
284
+
285
+ return nb
286
+
287
+
266
288
  def parse_txt_file(self, txt_filename: str):
267
289
  self.parse_model_description(str(Path(txt_filename).parent.parent), ".")
268
290
  logger.debug(f"Parsing container file '{txt_filename}'")
@@ -275,6 +297,8 @@ class FMUSplitterDescription:
275
297
 
276
298
  for fmi_type in self.supported_fmi_types:
277
299
  nb_input = int(self.get_line(file))
300
+ logger.debug(f"INPUT of {fmu_filename} {fmi_type} : {nb_input}")
301
+
278
302
  for i in range(nb_input):
279
303
  local, vr = self.get_line(file).split(" ")
280
304
  try:
@@ -285,10 +309,26 @@ class FMUSplitterDescription:
285
309
  link.to_port.append(FMUSplitterPort(fmu_filename,
286
310
  self.vr_to_name[fmu_filename][fmi_type][int(vr)]["name"]))
287
311
 
288
- for fmi_type in self.supported_fmi_types:
312
+ #clocked
313
+ if not fmi_type == "clock":
314
+ nb_input = self.get_nb(self.get_line(file))
315
+ logger.debug(f"INPUT of {fmu_filename} {fmi_type} : CLOCKED {nb_input}")
316
+ for i in range(nb_input):
317
+ local, _clock, vr = self.get_line(file).split(" ")
318
+ try:
319
+ link = self.links[fmi_type][local]
320
+ except KeyError:
321
+ link = FMUSplitterLink()
322
+ self.links[fmi_type][local] = link
323
+ link.to_port.append(FMUSplitterPort(fmu_filename,
324
+ self.vr_to_name[fmu_filename][fmi_type][int(vr)]["name"]))
325
+
326
+ for fmi_type in self.supported_fmi_types[:-2]:
289
327
  nb_start = int(self.get_line(file))
328
+ logger.debug(f"nb start for {fmu_filename} {fmi_type} : {nb_start}")
290
329
  for i in range(nb_start):
291
330
  tokens = self.get_line(file).split(" ")
331
+ logger.error(tokens)
292
332
  vr = int(tokens[0])
293
333
  value = tokens[-1]
294
334
  start_definition = [fmu_filename, self.vr_to_name[fmu_filename][fmi_type][vr]["name"],
@@ -301,6 +341,7 @@ class FMUSplitterDescription:
301
341
  # Output per FMUs
302
342
  for fmi_type in self.supported_fmi_types:
303
343
  nb_output = int(self.get_line(file))
344
+ logger.debug(f"OUTPUT of {fmu_filename} {fmi_type} : {nb_output}")
304
345
 
305
346
  for i in range(nb_output):
306
347
  local, vr = self.get_line(file).split(" ")
@@ -311,6 +352,21 @@ class FMUSplitterDescription:
311
352
  self.links[fmi_type][local] = link
312
353
  link.from_port = FMUSplitterPort(fmu_filename,
313
354
  self.vr_to_name[fmu_filename][fmi_type][int(vr)]["name"])
355
+
356
+ if not fmi_type == "clock":
357
+ nb_output = self.get_nb(self.get_line(file))
358
+ logger.debug(f"OUTPUT {fmi_type} : CLOCKED {nb_output}")
359
+
360
+ for i in range(nb_output):
361
+ local, _clock, vr = self.get_line(file).split(" ")
362
+ try:
363
+ link = self.links[fmi_type][local]
364
+ except KeyError:
365
+ link = FMUSplitterLink()
366
+ self.links[fmi_type][local] = link
367
+ link.from_port = FMUSplitterPort(fmu_filename,
368
+ self.vr_to_name[fmu_filename][fmi_type][int(vr)]["name"])
369
+
314
370
  #conversion
315
371
  nb_conversion = int(self.get_line(file))
316
372
  for i in range(nb_conversion):
@@ -0,0 +1,137 @@
1
+ import logging
2
+ import xml.etree.ElementTree as ET
3
+
4
+ from collections import Counter
5
+ from pathlib import Path
6
+ from typing import *
7
+
8
+ logger = logging.getLogger("fmu_manipulation_toolbox")
9
+
10
+ class Terminal:
11
+ def __init__(self, name: str, kind: str, matching: str):
12
+ self.name = name
13
+ self.kind = str
14
+ self.matching = matching
15
+ self.members:Dict[str, str] = {}
16
+ self.sub_terminals: Dict[str, Terminal] = {}
17
+
18
+ def add_member(self, member_name, variable_name):
19
+ self.members[member_name] = variable_name
20
+
21
+ def __repr__(self):
22
+ return f"{self.name} ({len(self.members)} signals)"
23
+
24
+ def __eq__(self, other):
25
+ if isinstance(other, Terminal):
26
+ return self.kind == other.kind and self.matching == other.matching
27
+ else:
28
+ return False
29
+
30
+ def connect(self, other) -> List[Tuple[str, str]]:
31
+ links = []
32
+
33
+ for sub_terminal in self.sub_terminals.values():
34
+ other_sub_terminal = other.sub_terminals[sub_terminal.name]
35
+ links += sub_terminal.connect(other_sub_terminal)
36
+
37
+
38
+ if isinstance(other, Terminal):
39
+ if self.matching == "plug":
40
+ return self.connect_plug(other)
41
+ elif self.matching == "bus":
42
+ return self.connect_bus(other)
43
+ elif self.matching == "sequence":
44
+ return self.connect_sequence(other)
45
+ elif self.matching == "org.fmi-ls-bus.transceiver":
46
+ return self.connect_transceiver(other)
47
+ else:
48
+ logger.error(f"Rule '{self.matching}' not defined to connect Terminal '{self.name}'")
49
+ else:
50
+ logger.error(f"Cannot connect Terminal '{self.name}' to '{other}'.")
51
+
52
+ return links
53
+
54
+ def connect_plug(self, other) -> List[Tuple[str, str]]:
55
+ links = []
56
+ if Counter(self.members.keys()) == Counter(other.members.keys()):
57
+ for member_name, member in self.members.items():
58
+ other_member = other.members[member_name]
59
+ links.append((member, other_member))
60
+ else:
61
+ logger.error(f"PLUG Terminal '{self.name}' does not exactly fit Terminal '{other.name}'")
62
+
63
+ return links
64
+
65
+ def connect_bus(self, other) -> List[Tuple[str, str]]:
66
+ links = []
67
+ for member_name, member in self.members.items():
68
+ if member_name in other.members:
69
+ other_member = other.members[member_name]
70
+ links.append((member, other_member))
71
+ return links
72
+
73
+ def connect_sequence(self, other) -> List[Tuple[str, str]]:
74
+ links = []
75
+ if len(self.members) == len(other.members):
76
+ for member, other_member in zip(self.members.values(), other.members.values()):
77
+ links.append((member, other_member))
78
+ else:
79
+ logger.error(f"SEQUENCE Terminal '{self.name}' does not exactly fit Terminal '{other.name}'")
80
+ return links
81
+
82
+ def connect_transceiver(self, other) -> List[Tuple[str, str]]:
83
+ return [(self.members["Tx_Data"], other.members["Rx_Data"]),
84
+ (self.members["Tx_Clock"], other.members["Rx_Clock"]),
85
+ (self.members["Rx_Data"], other.members["Tx_Data"]),
86
+ (self.members["Rx_Clock"], other.members["Tx_Clock"])]
87
+
88
+
89
+ class Terminals:
90
+ FILENAME = "terminalsAndIcons.xml"
91
+ def __init__(self, directory: Union[Path, str]):
92
+ self.terminals: OrderedDict[str, Terminal] = OrderedDict()
93
+
94
+ if isinstance(directory, str):
95
+ directory = Path(directory)
96
+
97
+ filename = directory / "terminalsAndIcons" / self.FILENAME
98
+ if filename.exists():
99
+
100
+ xml = ET.parse(filename)
101
+
102
+ try:
103
+ for element in xml.getroot()[0]:
104
+ if element.tag == "Terminal":
105
+ terminal = self.add_terminal(element)
106
+ logger.debug(f"Terminal '{terminal.name}' defined with {len(terminal.members)} signals")
107
+ except IndexError:
108
+ logger.error(f"{filename} is wrongly formated.")
109
+
110
+ def __len__(self):
111
+ return len(self.terminals)
112
+
113
+ def __contains__(self, item):
114
+ return item in self.terminals
115
+
116
+ def __getitem__(self, item):
117
+ return self.terminals[item]
118
+
119
+ def add_terminal(self, element) -> Terminal:
120
+ name = element.get("name")
121
+ matching = element.get("matchingRule")
122
+ kind = element.get("terminalKind")
123
+
124
+ terminal = Terminal(name, kind, matching)
125
+ self.add_member_from_terminal(terminal, element)
126
+
127
+ self.terminals[name] = terminal
128
+
129
+ return terminal
130
+
131
+ def add_member_from_terminal(self, terminal, element):
132
+ for child in element:
133
+ if child.tag == "TerminalMemberVariable":
134
+ terminal.add_member(child.get("memberName"), child.get("variableName"))
135
+ elif child.tag == "Terminal":
136
+ sub_terminal = self.add_terminal(child)
137
+ terminal.subterminals[sub_terminal.name] = sub_terminal
@@ -4,6 +4,6 @@ except ModuleNotFoundError:
4
4
  __version__ = "0.0.dev0"
5
5
 
6
6
  __author__ = "Nicolas.LAURENT@Renault.com"
7
- __copyright__ = "Copyright 2023-2024, Renault SAS"
7
+ __copyright__ = "Copyright 2023-2026, Renault SAS"
8
8
  __license__ = """This code is released under the 2-Clause BSD license.
9
9
  See https://github.com/grouperenault/fmu_manipulation_toolbox/blob/main/LICENSE.txt"""
@@ -0,0 +1,42 @@
1
+ Metadata-Version: 2.4
2
+ Name: fmu_manipulation_toolbox
3
+ Version: 1.9.2b2
4
+ Summary: FMU Manipulation Toolbox is a python package which helps to analyze, modify or combine Functional Mock-up Units (FMUs) without recompilation.
5
+ Home-page: https://github.com/grouperenault/fmu_manipulation_toolbox/
6
+ Author: Nicolas.LAURENT@Renault.com
7
+ License: BSD-2-Clause
8
+ Requires-Python: >=3.9
9
+ Description-Content-Type: text/markdown
10
+ License-File: LICENSE.txt
11
+ Requires-Dist: PySide6>=6.8.0
12
+ Requires-Dist: xmlschema>=3.3.1
13
+ Requires-Dist: elementpath>=4.4.0
14
+ Requires-Dist: colorama>=0.4.6
15
+ Dynamic: author
16
+ Dynamic: description
17
+ Dynamic: description-content-type
18
+ Dynamic: home-page
19
+ Dynamic: license
20
+ Dynamic: license-file
21
+ Dynamic: requires-dist
22
+ Dynamic: requires-python
23
+ Dynamic: summary
24
+
25
+ FMU Manipulation Toolbox is a python package which helps to analyze, modify or combine
26
+ [Functional Mock-up Units (FMUs)](http://fmi-standard.org/) without recompilation. It is highly customizable and comes with
27
+ a Python API.
28
+
29
+ FMU Manipulation Toolbox can be used in different ways:
30
+ - Using a Graphical User Interface: suitable for end users
31
+ - Using a Command Line Interface: useful for scripting and automation
32
+ - Using a Python API: the most efficient option for automation (CI/CD, transformation scripts, ...))
33
+
34
+ Major features:
35
+ - Analyze FMU content: list ports and their attributes, check compliance of `ModelDescription.xml` with XSD, etc.
36
+ - Alter FMU by modifying its `modelDescription.xml` file. NOTE: manipulating this file can be a risky.
37
+ When possible, it is preferable to communicate with the FMU developer and adapt the FMU generation process.
38
+ - Add binary interfaces. Typical use case is porting a 32-bit FMUs to 64-bit systems (or vice et versa).
39
+ - Combine FMUs into [FMU Containers](doc/container.md) and allow your favourite FMI tool to orchestrate complex assembly of FMUs.
40
+
41
+ FMI versions 2.0 and 3.0 are supported.
42
+
@@ -1,21 +1,21 @@
1
1
  fmu_manipulation_toolbox/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- fmu_manipulation_toolbox/__main__.py,sha256=Ixgo_5YS_khXseMujNPsVzaerkHPugLPYPV7FIi5umo,364
3
- fmu_manipulation_toolbox/__version__.py,sha256=7RqWe33xZWbgMkw1AHAoCVLVoTMkZYeV-jkNGXthJXM,11
4
- fmu_manipulation_toolbox/assembly.py,sha256=-i9iQLKiPyjdFZyxHmB1FgL3NYmRPfTWVs9lf3fC5sE,27022
5
- fmu_manipulation_toolbox/checker.py,sha256=RmIYd6s4p2S9wdv-uSILfVm__QTZSUJCiq6hr_G5rxA,3119
6
- fmu_manipulation_toolbox/container.py,sha256=X5XpacRqAGCRCjxpU6BAekGBfoNvVyx8C9MppUqwLz0,47130
7
- fmu_manipulation_toolbox/gui.py,sha256=-DyWY2MoECr3FGRYdS60Ltoayhd3O0uOCtkQ4YXE8xc,29201
8
- fmu_manipulation_toolbox/gui_style.py,sha256=s6WdrnNd_lCMWhuBf5LKK8wrfLXCU7pFTLUfvqkJVno,6633
2
+ fmu_manipulation_toolbox/__main__.py,sha256=g0ZhVsMiAs5KnhyVNwTe01N2PQjAg7F9YCnXHZB-HwA,356
3
+ fmu_manipulation_toolbox/__version__.py,sha256=dxTf1L29N2UnXoeZR07PLwi-F5jmAKLCVbVRdBuxS8g,11
4
+ fmu_manipulation_toolbox/assembly.py,sha256=QmFihza_I0hK0Ia6tWbjdZeoREhveLrv3d7ERrBUaDk,27217
5
+ fmu_manipulation_toolbox/checker.py,sha256=Dh47b3blibCWjHCeZ61Y_w9Ug0PWvEuSiemZtp-llQA,3141
6
+ fmu_manipulation_toolbox/container.py,sha256=5LpfqWMSkujZqkw37Y1sI2tM2BKTDOUXvyj9c-jIpqM,56680
9
7
  fmu_manipulation_toolbox/help.py,sha256=j8xmnCrwQpaW-SZ8hSqA1dlTXgaqzQWc4Yr3RH_oqck,6012
10
- fmu_manipulation_toolbox/operations.py,sha256=ZV6BRXszwvmqJwUCnTFkWfIYvfK4i-OHN69kffkmGbI,21075
8
+ fmu_manipulation_toolbox/ls.py,sha256=wmyoKrvDLXpL-PFz6cUhLLqxDMD5E9L_P4KswWpQHsk,975
9
+ fmu_manipulation_toolbox/operations.py,sha256=8noR84f6Ow2sMY6d0oer5BDZ48WBRSKgwOB-aTKElzg,21154
11
10
  fmu_manipulation_toolbox/remoting.py,sha256=N25MDFkIcEWe9CIT1M4L9kea3j-8E7i2I1VOI6zIAdw,3876
12
- fmu_manipulation_toolbox/split.py,sha256=yFaW6yhvFjOXpRynWzitR7o7uSrxb-RxeFzmQNxUFHI,14147
13
- fmu_manipulation_toolbox/version.py,sha256=OhBLkZ1-nhC77kyvffPNAf6m8OZe1bYTnNf_PWs1NvM,392
11
+ fmu_manipulation_toolbox/split.py,sha256=6D99SAGNu4B3PSaSsliWc6Bb5aSBZMxL8t0v8TJBI3Y,16499
12
+ fmu_manipulation_toolbox/terminals.py,sha256=mGGS4tdE6cJuz-2zvwc7drpmT0QJ7YPe8ENw2UGlEHA,5062
13
+ fmu_manipulation_toolbox/version.py,sha256=L26Cc3PH97SOa4G9yiYnafrdolK0G_DCQZZTvv3YXqI,392
14
14
  fmu_manipulation_toolbox/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
- fmu_manipulation_toolbox/cli/fmucontainer.py,sha256=oYidLBvXyDApsY7JVGlCL5g35yc1F9Gr8tFjYY7077s,4981
16
- fmu_manipulation_toolbox/cli/fmusplit.py,sha256=EDRrj6aHVnyaj3W_4_DUxo84AyZxnRyNGXIad35eWFo,1668
17
- fmu_manipulation_toolbox/cli/fmutool.py,sha256=KUqhUO3NvRdzgY55aoPg7yF3_3sE1GANR6dx-XQAU1M,6043
18
- fmu_manipulation_toolbox/cli/utils.py,sha256=gNhdlFYSSNSb0fovzS0crnxgmqqKXe0KtoZZFhRKhfg,1375
15
+ fmu_manipulation_toolbox/cli/fmucontainer.py,sha256=ZLoC8QMVBVG2S3cdNthMIQ0gYIU9WUbYj8Aj2vxzyfs,5338
16
+ fmu_manipulation_toolbox/cli/fmusplit.py,sha256=sLzdxiC4R5hJYJo9F2TZOMrJOHcadqCvUo9KoCjUaxE,1773
17
+ fmu_manipulation_toolbox/cli/fmutool.py,sha256=E-CCymksBwGFlS3-zJ7DIDA8xIdp_synsxMDYXst8dc,6186
18
+ fmu_manipulation_toolbox/cli/utils.py,sha256=pvedN6cRiDkZ7RdPO1koBOZaGuydYhgcoO0-_QQpOoI,1601
19
19
  fmu_manipulation_toolbox/resources/checkbox-checked-disabled.png,sha256=FWIuyrXlaNLLePHfXj7j9ca5rT8Hgr14KCe1EqTCZyk,2288
20
20
  fmu_manipulation_toolbox/resources/checkbox-checked-hover.png,sha256=KNlV-d_aJNTTvUVXKGT9DBY30sIs2LwocLJrFKNKv8k,2419
21
21
  fmu_manipulation_toolbox/resources/checkbox-checked.png,sha256=gzyFqvRFsZixVh6ZlV4SMWUKzglY1rSn7SvJUKMVvtk,2411
@@ -33,7 +33,7 @@ fmu_manipulation_toolbox/resources/icon_fmu.png,sha256=EuygB2xcoM2WAfKKdyKG_UvTL
33
33
  fmu_manipulation_toolbox/resources/license.txt,sha256=5ODuU8g8pIkK-NMWXu_rjZ6k7gM7b-N2rmg87-2Kmqw,1583
34
34
  fmu_manipulation_toolbox/resources/mask.png,sha256=px1U4hQGL0AmZ4BQPknOVREpMpTSejbah3ntkpqAzFA,3008
35
35
  fmu_manipulation_toolbox/resources/model.png,sha256=EAf_HnZJe8zYGZygerG1MMt2U-tMMZlifzXPj4_iORA,208788
36
- fmu_manipulation_toolbox/resources/darwin64/container.dylib,sha256=lQEyWwYUqtp80803BEk9jy2gcdF3xtl2GBfXuTFA12M,162960
36
+ fmu_manipulation_toolbox/resources/darwin64/container.dylib,sha256=EpQwj07DRShKXq8lzqjFXiAWLwJXQyRPa3TrLjULZCM,230608
37
37
  fmu_manipulation_toolbox/resources/fmi-2.0/fmi2Annotation.xsd,sha256=OGfyJtaJntKypX5KDpuZ-nV1oYLZ6HV16pkpKOmYox4,2731
38
38
  fmu_manipulation_toolbox/resources/fmi-2.0/fmi2AttributeGroups.xsd,sha256=HwyV7LBse-PQSv4z1xjmtzPU3Hjnv4mluq9YdSBNHMQ,3704
39
39
  fmu_manipulation_toolbox/resources/fmi-2.0/fmi2ModelDescription.xsd,sha256=JM4j_9q-pc40XYHb28jfT3iV3aYM5JLqD5aRjO72K1E,18939
@@ -53,19 +53,19 @@ fmu_manipulation_toolbox/resources/fmi-3.0/fmi3Type.xsd,sha256=TaHRoUBIFtmdEwBKB
53
53
  fmu_manipulation_toolbox/resources/fmi-3.0/fmi3Unit.xsd,sha256=CK_F2t5LfyQ6eSNJ8soTFMVK9DU8vD2WiMi2MQvjB0g,3746
54
54
  fmu_manipulation_toolbox/resources/fmi-3.0/fmi3Variable.xsd,sha256=3YU-3q1-c-namz7sMe5cxnmOVOJsRSmfWR02PKv3xaU,19171
55
55
  fmu_manipulation_toolbox/resources/fmi-3.0/fmi3VariableDependency.xsd,sha256=YQSBwXt4IsDlyegY8bX-qQHGSfE5TipTPfo2g2yqq1c,3082
56
- fmu_manipulation_toolbox/resources/linux32/client_sm.so,sha256=r20fpb2x4QkRSJLLIk0YMCVCaDDI9TFAY29XFqbX4I4,34664
56
+ fmu_manipulation_toolbox/resources/linux32/client_sm.so,sha256=Cd4EwnFamF-6cmA0uNJ-xDIs5wkmhfgdeFVAJLBzumY,34756
57
57
  fmu_manipulation_toolbox/resources/linux32/server_sm,sha256=gzKU0BTeaRkvhTMQtHHj3K8uYFyEdyGGn_mZy_jG9xo,21304
58
- fmu_manipulation_toolbox/resources/linux64/client_sm.so,sha256=r5AmxPgVM06MAEyNOd0-TEpKQtekFTgsrpIuZy_qTdU,32464
59
- fmu_manipulation_toolbox/resources/linux64/container.so,sha256=XHtgW5YJigpQTMw02GQWbwgtFxM7kR2VxBWf0qSVK6s,135520
58
+ fmu_manipulation_toolbox/resources/linux64/client_sm.so,sha256=4aaTSTwCFk0iigVqw67ZMmt9Udj89W6placdTydzcAo,32592
59
+ fmu_manipulation_toolbox/resources/linux64/container.so,sha256=8SEqRP87xhzmkgIlFbgXyyxcSml4Gl_MKmfH7nHEjd8,189944
60
60
  fmu_manipulation_toolbox/resources/linux64/server_sm,sha256=MZn6vITN2qpBHYt_RaK2VnFFp00hk8fTALBHmXPtLwc,22608
61
- fmu_manipulation_toolbox/resources/win32/client_sm.dll,sha256=PFnrKPIqiyAqnpZkn0IQFQ2K3YKatVyvUYjwKwvh3ks,17920
62
- fmu_manipulation_toolbox/resources/win32/server_sm.exe,sha256=Sc88uHGtjlFLxPZDjC8DJHZXts-9chXK-niGJXaJiUk,15360
63
- fmu_manipulation_toolbox/resources/win64/client_sm.dll,sha256=6_bxWxz9rGZUn5rrzzgeMUqt6DHbKtD-huskGMxwG_o,20992
64
- fmu_manipulation_toolbox/resources/win64/container.dll,sha256=Vqhq-92NdAzw_XxzvHyr8ANmFV0sQ5Tth7uji-qsCjI,99328
65
- fmu_manipulation_toolbox/resources/win64/server_sm.exe,sha256=O-mS7U7SFjTkvrr6KBiJVARCAOJta1djBru8FHoB4yg,18432
66
- fmu_manipulation_toolbox-1.9.1.3.dist-info/licenses/LICENSE.txt,sha256=c_862mzyk6ownO3Gt6cVs0-53IXLi_-ZEQFNDVabESw,1285
67
- fmu_manipulation_toolbox-1.9.1.3.dist-info/METADATA,sha256=9bqVKEXjTV7cVq-wy4VLP5bICdnHY8-QMuUDumd0mvo,1157
68
- fmu_manipulation_toolbox-1.9.1.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
69
- fmu_manipulation_toolbox-1.9.1.3.dist-info/entry_points.txt,sha256=HjOZkflbI1IuSY8BpOZre20m24M4GDQGCJfPIa7NrlY,264
70
- fmu_manipulation_toolbox-1.9.1.3.dist-info/top_level.txt,sha256=9D_h-5BMjSqf9z-XFkbJL_bMppR2XNYW3WNuPkXou0k,25
71
- fmu_manipulation_toolbox-1.9.1.3.dist-info/RECORD,,
61
+ fmu_manipulation_toolbox/resources/win32/client_sm.dll,sha256=WPAutfVhZ3wMOwM2nuJYaOQby-Nooz6dwX_Jv14zUgI,17920
62
+ fmu_manipulation_toolbox/resources/win32/server_sm.exe,sha256=b6a25dyuw5E06sJwRWNTHwB8ZHwjTxybOE0H9wCHYac,15360
63
+ fmu_manipulation_toolbox/resources/win64/client_sm.dll,sha256=FDxyTCrsryoSHLKhEIBRbNYDzQfUxYW1B2ICKeskfZo,21504
64
+ fmu_manipulation_toolbox/resources/win64/container.dll,sha256=uV6DVwERwLDcsAl2jzgQhNLte5xjGfaUMCu2gwMIC8s,153088
65
+ fmu_manipulation_toolbox/resources/win64/server_sm.exe,sha256=TCF38KOmVIltgBxw84fa22Zx8ZcJ_lHtAVVZzUm6Ncc,18432
66
+ fmu_manipulation_toolbox-1.9.2b2.dist-info/licenses/LICENSE.txt,sha256=0Q8zhEwTu1K-MDmg8Khay5j56BIz2VLI6RcijIFbU_g,1255
67
+ fmu_manipulation_toolbox-1.9.2b2.dist-info/METADATA,sha256=uHdjOJ_iuBOy-KDuoM-bM2rZu7XrVjzD_HQYeFLE-lI,1898
68
+ fmu_manipulation_toolbox-1.9.2b2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
69
+ fmu_manipulation_toolbox-1.9.2b2.dist-info/entry_points.txt,sha256=6VNL31b5le8S9zp2H0R9ERWmzCy9WuSzVEDcHbWX_70,268
70
+ fmu_manipulation_toolbox-1.9.2b2.dist-info/top_level.txt,sha256=9D_h-5BMjSqf9z-XFkbJL_bMppR2XNYW3WNuPkXou0k,25
71
+ fmu_manipulation_toolbox-1.9.2b2.dist-info/RECORD,,
@@ -4,4 +4,4 @@ fmusplit = fmu_manipulation_toolbox.cli.fmusplit:fmusplit
4
4
  fmutool = fmu_manipulation_toolbox.cli.fmutool:fmutool
5
5
 
6
6
  [gui_scripts]
7
- fmutool-gui = fmu_manipulation_toolbox.gui:main
7
+ fmutool-gui = fmu_manipulation_toolbox.gui.gui:main
@@ -1,4 +1,4 @@
1
- Copyright (c) 2024 Renault SAS - Nicolas.LAURENT@Renault.com
1
+ Copyright (c) 2024 Renault SAS
2
2
 
3
3
  Redistribution and use in source and binary forms, with or without
4
4
  modification, are permitted provided that the following conditions