pyEDAA.CLITool 0.2.0__tar.gz → 0.3.0__tar.gz

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 (29) hide show
  1. {pyEDAA.CLITool-0.2.0 → pyedaa_clitool-0.3.0}/PKG-INFO +51 -8
  2. {pyEDAA.CLITool-0.2.0 → pyedaa_clitool-0.3.0}/pyEDAA/CLITool/Aldec/ActiveHDL.py +1 -1
  3. {pyEDAA.CLITool-0.2.0 → pyedaa_clitool-0.3.0}/pyEDAA/CLITool/Aldec/RivieraPRO.py +1 -1
  4. {pyEDAA.CLITool-0.2.0 → pyedaa_clitool-0.3.0}/pyEDAA/CLITool/Aldec/__init__.py +1 -1
  5. {pyEDAA.CLITool-0.2.0 → pyedaa_clitool-0.3.0}/pyEDAA/CLITool/Docker.py +2 -1
  6. {pyEDAA.CLITool-0.2.0 → pyedaa_clitool-0.3.0}/pyEDAA/CLITool/GHDL.py +157 -12
  7. {pyEDAA.CLITool-0.2.0 → pyedaa_clitool-0.3.0}/pyEDAA/CLITool/GTKWave.py +2 -1
  8. {pyEDAA.CLITool-0.2.0 → pyedaa_clitool-0.3.0}/pyEDAA/CLITool/IntelFPGA/Quartus.py +1 -1
  9. {pyEDAA.CLITool-0.2.0 → pyedaa_clitool-0.3.0}/pyEDAA/CLITool/IntelFPGA/__init__.py +1 -1
  10. {pyEDAA.CLITool-0.2.0 → pyedaa_clitool-0.3.0}/pyEDAA/CLITool/Lattice/Diamond.py +1 -1
  11. {pyEDAA.CLITool-0.2.0 → pyedaa_clitool-0.3.0}/pyEDAA/CLITool/Lattice/__init__.py +1 -1
  12. {pyEDAA.CLITool-0.2.0 → pyedaa_clitool-0.3.0}/pyEDAA/CLITool/Mentor/ModelSim.py +3 -3
  13. {pyEDAA.CLITool-0.2.0 → pyedaa_clitool-0.3.0}/pyEDAA/CLITool/Mentor/__init__.py +1 -1
  14. {pyEDAA.CLITool-0.2.0 → pyedaa_clitool-0.3.0}/pyEDAA/CLITool/Xilinx/ISE.py +1 -1
  15. {pyEDAA.CLITool-0.2.0 → pyedaa_clitool-0.3.0}/pyEDAA/CLITool/Xilinx/Vivado.py +3 -2
  16. {pyEDAA.CLITool-0.2.0 → pyedaa_clitool-0.3.0}/pyEDAA/CLITool/Xilinx/__init__.py +1 -1
  17. {pyEDAA.CLITool-0.2.0 → pyedaa_clitool-0.3.0}/pyEDAA/CLITool/__init__.py +31 -3
  18. {pyEDAA.CLITool-0.2.0 → pyedaa_clitool-0.3.0}/pyEDAA.CLITool.egg-info/PKG-INFO +51 -8
  19. pyedaa_clitool-0.3.0/pyEDAA.CLITool.egg-info/requires.txt +50 -0
  20. pyedaa_clitool-0.3.0/pyproject.toml +76 -0
  21. {pyEDAA.CLITool-0.2.0 → pyedaa_clitool-0.3.0}/setup.py +15 -11
  22. pyEDAA.CLITool-0.2.0/pyEDAA.CLITool.egg-info/requires.txt +0 -22
  23. pyEDAA.CLITool-0.2.0/pyproject.toml +0 -36
  24. {pyEDAA.CLITool-0.2.0 → pyedaa_clitool-0.3.0}/LICENSE.md +0 -0
  25. {pyEDAA.CLITool-0.2.0 → pyedaa_clitool-0.3.0}/README.md +0 -0
  26. {pyEDAA.CLITool-0.2.0 → pyedaa_clitool-0.3.0}/pyEDAA.CLITool.egg-info/SOURCES.txt +0 -0
  27. {pyEDAA.CLITool-0.2.0 → pyedaa_clitool-0.3.0}/pyEDAA.CLITool.egg-info/dependency_links.txt +0 -0
  28. {pyEDAA.CLITool-0.2.0 → pyedaa_clitool-0.3.0}/pyEDAA.CLITool.egg-info/top_level.txt +0 -0
  29. {pyEDAA.CLITool-0.2.0 → pyedaa_clitool-0.3.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyEDAA.CLITool
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: An abstraction layer of EDA CLI tools.
5
5
  Home-page: https://GitHub.com/edaa-org/pyEDAA.CLITool
6
6
  Author: Patrick Lehmann
@@ -10,23 +10,68 @@ Project-URL: Documentation, https://edaa-org.GitHub.io/pyEDAA.CLITool
10
10
  Project-URL: Source Code, https://GitHub.com/edaa-org/pyEDAA.CLITool
11
11
  Project-URL: Issue Tracker, https://GitHub.com/edaa-org/pyEDAA.CLITool/issues
12
12
  Keywords: cli,abstraction layer,eda
13
- Platform: UNKNOWN
14
13
  Classifier: Operating System :: OS Independent
15
14
  Classifier: Intended Audience :: Developers
16
15
  Classifier: Topic :: Utilities
17
16
  Classifier: Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)
18
17
  Classifier: License :: OSI Approved :: Apache Software License
19
18
  Classifier: Programming Language :: Python :: 3 :: Only
20
- Classifier: Programming Language :: Python :: 3.7
21
- Classifier: Programming Language :: Python :: 3.8
22
19
  Classifier: Programming Language :: Python :: 3.9
23
20
  Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Programming Language :: Python :: 3.13
24
24
  Classifier: Development Status :: 4 - Beta
