fmu-manipulation-toolbox 1.8.4.3b0__py3-none-any.whl → 1.9__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 (34) hide show
  1. fmu_manipulation_toolbox/__init__.py +0 -1
  2. fmu_manipulation_toolbox/__main__.py +1 -1
  3. fmu_manipulation_toolbox/__version__.py +1 -1
  4. fmu_manipulation_toolbox/assembly.py +21 -12
  5. fmu_manipulation_toolbox/checker.py +11 -8
  6. fmu_manipulation_toolbox/cli/__init__.py +0 -0
  7. fmu_manipulation_toolbox/cli/fmucontainer.py +105 -0
  8. fmu_manipulation_toolbox/cli/fmusplit.py +48 -0
  9. fmu_manipulation_toolbox/cli/fmutool.py +127 -0
  10. fmu_manipulation_toolbox/cli/utils.py +36 -0
  11. fmu_manipulation_toolbox/container.py +534 -247
  12. fmu_manipulation_toolbox/gui.py +47 -55
  13. fmu_manipulation_toolbox/gui_style.py +8 -0
  14. fmu_manipulation_toolbox/help.py +3 -0
  15. fmu_manipulation_toolbox/operations.py +251 -179
  16. fmu_manipulation_toolbox/remoting.py +107 -0
  17. fmu_manipulation_toolbox/resources/darwin64/container.dylib +0 -0
  18. fmu_manipulation_toolbox/resources/linux32/client_sm.so +0 -0
  19. fmu_manipulation_toolbox/resources/linux32/server_sm +0 -0
  20. fmu_manipulation_toolbox/resources/linux64/client_sm.so +0 -0
  21. fmu_manipulation_toolbox/resources/linux64/container.so +0 -0
  22. fmu_manipulation_toolbox/resources/linux64/server_sm +0 -0
  23. fmu_manipulation_toolbox/resources/win32/client_sm.dll +0 -0
  24. fmu_manipulation_toolbox/resources/win32/server_sm.exe +0 -0
  25. fmu_manipulation_toolbox/resources/win64/client_sm.dll +0 -0
  26. fmu_manipulation_toolbox/resources/win64/container.dll +0 -0
  27. fmu_manipulation_toolbox/resources/win64/server_sm.exe +0 -0
  28. fmu_manipulation_toolbox/split.py +67 -34
  29. {fmu_manipulation_toolbox-1.8.4.3b0.dist-info → fmu_manipulation_toolbox-1.9.dist-info}/METADATA +1 -1
  30. {fmu_manipulation_toolbox-1.8.4.3b0.dist-info → fmu_manipulation_toolbox-1.9.dist-info}/RECORD +34 -27
  31. {fmu_manipulation_toolbox-1.8.4.3b0.dist-info → fmu_manipulation_toolbox-1.9.dist-info}/WHEEL +0 -0
  32. {fmu_manipulation_toolbox-1.8.4.3b0.dist-info → fmu_manipulation_toolbox-1.9.dist-info}/entry_points.txt +0 -0
  33. {fmu_manipulation_toolbox-1.8.4.3b0.dist-info → fmu_manipulation_toolbox-1.9.dist-info}/licenses/LICENSE.txt +0 -0
  34. {fmu_manipulation_toolbox-1.8.4.3b0.dist-info → fmu_manipulation_toolbox-1.9.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,107 @@
1
+ import logging
2
+ import shutil
3
+
4
+ from pathlib import Path
5
+ from .operations import OperationAbstract, OperationError
6
+
7
+ logger = logging.getLogger("fmu_manipulation_toolbox")
8
+
9
+ class OperationAddRemotingWinAbstract(OperationAbstract):
10
+ bitness_from = None
11
+ bitness_to = None
12
+
13
+ def __repr__(self):
14
+ return f"Add '{self.bitness_to}' remoting on '{self.bitness_from}' FMU"
15
+
16
+ def __init__(self):
17
+ self.vr = {
18
+ "Real": [],
19
+ "Integer": [],
20
+ "Boolean": []
21
+ }
22
+ self.nb_input = 0
23
+ self.nb_output = 0
24
+
25
+ def fmi_attrs(self, attrs):
26
+ if not attrs["fmiVersion"] == "2.0":
27
+ raise OperationError(f"Adding remoting is only available for FMI-2.0")
28
+
29
+ def cosimulation_attrs(self, attrs):
30
+ fmu_bin = {
31
+ "win32": Path(self.fmu.tmp_directory) / "binaries" / "win32",
32
+ "win64": Path(self.fmu.tmp_directory) / "binaries" / "win64",
33
+ }
34
+
35
+ if not fmu_bin[self.bitness_from].is_dir():
36
+ raise OperationError(f"{self.bitness_from} interface does not exist")
37
+
38
+ if fmu_bin[self.bitness_to].is_dir():
39
+ logger.info(f"{self.bitness_to} already exists. Add front-end.")
40
+ shutil.move(fmu_bin[self.bitness_to] / Path(attrs['modelIdentifier']).with_suffix(".dll"),
41
+ fmu_bin[self.bitness_to] / Path(attrs['modelIdentifier']).with_suffix("-remoted.dll"))
42
+ else:
43
+ fmu_bin[self.bitness_to].mkdir()
44
+
45
+ to_path = Path(__file__).parent / "resources" / self.bitness_to
46
+ try:
47
+ shutil.copyfile(to_path / "client_sm.dll",
48
+ fmu_bin[self.bitness_to] / Path(attrs['modelIdentifier']).with_suffix(".dll"))
49
+ except FileNotFoundError as e:
50
+ logger.critical(f"Cannot add remoting client: {e}")
51
+
52
+ from_path = Path(__file__).parent / "resources" / self.bitness_from
53
+ try:
54
+ shutil.copyfile(from_path / "server_sm.exe",
55
+ fmu_bin[self.bitness_from] / "server_sm.exe")
56
+ except FileNotFoundError as e:
57
+ logger.critical(f"Cannot add remoting server: {e}")
58
+
59
+ shutil.copyfile(Path(__file__).parent / "resources" / "license.txt",
60
+ fmu_bin[self.bitness_to] / "license.txt")
61
+
62
+ def port_attrs(self, fmu_port) -> int:
63
+ vr = int(fmu_port["valueReference"])
64
+ causality = fmu_port.get("causality", "local")
65
+ try:
66
+ self.vr[fmu_port.fmi_type].append(vr)
67
+ if causality in ("input", "parameter"):
68
+ self.nb_input += 1
69
+ else:
70
+ self.nb_output += 1
71
+ except KeyError:
72
+ logger.error(f"Type '{fmu_port.fmi_type}' is not supported by remoting.")
73
+
74
+ return 0
75
+
76
+ def closure(self):
77
+ target_dir = Path(self.fmu.tmp_directory) / "resources"
78
+ if not target_dir.is_dir():
79
+ target_dir.mkdir()
80
+
81
+ logger.info(f"Remoting nb input port: {self.nb_input}")
82
+ logger.info(f"Remoting nb output port: {self.nb_output}")
83
+ with open(target_dir/ "remoting_table.txt", "wt") as file:
84
+ for fmi_type in ('Real', 'Integer', 'Boolean'):
85
+ print(len(self.vr[fmi_type]), file=file)
86
+ for fmi_type in ('Real', 'Integer', 'Boolean'):
87
+ for vr in sorted(self.vr[fmi_type]):
88
+ print(vr, file=file)
89
+
90
+ class OperationAddRemotingWin64(OperationAddRemotingWinAbstract):
91
+ bitness_from = "win32"
92
+ bitness_to = "win64"
93
+
94
+
95
+ class OperationAddFrontendWin32(OperationAddRemotingWinAbstract):
96
+ bitness_from = "win32"
97
+ bitness_to = "win32"
98
+
99
+
100
+ class OperationAddFrontendWin64(OperationAddRemotingWinAbstract):
101
+ bitness_from = "win64"
102
+ bitness_to = "win64"
103
+
104
+
105
+ class OperationAddRemotingWin32(OperationAddRemotingWinAbstract):
106
+ bitness_from = "win64"
107
+ bitness_to = "win32"
@@ -6,6 +6,8 @@ import xml.parsers.expat
6
6
  from typing import *
7
7
  from pathlib import Path
8
8
 
9
+ from .container import EmbeddedFMUPort
10
+
9
11
  logger = logging.getLogger("fmu_manipulation_toolbox")
10
12
 
11
13
 
@@ -40,6 +42,7 @@ class FMUSplitter:
40
42
  def __init__(self, fmu_filename: str):
41
43
  self.fmu_filename = Path(fmu_filename)
42
44
  self.directory = self.fmu_filename.with_suffix(".dir")
45
+ self.zip = None # to handle error
43
46
  self.zip = zipfile.ZipFile(self.fmu_filename)
44
47
  self.filenames_list = self.zip.namelist()
45
48
  self.dir_set = self.get_dir_set()
@@ -58,13 +61,14 @@ class FMUSplitter:
58
61
  return dir_set
59
62
 
60
63
  def __del__(self):
61
- logger.debug("Closing zip file")
62
- self.zip.close()
64
+ if self.zip is not None:
65
+ logger.debug("Closing zip file")
66
+ self.zip.close()
63
67
 
64
68
  def split_fmu(self):
65
69
  logger.info(f"Splitting...")
66
70
  config = self._split_fmu(fmu_filename=str(self.fmu_filename), relative_path="")
67
- config_filename = self.directory / self.fmu_filename.with_suffix(".json")
71
+ config_filename = self.directory / self.fmu_filename.with_suffix(".json").name
68
72
  with open(config_filename, "w") as file:
69
73
  json.dump(config, file, indent=2)
70
74
  logger.info(f"Container definition saved to '{config_filename}'")
@@ -75,7 +79,7 @@ class FMUSplitter:
75
79
  if txt_filename in self.filenames_list:
76
80
  description = FMUSplitterDescription(self.zip)
77
81
  config = description.parse_txt_file(txt_filename)
78
- config["name"] = fmu_filename
82
+ config["name"] = Path(fmu_filename).name
79
83
  for i, fmu_filename in enumerate(config["candidate_fmu"]):
80
84
  directory = f"{relative_path}resources/{i:02x}/"
81
85
  if directory not in self.dir_set:
@@ -107,16 +111,10 @@ class FMUSplitter:
107
111
  fmu_file.writestr(file[len(directory):], data)
108
112
  logger.info(f"FMU Extraction of '{filename}'")
109
113
 
110
-
111
114
  class FMUSplitterDescription:
112
115
  def __init__(self, zip):
113
116
  self.zip = zip
114
- self.links: Dict[str, Dict[int, FMUSplitterLink]] = {
115
- "Real": {},
116
- "Integer": {},
117
- "Boolean": {},
118
- "String": {}
119
- }
117
+ self.links: Dict[str, Dict[int, FMUSplitterLink]] = dict((el, {}) for el in EmbeddedFMUPort.ALL_TYPES)
120
118
  self.vr_to_name: Dict[str, Dict[str, Dict[int, Dict[str, str]]]] = {} # name, fmi_type, vr <-> {name, causality}
121
119
  self.config: Dict[str, Any] = {
122
120
  "auto_input": False,
@@ -129,9 +127,11 @@ class FMUSplitterDescription:
129
127
 
130
128
  # used for modelDescription.xml parsing
131
129
  self.current_fmu_filename = None
130
+ self.current_fmi_version = None
132
131
  self.current_vr = None
133
132
  self.current_name = None
134
133
  self.current_causality = None
134
+ self.supported_fmi_types: Tuple[str] = tuple()
135
135
 
136
136
  @staticmethod
137
137
  def get_line(file):
@@ -141,14 +141,23 @@ class FMUSplitterDescription:
141
141
  return line
142
142
  raise StopIteration
143
143
 
144
- def start_element(self, name, attrs):
145
- if name == "ScalarVariable":
144
+ def start_element(self, tag, attrs):
145
+ if tag == "fmiModelDescription":
146
+ self.current_fmi_version = attrs["fmiVersion"]
147
+ elif tag == "ScalarVariable":
146
148
  self.current_name = attrs["name"]
147
149
  self.current_vr = int(attrs["valueReference"])
148
150
  self.current_causality = attrs["causality"]
149
- elif name in self.vr_to_name[self.current_fmu_filename]:
150
- self.vr_to_name[self.current_fmu_filename][name][self.current_vr] = {"name": self.current_name,
151
- "causality": self.current_causality}
151
+ elif self.current_fmi_version == "2.0" and tag in EmbeddedFMUPort.FMI_TO_CONTAINER[2]:
152
+ fmi_type = EmbeddedFMUPort.FMI_TO_CONTAINER[2][tag]
153
+ self.vr_to_name[self.current_fmu_filename][fmi_type][self.current_vr] = {
154
+ "name": self.current_name,
155
+ "causality": self.current_causality}
156
+ elif self.current_fmi_version == "3.0" and tag in EmbeddedFMUPort.FMI_TO_CONTAINER[3]:
157
+ fmi_type = EmbeddedFMUPort.FMI_TO_CONTAINER[3][tag]
158
+ self.vr_to_name[self.current_fmu_filename][fmi_type][int(attrs["valueReference"])] = {
159
+ "name": attrs["name"],
160
+ "causality": attrs["causality"]}
152
161
  else:
153
162
  self.current_vr = None
154
163
  self.current_name = None
@@ -161,14 +170,10 @@ class FMUSplitterDescription:
161
170
  else:
162
171
  filename = f"{directory}/modelDescription.xml"
163
172
 
164
- self.vr_to_name[fmu_filename] = {
165
- "Real": {},
166
- "Integer": {},
167
- "Boolean": {},
168
- "String": {}
169
- }
173
+ self.vr_to_name[fmu_filename] = dict((el, {}) for el in EmbeddedFMUPort.ALL_TYPES)
170
174
  parser = xml.parsers.expat.ParserCreate()
171
175
  self.current_fmu_filename = fmu_filename
176
+ self.current_fmi_version = None
172
177
  self.current_vr = None
173
178
  self.current_name = None
174
179
  self.current_causality = None
@@ -178,20 +183,45 @@ class FMUSplitterDescription:
178
183
  parser.ParseFile(file)
179
184
 
180
185
  def parse_txt_file_header(self, file, txt_filename):
181
- self.config["mt"] = self.get_line(file) == "1"
182
- self.config["profiling"] = self.get_line(file) == "1"
186
+ flags = self.get_line(file).split(" ")
187
+ if len(flags) == 1:
188
+ self.supported_fmi_types = ("Real", "Integer", "Boolean", "String")
189
+ self.config["mt"] = flags[0] == "1"
190
+ self.config["profiling"] = self.get_line(file) == "1"
191
+ self.config["sequential"] = False
192
+ elif len(flags) == 3:
193
+ self.supported_fmi_types = EmbeddedFMUPort.ALL_TYPES
194
+ self.config["mt"] = flags[0] == "1"
195
+ self.config["profiling"] = flags[1] == "1"
196
+ self.config["sequential"] = flags[2] == "1"
197
+ else:
198
+ raise FMUSplitterError(f"Cannot interpret flags '{flags}'")
199
+
183
200
  self.config["step_size"] = float(self.get_line(file))
184
201
  nb_fmu = int(self.get_line(file))
185
202
  logger.debug(f"Number of FMUs: {nb_fmu}")
186
203
  self.config["candidate_fmu"] = []
187
204
 
188
205
  for i in range(nb_fmu):
206
+ # format is
207
+ # filename.fmu
208
+ # or
209
+ # filename.fmu fmi_version
189
210
  fmu_filename = self.get_line(file)
211
+ if ' ' in fmu_filename:
212
+ fmu_filename = fmu_filename.split(' ')[0]
213
+ # fmi version is not needed for further operations
214
+
190
215
  base_directory = "/".join(txt_filename.split("/")[0:-1])
191
- try:
192
- self.parse_model_description(f"{base_directory}/{fmu_filename}", fmu_filename)
193
- except KeyError:
194
- self.parse_model_description(f"{base_directory}/{i:02x}", fmu_filename)
216
+
217
+ directory = f"{base_directory}/{fmu_filename}"
218
+ if f"{directory}/modelDescription.xml" not in self.zip.namelist():
219
+ directory = f"{base_directory}/{i:02x}"
220
+ if f"{directory}/modelDescription.xml" not in self.zip.namelist():
221
+ print(self.zip.namelist())
222
+ raise FMUSplitterError(f"Cannot find in FMU directory in {directory}.")
223
+
224
+ self.parse_model_description(directory, fmu_filename)
195
225
  self.config["candidate_fmu"].append(fmu_filename)
196
226
  _library = self.get_line(file)
197
227
  _uuid = self.get_line(file)
@@ -217,7 +247,7 @@ class FMUSplitterDescription:
217
247
  logger.debug(f"Adding container port {causality}: {definition}")
218
248
 
219
249
  def parse_txt_file_ports(self, file):
220
- for fmi_type in ("Real", "Integer", "Boolean", "String"):
250
+ for fmi_type in self.supported_fmi_types:
221
251
  nb_port_variables = self.get_line(file).split(" ")[0]
222
252
  for i in range(int(nb_port_variables)):
223
253
  tokens = self.get_line(file).split(" ")
@@ -236,15 +266,14 @@ class FMUSplitterDescription:
236
266
  def parse_txt_file(self, txt_filename: str):
237
267
  self.parse_model_description(str(Path(txt_filename).parent.parent), ".")
238
268
  logger.debug(f"Parsing container file '{txt_filename}'")
239
-
240
269
  with (self.zip.open(txt_filename) as file):
241
270
  self.parse_txt_file_header(file, txt_filename)
242
271
  self.parse_txt_file_ports(file)
243
272
 
244
-
245
273
  for fmu_filename in self.config["candidate_fmu"]:
246
274
  # Inputs per FMUs
247
- for fmi_type in ("Real", "Integer", "Boolean", "String"):
275
+
276
+ for fmi_type in self.supported_fmi_types:
248
277
  nb_input = int(self.get_line(file))
249
278
  for i in range(nb_input):
250
279
  local, vr = self.get_line(file).split(" ")
@@ -256,7 +285,7 @@ class FMUSplitterDescription:
256
285
  link.to_port.append(FMUSplitterPort(fmu_filename,
257
286
  self.vr_to_name[fmu_filename][fmi_type][int(vr)]["name"]))
258
287
 
259
- for fmi_type in ("Real", "Integer", "Boolean", "String"):
288
+ for fmi_type in self.supported_fmi_types:
260
289
  nb_start = int(self.get_line(file))
261
290
  for i in range(nb_start):
262
291
  tokens = self.get_line(file).split(" ")
@@ -270,7 +299,7 @@ class FMUSplitterDescription:
270
299
  self.config["start"] = [start_definition]
271
300
 
272
301
  # Output per FMUs
273
- for fmi_type in ("Real", "Integer", "Boolean", "String"):
302
+ for fmi_type in self.supported_fmi_types:
274
303
  nb_output = int(self.get_line(file))
275
304
 
276
305
  for i in range(nb_output):
@@ -282,6 +311,10 @@ class FMUSplitterDescription:
282
311
  self.links[fmi_type][local] = link
283
312
  link.from_port = FMUSplitterPort(fmu_filename,
284
313
  self.vr_to_name[fmu_filename][fmi_type][int(vr)]["name"])
314
+ #conversion
315
+ nb_conversion = int(self.get_line(file))
316
+ for i in range(nb_conversion):
317
+ self.get_line(file)
285
318
 
286
319
  logger.debug("End of parsing.")
287
320
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmu_manipulation_toolbox
3
- Version: 1.8.4.3b0
3
+ Version: 1.9
4
4
  Summary: FMU Manipulation Toolbox is a python application for modifying Functional Mock-up Units (FMUs) without recompilation or bundling them into FMU Containers
5
5
  Home-page: https://github.com/grouperenault/fmu_manipulation_toolbox/
6
6
  Author: Nicolas.LAURENT@Renault.com
@@ -1,15 +1,21 @@
1
- fmu_manipulation_toolbox/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
2
- fmu_manipulation_toolbox/__main__.py,sha256=mAzrtkil506DS0F3g3CEbHdtZsZotzntcNhIn_lNJkw,344
3
- fmu_manipulation_toolbox/__version__.py,sha256=kO0geLXvmJSP0NCIby9Nscf2scBBfyXPyYch2kg_YYA,16
4
- fmu_manipulation_toolbox/assembly.py,sha256=cQ6VNPFxTVDKbgcGQlvfHz-Eztzz8DaAf2o5LZ9wZrY,25896
5
- fmu_manipulation_toolbox/checker.py,sha256=836wCri6aEl0M6_xHPZ94JRngFjsy8Ee-_t8bzclxBs,2332
6
- fmu_manipulation_toolbox/container.py,sha256=quBczJ5E2TaXRF33q9zetiyjgIdUNvSmZmj8ga1qaJM,32862
7
- fmu_manipulation_toolbox/gui.py,sha256=tVTPLbGZlD5P0WYqaD5B4crG2nHjBGe73yAJrzRXpYE,29218
8
- fmu_manipulation_toolbox/gui_style.py,sha256=uzEruJumnC5Vf2cfHXVa_c-SHAQoTvDWemro3-b9Mpc,6492
9
- fmu_manipulation_toolbox/help.py,sha256=aklKiLrsE0adSzQ5uoEB1sBDmI6s4l231gavu4XxxzA,5856
10
- fmu_manipulation_toolbox/operations.py,sha256=p0e6OgNRT0JrQaDjhdHk1rxVoRXbdhPHueVvn021UdM,16346
11
- fmu_manipulation_toolbox/split.py,sha256=zRWzgOjB630COXVhFaRoxif8Se8H3736ZbLvtLFz4sI,12330
1
+ fmu_manipulation_toolbox/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ fmu_manipulation_toolbox/__main__.py,sha256=FpG0ITBz5q-AvIbXplVh_1g1zla5souFGtpiDdECxEw,352
3
+ fmu_manipulation_toolbox/__version__.py,sha256=RpjnZ-g4XsDa0uZToxk2ez_E9cmR3N2SrOqy0awR3so,7
4
+ fmu_manipulation_toolbox/assembly.py,sha256=XQ_1sB6K1Dk2mnNe-E3_6Opoeub7F9Qaln0EUDzsop8,26553
5
+ fmu_manipulation_toolbox/checker.py,sha256=jw1omfrMMIMHlIpHXpWBcQgIiS9hnHe5T9CZ5KlbVGs,2422
6
+ fmu_manipulation_toolbox/container.py,sha256=Ed6JsWM2oMs-jyGyKmrHHebNuG4qwiGLYtx0BREIiBE,45710
7
+ fmu_manipulation_toolbox/gui.py,sha256=ax-IbGO7GyBG0Mb5okN588CKQDfMxoF1uZtD1_CYnjc,29199
8
+ fmu_manipulation_toolbox/gui_style.py,sha256=s6WdrnNd_lCMWhuBf5LKK8wrfLXCU7pFTLUfvqkJVno,6633
9
+ fmu_manipulation_toolbox/help.py,sha256=j8xmnCrwQpaW-SZ8hSqA1dlTXgaqzQWc4Yr3RH_oqck,6012
10
+ fmu_manipulation_toolbox/operations.py,sha256=VQvFXRHF48e-ZLqoG8nbz61iB5lX6qAkqZHQ0m0lUPw,20577
11
+ fmu_manipulation_toolbox/remoting.py,sha256=N25MDFkIcEWe9CIT1M4L9kea3j-8E7i2I1VOI6zIAdw,3876
12
+ fmu_manipulation_toolbox/split.py,sha256=yFaW6yhvFjOXpRynWzitR7o7uSrxb-RxeFzmQNxUFHI,14147
12
13
  fmu_manipulation_toolbox/version.py,sha256=OhBLkZ1-nhC77kyvffPNAf6m8OZe1bYTnNf_PWs1NvM,392
14
+ fmu_manipulation_toolbox/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
+ fmu_manipulation_toolbox/cli/fmucontainer.py,sha256=6UaSSY6UGGlOfIh_CTG-Gk3ZPSd88Pi2cFCuzb87eks,4839
16
+ fmu_manipulation_toolbox/cli/fmusplit.py,sha256=VMDYjmvIsjPHJINZaOt1Zy8D0so6d99285LbS8v-Tro,1734
17
+ fmu_manipulation_toolbox/cli/fmutool.py,sha256=QRe6xQxQMD8FtEzoT5421Bq0YasgdIwOd9Too5TX5zg,6086
18
+ fmu_manipulation_toolbox/cli/utils.py,sha256=gNhdlFYSSNSb0fovzS0crnxgmqqKXe0KtoZZFhRKhfg,1375
13
19
  fmu_manipulation_toolbox/resources/checkbox-checked-disabled.png,sha256=FWIuyrXlaNLLePHfXj7j9ca5rT8Hgr14KCe1EqTCZyk,2288
14
20
  fmu_manipulation_toolbox/resources/checkbox-checked-hover.png,sha256=KNlV-d_aJNTTvUVXKGT9DBY30sIs2LwocLJrFKNKv8k,2419
15
21
  fmu_manipulation_toolbox/resources/checkbox-checked.png,sha256=gzyFqvRFsZixVh6ZlV4SMWUKzglY1rSn7SvJUKMVvtk,2411
@@ -27,6 +33,7 @@ fmu_manipulation_toolbox/resources/icon_fmu.png,sha256=EuygB2xcoM2WAfKKdyKG_UvTL
27
33
  fmu_manipulation_toolbox/resources/license.txt,sha256=5ODuU8g8pIkK-NMWXu_rjZ6k7gM7b-N2rmg87-2Kmqw,1583
28
34
  fmu_manipulation_toolbox/resources/mask.png,sha256=px1U4hQGL0AmZ4BQPknOVREpMpTSejbah3ntkpqAzFA,3008
29
35
  fmu_manipulation_toolbox/resources/model.png,sha256=EAf_HnZJe8zYGZygerG1MMt2U-tMMZlifzXPj4_iORA,208788
36
+ fmu_manipulation_toolbox/resources/darwin64/container.dylib,sha256=omGiU38-2Zh6pyvPjySKDQ5TNDRVS2lkNDIf8BjHD8A,161560
30
37
  fmu_manipulation_toolbox/resources/fmi-2.0/fmi2Annotation.xsd,sha256=OGfyJtaJntKypX5KDpuZ-nV1oYLZ6HV16pkpKOmYox4,2731
31
38
  fmu_manipulation_toolbox/resources/fmi-2.0/fmi2AttributeGroups.xsd,sha256=HwyV7LBse-PQSv4z1xjmtzPU3Hjnv4mluq9YdSBNHMQ,3704
32
39
  fmu_manipulation_toolbox/resources/fmi-2.0/fmi2ModelDescription.xsd,sha256=JM4j_9q-pc40XYHb28jfT3iV3aYM5JLqD5aRjO72K1E,18939
@@ -46,19 +53,19 @@ fmu_manipulation_toolbox/resources/fmi-3.0/fmi3Type.xsd,sha256=TaHRoUBIFtmdEwBKB
46
53
  fmu_manipulation_toolbox/resources/fmi-3.0/fmi3Unit.xsd,sha256=CK_F2t5LfyQ6eSNJ8soTFMVK9DU8vD2WiMi2MQvjB0g,3746
47
54
  fmu_manipulation_toolbox/resources/fmi-3.0/fmi3Variable.xsd,sha256=3YU-3q1-c-namz7sMe5cxnmOVOJsRSmfWR02PKv3xaU,19171
48
55
  fmu_manipulation_toolbox/resources/fmi-3.0/fmi3VariableDependency.xsd,sha256=YQSBwXt4IsDlyegY8bX-qQHGSfE5TipTPfo2g2yqq1c,3082
49
- fmu_manipulation_toolbox/resources/linux32/client_sm.so,sha256=xVdY2zy13pa2DcvFiweSNpp7E6DiONqeoBdlcJHrW_k,35940
50
- fmu_manipulation_toolbox/resources/linux32/server_sm,sha256=1TLGqNPyM5UVOrCfzNqWyF6ClLksY3EiY3CSsrnp6c0,22836
51
- fmu_manipulation_toolbox/resources/linux64/client_sm.so,sha256=EhY1XHo1YcQn6yqZ7wk5okqtZyp0MrcCsGcudqE-aIM,37000
52
- fmu_manipulation_toolbox/resources/linux64/container.so,sha256=7-AS67SdNH5Qvu3o0XOyESFpeZ1hCFPJdgjKuxRXqv8,85016
53
- fmu_manipulation_toolbox/resources/linux64/server_sm,sha256=ulfoPvmaYe9nInYcVEyj7mD9zDzGk56OUoWx1mPKLiE,22768
54
- fmu_manipulation_toolbox/resources/win32/client_sm.dll,sha256=xoHrLIGt5BlTs5VMiMJZI2zOwH9DmRG_SCi2nHRVsZg,17920
55
- fmu_manipulation_toolbox/resources/win32/server_sm.exe,sha256=Kj3OZ24oo0RNVKkOq-MLexbmwDablL5PrWTb-KQ-bJ4,15872
56
- fmu_manipulation_toolbox/resources/win64/client_sm.dll,sha256=lXGSeSrUjiVJ871DivDvcwEgukmdhWe6i6wXc0jXoXQ,22016
57
- fmu_manipulation_toolbox/resources/win64/container.dll,sha256=HGUFaLTuRVbyyu3vgzvVTlwARfzUmbnd4kWxiFzdwqg,57856
58
- fmu_manipulation_toolbox/resources/win64/server_sm.exe,sha256=eUgs_cbUba_GeTXjs6mY3T0RbCqGOT-zdVE_Qlq3bgU,19968
59
- fmu_manipulation_toolbox-1.8.4.3b0.dist-info/licenses/LICENSE.txt,sha256=c_862mzyk6ownO3Gt6cVs0-53IXLi_-ZEQFNDVabESw,1285
60
- fmu_manipulation_toolbox-1.8.4.3b0.dist-info/METADATA,sha256=JGtqdb2vX-tfi5iU0w-gBcaubnVfHpHHAIU9hEik1hY,1159
61
- fmu_manipulation_toolbox-1.8.4.3b0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
62
- fmu_manipulation_toolbox-1.8.4.3b0.dist-info/entry_points.txt,sha256=HjOZkflbI1IuSY8BpOZre20m24M4GDQGCJfPIa7NrlY,264
63
- fmu_manipulation_toolbox-1.8.4.3b0.dist-info/top_level.txt,sha256=9D_h-5BMjSqf9z-XFkbJL_bMppR2XNYW3WNuPkXou0k,25
64
- fmu_manipulation_toolbox-1.8.4.3b0.dist-info/RECORD,,
56
+ fmu_manipulation_toolbox/resources/linux32/client_sm.so,sha256=ad_Fo62_Vt4P3DmROhS3B4N-jBD5jQZHYBq20wTL1_U,34756
57
+ fmu_manipulation_toolbox/resources/linux32/server_sm,sha256=gzKU0BTeaRkvhTMQtHHj3K8uYFyEdyGGn_mZy_jG9xo,21304
58
+ fmu_manipulation_toolbox/resources/linux64/client_sm.so,sha256=JHMekdWhn2RPUDqfH3U7WB8SM1WyGl-0UbaVE-Fh-Aw,32592
59
+ fmu_manipulation_toolbox/resources/linux64/container.so,sha256=3wwgP8xYumKzmaGH761f3D_mkVbUCntOE_UgGUtahyg,135520
60
+ fmu_manipulation_toolbox/resources/linux64/server_sm,sha256=MZn6vITN2qpBHYt_RaK2VnFFp00hk8fTALBHmXPtLwc,22608
61
+ fmu_manipulation_toolbox/resources/win32/client_sm.dll,sha256=WcieLopqhHu3fIXZo_k71FMgroylR5pRWs9qGdoVzCc,17920
62
+ fmu_manipulation_toolbox/resources/win32/server_sm.exe,sha256=wqKQrr5m6DsdNk5rKFRKwgyTDOySlPX_jMMhdyywMsQ,15360
63
+ fmu_manipulation_toolbox/resources/win64/client_sm.dll,sha256=uOTC5yGOtSheSGcWmBEWXhwyrJMJpoKgtTNEo8WJVC0,21504
64
+ fmu_manipulation_toolbox/resources/win64/container.dll,sha256=YG2zagCEmzrtGbbNCYir5N-pm5hxPdZft9cZPVMQuWI,98816
65
+ fmu_manipulation_toolbox/resources/win64/server_sm.exe,sha256=SikJSqTwrq7HMKITP3ksFi2j0ZqCIqgOMdPMsHi5L8w,18432
66
+ fmu_manipulation_toolbox-1.9.dist-info/licenses/LICENSE.txt,sha256=c_862mzyk6ownO3Gt6cVs0-53IXLi_-ZEQFNDVabESw,1285
67
+ fmu_manipulation_toolbox-1.9.dist-info/METADATA,sha256=8Ls_kJpVghQrFyyDEGHeyc6aKD0LlHKd7rJDAsWbTxk,1153
68
+ fmu_manipulation_toolbox-1.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
69
+ fmu_manipulation_toolbox-1.9.dist-info/entry_points.txt,sha256=HjOZkflbI1IuSY8BpOZre20m24M4GDQGCJfPIa7NrlY,264
70
+ fmu_manipulation_toolbox-1.9.dist-info/top_level.txt,sha256=9D_h-5BMjSqf9z-XFkbJL_bMppR2XNYW3WNuPkXou0k,25
71
+ fmu_manipulation_toolbox-1.9.dist-info/RECORD,,