fmu-manipulation-toolbox 1.9rc2__py3-none-any.whl → 1.9rc4__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 (22) hide show
  1. fmu_manipulation_toolbox/__version__.py +1 -1
  2. fmu_manipulation_toolbox/container.py +24 -22
  3. fmu_manipulation_toolbox/gui.py +2 -0
  4. fmu_manipulation_toolbox/operations.py +1 -61
  5. fmu_manipulation_toolbox/remoting.py +105 -0
  6. fmu_manipulation_toolbox/resources/darwin64/container.dylib +0 -0
  7. fmu_manipulation_toolbox/resources/linux32/client_sm.so +0 -0
  8. fmu_manipulation_toolbox/resources/linux32/server_sm +0 -0
  9. fmu_manipulation_toolbox/resources/linux64/client_sm.so +0 -0
  10. fmu_manipulation_toolbox/resources/linux64/container.so +0 -0
  11. fmu_manipulation_toolbox/resources/linux64/server_sm +0 -0
  12. fmu_manipulation_toolbox/resources/win32/client_sm.dll +0 -0
  13. fmu_manipulation_toolbox/resources/win32/server_sm.exe +0 -0
  14. fmu_manipulation_toolbox/resources/win64/client_sm.dll +0 -0
  15. fmu_manipulation_toolbox/resources/win64/container.dll +0 -0
  16. fmu_manipulation_toolbox/resources/win64/server_sm.exe +0 -0
  17. {fmu_manipulation_toolbox-1.9rc2.dist-info → fmu_manipulation_toolbox-1.9rc4.dist-info}/METADATA +1 -1
  18. {fmu_manipulation_toolbox-1.9rc2.dist-info → fmu_manipulation_toolbox-1.9rc4.dist-info}/RECORD +22 -21
  19. {fmu_manipulation_toolbox-1.9rc2.dist-info → fmu_manipulation_toolbox-1.9rc4.dist-info}/WHEEL +0 -0
  20. {fmu_manipulation_toolbox-1.9rc2.dist-info → fmu_manipulation_toolbox-1.9rc4.dist-info}/entry_points.txt +0 -0
  21. {fmu_manipulation_toolbox-1.9rc2.dist-info → fmu_manipulation_toolbox-1.9rc4.dist-info}/licenses/LICENSE.txt +0 -0
  22. {fmu_manipulation_toolbox-1.9rc2.dist-info → fmu_manipulation_toolbox-1.9rc4.dist-info}/top_level.txt +0 -0
@@ -1 +1 @@
1
- 'V1.9-rc2'
1
+ 'V1.9-rc4'
@@ -1,5 +1,6 @@
1
1
  import logging
2
2
  import getpass
3
+ import math
3
4
  import os
4
5
  import shutil
5
6
  import uuid
@@ -162,7 +163,8 @@ class EmbeddedFMUPort:
162
163
 
163
164
  class EmbeddedFMU(OperationAbstract):
164
165
  capability_list = ("needsExecutionTool",
165
- "canBeInstantiatedOnlyOncePerProcess")
166
+ "canBeInstantiatedOnlyOncePerProcess",
167
+ "canHandleVariableCommunicationStepSize")
166
168
 
167
169
  def __init__(self, filename):
168
170
  self.fmu = FMU(filename)
@@ -211,7 +213,7 @@ class EmbeddedFMU(OperationAbstract):
211
213
  self.ports[port.name] = port
212
214
 
213
215
  def __repr__(self):
214
- return f"FMU '{self.name}' ({len(self.ports)} variables)"
216
+ return f"FMU '{self.name}' ({len(self.ports)} variables, ts={self.step_size}s)"
215
217
 
216
218
 
217
219
  class FMUContainerError(Exception):
@@ -491,8 +493,8 @@ class FMUContainer:
491
493
 
492
494
  try:
493
495
  fmu = EmbeddedFMU(self.fmu_directory / fmu_filename)
494
- if fmu.fmi_version > self.fmi_version:
495
- logger.warning(f"Try to embed FMU-{fmu.fmi_version} into container FMI-{self.fmi_version}")
496
+ if not fmu.fmi_version == self.fmi_version:
497
+ logger.warning(f"Try to embed FMU-{fmu.fmi_version} into container FMI-{self.fmi_version}.")
496
498
  self.involved_fmu[fmu.name] = fmu
