Skip to content

Commit df37970

Browse files
authored
v0.27.0
2 parents bf61f56 + e4666d9 commit df37970

27 files changed

+1732
-540
lines changed

doc/Dependency.rst

+4-4
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ pyVHDLModel Package
2323
+--------------------------------------------------------+-------------+------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------+
2424
| **Package** | **Version** | **License** | **Dependencies** |
2525
+========================================================+=============+==========================================================================================+=================================================================================================================================+
26-
| `pyTooling <https://GitHub.com/pyTooling/pyTooling>`__ |4.0.1 | `Apache License, 2.0 <https://GitHub.com/pyTooling/pyTooling/blob/master/LICENSE.txt>`__ | *None* |
26+
| `pyTooling <https://GitHub.com/pyTooling/pyTooling>`__ |5.0.0 | `Apache License, 2.0 <https://GitHub.com/pyTooling/pyTooling/blob/master/LICENSE.txt>`__ | *None* |
2727
+--------------------------------------------------------+-------------+------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------+
2828

2929

@@ -53,7 +53,7 @@ the mandatory dependencies too.
5353
+===========================================================+=============+========================================================================================+======================+
5454
| `pytest <https://GitHub.com/pytest-dev/pytest>`__ | ≥7.3.0 | `MIT <https://GitHub.com/pytest-dev/pytest/blob/master/LICENSE>`__ | *Not yet evaluated.* |
5555
+-----------------------------------------------------------+-------------+----------------------------------------------------------------------------------------+----------------------+
56-
| `pytest-cov <https://GitHub.com/pytest-dev/pytest-cov>`__ | ≥4.0.0 | `MIT <https://GitHub.com/pytest-dev/pytest-cov/blob/master/LICENSE>`__ | *Not yet evaluated.* |
56+
| `pytest-cov <https://GitHub.com/pytest-dev/pytest-cov>`__ | ≥4.1.0 | `MIT <https://GitHub.com/pytest-dev/pytest-cov/blob/master/LICENSE>`__ | *Not yet evaluated.* |
5757
+-----------------------------------------------------------+-------------+----------------------------------------------------------------------------------------+----------------------+
5858
| `Coverage <https://GitHub.com/nedbat/coveragepy>`__ | ≥7.2 | `Apache License, 2.0 <https://GitHub.com/nedbat/coveragepy/blob/master/LICENSE.txt>`__ | *Not yet evaluated.* |
5959
+-----------------------------------------------------------+-------------+----------------------------------------------------------------------------------------+----------------------+
@@ -89,7 +89,7 @@ the mandatory dependencies too.
8989
+=================================================================================================+==============+==========================================================================================================+======================+
9090
| `Sphinx <https://GitHub.com/sphinx-doc/sphinx>`__ | ≥5.3.0 | `BSD 3-Clause <https://GitHub.com/sphinx-doc/sphinx/blob/master/LICENSE>`__ | *Not yet evaluated.* |
9191
+-------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+----------------------+
92-
| `sphinxcontrib-mermaid <https://GitHub.com/mgaitan/sphinxcontrib-mermaid>`__ | ≥0.8.1 | `BSD <https://GitHub.com/mgaitan/sphinxcontrib-mermaid/blob/master/LICENSE.rst>`__ | *Not yet evaluated.* |
92+
| `sphinxcontrib-mermaid <https://GitHub.com/mgaitan/sphinxcontrib-mermaid>`__ | ≥0.9.2 | `BSD <https://GitHub.com/mgaitan/sphinxcontrib-mermaid/blob/master/LICENSE.rst>`__ | *Not yet evaluated.* |
9393
+-------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+----------------------+
9494
| `autoapi <https://GitHub.com/carlos-jenkins/autoapi>`__ | ≥2.0.1 | `Apache License, 2.0 <https://GitHub.com/carlos-jenkins/autoapi/blob/master/LICENSE>`__ | *Not yet evaluated.* |
9595
+-------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+----------------------+
@@ -125,7 +125,7 @@ install the mandatory dependencies too.
125125
+----------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
126126
| **Package** | **Version** | **License** | **Dependencies** |
127127
+============================================================================+==============+==========================================================================================================+======================================================================================================================================================+
128-
| `pyTooling <https://GitHub.com/pyTooling/pyTooling>`__ |4.0.1 | `Apache License, 2.0 <https://GitHub.com/pyTooling/pyTooling/blob/main/LICENSE.md>`__ | *None* |
128+
| `pyTooling <https://GitHub.com/pyTooling/pyTooling>`__ |5.0.0 | `Apache License, 2.0 <https://GitHub.com/pyTooling/pyTooling/blob/main/LICENSE.md>`__ | *None* |
129129
+----------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
130130
| `wheel <https://GitHub.com/pypa/wheel>`__ | ≥0.38.1 | `MIT <https://github.com/pypa/wheel/blob/main/LICENSE.txt>`__ | *Not yet evaluated.* |
131131
+----------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+