25
- Requires-Python: >=3.7
25
+ Requires-Python: >=3.9
26
26
  Description-Content-Type: text/markdown
27
+ License-File: LICENSE.md
28
+ Requires-Dist: pyTooling~=8.0
29
+ Requires-Dist: pyVHDLModel~=0.29.2
30
+ Requires-Dist: py-flags~=1.1
27
31
  Provides-Extra: doc
32
+ Requires-Dist: sphinx_autodoc_typehints~=2.5; extra == "doc"
33
+ Requires-Dist: sphinx_reports~=0.7; extra == "doc"
34
+ Requires-Dist: py-flags~=1.1; extra == "doc"
35
+ Requires-Dist: docutils~=0.21; extra == "doc"
36
+ Requires-Dist: sphinx~=8.1; extra == "doc"
37
+ Requires-Dist: sphinxcontrib-mermaid~=1.0; extra == "doc"
38
+ Requires-Dist: sphinx_rtd_theme~=3.0; extra == "doc"
39
+ Requires-Dist: pyTooling~=8.0; extra == "doc"
40
+ Requires-Dist: docutils_stubs~=0.0.22; extra == "doc"
41
+ Requires-Dist: pyVHDLModel~=0.29.2; extra == "doc"
42
+ Requires-Dist: autoapi>=2.0.1; extra == "doc"
43
+ Requires-Dist: sphinx_design~=0.6.1; extra == "doc"
44
+ Requires-Dist: sphinx-copybutton>=0.5.2; extra == "doc"
45
+ Provides-Extra: test
46
+ Requires-Dist: mypy~=1.13; extra == "test"
47
+ Requires-Dist: Coverage~=7.6; extra == "test"
48
+ Requires-Dist: pytest~=8.3; extra == "test"
49
+ Requires-Dist: py-flags~=1.1; extra == "test"
50
+ Requires-Dist: lxml~=5.3; extra == "test"
51
+ Requires-Dist: pyTooling~=8.0; extra == "test"
52
+ Requires-Dist: pyVHDLModel~=0.29.2; extra == "test"
53
+ Requires-Dist: typing_extensions~=4.12; extra == "test"
54
+ Requires-Dist: pytest-cov~=6.0; extra == "test"
28
55
  Provides-Extra: all
29
- License-File: LICENSE.md
56
+ Requires-Dist: Coverage~=7.6; extra == "all"
57
+ Requires-Dist: sphinx_design~=0.6.1; extra == "all"
58
+ Requires-Dist: pyVHDLModel~=0.29.2; extra == "all"
59
+ Requires-Dist: sphinx_autodoc_typehints~=2.5; extra == "all"
60
+ Requires-Dist: docutils~=0.21; extra == "all"
61
+ Requires-Dist: sphinx~=8.1; extra == "all"
62
+ Requires-Dist: pyTooling~=8.0; extra == "all"
63
+ Requires-Dist: docutils_stubs~=0.0.22; extra == "all"
64
+ Requires-Dist: sphinx-copybutton>=0.5.2; extra == "all"
65
+ Requires-Dist: pytest~=8.3; extra == "all"
66
+ Requires-Dist: sphinxcontrib-mermaid~=1.0; extra == "all"
67
+ Requires-Dist: typing_extensions~=4.12; extra == "all"
68
+ Requires-Dist: mypy~=1.13; extra == "all"
69
+ Requires-Dist: sphinx_reports~=0.7; extra == "all"
70
+ Requires-Dist: py-flags~=1.1; extra == "all"
71
+ Requires-Dist: lxml~=5.3; extra == "all"
72
+ Requires-Dist: sphinx_rtd_theme~=3.0; extra == "all"
73
+ Requires-Dist: autoapi>=2.0.1; extra == "all"
74
+ Requires-Dist: pytest-cov~=6.0; extra == "all"
30
75
 
31
76
  <p align="center">
32
77
  <a title="edaa-org.github.io/pyEDAA.CLITool" href="https://edaa-org.github.io/pyEDAA.CLITool"><img height="80px" src="doc/_static/logo.svg"/></a>
