fm-weck 1.5.2__py3-none-any.whl → 1.6.0__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 (132) hide show
  1. fm_weck/__init__.py +1 -1
  2. fm_weck/capture.py +1 -1
  3. fm_weck/cli.py +113 -4
  4. fm_weck/config.py +3 -6
  5. fm_weck/engine.py +31 -4
  6. fm_weck/exceptions.py +4 -0
  7. fm_weck/image_mgr.py +66 -0
  8. fm_weck/resources/__init__.py +4 -4
  9. fm_weck/resources/fm_tools/2ls.yml +22 -0
  10. fm_weck/resources/fm_tools/afltc.yml +59 -0
  11. fm_weck/resources/fm_tools/aise.yml +28 -1
  12. fm_weck/resources/fm_tools/aprove.yml +25 -0
  13. fm_weck/resources/fm_tools/brick.yml +25 -1
  14. fm_weck/resources/fm_tools/bubaak-split.yml +18 -0
  15. fm_weck/resources/fm_tools/bubaak.yml +10 -0
  16. fm_weck/resources/fm_tools/cbmc.yml +12 -0
  17. fm_weck/resources/fm_tools/cetfuzz.yml +21 -6
  18. fm_weck/resources/fm_tools/coastal.yml +12 -0
  19. fm_weck/resources/fm_tools/concurrentwitness2test.yml +25 -2
  20. fm_weck/resources/fm_tools/cooperace.yml +39 -0
  21. fm_weck/resources/fm_tools/coveritest.yml +22 -0
  22. fm_weck/resources/fm_tools/cpa-bam-bnb.yml +16 -1
  23. fm_weck/resources/fm_tools/cpa-bam-smg.yml +17 -1
  24. fm_weck/resources/fm_tools/cpa-lockator.yml +17 -1
  25. fm_weck/resources/fm_tools/cpa-witness2test.yml +13 -3
  26. fm_weck/resources/fm_tools/cpachecker.yml +150 -10
  27. fm_weck/resources/fm_tools/cpv.yml +48 -0
  28. fm_weck/resources/fm_tools/crux.yml +12 -0
  29. fm_weck/resources/fm_tools/cseq.yml +36 -9
  30. fm_weck/resources/fm_tools/dartagnan.yml +63 -3
  31. fm_weck/resources/fm_tools/dasa.yml +70 -0
  32. fm_weck/resources/fm_tools/deagle.yml +19 -1
  33. fm_weck/resources/fm_tools/divine.yml +13 -0
  34. fm_weck/resources/fm_tools/ebf.yml +17 -2
  35. fm_weck/resources/fm_tools/emergentheta.yml +51 -5
  36. fm_weck/resources/fm_tools/esbmc-incr.yml +59 -2
  37. fm_weck/resources/fm_tools/esbmc-kind.yml +59 -2
  38. fm_weck/resources/fm_tools/fdse.yml +31 -0
  39. fm_weck/resources/fm_tools/fizzer.yml +32 -3
  40. fm_weck/resources/fm_tools/frama-c-sv.yml +21 -2
  41. fm_weck/resources/fm_tools/fshell-witness2test.yml +13 -3
  42. fm_weck/resources/fm_tools/function-res.yml +64 -0
  43. fm_weck/resources/fm_tools/fusebmc-ia.yml +20 -6
  44. fm_weck/resources/fm_tools/fusebmc.yml +25 -4
  45. fm_weck/resources/fm_tools/gazer-theta.yml +16 -3
  46. fm_weck/resources/fm_tools/gdart-llvm.yml +16 -1
  47. fm_weck/resources/fm_tools/gdart.yml +49 -2
  48. fm_weck/resources/fm_tools/goblint-par.yml +66 -0
  49. fm_weck/resources/fm_tools/goblint.yml +239 -12
  50. fm_weck/resources/fm_tools/goblitch.yml +77 -0
  51. fm_weck/resources/fm_tools/graves-par.yml +4 -1
  52. fm_weck/resources/fm_tools/graves.yml +20 -5
  53. fm_weck/resources/fm_tools/gwit.yml +13 -3
  54. fm_weck/resources/fm_tools/hornix.yml +26 -4
  55. fm_weck/resources/fm_tools/hybridtiger.yml +12 -1
  56. fm_weck/resources/fm_tools/iekke.yml +73 -0
  57. fm_weck/resources/fm_tools/infer.yml +12 -0
  58. fm_weck/resources/fm_tools/java-ranger.yml +18 -0
  59. fm_weck/resources/fm_tools/jayhorn.yml +50 -4
  60. fm_weck/resources/fm_tools/jbmc.yml +17 -1
  61. fm_weck/resources/fm_tools/jcwit.yml +12 -2
  62. fm_weck/resources/fm_tools/jdart.yml +16 -1
  63. fm_weck/resources/fm_tools/jlisa.yml +105 -0
  64. fm_weck/resources/fm_tools/klee.yml +12 -1
  65. fm_weck/resources/fm_tools/kleef.yml +18 -0
  66. fm_weck/resources/fm_tools/korn.yml +23 -1
  67. fm_weck/resources/fm_tools/lazycseq.yml +16 -1
  68. fm_weck/resources/fm_tools/legion-symcc.yml +5 -1
  69. fm_weck/resources/fm_tools/legion.yml +7 -4
  70. fm_weck/resources/fm_tools/lf-checker.yml +16 -1
  71. fm_weck/resources/fm_tools/liv.yml +48 -3
  72. fm_weck/resources/fm_tools/locksmith.yml +16 -1
  73. fm_weck/resources/fm_tools/metaval++.yml +1 -1
  74. fm_weck/resources/fm_tools/metaval.yml +121 -6
  75. fm_weck/resources/fm_tools/mlb.yml +23 -1
  76. fm_weck/resources/fm_tools/mopsa.yml +100 -7
  77. fm_weck/resources/fm_tools/muval.yml +120 -0
  78. fm_weck/resources/fm_tools/nacpa.yml +57 -2
  79. fm_weck/resources/fm_tools/nitwit.yml +13 -3
  80. fm_weck/resources/fm_tools/ogchecker.yml +47 -0
  81. fm_weck/resources/fm_tools/owic.yml +16 -2
  82. fm_weck/resources/fm_tools/pesco.yml +19 -1
  83. fm_weck/resources/fm_tools/pichecker.yml +16 -1
  84. fm_weck/resources/fm_tools/pinaka.yml +14 -1
  85. fm_weck/resources/fm_tools/predatorhp.yml +12 -0
  86. fm_weck/resources/fm_tools/proton.yml +26 -1
  87. fm_weck/resources/fm_tools/prtest.yml +23 -0
  88. fm_weck/resources/fm_tools/pysvlib-linter.yml +77 -0
  89. fm_weck/resources/fm_tools/pysvlib-validator.yml +76 -0
  90. fm_weck/resources/fm_tools/racerf.yml +27 -4
  91. fm_weck/resources/fm_tools/re3ver.yml +78 -0
  92. fm_weck/resources/fm_tools/rizzer.yml +11 -1
  93. fm_weck/resources/fm_tools/schema.yml +185 -4
  94. fm_weck/resources/fm_tools/seal.yml +67 -0
  95. fm_weck/resources/fm_tools/sikraken.yml +25 -1
  96. fm_weck/resources/fm_tools/spf.yml +14 -1
  97. fm_weck/resources/fm_tools/sv-sanitizers.yml +46 -3
  98. fm_weck/resources/fm_tools/svf-svc.yml +33 -1
  99. fm_weck/resources/fm_tools/svlibchecker.yml +82 -0
  100. fm_weck/resources/fm_tools/swat.yml +30 -0
  101. fm_weck/resources/fm_tools/symbiotic-witch.yml +31 -6
  102. fm_weck/resources/fm_tools/symbiotic.yml +64 -1
  103. fm_weck/resources/fm_tools/testcoca.yml +53 -0
  104. fm_weck/resources/fm_tools/testcov.yml +97 -0
  105. fm_weck/resources/fm_tools/theta.yml +100 -2
  106. fm_weck/resources/fm_tools/thorn.yml +22 -1
  107. fm_weck/resources/fm_tools/tracerx-wp.yml +18 -0
  108. fm_weck/resources/fm_tools/tracerx.yml +22 -0
  109. fm_weck/resources/fm_tools/uautomizer.yml +186 -19
  110. fm_weck/resources/fm_tools/ugemcutter.yml +97 -9
  111. fm_weck/resources/fm_tools/ukojak.yml +55 -9
  112. fm_weck/resources/fm_tools/uparalizer.yml +78 -0
  113. fm_weck/resources/fm_tools/ureferee.yml +83 -13
  114. fm_weck/resources/fm_tools/utaipan.yml +61 -9
  115. fm_weck/resources/fm_tools/utestgen.yml +36 -0
  116. fm_weck/resources/fm_tools/veriabs.yml +12 -0
  117. fm_weck/resources/fm_tools/veriabsl.yml +16 -0
  118. fm_weck/resources/fm_tools/verioover.yml +16 -1
  119. fm_weck/resources/fm_tools/wasp-c.yml +16 -1
  120. fm_weck/resources/fm_tools/wit4java.yml +36 -4
  121. fm_weck/resources/fm_tools/witch.yml +29 -4
  122. fm_weck/resources/fm_tools/witnesslint.yml +111 -8
  123. fm_weck/resources/fm_tools/witnessmap.yml +29 -1
  124. fm_weck/run_result.py +15 -11
  125. fm_weck/runexec_mode.py +37 -7
  126. fm_weck/smoke_test_mode.py +6 -10
  127. fm_weck/zenodo.py +381 -0
  128. {fm_weck-1.5.2.dist-info → fm_weck-1.6.0.dist-info}/METADATA +2 -1
  129. fm_weck-1.6.0.dist-info/RECORD +188 -0
  130. {fm_weck-1.5.2.dist-info → fm_weck-1.6.0.dist-info}/WHEEL +1 -1
  131. fm_weck-1.5.2.dist-info/RECORD +0 -171
  132. {fm_weck-1.5.2.dist-info → fm_weck-1.6.0.dist-info}/entry_points.txt +0 -0