doc/requirements.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
-r ../requirements.txt
22

3-
pyTooling>=4.0.1, <5.0
3+
pyTooling >= 5.0.0, <6.0
44

55
# Enforce latest version on ReadTheDocs
66
sphinx>=5.3.0, <6.0
77

88
# Sphinx Extenstions
99
#sphinx.ext.coverage
1010
#sphinxcontrib-actdiag>=0.8.5
11-
sphinxcontrib-mermaid>=0.8.1
11+
sphinxcontrib-mermaid>=0.9.2
1212
#sphinxcontrib-seqdiag>=0.8.5
1313
#sphinxcontrib-textstyle>=0.2.1
1414
#sphinxcontrib-spelling>=2.2.0

pyVHDLModel/Association.py

+27-6
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,31 @@
3434
3535
Associations are used in generic maps, port maps and parameter maps.
3636
"""
37-
from typing import Optional as Nullable
37+
from typing import Optional as Nullable, Union
3838

3939
from pyTooling.Decorators import export
4040

41-
from pyVHDLModel.Base import ModelEntity, ExpressionUnion
42-
from pyVHDLModel.Symbol import Symbol
41+
from pyVHDLModel.Base import ModelEntity
42+
from pyVHDLModel.Symbol import Symbol
43+
from pyVHDLModel.Expression import BaseExpression, QualifiedExpression, FunctionCall, TypeConversion, Literal
44+
45+
46+
ExpressionUnion = Union[
47+
BaseExpression,
48+
QualifiedExpression,
49+
FunctionCall,
50+
TypeConversion,
51+
# ConstantOrSymbol, TODO: ObjectSymbol
52+
Literal,
53+
]
4354

4455

4556
@export
4657
class AssociationItem(ModelEntity):
58+
"""
59+
A base-class for all association items.
60+
"""
61+
4762
_formal: Nullable[Symbol]
4863
_actual: ExpressionUnion
4964

@@ -74,14 +89,20 @@ def __str__(self):
7489

7590
@export
7691
class GenericAssociationItem(AssociationItem):
77-
pass
92+
"""
93+
A base-class for all generic association items used in generic map aspects.
94+
"""
7895

7996

8097
@export
8198
class PortAssociationItem(AssociationItem):
82-
pass
99+
"""
100+
A base-class for all port association items used in port map aspects.
101+
"""
83102

84103

85104
@export
86105
class ParameterAssociationItem(AssociationItem):
87-
pass
106+
"""
107+
A base-class for all parameter association items used in parameter map aspects.
108+
"""

pyVHDLModel/Base.py

+17-18
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
@export
5858
@unique
5959
class Direction(Enum):
60-
"""A ``Direction`` is an enumeration and represents a direction in a range (``to`` or ``downto``)."""
60+
"""An enumeration representing a direction in a range (``to`` or ``downto``)."""
6161

6262
To = 0 #: Ascending direction
6363
DownTo = 1 #: Descending direction
@@ -66,7 +66,7 @@ def __str__(self):
6666
"""
6767
Formats the direction to ``to`` or ``downto``.
6868
69-
:return: Formatted direction.
69+
:returns: Formatted direction.
7070
"""
7171
return ("to", "downto")[cast(int, self.value)] # TODO: check performance
7272

@@ -92,13 +92,13 @@ def __str__(self):
9292
"""
9393
Formats the direction.
9494
95-
:return: Formatted direction.
95+
:returns: Formatted direction.
9696
"""
9797
return ("", "in", "out", "inout", "buffer", "linkage")[cast(int, self.value)] # TODO: check performance
9898

9999

100100
@export
101-
class ModelEntity(metaclass=ExtendedType, useSlots=True):
101+
class ModelEntity(metaclass=ExtendedType, slots=True):
102102
"""
103103
``ModelEntity`` is the base-class for all classes in the VHDL language model, except for mixin classes (see multiple
104104
inheritance) and enumerations.
@@ -111,7 +111,6 @@ class ModelEntity(metaclass=ExtendedType, useSlots=True):
111111

