Skip to content

reporting.report_writer

report_writer

Multi-format report generation: DOCX, PDF, TXT, MD, CSV, HTML, JSON.

Each report contains: 1. Results section - computed constants, deviations, comparison tables 2. Execution log - complete timestamped log of all computations

All reports are saved as separate files in the output directory.

ReportWriter

ReportWriter(output_dir: str = 'output/reports', formats: list[str] | None = None)

Generate reports in 7 formats with execution logs appended.

Source code in src/reporting/report_writer.py
def __init__(self, output_dir: str = "output/reports",
             formats: list[str] | None = None):
    self.output_dir = Path(output_dir)
    self.output_dir.mkdir(parents=True, exist_ok=True)
    self.formats = formats or ["docx", "pdf", "txt", "md", "csv", "html", "json"]
    logger.info(f"ReportWriter: output={self.output_dir}, formats={self.formats}")
generate_all
generate_all(results: dict, logs: str, title: str = 'Choptyuk Spinor Corrections - Verification Report') -> dict[str, str]

Generate reports in all configured formats.

Source code in src/reporting/report_writer.py
def generate_all(self, results: dict, logs: str,
                 title: str = "Choptyuk Spinor Corrections - Verification Report") -> dict[str, str]:
    """Generate reports in all configured formats."""
    timestamp = datetime.now(tz=timezone.utc).strftime("%Y%m%d_%H%M%S")
    paths = {}
    for fmt in self.formats:
        try:
            if fmt == "json":
                paths[fmt] = self._write_json(results, logs, timestamp)
            elif fmt == "txt":
                paths[fmt] = self._write_txt(results, logs, title, timestamp)
            elif fmt == "md":
                paths[fmt] = self._write_md(results, logs, title, timestamp)
            elif fmt == "csv":
                paths[fmt] = self._write_csv(results, logs, timestamp)
            elif fmt == "html":
                paths[fmt] = self._write_html(results, logs, title, timestamp)
            elif fmt == "docx":
                paths[fmt] = self._write_docx(results, logs, title, timestamp)
            elif fmt == "pdf":
                paths[fmt] = self._write_pdf(results, logs, title, timestamp)
            else:
                logger.warning(f"Unknown format: {fmt}")
        except OSError as e:
            logger.error(f"Failed to generate {fmt} report: {e}")
    return paths