@@ -172,5 +217,3 @@ The accompanying documentation is licensed under [Creative Commons - Attribution
172
217
 
173
218
  ---
174
219
  SPDX-License-Identifier: Apache-2.0
175
-
176
-
@@ -11,7 +11,7 @@
11
11
  # #
12
12
  # License: #
13
13
  # ==================================================================================================================== #
14
- # Copyright 2017-2022 Patrick Lehmann - Boetzingen, Germany #
14
+ # Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany #
15
15
  # Copyright 2014-2016 Technische Universität Dresden - Germany, Chair of VLSI-Design, Diagnostics and Architecture #
16
16
  # #
17
17
  # Licensed under the Apache License, Version 2.0 (the "License"); #
@@ -11,7 +11,7 @@
11
11
  # #
12
12
  # License: #
13
13
  # ==================================================================================================================== #
14
- # Copyright 2017-2022 Patrick Lehmann - Boetzingen, Germany #
14
+ # Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany #
15
15
  # Copyright 2014-2016 Technische Universität Dresden - Germany, Chair of VLSI-Design, Diagnostics and Architecture #
16
16
  # #
17
17
  # Licensed under the Apache License, Version 2.0 (the "License"); #
@@ -11,7 +11,7 @@
11
11
  # #
12
12
  # License: #
13
13
  # ==================================================================================================================== #
14
- # Copyright 2017-2022 Patrick Lehmann - Boetzingen, Germany #
14
+ # Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany #
15
15
  # Copyright 2014-2016 Technische Universität Dresden - Germany, Chair of VLSI-Design, Diagnostics and Architecture #
16
16
  # #
17
17
  # Licensed under the Apache License, Version 2.0 (the "License"); #
@@ -11,7 +11,7 @@
11
11
  # #
12
12
  # License: #
13
13
  # ==================================================================================================================== #
14
- # Copyright 2021-2022 Patrick Lehmann - Boetzingen, Germany #
14
+ # Copyright 2021-2024 Patrick Lehmann - Boetzingen, Germany #
15
15
  # #
16
16
  # Licensed under the Apache License, Version 2.0 (the "License"); #
17
17
  # you may not use this file except in compliance with the License. #
@@ -42,6 +42,7 @@ from pyTooling.CLIAbstraction.ValuedTupleFlag import LongTupleFlag
42
42
  class Docker(Executable):
43
43
  _executableNames = {
44
44
  "Darwin": "docker",
45
+ "FreeBSD": "docker",
45
46
  "Linux": "docker",
46
47
  "Windows": "docker.exe"
47
48
  }
@@ -11,7 +11,7 @@
11
11
  # #
12
12
  # License: #
13
13
  # ==================================================================================================================== #
14
- # Copyright 2017-2022 Patrick Lehmann - Boetzingen, Germany #
14
+ # Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany #
15
15
  # Copyright 2014-2016 Technische Universität Dresden - Germany, Chair of VLSI-Design, Diagnostics and Architecture #
16
16
  # #
17
17
  # Licensed under the Apache License, Version 2.0 (the "License"); #
@@ -30,10 +30,12 @@
30
30
  # ==================================================================================================================== #
31
31
  #
32
32
  """This module contains the CLI abstraction layer for `GHDL <https://github.com/ghdl/ghdl>`__."""
33
- from typing import Union, Iterable
33
+ from re import search as re_search
34
+ from typing import Union, Iterable, Tuple, Optional as Nullable
34
35
 
35
- from pyTooling.Decorators import export
36
- from pyVHDLModel import VHDLVersion
36
+ from pyTooling.Decorators import export
37
+ from pyTooling.MetaClasses import ExtendedType
38
+ from pyVHDLModel import VHDLVersion
37
39
 
38
40
  from pyTooling.CLIAbstraction import CLIArgument, Executable
39
41
  from pyTooling.CLIAbstraction.Argument import PathListArgument, StringArgument
@@ -43,11 +45,133 @@ from pyTooling.CLIAbstraction.BooleanFlag import LongBooleanFlag
43
45
  from pyTooling.CLIAbstraction.ValuedFlag import ShortValuedFlag, LongValuedFlag
44
46
  from pyTooling.CLIAbstraction.KeyValueFlag import ShortKeyValueFlag
45
47
 
48
+ from pyEDAA.CLITool import CLIToolException
49
+
50
+
51
+ @export
52
+ class GHDLVersion(metaclass=ExtendedType, slots=True):
53
+ _major: int
54
+ _minor: int
55
+ _micro: int
56
+ _dev: bool
57
+ _commitsSinceLastTag: int
58
+ _gitHash: str
59
+ _dirty: bool
60
+ _edition: str
61
+ _gnatCompiler: Tuple[int, int, int]
62
+ _backend: str
63
+
64
+ VERSION_LINE_PATTERN = (
65
+ r"GHDL"
66
+ r"\s(?P<Major>\d+)\.(?P<Minor>\d+)\.(?P<Micro>\d+)(?:-(?P<Suffix>dev|rc\d+))?"
67
+ r"\s\((?:"
68
+ r"(?:"
69
+ r"(?P<Packaging>tarball)"
70
+ r")|(?:"
71
+ r"(?P<major2>\d+)\.(?P<minor2>\d+)\.(?P<micro2>\d+)\.(?:r(?P<cslt>\d+))\.(?:g(?P<Hash>[0-9a-f]+))(?:\.(?P<Dirty>dirty))?"
72
+ r")|(?:"
73
+ r"Ubuntu\s(?P<UbuntuMajor>\d+)\.(?P<UbuntuMinor>\d+)\.(?P<UbuntuMicro>\d+)\+dfsg-(?P<dfsg>\d+)ubuntu(?P<UbuntuPackage>\d+)"
74
+ r")"
75
+ r")\)"
76
+ r"\s\[(?P<Edition>[\w\s]+)\]"
77
+ )
78
+ GNAT_LINE_PATTERN = (
79
+ r"\s*[\w\s]+:\s"
80
+ r"(?:"
81
+ r"(?:(?P<Major>\d+)\.(?P<Minor>\d+)\.(?P<Micro>\d+))"
82
+ r"|"
83
+ r"(?:Community\s(?P<Year>\d{4})\s\((?P<DateCode>\d{8}-\d{2})\))"
84
+ r")"
85
+ )
86
+ BACKEND_LINE_PATTERN = (
87
+ r"\s*"
88
+ r"(?:static elaboration, )?"
89
+ r"(?P<Backend>llvm|mcode|gcc)"
90
+ r"(?: (?P<LLVMMajor>\d+)\.(?P<LLVMMinor>\d+)\.(?P<LLVMMicro>\d+))?"
91
+ r"(?: JIT)?"
92
+ r" code generator"
93
+ )
94
+
95
+ def __init__(self, versionLine: str, gnatLine: str, backendLine: str):
96
+ match = re_search("^" + self.VERSION_LINE_PATTERN + "$", versionLine)
97
+ if match is None:
98
+ raise CLIToolException(f"Unknown first GHDL version string '{versionLine}'.")
99
+
100
+ self._major = int(match["Major"])
101
+ self._minor = int(match["Minor"])
102
+ self._micro = int(match["Micro"])
103
+ if (suffix := match["Suffix"]) is not None:
104
+ self._dev = suffix == "dev"
105
+ else:
106
+ self._dev = False
107
+ if (cslt := match["cslt"]) is not None:
108
+ self._commitsSinceLastTag = int(cslt)
109
+ else:
110
+ self._commitsSinceLastTag = 0
111
+ self._gitHash = match["Hash"]
112
+ self._dirty = "Dirty" in match.groups()
113
+ self._edition = match["Edition"]
114
+
115
+ match = re_search("^" + self.GNAT_LINE_PATTERN + "$", gnatLine)
116
+ if match is None:
117
+ raise CLIToolException(f"Unknown second GHDL version string '{gnatLine}'.")
118
+
119
+ if match["Year"] is None:
120
+ self._gnatCompiler = (int(match["Major"]), int(match["Minor"]), int(match["Micro"]))
121
+ else:
122
+ self._gnatCompiler = (int(match["Year"]), 0, 0)
123
+
124
+ match = re_search("^" + self.BACKEND_LINE_PATTERN + "$", backendLine)
125
+ if match is None:
126
+ raise CLIToolException(f"Unknown third GHDL version string '{backendLine}'.")
127
+
128
+ self._backend = match["Backend"]
129
+
130
+ @property
131
+ def Major(self) -> int:
132
+ return self._major
133
+
134
+ @property
135
+ def Minor(self) -> int:
136
+ return self._minor
137
+
138
+ @property
139
+ def Micro(self) -> int:
140
+ return self._micro
141
+
142
+ @property
143
+ def Dev(self) -> bool:
144
+ return self._dev
145
+
146
+ @property
147
+ def CommitsSinceLastTag(self) -> int:
148
+ return self._commitsSinceLastTag
149
+
150
+ @property
151
+ def GitHash(self) -> str:
152
+ return self._gitHash
153
+
154
+ @property
155
+ def Dirty(self) -> bool:
156
+ return self._dirty
157
+
158
+ @property
159
+ def Edition(self) -> str:
160
+ return self._edition
161
+
162
+ def __str__(self) -> str:
163
+ dev = f"-dev" if self._dev else ""
164
+ return f"{self._major}.{self._minor}.{self._micro}{dev}"
165
+
166
+ def __repr__(self) -> str:
167
+ return f"{self.__str__()} (Backend: {self._backend}; Git: {self._gitHash})"
168
+
46
169
 
47
170
  @export
48
171
  class GHDL(Executable):
49
172
  _executableNames = {
50
173
  "Darwin": "ghdl",
174
+ "FreeBSD": "ghdl",
51
175
  "Linux": "ghdl",
52
176
  "Windows": "ghdl.exe"
53
177
  }
@@ -219,16 +343,16 @@ class GHDL(Executable):
219
343
  """Warns if an all/others specification does not apply."""
220
344
 
221
345
  @CLIArgument()
222
- class FlagSyntesisBindingRule(ShortFlag, name="unused", pattern="-W{0}"):
346
+ class FlagUnused(ShortFlag, name="unused", pattern="-W{0}"):
223
347
  """Warns for unused subprograms."""
224
348
 
225
349
  @CLIArgument()
226
- class FlagSyntesisBindingRule(ShortFlag, name="error", pattern="-W{0}"):
350
+ class FlagError(ShortFlag, name="error", pattern="-W{0}"):
227
351
  """Turns warnings into errors."""
228
352
 
229
353
  @CLIArgument()
230
- class OptionPath(PathListArgument):
231
- """Add VHDL file to analyze."""
354
+ class OptionPaths(PathListArgument):
355
+ """Add list of VHDL files to analyze."""
232
356
 
233
357
  @CLIArgument()
234
358
  class OptionTopLevel(StringArgument):
@@ -302,14 +426,14 @@ class GHDL(Executable):
302
426
  else:
303
427
  tool.__cliParameters__[key] = key()
304
428
 
305
- def _SetParameters(self, tool: "GHDL", std: VHDLVersion = None, ieee: str = None):
429
+ def _SetParameters(self, tool: "GHDL", std: Nullable[VHDLVersion] = None, ieee: Nullable[str] = None):
306
430
  if std is not None:
307
431
  tool[self.FlagVHDLStandard] = str(std)
308
432
 
309
433
  if ieee is not None:
310
434
  tool[self.FlagVHDLStandard] = ieee
311
435
 
312
- def GetGHDLAsAnalyzer(self, std: VHDLVersion = None, ieee: str = None):
436
+ def GetGHDLAsAnalyzer(self, std: Nullable[VHDLVersion] = None, ieee: Nullable[str] = None) -> "GHDL":
313
437
  tool = GHDL(executablePath=self._executablePath)
314
438
 
315
439
  tool[tool.CommandAnalyze] = True
@@ -318,7 +442,7 @@ class GHDL(Executable):
318
442
 
319
443
  return tool
320
444
 
321
- def GetGHDLAsElaborator(self, std: VHDLVersion = None, ieee: str = None):
445
+ def GetGHDLAsElaborator(self, std: Nullable[VHDLVersion] = None, ieee: Nullable[str] = None) -> "GHDL":
322
446
  tool = GHDL(executablePath=self._executablePath)
323
447
 
324
448
  tool[tool.CommandElaborate] = True
@@ -327,7 +451,7 @@ class GHDL(Executable):
327
451
 
328
452
  return tool
329
453
 
330
- def GetGHDLAsSimulator(self, std: VHDLVersion = None, ieee: str = None):
454
+ def GetGHDLAsSimulator(self, std: Nullable[VHDLVersion] = None, ieee: Nullable[str] = None) -> "GHDL":
331
455
  tool = GHDL(executablePath=self._executablePath)
332
456
 
333
457
  tool[tool.CommandRun] = True
@@ -335,3 +459,24 @@ class GHDL(Executable):
335
459
  self._SetParameters(tool, std, ieee)
336
460
 
337
461
  return tool
462
+
463
+ def Help(self) -> str:
464
+ tool = GHDL(executablePath=self._executablePath)
465
+
466
+ tool[tool.CommandHelp] = True
467
+
468
+ tool.StartProcess()
469
+ return "\n".join(tool.GetLineReader())
470
+
471
+ def Version(self) -> GHDLVersion:
472
+ tool = GHDL(executablePath=self._executablePath)
473
+
474
+ tool[tool.CommandVersion] = True
475
+
476
+ tool.StartProcess()
477
+ iterator = iter(tool.GetLineReader())
478
+ firstLine = next(iterator)
479
+ secondLine = next(iterator)
480
+ thirdLine = next(iterator)
481
+
482
+ return GHDLVersion(firstLine, secondLine, thirdLine)
@@ -11,7 +11,7 @@
11
11
  # #
12
12
  # License: #
13
13
  # ==================================================================================================================== #
14
- # Copyright 2017-2022 Patrick Lehmann - Boetzingen, Germany #
14
+ # Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany #
15
15
  # Copyright 2014-2016 Technische Universität Dresden - Germany, Chair of VLSI-Design, Diagnostics and Architecture #
16
16
  # #
17
17
  # Licensed under the Apache License, Version 2.0 (the "License"); #
@@ -40,6 +40,7 @@ from pyTooling.CLIAbstraction.ValuedFlag import LongValuedFlag
40
40
  class GTKWave(Executable):
41
41
  _executableNames = {
42
42
  "Darwin": "gtkwave",
43
+ "FreeBSD": "gtkwave",
43
44
  "Linux": "gtkwave",
44
45
  "Windows": "gtkwave.exe"
45
46
  }
@@ -11,7 +11,7 @@
11
11
  # #
12
12
  # License: #
13
13
  # ==================================================================================================================== #
14
- # Copyright 2017-2022 Patrick Lehmann - Boetzingen, Germany #
14
+ # Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany #
15
15
  # Copyright 2014-2016 Technische Universität Dresden - Germany, Chair of VLSI-Design, Diagnostics and Architecture #
16
16
  # #
17
17
  # Licensed under the Apache License, Version 2.0 (the "License"); #
@@ -11,7 +11,7 @@
11
11
  # #
12
12
  # License: #
13
13
  # ==================================================================================================================== #
14
- # Copyright 2017-2022 Patrick Lehmann - Boetzingen, Germany #
14
+ # Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany #
15
15
  # Copyright 2014-2016 Technische Universität Dresden - Germany, Chair of VLSI-Design, Diagnostics and Architecture #
16
16
  # #
17
17
  # Licensed under the Apache License, Version 2.0 (the "License"); #
@@ -11,7 +11,7 @@
11
11
  # #
12
12
  # License: #
13
13
  # ==================================================================================================================== #
14
- # Copyright 2017-2022 Patrick Lehmann - Boetzingen, Germany #
14
+ # Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany #
15
15
  # Copyright 2014-2016 Technische Universität Dresden - Germany, Chair of VLSI-Design, Diagnostics and Architecture #
16
16
  # #
17
17
  # Licensed under the Apache License, Version 2.0 (the "License"); #
@@ -11,7 +11,7 @@
11
11
  # #
12
12
  # License: #
13
13
  # ==================================================================================================================== #
14
- # Copyright 2017-2022 Patrick Lehmann - Boetzingen, Germany #
14
+ # Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany #
15
15
  # Copyright 2014-2016 Technische Universität Dresden - Germany, Chair of VLSI-Design, Diagnostics and Architecture #
16
16
  # #
17
17
  # Licensed under the Apache License, Version 2.0 (the "License"); #
@@ -11,7 +11,7 @@
11
11
  # #
12
12
  # License: #
13
13
  # ==================================================================================================================== #
14
- # Copyright 2017-2022 Patrick Lehmann - Boetzingen, Germany #
14
+ # Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany #
15
15
  # Copyright 2014-2016 Technische Universität Dresden - Germany, Chair of VLSI-Design, Diagnostics and Architecture #
16
16
  # #
17
17
  # Licensed under the Apache License, Version 2.0 (the "License"); #
@@ -75,7 +75,7 @@ class VHDLCompilerCoverageOptions(Flags):
75
75
  StateMachine = "f"
76
76
  Toggle = "t"
77
77
 
78
- def __str__(self):
78
+ def __str__(self) -> str:
79
79
  return "".join([i.value for i in self])
80
80
 
81
81
 
@@ -86,7 +86,7 @@ class VHDLCompilerFSMVerbosityLevel(Enum):
86
86
  TransitionTable = "t"
87
87
  AnyWarning = "w"
88
88
 
89
- def __str__(self):
89
+ def __str__(self) -> str:
90
90
  return self.value
91
91
 
92
92
 
@@ -11,7 +11,7 @@
11
11
  # #
12
12
  # License: #
13
13
  # ==================================================================================================================== #
14
- # Copyright 2017-2022 Patrick Lehmann - Boetzingen, Germany #
14
+ # Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany #
15
15
  # Copyright 2014-2016 Technische Universität Dresden - Germany, Chair of VLSI-Design, Diagnostics and Architecture #
16
16
  # #
17
17
  # Licensed under the Apache License, Version 2.0 (the "License"); #
@@ -11,7 +11,7 @@
11
11
  # #
12
12
  # License: #
13
13
  # ==================================================================================================================== #
14
- # Copyright 2017-2022 Patrick Lehmann - Boetzingen, Germany #
14
+ # Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany #
15
15
  # Copyright 2014-2016 Technische Universität Dresden - Germany, Chair of VLSI-Design, Diagnostics and Architecture #
16
16
  # #
17
17
  # Licensed under the Apache License, Version 2.0 (the "License"); #
@@ -11,7 +11,7 @@
11
11
  # #
12
12
  # License: #
13
13
  # ==================================================================================================================== #
14
- # Copyright 2017-2022 Patrick Lehmann - Boetzingen, Germany #
14
+ # Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany #
15
15
  # Copyright 2014-2016 Technische Universität Dresden - Germany, Chair of VLSI-Design, Diagnostics and Architecture #
16
16
  # #
17
17
  # Licensed under the Apache License, Version 2.0 (the "License"); #
@@ -34,8 +34,9 @@ from pyTooling.Decorators import export
34
34
  from pyTooling.CLIAbstraction import CLIArgument, Executable
35
35
  from pyTooling.CLIAbstraction.Argument import StringArgument, StringListArgument
36
36
  from pyTooling.CLIAbstraction.Flag import ShortFlag
37
- from pyTooling.CLIAbstraction.ValuedFlag import ShortValuedFlag
37
+ from pyTooling.CLIAbstraction.ValuedFlag import ShortValuedFlag
38
38
  from pyTooling.CLIAbstraction.ValuedTupleFlag import ShortTupleFlag
39
+
39
40
  from pyEDAA.CLITool import ToolMixIn
40
41
 
41
42
 
@@ -11,7 +11,7 @@
11
11
  # #
12
12
  # License: #
13
13
  # ==================================================================================================================== #
14
- # Copyright 2017-2022 Patrick Lehmann - Boetzingen, Germany #
14
+ # Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany #
15
15
  # Copyright 2014-2016 Technische Universität Dresden - Germany, Chair of VLSI-Design, Diagnostics and Architecture #
16
16
  # #
17
17
  # Licensed under the Apache License, Version 2.0 (the "License"); #
@@ -11,7 +11,7 @@
11
11
  # #
12
12
  # License: #
13
13
  # ==================================================================================================================== #
14
- # Copyright 2017-2022 Patrick Lehmann - Boetzingen, Germany #
14
+ # Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany #
15
15
  # Copyright 2014-2016 Technische Universitaet Dresden - Germany, Chair of VLSI-Design, Diagnostics and Architecture #
16
16
  # #
17
17
  # Licensed under the Apache License, Version 2.0 (the "License"); #
@@ -32,7 +32,35 @@
32
32
  """An abstraction layer of EDA CLI tools."""
33
33
  __author__ = "Patrick Lehmann"
34
34
  __email__ = "Paebbels@gmail.com"
35
- __copyright__ = "2014-2022, Patrick Lehmann, Unai Martinez-Corral"
35
+ __copyright__ = "2014-2024, Patrick Lehmann, Unai Martinez-Corral"
36
36
  __license__ = "Apache License, Version 2.0"
37
- __version__ = "0.2.0"
37
+ __version__ = "0.3.0"
38
38
  __keywords__ = ["cli", "abstraction layer", "eda"]
39
+
40
+ from pathlib import Path
41
+ from typing import Any, Optional as Nullable
42
+
43
+ from pyTooling.Decorators import export
44
+ from pyTooling.Exceptions import ExceptionBase
45
+ from pyTooling.MetaClasses import ExtendedType
46
+
47
+
48
+ @export
49
+ class CLIToolException(ExceptionBase):
50
+ pass
51
+
52
+
53
+ class ToolMixIn(metaclass=ExtendedType, mixin=True):
54
+ _platform: str
55
+ _dryrun: bool
56
+ _binaryDirectoryPath: Path
57
+ _version: str
58
+ _logger: Any
59
+
60
+ def __init__(self, platform: str, dryrun: bool, binaryDirectoryPath: Path, version: str, logger: Nullable[Any] =None):
61
+ self._platform = platform
62
+ self._dryrun = dryrun
63
+ self._binaryDirectoryPath = binaryDirectoryPath
64
+ self._version = version
65
+ self._logger = logger
66
+ # self._environment = Environment()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyEDAA.CLITool
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: An abstraction layer of EDA CLI tools.
5
5
  Home-page: https://GitHub.com/edaa-org/pyEDAA.CLITool
6
6
  Author: Patrick Lehmann
@@ -10,23 +10,68 @@ Project-URL: Documentation, https://edaa-org.GitHub.io/pyEDAA.CLITool
10
10
  Project-URL: Source Code, https://GitHub.com/edaa-org/pyEDAA.CLITool
11
11
  Project-URL: Issue Tracker, https://GitHub.com/edaa-org/pyEDAA.CLITool/issues
12
12
  Keywords: cli,abstraction layer,eda
13
- Platform: UNKNOWN
14
13
  Classifier: Operating System :: OS Independent
15
14
  Classifier: Intended Audience :: Developers
16
15
  Classifier: Topic :: Utilities
17
16
  Classifier: Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)