112112
def __init__(self):
113113
"""Initializes a VHDL model entity."""
114-
115114
self._parent = None
116115

117116
@property
@@ -132,7 +131,7 @@ def GetAncestor(self, type: Type) -> 'ModelEntity':
132131

133132

134133
@export
135-
class NamedEntityMixin:
134+
class NamedEntityMixin(metaclass=ExtendedType, mixin=True):
136135
"""
137136
A ``NamedEntityMixin`` is a mixin class for all VHDL entities that have identifiers.
138137
@@ -172,7 +171,7 @@ def NormalizedIdentifier(self) -> str:
172171

173172

174173
@export
175-
class MultipleNamedEntityMixin:
174+
class MultipleNamedEntityMixin(metaclass=ExtendedType, mixin=True):
176175
"""
177176
A ``MultipleNamedEntityMixin`` is a mixin class for all VHDL entities that declare multiple instances at once by
178177
defining multiple identifiers.
@@ -213,7 +212,7 @@ def NormalizedIdentifiers(self) -> Tuple[str]:
213212

214213

215214
@export
216-
class LabeledEntityMixin:
215+
class LabeledEntityMixin(metaclass=ExtendedType, mixin=True):
217216
"""
218217
A ``LabeledEntityMixin`` is a mixin class for all VHDL entities that can have labels.
219218
@@ -252,7 +251,7 @@ def NormalizedLabel(self) -> Nullable[str]:
252251

253252

254253
@export
255-
class DocumentedEntityMixin:
254+
class DocumentedEntityMixin(metaclass=ExtendedType, mixin=True):
256255
"""
257256
A ``DocumentedEntityMixin`` is a mixin class for all VHDL entities that can have an associated documentation.
258257
@@ -281,7 +280,7 @@ def Documentation(self) -> Nullable[str]:
281280

282281

283282
@export
284-
class ConditionalMixin:
283+
class ConditionalMixin(metaclass=ExtendedType, mixin=True):
285284
"""A ``BaseConditional`` is a mixin-class for all statements with a condition."""
286285

287286
_condition: ExpressionUnion
@@ -297,38 +296,38 @@ def Condition(self) -> ExpressionUnion:
297296

298297

299298
@export
300-
class BranchMixin:
299+
class BranchMixin(metaclass=ExtendedType, mixin=True):
301300
"""A ``BaseBranch`` is a mixin-class for all statements with branches."""
302301

303302
def __init__(self):
304303
pass
305304

306305

307306
@export
308-
class ConditionalBranchMixin(BranchMixin, ConditionalMixin):
307+
class ConditionalBranchMixin(BranchMixin, ConditionalMixin, mixin=True):
309308
"""A ``BaseBranch`` is a mixin-class for all branch statements with a condition."""
310309
def __init__(self, condition: ExpressionUnion):
311310
super().__init__()
312311
ConditionalMixin.__init__(self, condition)
313312

314313

315314
@export
316-
class IfBranchMixin(ConditionalBranchMixin):
315+
class IfBranchMixin(ConditionalBranchMixin, mixin=True):
317316
"""A ``BaseIfBranch`` is a mixin-class for all if-branches."""
318317

319318

320319
@export
321-
class ElsifBranchMixin(ConditionalBranchMixin):
320+
class ElsifBranchMixin(ConditionalBranchMixin, mixin=True):
322321
"""A ``BaseElsifBranch`` is a mixin-class for all elsif-branches."""
323322

324323

325324
@export
326-
class ElseBranchMixin(BranchMixin):
325+
class ElseBranchMixin(BranchMixin, mixin=True):
327326
"""A ``BaseElseBranch`` is a mixin-class for all else-branches."""
328327