497
499
 
498
500
  logger.debug(f"Adding FMU #{len(self.involved_fmu)}: {fmu}")
@@ -642,16 +644,16 @@ class FMUContainer:
642
644
 
643
645
  return auto_wired
644
646
 
645
- def minimum_step_size(self) -> float:
646
- step_size = None
647
+ def default_step_size(self) -> float:
648
+ freq_set = set()
647
649
  for fmu in self.involved_fmu.values():
648
- if step_size:
649
- if fmu.step_size and fmu.step_size < step_size:
650
- step_size = fmu.step_size
651
- else:
652
- step_size = fmu.step_size
650
+ if fmu.step_size and fmu.capabilities["canHandleVariableCommunicationStepSize"] == "false":
651
+ freq_set.add(int(1.0/fmu.step_size))
653
652
 
654
- if not step_size:
653
+ common_freq = math.gcd(*freq_set)
654
+ try:
655
+ step_size = 1.0 / float(common_freq)
656
+ except ZeroDivisionError:
655
657
  step_size = 0.1
656
658
  logger.warning(f"Defaulting to step_size={step_size}")
657
659
 
@@ -659,15 +661,15 @@ class FMUContainer:
659
661
 
660
662
  def sanity_check(self, step_size: Optional[float]):
661
663
  for fmu in self.involved_fmu.values():
662
- if not fmu.step_size:
663
- continue
664
- ts_ratio = step_size / fmu.step_size
665
- if ts_ratio < 1.0:
666
- logger.warning(f"Container step_size={step_size}s is lower than FMU '{fmu.name}' "
667
- f"step_size={fmu.step_size}s.")
668
- if ts_ratio != int(ts_ratio):
669
- logger.warning(f"Container step_size={step_size}s should divisible by FMU '{fmu.name}' "
670
- f"step_size={fmu.step_size}s.")
664
+ if fmu.step_size and fmu.capabilities["canHandleVariableCommunicationStepSize"] == "false":
665
+ ts_ratio = step_size / fmu.step_size
666
+ logger.debug(f"container step_size: {step_size} = {fmu.step_size} x {ts_ratio} for {fmu.name}")
667
+ if ts_ratio < 1.0:
668
+ logger.warning(f"Container step_size={step_size}s is lower than FMU '{fmu.name}' "
669
+ f"step_size={fmu.step_size}s.")
670
+ if ts_ratio != int(ts_ratio):
671
+ logger.warning(f"Container step_size={step_size}s should divisible by FMU '{fmu.name}' "
672
+ f"step_size={fmu.step_size}s.")
671
673
  for port_name in fmu.ports:
672
674
  cport = ContainerPort(fmu, port_name)
673
675
  if cport not in self.rules:
@@ -683,7 +685,7 @@ class FMUContainer:
683
685
 
684
686
  if step_size is None:
685
687
  logger.info(f"step_size will be deduced from the embedded FMU's")
686
- step_size = self.minimum_step_size()
688
+ step_size = self.default_step_size()
687
689
  self.sanity_check(step_size)
688
690
 
689
691
  logger.info(f"Building FMU '{fmu_filename}', step_size={step_size}")
@@ -13,6 +13,8 @@ from functools import partial
13
13
 
14
14
  from .gui_style import gui_style, log_color
15
15
  from .operations import *
16
+ from .remoting import (OperationAddRemotingWin32, OperationAddRemotingWin64, OperationAddFrontendWin32,
17
+ OperationAddFrontendWin64)
16
18
  from .assembly import Assembly, AssemblyNode
17
19
  from .checker import checker_list
18
20
  from .help import Help
@@ -8,7 +8,6 @@ import tempfile
8
8
  import xml.parsers.expat
9
9
  import zipfile
10
10
  import hashlib
11
- from pathlib import Path
12
11
  from typing import *
13
12
 
14
13
  logger = logging.getLogger("fmu_manipulation_toolbox")
@@ -279,7 +278,7 @@ class OperationAbstract:
279
278
  def experiment_attrs(self, attrs):
280
279
  pass
281
280
 
282
- def port_attrs(self, fmu_port) -> int:
281
+ def port_attrs(self, fmu_port: FMUPort) -> int:
283
282
  """ return 0 to keep port, otherwise remove it"""
