fm-weck 1.4.5__py3-none-any.whl → 1.4.7__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 (127) hide show
  1. fm_weck/__init__.py +1 -1
  2. fm_weck/__main__.py +1 -0
  3. fm_weck/cache_mgr.py +47 -0
  4. fm_weck/cli.py +136 -27
  5. fm_weck/config.py +31 -17
  6. fm_weck/engine.py +110 -32
  7. fm_weck/exceptions.py +1 -0
  8. fm_weck/image_mgr.py +5 -4
  9. fm_weck/resources/{BenchExec-3.25-py3-none-any.whl → BenchExec-3.27-py3-none-any.whl} +0 -0
  10. fm_weck/resources/__init__.py +14 -12
  11. fm_weck/resources/fm_tools/2ls.yml +32 -7
  12. fm_weck/resources/fm_tools/aise.yml +6 -1
  13. fm_weck/resources/fm_tools/aprove.yml +73 -72
  14. fm_weck/resources/fm_tools/blast.yml +58 -0
  15. fm_weck/resources/fm_tools/brick.yml +4 -4
  16. fm_weck/resources/fm_tools/bubaak-split.yml +3 -3
  17. fm_weck/resources/fm_tools/bubaak.yml +4 -4
  18. fm_weck/resources/fm_tools/cadp.yml +95 -0
  19. fm_weck/resources/fm_tools/cbmc.yml +8 -4
  20. fm_weck/resources/fm_tools/cetfuzz.yml +4 -3
  21. fm_weck/resources/fm_tools/coastal.yml +13 -8
  22. fm_weck/resources/fm_tools/concurrentwitness2test.yml +4 -1
  23. fm_weck/resources/fm_tools/cooperace.yml +7 -6
  24. fm_weck/resources/fm_tools/coveriteam-verifier-algo-selection.yml +9 -20
  25. fm_weck/resources/fm_tools/coveriteam-verifier-parallel-portfolio.yml +9 -20
  26. fm_weck/resources/fm_tools/coveritest.yml +27 -6
  27. fm_weck/resources/fm_tools/cpa-bam-bnb.yml +13 -9
  28. fm_weck/resources/fm_tools/cpa-bam-smg.yml +12 -7
  29. fm_weck/resources/fm_tools/cpa-lockator.yml +13 -9
  30. fm_weck/resources/fm_tools/cpa-witness2test.yml +13 -3
  31. fm_weck/resources/fm_tools/cpachecker.yml +3 -3
  32. fm_weck/resources/fm_tools/cpv.yml +2 -0
  33. fm_weck/resources/fm_tools/crux.yml +20 -8
  34. fm_weck/resources/fm_tools/cseq.yml +9 -4
  35. fm_weck/resources/fm_tools/dartagnan.yml +12 -1
  36. fm_weck/resources/fm_tools/deagle.yml +5 -0
  37. fm_weck/resources/fm_tools/divine.yml +20 -11
  38. fm_weck/resources/fm_tools/ebf.yml +8 -5
  39. fm_weck/resources/fm_tools/emergentheta.yml +9 -2
  40. fm_weck/resources/fm_tools/esbmc-incr.yml +13 -10
  41. fm_weck/resources/fm_tools/esbmc-kind.yml +12 -11
  42. fm_weck/resources/fm_tools/fdse.yml +1 -1
  43. fm_weck/resources/fm_tools/fizzer.yml +15 -24
  44. fm_weck/resources/fm_tools/frama-c-sv.yml +3 -2
  45. fm_weck/resources/fm_tools/fshell-witness2test.yml +9 -6
  46. fm_weck/resources/fm_tools/fusebmc-ia.yml +6 -3
  47. fm_weck/resources/fm_tools/fusebmc.yml +26 -6
  48. fm_weck/resources/fm_tools/gazer-theta.yml +10 -7
  49. fm_weck/resources/fm_tools/gdart-llvm.yml +8 -4
  50. fm_weck/resources/fm_tools/gdart.yml +3 -0
  51. fm_weck/resources/fm_tools/goblint.yml +7 -2
  52. fm_weck/resources/fm_tools/graves-par.yml +9 -14
  53. fm_weck/resources/fm_tools/graves.yml +10 -4
  54. fm_weck/resources/fm_tools/gwit.yml +10 -4
  55. fm_weck/resources/fm_tools/hornix.yml +12 -7
  56. fm_weck/resources/fm_tools/hybridtiger.yml +13 -8
  57. fm_weck/resources/fm_tools/infer.yml +12 -7
  58. fm_weck/resources/fm_tools/java-ranger.yml +6 -3
  59. fm_weck/resources/fm_tools/jayhorn.yml +6 -4
  60. fm_weck/resources/fm_tools/jbmc.yml +11 -2
  61. fm_weck/resources/fm_tools/jcwit.yml +9 -5
  62. fm_weck/resources/fm_tools/jdart.yml +12 -7
  63. fm_weck/resources/fm_tools/klee.yml +13 -8
  64. fm_weck/resources/fm_tools/kleef.yml +3 -3
  65. fm_weck/resources/fm_tools/korn.yml +11 -1
  66. fm_weck/resources/fm_tools/lazycseq.yml +10 -7
  67. fm_weck/resources/fm_tools/legion-symcc.yml +6 -12
  68. fm_weck/resources/fm_tools/legion.yml +9 -14
  69. fm_weck/resources/fm_tools/lf-checker.yml +10 -6
  70. fm_weck/resources/fm_tools/liv.yml +19 -4
  71. fm_weck/resources/fm_tools/locksmith.yml +10 -6
  72. fm_weck/resources/fm_tools/ltsmin.yml +40 -0
  73. fm_weck/resources/fm_tools/metaval++.yml +19 -3
  74. fm_weck/resources/fm_tools/metaval.yml +21 -3
  75. fm_weck/resources/fm_tools/mlb.yml +5 -5
  76. fm_weck/resources/fm_tools/mopsa.yml +9 -7
  77. fm_weck/resources/fm_tools/nacpa.yml +7 -1
  78. fm_weck/resources/fm_tools/nitwit.yml +5 -3
  79. fm_weck/resources/fm_tools/owic.yml +4 -3
  80. fm_weck/resources/fm_tools/pesco.yml +10 -4
  81. fm_weck/resources/fm_tools/pichecker.yml +10 -6
  82. fm_weck/resources/fm_tools/pinaka.yml +13 -8
  83. fm_weck/resources/fm_tools/predatorhp.yml +6 -4
  84. fm_weck/resources/fm_tools/prism.yml +67 -0
  85. fm_weck/resources/fm_tools/proton.yml +6 -6
  86. fm_weck/resources/fm_tools/prtest.yml +22 -6
  87. fm_weck/resources/fm_tools/racerf.yml +14 -5
  88. fm_weck/resources/fm_tools/relay-sv.yml +8 -13
  89. fm_weck/resources/fm_tools/rizzer.yml +8 -12
  90. fm_weck/resources/fm_tools/schema.yml +56 -3
  91. fm_weck/resources/fm_tools/sikraken.yml +3 -3
  92. fm_weck/resources/fm_tools/spf.yml +13 -8
  93. fm_weck/resources/fm_tools/sv-sanitizers.yml +3 -1
  94. fm_weck/resources/fm_tools/svf-svc.yml +15 -6
  95. fm_weck/resources/fm_tools/symbiotic-witch.yml +9 -5
  96. fm_weck/resources/fm_tools/symbiotic.yml +6 -2
  97. fm_weck/resources/fm_tools/testcov.yml +8 -8
  98. fm_weck/resources/fm_tools/theta.yml +8 -4
  99. fm_weck/resources/fm_tools/thorn.yml +3 -1
  100. fm_weck/resources/fm_tools/tracerx-wp.yml +11 -2
  101. fm_weck/resources/fm_tools/tracerx.yml +5 -1
  102. fm_weck/resources/fm_tools/uautomizer.yml +7 -12
  103. fm_weck/resources/fm_tools/ugemcutter.yml +8 -2
  104. fm_weck/resources/fm_tools/ukojak.yml +5 -2
  105. fm_weck/resources/fm_tools/ureferee.yml +3 -4
  106. fm_weck/resources/fm_tools/utaipan.yml +8 -2
  107. fm_weck/resources/fm_tools/utestgen.yml +11 -3
  108. fm_weck/resources/fm_tools/vercors.yml +94 -0
  109. fm_weck/resources/fm_tools/veriabs.yml +11 -9
  110. fm_weck/resources/fm_tools/veriabsl.yml +10 -8
  111. fm_weck/resources/fm_tools/verifuzz.yml +16 -266
  112. fm_weck/resources/fm_tools/verioover.yml +10 -6
  113. fm_weck/resources/fm_tools/wasp-c.yml +6 -4
  114. fm_weck/resources/fm_tools/wit4java.yml +20 -13
  115. fm_weck/resources/fm_tools/witch.yml +8 -4
  116. fm_weck/resources/fm_tools/witnesslint.yml +37 -9
  117. fm_weck/resources/fm_tools/witnessmap.yml +16 -1
  118. fm_weck/run_result.py +38 -0
  119. fm_weck/runexec_mode.py +15 -4
  120. fm_weck/serve.py +119 -22
  121. fm_weck/version_listing.py +25 -0
  122. {fm_weck-1.4.5.dist-info → fm_weck-1.4.7.dist-info}/METADATA +5 -3
  123. fm_weck-1.4.7.dist-info/RECORD +154 -0
  124. {fm_weck-1.4.5.dist-info → fm_weck-1.4.7.dist-info}/WHEEL +1 -1
  125. fm_weck-1.4.5.dist-info/RECORD +0 -146
  126. /fm_weck/resources/{BenchExec-3.25-py3-none-any.whl.license → BenchExec-3.27-py3-none-any.whl.license} +0 -0
  127. {fm_weck-1.4.5.dist-info → fm_weck-1.4.7.dist-info}/entry_points.txt +0 -0
