Skip to content

Replace string annotations with PEP 563 postponed evaluation - #103

Open
eda-s-claude-bot[bot] wants to merge 3 commits into
devfrom
claude/postponed-annotations
Open

Replace string annotations with PEP 563 postponed evaluation#103
eda-s-claude-bot[bot] wants to merge 3 commits into
devfrom
claude/postponed-annotations

Conversation

@eda-s-claude-bot

Copy link
Copy Markdown

Breaking Changes

  • ⚠️ Annotations in four modules are no longer evaluated at definition time. Those modules carry
    from __future__ import annotations, so on Python 3.11-3.13 SomeClass.__annotations__ yields strings
    where it previously yielded type objects; on Python 3.14 (PEP 649) they are
    computed lazily and read as before. Code introspecting these classes at runtime must resolve them itself with
    typing.get_type_hints(SomeClass), which works on every supported version.

Changes

  • All 121 annotations written as string literals are plain annotations now:
    Nullable[Processor] instead of Nullable["Processor"].

    • pyEDAA.OutputFilter.Xilinx: 102 · pyEDAA.OutputFilter: 9 · pyEDAA.OutputFilter.CLI.Configuration: 8 ·
      pyEDAA.OutputFilter.Xilinx.SynthesizeDesign: 2.

    Five are genuine forward references, which is why the future import is required rather than cosmetic: Python
    3.11-3.13 evaluate annotations eagerly and would raise NameError at import time without it. Python 3.14 would
    have accepted the unquoted code locally and let CI find it.

  • Each import section is grouped - future import, standard library, third-party, own package - with one empty line
    between the groups that exist and a single import column shared across them, matching the layout settled in
    pyTooling.

Union[...] annotations are untouched and are not part of this pull-request.


Related Issues and Pull-Requests

All 121 annotations written as string literals are plain annotations
now, and the four affected modules carry
'from __future__ import annotations'.

The future import is what makes this safe rather than cosmetic: five of
them are genuine forward references, and Python 3.11-3.13 evaluate
annotations eagerly, so unquoting alone would raise NameError at import
time on exactly the versions the pipeline tests.

Each import section is grouped - future, standard library, third-party,
own package - with one empty line between the groups and a single
'import' column across them.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
@eda-s-claude-bot
eda-s-claude-bot Bot requested a review from Paebbels as a code owner August 21, 2026 21:48
@codecov

codecov Bot commented Aug 21, 2026

Copy link
Copy Markdown

❌ 75 Tests Failed:

