Reporting API Reference¶
Version: 0.1.0 Last Updated: 2026-01-08
Overview¶
TraceKit provides professional report generation capabilities including PDF, HTML, and PowerPoint output, with automatic chart selection, executive summaries, and batch processing.
Quick Start¶
import tracekit as tk
from tracekit.reporting import generate_report, save_pdf_report, save_html_report
# Load and analyze
trace = tk.load("capture.wfm")
# Generate report
report = generate_report(trace, title="Signal Analysis Report")
# Save in multiple formats
save_pdf_report(report, "report.pdf")
save_html_report(report, "report.html")
Core Report Generation¶
generate_report()¶
Generate a comprehensive analysis report.
from tracekit.reporting import generate_report, Report, ReportConfig
# Basic usage
report = generate_report(trace, title="My Report")
# With configuration
config = ReportConfig(
title="Signal Analysis",
author="Engineering Team",
include_plots=True,
include_raw_data=False,
)
report = generate_report(trace, config=config)
Parameters:
| Parameter | Type | Description |
|---|---|---|
trace |
WaveformTrace |
Input waveform trace |
title |
str |
Report title |
config |
ReportConfig |
Optional configuration |
Returns: Report object containing sections, data, and metadata.
Report Class¶
from tracekit.reporting import Report, Section
report = Report(
title="Analysis Report",
sections=[
Section(title="Executive Summary", content="..."),
Section(title="Measurements", content="..."),
],
metadata={"author": "TraceKit", "date": "2026-01-02"}
)
# Access report data
print(report.title)
for section in report.sections:
print(f" {section.title}")
ReportConfig Class¶
from tracekit.reporting import ReportConfig
config = ReportConfig(
title="Signal Analysis Report",
author="Engineering Team",
company="ACME Corp",
include_plots=True,
include_raw_data=False,
include_statistics=True,
plot_format="png",
plot_dpi=150,
)
Output Formats¶
PDF Generation¶
from tracekit.reporting import generate_pdf_report, save_pdf_report
# Generate and save
report = generate_report(trace)
save_pdf_report(report, "output.pdf")
# Or generate PDF directly
pdf_bytes = generate_pdf_report(report)
with open("output.pdf", "wb") as f:
f.write(pdf_bytes)
HTML Generation¶
from tracekit.reporting import generate_html_report, save_html_report
# Generate and save
report = generate_report(trace)
save_html_report(report, "output.html")
# Or get HTML string
html_content = generate_html_report(report)
PowerPoint Export¶
from tracekit.reporting import export_pptx, generate_presentation_from_report
# From report
report = generate_report(trace)
pptx = generate_presentation_from_report(report)
pptx.save("presentation.pptx")
# Direct export
export_pptx(trace, "presentation.pptx", title="Signal Analysis")
Multi-Format Export¶
from tracekit.reporting import export_report, batch_export_formats
# Single format
export_report(report, "output.pdf", format="pdf")
# Multiple formats at once
batch_export_formats(
report,
base_path="output",
formats=["pdf", "html", "pptx"]
)
# Creates: output.pdf, output.html, output.pptx
Comprehensive Analysis Reports¶
analyze() Function¶
Run comprehensive analysis and generate results.
from tracekit.reporting import analyze, AnalysisDomain
# Full analysis
results = analyze(trace)
# Specific domains only
results = analyze(
trace,
domains=[
AnalysisDomain.WAVEFORM,
AnalysisDomain.SPECTRAL,
AnalysisDomain.DIGITAL,
]
)
# Access results
print(results['waveform']['frequency'])
print(results['spectral']['thd'])
Analysis Domains¶
from tracekit.reporting import AnalysisDomain
# Available domains
AnalysisDomain.WAVEFORM # Basic waveform measurements
AnalysisDomain.SPECTRAL # FFT, PSD, harmonics
AnalysisDomain.DIGITAL # Digital timing, edges
AnalysisDomain.TIMING # Setup/hold, skew
AnalysisDomain.STATISTICS # Statistical analysis
AnalysisDomain.PATTERNS # Pattern discovery
AnalysisDomain.JITTER # Jitter analysis
AnalysisDomain.EYE # Eye diagram
AnalysisDomain.PROTOCOLS # Protocol decoding
AnalysisDomain.ENTROPY # Entropy analysis
AnalysisDomain.INFERENCE # Protocol inference
Analysis Configuration¶
from tracekit.reporting import AnalysisConfig, DomainConfig
config = AnalysisConfig(
domains={
AnalysisDomain.WAVEFORM: DomainConfig(enabled=True),
AnalysisDomain.SPECTRAL: DomainConfig(
enabled=True,
parameters={"window": "hanning", "nfft": 4096}
),
},
progress_callback=lambda info: print(f"Progress: {info.percent}%"),
)
results = analyze(trace, config=config)
Report Sections¶
Standard Sections¶
from tracekit.reporting import (
create_standard_report_sections,
create_title_section,
create_executive_summary_section,
create_measurement_results_section,
create_methodology_section,
create_conclusions_section,
create_plots_section,
create_violations_section,
)
# Create all standard sections
sections = create_standard_report_sections(results, config)
# Or create individual sections
title = create_title_section("Signal Analysis", author="Team")
summary = create_executive_summary_section(results)
measurements = create_measurement_results_section(results)
Executive Summary¶
from tracekit.reporting import generate_executive_summary, ExecutiveSummary
summary = generate_executive_summary(results)
print(summary.key_findings)
print(summary.recommendations)
print(summary.pass_fail_status)
Formatting¶
Number Formatting¶
from tracekit.reporting import format_value, format_with_units, NumberFormatter
# Auto-format with SI prefixes
formatted = format_value(1.234e-9) # "1.234 ns"
formatted = format_with_units(1500000, "Hz") # "1.5 MHz"
# Custom formatter
formatter = NumberFormatter(precision=3, use_si_prefix=True)
formatted = formatter.format(1234567.89, "V") # "1.235 MV"
Locale-Aware Formatting¶
from tracekit.reporting import format_with_locale
# German locale (comma decimal separator)
formatted = format_with_locale(1234.56, locale="de_DE") # "1.234,56"
# French locale
formatted = format_with_locale(1234.56, locale="fr_FR") # "1 234,56"
Pass/Fail Formatting¶
from tracekit.reporting import format_pass_fail, format_margin
# Pass/fail status
status = format_pass_fail(measured=4.8, limit=5.0, limit_type="max")
# Returns: {"status": "PASS", "margin": "4.0%", "color": "green"}
# Margin calculation
margin = format_margin(measured=4.8, limit=5.0) # "4.0%"
Tables¶
Measurement Tables¶
from tracekit.reporting import create_measurement_table, create_statistics_table
# Measurement table
table = create_measurement_table(results['waveform'])
# Returns formatted table data
# Statistics table
stats_table = create_statistics_table(results['statistics'])
Comparison Tables¶
from tracekit.reporting import create_comparison_table
table = create_comparison_table(
results_a=results1,
results_b=results2,
labels=["Before", "After"]
)
Batch Processing¶
Batch Reports¶
from tracekit.reporting import batch_report, generate_batch_report, BatchReportResult
# Process multiple files
files = ["file1.wfm", "file2.wfm", "file3.wfm"]
results = batch_report(files)
for result in results:
print(f"{result.filename}: {result.status}")
if result.report:
save_pdf_report(result.report, f"{result.filename}.pdf")
# Generate aggregate report
aggregate = generate_batch_report(results)
save_pdf_report(aggregate, "batch_summary.pdf")
Batch Aggregation¶
from tracekit.reporting import aggregate_batch_measurements
# Aggregate measurements across files
aggregated = aggregate_batch_measurements(results)
print(f"Average frequency: {aggregated['frequency']['mean']}")
print(f"Frequency std dev: {aggregated['frequency']['std']}")
Comparison Reports¶
from tracekit.reporting import compare_waveforms, generate_comparison_report
# Compare two waveforms
comparison = compare_waveforms(trace_a, trace_b)
print(f"Amplitude difference: {comparison['amplitude_diff']}")
print(f"Phase shift: {comparison['phase_shift']}")
# Generate comparison report
report = generate_comparison_report(
trace_a, trace_b,
labels=["Reference", "Device Under Test"]
)
save_pdf_report(report, "comparison.pdf")
Multi-Channel Reports¶
from tracekit.reporting import generate_multichannel_report
channels = tk.load_all_channels("multi_channel.wfm")
report = generate_multichannel_report(channels)
save_pdf_report(report, "multichannel_report.pdf")
Chart Selection¶
Automatic Chart Selection¶
from tracekit.reporting import auto_select_chart, ChartType
# Auto-select best chart type
chart_type = auto_select_chart(data, measurement_type="frequency")
# Returns: ChartType.LINE, ChartType.HISTOGRAM, etc.
Chart Recommendations¶
from tracekit.reporting import recommend_chart_with_reasoning
recommendation = recommend_chart_with_reasoning(data, context="time_series")
print(f"Recommended: {recommendation['chart_type']}")
print(f"Reasoning: {recommendation['reasoning']}")
Axis Scaling¶
from tracekit.reporting import get_axis_scaling
scaling = get_axis_scaling(data)
print(f"X range: {scaling['x_min']} to {scaling['x_max']}")
print(f"Y range: {scaling['y_min']} to {scaling['y_max']}")
print(f"Log scale recommended: {scaling['use_log']}")
Templates¶
Using Templates¶
from tracekit.reporting import load_template, list_templates, ReportTemplate
# List available templates
templates = list_templates()
for name in templates:
print(name)
# Load and use template
template = load_template("standard")
report = template.generate(results)
Custom Templates¶
from tracekit.reporting import ReportTemplate, TemplateSection
template = ReportTemplate(
name="custom",
sections=[
TemplateSection(name="summary", required=True),
TemplateSection(name="measurements", required=True),
TemplateSection(name="plots", required=False),
],
style={
"font_family": "Arial",
"primary_color": "#0066cc",
}
)
Visual Standards¶
Formatting Standards¶
from tracekit.reporting import FormatStandards, ColorScheme, Severity
# Access standard colors
print(ColorScheme.PASS) # Green
print(ColorScheme.FAIL) # Red
print(ColorScheme.WARNING) # Yellow
# Severity levels
Severity.CRITICAL
Severity.WARNING
Severity.INFO
Visual Emphasis¶
from tracekit.reporting import VisualEmphasis
# Apply emphasis based on value
emphasis = VisualEmphasis.for_value(
value=95.5,
threshold_warning=90,
threshold_critical=80
)
print(emphasis.color)
print(emphasis.icon)
Progress Tracking¶
from tracekit.reporting import analyze, ProgressCallback, ProgressInfo
def on_progress(info: ProgressInfo):
print(f"[{info.percent:3.0f}%] {info.current_domain}: {info.message}")
results = analyze(
trace,
progress_callback=on_progress
)
Summary Generation¶
from tracekit.reporting import generate_summary, Summary, Finding
summary = generate_summary(results)
print(f"Overall status: {summary.status}")
print(f"Key findings:")
for finding in summary.findings:
print(f" [{finding.severity}] {finding.message}")
Analysis Engine¶
For advanced use cases, use the AnalysisEngine directly:
from tracekit.reporting import AnalysisEngine
engine = AnalysisEngine()
# Run analysis
results = engine.analyze(trace, domains=[AnalysisDomain.WAVEFORM])
# Get available analyses
available = engine.get_available_analyses()
See Also¶
- Loader API - Data loading
- Analysis API - Analysis functions
- Export API - Data export
- Visualization API - Plotting utilities