284
283
  return 0
285
284
 
@@ -366,65 +365,6 @@ class OperationRenameFromCSV(OperationAbstract):
366
365
  return 1
367
366
 
368
367
 
369
- class OperationAddRemotingWinAbstract(OperationAbstract):
370
- bitness_from = None
371
- bitness_to = None
372
-
373
- def __repr__(self):
374
- return f"Add '{self.bitness_to}' remoting on '{self.bitness_from}' FMU"
375
-
376
- def fmi_attrs(self, attrs):
377
- if not attrs["fmiVersion"] == "2.0":
378
- raise OperationError(f"Adding remoting is only available for FMI-2.0")
379
-
380
- def cosimulation_attrs(self, attrs):
381
- fmu_bin = {
382
- "win32": os.path.join(self.fmu.tmp_directory, "binaries", f"win32"),
383
- "win64": os.path.join(self.fmu.tmp_directory, "binaries", f"win64"),
384
- }
385
-
386
- if not os.path.isdir(fmu_bin[self.bitness_from]):
387
- raise OperationError(f"{self.bitness_from} interface does not exist")
388
-
389
- if os.path.isdir(fmu_bin[self.bitness_to]):
390
- logger.info(f"{self.bitness_to} already exists. Add front-end.")
391
- shutil.move(os.path.join(fmu_bin[self.bitness_to], attrs['modelIdentifier'] + ".dll"),
392
- os.path.join(fmu_bin[self.bitness_to], attrs['modelIdentifier'] + "-remoted.dll"))
393
- else:
394
- os.mkdir(fmu_bin[self.bitness_to])
395
-
396
- to_path = Path(__file__).parent / "resources" / self.bitness_to
397
- shutil.copyfile(to_path / "client_sm.dll",
398
- Path(fmu_bin[self.bitness_to]) / Path(attrs['modelIdentifier']).with_suffix(".dll"))
399
-
400
- from_path = Path(__file__).parent / "resources" / self.bitness_from
401
- shutil.copyfile(from_path / "server_sm.exe",
402
- Path(fmu_bin[self.bitness_from]) / "server_sm.exe")
403
-
404
- shutil.copyfile(Path(__file__).parent / "resources" / "license.txt",
405
- Path(fmu_bin[self.bitness_to]) / "license.txt")
406
-
407
-
408
- class OperationAddRemotingWin64(OperationAddRemotingWinAbstract):
409
- bitness_from = "win32"
410
- bitness_to = "win64"
411
-
412
-
413
- class OperationAddFrontendWin32(OperationAddRemotingWinAbstract):
414
- bitness_from = "win32"
415
- bitness_to = "win32"
416
-
417
-
418
- class OperationAddFrontendWin64(OperationAddRemotingWinAbstract):
419
- bitness_from = "win64"
420
- bitness_to = "win64"
421
-
422
-
423
- class OperationAddRemotingWin32(OperationAddRemotingWinAbstract):
424
- bitness_from = "win64"
425
- bitness_to = "win32"
426
-
427
-
428
368
  class OperationRemoveRegexp(OperationAbstract):
429
369
  def __repr__(self):
430
370
  return f"Remove ports matching '{self.regex_string}'"