@@ -1,5 +1,13 @@
1
1
  id: witnessmap
2
2
  name: WitnessMap
3
+ description: |
4
+ WitnessMap is a simple tool with the same input and output as a verifier that
5
+ only copies witnesses contained in validation tasks
6
+ to its output folder.
7
+ It is used by SV-COMP to place existing verification witnesses
8
+ at the location where the competition infrastructure expects them
9
+ (this way, the witness is technically 'produced' by a tool
10
+ with the same interface as a verifier).
3
11
  input_languages:
4
12
  - C
5
13
  project_url: https://gitlab.com/sosy-lab/software/witnessmap
@@ -13,6 +21,11 @@ fmtools_entry_maintainers:
13
21
  - PhilippWendler
14
22
 
15
23
  maintainers:
24
+ - orcid: 0000-0003-4832-7662
25
+ name: Dirk Beyer
26
+ institution: LMU Munich
27
+ country: Germany
28
+ url: https://www.sosy-lab.org/people/dbeyer/
16
29
  - name: Marian Lingsch-Rosenfeld
17
30
  orcid: 0000-0002-8172-3184
18
31
  institution: LMU Munich
@@ -22,13 +35,15 @@ maintainers:
22
35
  versions:
23
36
  - version: "svcomp25"
24
37
  doi: 10.5281/zenodo.14205153
25
- benchexec_toolinfo_options: [ ]
38
+ benchexec_toolinfo_options: []
26
39
  required_ubuntu_packages:
27
40
  - python3-yaml
28
41
 
29
42
  competition_participations:
30
43
  - competition: "SV-COMP 2025"
31
44
  track: "Verification"
45
+ label:
46
+ - auxiliary
32
47
  tool_version: "svcomp25"
33
48
  jury_member:
34
49
  orcid: 0000-0002-8172-3184
fm_weck/run_result.py ADDED
@@ -0,0 +1,38 @@
1
+ # This file is part of fm-weck: executing fm-tools in containerized environments.
2
+ # https://gitlab.com/sosy-lab/software/fm-weck
3
+ #
4
+ # SPDX-FileCopyrightText: 2024 Dirk Beyer <https://www.sosy-lab.org>
5
+ #
6
+ # SPDX-License-Identifier: Apache-2.0
7
+
8
+ from dataclasses import dataclass
9
+ from functools import singledispatchmethod
10
+
11
+ from benchexec.tools.template import BaseTool2
12
+ from benchexec.util import ProcessExitCode
13
+ from fm_tools.fmtoolversion import FmToolVersion
14
+ from fm_tools.run import get_tool_info
15
+
16
+
17
+ @dataclass(frozen=True)
18
+ class RunResult:
19
+ command: tuple[str, ...] | list[str]
20
+ exit_code: int
21
+ raw_output: str
22
+
23
+ def as_benchexec_run(self):
24
+ return BaseTool2.Run(
25
+ cmdline=self.command,
26
+ exit_code=ProcessExitCode.from_raw(self.exit_code),
27
+ output=BaseTool2.RunOutput(self.raw_output.splitlines(keepends=True)),
28
+ termination_reason=False, # TODO: We do not know about this
29
+ )
30
+
31
+ @singledispatchmethod
32
+ def determine_result(self, tool: BaseTool2) -> str:
33
+ return tool.determine_result(self.as_benchexec_run())
34
+
35
+ @determine_result.register
36
+ def _(self, tool: FmToolVersion) -> str:
37
+ tool_ = get_tool_info(tool)
38
+ return self.determine_result(tool_)
fm_weck/runexec_mode.py CHANGED
@@ -5,10 +5,11 @@
5
5
  #
6
6
  # SPDX-License-Identifier: Apache-2.0
7
7
 
8
+ import importlib.resources as pkg_resources
8
9
  import logging
9
10
  import shutil
10
11
  from pathlib import Path
11
- from typing import Optional
12
+ from typing import TYPE_CHECKING, Optional
12
13
 
13
14
  from fm_weck.resources import BENCHEXEC_WHL