fm_weck/zenodo.py ADDED
@@ -0,0 +1,381 @@
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
+ import json
8
+ import logging
9
+ import os
10
+ from datetime import datetime
11
+ from pathlib import Path
12
+
13
+ import httpx
14
+ from dotenv import find_dotenv, load_dotenv, set_key
15
+ from tqdm import tqdm
16
+
17
+ from fm_weck.config import Config
18
+ from fm_weck.exceptions import ZenodoError
19
+ from fm_weck.image_mgr import ImageMgr
20
+
21
+
22
+ class TokenAuth(httpx.Auth):
23
+ def __init__(self, token: str):
24
+ self.token = token
25
+
26
+ def auth_flow(self, request):
27
+ request.headers["Authorization"] = f"Bearer {self.token}"
28
+ yield request
29
+
30
+
31
+ class ZenodoSession:
32
+ def __init__(self, access_token: str | None = None, is_sandbox: bool = False):
33
+ if is_sandbox:
34
+ self.base_url = "https://sandbox.zenodo.org/api"
35
+ else:
36
+ self.base_url = "https://zenodo.org/api"
37
+ self.deposit_url = self.base_url + "/deposit/depositions"
38
+ self.download_url = self.base_url + "/records"
39
+ self.access_token = access_token
40
+ if self.access_token is not None:
41
+ self.client = httpx.Client(auth=TokenAuth(self.access_token))
42
+ else:
43
+ self.client = httpx.Client()
44
+
45
+ def _require_access_token(self):
46
+ if self.access_token is None:
47
+ raise ZenodoError("An API access token is required to interact with the Zenodo API.")
48
+
49
+ def publish(self, image_info: tuple):
50
+ """
51
+ Publish an image on Zenodo.
52
+ """
53
+ self._require_access_token()
54
+
55
+ deposition_id = self.upload(image_info)
56
+ publish_url = self.deposit_url + "/" + deposition_id + "/" + "actions/publish"
57
+ r = httpx.post(publish_url)
58
+
59
+ if r.status_code >= 400:
60
+ self.delete_deposition(deposition_id)
61
+ raise ZenodoError(f"Error trying to publish an image: {r.json()['message']}")
62
+
63
+ return r.json()["doi"]
64
+
65
+ def upload(self, image_info: tuple[str, str, Path]) -> str:
66
+ """
67
+ Upload an image to Zenodo and leave it in draft mode (unpublished).
68
+ """
69
+ self._require_access_token()
70
+
71
+ image_name = image_info[0]
72
+ image_version = image_info[1]
73
+ image_path = image_info[2]
74
+ # Upload the actual file
75
+ upload_name = image_name + "_" + image_version + ".tar"
76
+ upload_name = upload_name.replace("/", "-")
77
+ metadata = self.get_upload_metadata(upload_name, image_version)
78
+ record_id = self.check_existing_records(metadata)
79
+ logging.debug(f"Record ID: {record_id}")
80
+ # Check if we are adding a new version or creating a new record
81
+ if record_id:
82
+ r = self.client.post(self.deposit_url + "/" + record_id + "/actions/newversion")
83
+ else:
84
+ logging.debug(f"{metadata=}")
85
+ r = self.client.post(
86
+ self.deposit_url,
87
+ json=metadata,
88
+ headers={"Content-Type": "application/json", "Authorization": f"Bearer {self.access_token}"},
89
+ )
90
+
91
+ if r.status_code >= 400:
92
+ logging.debug(f"{r.status_code} - {r.text}")
93
+ raise ZenodoError(f"Error trying to upload the deposition metadata to Zenodo: {r.json()['message']}")
94
+ bucket_url = r.json()["links"]["bucket"]
95
+ deposition_id = str(r.json()["id"])
96
+
97
+ if record_id:
98
+ self.prepare_new_version_upload(metadata, deposition_id)
99
+
100
+ r = self.upload_with_progress_bar(image_path, upload_name, bucket_url)
101
+ if r.status_code >= 400:
102
+ self.delete_deposition(deposition_id)
103
+ raise ZenodoError(f"Error trying to upload image to Zenodo: {r.json()['message']}")
104
+
105
+ return deposition_id
106
+
107
+ def upload_with_progress_bar(self, image_path, upload_name, bucket_url):
108
+ file_size = os.path.getsize(image_path)
109
+
110
+ with (
111
+ open(image_path, "rb") as image,
112
+ tqdm(total=file_size, unit="B", unit_scale=True, desc="Uploading") as progress_bar,
113
+ ):
114
+
115
+ def file_iterator():
116
+ chunk_size = 1024 * 1024 * 5 # 5 MB
117
+ while True:
118
+ chunk = image.read(chunk_size)
119
+ if not chunk:
120
+ break
121
+ yield chunk
122
+ progress_bar.update(len(chunk))
123
+
124
+ r = self.client.put(
125
+ f"{bucket_url}/{upload_name}",
126
+ data=file_iterator(),
127
+ headers={"Content-Length": str(file_size)},
128
+ timeout=300,
129
+ )
130
+
131
+ return r
132
+
133
+ def download(self, doi: str, download_path: str | None, no_progress_bar: bool = False) -> Path:
134
+ """
135
+ Download an image from Zenodo using its DOI.
136
+ """
137
+ download_url = self.resolve_download_info(doi)
138
+ image_name = download_url.split("/")[-2] + ".tar"
139
+ if no_progress_bar:
140
+ r = self.client.get(download_url)
141
+ if r.status_code >= 400:
142
+ raise ZenodoError(f"Error trying to download image: {r.json()['message']}")
143
+ content = r.content
144
+ else:
145
+ content = self.download_with_progress_bar(download_url)
146
+
147
+ return self.save_image(image_name, content, download_path)
148
+
149
+ def download_with_progress_bar(self, url: str):
150
+ content = bytearray()
151
+
152
+ with self.client.stream("GET", url) as response:
153
+ response.raise_for_status()
154
+
155
+ total_size = int(response.headers.get("Content-Length", 0))
156
+ chunk_size = 1024 * 1024 * 5 # 5 MB
157
+
158
+ with tqdm(total=total_size, unit="B", unit_scale=True, desc="Downloading") as progress_bar:
159
+ for chunk in response.iter_bytes(chunk_size):
160
+ content.extend(chunk)
161
+ progress_bar.update(len(chunk))
162
+
163
+ return content
164
+
165
+ def resolve_download_info(self, doi: str) -> str:
166
+ """
167
+ Extract the download URL from the deposition metadata.
168
+
169
+ :return: The download URL of the image.
170
+ """
171
+ doi_id = doi.split(".")[-1]
172
+ record_url = self.download_url + "/" + doi_id
173
+ r = self.client.get(record_url)
174
+ if r.status_code >= 400:
175
+ raise ZenodoError(f"Error trying to access the image record: {r.json()['message']}")
176
+
177
+ file_name = r.json()["files"][0]["key"]
178
+
179
+ return record_url + "/files/" + file_name + "/content"
180
+
181
+ def save_image(self, image_name: str, image: bytes, save_path):
182
+ save_path = Path().cwd() / image_name if not save_path else Path().cwd() / Path(save_path) / image_name
183
+ save_path.parent.mkdir(parents=True, exist_ok=True)
184
+ save_path.write_bytes(image)
185
+ return save_path
186
+
187
+ def delete_deposition(self, deposition_id: str):
188
+ r = self.client.delete(self.deposit_url + "/" + deposition_id)
189
+ if r.status_code >= 400:
190
+ raise ZenodoError(f"Error trying to delete a deposition resource from Zenodo: {r.json()['message']}")
191
+
192
+ def check_existing_records(self, metadata: dict):
193
+ """
194
+ Check if a record with the same name already exists in the depositions.
195
+ If it exists, prompt whether the image should be uploaded as a new version.
196
+
197
+ :return: The deposition ID in case of a positive prompt response, or an empty string.
198
+ """
199
+ r = self.client.get(self.deposit_url)
200
+ if r.status_code >= 400:
201
+ raise ZenodoError(f"Error trying to access the image record: {r.json()['message']}")
202
+
203
+ for record in r.json():
204
+ if metadata["metadata"]["title"] == record["title"]:
205
+ while True:
206
+ response = (
207
+ input(
208
+ (
209
+ "The record already exists. Do you want to upload this as a new version "
210
+ "of the existing record?\n"
211
+ "(y)es: upload as a new version of an existing record\n"
212
+ "(n)o: create a new record\n"
213
+ "(a)bort: cancel the upload\n"
214
+ )
215
+ )
216
+ .strip()
217
+ .lower()
218
+ )
219
+
220
+ if response == "y":
221
+ return str(record["id"])
222
+ elif response == "n":
223
+ break
224
+ elif response == "a":
225
+ exit(0)
226
+ return ""
227
+
228
+ def prepare_new_version_upload(self, metadata: dict, deposition_id: str) -> None:
229
+ """
230
+ Set up the metadata for the new version and delete the old versions' files from that version.
231
+ """
232
+ r = self.client.put(
233
+ self.deposit_url + "/" + deposition_id,
234
+ data=json.dumps(metadata), # type: ignore
235
+ )
236
+ if r.status_code >= 400:
237
+ raise ZenodoError(f"Error trying to upload the new version metadata to Zenodo: {r.json()['message']}")
238
+
239
+ for file in r.json()["files"]:
240
+ r = self.client.delete(
241
+ self.deposit_url + "/" + deposition_id + "/files/" + file["id"],
242
+ )
243
+ if r.status_code >= 400:
244
+ raise ZenodoError(
245
+ f"Error trying to delete old version files from the new version: {r.json()['message']}"
246
+ )
247
+
248
+ def get_upload_metadata(self, image_name: str, image_version: str) -> dict:
249
+ description = (
250
+ f"This is an image file.\n"
251
+ f"<p>In case of manual download, the image can be imported locally using the command: "
252
+ f"<code>[docker|podman] load --input {image_name}</code></p>"
253
+ )
254
+
255
+ upload_metadata = {
256
+ "metadata": {
257
+ "title": image_name,
258
+ "version": image_version,
259
+ "upload_type": "software",
260
+ "creators": [{"name": "fm-weck"}],
261
+ "publication_date": datetime.now().date().isoformat(),
262
+ "access_right": "open",
263
+ "license": "Apache-2.0",
264
+ "description": description,
265
+ }
266
+ }
267
+ return upload_metadata
268
+
269
+
270
+ class ZenodoMgr(object):
271
+ """
272
+ Zenodo API manager.
273
+
274
+ Args:
275
+ engine (object): The fm-weck engine object.
276
+ access_token (str, optional): The access token for authentication with the API. Defaults to None.
277
+ image (str, optional): The image to be published. Required if no doi is given. Defaults to None.
278
+ doi (str, optional): The DOI of the image to be pulled. Required if no image is given. Defaults to None.
279
+
280
+ Raises:
281
+ ValueError: If a chosen image is invalid or does not exist.
282
+ """
283
+
284
+ def __init__(
285
+ self,
286
+ engine,
287
+ access_token: str | None,
288
+ image: str | None,
289
+ doi: str | None,
290
+ is_sandbox: bool = False,
291
+ config: Config | None = None,
292
+ ):
293
+ access_token = access_token or ZenodoMgr.load_zenodo_token(config)
294
+
295
+ self.session = ZenodoSession(access_token, is_sandbox)
296
+ self.image = image
297
+ self.engine = engine
298
+ if image:
299
+ self.image_info = ImageMgr().prepare_image_for_zenodo(engine, image)
300
+ self.doi = doi
301
+
302
+ def publish(self):
303
+ """
304
+ Publish an image on Zenodo.
305
+
306
+ Raises:
307
+ ZenodoError: If Zenodo API returns an error.
308
+ """
309
+ if self.image is None:
310
+ raise ValueError("No image specified for publishing.")
311
+ print("Publishing image to Zenodo...")
312
+ doi = self.session.publish(self.image_info)
313
+ print("Image successfully published.")
314
+ ImageMgr().tag_image(self.engine, self.image, doi)
315
+
316
+ def push(self):
317
+ """
318
+ Upload an image to Zenodo and leave it in draft mode (unpublished).
319
+
320
+ Raises:
321
+ ZenodoError: If Zenodo API returns an error.
322
+ """
323
+ if self.image is None:
324
+ raise ValueError("No image specified for pushing.")
325
+ logging.info(f"Uploading image to Zenodo... {self.image_info}")
326
+ self.session.upload(self.image_info)
327
+ print("Image successfully uploaded.")
328
+
329
+ def pull(self, download_path: str | None, force_pull: bool = False):
330
+ """
331
+ Download an image from Zenodo using its DOI.
332
+
333
+ Raises:
334
+ ValueError: If no DOI is provided.
335
+ ZenodoError: If Zenodo API returns an error.
336
+ """
337
+ if self.doi:
338
+ doi = ImageMgr().check_if_doi_exists_locally(self.engine, self.doi)
339
+ else:
340
+ raise ValueError("No DOI provided.")
341
+
342
+ if not force_pull and not doi:
343
+ print("Image already exists locally. Pulling aborted.")
344
+ return
345
+
346
+ print("Pulling image from Zenodo...")
347
+ tar_path = self.session.download(self.doi, download_path)
348
+ ImageMgr().load_image(self.engine, tar_path, self.doi)
349
+ print("Image successfully pulled.")
350
+ tar_path.unlink()
351
+
352
+ @staticmethod
353
+ def save_zenodo_token(config, token):
354
+ token_path = find_dotenv(filename=".zenodo_token")
355
+ token_path = Path.cwd() / config.get("defaults").get("token_location") if not token_path else Path(token_path)
356
+
357
+ print(f"This action will overwrite the token at: {token_path}\nDo you wish to continue? [y/N]")
358
+ if input().lower() == "y":
359
+ load_dotenv(token_path)
360
+ set_key(token_path, "ZENODO_TOKEN", token)
361
+ print(f"Token saved to: {token_path}")
362
+ else:
363
+ print("Action aborted.")
364
+
365
+ @staticmethod
366
+ def load_zenodo_token(config):
367
+ """
368
+ Load the Zenodo token from the Zenodo config file.
369
+
370
+ Raises:
371
+ ZenodoError: If no Zenodo token is found.
372
+ """
373
+ token_path = find_dotenv(filename=".zenodo_token")
374
+ token_path = Path.cwd() / config.get("defaults").get("token_location") if not token_path else Path(token_path)
375
+ load_dotenv(Path(token_path))
376
+ token = os.getenv("ZENODO_TOKEN")
377
+
378
+ if token:
379
+ print(f"Using token from: {token_path}\n")
380
+
381
+ return token
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fm-weck
3
- Version: 1.5.2
3
+ Version: 1.6.0
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
@@ -11,6 +11,7 @@ Classifier: Programming Language :: Python :: 3.11
11
11
  Classifier: Programming Language :: Python :: 3.12
