{ "cells": [ { "cell_type": "markdown", "id": "a0b20c11", "metadata": {}, "source": [ "# RapidReport — Quick Word reports from Python\n", "\n", "`RapidReport` creates Word documents (`.docx`) with a simple API.\n", "Ideal for generating reports from Jupyter notebooks or automated scripts.\n", "\n", "Features:\n", "- Title page (title, author, date, document hash)\n", "- Automatic table of contents\n", "- Titles, paragraphs (with **bold** and *italic*)\n", "- Figures with automatic numbering and captions\n", "- Bullet lists\n", "- Tables" ] }, { "cell_type": "code", "execution_count": 1, "id": "a10518bf", "metadata": {}, "outputs": [], "source": [ "from wolfhece.report.reporting import RapidReport\n", "from pathlib import Path\n", "import tempfile" ] }, { "cell_type": "markdown", "id": "ef36f797", "metadata": {}, "source": [ "## Creating a report" ] }, { "cell_type": "code", "execution_count": 2, "id": "7f49188f", "metadata": {}, "outputs": [], "source": [ "rapport = RapidReport('Flood Analysis Report', 'Pierre Archambeau')" ] }, { "cell_type": "markdown", "id": "7d947ce7", "metadata": {}, "source": [ "## Adding content" ] }, { "cell_type": "code", "execution_count": 3, "id": "6997efa9", "metadata": {}, "outputs": [], "source": [ "# Title (level 0 = main, 1 = sub, etc.)\n", "rapport.add_title('Introduction', level=0)\n", "\n", "# Paragraph with markdown-style formatting\n", "rapport.add_paragraph(\n", " 'This report presents the results of the **flood simulation** '\n", " 'for the *Vesdre* catchment using WOLF2D GPU.'\n", ")\n", "\n", "# Using += operator for quick text addition\n", "rapport += 'Additional notes can be added this way.\\nWith line breaks.'" ] }, { "cell_type": "code", "execution_count": 4, "id": "0b8b64ab", "metadata": {}, "outputs": [], "source": [ "# Bullet list\n", "rapport.add_title('Key findings', level=1)\n", "rapport.add_bullet_list([\n", " 'Maximum water depth: 3.2 m',\n", " 'Peak discharge: 450 m³/s',\n", " 'Flood duration: 12 hours',\n", " 'Affected buildings: 127',\n", "])" ] }, { "cell_type": "code", "execution_count": 5, "id": "4c86d6ea", "metadata": {}, "outputs": [], "source": [ "# Table from list of lists (first row = header)\n", "rapport.add_title('Simulation parameters', level=1)\n", "rapport.add_table_from_listoflists([\n", " ['Parameter', 'Value', 'Unit'],\n", " ['Grid resolution', '1.0', 'm'],\n", " ['Manning coefficient', '0.035', 's/m^(1/3)'],\n", " ['Time step', '0.5', 's'],\n", " ['Simulation duration', '86400', 's'],\n", "])" ] }, { "cell_type": "code", "execution_count": 6, "id": "f3575b4d", "metadata": {}, "outputs": [ { "data": { "image/png": "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Dzedg2vXrmnNmjXT8ubNq6a9Fy9eXOvVq5cWExPDc5BBUmp7uUybNs22zfXr17V+/fppuXLl0rJly6Z16NBBi46O5jlwQ/ufOHFCq1+/vhYWFqb+DypdurQ2dOhQLT4+Pk2v43f3xYiIiIjoPpjTREREROQEBk1ERERETmDQREREROQEBk1ERERETmDQREREROQEBk1ERERETmDQREREROQEBk1ERERETmDQREQe4/nnnzdl6ZXp06fDz89PXWRJGEOJEiXUEkn3Y/ycLBpNRJ6Na88RkSVIYHE/sn7gp59+qhbmNIOsFSYLrAYHB6fp56KjozF37lx1/ETk2Rg0EZElSHBhkCBj5MiRKkgxhISEqIuZQZ0sdptW8jOyaCgReT4OzxGRJUhwYVwkyDCCFOMiAVPy4bmGDRuqleJlyCxXrlzInz8/vvrqK1y9ehU9evRQq52XLl0aS5cudXit3bt3o2XLlmqf8jPdunXDuXPn0nXc165dwwsvvKBeq1ixYvjyyy8fuC2IyJoYNBGRR5sxYwby5MmDLVu2qACqb9++ePLJJ1GnTh1s374dzZo1U0GRBDciLi4OjRo1QtWqVfHHH39g2bJlOHPmDJ566ql0vf5HH32EiIgI/Pnnn+jXr596ffseMiLyHgyaiMijValSBcOHD0eZMmUwbNgwZMmSRQVRvXr1Uo/JMN/58+fx119/qe0///xzFTC99957KF++vLr9zTffYO3atTh48GCaX79Vq1YqWJIerddff129tuyLiLwPc5qIyKNVrlzZdtvf3x+5c+dGeHi47TEZfhOxsbHqeufOnSqoSSk/6siRIyhbtmy6X98YUjRei4i8C4MmIvJoAQEBDvclcLF/zJiVl5iYqK6vXLmCtm3b4oMPPrhnXwULFsyQ1zdei4i8C4MmIvIp1apVw7x581SNpcyZ+V8gETmPOU1E5FP69++PCxcuoEuXLti6dasaklu+fLmabZeQkGD24RGRhTFoIiKfUqhQIfz+++8qQJKZdZL/JCULpGJ3pkz8L5GIUuenmVVel4jIQ8gyKhJYSbkCM36eiKyBf1YRETkhPj5ezbiTsgJpIT/Tp08ftjGRF2BPExHRv7h8+bIqgClkGE9qMTnr8OHDtnIIJUuWZFsTeTAGTURERERO4PAcERERkRMYNBERERE5gUETERERkRMYNBERERE5gUETERERkRMYNBERERE5gUETERERkRMYNBERERE5gUETEREREf7d/wOyY7xGAhVxhgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Figure with caption (auto-numbered)\n", "# Here we create a sample matplotlib figure and save it\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "tmpdir = Path(tempfile.mkdtemp())\n", "fig_path = tmpdir / 'hydrograph.png'\n", "\n", "t = np.linspace(0, 24, 200)\n", "q = 100 + 350 * np.exp(-((t - 8)**2) / 4)\n", "\n", "fig, ax = plt.subplots(figsize=(6, 3))\n", "ax.plot(t, q, 'b-')\n", "ax.set_xlabel('Time [h]'); ax.set_ylabel('Q [m³/s]')\n", "ax.set_title('Upstream hydrograph')\n", "plt.tight_layout()\n", "fig.savefig(fig_path, dpi=150)\n", "plt.show()\n", "\n", "# Add to report\n", "rapport.add_figure(str(fig_path), 'Upstream hydrograph at the inlet boundary.')" ] }, { "cell_type": "markdown", "id": "fce2c971", "metadata": {}, "source": [ "## Saving the report" ] }, { "cell_type": "code", "execution_count": 7, "id": "15ca6717", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Report saved to C:\\Users\\pierre\\AppData\\Local\\Temp\\tmpl26cxg8t\\flood_report.docx\n" ] } ], "source": [ "output_path = tmpdir / 'flood_report.docx'\n", "rapport.save(str(output_path))\n", "print(f\"Report saved to {output_path}\")" ] }, { "cell_type": "markdown", "id": "a65f61a5", "metadata": {}, "source": [ "## Customizing fonts" ] }, { "cell_type": "code", "execution_count": 8, "id": "54259681", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Done\n" ] } ], "source": [ "# Change default font (applied to new content)\n", "rapport2 = RapidReport('Custom Font Report', 'Alice')\n", "rapport2.set_font(fontname='Calibri', fontsize=11)\n", "rapport2.add_title('Test', level=0)\n", "rapport2.add_paragraph('This uses Calibri 11pt.')\n", "rapport2.save(str(tmpdir / 'custom_font.docx'))\n", "print('Done')" ] }, { "cell_type": "markdown", "id": "c185dcfc", "metadata": {}, "source": [ "## Summary\n", "\n", "| Method | Purpose |\n", "|--------|---------|\n", "| `RapidReport(title, author)` | Create a new report |\n", "| `add_title(text, level)` | Section heading |\n", "| `add_paragraph(text)` | Body text (supports `**bold**` and `*italic*`) |\n", "| `+= text` | Quick paragraph addition |\n", "| `add_figure(path, caption)` | Auto-numbered figure |\n", "| `add_bullet_list(items)` | Bullet list |\n", "| `add_table_from_listoflists(data)` | Table (first row = header) |\n", "| `set_font(name, size)` | Customize typography |\n", "| `save(path)` | Export as `.docx` |" ] } ], "metadata": { "kernelspec": { "display_name": "python311", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.9" } }, "nbformat": 4, "nbformat_minor": 5 }