18
17
  Classifier: License :: OSI Approved :: Apache Software License
19
18
  Classifier: Programming Language :: Python :: 3 :: Only
20
- Classifier: Programming Language :: Python :: 3.7
21
- Classifier: Programming Language :: Python :: 3.8
22
19
  Classifier: Programming Language :: Python :: 3.9
23
20
  Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Programming Language :: Python :: 3.13
24
24
  Classifier: Development Status :: 4 - Beta
25
- Requires-Python: >=3.7
25
+ Requires-Python: >=3.9
26
26
  Description-Content-Type: text/markdown
27
+ License-File: LICENSE.md
28
+ Requires-Dist: pyTooling~=8.0
29
+ Requires-Dist: pyVHDLModel~=0.29.2
30
+ Requires-Dist: py-flags~=1.1
27
31
  Provides-Extra: doc
32
+ Requires-Dist: sphinx_autodoc_typehints~=2.5; extra == "doc"
33
+ Requires-Dist: sphinx_reports~=0.7; extra == "doc"
34
+ Requires-Dist: py-flags~=1.1; extra == "doc"
35
+ Requires-Dist: docutils~=0.21; extra == "doc"
36
+ Requires-Dist: sphinx~=8.1; extra == "doc"
37
+ Requires-Dist: sphinxcontrib-mermaid~=1.0; extra == "doc"
38
+ Requires-Dist: sphinx_rtd_theme~=3.0; extra == "doc"
39
+ Requires-Dist: pyTooling~=8.0; extra == "doc"
40
+ Requires-Dist: docutils_stubs~=0.0.22; extra == "doc"
41
+ Requires-Dist: pyVHDLModel~=0.29.2; extra == "doc"
42
+ Requires-Dist: autoapi>=2.0.1; extra == "doc"
43
+ Requires-Dist: sphinx_design~=0.6.1; extra == "doc"
44
+ Requires-Dist: sphinx-copybutton>=0.5.2; extra == "doc"
45
+ Provides-Extra: test
46
+ Requires-Dist: mypy~=1.13; extra == "test"
47
+ Requires-Dist: Coverage~=7.6; extra == "test"
48
+ Requires-Dist: pytest~=8.3; extra == "test"
49
+ Requires-Dist: py-flags~=1.1; extra == "test"
50
+ Requires-Dist: lxml~=5.3; extra == "test"
51
+ Requires-Dist: pyTooling~=8.0; extra == "test"
52
+ Requires-Dist: pyVHDLModel~=0.29.2; extra == "test"
53
+ Requires-Dist: typing_extensions~=4.12; extra == "test"
54
+ Requires-Dist: pytest-cov~=6.0; extra == "test"
28
55
  Provides-Extra: all