@@ -0,0 +1,105 @@
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
+ try:
64
+ self.vr[fmu_port.fmi_type].append(fmu_port["valueReference"])
65
+ if fmu_port["causality"] in ("input", "parameter"):
66
+ self.nb_input += 1
67
+ else:
68
+ self.nb_output += 1
69
+ except KeyError:
70
+ logger.error(f"Type '{fmu_port.fmi_type}' is not supported by remoting.")
71
+
72
+ return 0
73
+
74
+ def closure(self):
75
+ target_dir = Path(self.fmu.tmp_directory) / "resources"
76
+ if not target_dir.is_dir():
77
+ target_dir.mkdir()
78
+
79
+ logger.info(f"Remoting nb input port: {self.nb_input}")
80
+ logger.info(f"Remoting nb output port: {self.nb_output}")
81
+ with open(target_dir/ "remoting_table.txt", "wt") as file:
82
+ for fmi_type in ('Real', 'Integer', 'Boolean'):
83
+ print(len(self.vr[fmi_type]), file=file)
84
+ for fmi_type in ('Real', 'Integer', 'Boolean'):
85
+ for vr in sorted(self.vr[fmi_type]):
86
+ print(vr, file=file)
87
+
88
+ class OperationAddRemotingWin64(OperationAddRemotingWinAbstract):
89
+ bitness_from = "win32"
90
+ bitness_to = "win64"
91
+
92
+
93
+ class OperationAddFrontendWin32(OperationAddRemotingWinAbstract):
94
+ bitness_from = "win32"
95
+ bitness_to = "win32"
96
+
97
+
98
+ class OperationAddFrontendWin64(OperationAddRemotingWinAbstract):
99
+ bitness_from = "win64"
100
+ bitness_to = "win64"
101
+
102
+
103
+ class OperationAddRemotingWin32(OperationAddRemotingWinAbstract):
104
+ bitness_from = "win64"
105
+ bitness_to = "win32"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fmu_manipulation_toolbox
3
- Version: 1.9rc2
3
+ Version: 1.9rc4
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,13 +1,14 @@
1
1
  fmu_manipulation_toolbox/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  fmu_manipulation_toolbox/__main__.py,sha256=FpG0ITBz5q-AvIbXplVh_1g1zla5souFGtpiDdECxEw,352
3
- fmu_manipulation_toolbox/__version__.py,sha256=Z-9JT4Rjt43p25I55xHJame93p0nfRXYoSRRq-Je6wY,11
3
+ fmu_manipulation_toolbox/__version__.py,sha256=MQjjcF80yR4bZlt37VLxEd4f1ULWsh44GbAtNZuRqCo,11
4
4
  fmu_manipulation_toolbox/assembly.py,sha256=XQ_1sB6K1Dk2mnNe-E3_6Opoeub7F9Qaln0EUDzsop8,26553
5
5
  fmu_manipulation_toolbox/checker.py,sha256=jw1omfrMMIMHlIpHXpWBcQgIiS9hnHe5T9CZ5KlbVGs,2422
6
- fmu_manipulation_toolbox/container.py,sha256=8Wf16sgUPkY-ByWeKt-3TD_4vNRQuLwH9Gs7D2Q6tAk,44959
7
- fmu_manipulation_toolbox/gui.py,sha256=iOJ3F_zfw3mU34VofZrYdaffljTmYfuy33fJXlLaOwg,29045
6
+ fmu_manipulation_toolbox/container.py,sha256=SDP3RjiHCqAtRDU2uZl1slbsxWAR5v_uAcegeNxzwQc,45322
7
+ fmu_manipulation_toolbox/gui.py,sha256=ax-IbGO7GyBG0Mb5okN588CKQDfMxoF1uZtD1_CYnjc,29199
8
8
  fmu_manipulation_toolbox/gui_style.py,sha256=s6WdrnNd_lCMWhuBf5LKK8wrfLXCU7pFTLUfvqkJVno,6633
9
9
  fmu_manipulation_toolbox/help.py,sha256=aklKiLrsE0adSzQ5uoEB1sBDmI6s4l231gavu4XxxzA,5856
10
- fmu_manipulation_toolbox/operations.py,sha256=b7N5AVHLIpQO8od4BYasb9CppHJ-ZmW8mu0ZdhndoHI,19472
10
+ fmu_manipulation_toolbox/operations.py,sha256=4n4Tn5QO6k3560OZgjnRw_V0me6xOy9TbmKDeoIUbT0,17242
11
+ fmu_manipulation_toolbox/remoting.py,sha256=vsvGRIUr-VxUkpBMCfE_G0kYVnB2CN03ts_Imi2uLk8,3814
11
12
  fmu_manipulation_toolbox/split.py,sha256=NVkfdTRR0jj_VOdgtxHQoKptkAg5TFVUA7nUx3_o9Pg,13336
12
13
  fmu_manipulation_toolbox/version.py,sha256=OhBLkZ1-nhC77kyvffPNAf6m8OZe1bYTnNf_PWs1NvM,392
13
14
  fmu_manipulation_toolbox/resources/checkbox-checked-disabled.png,sha256=FWIuyrXlaNLLePHfXj7j9ca5rT8Hgr14KCe1EqTCZyk,2288