329328

330329
@export
331-
class ReportStatementMixin:
330+
class ReportStatementMixin(metaclass=ExtendedType, mixin=True):
332331
"""A ``MixinReportStatement`` is a mixin-class for all report and assert statements."""
333332

334333
_message: Nullable[ExpressionUnion]
@@ -353,15 +352,15 @@ def Severity(self) -> Nullable[ExpressionUnion]:
353352

354353

355354
@export
356-
class AssertStatementMixin(ReportStatementMixin, ConditionalMixin):
355+
class AssertStatementMixin(ReportStatementMixin, ConditionalMixin, mixin=True):
357356
"""A ``MixinAssertStatement`` is a mixin-class for all assert statements."""
358357

359358
def __init__(self, condition: ExpressionUnion, message: ExpressionUnion = None, severity: ExpressionUnion = None):
360359
super().__init__(message, severity)
361360
ConditionalMixin.__init__(self, condition)
362361

363362

364-
class BlockStatementMixin:
363+
class BlockStatementMixin(metaclass=ExtendedType, mixin=True):
365364
"""A ``BlockStatement`` is a mixin-class for all block statements."""
366365

367366
def __init__(self):

pyVHDLModel/Common.py

+23-10
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,29 @@
3232
"""
3333
This module contains parts of an abstract document language model for VHDL.
3434
35-
Common definitions and MixIns are used by many classes in the model as base-classes.
35+
Common definitions and Mixins are used by many classes in the model as base-classes.
3636
"""
37-
from typing import List, Iterable
37+
from typing import List, Iterable, Union
3838

3939
from pyTooling.Decorators import export
40+
from pyTooling.MetaClasses import ExtendedType
4041

41-
from pyVHDLModel.Base import ModelEntity, LabeledEntityMixin, ExpressionUnion
42+
from pyVHDLModel.Base import ModelEntity, LabeledEntityMixin
43+
from pyVHDLModel.Expression import BaseExpression, QualifiedExpression, FunctionCall, TypeConversion, Literal
4244
from pyVHDLModel.Symbol import Symbol
4345
from pyVHDLModel.Association import ParameterAssociationItem
4446

4547

48+
ExpressionUnion = Union[
49+
BaseExpression,
50+
QualifiedExpression,
51+
FunctionCall,
52+
TypeConversion,
53+
# ConstantOrSymbol, TODO: ObjectSymbol
54+
Literal,
55+
]
56+
57+
4658
@export
4759
class Statement(ModelEntity, LabeledEntityMixin):
4860
"""
@@ -54,7 +66,7 @@ def __init__(self, label: str = None):
5466

5567

5668
@export
57-
class ProcedureCall:
69+
class ProcedureCallMixin(metaclass=ExtendedType, mixin=True):
5870
_procedure: Symbol # TODO: implement a ProcedureSymbol
5971
_parameterMappings: List[ParameterAssociationItem]
6072

@@ -79,8 +91,8 @@ def ParameterMappings(self) -> List[ParameterAssociationItem]:
7991

8092

8193
@export
82-
class Assignment:
83-
"""An ``Assignment`` is a base-class for all assignment statements."""
94+
class AssignmentMixin(metaclass=ExtendedType, mixin=True):
95+
"""A mixin-class for all assignment statements."""
8496

8597
_target: Symbol
8698

@@ -94,13 +106,14 @@ def Target(self) -> Symbol:
94106

95107

96108
@export
97-
class SignalAssignment(Assignment):
98-
"""An ``SignalAssignment`` is a base-class for all signal assignment statements."""
109+
class SignalAssignmentMixin(AssignmentMixin, mixin=True):
110+
"""A mixin-class for all signal assignment statements."""
99111

100112

101113
@export
102-
class VariableAssignment(Assignment):
103-
"""An ``VariableAssignment`` is a base-class for all variable assignment statements."""
114+
class VariableAssignmentMixin(AssignmentMixin, mixin=True):
115+
"""A mixin-class for all variable assignment statements."""
116+
104117
# FIXME: move to sequential?
105118
_expression: ExpressionUnion
106119

0 commit comments

Comments
 (0)