14
15
  from fm_weck.runexec_util import mountable_absolute_paths_of_command
@@ -18,6 +19,9 @@ from .engine import CACHE_MOUNT_LOCATION, Engine
18
19
 
19
20
  logger = logging.getLogger(__name__)
20
21
 
22
+ if TYPE_CHECKING:
23
+ from fm_weck.run_result import RunResult
24
+
21
25
 
22
26
  def run_runexec(
23
27
  benchexec_package: Optional[Path],
@@ -25,7 +29,7 @@ def run_runexec(
25
29
  configuration: Config,
26
30
  extra_container_args: list[list[str]],
27
31
  command: list[str],
28
- ):
32
+ ) -> "RunResult":
29
33
  if use_image is not None:
30
34
  configuration.set_default_image(use_image)
31
35
 
@@ -39,8 +43,13 @@ def run_runexec(
39
43
  else:
40
44
  # Default to the bundled benchexec package
41
45
  benchexec_package = configuration.get_shelve_path_for_benchexec()
42
- shutil.copyfile(BENCHEXEC_WHL, benchexec_package)
43
- engine.env["PYTHONPATH"] = f"{CACHE_MOUNT_LOCATION}/.lib/benchexec.whl"
46
+ try:
47
+ with pkg_resources.path("fm_weck.resources", BENCHEXEC_WHL) as source_path:
48
+ shutil.copy(source_path, benchexec_package)
49
+ engine.env["PYTHONPATH"] = f"{CACHE_MOUNT_LOCATION}/.lib/benchexec.whl"
50
+ except FileNotFoundError:
51
+ logging.error(f"Resource {BENCHEXEC_WHL} not found in package.")
52
+ return None
44
53
 
45
54
  for path in mountable_absolute_paths_of_command(Path.cwd().absolute(), command):
46
55
  engine.mount(path, str(path) + ":ro")
@@ -50,4 +59,6 @@ def run_runexec(
50
59
 
51
60
  configuration.make_runexec_script_available()
52
61
 
62
+ engine.handle_io = False
63
+
53
64
  return engine.run(f"{CACHE_MOUNT_LOCATION}/.scripts/runexec", *command)
fm_weck/serve.py CHANGED
@@ -6,6 +6,7 @@
6
6
  # SPDX-License-Identifier: Apache-2.0
7
7
 
8
8
  import dbm
9
+ import json
9
10
  import logging
10
11
  import os
11
12
  import shutil
@@ -13,8 +14,10 @@ import sys
13
14
  from pathlib import Path
14
15
  from typing import Optional, Tuple, Union
15
16
 
16
- from fm_tools import FmData
17
17
  from fm_tools.benchexec_helper import DataModel
18
+ from fm_tools.fmtoolversion import FmToolVersion
19
+
20
+ from fm_weck.run_result import RunResult
18
21
 
19
22
  from .config import Config, parse_fm_data
20
23
  from .engine import CACHE_MOUNT_LOCATION, Engine
@@ -58,42 +61,78 @@ def update_checksum(shelve_space: Path, checksum: str, config: Config):
58
61
 
59
62
 
60
63
  def setup_fm_tool(
61
- fm_tool: Union[Path, FmData], version: Optional[str], configuration: Config, skip_download: bool = False
62
- ) -> Tuple[FmData, Path]:
63
- # Don't explicitly disallow non-FmData here; Pythonic Users might want to exchange the FmData object
64
+ fm_tool: Union[Path, FmToolVersion],
65
+ version: Optional[str],
66
+ configuration: Config,
67
+ offline_mode: bool = False,
68
+ ) -> Tuple[FmToolVersion, Path]:
69
+ # Don't explicitly disallow non-FmToolVersion here; Pythonic Users might want to exchange the FmToolVersion object
64
70
  # by a class with the same interface
65
71
  fm_data = parse_fm_data(fm_tool, version) if isinstance(fm_tool, (Path, str)) else fm_tool
66
72
 
67
73
  shelve_space = configuration.get_shelve_space_for(fm_data)
68
74
  logger.debug("Using shelve space %s", shelve_space)
75
+ skip_download = offline_mode
69
76
 
70
- if (not skip_download) and shelve_space.exists() and shelve_space.is_dir():
77
+ if (not offline_mode) and shelve_space.exists() and shelve_space.is_dir():
71
78
  logger.debug("Shelve space already exists, testing checksum")
72
- checksum = fm_data.archive_location.checksum()
73
- skip_download = check_cache_entry(shelve_space, checksum, configuration)
79
+ checksum = fm_data.get_archive_location().resolve().checksum
80
+ if checksum is None:
81
+ logger.warning("No checksum available for %s, skipping cache check", fm_data.get_tool_name_with_version())
82
+ skip_download = False
83
+ else:
84
+ skip_download = check_cache_entry(shelve_space, checksum, configuration)
74
85
 
75
86
  if not skip_download:
76
87
  fm_data.download_and_install_into(shelve_space)
77
- checksum = fm_data.archive_location.checksum()
78
- update_checksum(shelve_space, checksum, configuration)
79
-
80
- fm_data.get_toolinfo_module().make_available()
88
+ checksum = fm_data.get_archive_location().resolve().checksum
89
+ if checksum is None:
90
+ logger.warning(
91
+ "No checksum available for %s, skipping checksum update", fm_data.get_tool_name_with_version()
92
+ )
93
+ else:
94
+ update_checksum(shelve_space, checksum, configuration)
95
+ map_doi(fm_data, shelve_space)
96
+ tool_info_module = fm_data.get_toolinfo_module()
97
+
98
+ if (not offline_mode) or tool_info_module._trivially_resolved():
99
+ tool_info_module.resolve(target_dir=shelve_space)
100
+ else:
101
+ file_name = tool_info_module.raw.rpartition("/")[-1]
102
+ tool_info_module._target_location = target = shelve_space / file_name
103
+ tool_info_module.resolved = "." + target.stem
104
+
105
+ if tool_info_module._target_location:
106
+ sys.path.insert(0, str(tool_info_module._target_location.parent))
81
107
 
82
108
  return fm_data, shelve_space
83
109
 
84
110
 
111
+ def install_fm_tool(
112
+ fm_tool: Union[Path, FmToolVersion], version: Optional[str], configuration: Config, install_path: Path
113
+ ) -> None:
114
+ fm_data = parse_fm_data(fm_tool, version) if isinstance(fm_tool, (Path, str)) else fm_tool
115
+ shelve_space = install_path.resolve() if install_path else configuration.get_shelve_space_for(fm_data)
116
+
117
+ logger.debug("Installing tool into %s", shelve_space)
118
+ fm_data.download_and_install_into(shelve_space)
119
+
120
+
85
121
  def run_guided(
86
- fm_tool: Union[Path, FmData],
122
+ fm_tool: Union[Path, FmToolVersion],
87
123
  version: Optional[str],
88
124
  configuration: Config,
89
125
  prop: Optional[Path],
90
126
  program_files: list[Path],
91
127
  additional_args: list[str],
128
+ witness: Optional[Path] = None,
92
129
  data_model: Optional[DataModel] = None,
93
- skip_download: bool = False,
130
+ offline_mode: bool = False,
94
131
  log_output_to: Optional[Path] = None,
95
132
  output_files_to: Optional[Path] = None,
96
- ) -> int:
133
+ timeout_sec: Optional[float] = None,
134
+ print_tool_output_to_console: bool = True,
135
+ ) -> RunResult:
97
136
  property_path = None