12
12
  Requires-Python: >=3.10
13
13
  Requires-Dist: argcomplete
14
+ Requires-Dist: dotenv
14
15
  Requires-Dist: fm-tools>=1.0.0
15
16
  Requires-Dist: pyyaml>=6.0
16
17
  Requires-Dist: tabulate
@@ -0,0 +1,188 @@
1
+ fm_weck/__init__.py,sha256=pMQkEkp4vTqWSjEWcVSvJEle3pY5arkantUN52-gmrA,351
2
+ fm_weck/__main__.py,sha256=IfNDAqM6MK6P7KsQoW3wOHPOscB8evdVlS9C7R4wd_0,391
3
+ fm_weck/cache_mgr.py,sha256=3-OQFmCeswazXmX08ND4oEHFOR07ZDCwWzjmFTDkOSE,1373
4
+ fm_weck/capture.py,sha256=naxKaReUfz5_A-DvVTTdpHGW2hHYui3dWGEqzBwovv8,986
5
+ fm_weck/cli.py,sha256=64738SiYTGDZC7-xb5ZhLIFK2MquM1OpEAAoTNbHAKQ,32502
6
+ fm_weck/config.py,sha256=N7PgJRHXrhwNbfussz7NTGGMAVaFy9YiUbYFIXlRzVE,8009
7
+ fm_weck/engine.py,sha256=R2_Q8GPPcJkplWDlnX6C-E3r6PKG6ZKYSQfR7Ewr7d4,23077
8
+ fm_weck/exceptions.py,sha256=FWb_nFPGeAmTGU6o4ZC__ENceapIXvBusY04YKGEDW4,2506
9
+ fm_weck/file_util.py,sha256=FG_uBuNWGWbSivBv0dYzwugMkGfdS_iFY-hG6GLDD54,799
10
+ fm_weck/image_mgr.py,sha256=0loizRznPadDgzS6ly17RvAkNrGoKay-zE3gfnfVlCQ,4770
11
+ fm_weck/run_result.py,sha256=58SIkYpdZY3l5A7UKk4Uz2V8W57uo_nfKQPZD3V4-Iw,1377
12
+ fm_weck/runexec_mode.py,sha256=ws1FwQxLFumh8iklFXeFRMgWXRLSWNX2eUlh-QcMqo8,3359
13
+ fm_weck/runexec_util.py,sha256=YBvVIPpmEousZVxbZ5NS8jzpKPLyws31kIFE2z3Ki2E,1370
14
+ fm_weck/serve.py,sha256=RUz_3v15By_CvcBJlNBw-mKuDubAiIha5EfayFBnqps,10728
15
+ fm_weck/smoke_test_mode.py,sha256=FAUftedyDl_-xxsU74CcX4RxYH_cPR0zsNkIZwkk2Os,4060
16
+ fm_weck/tmp_file.py,sha256=oJiE8VGTPxhl-bXdtbM8eNqQ4e9ECPG1jDmiboVDo_k,1956
17
+ fm_weck/version_listing.py,sha256=caaoC3n9R-Ao2sEQ_ngOVO3bnKr7cNVeH6EiA8jO5Sc,864
18
+ fm_weck/zenodo.py,sha256=7yA5iYlt9lpauaNiz5rYESIvlr3glTr5arBWQyYuDyo,14191
19
+ fm_weck/grpc_service/__init__.py,sha256=TvQSR0pVeh4MMMT40VfzJFyZTHpAOI7C808vjJpWiOs,390
20
+ fm_weck/grpc_service/fm_weck_client.py,sha256=xd3ltrHcJ1fdl9V3PUFNukJahoMP_VavXTwEbPcjMyk,4862
21
+ fm_weck/grpc_service/fm_weck_server.py,sha256=kYrhi2Egp09yMP_4-AaW5k9lGd63HTD3KekBFSsG2dk,6142
22
+ fm_weck/grpc_service/request_handling.py,sha256=w_ZNZ1PK22D6SoBMc-hqXhy6S48kmksMXu-wSniYLSU,10912
23
+ fm_weck/grpc_service/run_store.py,sha256=6pm_b2PCPys6qmVQvxq8qUpREdBsdOPpvOhTOfh-Rjc,864
24
+ fm_weck/grpc_service/server_utils.py,sha256=1A3_RdjsvkeCV2w1oZemd4v9YcpcWWwgjy62jF0wUmM,721
25
+ fm_weck/grpc_service/proto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
+ fm_weck/grpc_service/proto/fm_weck_service.proto,sha256=HcRpwWnNTxHEGxitZZb_RcXTQX97erySKItGCg0AhBw,3316
27
+ fm_weck/grpc_service/proto/fm_weck_service_pb2.py,sha256=O8qtEYv77kGKaBbo-AXGTxYJTSTo6rBHN03PIZJB3cA,5647
28
+ fm_weck/grpc_service/proto/fm_weck_service_pb2.pyi,sha256=JH44EhTejp9Nk1dlnPuen2ZVp0WeAnbSvrT6FL9ihJg,6391
29
+ fm_weck/grpc_service/proto/fm_weck_service_pb2_grpc.py,sha256=YCnAPNEGQUNqgVzGB_JeV01fxsiiC7VlP0Aos-n5gWE,12076
30
+ fm_weck/grpc_service/proto/generate_protocol_files.sh,sha256=F9dd95qKejtB7B3P-x9d2oAr9VrW9AZRMfm8KKRKLpk,801
31
+ fm_weck/resources/BenchExec-3.27-py3-none-any.whl,sha256=g-db8LM8HfqLhbnl7n5lvUbMnF2tZ4MHAVOxTGxqO8w,732849
32
+ fm_weck/resources/BenchExec-3.27-py3-none-any.whl.license,sha256=Nq2Mwgn_pyr6ZZrTT095QPtFP3hr15ZeIRIaY0B7eC8,201
33
+ fm_weck/resources/Containerfile,sha256=HpPkrzJe1IKsmLOfbe5LbT-suaV6eJn1fT4csSvEkOk,390
34
+ fm_weck/resources/__init__.py,sha256=c3WqvUoTCFCM1SVxYEDQs4FqFxcNRiJkpeN5g-OA5VU,1550
35
+ fm_weck/resources/c_program_example.c,sha256=WOTAn4XyQL8TlplI6M8FbKiUxiwnvHUy2o6n0hLIe6o,21862
36
+ fm_weck/resources/run_with_overlay.sh,sha256=v1gV_6kMQ0v9BQ3chgDqI1MAOLHbPWeeTC52aCqVpEM,1162
37
+ fm_weck/resources/runexec,sha256=ogIBO38HLu9C9kDTTANBgAqVnH-UIF1bSJ9d3DSjyF4,462
38
+ fm_weck/resources/properties/coverage-branches.prp,sha256=Gl2r1cgBFoh4M2laa8dVGhteHkL04oiBRLzxz_hbkEU,56
39
+ fm_weck/resources/properties/coverage-branches.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
40
+ fm_weck/resources/properties/coverage-conditions.prp,sha256=tj307UJBhj-PZqRxjijeNb0foWe2hWIc8CQP54gIUao,57
41
+ fm_weck/resources/properties/coverage-conditions.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
42
+ fm_weck/resources/properties/coverage-error-call.prp,sha256=ZHzqgYPHix1PINIcpvq2X0QGEKeB9C0fitoV_OPy9IE,61
43
+ fm_weck/resources/properties/coverage-error-call.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
44
+ fm_weck/resources/properties/coverage-statements.prp,sha256=drb8JyyDwwZ-cxbOyuzzapYIkl3r7sTlooBCavarYl4,59
45
+ fm_weck/resources/properties/coverage-statements.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
46
+ fm_weck/resources/properties/def-behavior.prp,sha256=MpuBzFOzJA2OpwJFS8HFuSo7E199LOKJNTTwr64Bis0,44
47
+ fm_weck/resources/properties/def-behavior.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
48
+ fm_weck/resources/properties/no-data-race.prp,sha256=Md-Kd2iEOHeJ00f7w4mpjK7qL8_wdV8jKmoi2gncjLs,43
49
+ fm_weck/resources/properties/no-data-race.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
50
+ fm_weck/resources/properties/no-overflow.prp,sha256=6C9SIsRmR2zEVWX8OecxGdhRLeYlhDkOsMMFHz1O5gI,42
51
+ fm_weck/resources/properties/no-overflow.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
52
+ fm_weck/resources/properties/termination.prp,sha256=Hp7ZRB6fd2hRaVeot25TyU6nF7ROZS7e_Gz0tT5ZMfk,35
53
+ fm_weck/resources/properties/termination.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
54
+ fm_weck/resources/properties/unreach-call.prp,sha256=DGqQz8OtRUUiWgU33cN7ihHqWje5BsBTuymLdI-BAVA,53
55
+ fm_weck/resources/properties/unreach-call.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
56
+ fm_weck/resources/properties/valid-memcleanup.prp,sha256=2oOe4eCP56QonUGOAeTQ0BCetbT4V31epndKobRxg54,48
57
+ fm_weck/resources/properties/valid-memcleanup.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
58
+ fm_weck/resources/properties/valid-memsafety.prp,sha256=TUbXRp2ksBzMYK8uZb5mXukRBluuyak3YjwYzWAKc_4,129
59
+ fm_weck/resources/properties/valid-memsafety.prp.license,sha256=KzWZF1bpljIbdvwfzfWoP4DLMq6W1jXNN6WXWF0fxY0,214
60
+ fm_weck/resources/fm_tools/2ls.yml,sha256=CsDYmIP3nZtyGrSPI1HUQrrWveyN5GTcIVb8Iy3yKIc,4620
61
+ fm_weck/resources/fm_tools/afltc.yml,sha256=foWondsyjMsMqvhxCodLo--H_aJKLybfEk8c4vTge-g,1924
62
+ fm_weck/resources/fm_tools/aise.yml,sha256=koyx53YkQARpxOdNsSVPKqe_ZJvlgOkeJwufVrKTDjA,2681
63
+ fm_weck/resources/fm_tools/aprove.yml,sha256=uBt_TLr7c1sYVKLmIsPZfSVc2f0LoRyqEEiQOWgSVjI,3182
64
+ fm_weck/resources/fm_tools/blast.yml,sha256=zwPhJN0PfNJo_ZM4a5DNTxKCqc_b0CDaADRf8RlmrVw,1689
65
+ fm_weck/resources/fm_tools/brick.yml,sha256=iKHkLXZICO4bYM1QJxI5SMC1qekqxmGjM2jCGO-2IfQ,2805
66
+ fm_weck/resources/fm_tools/bubaak-split.yml,sha256=uz_s4Slk88cJbpjd_ha1rXAd0jses54Zp00HpNVW2wQ,2425
67
+ fm_weck/resources/fm_tools/bubaak.yml,sha256=lATHQOpalM2nkya-rXtZK23fhIEVTupIhfLSRzCoHFs,2380
68
+ fm_weck/resources/fm_tools/cadp.yml,sha256=xkXVGEn4PYMK7ItnaleVLOvbmAU8_9VDlqKjaln5C-k,3352
69
+ fm_weck/resources/fm_tools/cbmc.yml,sha256=XzJvUI6aNuE4oLtNQtqdA-i3VUnaiZzPdZRgtHfABvA,2362
70
+ fm_weck/resources/fm_tools/cetfuzz.yml,sha256=rqyFik2suPwdpPhM9nSxLReWuAGTsMSQPKC7hxwkRsI,2147
71
+ fm_weck/resources/fm_tools/coastal.yml,sha256=OC2aQE63LjEVGYAd2BZpI69L0UKaThuReV7G5u9KMEY,1917
72
+ fm_weck/resources/fm_tools/concurrentwitness2test.yml,sha256=MSDJ4Km6QC1kd6FUCn8AgrHIKOPFcb50llkr36iizgg,3249
73
+ fm_weck/resources/fm_tools/cooperace.yml,sha256=ew5ohS_MdvJG8diFAxfTXYtAIGmTL-1olkMLw_IwD-s,2342
74
+ fm_weck/resources/fm_tools/coveriteam-verifier-algo-selection.yml,sha256=iTEZlnzfVtDUg-cfDgnebIF9VaJ03m188WIbUt_VcAQ,2159
75
+ fm_weck/resources/fm_tools/coveriteam-verifier-parallel-portfolio.yml,sha256=YaO7dPlUV-ctpHm0jHag39_rWySfQQVUAlqKAUuVUuQ,2143
76
+ fm_weck/resources/fm_tools/coveritest.yml,sha256=WAJNp0-IFXjQx_tZGCMbbwTZdltODioEl4ptA_DjPP4,4102
77
+ fm_weck/resources/fm_tools/cpa-bam-bnb.yml,sha256=5jPIUbinV3c03kJC6pQDD1fnAYYdm6YO6otp0Xuj6xc,2007
78
+ fm_weck/resources/fm_tools/cpa-bam-smg.yml,sha256=7ICmQWd7Qcbvonnvl8wHHaLMOSPqt2UXvYcnIyZLM-M,2137
79
+ fm_weck/resources/fm_tools/cpa-lockator.yml,sha256=9HEMDFbzPntEmHoPFgOPn0BVeMj4Z56No4SRkQxX2ns,2115
80
+ fm_weck/resources/fm_tools/cpa-witness2test.yml,sha256=PeLQ3cqy78tNJUCpF6GIrPFJlYb4DV9aAd3Ee02pUwk,3851
81
+ fm_weck/resources/fm_tools/cpachecker.yml,sha256=JzVjGhqrwcotn7B3WODAPWK7Hyws-qs4xhX7PuGv1Ic,16059
82
+ fm_weck/resources/fm_tools/cpv.yml,sha256=X9lZHNe-FdOr3AKXagyMxiL0AgvOxcfJKrLGUA9mivc,3826
83
+ fm_weck/resources/fm_tools/crux.yml,sha256=N51jmvn9QdH9Q2_O-3-uSu3hckJsNs-Iesw54x2adZM,1907
84
+ fm_weck/resources/fm_tools/cseq.yml,sha256=2XP42-cwXhmEXI1CouyqR7zpcQtm7v3OhgOk7J7NmJQ,2987
85
+ fm_weck/resources/fm_tools/dartagnan.yml,sha256=p1EWcP7W3Wg-ItKon-tVxM45xvIwnJmzP1emQDXyrhc,5951
86
+ fm_weck/resources/fm_tools/dasa.yml,sha256=5zbIySMj2MyrMxuAwJcOTqmJweti1K3XLTrpk1v3xoQ,2150
87
+ fm_weck/resources/fm_tools/deagle.yml,sha256=YEx3kfIDv_OvAPnb6IoTW0EQnufaHimEqmf45wZTJwk,3135
88
+ fm_weck/resources/fm_tools/divine.yml,sha256=V0j2nJOeN9vansaf3r_X_QeOVdoRtGL4zMkOwS42RYo,1896
89
+ fm_weck/resources/fm_tools/ebf.yml,sha256=l3CYhYfklfchVX6nIW-ylXwRz9GxxNHLisVJYyWmCDs,1975
90
+ fm_weck/resources/fm_tools/emergentheta.yml,sha256=sDKI9zJ-LqY1dpSPpIIGMXjsouTaT6ohI3qMeeJARgQ,3790
91
+ fm_weck/resources/fm_tools/esbmc-incr.yml,sha256=FDLAPtbZPVe-B1zSbOXc4ShHbsiwNlj9jEljbhGSgu0,4363
92
+ fm_weck/resources/fm_tools/esbmc-kind.yml,sha256=2iuAAM5FmNyxzTsM69ukZh86RNKJlIfBR0E8Mi5rW-A,5048
93
+ fm_weck/resources/fm_tools/fdse.yml,sha256=ljciY9rqI1CcrBf0j-c3bEXjdjUawKN1Xh1Yl5sm3tA,2841
94
+ fm_weck/resources/fm_tools/fizzer.yml,sha256=X83AmoRztZOZp4vx0r6cfKdDGggwCZ6g9hh-nsWRgRo,3675
95
+ fm_weck/resources/fm_tools/frama-c-sv.yml,sha256=42ZyXxM0E-dHgUq0eklZdHr_xdVQONQg4zqDXNi-StA,2331
96
+ fm_weck/resources/fm_tools/fshell-witness2test.yml,sha256=Al1NDL41ffukCoxcfOr1kyh8hxv4Lifi-VkPcR5QBtU,1949
97
+ fm_weck/resources/fm_tools/function-res.yml,sha256=3GXGVSLvItkNKV0oVkTQktZbdZ2COLCRqCDrUaqgpoM,1998
98
+ fm_weck/resources/fm_tools/fusebmc-ia.yml,sha256=HAe0M7u89VXqZQU2SK2SsdBub4E3Ts4ej5tlxIPsXzc,2551
99
+ fm_weck/resources/fm_tools/fusebmc.yml,sha256=PLb9SCQecJIznUnb7typCENKPc1yggktoBWcw86smVc,4210
100
+ fm_weck/resources/fm_tools/gazer-theta.yml,sha256=7c0PMHetDvmJXKyVlYdRceM_bkgEpyj2GFST_GYiJtY,2177
101
+ fm_weck/resources/fm_tools/gdart-llvm.yml,sha256=LW9xYk9DsS7YGQKoHFYJM6zewVp8ZdW41u7TLb5va5Q,1756
102
+ fm_weck/resources/fm_tools/gdart.yml,sha256=9E8c6ze_dww8UjpfKUggzGhdglCRic4hhFkxnThbsoA,4597
103
+ fm_weck/resources/fm_tools/goblint-par.yml,sha256=FTu9JQquEJozSeOjNr5GzxcyafNbNNDoDQg3B0m_TJg,1792
104
+ fm_weck/resources/fm_tools/goblint.yml,sha256=X2X0kqXqpj0T2kdZuIpueeCRYr2lY5rN935vfA4OZiM,11134
105
+ fm_weck/resources/fm_tools/goblitch.yml,sha256=pQizxGUUN4d40JSrfTT82kyfi2FcNiYHYKb5UMo8iYo,2013
106
+ fm_weck/resources/fm_tools/graves-par.yml,sha256=wc2qqfd0LKxUBvdvoHKMNDVXP5kngUSfnRVlRr9ICJg,1509
107
+ fm_weck/resources/fm_tools/graves.yml,sha256=xDMN14wiOfIsU_6k5rv6tLonJa4oSc19SP8Z7rRJN-w,2586
108
+ fm_weck/resources/fm_tools/gwit.yml,sha256=4_IKZsx0zjCfQo4kCX_du-mR23Q2QZhK7XWvD6hVI-Q,2078
109
+ fm_weck/resources/fm_tools/hornix.yml,sha256=0MYiTnlPenlDiilYeYsQVjxGN_P6ShXTGxDgTZLasdg,2087
110
+ fm_weck/resources/fm_tools/hybridtiger.yml,sha256=5Njn2kArF9juLUl-IF0xz-Rl-7F2psKQlD0TY5nyRfk,2061
111
+ fm_weck/resources/fm_tools/iekke.yml,sha256=tlu_3AxfgkJOvoNyvEm8vicltGO1OIX8KGgsmR5NMxI,2359
112
+ fm_weck/resources/fm_tools/infer.yml,sha256=p1EyU0hcuuiTUM4NLdw72KE5VfQXQ-2ciuc5xBE6vFo,2151
113
+ fm_weck/resources/fm_tools/java-ranger.yml,sha256=9fqHZj1x69zbGtvWarsyIOOWF5BvhQhGqkz5XNdbwY4,2528
114
+ fm_weck/resources/fm_tools/jayhorn.yml,sha256=3rSdD8skVd8Momsc84CTx_5zUCMusjyaWlW4wU-eI7E,3563
115
+ fm_weck/resources/fm_tools/jbmc.yml,sha256=fLA0WjcLv7oUGxXFQd6HWTHXg5Q4pdQwyqH58-0ck3o,3233
116
+ fm_weck/resources/fm_tools/jcwit.yml,sha256=BWyAeidBEZo05ONDmp7g8eAycBOAf3eJei250k8Vhvg,1530
117
+ fm_weck/resources/fm_tools/jdart.yml,sha256=jQuiZe4ojY7Wu7hyKHxqpZJADwc2v3tyPRRZciKeqt4,1830
118
+ fm_weck/resources/fm_tools/jlisa.yml,sha256=8ctjW_rq3VpHo7kh5-C24KwWyvBipSLWBKKwTBxUKNo,3578
119
+ fm_weck/resources/fm_tools/key.yml,sha256=wse7rCv33m2z8nbm9Dk-jAipkMaF8S0LINGCzfNfpfE,2478
120
+ fm_weck/resources/fm_tools/klee.yml,sha256=J4zrN7knKYtnj7g5_rDF5aAuc4JIpQiZukAd5E0CT6Q,1823
121
+ fm_weck/resources/fm_tools/kleef.yml,sha256=d9CmzFjDJ00gS0JvdeCvq4GXyVIJYAKO2sp_0JC6piM,2180
122
+ fm_weck/resources/fm_tools/korn.yml,sha256=FdGS3rOt39IIDLDIW1p6vNCLdQnIoaaxalxuq68Gja8,3581
123
+ fm_weck/resources/fm_tools/lazycseq.yml,sha256=oNbRwbNosJVSbdXCUuwo_s2L-XivKANOcd58yJqKl1A,1806
124
+ fm_weck/resources/fm_tools/legion-symcc.yml,sha256=kueBv9SOL0kjOCAeI7JQ6ngtLntFzByF3wsf3kYXd3Q,1563
125
+ fm_weck/resources/fm_tools/legion.yml,sha256=bRzQOLwi1DLwm8rkiyEz1aFMfARPdMuqJGVpgU39bFo,1772
126
+ fm_weck/resources/fm_tools/lf-checker.yml,sha256=MPJKRLwGMw5_FfDF_rZkF5jdlna5h2jx2egYBiyBAG0,1700
127
+ fm_weck/resources/fm_tools/liv.yml,sha256=ANV_KKqK8lg5KDufI-6vYVVnXfPqV1F29y9527zuvXc,4774
128
+ fm_weck/resources/fm_tools/locksmith.yml,sha256=5OQaxkM3GIKYsVi3ROHXo9QMHFXUk9urJuHgomTuycU,1711
129
+ fm_weck/resources/fm_tools/ltsmin.yml,sha256=WkQ5aP-p1yFP6XfRXJeb5ftcd7o_buvNjEKZRVr6mpM,1644
130
+ fm_weck/resources/fm_tools/metaval++.yml,sha256=exAaZbbXS5CAqh4qSw1PeVoDqUIZO2Yaq8bSARytByA,2005
131
+ fm_weck/resources/fm_tools/metaval.yml,sha256=V31OaiNybl6M5CIXjZ51ucj0Xndx2WxXl4wDW0_vEXc,8576
132
+ fm_weck/resources/fm_tools/mlb.yml,sha256=oU5HBNS1pZ2jymqKT1xl_ReYGL8_3HTGqy8Iwixm0us,2853
133
+ fm_weck/resources/fm_tools/mopsa.yml,sha256=T_vUVrMiC2thgb2C7p_KB32Gkr1lHRphzR-ZcIAvAhQ,7323
134
+ fm_weck/resources/fm_tools/muval.yml,sha256=wEKMf6A_a5rhc92SKvyiFxw_APoB_RdFCjcoJPA8Uhk,2986
135
+ fm_weck/resources/fm_tools/nacpa.yml,sha256=a1zVib455jTNOWy76VWJsGxiVFJzIl8-ubO2MdW8mFc,2958
136
+ fm_weck/resources/fm_tools/nitwit.yml,sha256=hlRweIrCWpQgZVKDFu6ryHF1yOgbtEA67pyAM3D20RQ,2348
137
+ fm_weck/resources/fm_tools/ogchecker.yml,sha256=LkY1zp6CuEfFy1lwNrgGKdXANmDek2SVOXDGCqqlzRs,1208
138
+ fm_weck/resources/fm_tools/owic.yml,sha256=2XzcMcRHvQnEUQAWNHh6M-XadK-OQVA4vCXae9BiXAU,1856
139
+ fm_weck/resources/fm_tools/pesco.yml,sha256=g9erhngemnxBDKOox_YG1aPeWVR7A4MutilIznMQUUI,2707
140
+ fm_weck/resources/fm_tools/pichecker.yml,sha256=DY0fp9OFhwWh6NJMA-Uk0CP4PL5kvqS-UsSpXOfINU8,1960
141
+ fm_weck/resources/fm_tools/pinaka.yml,sha256=sMDVwUMGM2_nU1Af8nil6n1LxknKj60Zz6FouLRT7is,1975
142
+ fm_weck/resources/fm_tools/predatorhp.yml,sha256=XePL5EVN1S4sjaYB9OXfcUjBva2qfY_uIjlJHSyxsoo,2780
143
+ fm_weck/resources/fm_tools/prism.yml,sha256=ruAG7Yvb_x6BlHzmadNX8M5DsL8ObsOz493g0kKCwL4,2320
144
+ fm_weck/resources/fm_tools/proton.yml,sha256=91CKYgW1d1gHKY1OdADp6-4s9wmcqGZfAibSeDuCFy0,2710
145
+ fm_weck/resources/fm_tools/prtest.yml,sha256=bCx41klP43X-ILnIw8vpu7QsSfAEC1_0x9z9cq-wJ38,3016
146
+ fm_weck/resources/fm_tools/pysvlib-linter.yml,sha256=nZvuGwfQx5Ob46sOO4fN3LHs0XDt7rb4GkRdu0VqQSc,2316
147
+ fm_weck/resources/fm_tools/pysvlib-validator.yml,sha256=laaQSHmAa1ipBrdcPNhUhp-HqPbtrbCo0JrSqVqMjQE,2392
148
+ fm_weck/resources/fm_tools/racerf.yml,sha256=O9kgiLRP-8m58aAd9AqFSxwSwFtVoumvflVvGejkVwU,2338
149
+ fm_weck/resources/fm_tools/re3ver.yml,sha256=50kxZ_R1_jVRcuXuLapqebTfg5SyQFXtw8u3OArEG1o,2068
150
+ fm_weck/resources/fm_tools/relay-sv.yml,sha256=rN4kf0EO_xVqzpPlFtWqdNjICjOjU4Uo7_YX9E6OPlo,1237
151
+ fm_weck/resources/fm_tools/rizzer.yml,sha256=MA15ptOn8Z0djUrNhYgEC5jTNo5a66OL7vVUtsrSzw8,1739
152
+ fm_weck/resources/fm_tools/schema.yml,sha256=GqnGypMgYMbiUlraBuhXGB4Pl4gx1-l5AUPungg6N_s,28206
153
+ fm_weck/resources/fm_tools/seal.yml,sha256=O_2D7PawiTmDZuXQ8cIGUiJyL-Dd0TF1IjdNRryAlRQ,2023
154
+ fm_weck/resources/fm_tools/sikraken.yml,sha256=UBRJJBcWIx-ArHJl4sJs308UIDPlfLMoU_jZ5BOzWWg,2040
155
+ fm_weck/resources/fm_tools/spf.yml,sha256=amBrbENF1GXKwUZrkXPXZW15nCxDDI8ctCwKJ5XcyZc,1990
156
+ fm_weck/resources/fm_tools/sv-sanitizers.yml,sha256=PC1uX_yKHsCKtqBiFjTPXthbgsQXHSIchXdkB8fRi80,2746
157
+ fm_weck/resources/fm_tools/svf-svc.yml,sha256=rXKz0_TsTX7BWy1J7swB-LgXNKqUlCUYj5Q2pRU_GMU,2473
158
+ fm_weck/resources/fm_tools/svlibchecker.yml,sha256=aoIjSedUUA7r6slzEqZpQjzfGds2t_CyfWo0fzhs9pU,2369
159
+ fm_weck/resources/fm_tools/swat.yml,sha256=-yARQqrXgscp0q1sn-nuDMZHqMilPNuzncEiMkhN9sw,2906
160
+ fm_weck/resources/fm_tools/symbiotic-witch.yml,sha256=xqVmQBLaCFR3YGMsfOiMnHlXMDmaBNOHz1bKBP21QdA,3189
161
+ fm_weck/resources/fm_tools/symbiotic.yml,sha256=iGSnVwK1whxwHwX1qaaDL9Zq5nBV8qLC0UfHltGnF7Y,7809
162
+ fm_weck/resources/fm_tools/testcoca.yml,sha256=AMjCBec0QP7qiQjLsX4LDiRMvsn9OeK8ZyQupZ4phnM,1534
163
+ fm_weck/resources/fm_tools/testcov.yml,sha256=AL7jbP2-IxAc2PoLKP1YZh2Hi5wehvTk-DgIfYrela8,8968
164
+ fm_weck/resources/fm_tools/theta.yml,sha256=mBzgfzG59u6kAtZaiH5iP29MP1f1DmrpcgZgU55FE70,6034
165
+ fm_weck/resources/fm_tools/thorn.yml,sha256=KQ2MIXFSzLa0UD0q1KG4YigX9lnz_gRPeeVbY-NtCgo,2002
166
+ fm_weck/resources/fm_tools/tracerx-wp.yml,sha256=DptcSRKgpkXHxz2p9ffAIv2mGeK8A7vF1WjscsNOgkY,2562
167
+ fm_weck/resources/fm_tools/tracerx.yml,sha256=cB9xnqfqZE8GgnH-xeQnVF5v_bNZiw1sjhSz5DgpLIM,3081
168
+ fm_weck/resources/fm_tools/uautomizer.yml,sha256=G289nnhDhCG_f22cv1W9EB3BvXQ17xvJtHBqrs3F1qU,13028
169
+ fm_weck/resources/fm_tools/ugemcutter.yml,sha256=XaKQuOuUssrARbE_viIFM5LWC_pIrOV1-vorfFv6yLU,6063
170
+ fm_weck/resources/fm_tools/ukojak.yml,sha256=kE4g0khgjSTv16oeY6Cx3JKcSMoQ20GdDrPg83kAiYg,4403
171
+ fm_weck/resources/fm_tools/uparalizer.yml,sha256=4ux4r2Xq34STLaUWDbsE26bN9uBKCjlpj5X3C_flnK4,2158
172
+ fm_weck/resources/fm_tools/ureferee.yml,sha256=W9Tz7TRDfDHLJ3DKJHK9zfmEyFOpWcow_YhT_Y2JRYc,4687
173
+ fm_weck/resources/fm_tools/utaipan.yml,sha256=kNom18a_w1dZpAEyE4KLw-d6SpmNrvgvgToPzOp166o,5107
174
+ fm_weck/resources/fm_tools/utestgen.yml,sha256=oK1Xe7XgIidOCslut4X9knIRaNQvRTVHeouhPEvdCnE,3697
175
+ fm_weck/resources/fm_tools/vercors.yml,sha256=b7vEyzW61lQ6Dp9od65sUVYRbrQWtosN5p3-MjTXEvg,3190
176
+ fm_weck/resources/fm_tools/veriabs.yml,sha256=mkL-wrt1Xj78Ueh7TdOS0EYExve_JaJSe1wQsn9Vj4M,2757
177
+ fm_weck/resources/fm_tools/veriabsl.yml,sha256=AGYwsveoBhxW7ZZP2SqUpsZXyujbo6NZUhAAlSrgLMY,4013
178
+ fm_weck/resources/fm_tools/verifuzz.yml,sha256=1HHtZMkMhUyXxd20R7yXVEqyqOVo_O3G_j3zdSx3z9k,1845
179
+ fm_weck/resources/fm_tools/verioover.yml,sha256=kdCa2XehBlZEKVTkf8GEWV9bVhCFZ63tHZCRKy9BFnU,1676
180
+ fm_weck/resources/fm_tools/wasp-c.yml,sha256=mPT9kO42QtTBmIClD0tAgDfjdfzY2DSr3I83pAm3ZcM,1916
181
+ fm_weck/resources/fm_tools/wit4java.yml,sha256=_EUzSxHBaSIesdk-_g7ELIyqMnmBCkUWmzGmygoO8dI,2899
182
+ fm_weck/resources/fm_tools/witch.yml,sha256=pm5s5CwOhZ4cwNaZfvpS4V6mMQ9YsFuQG7GxghjA3TI,2539
183
+ fm_weck/resources/fm_tools/witnesslint.yml,sha256=1mLARKR0WpB5_ssdPzy9sAWjmdttnomdAEi14hA1lh0,10335
184
+ fm_weck/resources/fm_tools/witnessmap.yml,sha256=kdv3i5kX7O6b9plSHoOSNMXG4Fkhrzgo8pL_AVCguk8,2628
185
+ fm_weck-1.6.0.dist-info/METADATA,sha256=ssd1gMEvt374fpCIldnccQsa21CPek5k3QUHAjy-seA,3361
186
+ fm_weck-1.6.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
187
+ fm_weck-1.6.0.dist-info/entry_points.txt,sha256=toWpKCSY1u593MPnI_xW5gnwlnkerP4AvmPQ1s2nPgY,50
188
+ fm_weck-1.6.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
2
+ Generator: hatchling 1.28.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any