diff --git a/.github/workflows/Pipeline.yml b/.github/workflows/Pipeline.yml index ee49c5495..c985b7b72 100644 --- a/.github/workflows/Pipeline.yml +++ b/.github/workflows/Pipeline.yml @@ -12,6 +12,7 @@ jobs: uses: pyTooling/Actions/.github/workflows/CompletePipeline.yml@r6 with: package_name: 'pyVHDLModel' + unittest_python_version_list: '3.11 3.12 3.13 3.14 pypy-3.11' bandit: 'true' pylint: 'false' codecov: 'true' diff --git a/.idea/pyVHDLModel.iml b/.idea/pyVHDLModel.iml index 402cf9e80..9e95d66ff 100644 --- a/.idea/pyVHDLModel.iml +++ b/.idea/pyVHDLModel.iml @@ -16,7 +16,7 @@ - + diff --git a/doc/Dependency.rst b/doc/Dependency.rst index b193ac278..520f2c7ea 100644 --- a/doc/Dependency.rst +++ b/doc/Dependency.rst @@ -55,7 +55,7 @@ the mandatory dependencies too. +---------------------------------------------------------------------+-------------+----------------------------------------------------------------------------------------+----------------------+ | `pytest-cov `__ | ≥7.0 | `MIT `__ | *Not yet evaluated.* | +---------------------------------------------------------------------+-------------+----------------------------------------------------------------------------------------+----------------------+ -| `Coverage `__ | ≥7.10 | `Apache License, 2.0 `__ | *Not yet evaluated.* | +| `Coverage `__ | ≥7.11 | `Apache License, 2.0 `__ | *Not yet evaluated.* | +---------------------------------------------------------------------+-------------+----------------------------------------------------------------------------------------+----------------------+ | `mypy `__ | ≥1.18 | `MIT `__ | *Not yet evaluated.* | +---------------------------------------------------------------------+-------------+----------------------------------------------------------------------------------------+----------------------+ @@ -101,7 +101,7 @@ the mandatory dependencies too. +-------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+----------------------+ | !! `sphinx_fontawesome `__ | ≥0.0.6 | `GPL 2.0 `__ | *Not yet evaluated.* | +-------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+----------------------+ -| `sphinx_autodoc_typehints `__ | ≥3.1 | `MIT `__ | *Not yet evaluated.* | +| `sphinx_autodoc_typehints `__ | ≥3.5 | `MIT `__ | *Not yet evaluated.* | +-------------------------------------------------------------------------------------------------+--------------+----------------------------------------------------------------------------------------------------------+----------------------+ diff --git a/doc/requirements.txt b/doc/requirements.txt index 498302850..040b1a704 100644 --- a/doc/requirements.txt +++ b/doc/requirements.txt @@ -13,5 +13,5 @@ sphinxcontrib-mermaid ~= 1.0 autoapi >= 2.0.1 sphinx_design ~= 0.6 sphinx-copybutton >= 0.5 -sphinx_autodoc_typehints ~= 3.1 +sphinx_autodoc_typehints ~= 3.5 sphinx_reports ~= 0.9 diff --git a/pyVHDLModel/Expression.py b/pyVHDLModel/Expression.py index adbb63dc6..2bd8815d4 100644 --- a/pyVHDLModel/Expression.py +++ b/pyVHDLModel/Expression.py @@ -34,7 +34,8 @@ All declarations for literals, aggregates, operators forming an expressions. """ -from typing import Tuple, List, Iterable, Union +from enum import Flag +from typing import Tuple, List, Iterable, Union, ClassVar from pyTooling.Decorators import export, readonly @@ -196,14 +197,32 @@ def __str__(self) -> str: return "\"" + self._value + "\"" +@export +class BitStringBase(Flag): + NoBase = 0 + Binary = 2 + Octal = 8 + Decimal = 10 + Hexadecimal = 16 + Unsigned = 32 + Signed = 64 + + @export class BitStringLiteral(Literal): + # _base: ClassVar[BitStringBase] _value: str + _bits: int def __init__(self, value: str) -> None: super().__init__() + self._bits = len(value) self._value = value + @readonly + def Bits(self) -> int: + return self._bits + @readonly def Value(self) -> str: return self._value @@ -212,6 +231,58 @@ def __str__(self) -> str: return "\"" + self._value + "\"" +@export +class BinaryBitStringLiteral(BitStringLiteral): + _base: ClassVar[BitStringBase] = BitStringBase.Binary + + def __init__(self, value: str, bits: int = 0) -> None: + super().__init__(value) + if bits > 0: + self._bits = bits + + def __str__(self) -> str: + return "b\"" + self._value + "\"" + + +@export +class OctalBitStringLiteral(BitStringLiteral): + _base: ClassVar[BitStringBase] = BitStringBase.Octal + + def __init__(self, value: str, bits: int = 0) -> None: + super().__init__(value) + if bits > 0: + self._bits = bits + + def __str__(self) -> str: + return "o\"" + self._value + "\"" + + +@export +class DecimalBitStringLiteral(BitStringLiteral): + _base: ClassVar[BitStringBase] = BitStringBase.Decimal + + def __init__(self, value: str, bits: int = 0) -> None: + super().__init__(value) + if bits > 0: + self._bits = bits + + def __str__(self) -> str: + return "d\"" + self._value + "\"" + + +@export +class HexadecimalBitStringLiteral(BitStringLiteral): + _base: ClassVar[BitStringBase] = BitStringBase.Hexadecimal + + def __init__(self, value: str, bits: int = 0) -> None: + super().__init__(value) + if bits > 0: + self._bits = bits + + def __str__(self) -> str: + return "x\"" + self._value + "\"" + + @export class ParenthesisExpression: #(Protocol): __slots__ = () # FIXME: use ExtendedType? diff --git a/pyVHDLModel/__init__.py b/pyVHDLModel/__init__.py index 6d613e867..646e85648 100644 --- a/pyVHDLModel/__init__.py +++ b/pyVHDLModel/__init__.py @@ -48,7 +48,7 @@ __email__ = "Paebbels@gmail.com" __copyright__ = "2016-2025, Patrick Lehmann" __license__ = "Apache License, Version 2.0" -__version__ = "0.31.3" +__version__ = "0.32.0" from enum import unique, Enum, Flag, auto diff --git a/run.ps1 b/run.ps1 index 6ed9316a8..1aed3335f 100644 --- a/run.ps1 +++ b/run.ps1 @@ -33,7 +33,7 @@ Param( ) $PackageName = "pyVHDLModel" -$PackageVersion = "0.31.2" +$PackageVersion = "0.32.0" # set default values $EnableDebug = [bool]$PSCmdlet.MyInvocation.BoundParameters["Debug"] @@ -89,7 +89,7 @@ if ($build) rm -Force .\build\bdist.win-amd64 rm -Force .\build\lib Write-Host -ForegroundColor Yellow "[live][BUILD] Building $PackageName package as wheel ..." - py -3.13 -m build --wheel --no-isolation + py -3.14 -m build --wheel --no-isolation Write-Host -ForegroundColor Yellow "[live][BUILD] Building wheel finished" } @@ -103,9 +103,9 @@ if ($install) } else { Write-Host -ForegroundColor Cyan "[ADMIN][UNINSTALL] Uninstalling $PackageName ..." - py -3.13 -m pip uninstall -y $PackageName + py -3.14 -m pip uninstall -y $PackageName Write-Host -ForegroundColor Cyan "[ADMIN][INSTALL] Installing $PackageName from wheel ..." - py -3.13 -m pip install .\dist\$PackageName-$PackageVersion-py3-none-any.whl + py -3.14 -m pip install .\dist\$($PackageName.Replace(".", "_").ToLower())-$PackageVersion-py3-none-any.whl Write-Host -ForegroundColor Cyan "[ADMIN][INSTALL] Closing window in 5 seconds ..." Start-Sleep -Seconds 5 diff --git a/setup.py b/setup.py index b6186ffc0..c6b15f46f 100644 --- a/setup.py +++ b/setup.py @@ -47,12 +47,13 @@ gitHubNamespace=gitHubNamespace, keywords="Python3 VHDL Language Model Abstract", sourceFileWithVersion=packageInformationFile, - developmentStatus="beta", classifiers=list(DEFAULT_CLASSIFIERS) + [ "Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)", "Topic :: Software Development :: Code Generators", "Topic :: Software Development :: Compilers", ], + developmentStatus="beta", + pythonVersions=("3.11", "3.12", "3.13", "3.14"), dataFiles={ packageName: ["py.typed"] }, diff --git a/tests/requirements.txt b/tests/requirements.txt index c8b94c7c0..787c2e678 100644 --- a/tests/requirements.txt +++ b/tests/requirements.txt @@ -1,7 +1,7 @@ -r ../requirements.txt # Coverage collection -Coverage ~= 7.10 +Coverage ~= 7.11 # Test Runner pytest ~= 8.4 @@ -10,4 +10,4 @@ pytest-cov ~= 7.0 # Static Type Checking mypy[reports] ~= 1.18 typing_extensions ~= 4.15 -lxml ~= 6.0 +lxml >= 5.4, <7.0