@@ -27,7 +28,7 @@ fmu_manipulation_toolbox/resources/icon_fmu.png,sha256=EuygB2xcoM2WAfKKdyKG_UvTL
27
28
  fmu_manipulation_toolbox/resources/license.txt,sha256=5ODuU8g8pIkK-NMWXu_rjZ6k7gM7b-N2rmg87-2Kmqw,1583
28
29
  fmu_manipulation_toolbox/resources/mask.png,sha256=px1U4hQGL0AmZ4BQPknOVREpMpTSejbah3ntkpqAzFA,3008
29
30
  fmu_manipulation_toolbox/resources/model.png,sha256=EAf_HnZJe8zYGZygerG1MMt2U-tMMZlifzXPj4_iORA,208788
30
- fmu_manipulation_toolbox/resources/darwin64/container.dylib,sha256=G6ABYe2mBmI_0pGU6HJly3yhKh6VEirgN4RFAThUES4,161496
31
+ fmu_manipulation_toolbox/resources/darwin64/container.dylib,sha256=aXVIpGx6OYxHEqw9R4V7IjM5KVjQTEFEG4sFpPsIFG0,161560
31
32
  fmu_manipulation_toolbox/resources/fmi-2.0/fmi2Annotation.xsd,sha256=OGfyJtaJntKypX5KDpuZ-nV1oYLZ6HV16pkpKOmYox4,2731
32
33
  fmu_manipulation_toolbox/resources/fmi-2.0/fmi2AttributeGroups.xsd,sha256=HwyV7LBse-PQSv4z1xjmtzPU3Hjnv4mluq9YdSBNHMQ,3704
33
34
  fmu_manipulation_toolbox/resources/fmi-2.0/fmi2ModelDescription.xsd,sha256=JM4j_9q-pc40XYHb28jfT3iV3aYM5JLqD5aRjO72K1E,18939
@@ -47,19 +48,19 @@ fmu_manipulation_toolbox/resources/fmi-3.0/fmi3Type.xsd,sha256=TaHRoUBIFtmdEwBKB
47
48
  fmu_manipulation_toolbox/resources/fmi-3.0/fmi3Unit.xsd,sha256=CK_F2t5LfyQ6eSNJ8soTFMVK9DU8vD2WiMi2MQvjB0g,3746
48
49
  fmu_manipulation_toolbox/resources/fmi-3.0/fmi3Variable.xsd,sha256=3YU-3q1-c-namz7sMe5cxnmOVOJsRSmfWR02PKv3xaU,19171
49
50
  fmu_manipulation_toolbox/resources/fmi-3.0/fmi3VariableDependency.xsd,sha256=YQSBwXt4IsDlyegY8bX-qQHGSfE5TipTPfo2g2yqq1c,3082