29
- License-File: LICENSE.md
56
+ Requires-Dist: Coverage~=7.6; extra == "all"
57
+ Requires-Dist: sphinx_design~=0.6.1; extra == "all"
58
+ Requires-Dist: pyVHDLModel~=0.29.2; extra == "all"
59
+ Requires-Dist: sphinx_autodoc_typehints~=2.5; extra == "all"
60
+ Requires-Dist: docutils~=0.21; extra == "all"
61
+ Requires-Dist: sphinx~=8.1; extra == "all"
62
+ Requires-Dist: pyTooling~=8.0; extra == "all"
63
+ Requires-Dist: docutils_stubs~=0.0.22; extra == "all"
64
+ Requires-Dist: sphinx-copybutton>=0.5.2; extra == "all"
65
+ Requires-Dist: pytest~=8.3; extra == "all"
66
+ Requires-Dist: sphinxcontrib-mermaid~=1.0; extra == "all"
67
+ Requires-Dist: typing_extensions~=4.12; extra == "all"
68
+ Requires-Dist: mypy~=1.13; extra == "all"
69
+ Requires-Dist: sphinx_reports~=0.7; extra == "all"
70
+ Requires-Dist: py-flags~=1.1; extra == "all"
71
+ Requires-Dist: lxml~=5.3; extra == "all"
72
+ Requires-Dist: sphinx_rtd_theme~=3.0; extra == "all"
73
+ Requires-Dist: autoapi>=2.0.1; extra == "all"
74
+ Requires-Dist: pytest-cov~=6.0; extra == "all"
30
75
 
