Skip to content

Commit

Permalink
v0.27.0
Browse files Browse the repository at this point in the history
  • Loading branch information
Paebbels authored Jul 5, 2023
2 parents bf61f56 + e4666d9 commit df37970
Show file tree
Hide file tree
Showing 27 changed files with 1,732 additions and 540 deletions.
8 changes: 4 additions & 4 deletions doc/Dependency.rst
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ pyVHDLModel Package
+--------------------------------------------------------+-------------+------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------+
| **Package** | **Version** | **License** | **Dependencies** |
+========================================================+=============+==========================================================================================+=================================================================================================================================+
| `pyTooling <https://GitHub.com/pyTooling/pyTooling>`__ |4.0.1 | `Apache License, 2.0 <https://GitHub.com/pyTooling/pyTooling/blob/master/LICENSE.txt>`__ | *None* |
| `pyTooling <https://GitHub.com/pyTooling/pyTooling>`__ |5.0.0 | `Apache License, 2.0 <https://GitHub.com/pyTooling/pyTooling/blob/master/LICENSE.txt>`__ | *None* |
+--------------------------------------------------------+-------------+------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------+


Expand Down Expand Up @@ -53,7 +53,7 @@ the mandatory dependencies too.
+===========================================================+=============+========================================================================================+======================+
| `pytest <https://GitHub.com/pytest-dev/pytest>`__ | ≥7.3.0 | `MIT <https://GitHub.com/pytest-dev/pytest/blob/master/LICENSE>`__ | *Not yet evaluated.* |
+-----------------------------------------------------------+-------------+----------------------------------------------------------------------------------------+----------------------+
| `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.* |
| `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.* |
+-----------------------------------------------------------+-------------+----------------------------------------------------------------------------------------+----------------------+
| `Coverage <https://GitHub.com/nedbat/coveragepy>`__ | ≥7.2 | `Apache License, 2.0 <https://GitHub.com/nedbat/coveragepy/blob/master/LICENSE.txt>`__ | *Not yet evaluated.* |
+-----------------------------------------------------------+-------------+----------------------------------------------------------------------------------------+----------------------+
Expand Down Expand Up @@ -89,7 +89,7 @@ the mandatory dependencies too.
+=================================================================================================+==============+==========================================================================================================+======================+
| `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.* |
+-------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+----------------------+
| `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.* |
| `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.* |
+-------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+----------------------+
| `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.* |
+-------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+----------------------+
Expand Down Expand Up @@ -125,7 +125,7 @@ install the mandatory dependencies too.
+----------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
| **Package** | **Version** | **License** | **Dependencies** |
+============================================================================+==============+==========================================================================================================+======================================================================================================================================================+
| `pyTooling <https://GitHub.com/pyTooling/pyTooling>`__ |4.0.1 | `Apache License, 2.0 <https://GitHub.com/pyTooling/pyTooling/blob/main/LICENSE.md>`__ | *None* |
| `pyTooling <https://GitHub.com/pyTooling/pyTooling>`__ |5.0.0 | `Apache License, 2.0 <https://GitHub.com/pyTooling/pyTooling/blob/main/LICENSE.md>`__ | *None* |
+----------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
| `wheel <https://GitHub.com/pypa/wheel>`__ | ≥0.38.1 | `MIT <https://github.com/pypa/wheel/blob/main/LICENSE.txt>`__ | *Not yet evaluated.* |
+----------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
Expand Down
4 changes: 2 additions & 2 deletions doc/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
-r ../requirements.txt

pyTooling>=4.0.1, <5.0
pyTooling >= 5.0.0, <6.0

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