50
- fmu_manipulation_toolbox/resources/linux32/client_sm.so,sha256=xVdY2zy13pa2DcvFiweSNpp7E6DiONqeoBdlcJHrW_k,35940
51
- fmu_manipulation_toolbox/resources/linux32/server_sm,sha256=1TLGqNPyM5UVOrCfzNqWyF6ClLksY3EiY3CSsrnp6c0,22836
52
- fmu_manipulation_toolbox/resources/linux64/client_sm.so,sha256=EhY1XHo1YcQn6yqZ7wk5okqtZyp0MrcCsGcudqE-aIM,37000
53
- fmu_manipulation_toolbox/resources/linux64/container.so,sha256=KtvL1rmCFE6FA2mFGoHEhIYqAYd47ZmJLK5YsyO7TqM,135464
54
- fmu_manipulation_toolbox/resources/linux64/server_sm,sha256=ulfoPvmaYe9nInYcVEyj7mD9zDzGk56OUoWx1mPKLiE,22768
55
- fmu_manipulation_toolbox/resources/win32/client_sm.dll,sha256=rL9OCeoOmCvzf88mFubyPvTDImKxO26fNHoX5a_wuaI,17920
56
- fmu_manipulation_toolbox/resources/win32/server_sm.exe,sha256=NGBZkTqSBFg8Wja_BYqoumk6qKmQoND4n8tDcPvKj8g,15872
57
- fmu_manipulation_toolbox/resources/win64/client_sm.dll,sha256=UZi61eVctdZ0jLEsC5GWAG4zM6LTq6firPYNByz39LQ,22016
58
- fmu_manipulation_toolbox/resources/win64/container.dll,sha256=6-HLcAhtd68PMD0SVloSrfpFJlUdSJLp58hqjzCLsHQ,97792
59
- fmu_manipulation_toolbox/resources/win64/server_sm.exe,sha256=wWZuT98XkCraZNNlWsnxoxoYABsXiJbxVDXg5zirnjI,19968
60
- fmu_manipulation_toolbox-1.9rc2.dist-info/licenses/LICENSE.txt,sha256=c_862mzyk6ownO3Gt6cVs0-53IXLi_-ZEQFNDVabESw,1285
61
- fmu_manipulation_toolbox-1.9rc2.dist-info/METADATA,sha256=CAh7QGHMed2PqNbtoLGwhn46FEwESV4uXEMaAPIPkJY,1156
62
- fmu_manipulation_toolbox-1.9rc2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
63
- fmu_manipulation_toolbox-1.9rc2.dist-info/entry_points.txt,sha256=HjOZkflbI1IuSY8BpOZre20m24M4GDQGCJfPIa7NrlY,264
64
- fmu_manipulation_toolbox-1.9rc2.dist-info/top_level.txt,sha256=9D_h-5BMjSqf9z-XFkbJL_bMppR2XNYW3WNuPkXou0k,25
65
- fmu_manipulation_toolbox-1.9rc2.dist-info/RECORD,,
51
+ fmu_manipulation_toolbox/resources/linux32/client_sm.so,sha256=ytv2fMHRYkQS4v_ODKVCt3Z_19k7tCYTKT8kKOK0Pu0,34756
52
+ fmu_manipulation_toolbox/resources/linux32/server_sm,sha256=pHXd5rRyJrCEUPGxVcK3irE86ThxVUTBRn_rgOZdSYg,21224
53
+ fmu_manipulation_toolbox/resources/linux64/client_sm.so,sha256=xBgQTTiww_SON8bHP4UP6UT8PqzzHiBgJHTiiG3Asi8,32592
54
+ fmu_manipulation_toolbox/resources/linux64/container.so,sha256=rgaCBItfw-ehwnqvf4sfN6GPbVffw7mKBNcfUeTmWlE,135520
55
+ fmu_manipulation_toolbox/resources/linux64/server_sm,sha256=A6-IQUCN51r5rQkEW9lJJuZKqRPgeoxyMwjc5NNMq-A,22552
56
+ fmu_manipulation_toolbox/resources/win32/client_sm.dll,sha256=8pAVogHR9XYTroHEtHaXbZX9pcB_FqMYw64m5BPcVrA,17408
57
+ fmu_manipulation_toolbox/resources/win32/server_sm.exe,sha256=AENRfy4kw9F6swsyDjfSuISWcVmdTiMUPbiLwPy1_1E,15360
58
+ fmu_manipulation_toolbox/resources/win64/client_sm.dll,sha256=T0RskNAJ66BZUkj_GDO0ECdPl_KrGrpHrpwUAjWRONk,20992
59
+ fmu_manipulation_toolbox/resources/win64/container.dll,sha256=nyBejwuIkWmF90XgxYx0S9QVoTOXigW_6oottiC_R5s,98816
60
+ fmu_manipulation_toolbox/resources/win64/server_sm.exe,sha256=W73zt3R0aquuPswUD0ymQ5_n0lQEkZ93MB6v88uZ_M8,18432
61
+ fmu_manipulation_toolbox-1.9rc4.dist-info/licenses/LICENSE.txt,sha256=c_862mzyk6ownO3Gt6cVs0-53IXLi_-ZEQFNDVabESw,1285
62
+ fmu_manipulation_toolbox-1.9rc4.dist-info/METADATA,sha256=rTPWWcY4E_TfwlGiT20glhk-OUF6dljaDE_4eaknux0,1156
63
+ fmu_manipulation_toolbox-1.9rc4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
64
+ fmu_manipulation_toolbox-1.9rc4.dist-info/entry_points.txt,sha256=HjOZkflbI1IuSY8BpOZre20m24M4GDQGCJfPIa7NrlY,264
65
+ fmu_manipulation_toolbox-1.9rc4.dist-info/top_level.txt,sha256=9D_h-5BMjSqf9z-XFkbJL_bMppR2XNYW3WNuPkXou0k,25
66
+ fmu_manipulation_toolbox-1.9rc4.dist-info/RECORD,,