Metadata-Version: 2.4
Name: pyEDAA.Reports
Version: 0.17.1
Summary: Various report abstract data models and report format converters.
Home-page: https://GitHub.com/pyEDAA/pyEDAA.Reports
Author: Patrick Lehmann
Author-email: Paebbels@gmail.com
License: Apache-2.0
Project-URL: Documentation, https://pyEDAA.GitHub.io/pyEDAA.Reports
Project-URL: Source Code, https://GitHub.com/pyEDAA/pyEDAA.Reports
Project-URL: Issue Tracker, https://GitHub.com/pyEDAA/pyEDAA.Reports/issues
Keywords: Reports,Abstract Model,Data Model,Unit Testing,Testcase,Testsuite,OSVVM,YAML,XML
Classifier: Operating System :: OS Independent
Classifier: Intended Audience :: Developers
Classifier: Topic :: Utilities
Classifier: Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Development Status :: 4 - Beta
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE.md
Requires-Dist: ruamel.yaml~=0.18
Requires-Dist: pyTooling<10.0,>=8.7
Requires-Dist: lxml<7.0,>=5.4
Provides-Extra: doc
Requires-Dist: lxml<7.0,>=5.4; extra == "doc"
Requires-Dist: autoapi>=2.0.1; extra == "doc"
Requires-Dist: sphinx~=8.2; extra == "doc"
Requires-Dist: docutils~=0.21; extra == "doc"
Requires-Dist: pyTooling<10.0,>=8.7; extra == "doc"
Requires-Dist: sphinx-copybutton>=0.5; extra == "doc"
Requires-Dist: docutils_stubs~=0.0.22; extra == "doc"
Requires-Dist: sphinx_autodoc_typehints~=3.5; extra == "doc"
Requires-Dist: ruamel.yaml~=0.18; extra == "doc"
Requires-Dist: sphinx_reports~=0.9; extra == "doc"
Requires-Dist: sphinx_rtd_theme~=3.0; extra == "doc"
Requires-Dist: sphinxcontrib-autoprogram~=0.1; extra == "doc"
Requires-Dist: sphinxcontrib-mermaid~=1.0; extra == "doc"
Requires-Dist: sphinx_design~=0.6.1; extra == "doc"
Provides-Extra: test
Requires-Dist: lxml<7.0,>=5.4; extra == "test"
Requires-Dist: pyTooling<10.0,>=8.7; extra == "test"
Requires-Dist: typing_extensions~=4.15; extra == "test"
Requires-Dist: pytest~=8.4; extra == "test"
Requires-Dist: ruamel.yaml~=0.18; extra == "test"
Requires-Dist: Coverage~=7.11; extra == "test"
Requires-Dist: mypy[reports]~=1.18; extra == "test"
Requires-Dist: pytest-cov~=7.0; extra == "test"
Provides-Extra: all
Requires-Dist: typing_extensions~=4.15; extra == "all"
Requires-Dist: Coverage~=7.11; extra == "all"
Requires-Dist: sphinxcontrib-autoprogram~=0.1; extra == "all"
Requires-Dist: docutils~=0.21; extra == "all"
Requires-Dist: sphinx-copybutton>=0.5; extra == "all"
Requires-Dist: sphinx_rtd_theme~=3.0; extra == "all"
Requires-Dist: pytest-cov~=7.0; extra == "all"
Requires-Dist: sphinx_design~=0.6.1; extra == "all"
Requires-Dist: sphinx~=8.2; extra == "all"
Requires-Dist: pyTooling<10.0,>=8.7; extra == "all"
Requires-Dist: docutils_stubs~=0.0.22; extra == "all"
Requires-Dist: ruamel.yaml~=0.18; extra == "all"
Requires-Dist: mypy[reports]~=1.18; extra == "all"
Requires-Dist: lxml<7.0,>=5.4; extra == "all"
Requires-Dist: autoapi>=2.0.1; extra == "all"
Requires-Dist: sphinx_autodoc_typehints~=3.5; extra == "all"
Requires-Dist: pytest~=8.4; extra == "all"
Requires-Dist: sphinx_reports~=0.9; extra == "all"
Requires-Dist: sphinxcontrib-mermaid~=1.0; extra == "all"
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: keywords
Dynamic: license
Dynamic: license-file
Dynamic: project-url
Dynamic: provides-extra
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

<p align="center">
  <a title="edaa-org.github.io/pyEDAA.Reports" href="https://edaa-org.github.io/pyEDAA.Reports"><img height="80px" src="doc/_static/logo.svg"/></a>
</p>