# Sphinx Extenstions
#sphinx.ext.coverage
#sphinxcontrib-actdiag>=0.8.5
sphinxcontrib-mermaid>=0.8.1
sphinxcontrib-mermaid>=0.9.2
#sphinxcontrib-seqdiag>=0.8.5
#sphinxcontrib-textstyle>=0.2.1
#sphinxcontrib-spelling>=2.2.0
Expand Down
33 changes: 27 additions & 6 deletions pyVHDLModel/Association.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,31 @@
Associations are used in generic maps, port maps and parameter maps.
"""
from typing import Optional as Nullable
from typing import Optional as Nullable, Union

from pyTooling.Decorators import export

from pyVHDLModel.Base import ModelEntity, ExpressionUnion
from pyVHDLModel.Symbol import Symbol
from pyVHDLModel.Base import ModelEntity
from pyVHDLModel.Symbol import Symbol
from pyVHDLModel.Expression import BaseExpression, QualifiedExpression, FunctionCall, TypeConversion, Literal


ExpressionUnion = Union[
BaseExpression,
QualifiedExpression,
FunctionCall,
TypeConversion,
# ConstantOrSymbol, TODO: ObjectSymbol
Literal,
]


@export
class AssociationItem(ModelEntity):
"""
A base-class for all association items.
"""

_formal: Nullable[Symbol]
_actual: ExpressionUnion

Expand Down Expand Up @@ -74,14 +89,20 @@ def __str__(self):

@export
class GenericAssociationItem(AssociationItem):
pass
"""
A base-class for all generic association items used in generic map aspects.
"""


@export
class PortAssociationItem(AssociationItem):
pass
"""
A base-class for all port association items used in port map aspects.
"""


@export
class ParameterAssociationItem(AssociationItem):
pass
"""
A base-class for all parameter association items used in parameter map aspects.
"""
35 changes: 17 additions & 18 deletions pyVHDLModel/Base.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
@export
@unique
class Direction(Enum):
"""A ``Direction`` is an enumeration and represents a direction in a range (``to`` or ``downto``)."""
"""An enumeration representing a direction in a range (``to`` or ``downto``)."""

To = 0 #: Ascending direction
DownTo = 1 #: Descending direction
Expand All @@ -66,7 +66,7 @@ def __str__(self):
"""
Formats the direction to ``to`` or ``downto``.
:return: Formatted direction.
:returns: Formatted direction.
"""
return ("to", "downto")[cast(int, self.value)] # TODO: check performance

Expand All @@ -92,13 +92,13 @@ def __str__(self):
"""
Formats the direction.
:return: Formatted direction.
:returns: Formatted direction.
"""
return ("", "in", "out", "inout", "buffer", "linkage")[cast(int, self.value)] # TODO: check performance


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

def __init__(self):
"""Initializes a VHDL model entity."""

self._parent = None

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


@export
class NamedEntityMixin:
class NamedEntityMixin(metaclass=ExtendedType, mixin=True):
"""
A ``NamedEntityMixin`` is a mixin class for all VHDL entities that have identifiers.
Expand Down Expand Up @@ -172,7 +171,7 @@ def NormalizedIdentifier(self) -> str:


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


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


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


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

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


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

def __init__(self):
pass


@export
class ConditionalBranchMixin(BranchMixin, ConditionalMixin):
class ConditionalBranchMixin(BranchMixin, ConditionalMixin, mixin=True):
"""A ``BaseBranch`` is a mixin-class for all branch statements with a condition."""
def __init__(self, condition: ExpressionUnion):
super().__init__()
ConditionalMixin.__init__(self, condition)


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


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


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


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

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


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

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


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

def __init__(self):
Expand Down
33 changes: 23 additions & 10 deletions pyVHDLModel/Common.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,17 +32,29 @@
"""
This module contains parts of an abstract document language model for VHDL.
Common definitions and MixIns are used by many classes in the model as base-classes.
Common definitions and Mixins are used by many classes in the model as base-classes.
"""
from typing import List, Iterable
from typing import List, Iterable, Union

from pyTooling.Decorators import export
from pyTooling.MetaClasses import ExtendedType

from pyVHDLModel.Base import ModelEntity, LabeledEntityMixin, ExpressionUnion
from pyVHDLModel.Base import ModelEntity, LabeledEntityMixin
from pyVHDLModel.Expression import BaseExpression, QualifiedExpression, FunctionCall, TypeConversion, Literal
from pyVHDLModel.Symbol import Symbol
from pyVHDLModel.Association import ParameterAssociationItem


ExpressionUnion = Union[
BaseExpression,
QualifiedExpression,
FunctionCall,
TypeConversion,
# ConstantOrSymbol, TODO: ObjectSymbol
Literal,
]


@export
class Statement(ModelEntity, LabeledEntityMixin):
"""
Expand All @@ -54,7 +66,7 @@ def __init__(self, label: str = None):


@export
class ProcedureCall:
class ProcedureCallMixin(metaclass=ExtendedType, mixin=True):
_procedure: Symbol # TODO: implement a ProcedureSymbol
_parameterMappings: List[ParameterAssociationItem]

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


@export
class Assignment:
"""An ``Assignment`` is a base-class for all assignment statements."""
class AssignmentMixin(metaclass=ExtendedType, mixin=True):
"""A mixin-class for all assignment statements."""

_target: Symbol

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


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


@export
class VariableAssignment(Assignment):
"""An ``VariableAssignment`` is a base-class for all variable assignment statements."""
class VariableAssignmentMixin(AssignmentMixin, mixin=True):
"""A mixin-class for all variable assignment statements."""

# FIXME: move to sequential?
_expression: ExpressionUnion

Expand Down
Loading

0 comments on commit df37970

Please sign in to comment.