98
137
  if prop is not None:
99
138
  try:
@@ -104,11 +143,11 @@ def run_guided(
104
143
  shutil.copyfile(source_property_path, property_path)
105
144
  except KeyError:
106
145
  logger.error("Unknown property %s", prop)
107
- return 1
146
+ return RunResult(command=[], exit_code=1, raw_output="Unknown property")
108
147
 
109
148
  configuration.make_script_available()
110
149
 
111
- fm_data, shelve_space = setup_fm_tool(fm_tool, version, configuration, skip_download)
150
+ fm_data, shelve_space = setup_fm_tool(fm_tool, version, configuration, offline_mode)
112
151
  engine = Engine.from_config(fm_data, configuration)
113
152
 
114
153
  if log_output_to is not None:
@@ -116,6 +155,7 @@ def run_guided(
116
155
 
117
156
  if output_files_to is not None:
118
157
  engine.set_output_files_dir(output_files_to)
158
+ engine.print_output_to_stdout = print_tool_output_to_console
119
159
 
120
160
  current_dir = Path.cwd().resolve()
121
161
  os.chdir(shelve_space)
@@ -130,22 +170,79 @@ def run_guided(
130
170
  )
131
171
  os.chdir(current_dir)
132
172
 
173
+ # There are two ways to pass the witness
174
+ # 1. Through the task options in BenchExec using {"witness": filename} and adding the witness to the input files
175
+ # 2. Replacing the placeholder in FM-Data "${witness}" with the correct path
176
+ #
177
+ # We are using the second approach here, in order to avoid modifying FM-Data
178
+ if witness is not None:
179
+ assert any(c == "${witness}" for c in command), "The version given does not support witness files"
180
+ command = [str(witness) if c == "${witness}" else c for c in command]
181
+
133
182
  logger.debug("Assembled command from fm-tools: %s", command)
134
183
 
135
- return engine.run(f"{CACHE_MOUNT_LOCATION}/.scripts/run_with_overlay.sh", shelve_space.name, *command)
184
+ execution_result = engine.run(
185
+ f"{CACHE_MOUNT_LOCATION}/.scripts/run_with_overlay.sh", shelve_space.name, *command, timeout_sec=timeout_sec
186
+ )
187
+
188
+ return execution_result
136
189
 
137
190
 
138
191
  def run_manual(
139
- fm_tool: Union[Path, FmData],
192
+ fm_tool: Union[Path, FmToolVersion],
140
193
  version: Optional[str],
141
194
  configuration: Config,
142
195
  command: list[str],
143
- skip_download: bool = False,
144
- ) -> int:
145
- fm_data, shelve_space = setup_fm_tool(fm_tool, version, configuration, skip_download)
196
+ offline_mode: bool = False,
197
+ log_output_to: Optional[Path] = None,
198
+ output_files_to: Optional[Path] = None,
199
+ timeout_sec: Optional[float] = None,
200
+ print_tool_output_to_console: bool = True,
201
+ ) -> RunResult:
202
+ fm_data, shelve_space = setup_fm_tool(fm_tool, version, configuration, offline_mode)
146
203
  engine = Engine.from_config(fm_data, configuration)
147
204
 
205
+ if log_output_to is not None:
206
+ engine.set_output_log(log_output_to)
207
+
208
+ if output_files_to is not None:
209
+ engine.set_output_files_dir(output_files_to)
210
+
148
211
  executable = fm_data.get_executable_path(shelve_space)
149
212
  logger.debug("Using executable %s", executable)
150
213
  logger.debug("Assembled command %s", [executable, *command])
151
- return engine.run(executable, *command)
214
+
215
+ if log_output_to is not None:
216
+ engine.set_output_log(log_output_to)
217
+
218
+ if output_files_to is not None:
219
+ engine.set_output_files_dir(output_files_to)
220
+
221
+ engine.print_output_to_stdout = print_tool_output_to_console
222
+
223
+ execution_result = engine.run(str(executable), *command, timeout_sec=timeout_sec)
224
+
225
+ return execution_result
226
+
227
+
228
+ ### Move to cache_mgr.py after merge to main ###
229
+ def map_doi(fm_data: FmToolVersion, tool_path: Path):
230
+ doi_map = tool_path.parent / "doi_map.json"
231
+
232
+ if os.path.exists(doi_map):
233
+ with open(doi_map, "r") as file:
234
+ data = json.load(file)
235
+ else:
236
+ data = {}
237
+
238
+ doi = str(tool_path).split("/")[-1]
239
+ if doi not in data:
240
+ data[doi] = []
241
+ if fm_data.get_tool_name_with_version() not in data[doi]:
242
+ data[doi].append(fm_data.get_tool_name_with_version())
243
+
244
+ with open(doi_map, "w") as file:
245
+ json.dump(data, file, indent=2)
246
+
247
+
248
+ ### Move to cache_mgr.py after merge to main ###
@@ -0,0 +1,25 @@
1
+ # This file is part of fm-weck: executing fm-tools in containerized environments.
2
+ # https://gitlab.com/sosy-lab/software/fm-weck
3
+ #
4
+ # SPDX-FileCopyrightText: 2024 Dirk Beyer <https://www.sosy-lab.org>
5
+ #
6
+ # SPDX-License-Identifier: Apache-2.0
7
+
8
+ import yaml
9
+ from tabulate import tabulate
10
+
11
+
12
+ class VersionListing:
13
+ tool_and_version: dict[str, list] = {}
14
+
15
+ def __init__(self, tool_paths: list):
16
+ for tool_path in tool_paths:
17
+ with open(tool_path) as stream:
18
+ tool_data = yaml.safe_load(stream)
19
+
20
+ versions = [version_data["version"] for version_data in tool_data["versions"]]
21
+ self.tool_and_version[tool_data["name"]] = versions
22
+
23
+ def print_versions(self):
24
+ data_list = list(self.tool_and_version.items())
25
+ print(tabulate(data_list, headers=["TOOL", "VERSIONS"], tablefmt="fancy_grid"))
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: fm-weck
3
- Version: 1.4.5
3
+ Version: 1.4.7
4
4
  Author-email: Henrik Wachowitz <henrik.wachowitz@ifi.lmu.de>
5
5
  Maintainer-email: Henrik Wachowitz <henrik.wachowitz@ifi.lmu.de>
6
6
  Classifier: Development Status :: 4 - Beta
@@ -10,8 +10,10 @@ Classifier: Programming Language :: Python :: 3.10
10
10
  Classifier: Programming Language :: Python :: 3.11
11
11
  Classifier: Programming Language :: Python :: 3.12
12
12
  Requires-Python: >=3.10
13
- Requires-Dist: fm-tools>=0.3.3
13
+ Requires-Dist: argcomplete
14
+ Requires-Dist: fm-tools>=1.0.0
14
15
  Requires-Dist: pyyaml>=6.0
16
+ Requires-Dist: tabulate
15
17
  Requires-Dist: tomli>=2.0; python_version <= '3.10'
16
18
  Requires-Dist: yaspin>=3.0
17
19
  Description-Content-Type: text/markdown
@@ -0,0 +1,154 @@
1
+ fm_weck/__init__.py,sha256=qVPurJ_oj0SwP8asFRG0x8Qh7KDzNBLJf5jHKxcyDMc,351
2
+ fm_weck/__main__.py,sha256=IfNDAqM6MK6P7KsQoW3wOHPOscB8evdVlS9C7R4wd_0,391
3
+ fm_weck/cache_mgr.py,sha256=3-OQFmCeswazXmX08ND4oEHFOR07ZDCwWzjmFTDkOSE,1373
4
+ fm_weck/cli.py,sha256=k2-rHURw_w0yy5L97FofJ0jYVxqpNP79_XTtirYbyjY,17194
5
+ fm_weck/config.py,sha256=72HfwKJlLnyrBUmLyjEebgPerGMq0CdnQnugz1SIWis,8017
6
+ fm_weck/engine.py,sha256=1EhfL0tzgVyBNf4b40yt2w1netv2Elyop9aRpwzCvm0,17262
7
+ fm_weck/exceptions.py,sha256=xXxbYK-FZW6YksBtaN79KaA4fGnFCBO-wc0QMqtq3Og,282
8
+ fm_weck/image_mgr.py,sha256=mDqP-YD6AEOW2xldYJ4D-wxYKF0Ta5SgoJiX2CrhyQg,1906
9
+ fm_weck/run_result.py,sha256=0d8G3py1VCPP4jLxPCVzL8Vljvrwt9IHlmvCkW0pwx8,1249
10
+ fm_weck/runexec_mode.py,sha256=UamxVvYm0XErPjR2sRJaLMX8uHBzRcgCTWbQIZjdju0,2195
11
+ fm_weck/runexec_util.py,sha256=YBvVIPpmEousZVxbZ5NS8jzpKPLyws31kIFE2z3Ki2E,1370
12
+ fm_weck/serve.py,sha256=RL6LOnK0RMhFRWehwFdoydc0A619FqSaph7H0JFDYlo,9037
13
+ fm_weck/version_listing.py,sha256=caaoC3n9R-Ao2sEQ_ngOVO3bnKr7cNVeH6EiA8jO5Sc,864
14
+ fm_weck/resources/BenchExec-3.27-py3-none-any.whl,sha256=g-db8LM8HfqLhbnl7n5lvUbMnF2tZ4MHAVOxTGxqO8w,732849
15
+ fm_weck/resources/BenchExec-3.27-py3-none-any.whl.license,sha256=Nq2Mwgn_pyr6ZZrTT095QPtFP3hr15ZeIRIaY0B7eC8,201
16
+ fm_weck/resources/Containerfile,sha256=MltxP1of9klsQFNR8WyngRTJrPwxQTF4C9ennRxVqSo,391
17
+ fm_weck/resources/__init__.py,sha256=-YLqFTF2Gu4RA9ye3SdvBk1rjhlYxk_f1TgPsix3SAk,1213
18
+ fm_weck/resources/run_with_overlay.sh,sha256=v1gV_6kMQ0v9BQ3chgDqI1MAOLHbPWeeTC52aCqVpEM,1162
19
+ fm_weck/resources/runexec,sha256=ogIBO38HLu9C9kDTTANBgAqVnH-UIF1bSJ9d3DSjyF4,462
20
+ fm_weck/resources/properties/coverage-branches.prp,sha256=Gl2r1cgBFoh4M2laa8dVGhteHkL04oiBRLzxz_hbkEU,56
21
+ fm_weck/resources/properties/coverage-branches.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
22
+ fm_weck/resources/properties/coverage-conditions.prp,sha256=tj307UJBhj-PZqRxjijeNb0foWe2hWIc8CQP54gIUao,57
23
+ fm_weck/resources/properties/coverage-conditions.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
24
+ fm_weck/resources/properties/coverage-error-call.prp,sha256=ZHzqgYPHix1PINIcpvq2X0QGEKeB9C0fitoV_OPy9IE,61
25
+ fm_weck/resources/properties/coverage-error-call.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
26
+ fm_weck/resources/properties/coverage-statements.prp,sha256=drb8JyyDwwZ-cxbOyuzzapYIkl3r7sTlooBCavarYl4,59
27
+ fm_weck/resources/properties/coverage-statements.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
28
+ fm_weck/resources/properties/def-behavior.prp,sha256=MpuBzFOzJA2OpwJFS8HFuSo7E199LOKJNTTwr64Bis0,44
29
+ fm_weck/resources/properties/def-behavior.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
30
+ fm_weck/resources/properties/no-data-race.prp,sha256=Md-Kd2iEOHeJ00f7w4mpjK7qL8_wdV8jKmoi2gncjLs,43
31
+ fm_weck/resources/properties/no-data-race.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
32
+ fm_weck/resources/properties/no-overflow.prp,sha256=6C9SIsRmR2zEVWX8OecxGdhRLeYlhDkOsMMFHz1O5gI,42
33
+ fm_weck/resources/properties/no-overflow.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
34
+ fm_weck/resources/properties/termination.prp,sha256=Hp7ZRB6fd2hRaVeot25TyU6nF7ROZS7e_Gz0tT5ZMfk,35
35
+ fm_weck/resources/properties/termination.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
36
+ fm_weck/resources/properties/unreach-call.prp,sha256=DGqQz8OtRUUiWgU33cN7ihHqWje5BsBTuymLdI-BAVA,53
37
+ fm_weck/resources/properties/unreach-call.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
38
+ fm_weck/resources/properties/valid-memcleanup.prp,sha256=2oOe4eCP56QonUGOAeTQ0BCetbT4V31epndKobRxg54,48
39
+ fm_weck/resources/properties/valid-memcleanup.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
40
+ fm_weck/resources/properties/valid-memsafety.prp,sha256=TUbXRp2ksBzMYK8uZb5mXukRBluuyak3YjwYzWAKc_4,129
41
+ fm_weck/resources/properties/valid-memsafety.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
42
+ fm_weck/resources/fm_tools/2ls.yml,sha256=39BtjMhYN5wQbGGqJ1Ds1tYISLvTD_r7RYxMtDN-7dA,3916
43
+ fm_weck/resources/fm_tools/aise.yml,sha256=zuzzrM-XuRt1RlsjWeupqN2ydYSiR7PJQSF7Hhfw4Y0,1888
44
+ fm_weck/resources/fm_tools/aprove.yml,sha256=vbYUUb_YCHayyiS1oPCZAwMQyB0RVNzlupbBT1Segas,2431
45
+ fm_weck/resources/fm_tools/blast.yml,sha256=zwPhJN0PfNJo_ZM4a5DNTxKCqc_b0CDaADRf8RlmrVw,1689
46
+ fm_weck/resources/fm_tools/brick.yml,sha256=7mWXlRdc-XiFR2c2wohhuoWHCznmEcnr1i1aLCtcZTk,2007
47
+ fm_weck/resources/fm_tools/bubaak-split.yml,sha256=7hmY5CYgIdQJAXYrpcGwR-3tqDFnQNTemFUforrDojQ,1886
48
+ fm_weck/resources/fm_tools/bubaak.yml,sha256=pcJCljIHYmgEMOdeMp8YQxAURO0WlLQ-FpYlYktQHLw,2171
49
+ fm_weck/resources/fm_tools/cadp.yml,sha256=xkXVGEn4PYMK7ItnaleVLOvbmAU8_9VDlqKjaln5C-k,3352
50
+ fm_weck/resources/fm_tools/cbmc.yml,sha256=QfgJxq7aBhRcuQpR1_26wKvumM0H4JH7u3SQ_oXYyBM,2095
51
+ fm_weck/resources/fm_tools/cetfuzz.yml,sha256=4JULcR2E0rM_RhgaFv9x8J34loMwB1uiluIKKcQninw,1808
52
+ fm_weck/resources/fm_tools/coastal.yml,sha256=ebKhmUoTdlCTw6W4jIllpAJ-CSoFfGvaB004fDg17nY,1650
53
+ fm_weck/resources/fm_tools/concurrentwitness2test.yml,sha256=5BwfhoWUjB73W0VBgm56C7chj4jo4QoXhZmRHO59tYQ,2263
54
+ fm_weck/resources/fm_tools/cooperace.yml,sha256=oI5G2GeEHZjAZnkg2rJH0NP4NvV5fLioz2KPd1K7YHo,1136
55
+ fm_weck/resources/fm_tools/coveriteam-verifier-algo-selection.yml,sha256=iTEZlnzfVtDUg-cfDgnebIF9VaJ03m188WIbUt_VcAQ,2159
56
+ fm_weck/resources/fm_tools/coveriteam-verifier-parallel-portfolio.yml,sha256=YaO7dPlUV-ctpHm0jHag39_rWySfQQVUAlqKAUuVUuQ,2143
57
+ fm_weck/resources/fm_tools/coveritest.yml,sha256=BJMeWvHQ1RddlPyaUGnXib7-NzhjQUKvnQcD4naGqbk,3223
58
+ fm_weck/resources/fm_tools/cpa-bam-bnb.yml,sha256=oN3noRPVE68xYeDN1LnvyROypuBEO0ex-GghPp9uMh8,1693
59
+ fm_weck/resources/fm_tools/cpa-bam-smg.yml,sha256=0b-5s1W6jzlVx9b2WXbqhW0yPuYVV5SLpLIi4vFRAk8,1743
60
+ fm_weck/resources/fm_tools/cpa-lockator.yml,sha256=y3PSzB0aQZKB8tID1dxif-EtWNE5s8I3Rmmd-wONjmE,1721
61
+ fm_weck/resources/fm_tools/cpa-witness2test.yml,sha256=5YyhBtMH_-3W9jCOJRpSKM4m-jyXb90XWPVtcP5UqY0,3626
62
+ fm_weck/resources/fm_tools/cpachecker.yml,sha256=RUJKnLrEbmKpWNx8PFqvsbMhHFBQ7myChdYoMiQY0Xk,10708
63
+ fm_weck/resources/fm_tools/cpv.yml,sha256=Q0wlS5l3CYRhNfsZNZDMAgBGZ3bTmdwKc8BhDU5ZZcQ,2481
64
+ fm_weck/resources/fm_tools/crux.yml,sha256=pSWP_AK7E5VZGrq02Unpt_1OCVY8Sf7g4XFPajqubLE,1640
65
+ fm_weck/resources/fm_tools/cseq.yml,sha256=IjAo-HFz-ME7CcY6BtrBeUwHcEY05OQWZzPmqmbnE5U,2025
66
+ fm_weck/resources/fm_tools/dartagnan.yml,sha256=ahDvBL9hUYeo6NCabqL4xAiqUmG4kprftutDhEVV3Oo,4022
67
+ fm_weck/resources/fm_tools/deagle.yml,sha256=f_uEhcm1OOp3ySnbc_KBCKve_3HpAwra9vYVl_s3xNs,2673
68
+ fm_weck/resources/fm_tools/divine.yml,sha256=R_KPU3biFnNzqV6U9GhWMFGQ0FwUCIYB-7ucp-JggE4,1549
69
+ fm_weck/resources/fm_tools/ebf.yml,sha256=nC2YfE6wveiWzaxIb1F_QXnJprKKDJIycZbZ7yogoB4,1661
70
+ fm_weck/resources/fm_tools/emergentheta.yml,sha256=l9iDthVia5XGa7lr51pw7LQyarnzVKgUVaxFWNn9X0I,2360
71
+ fm_weck/resources/fm_tools/esbmc-incr.yml,sha256=ZQzJSvdzVOTsE-ACtfS1bb2OpTSo4pkmoUJz9UorVf0,2326
72
+ fm_weck/resources/fm_tools/esbmc-kind.yml,sha256=3il2Cl3MePUYItGcrS3lEvPHxbVjwRPe4vs-QPUxaUc,3008
73
+ fm_weck/resources/fm_tools/fdse.yml,sha256=VPm7Uu-3JGdo5vCmpFBVH9oIuNktOoss3csZNygteN4,1694
74
+ fm_weck/resources/fm_tools/fizzer.yml,sha256=0T_NLV9cQ_H8aDjRFDHsDWNSAqbKEAQ7zoe5tQke58E,2433
75
+ fm_weck/resources/fm_tools/frama-c-sv.yml,sha256=riDGXuM161kkDKEGXW4EpEpvJ6jD4PLOFClsUg_tk-U,1941
76
+ fm_weck/resources/fm_tools/fshell-witness2test.yml,sha256=evJ_9oCIB4Vzt3Az7jynL7BADaV9U1fKHDKutLyn6EQ,1719
77
+ fm_weck/resources/fm_tools/fusebmc-ia.yml,sha256=lHfdXOdab6QbViEoZVCOpDWmnDmCVruA7QFhByypD2M,2375
78
+ fm_weck/resources/fm_tools/fusebmc.yml,sha256=nZf4dydFZ9rcgg5NUPHxN5QbpzehcTzFd8rywTDWIJk,3502
79
+ fm_weck/resources/fm_tools/gazer-theta.yml,sha256=zsDpcQCTkAbptL_GPsoom95BruxPj7X5LILJgKPM11c,1879
80
+ fm_weck/resources/fm_tools/gdart-llvm.yml,sha256=A1Pn8G0jbGmMRhiGVfpQIe179HJlrV3YGBWSOT8Zjk0,1442
81
+ fm_weck/resources/fm_tools/gdart.yml,sha256=UuZmWONU5kMJtYmq2qgIE4RxnYZwUW62Ym1fW2DqO2E,2656
82
+ fm_weck/resources/fm_tools/goblint.yml,sha256=B5Q43v6nyLodx88XiOgSenKzperRZYeb1nZ97KT37sQ,4182
83
+ fm_weck/resources/fm_tools/graves-par.yml,sha256=GLoBUwv16gQBzrtg5dota5-wbls8Dd_JQWCHKeqsLlE,1462
84
+ fm_weck/resources/fm_tools/graves.yml,sha256=adyp-k_7moQ9pgSeCtEauPOGFIufWoRlQydIRjn0yi0,2269
85
+ fm_weck/resources/fm_tools/gwit.yml,sha256=31k4Js4d3nCqW2uJDQnnfuqJcqfK77C0PuGBhdKMC98,1848
86
+ fm_weck/resources/fm_tools/hornix.yml,sha256=zfJZg09qiueTtyDcZLpWEQDK8GhwfvjfbLI1G_tzUUM,1532
87
+ fm_weck/resources/fm_tools/hybridtiger.yml,sha256=4ieXZSbm5qdmW3hK5vSfIwOPW6ZI7rSmecE5Ql0xPpI,1814
88
+ fm_weck/resources/fm_tools/infer.yml,sha256=sRIzRShUOhY_Y624Oiwdk5MR-c1ligXJdAgLdt-20qk,1884
89
+ fm_weck/resources/fm_tools/java-ranger.yml,sha256=3T1Vq3v_7dBZl3oIgjZjoZVkPK-OGeFzoaxzpn8h4sE,1989
90
+ fm_weck/resources/fm_tools/jayhorn.yml,sha256=4-R_2eBD_RvbY2f6Wsrp0ObssHdEsJT29aYCngYnozY,1994
91
+ fm_weck/resources/fm_tools/jbmc.yml,sha256=4TiAVbUPbccoChPBLmpXxRE1H6NBxqqGUTFt0kMbE_8,2735
92
+ fm_weck/resources/fm_tools/jcwit.yml,sha256=eJ4w5yGTIb_T-n4g5vki8L9Q_OeKHPYE-T4NLm0QZ7k,1297
93
+ fm_weck/resources/fm_tools/jdart.yml,sha256=sxH0f_FOF7xAVOosFvRcaiRwQ6qnELRUo_czqw1Jons,1516
94
+ fm_weck/resources/fm_tools/key.yml,sha256=wse7rCv33m2z8nbm9Dk-jAipkMaF8S0LINGCzfNfpfE,2478
95
+ fm_weck/resources/fm_tools/klee.yml,sha256=XCNXsPLH-AQPw-iDoJBY2QvByUV3QEf4ZipGwBCMu_o,1576
96
+ fm_weck/resources/fm_tools/kleef.yml,sha256=wheoFgTUTk6HzSPKOqHx8mWeVN9HnWupaP9QtPSKyOQ,1634
97
+ fm_weck/resources/fm_tools/korn.yml,sha256=Y4DyRuUJyoMbacDey22GxbTNWuoOonRmiegtFRp3iPw,2829
98
+ fm_weck/resources/fm_tools/lazycseq.yml,sha256=cS3fe0Pmu73iIx7TTs22l3oeH898WvKoDCrP4y0dQXE,1492
99
+ fm_weck/resources/fm_tools/legion-symcc.yml,sha256=mtobhu1AAXXXIGD0ebl9iD96VTauCkdL_ZFJEWrnaY8,1483
100
+ fm_weck/resources/fm_tools/legion.yml,sha256=ClD8_UEJq8wHIEp9_ifhTNKJuNmzvekaQx1BFOj4vlA,1675
101
+ fm_weck/resources/fm_tools/lf-checker.yml,sha256=lV4-GzzNvzWW505FFtYAUHlSG4gxOn-LL4xT8Tpyvq0,1386
102
+ fm_weck/resources/fm_tools/liv.yml,sha256=t0-Rfs0Ot3VPn7DD_pt3VAbyfpUOP8kdYV3E7uN3qGI,3260
103
+ fm_weck/resources/fm_tools/locksmith.yml,sha256=c3wNvIzQ_PZaYv6Mm15QH-Rm4oTuNzILNJs1fssESYQ,1397
104
+ fm_weck/resources/fm_tools/ltsmin.yml,sha256=vpfL4mBGlnxPtqoqaqUnR-Ph0kibaOd-h6FYuWHn91M,1206
105
+ fm_weck/resources/fm_tools/metaval++.yml,sha256=KAOcvftDNLvuHzIKaUoebekeOxBE6DVS2Acq2VbL1Dg,2006
106
+ fm_weck/resources/fm_tools/metaval.yml,sha256=aclr5cfGDuCduSrlk9kLOcK8GaUQAzPtDAxIJHgHs44,4668
107
+ fm_weck/resources/fm_tools/mlb.yml,sha256=S_ykc9ThLHBbMSXOgYIvk81r96cEwXbAXI5lPRDxJ4s,1907
108
+ fm_weck/resources/fm_tools/mopsa.yml,sha256=lOVxyLPoxsyeLhgFGm9X3D4cGrhC6X2jTO4MmyCBHbE,4172
109
+ fm_weck/resources/fm_tools/nacpa.yml,sha256=b59jqHyQGffRCTzGhyEL4zNUGz_Ss-eRw_s7W7MefaY,1417
110
+ fm_weck/resources/fm_tools/nitwit.yml,sha256=pAJXUtI35HqocZhseTqwkYOVis9Iv16C-UstDId4Juo,2097
111
+ fm_weck/resources/fm_tools/owic.yml,sha256=m0fcxyLurCLVFNmfiI0M6giSmsSEOHBdcyYyGbswiG0,1562
112
+ fm_weck/resources/fm_tools/pesco.yml,sha256=s5OOJUMTpoZEAgodj1q5kPrNcgGhQY5Tsk0Vw-4aAyo,2317
113
+ fm_weck/resources/fm_tools/pichecker.yml,sha256=ZNVlm230PlcbYttxwzE0oUUkxSFj_DLlpd7hLZZHr90,1646
114
+ fm_weck/resources/fm_tools/pinaka.yml,sha256=M-2Up2dKb3IJChpjsd1uWbX69bmEN_T4lM5NF0t77t4,1677
115
+ fm_weck/resources/fm_tools/predatorhp.yml,sha256=JjUWrV1u-XSw8bKJ5t371HG4yeAhuXPmZrtjpD3z5Yw,2513
116
+ fm_weck/resources/fm_tools/prism.yml,sha256=ruAG7Yvb_x6BlHzmadNX8M5DsL8ObsOz493g0kKCwL4,2320
117
+ fm_weck/resources/fm_tools/proton.yml,sha256=2iigAhBelOxN8we6NPPBuoGXPIllv6tzNQm1qqG5iM4,1629
118
+ fm_weck/resources/fm_tools/prtest.yml,sha256=ro1WPEA-FjumAOzGqN-5v6qOpx732x2Og4DerD04yEg,2250
119
+ fm_weck/resources/fm_tools/racerf.yml,sha256=6ck8P7i7QC_9Quq-nJxXeP_12ACKJzgV7CJfDT_hfdg,1747
120
+ fm_weck/resources/fm_tools/relay-sv.yml,sha256=rN4kf0EO_xVqzpPlFtWqdNjICjOjU4Uo7_YX9E6OPlo,1237
121
+ fm_weck/resources/fm_tools/rizzer.yml,sha256=ZmVL72-mBTzmMY29I3x5HmSCtQTMbJ0vw2Ucx_xSfnM,1523
122
+ fm_weck/resources/fm_tools/schema.yml,sha256=_SqJzwFGxM0EuuLgcMF-S_hUtoGxaFKraGTfQDUyILY,22945
123
+ fm_weck/resources/fm_tools/sikraken.yml,sha256=WnLxKyl-4zZ8rvXWqLuuqaC8b9GGQDg-jB3798SeK6M,1067
124
+ fm_weck/resources/fm_tools/spf.yml,sha256=6-7306izjPHKcLZ1veQRmGWOVQcsFJbNyL_55JYVQXA,1692
125
+ fm_weck/resources/fm_tools/sv-sanitizers.yml,sha256=bLG5MoLK95KruF5WCH0Yz2pJPAikPfkNgZRfbP5a2j0,1559
126
+ fm_weck/resources/fm_tools/svf-svc.yml,sha256=gQ12F7_7uis7fVgsTiNdleKBgydi-BOgS4ne-dRyHvk,1591
127
+ fm_weck/resources/fm_tools/swat.yml,sha256=gsvsFBeItbspzdXVVQ8TFWulbdYHzIHSmcKlWkWxGk0,1684
128
+ fm_weck/resources/fm_tools/symbiotic-witch.yml,sha256=6ND-WISFvJEeyEB3Q-Xu71dZrc_ayr1kAnEzfV3TA84,2421
129
+ fm_weck/resources/fm_tools/symbiotic.yml,sha256=cM7x0UIziMazq355CyZ9qBF0pEOuy4wjE9rmb_QSYE4,5796
130
+ fm_weck/resources/fm_tools/testcov.yml,sha256=UqI_uR1kYckBqiRArFP7sU_HLfu7jUq-GEsJOWgLu0s,5147
131
+ fm_weck/resources/fm_tools/theta.yml,sha256=nZFzCtxfCEATlctK4CAyj_zRnzqlqO_HfsC94df_Lt0,2894
132
+ fm_weck/resources/fm_tools/thorn.yml,sha256=2UuyPi1dKRjXObOVxj7x0joYxPmqDa-e3DZYjfKyweE,1326
133
+ fm_weck/resources/fm_tools/tracerx-wp.yml,sha256=LAfAd3f1u-6ZQ00fNvruqrlmvFVpK_rJV4HWYz7G4DE,2016
134
+ fm_weck/resources/fm_tools/tracerx.yml,sha256=I3r02dWrMEbcXyH2Nvn4skf5cKXjKESrA9boPaSw3ok,2370
135
+ fm_weck/resources/fm_tools/uautomizer.yml,sha256=CwwbVbtbKr5ri4PZ-g1WwUIsDWcnOyeYvRfVNSgrZi0,7604
136
+ fm_weck/resources/fm_tools/ugemcutter.yml,sha256=0APiSLnEt3_kfVHulAker97m4VvFMVFbb7o-fuObBpk,3318
137
+ fm_weck/resources/fm_tools/ukojak.yml,sha256=SRA0xSCBKdDeRDFhhWUDht6FK3MXMQyVzd-dtduHvi8,3041
138
+ fm_weck/resources/fm_tools/ureferee.yml,sha256=eNk0m1x36WSG9Y9-EtobRNoDmdFkAizEACfGAWFv2YY,2391
139
+ fm_weck/resources/fm_tools/utaipan.yml,sha256=oxAUMHHXRv4TWcGoOqkzyKtzKkPhJDBQAdmn1sLW_Gs,3565
140
+ fm_weck/resources/fm_tools/utestgen.yml,sha256=_mefwNOoW2Foa5IytA2fUpIg4gmqbmaXxUgFdiLmOkQ,2457
141
+ fm_weck/resources/fm_tools/vercors.yml,sha256=b7vEyzW61lQ6Dp9od65sUVYRbrQWtosN5p3-MjTXEvg,3190
142
+ fm_weck/resources/fm_tools/veriabs.yml,sha256=N4zCdZnrV8duOjcw1wzavp5oZtz21WShP_Z38tnIsTs,2490
143
+ fm_weck/resources/fm_tools/veriabsl.yml,sha256=4mj2IxMnTFNO7vQzSp5XBT7p32HhRW67Ip1BgZpCzAk,3581
144
+ fm_weck/resources/fm_tools/verifuzz.yml,sha256=1HHtZMkMhUyXxd20R7yXVEqyqOVo_O3G_j3zdSx3z9k,1845
145
+ fm_weck/resources/fm_tools/verioover.yml,sha256=Gjnxl3GYXDmes_nA_J1Jucc6DjfOX8Uz3DjTXiHeerg,1362
146
+ fm_weck/resources/fm_tools/wasp-c.yml,sha256=e2rureVEfS1wClCVknRg1MlatrL3x0fUhYV8A_eUAM8,1595
147
+ fm_weck/resources/fm_tools/wit4java.yml,sha256=ylfze2XbV4zKkVUH57Veqn7G49gW0Byxd5qFRnzs_bw,1861
148
+ fm_weck/resources/fm_tools/witch.yml,sha256=wwe6lrI2sxGKVZbLeipa38rPhB2pcSUFi9uVngtXGUQ,1795
149
+ fm_weck/resources/fm_tools/witnesslint.yml,sha256=EvMBcm5fx6lgSLRmHSKXSxXIJKZ-BrxLwTXI4GQ6FMs,6812
150
+ fm_weck/resources/fm_tools/witnessmap.yml,sha256=FyZtEloxpWBBjLn9kyqoen2kPjOkH2r4fxAj5gfV8Bg,1692
151
+ fm_weck-1.4.7.dist-info/METADATA,sha256=WnQnKmjvJ6HQouE2-s1Mil4cw9NJW0Sp3d9E43upkhk,2822
152
+ fm_weck-1.4.7.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
153
+ fm_weck-1.4.7.dist-info/entry_points.txt,sha256=toWpKCSY1u593MPnI_xW5gnwlnkerP4AvmPQ1s2nPgY,50
154
+ fm_weck-1.4.7.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.26.3
2
+ Generator: hatchling 1.27.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any