[![Sourcecode on GitHub](https://img.shields.io/badge/pyEDAA-Reports-29b6f6.svg?longCache=true&style=flat-square&logo=GitHub&labelColor=0277bd)](https://GitHub.com/edaa-org/pyEDAA.Reports)
[![Documentation](https://img.shields.io/website?longCache=true&style=flat-square&label=edaa-org.github.io%2FpyEDAA.Reports&logo=GitHub&logoColor=fff&up_color=blueviolet&up_message=Read%20now%20%E2%9E%9A&url=https%3A%2F%2Fedaa-org.github.io%2FpyEDAA.Reports%2Findex.html)](https://edaa-org.github.io/pyEDAA.Reports/)
[![Gitter](https://img.shields.io/badge/chat-on%20gitter-4db797.svg?longCache=true&style=flat-square&logo=gitter&logoColor=e8ecef)](https://gitter.im/hdl/community)  
[![GitHub Workflow - Build and Test Status](https://img.shields.io/github/actions/workflow/status/edaa-org/pyEDAA.Reports/Pipeline.yml?longCache=true&style=flat-square&label=Build%20and%20Test&logo=GitHub%20Actions&logoColor=FFFFFF)](https://GitHub.com/edaa-org/pyEDAA.Reports/actions/workflows/Pipeline.yml)
[![Codacy - Quality](https://img.shields.io/codacy/grade/f8142b422c1742bdba38e8ac1893870c?longCache=true&style=flat-square&logo=Codacy)](https://app.codacy.com/gh/edaa-org/pyEDAA.Reports)

<!--
[![Sourcecode License](https://img.shields.io/pypi/l/pyEDAA.Reports?longCache=true&style=flat-square&logo=Apache&label=code)](LICENSE.md)
[![Documentation License](https://img.shields.io/badge/doc-CC--BY%204.0-green?longCache=true&style=flat-square&logo=CreativeCommons&logoColor=fff)](LICENSE.md)

[![PyPI](https://img.shields.io/pypi/v/pyEDAA.Reports?longCache=true&style=flat-square&logo=PyPI&logoColor=FBE072)](https://pypi.org/project/pyEDAA.Reports/)
![PyPI - Status](https://img.shields.io/pypi/status/pyEDAA.Reports?longCache=true&style=flat-square&logo=PyPI&logoColor=FBE072)
![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pyEDAA.Reports?longCache=true&style=flat-square&logo=PyPI&logoColor=FBE072)

[![Libraries.io status for latest release](https://img.shields.io/librariesio/release/pypi/pyEDAA.Reports?longCache=true&style=flat-square&logo=Libraries.io&logoColor=fff)](https://libraries.io/github/edaa-org/pyEDAA.Reports)
[![Codacy - Coverage](https://img.shields.io/codacy/coverage/f8142b422c1742bdba38e8ac1893870c?longCache=true&style=flat-square&logo=Codacy)](https://app.codacy.com/gh/edaa-org/pyEDAA.Reports)
[![Codecov - Branch Coverage](https://img.shields.io/codecov/c/github/edaa-org/pyEDAA.Reports?longCache=true&style=flat-square&logo=Codecov)](https://codecov.io/gh/edaa-org/pyEDAA.Reports)

[![Dependent repos (via libraries.io)](https://img.shields.io/librariesio/dependent-repos/pypi/pyEDAA.Reports?longCache=true&style=flat-square&logo=GitHub)](https://GitHub.com/edaa-org/pyEDAA.Reports/network/dependents)
[![Requires.io](https://img.shields.io/requires/github/edaa-org/pyEDAA.Reports?longCache=true&style=flat-square)](https://requires.io/github/EDAA-ORG/pyEDAA.Reports/requirements/?branch=main)
[![Libraries.io SourceRank](https://img.shields.io/librariesio/sourcerank/pypi/pyEDAA.Reports?longCache=true&style=flat-square)](https://libraries.io/github/edaa-org/pyEDAA.Reports/sourcerank)
-->

Proposal to define an abstract model for outputs from EDA tools and logging libraries.

The main intended use case of pyEDAA.Reports is to import multiple log/report formats (raw logs, CSVs, YAML, JSON, etc.)
and provide a unified model that can generate reports using popular formats such as XUnit or Cobertura.
Since most vendors, CI services and monitoring tools support XML, the internals of pyEDAA.Reports are to be based on
XML transformations.

As an abstract model, the main capability of pyEDAA.Reports is handling messages using an structured format.
The readers categorize messages by IDs and append attributes such as the severity, which allow complex filtering and
fancy coloring for better human readability.

<p align="center">
  <a title="edaa-org.github.io/pyEDAA.Reports" href="https://edaa-org.github.io/pyEDAA.Reports"><img height="275px" src="doc/_static/work-in-progress.png"/></a>
</p>

# Report Kinds

## Test Report Summary

* Test Suite
* Test Case
* Test Parameter

## Code Coverage Report

* Line Coverage
* Statement Coverage
* Branch Coverage
* Expression Coverage
* State Coverage
* Transition Coverage

## Functional Coverage

* Coverage Model
  * Dimension
  * Bin
    * Item
    * Range

## Synthesis

* Area/resources
* Timing

## Implementation

* Area/resources
* Timing

# Target input logs/formats

* ActiveHDL
* CoCoTb
* Diamond
* GHDL
* Icarus Verilog
* ISE
* ModelSim/QuestaSim
* nextpnr
* OSVVM
* RivieraPRO
* SymbiYosys
* Synplify
* Quartus
* Verilator
* Verilog-to-Routing
* Vivado
* VUnit
* Xcelium
* Yosys
* ...

# References

* [olofk/edalize](https://github.com/olofk/edalize/) (see `edalize.reporting`, `edalize.vivado_reporting`, `edalize.quartus_reporting`, `edalize.ise_reporting`, ...)
* [librecores/eda-log-parser](https://github.com/librecores/eda-log-parser)
* [SymbiFlow/fpga-tool-perf](https://github.com/SymbiFlow/fpga-tool-perf)
* [mattvenn/logLUTs](https://github.com/mattvenn/logLUTs)
* [tiagolascasas/Vivado-HLS-Report-Parser](https://github.com/tiagolascasas/Vivado-HLS-Report-Parser)
* [cuelang.org/](https://cuelang.org/)
  * [cuelang.org/docs/tutorials](https://cuelang.org/docs/tutorials/)
  * [cue-lang/cue#162](https://github.com/cue-lang/cue/issues/162)
    * [pypi.org/project/pycue](https://pypi.org/project/pycue/)
    * [philipdexter/pycue](https://github.com/philipdexter/pycue)