Tests completed Failed Passed Skipped
75 75 0 2
View the top 3 failed test(s) by shortest run time
Vivado.Implementation.OptimizeDesign::test_DRCTask
Stack Traces | 0s run time
No failure message available
Vivado.Implementation.OptimizeDesign::test_ImplementationLogfile
Stack Traces | 0s run time
No failure message available
Vivado.Implementation.OptimizeDesign::test_NetlistObfuscationTask
Stack Traces | 0s run time
No failure message available
Vivado.Implementation.OptimizeDesign::test_PowerOptimizationTask
Stack Traces | 0s run time
No failure message available
Vivado.Instantiation::test_DRCInfo
Stack Traces | 0s run time
No failure message available
Vivado.Instantiation::test_DRCWarning
Stack Traces | 0s run time
No failure message available
Vivado.Instantiation::test_Info
Stack Traces | 0s run time
No failure message available
Vivado.Instantiation::test_IrregularInfo
Stack Traces | 0s run time
No failure message available
Vivado.Instantiation::test_StuntedInfo
Stack Traces | 0s run time
No failure message available
Vivado.Instantiation::test_StuntedWarning
Stack Traces | 0s run time
No failure message available
Vivado.Instantiation::test_Warning
Stack Traces | 0s run time
No failure message available
Vivado.Issues.Issue87::test_Logfile
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.CERN_DevKit::test_SynthesisLogfile
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_ImplementationLogfile_2019_2
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_ImplementationLogfile_2020_1
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_ImplementationLogfile_2020_2
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_ImplementationLogfile_2021_1
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_ImplementationLogfile_2022_1
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_ImplementationLogfile_2022_2
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_ImplementationLogfile_2023_1
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_ImplementationLogfile_2024_1
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_ImplementationLogfile_2025_1
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_ImplementationLogfile_2025_2
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_PackageLogfile_2024_2
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_SynthesisLogfile_2019_1
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_SynthesisLogfile_2019_2
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_SynthesisLogfile_2020_1
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_SynthesisLogfile_2020_2
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_SynthesisLogfile_2021_1
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_SynthesisLogfile_2021_2
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_SynthesisLogfile_2022_1
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_SynthesisLogfile_2022_2
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_SynthesisLogfile_2023_1
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_SynthesisLogfile_2023_2
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_SynthesisLogfile_2024_1
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_SynthesisLogfile_2024_2
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_SynthesisLogfile_2025_1
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_SynthesisLogfile_2025_2
Stack Traces | 0s run time
No failure message available
Vivado.Logfiles.Stopwatch::test_SynthesisLogfile
Stack Traces | 0s run time
No failure message available
Vivado.Parsing::test_CriticalWarning
Stack Traces | 0s run time
No failure message available
Vivado.Parsing::test_CriticalWarning_WrongFormat
Stack Traces | 0s run time
No failure message available
Vivado.Parsing::test_Error_WrongFormat
Stack Traces | 0s run time
No failure message available
Vivado.Parsing::test_Info
Stack Traces | 0s run time
No failure message available
Vivado.Parsing::test_Info_IrregularFormat
Stack Traces | 0s run time
No failure message available
Vivado.Parsing::test_Info_WrongFormat
Stack Traces | 0s run time
No failure message available
Vivado.Parsing::test_Warning
Stack Traces | 0s run time
No failure message available
Vivado.Parsing::test_Warning_AbnormalFormat
Stack Traces | 0s run time
No failure message available
Vivado.Parsing::test_Warning_WrongFormat
Stack Traces | 0s run time
No failure message available
Vivado.Synthesis.Preambles::test_LogfilePreambleWithLicense
Stack Traces | 0s run time
No failure message available
Vivado.Synthesis.Preambles::test_VivadoPipedPreamble
Stack Traces | 0s run time
No failure message available
Vivado.Synthesis.Preambles::test_VivadoPipedPreambleWithLicense
Stack Traces | 0s run time
No failure message available
Vivado.Synthesis.SynthDesign::test_IOInsertion
Stack Traces | 0s run time
No failure message available
Vivado.Synthesis.SynthDesign::test_LoadingPart
Stack Traces | 0s run time
No failure message available
Vivado.Synthesis.SynthDesign::test_RTLComponentStatistics
Stack Traces | 0s run time
No failure message available
Vivado.Synthesis.SynthDesign::test_RTLElaboration
Stack Traces | 0s run time
No failure message available
Vivado.Synthesis.SynthDesign::test_SynthesisLogfile
Stack Traces | 0s run time
No failure message available
Vivado.Synthesis.SynthDesign::test_WritingSynthesisReport
Stack Traces | 0s run time
No failure message available
Vivado.Implementation.LinkDesign::test_ImplementationLogfile
Stack Traces | 0.001s run time
No failure message available
Vivado.Implementation.OptimizeDesign::test_CacheTimingInformationTask
Stack Traces | 0.001s run time
No failure message available
Vivado.Implementation.OptimizeDesign::test_FinalCleanupTask
Stack Traces | 0.001s run time
No failure message available
Vivado.Implementation.OptimizeDesign::test_LogicOptimizationTask
Stack Traces | 0.001s run time
No failure message available
Vivado.Implementation.PlaceDesign::test_ImplementationLogfile
Stack Traces | 0.001s run time
No failure message available
Vivado.Implementation.RouteDesign::test_ImplementationLogfile
Stack Traces | 0.001s run time
No failure message available
Vivado.Instantiation::test_CriticalWarning
Stack Traces | 0.001s run time
No failure message available
Vivado.Instantiation::test_Error
Stack Traces | 0.001s run time
No failure message available
Vivado.Issues.Issue87::test_EnAxiRbInterface
Stack Traces | 0.001s run time
No failure message available
Vivado.Logfiles.CERN_DevKit::test_ImplementationLogfile
Stack Traces | 0.001s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_ImplementationLogfile_2019_1
Stack Traces | 0.001s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_ImplementationLogfile_2021_2
Stack Traces | 0.001s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_ImplementationLogfile_2023_2
Stack Traces | 0.001s run time
No failure message available
Vivado.Logfiles.Enclustra_Mercury_ZX5::test_ImplementationLogfile_2024_2
Stack Traces | 0.001s run time
No failure message available
Vivado.Logfiles.Stopwatch::test_ImplementationLogfile
Stack Traces | 0.001s run time
No failure message available
Vivado.Parsing::test_Error
Stack Traces | 0.001s run time
No failure message available
Vivado.Synthesis.Preambles::test_LogfilePreamble
Stack Traces | 0.001s run time
No failure message available
Vivado.Synthesis.Preambles::test_VivadoNestedPipedPreamble
Stack Traces | 0.001s run time
No failure message available

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

Comment thread pyEDAA/OutputFilter/CLI/Configuration.py Outdated
The grouping script came from the pyTooling repository, where
'pyTooling' *is* the own package - so it sorted pyTooling into the
fourth group and pyEDAA.OutputFilter into the third, exactly the wrong
way round. The own package is a parameter now.

Sections are: future import, standard library, third-party
(ruamel.yaml, pyTooling, other pyEDAA.* packages), own package.

Co-Authored-By: Patrick Lehmann <Paebbels@gmail.com>
Comment thread pyEDAA/OutputFilter/Xilinx/__init__.py Outdated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants