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.
- fmu_manipulation_toolbox/__main__.py +2 -2
- fmu_manipulation_toolbox/__version__.py +1 -1
- fmu_manipulation_toolbox/assembly.py +12 -8
- fmu_manipulation_toolbox/checker.py +4 -2
- fmu_manipulation_toolbox/cli/fmucontainer.py +27 -19
- fmu_manipulation_toolbox/cli/fmusplit.py +5 -2
- fmu_manipulation_toolbox/cli/fmutool.py +8 -3
- fmu_manipulation_toolbox/cli/utils.py +11 -1
- fmu_manipulation_toolbox/container.py +292 -82
- fmu_manipulation_toolbox/ls.py +35 -0
- fmu_manipulation_toolbox/operations.py +3 -2
- fmu_manipulation_toolbox/resources/darwin64/container.dylib +0 -0
- fmu_manipulation_toolbox/resources/linux32/client_sm.so +0 -0
- fmu_manipulation_toolbox/resources/linux64/client_sm.so +0 -0
- fmu_manipulation_toolbox/resources/linux64/container.so +0 -0
- fmu_manipulation_toolbox/resources/win32/client_sm.dll +0 -0
- fmu_manipulation_toolbox/resources/win32/server_sm.exe +0 -0
- fmu_manipulation_toolbox/resources/win64/client_sm.dll +0 -0
- fmu_manipulation_toolbox/resources/win64/container.dll +0 -0
- fmu_manipulation_toolbox/resources/win64/server_sm.exe +0 -0
- fmu_manipulation_toolbox/split.py +59 -3
- fmu_manipulation_toolbox/terminals.py +137 -0
- fmu_manipulation_toolbox/version.py +1 -1
- fmu_manipulation_toolbox-1.9.2b2.dist-info/METADATA +42 -0
- {fmu_manipulation_toolbox-1.9.1.3.dist-info → fmu_manipulation_toolbox-1.9.2b2.dist-info}/RECORD +29 -29
- {fmu_manipulation_toolbox-1.9.1.3.dist-info → fmu_manipulation_toolbox-1.9.2b2.dist-info}/entry_points.txt +1 -1
- {fmu_manipulation_toolbox-1.9.1.3.dist-info → fmu_manipulation_toolbox-1.9.2b2.dist-info}/licenses/LICENSE.txt +1 -1
- fmu_manipulation_toolbox/gui.py +0 -749
- fmu_manipulation_toolbox/gui_style.py +0 -252
- fmu_manipulation_toolbox-1.9.1.3.dist-info/METADATA +0 -30
- {fmu_manipulation_toolbox-1.9.1.3.dist-info → fmu_manipulation_toolbox-1.9.2b2.dist-info}/WHEEL +0 -0
- {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.
|
|
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()
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -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
|
-
|
|
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)
|
|
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
|
-
|
|
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-
|
|
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
|
+
|
{fmu_manipulation_toolbox-1.9.1.3.dist-info → fmu_manipulation_toolbox-1.9.2b2.dist-info}/RECORD
RENAMED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
fmu_manipulation_toolbox/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
fmu_manipulation_toolbox/__main__.py,sha256=
|
|
3
|
-
fmu_manipulation_toolbox/__version__.py,sha256=
|
|
4
|
-
fmu_manipulation_toolbox/assembly.py,sha256
|
|
5
|
-
fmu_manipulation_toolbox/checker.py,sha256=
|
|
6
|
-
fmu_manipulation_toolbox/container.py,sha256=
|
|
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/
|
|
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=
|
|
13
|
-
fmu_manipulation_toolbox/
|
|
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=
|
|
16
|
-
fmu_manipulation_toolbox/cli/fmusplit.py,sha256=
|
|
17
|
-
fmu_manipulation_toolbox/cli/fmutool.py,sha256=
|
|
18
|
-
fmu_manipulation_toolbox/cli/utils.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
59
|
-
fmu_manipulation_toolbox/resources/linux64/container.so,sha256=
|
|
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=
|
|
62
|
-
fmu_manipulation_toolbox/resources/win32/server_sm.exe,sha256=
|
|
63
|
-
fmu_manipulation_toolbox/resources/win64/client_sm.dll,sha256=
|
|
64
|
-
fmu_manipulation_toolbox/resources/win64/container.dll,sha256=
|
|
65
|
-
fmu_manipulation_toolbox/resources/win64/server_sm.exe,sha256=
|
|
66
|
-
fmu_manipulation_toolbox-1.9.
|
|
67
|
-
fmu_manipulation_toolbox-1.9.
|
|
68
|
-
fmu_manipulation_toolbox-1.9.
|
|
69
|
-
fmu_manipulation_toolbox-1.9.
|
|
70
|
-
fmu_manipulation_toolbox-1.9.
|
|
71
|
-
fmu_manipulation_toolbox-1.9.
|
|
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,,
|