31
76
  <p align="center">
32
77
  <a title="edaa-org.github.io/pyEDAA.CLITool" href="https://edaa-org.github.io/pyEDAA.CLITool"><img height="80px" src="doc/_static/logo.svg"/></a>
@@ -172,5 +217,3 @@ The accompanying documentation is licensed under [Creative Commons - Attribution
172
217
 
173
218
  ---
174
219
  SPDX-License-Identifier: Apache-2.0
175
-
176
-
@@ -0,0 +1,50 @@
1
+ pyTooling~=8.0
2
+ pyVHDLModel~=0.29.2
3
+ py-flags~=1.1
4
+
5
+ [all]
6
+ Coverage~=7.6
7
+ sphinx_design~=0.6.1
8
+ pyVHDLModel~=0.29.2
9
+ sphinx_autodoc_typehints~=2.5
10
+ docutils~=0.21
11
+ sphinx~=8.1
12
+ pyTooling~=8.0
13
+ docutils_stubs~=0.0.22
14
+ sphinx-copybutton>=0.5.2
15
+ pytest~=8.3
16
+ sphinxcontrib-mermaid~=1.0
17
+ typing_extensions~=4.12
18
+ mypy~=1.13
19
+ sphinx_reports~=0.7
20
+ py-flags~=1.1
21
+ lxml~=5.3
22
+ sphinx_rtd_theme~=3.0
23
+ autoapi>=2.0.1
24
+ pytest-cov~=6.0
25
+
26
+ [doc]
27
+ sphinx_autodoc_typehints~=2.5
28
+ sphinx_reports~=0.7
29
+ py-flags~=1.1
30
+ docutils~=0.21
31
+ sphinx~=8.1
32
+ sphinxcontrib-mermaid~=1.0
33
+ sphinx_rtd_theme~=3.0
34
+ pyTooling~=8.0
35
+ docutils_stubs~=0.0.22
36
+ pyVHDLModel~=0.29.2
37
+ autoapi>=2.0.1
38
+ sphinx_design~=0.6.1
39
+ sphinx-copybutton>=0.5.2
40
+
41
+ [test]
42
+ mypy~=1.13
43
+ Coverage~=7.6
44
+ pytest~=8.3
45
+ py-flags~=1.1
46
+ lxml~=5.3
47
+ pyTooling~=8.0
48
+ pyVHDLModel~=0.29.2
49
+ typing_extensions~=4.12
50
+ pytest-cov~=6.0
@@ -0,0 +1,76 @@
1
+ [build-system]
2
+ requires = [
3
+ "setuptools ~= 75.5",
4
+ "wheel ~= 0.45",
5
+ "pyTooling ~= 8.0"
6
+ ]
7
+ build-backend = "setuptools.build_meta"
8
+
9
+ [tool.black]
10
+ line-length = 120
11
+
12
+ [tool.mypy]
13
+ files = ["pyEDAA.CLITool"]
14
+ python_version = "3.13"
15
+ #ignore_missing_imports = true
16
+ strict = true
17
+ pretty = true
18
+ show_error_context = true
19
+ show_error_codes = true
20
+ namespace_packages = true
21
+ html_report = "report/typing"
22
+
23
+ [tool.pytest.ini_options]
24
+ addopts = "--tb=native"
25
+ # Don't set 'python_classes = *' otherwise, pytest doesn't search for classes
26
+ # derived from unittest.Testcase
27
+ python_files = "*"
28
+ python_functions = "test_*"
29
+ filterwarnings = [
30
+ "error::DeprecationWarning",
31
+ "error::PendingDeprecationWarning"
32
+ ]
33
+ junit_logging = "all"
34
+
35
+ [tool.interrogate]
36
+ color = true
37
+ verbose = 1 # possible values: 0 (minimal output), 1 (-v), 2 (-vv)
38
+ fail-under = 59
39
+ exclude = [
40
+ "build",
41
+ "dist",
42
+ "doc",
43
+ "tests",
44
+ "setup.py"
45
+ ]
46
+ ignore-setters = true
47
+
48
+ [tool.coverage.run]
49
+ branch = true
50
+ relative_files = true
51
+ omit = [
52
+ "*site-packages*",
53
+ "setup.py",
54
+ "tests/unit/*"
55
+ ]
56
+
57
+ [tool.coverage.report]
58
+ skip_covered = false
59
+ skip_empty = true
60
+ exclude_lines = [
61
+ "pragma: no cover",
62
+ "raise NotImplementedError"
63
+ ]
64
+ omit = [
65
+ "tests/*"
66
+ ]
67
+
68
+ [tool.coverage.xml]
69
+ output = "report/coverage/coverage.xml"
70
+
71
+ [tool.coverage.json]
72
+ output = "report/coverage/coverage.json"
73
+
74
+ [tool.coverage.html]
75
+ directory = "report/coverage/html"
76
+ title="Code Coverage of pyEDAA.CLITool"
@@ -11,7 +11,7 @@
11
11
  # #
12
12
  # License: #
13
13
  # ==================================================================================================================== #
14
- # Copyright 2017-2022 Patrick Lehmann - Boetzingen, Germany #
14
+ # Copyright 2017-2024 Patrick Lehmann - Boetzingen, Germany #
15
15
  # Copyright 2014-2016 Technische Universität Dresden - Germany, Chair of VLSI-Design, Diagnostics and Architecture #
16
16
  # #
17
17
  # Licensed under the Apache License, Version 2.0 (the "License"); #
@@ -31,6 +31,7 @@
31
31
  #
32
32
  """Package installer for 'An abstraction layer of EDA CLI tools'."""
33
33
  from pathlib import Path
34
+ from setuptools import setup
34
35
  from pyTooling.Packaging import DescribePythonPackageHostedOnGitHub, DEFAULT_CLASSIFIERS
35
36
 
36
37
  gitHubNamespace = "edaa-org"
@@ -38,13 +39,16 @@ packageName = "pyEDAA.CLITool"
38
39
  packageDirectory = packageName.replace(".", "/")
39
40
  packageInformationFile = Path(f"{packageDirectory}/__init__.py")
40
41
 
41
- DescribePythonPackageHostedOnGitHub(
42
- packageName=packageName,
43
- description="An abstraction layer of EDA CLI tools.",
44
- gitHubNamespace=gitHubNamespace,
45
- sourceFileWithVersion=packageInformationFile,
46
- developmentStatus="beta",
47
- classifiers=list(DEFAULT_CLASSIFIERS) + [
48
- "Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)"
49
- ]
50
- )
42
+ setup(**DescribePythonPackageHostedOnGitHub(
43
+ packageName=packageName,
44
+ description="An abstraction layer of EDA CLI tools.",
45
+ gitHubNamespace=gitHubNamespace,
46
+ sourceFileWithVersion=packageInformationFile,
47
+ developmentStatus="beta",
48
+ classifiers=list(DEFAULT_CLASSIFIERS) + [
49
+ "Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)"
50
+ ],
51
+ dataFiles={
52
+ packageName: ["py.typed"]
53
+ }
54
+ ))
@@ -1,22 +0,0 @@
1
- pyTooling.CLIAbstraction>=0.4.0
2
- pyVHDLModel>=0.14.3
3
-
4
- [all]
5
- sphinx_autodoc_typehints>=1.17.0
6
- sphinxcontrib-mermaid>=0.7.1
7
- sphinx_fontawesome>=0.0.6
8
- pyVHDLModel>=0.14.3
9
- pyTooling>=1.9.5
10
- pyTooling.CLIAbstraction>=0.4.0
11
- sphinx>=4.4.0
12
- autoapi>=2.0.1
13
-
14
- [doc]
15
- sphinxcontrib-mermaid>=0.7.1
16
- sphinx_autodoc_typehints>=1.17.0
17
- sphinx_fontawesome>=0.0.6
18
- pyVHDLModel>=0.14.3
19
- pyTooling>=1.9.5
20
- pyTooling.CLIAbstraction>=0.4.0
21
- sphinx>=4.4.0
22
- autoapi>=2.0.1
@@ -1,36 +0,0 @@
1
- [build-system]
2
- requires = [
3
- "pyTooling >= 1.9.5",
4
- "setuptools >= 59.6.0",
5
- "wheel >= 0.37.0"
6
- ]
7
- build-backend = "setuptools.build_meta"
8
-
9
- [tool.black]
10
- line-length = 120
11
-
12
- [tool.pytest.ini_options]
13
- # Don't set 'python_classes = *' otherwise, pytest doesn't search for classes
14
- # derived from unittest.Testcase
15
- python_files = "*"
16
- python_functions = "test_*"
17
-
18
- [tool.coverage.run]
19
- branch = true
20
- omit = [
21
- "*site-packages*",
22
- "setup.py"
23
- ]
24
-
25
- [tool.coverage.report]
26
- skip_covered = true
27
- skip_empty = true
28
- exclude_lines = [
29
- "raise NotImplementedError"
30
- ]
31
-
32
- [tool.coverage.html]
33
- directory = "report/coverage/html"
34
-
35
- [tool.coverage.xml]
36
- output = "report/coverage/coverage.xml"
File without changes
File without changes