Predefined Directory Case Study - Notebook#
This notebook is a basic demo of the Vuegen Python library. This sofwtare automates the creation of reports based on a directory with plots, dataframes, and other files in different formats. A YAML configuration file is generated from the directory to define the structure of the report. Users can customize the report by modifying the configuration file, or they can create their own configuration file instead of passing a directory as input.
The configuration file specifies the structure of the report, including sections, subsections, and various components such as plots, dataframes, markdown, html, and API calls. Reports can be generated in various formats, including documents (PDF, HTML, DOCX, ODT), presentations (PPTX, Reveal.js), notebooks (Jupyter) or Streamlit web applications.
An overview of the VueGen workflow is shown in the figure below:

This introductory case study familiarizes users with the tool, its report types, file formats, and other features. In this example, a directory with plots, dataframes, Markdown, and HTML components is provided. An advanced example can be found here.
Notebook structure#
First, we will set up the work environment by installing the necessary packages and importing the required libraries. Next, we will create various reports using the example directory. Finally, we will extend the report by modifying the configuration file to include additional components.
Credits and Contributors#
This notebook was created by Sebastián Ayala-Ruano under the supervision of Henry Webel and Alberto Santos, head of the Multiomics Network Analytics Group (MoNA) at the Novo Nordisk Foundation Center for Biosustainability (DTU Biosustain).
You can find more details about the project in this GitHub repository.
0. Work environment setup#
0.1. Installing libraries and creating global variables for platform and working directory#
To run this notebook locally, you should create a virtual environment with the required libraries. If you are running this notebook on Google Colab, everything should be set.
# Vuegen library
%pip install vuegen
Show code cell output
Hide code cell output
Requirement already satisfied: vuegen in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (0.6.0.post1.dev0+1a42fa3)
Requirement already satisfied: altair[save] in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from vuegen) (6.0.0)
Requirement already satisfied: dataframe-image<0.3.0,>=0.2.6 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from vuegen) (0.2.7)
Requirement already satisfied: itables<3.0.0,>=2.2.2 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from vuegen) (2.7.0)
Requirement already satisfied: kaleido<0.3.0,>=0.2.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from vuegen) (0.2.1)
Requirement already satisfied: matplotlib<4.0.0,>=3.9.2 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from vuegen) (3.10.8)
Requirement already satisfied: nbclient<0.11.0,>=0.10.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from vuegen) (0.10.4)
Requirement already satisfied: nbformat<6.0.0,>=5.10.4 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from vuegen) (5.10.4)
Requirement already satisfied: openpyxl<4.0.0,>=3.1.5 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from vuegen) (3.1.5)
Requirement already satisfied: pandas<3.0.0,>=2.2.2 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from pandas[parquet]<3.0.0,>=2.2.2->vuegen) (2.3.3)
Requirement already satisfied: plotly<6.0.0,>=5.15.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from vuegen) (5.24.1)
Requirement already satisfied: pyvis<0.4.0,>=0.3.2 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from vuegen) (0.3.2)
Requirement already satisfied: pyyaml<7.0.0,>=6.0.2 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from vuegen) (6.0.3)
Requirement already satisfied: quarto-cli in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from vuegen) (1.8.27)
Requirement already satisfied: streamlit<2.0.0,>=1.39.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from vuegen) (1.54.0)
Requirement already satisfied: streamlit-aggrid in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from vuegen) (1.2.1.post2)
Requirement already satisfied: vl-convert-python<2.0.0,>=1.7.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from vuegen) (1.9.0.post1)
Requirement already satisfied: xlrd<3.0.0,>=2.0.1 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from vuegen) (2.0.2)
Requirement already satisfied: nbconvert>=5 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from dataframe-image<0.3.0,>=0.2.6->vuegen) (7.17.0)
Requirement already satisfied: aiohttp>=3.10.2 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from dataframe-image<0.3.0,>=0.2.6->vuegen) (3.13.3)
Requirement already satisfied: requests in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from dataframe-image<0.3.0,>=0.2.6->vuegen) (2.32.5)
Requirement already satisfied: pillow in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from dataframe-image<0.3.0,>=0.2.6->vuegen) (12.1.0)
Requirement already satisfied: packaging in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from dataframe-image<0.3.0,>=0.2.6->vuegen) (26.0)
Requirement already satisfied: mistune in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from dataframe-image<0.3.0,>=0.2.6->vuegen) (3.2.0)
Requirement already satisfied: lxml in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from dataframe-image<0.3.0,>=0.2.6->vuegen) (6.0.2)
Requirement already satisfied: beautifulsoup4 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from dataframe-image<0.3.0,>=0.2.6->vuegen) (4.14.3)
Requirement already satisfied: cssutils in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from dataframe-image<0.3.0,>=0.2.6->vuegen) (2.11.1)
Requirement already satisfied: playwright in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from dataframe-image<0.3.0,>=0.2.6->vuegen) (1.58.0)
Requirement already satisfied: cssselect in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from dataframe-image<0.3.0,>=0.2.6->vuegen) (1.4.0)
Requirement already satisfied: contourpy>=1.0.1 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from matplotlib<4.0.0,>=3.9.2->vuegen) (1.3.3)
Requirement already satisfied: cycler>=0.10 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from matplotlib<4.0.0,>=3.9.2->vuegen) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from matplotlib<4.0.0,>=3.9.2->vuegen) (4.61.1)
Requirement already satisfied: kiwisolver>=1.3.1 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from matplotlib<4.0.0,>=3.9.2->vuegen) (1.4.9)
Requirement already satisfied: numpy>=1.23 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from matplotlib<4.0.0,>=3.9.2->vuegen) (2.4.2)
Requirement already satisfied: pyparsing>=3 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from matplotlib<4.0.0,>=3.9.2->vuegen) (3.3.2)
Requirement already satisfied: python-dateutil>=2.7 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from matplotlib<4.0.0,>=3.9.2->vuegen) (2.9.0.post0)
Requirement already satisfied: jupyter-client>=6.1.12 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from nbclient<0.11.0,>=0.10.0->vuegen) (8.8.0)
Requirement already satisfied: jupyter-core!=5.0.*,>=4.12 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from nbclient<0.11.0,>=0.10.0->vuegen) (5.9.1)
Requirement already satisfied: traitlets>=5.4 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from nbclient<0.11.0,>=0.10.0->vuegen) (5.14.3)
Requirement already satisfied: fastjsonschema>=2.15 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from nbformat<6.0.0,>=5.10.4->vuegen) (2.21.2)
Requirement already satisfied: jsonschema>=2.6 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from nbformat<6.0.0,>=5.10.4->vuegen) (4.26.0)
Requirement already satisfied: et-xmlfile in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from openpyxl<4.0.0,>=3.1.5->vuegen) (2.0.0)
Requirement already satisfied: pytz>=2020.1 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from pandas<3.0.0,>=2.2.2->pandas[parquet]<3.0.0,>=2.2.2->vuegen) (2025.2)
Requirement already satisfied: tzdata>=2022.7 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from pandas<3.0.0,>=2.2.2->pandas[parquet]<3.0.0,>=2.2.2->vuegen) (2025.3)
Requirement already satisfied: pyarrow>=10.0.1 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from pandas[parquet]<3.0.0,>=2.2.2->vuegen) (23.0.0)
Requirement already satisfied: tenacity>=6.2.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from plotly<6.0.0,>=5.15.0->vuegen) (9.1.4)
Requirement already satisfied: ipython>=5.3.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from pyvis<0.4.0,>=0.3.2->vuegen) (9.10.0)
Requirement already satisfied: jinja2>=2.9.6 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from pyvis<0.4.0,>=0.3.2->vuegen) (3.1.6)
Requirement already satisfied: jsonpickle>=1.4.1 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from pyvis<0.4.0,>=0.3.2->vuegen) (4.1.1)
Requirement already satisfied: networkx>=1.11 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from pyvis<0.4.0,>=0.3.2->vuegen) (3.6.1)
Requirement already satisfied: blinker<2,>=1.5.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from streamlit<2.0.0,>=1.39.0->vuegen) (1.9.0)
Requirement already satisfied: cachetools<7,>=5.5 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from streamlit<2.0.0,>=1.39.0->vuegen) (6.2.6)
Requirement already satisfied: click<9,>=7.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from streamlit<2.0.0,>=1.39.0->vuegen) (8.3.1)
Requirement already satisfied: gitpython!=3.1.19,<4,>=3.0.7 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from streamlit<2.0.0,>=1.39.0->vuegen) (3.1.46)
Requirement already satisfied: pydeck<1,>=0.8.0b4 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from streamlit<2.0.0,>=1.39.0->vuegen) (0.9.1)
Requirement already satisfied: protobuf<7,>=3.20 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from streamlit<2.0.0,>=1.39.0->vuegen) (6.33.5)
Requirement already satisfied: toml<2,>=0.10.1 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from streamlit<2.0.0,>=1.39.0->vuegen) (0.10.2)
Requirement already satisfied: tornado!=6.5.0,<7,>=6.0.3 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from streamlit<2.0.0,>=1.39.0->vuegen) (6.5.4)
Requirement already satisfied: typing-extensions<5,>=4.10.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from streamlit<2.0.0,>=1.39.0->vuegen) (4.15.0)
Requirement already satisfied: watchdog<7,>=2.1.5 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from streamlit<2.0.0,>=1.39.0->vuegen) (6.0.0)
Requirement already satisfied: narwhals>=1.27.1 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from altair[save]->vuegen) (2.16.0)
Requirement already satisfied: gitdb<5,>=4.0.1 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from gitpython!=3.1.19,<4,>=3.0.7->streamlit<2.0.0,>=1.39.0->vuegen) (4.0.12)
Requirement already satisfied: smmap<6,>=3.0.1 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from gitdb<5,>=4.0.1->gitpython!=3.1.19,<4,>=3.0.7->streamlit<2.0.0,>=1.39.0->vuegen) (5.0.2)
Requirement already satisfied: charset_normalizer<4,>=2 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from requests->dataframe-image<0.3.0,>=0.2.6->vuegen) (3.4.4)
Requirement already satisfied: idna<4,>=2.5 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from requests->dataframe-image<0.3.0,>=0.2.6->vuegen) (3.11)
Requirement already satisfied: urllib3<3,>=1.21.1 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from requests->dataframe-image<0.3.0,>=0.2.6->vuegen) (2.6.3)
Requirement already satisfied: certifi>=2017.4.17 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from requests->dataframe-image<0.3.0,>=0.2.6->vuegen) (2026.1.4)
Requirement already satisfied: aiohappyeyeballs>=2.5.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from aiohttp>=3.10.2->dataframe-image<0.3.0,>=0.2.6->vuegen) (2.6.1)
Requirement already satisfied: aiosignal>=1.4.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from aiohttp>=3.10.2->dataframe-image<0.3.0,>=0.2.6->vuegen) (1.4.0)
Requirement already satisfied: attrs>=17.3.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from aiohttp>=3.10.2->dataframe-image<0.3.0,>=0.2.6->vuegen) (25.4.0)
Requirement already satisfied: frozenlist>=1.1.1 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from aiohttp>=3.10.2->dataframe-image<0.3.0,>=0.2.6->vuegen) (1.8.0)
Requirement already satisfied: multidict<7.0,>=4.5 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from aiohttp>=3.10.2->dataframe-image<0.3.0,>=0.2.6->vuegen) (6.7.1)
Requirement already satisfied: propcache>=0.2.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from aiohttp>=3.10.2->dataframe-image<0.3.0,>=0.2.6->vuegen) (0.4.1)
Requirement already satisfied: yarl<2.0,>=1.17.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from aiohttp>=3.10.2->dataframe-image<0.3.0,>=0.2.6->vuegen) (1.22.0)
Requirement already satisfied: decorator>=4.3.2 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from ipython>=5.3.0->pyvis<0.4.0,>=0.3.2->vuegen) (5.2.1)
Requirement already satisfied: ipython-pygments-lexers>=1.0.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from ipython>=5.3.0->pyvis<0.4.0,>=0.3.2->vuegen) (1.1.1)
Requirement already satisfied: jedi>=0.18.1 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from ipython>=5.3.0->pyvis<0.4.0,>=0.3.2->vuegen) (0.19.2)
Requirement already satisfied: matplotlib-inline>=0.1.5 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from ipython>=5.3.0->pyvis<0.4.0,>=0.3.2->vuegen) (0.2.1)
Requirement already satisfied: pexpect>4.3 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from ipython>=5.3.0->pyvis<0.4.0,>=0.3.2->vuegen) (4.9.0)
Requirement already satisfied: prompt_toolkit<3.1.0,>=3.0.41 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from ipython>=5.3.0->pyvis<0.4.0,>=0.3.2->vuegen) (3.0.52)
Requirement already satisfied: pygments>=2.11.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from ipython>=5.3.0->pyvis<0.4.0,>=0.3.2->vuegen) (2.19.2)
Requirement already satisfied: stack_data>=0.6.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from ipython>=5.3.0->pyvis<0.4.0,>=0.3.2->vuegen) (0.6.3)
Requirement already satisfied: wcwidth in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from prompt_toolkit<3.1.0,>=3.0.41->ipython>=5.3.0->pyvis<0.4.0,>=0.3.2->vuegen) (0.6.0)
Requirement already satisfied: parso<0.9.0,>=0.8.4 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jedi>=0.18.1->ipython>=5.3.0->pyvis<0.4.0,>=0.3.2->vuegen) (0.8.6)
Requirement already satisfied: MarkupSafe>=2.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jinja2>=2.9.6->pyvis<0.4.0,>=0.3.2->vuegen) (3.0.3)
Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jsonschema>=2.6->nbformat<6.0.0,>=5.10.4->vuegen) (2025.9.1)
Requirement already satisfied: referencing>=0.28.4 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jsonschema>=2.6->nbformat<6.0.0,>=5.10.4->vuegen) (0.37.0)
Requirement already satisfied: rpds-py>=0.25.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jsonschema>=2.6->nbformat<6.0.0,>=5.10.4->vuegen) (0.30.0)
Requirement already satisfied: pyzmq>=25.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyter-client>=6.1.12->nbclient<0.11.0,>=0.10.0->vuegen) (27.1.0)
Requirement already satisfied: platformdirs>=2.5 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyter-core!=5.0.*,>=4.12->nbclient<0.11.0,>=0.10.0->vuegen) (4.5.1)
Requirement already satisfied: bleach!=5.0.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from bleach[css]!=5.0.0->nbconvert>=5->dataframe-image<0.3.0,>=0.2.6->vuegen) (6.3.0)
Requirement already satisfied: defusedxml in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from nbconvert>=5->dataframe-image<0.3.0,>=0.2.6->vuegen) (0.7.1)
Requirement already satisfied: jupyterlab-pygments in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from nbconvert>=5->dataframe-image<0.3.0,>=0.2.6->vuegen) (0.3.0)
Requirement already satisfied: pandocfilters>=1.4.1 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from nbconvert>=5->dataframe-image<0.3.0,>=0.2.6->vuegen) (1.5.1)
Requirement already satisfied: webencodings in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from bleach!=5.0.0->bleach[css]!=5.0.0->nbconvert>=5->dataframe-image<0.3.0,>=0.2.6->vuegen) (0.5.1)
Requirement already satisfied: tinycss2<1.5,>=1.1.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from bleach[css]!=5.0.0->nbconvert>=5->dataframe-image<0.3.0,>=0.2.6->vuegen) (1.4.0)
Requirement already satisfied: ptyprocess>=0.5 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from pexpect>4.3->ipython>=5.3.0->pyvis<0.4.0,>=0.3.2->vuegen) (0.7.0)
Requirement already satisfied: six>=1.5 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib<4.0.0,>=3.9.2->vuegen) (1.17.0)
Requirement already satisfied: executing>=1.2.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from stack_data>=0.6.0->ipython>=5.3.0->pyvis<0.4.0,>=0.3.2->vuegen) (2.2.1)
Requirement already satisfied: asttokens>=2.1.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from stack_data>=0.6.0->ipython>=5.3.0->pyvis<0.4.0,>=0.3.2->vuegen) (3.0.1)
Requirement already satisfied: pure-eval in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from stack_data>=0.6.0->ipython>=5.3.0->pyvis<0.4.0,>=0.3.2->vuegen) (0.2.3)
Requirement already satisfied: soupsieve>=1.6.1 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from beautifulsoup4->dataframe-image<0.3.0,>=0.2.6->vuegen) (2.8.3)
Requirement already satisfied: more-itertools in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from cssutils->dataframe-image<0.3.0,>=0.2.6->vuegen) (10.8.0)
Requirement already satisfied: pyee<14,>=13 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from playwright->dataframe-image<0.3.0,>=0.2.6->vuegen) (13.0.0)
Requirement already satisfied: greenlet<4.0.0,>=3.1.1 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from playwright->dataframe-image<0.3.0,>=0.2.6->vuegen) (3.3.1)
Requirement already satisfied: jupyter in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from quarto-cli->vuegen) (1.1.1)
Requirement already satisfied: wheel in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from quarto-cli->vuegen) (0.40.0)
Requirement already satisfied: notebook in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyter->quarto-cli->vuegen) (7.5.3)
Requirement already satisfied: jupyter-console in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyter->quarto-cli->vuegen) (6.6.3)
Requirement already satisfied: ipykernel in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyter->quarto-cli->vuegen) (7.2.0)
Requirement already satisfied: ipywidgets in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyter->quarto-cli->vuegen) (8.1.8)
Requirement already satisfied: jupyterlab in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyter->quarto-cli->vuegen) (4.5.3)
Requirement already satisfied: comm>=0.1.1 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from ipykernel->jupyter->quarto-cli->vuegen) (0.2.3)
Requirement already satisfied: debugpy>=1.6.5 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from ipykernel->jupyter->quarto-cli->vuegen) (1.8.20)
Requirement already satisfied: nest-asyncio>=1.4 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from ipykernel->jupyter->quarto-cli->vuegen) (1.6.0)
Requirement already satisfied: psutil>=5.7 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from ipykernel->jupyter->quarto-cli->vuegen) (7.2.2)
Requirement already satisfied: widgetsnbextension~=4.0.14 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from ipywidgets->jupyter->quarto-cli->vuegen) (4.0.15)
Requirement already satisfied: jupyterlab_widgets~=3.0.15 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from ipywidgets->jupyter->quarto-cli->vuegen) (3.0.16)
Requirement already satisfied: async-lru>=1.0.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyterlab->jupyter->quarto-cli->vuegen) (2.1.0)
Requirement already satisfied: httpx<1,>=0.25.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyterlab->jupyter->quarto-cli->vuegen) (0.28.1)
Requirement already satisfied: jupyter-lsp>=2.0.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyterlab->jupyter->quarto-cli->vuegen) (2.3.0)
Requirement already satisfied: jupyter-server<3,>=2.4.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyterlab->jupyter->quarto-cli->vuegen) (2.17.0)
Requirement already satisfied: jupyterlab-server<3,>=2.28.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyterlab->jupyter->quarto-cli->vuegen) (2.28.0)
Requirement already satisfied: notebook-shim>=0.2 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyterlab->jupyter->quarto-cli->vuegen) (0.2.4)
Requirement already satisfied: setuptools>=41.1.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyterlab->jupyter->quarto-cli->vuegen) (82.0.0)
Requirement already satisfied: anyio in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from httpx<1,>=0.25.0->jupyterlab->jupyter->quarto-cli->vuegen) (4.12.1)
Requirement already satisfied: httpcore==1.* in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from httpx<1,>=0.25.0->jupyterlab->jupyter->quarto-cli->vuegen) (1.0.9)
Requirement already satisfied: h11>=0.16 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from httpcore==1.*->httpx<1,>=0.25.0->jupyterlab->jupyter->quarto-cli->vuegen) (0.16.0)
Requirement already satisfied: argon2-cffi>=21.1 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter->quarto-cli->vuegen) (25.1.0)
Requirement already satisfied: jupyter-events>=0.11.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter->quarto-cli->vuegen) (0.12.0)
Requirement already satisfied: jupyter-server-terminals>=0.4.4 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter->quarto-cli->vuegen) (0.5.4)
Requirement already satisfied: overrides>=5.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter->quarto-cli->vuegen) (7.7.0)
Requirement already satisfied: prometheus-client>=0.9 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter->quarto-cli->vuegen) (0.24.1)
Requirement already satisfied: send2trash>=1.8.2 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter->quarto-cli->vuegen) (2.1.0)
Requirement already satisfied: terminado>=0.8.3 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter->quarto-cli->vuegen) (0.18.1)
Requirement already satisfied: websocket-client>=1.7 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter->quarto-cli->vuegen) (1.9.0)
Requirement already satisfied: babel>=2.10 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyterlab-server<3,>=2.28.0->jupyterlab->jupyter->quarto-cli->vuegen) (2.18.0)
Requirement already satisfied: json5>=0.9.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyterlab-server<3,>=2.28.0->jupyterlab->jupyter->quarto-cli->vuegen) (0.13.0)
Requirement already satisfied: argon2-cffi-bindings in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from argon2-cffi>=21.1->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->quarto-cli->vuegen) (25.1.0)
Requirement already satisfied: python-json-logger>=2.0.4 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->quarto-cli->vuegen) (4.0.0)
Requirement already satisfied: rfc3339-validator in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->quarto-cli->vuegen) (0.1.4)
Requirement already satisfied: rfc3986-validator>=0.1.1 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->quarto-cli->vuegen) (0.1.1)
Requirement already satisfied: fqdn in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->quarto-cli->vuegen) (1.5.1)
Requirement already satisfied: isoduration in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->quarto-cli->vuegen) (20.11.0)
Requirement already satisfied: jsonpointer>1.13 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->quarto-cli->vuegen) (3.0.0)
Requirement already satisfied: rfc3987-syntax>=1.1.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->quarto-cli->vuegen) (1.1.0)
Requirement already satisfied: uri-template in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->quarto-cli->vuegen) (1.3.0)
Requirement already satisfied: webcolors>=24.6.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->quarto-cli->vuegen) (25.10.0)
Requirement already satisfied: lark>=1.2.2 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from rfc3987-syntax>=1.1.0->jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->quarto-cli->vuegen) (1.3.1)
Requirement already satisfied: cffi>=1.0.1 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from argon2-cffi-bindings->argon2-cffi>=21.1->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->quarto-cli->vuegen) (2.0.0)
Requirement already satisfied: pycparser in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from cffi>=1.0.1->argon2-cffi-bindings->argon2-cffi>=21.1->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->quarto-cli->vuegen) (3.0)
Requirement already satisfied: arrow>=0.15.0 in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from isoduration->jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.11.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter->quarto-cli->vuegen) (1.4.0)
Requirement already satisfied: python-decouple in /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages (from streamlit-aggrid->vuegen) (3.8)
Note: you may need to restart the kernel to use updated packages.
Show code cell content
Hide code cell content
import os
IN_COLAB = "COLAB_GPU" in os.environ
Show code cell content
Hide code cell content
# Set working directory
if IN_COLAB:
# Clone the repository in Colab
!git clone --depth=1 https://github.com/Multiomics-Analytics-Group/vuegen.git
base_output_dir = "vuegen/docs/example_data/Basic_example_vuegen_demo_notebook/"
else:
# Output directory for local execution
base_output_dir = "./example_data/Basic_example_vuegen_demo_notebook/"
Show code cell content
Hide code cell content
# Optional library to launch a streamlit app from colab
if IN_COLAB:
!npm install localtunnel
0.2. Importing libraries#
Show code cell content
Hide code cell content
# Imports
import yaml
from vuegen import report_generator
from vuegen.utils import load_yaml_config
if IN_COLAB:
import urllib
1. Report generation#
To generate different report types, just modify the report_type variable. The available types are:
streamlit
html
pdf
docx
odt
revealjs
pptx
jupyter
1.1. Streamlit report#
To launch the Streamlit web application from Colab, open the generated URL and copy the localtunnel entry point IP into the corresponding field on the opened page. Once submited, you will be redirected to your Streamlit web application.
# Generate the report
report_type = "streamlit"
report_dir, config_path = report_generator.get_report(
dir_path=base_output_dir, report_type=report_type, logger=None
)
print(f"\nReport generated in {report_dir}")
print(f"\nConfig file generated in {config_path}")
Show code cell output
Hide code cell output
[2026-02-10 13:04:49,249] vuegen: INFO - Path to log file: logs/2026-02-10_13-04-49_report.log
[2026-02-10 13:04:49,414] vuegen: INFO - Configuration file generated at basic_example_vuegen_demo_notebook_config.yaml
[2026-02-10 13:04:49,439] vuegen: INFO - Report 'Basic Example Vuegen Demo Notebook' initialized with 5 sections.
[2026-02-10 13:04:49,441] vuegen: INFO - running in a normal Python process
[2026-02-10 13:04:49,441] vuegen: DEBUG - Generating 'streamlit' report in directory: 'streamlit_report/sections'
[2026-02-10 13:04:49,442] vuegen: INFO - Output directory already existed: 'streamlit_report/sections'
[2026-02-10 13:04:49,444] vuegen: INFO - Output directory for static content already existed: 'streamlit_report/static'
[2026-02-10 13:04:49,444] vuegen: DEBUG - Processing app navigation code.
[2026-02-10 13:04:49,445] vuegen: DEBUG - Processing home section.
[2026-02-10 13:04:49,448] vuegen: DEBUG - Home directory already existed: streamlit_report/sections/Home
[2026-02-10 13:04:49,448] vuegen: INFO - Home page content written to 'streamlit_report/sections/Home/Homepage.py'.
[2026-02-10 13:04:49,449] vuegen: INFO - Home page added to the report manager content.
[2026-02-10 13:04:49,450] vuegen: DEBUG - Created section directory: streamlit_report/sections/Plots
[2026-02-10 13:04:49,451] vuegen: DEBUG - Created section directory: streamlit_report/sections/Dataframes
[2026-02-10 13:04:49,454] vuegen: DEBUG - Created section directory: streamlit_report/sections/Networks
[2026-02-10 13:04:49,454] vuegen: DEBUG - Created section directory: streamlit_report/sections/Html
[2026-02-10 13:04:49,455] vuegen: DEBUG - Created section directory: streamlit_report/sections/Markdown
[2026-02-10 13:04:49,457] vuegen: INFO - Created app navigation script: report_manager.py
[2026-02-10 13:04:49,458] vuegen: INFO - Starting to generate sections for the report.
[2026-02-10 13:04:49,458] vuegen: DEBUG - Processing section '1': 'Plots' - 2 subsection(s)
[2026-02-10 13:04:49,458] vuegen: DEBUG - Processing subsection '1': 'Interactive Plots' - 7 component(s)
[2026-02-10 13:04:49,461] vuegen: INFO - Successfully generated content for plot '1': 'Top Species Plot By Biome Plotly'
[2026-02-10 13:04:49,463] vuegen: INFO - Successfully generated content for plot '2': 'Multiline Plot Altair'
[2026-02-10 13:04:49,463] vuegen: INFO - Successfully generated content for plot '3': 'Pie Plot Countries Plotly'
[2026-02-10 13:04:49,466] vuegen: INFO - Successfully generated content for plot '4': 'Pie Plots Biomes Plotly'
[2026-02-10 13:04:49,467] vuegen: INFO - Successfully generated content for plot '5': 'Saline Metagenomics Samples Map Altair'
[2026-02-10 13:04:49,469] vuegen: INFO - Successfully generated content for plot '6': 'Plotly Plot R'
[2026-02-10 13:04:49,470] vuegen: INFO - Successfully generated content for Markdown: 'Description'
[2026-02-10 13:04:49,470] vuegen: INFO - Generated content and imports for subsection: 'Interactive Plots'
[2026-02-10 13:04:49,471] vuegen: INFO - Subsection file created: 'streamlit_report/sections/Plots/Interactive_Plots.py'
[2026-02-10 13:04:49,471] vuegen: DEBUG - Processing subsection '2': 'Static Plots' - 3 component(s)
[2026-02-10 13:04:49,472] vuegen: INFO - Successfully generated content for plot '7': 'Number Samples Per Study'
[2026-02-10 13:04:49,475] vuegen: INFO - Successfully generated content for plot '8': 'Animal Metagenomics Samples Map'
[2026-02-10 13:04:49,476] vuegen: INFO - Successfully generated content for plot '9': 'Alpha Diversity Host Associated Samples'
[2026-02-10 13:04:49,478] vuegen: INFO - Generated content and imports for subsection: 'Static Plots'
[2026-02-10 13:04:49,479] vuegen: INFO - Subsection file created: 'streamlit_report/sections/Plots/Static_Plots.py'
[2026-02-10 13:04:49,479] vuegen: DEBUG - Processing section '2': 'Dataframes' - 1 subsection(s)
[2026-02-10 13:04:49,481] vuegen: DEBUG - Processing subsection '3': 'All Formats' - 5 component(s)
[2026-02-10 13:04:49,483] vuegen: INFO - Successfully generated content for DataFrame: 'Phyla Correlation Network Csv'
[2026-02-10 13:04:49,499] vuegen: INFO - Successfully generated content for DataFrame: 'Abundance Table Example Xls'
[2026-02-10 13:04:49,500] vuegen: INFO - Successfully generated content for DataFrame: 'Sample Info Example Txt'
[2026-02-10 13:04:49,503] vuegen: INFO - Successfully generated content for DataFrame: 'Sample Info Example Parquet'
[2026-02-10 13:04:49,594] vuegen: INFO - Successfully generated content for DataFrame: 'Example Xlsx'
[2026-02-10 13:04:49,596] vuegen: INFO - Generated content and imports for subsection: 'All Formats'
[2026-02-10 13:04:49,597] vuegen: INFO - Subsection file created: 'streamlit_report/sections/Dataframes/All_Formats.py'
[2026-02-10 13:04:49,598] vuegen: DEBUG - Processing section '3': 'Networks' - 2 subsection(s)
[2026-02-10 13:04:49,599] vuegen: DEBUG - Processing subsection '4': 'Interactive Networks' - 2 component(s)
[2026-02-10 13:04:49,605] vuegen: INFO - Successfully read network from file: /home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/docs/example_data/Basic_example_vuegen_demo_notebook/3_Networks/1_Interactive_networks/1_man_example.graphml.
[2026-02-10 13:04:49,605] vuegen: DEBUG - Try to save network as PyVis network: /home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/docs/streamlit_report/static/Man_Example.html.
[2026-02-10 13:04:49,627] vuegen: INFO - PyVis network created and saved as: /home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/docs/streamlit_report/static/Man_Example.html.
[2026-02-10 13:04:49,628] vuegen: INFO - Successfully generated content for plot '10': 'Man Example'
[2026-02-10 13:04:49,631] vuegen: INFO - Successfully generated content for Markdown: 'Description'
[2026-02-10 13:04:49,631] vuegen: INFO - Generated content and imports for subsection: 'Interactive Networks'
[2026-02-10 13:04:49,632] vuegen: INFO - Subsection file created: 'streamlit_report/sections/Networks/Interactive_Networks.py'
[2026-02-10 13:04:49,634] vuegen: DEBUG - Processing subsection '5': 'Static Networks' - 1 component(s)
[2026-02-10 13:04:49,635] vuegen: INFO - Successfully generated content for plot '11': 'Phyla Correlation Network'
[2026-02-10 13:04:49,637] vuegen: INFO - Generated content and imports for subsection: 'Static Networks'
[2026-02-10 13:04:49,637] vuegen: INFO - Subsection file created: 'streamlit_report/sections/Networks/Static_Networks.py'
[2026-02-10 13:04:49,638] vuegen: DEBUG - Processing section '4': 'Html' - 1 subsection(s)
[2026-02-10 13:04:49,638] vuegen: DEBUG - Processing subsection '6': 'All Html' - 3 component(s)
[2026-02-10 13:04:49,641] vuegen: INFO - Successfully generated content for HTML: 'Plot'
[2026-02-10 13:04:49,646] vuegen: INFO - Successfully generated content for plot '12': 'Ckg Network'
[2026-02-10 13:04:49,647] vuegen: INFO - Successfully generated content for HTML: 'Multiqc Report'
[2026-02-10 13:04:49,648] vuegen: INFO - Generated content and imports for subsection: 'All Html'
[2026-02-10 13:04:49,649] vuegen: INFO - Subsection file created: 'streamlit_report/sections/Html/All_Html.py'
[2026-02-10 13:04:49,650] vuegen: DEBUG - Processing section '5': 'Markdown' - 1 subsection(s)
[2026-02-10 13:04:49,651] vuegen: DEBUG - Processing subsection '7': 'All Markdown' - 1 component(s)
[2026-02-10 13:04:49,652] vuegen: INFO - Successfully generated content for Markdown: 'Readme'
[2026-02-10 13:04:49,653] vuegen: INFO - Generated content and imports for subsection: 'All Markdown'
[2026-02-10 13:04:49,655] vuegen: INFO - Subsection file created: 'streamlit_report/sections/Markdown/All_Markdown.py'
[2026-02-10 13:04:49,656] vuegen: INFO - All the scripts to build the Streamlit app are available at streamlit_report/sections
[2026-02-10 13:04:49,657] vuegen: INFO - To run the Streamlit app, use the following command:
[2026-02-10 13:04:49,658] vuegen: INFO - streamlit run streamlit_report/sections/report_manager.py
All the scripts to build the Streamlit app are available at: streamlit_report/sections
To run the Streamlit app, use the following command:
streamlit run streamlit_report/sections/report_manager.py
Report generated in streamlit_report
Config file generated in basic_example_vuegen_demo_notebook_config.yaml
run_streamlit = False
# run_streamlit = True # uncomment line to run the streamlit report
# Launch the Streamlit report depneding on the platform
if not IN_COLAB and run_streamlit:
!streamlit run streamlit_report/sections/report_manager.py
elif run_streamlit:
# see: https://discuss.streamlit.io/t/how-to-launch-streamlit-app-from-google-colab-notebook/42399
print(
"Password/Enpoint IP for localtunnel is:",
urllib.request.urlopen("https://ipv4.icanhazip.com")
.read()
.decode("utf8")
.strip("\n"),
)
# Run the Streamlit app in the background
!streamlit run streamlit_report/sections/report_manager.py --server.address=localhost &>/content/logs.txt &
# Expose the Streamlit app on port 8501
!npx localtunnel --port 8501 --subdomain vuegen-demo
else:
print("Streamlit report not executed, set run_streamlit to True to run the report")
Show code cell output
Hide code cell output
Streamlit report not executed, set run_streamlit to True to run the report
1.2. HTML and other report types#
# Generate the report
report_type = "html"
report_dir, config_path = report_generator.get_report(
dir_path=base_output_dir, report_type=report_type, logger=None
)
print(f"Report generated at: {report_dir}")
Show code cell output
Hide code cell output
[2026-02-10 13:04:49,681] vuegen: INFO - Path to log file: logs/2026-02-10_13-04-49_report.log
[2026-02-10 13:04:49,957] vuegen: INFO - Configuration file generated at basic_example_vuegen_demo_notebook_config.yaml
[2026-02-10 13:04:49,980] vuegen: INFO - Report 'Basic Example Vuegen Demo Notebook' initialized with 5 sections.
[2026-02-10 13:04:49,982] vuegen: INFO - running in a normal Python process
[2026-02-10 13:04:49,983] vuegen: DEBUG - env_vars (QuartoReport): environ({'READTHEDOCS_VIRTUALENV_PATH': '/home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest', 'READTHEDOCS_CANONICAL_URL': 'https://vuegen.readthedocs.io/en/latest/', 'HOSTNAME': 'build-31350061-project-1135329-vuegen', 'READTHEDOCS_GIT_CLONE_URL': 'https://github.com/Multiomics-Analytics-Group/vuegen.git', 'HOME': '/home/docs', 'NO_COLOR': '1', 'READTHEDOCS': 'True', 'READTHEDOCS_PRODUCTION_DOMAIN': 'app.readthedocs.org', 'READTHEDOCS_REPOSITORY_PATH': '/home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest', 'READTHEDOCS_PROJECT': 'vuegen', 'READTHEDOCS_OUTPUT': '/home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/_readthedocs/', 'PATH': '/home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/bin:/home/docs/.asdf/shims:/home/docs/.asdf/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 'READTHEDOCS_VERSION_TYPE': 'branch', 'LANG': 'C.UTF-8', 'READTHEDOCS_LANGUAGE': 'en', 'DEBIAN_FRONTEND': 'noninteractive', 'READTHEDOCS_GIT_COMMIT_HASH': '1a42fa37f8f843f0111db72fc2c035c6f3ebb2de', 'READTHEDOCS_VERSION_NAME': 'latest', 'READTHEDOCS_VERSION': 'latest', 'PWD': '/home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/docs', 'READTHEDOCS_GIT_IDENTIFIER': 'main', 'DOCUTILSCONFIG': '/home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/docs/docutils.conf', 'MPLBACKEND': 'Agg', 'JPY_PARENT_PID': '704', 'PYDEVD_USE_FRAME_EVAL': 'NO', 'TERM': 'xterm-color', 'CLICOLOR': '1', 'FORCE_COLOR': '1', 'CLICOLOR_FORCE': '1', 'PAGER': 'cat', 'GIT_PAGER': 'cat'})
[2026-02-10 13:04:49,984] vuegen: DEBUG - PATH: /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/bin:/home/docs/.asdf/shims:/home/docs/.asdf/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[2026-02-10 13:04:49,985] vuegen: DEBUG - sys.path: ['/home/docs/.asdf/installs/python/3.11.12/lib/python311.zip', '/home/docs/.asdf/installs/python/3.11.12/lib/python3.11', '/home/docs/.asdf/installs/python/3.11.12/lib/python3.11/lib-dynload', '', '/home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages']
[2026-02-10 13:04:49,988] vuegen: DEBUG - Generating 'html' report in directory: '/home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/docs/quarto_report'
[2026-02-10 13:04:49,988] vuegen: DEBUG - Created output directory: '/home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/docs/quarto_report'
[2026-02-10 13:04:49,990] vuegen: INFO - Created output directory for static content: 'quarto_report/static'
[2026-02-10 13:04:49,992] vuegen: INFO - Starting to generate sections for the report.
[2026-02-10 13:04:49,993] vuegen: DEBUG - Processing section: 'Plots' - 2 subsection(s)
[2026-02-10 13:04:49,994] vuegen: DEBUG - Processing subsection: 'Interactive Plots' - 7 component(s)
[2026-02-10 13:04:49,996] vuegen: DEBUG - component_imports: ['import plotly.io as pio', 'import requests', 'import json']
[2026-02-10 13:04:49,997] vuegen: INFO - Successfully generated content for plot: 'Top Species Plot By Biome Plotly'
[2026-02-10 13:04:49,998] vuegen: DEBUG - component_imports: ['import altair as alt', 'import requests', 'import json']
[2026-02-10 13:04:49,999] vuegen: INFO - Successfully generated content for plot: 'Multiline Plot Altair'
[2026-02-10 13:04:50,002] vuegen: DEBUG - component_imports: ['import plotly.io as pio', 'import requests', 'import json']
[2026-02-10 13:04:50,002] vuegen: INFO - Successfully generated content for plot: 'Pie Plot Countries Plotly'
[2026-02-10 13:04:50,004] vuegen: DEBUG - component_imports: ['import plotly.io as pio', 'import requests', 'import json']
[2026-02-10 13:04:50,006] vuegen: INFO - Successfully generated content for plot: 'Pie Plots Biomes Plotly'
[2026-02-10 13:04:50,007] vuegen: DEBUG - component_imports: ['import altair as alt', 'import requests', 'import json']
[2026-02-10 13:04:50,008] vuegen: INFO - Successfully generated content for plot: 'Saline Metagenomics Samples Map Altair'
[2026-02-10 13:04:50,010] vuegen: DEBUG - component_imports: ['import plotly.io as pio', 'import requests', 'import json']
[2026-02-10 13:04:50,011] vuegen: INFO - Successfully generated content for plot: 'Plotly Plot R'
[2026-02-10 13:04:50,013] vuegen: DEBUG - component_imports: ['import IPython.display as display', 'import requests']
[2026-02-10 13:04:50,013] vuegen: DEBUG - Skipping description.md markdown of section.
[2026-02-10 13:04:50,014] vuegen: INFO - Generated content and imports for subsection: 'Interactive Plots'
[2026-02-10 13:04:50,015] vuegen: DEBUG - Processing subsection: 'Static Plots' - 3 component(s)
[2026-02-10 13:04:50,018] vuegen: DEBUG - component_imports: []
[2026-02-10 13:04:50,018] vuegen: INFO - Successfully generated content for plot: 'Number Samples Per Study'
[2026-02-10 13:04:50,019] vuegen: DEBUG - component_imports: []
[2026-02-10 13:04:50,021] vuegen: INFO - Successfully generated content for plot: 'Animal Metagenomics Samples Map'
[2026-02-10 13:04:50,023] vuegen: DEBUG - component_imports: []
[2026-02-10 13:04:50,024] vuegen: INFO - Successfully generated content for plot: 'Alpha Diversity Host Associated Samples'
[2026-02-10 13:04:50,025] vuegen: INFO - Generated content and imports for subsection: 'Static Plots'
[2026-02-10 13:04:50,027] vuegen: DEBUG - Processing section: 'Dataframes' - 1 subsection(s)
[2026-02-10 13:04:50,027] vuegen: DEBUG - Processing subsection: 'All Formats' - 5 component(s)
[2026-02-10 13:04:50,028] vuegen: DEBUG - component_imports: ['import pandas as pd', 'from itables import show, init_notebook_mode', 'init_notebook_mode(all_interactive=True)']
[2026-02-10 13:04:50,030] vuegen: INFO - Successfully generated content for DataFrame: 'Phyla Correlation Network Csv'
[2026-02-10 13:04:50,032] vuegen: DEBUG - component_imports: ['import pandas as pd', 'from itables import show, init_notebook_mode', 'init_notebook_mode(all_interactive=True)']
[2026-02-10 13:04:50,041] vuegen: INFO - Multiple sheets found in the Excel file: example_data/Basic_example_vuegen_demo_notebook/2_Dataframes/1_All_formats/2_abundance_table_example_xls.xls. Sheets: ['abundance_data_allbiomes', 'infos']
[2026-02-10 13:04:50,042] vuegen: INFO - Successfully generated content for DataFrame: 'Abundance Table Example Xls'
[2026-02-10 13:04:50,043] vuegen: DEBUG - component_imports: ['import pandas as pd', 'from itables import show, init_notebook_mode', 'init_notebook_mode(all_interactive=True)']
[2026-02-10 13:04:50,045] vuegen: INFO - Successfully generated content for DataFrame: 'Sample Info Example Txt'
[2026-02-10 13:04:50,047] vuegen: DEBUG - component_imports: ['import pandas as pd', 'from itables import show, init_notebook_mode', 'init_notebook_mode(all_interactive=True)']
[2026-02-10 13:04:50,048] vuegen: INFO - Successfully generated content for DataFrame: 'Sample Info Example Parquet'
[2026-02-10 13:04:50,049] vuegen: DEBUG - component_imports: ['import pandas as pd', 'from itables import show, init_notebook_mode', 'init_notebook_mode(all_interactive=True)']
[2026-02-10 13:04:50,056] vuegen: INFO - Successfully generated content for DataFrame: 'Example Xlsx'
[2026-02-10 13:04:50,058] vuegen: INFO - Generated content and imports for subsection: 'All Formats'
[2026-02-10 13:04:50,059] vuegen: DEBUG - Processing section: 'Networks' - 2 subsection(s)
[2026-02-10 13:04:50,060] vuegen: DEBUG - Processing subsection: 'Interactive Networks' - 2 component(s)
[2026-02-10 13:04:50,060] vuegen: DEBUG - component_imports: []
[2026-02-10 13:04:50,064] vuegen: INFO - Successfully read network from file: /home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/docs/example_data/Basic_example_vuegen_demo_notebook/3_Networks/1_Interactive_networks/1_man_example.graphml.
[2026-02-10 13:04:50,066] vuegen: DEBUG - Try to save network as PyVis network: /home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/docs/quarto_report/static/Man_Example.html.
[2026-02-10 13:04:50,083] vuegen: INFO - PyVis network created and saved as: /home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/docs/quarto_report/static/Man_Example.html.
[2026-02-10 13:04:50,085] vuegen: INFO - Successfully generated content for plot: 'Man Example'
[2026-02-10 13:04:50,087] vuegen: DEBUG - component_imports: ['import IPython.display as display', 'import requests']
[2026-02-10 13:04:50,087] vuegen: DEBUG - Skipping description.md markdown of section.
[2026-02-10 13:04:50,089] vuegen: INFO - Generated content and imports for subsection: 'Interactive Networks'
[2026-02-10 13:04:50,090] vuegen: DEBUG - Processing subsection: 'Static Networks' - 1 component(s)
[2026-02-10 13:04:50,091] vuegen: DEBUG - component_imports: []
[2026-02-10 13:04:50,092] vuegen: INFO - Successfully generated content for plot: 'Phyla Correlation Network'
[2026-02-10 13:04:50,094] vuegen: INFO - Generated content and imports for subsection: 'Static Networks'
[2026-02-10 13:04:50,094] vuegen: DEBUG - Processing section: 'Html' - 1 subsection(s)
[2026-02-10 13:04:50,096] vuegen: DEBUG - Processing subsection: 'All Html' - 3 component(s)
[2026-02-10 13:04:50,097] vuegen: DEBUG - component_imports: []
[2026-02-10 13:04:50,099] vuegen: INFO - Successfully generated content for HTML: 'Plot'
[2026-02-10 13:04:50,100] vuegen: DEBUG - component_imports: []
[2026-02-10 13:04:50,104] vuegen: INFO - Successfully generated content for plot: 'Ckg Network'
[2026-02-10 13:04:50,106] vuegen: DEBUG - component_imports: []
[2026-02-10 13:04:50,107] vuegen: INFO - Successfully generated content for HTML: 'Multiqc Report'
[2026-02-10 13:04:50,108] vuegen: INFO - Generated content and imports for subsection: 'All Html'
[2026-02-10 13:04:50,110] vuegen: DEBUG - Processing section: 'Markdown' - 1 subsection(s)
[2026-02-10 13:04:50,111] vuegen: DEBUG - Processing subsection: 'All Markdown' - 1 component(s)
[2026-02-10 13:04:50,112] vuegen: DEBUG - component_imports: ['import IPython.display as display', 'import requests']
[2026-02-10 13:04:50,113] vuegen: INFO - Successfully generated content for Markdown: 'Readme'
[2026-02-10 13:04:50,115] vuegen: INFO - Generated content and imports for subsection: 'All Markdown'
[2026-02-10 13:04:50,115] vuegen: INFO - Created qmd script to render the app: /home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/docs/quarto_report/quarto_report.qmd
[2026-02-10 13:04:50,116] vuegen: INFO - Running 'Basic Example Vuegen Demo Notebook' 'html' report with ['quarto', 'render', '/home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/docs/quarto_report/quarto_report.qmd']
[2026-02-10 13:05:20,296] vuegen: INFO - 'Basic Example Vuegen Demo Notebook' 'html' report rendered
Report generated at: quarto_report
Starting python3 kernel...
Done
Executing 'quarto_report.quarto_ipynb'
Cell 1/14: 'Imports'.....................................
Done
Cell 2/14: 'Top Species Plot By Biome Plotly 13'.........Done
Cell 3/14: 'Multiline Plot Altair 14'....................
Done
Cell 4/14: 'Pie Plot Countries Plotly 15'................Done
Cell 5/14: 'Pie Plots Biomes Plotly 16'..................Done
Cell 6/14: 'Saline Metagenomics Samples Map Altair 17'...
Done
Cell 7/14: 'Plotly Plot R 18'............................Done
Cell 8/14: 'Phyla Correlation Network Csv 6'.............Done
Cell 9/14: 'Abundance Table Example Xls 7'...............Done
Cell 10/14: 'Abundance Table Example Xls 7 infos'.........Done
Cell 11/14: 'Sample Info Example Txt 8'...................Done
Cell 12/14: 'Sample Info Example Parquet 9'...............
Done
Cell 13/14: 'Example Xlsx 10'.............................Done
Cell 14/14: 'Readme 6'....................................Done
pandoc
to: html
output-file: quarto_report.html
standalone: true
self-contained: true
section-divs: true
html-math-method: mathjax
wrap: none
default-image-extension: png
toc: true
toc-depth: 3
variables: {}
metadata
document-css: false
link-citations: true
date-format: long
lang: en
title: Basic Example Vuegen Demo Notebook
jupyter: python3
toc-location: left
page-layout: full
Output created: quarto_report.html
2. Extending the report#
Now, we will extend the report by modifying the configuration file to include a logo and graphica abstract in the main page, a descritption for a section and a subsection, and a new plot from a url. We are modifying this file from the notebook, but it is also possible to do it directly in the configuration file with a text editor.
2.1. Adding a logo and graphical abstract#
vuegen_logo_path = "https://raw.githubusercontent.com/Multiomics-Analytics-Group/vuegen/main/docs/images/logo/vuegen_logo.png"
# Load the YAML file
print(
f"Loading the YAML config file from: {config_path}"
) # generated based on directory path above
config = load_yaml_config(config_path)
# Update the logo and graphical abstract with the URL
config["report"].update(
{"logo": vuegen_logo_path, "graphical_abstract": vuegen_logo_path}
)
Show code cell output
Hide code cell output
Loading the YAML config file from: basic_example_vuegen_demo_notebook_config.yaml
2.2. Including a description for a section and a subsection#
# Update the description for the EDA section
for section in config["sections"]:
if section["title"] == "Plots":
section["description"] = "This section contains example plots"
# Update the description for the alpha diversity subsection from the Metagenomics section
for section in config["sections"]:
if section["title"] == "Dataframes":
for subsection in section["subsections"]:
if subsection["title"] == "All Formats":
subsection["description"] = (
"This subsection contains example dataframes."
)
2.3. Adding a new plot from a url#
# Define new plot with a URL as the file path
vuegen_abst_fig = {
"title": "Graphical overview of VueGen’s workflow and components",
"file_path": "https://raw.githubusercontent.com/Multiomics-Analytics-Group/vuegen/main/docs/images/vuegen_graph_abstract.png",
"description": "",
"caption": "The diagram illustrates the processing pipeline of VueGen, starting from either a directory or a YAML configuration file. Reports consist of hierarchical sections and subsections, each containing various components such as plots, dataframes, Markdown, HTML, and data retrieved via API calls.",
"component_type": "plot",
"plot_type": "static",
}
# Add the plot to the Sample Provenance subsection in the EDA section
for section in config["sections"]:
if section["title"] == "Plots":
for subsection in section["subsections"]:
if subsection["title"] == "Static Plots":
subsection["components"].append(vuegen_abst_fig)
# Save the modified YAML file
with open(config_path, "w") as file:
yaml.dump(config, file, default_flow_style=False)
2.5. Stremlit report with the extended configuration file#
To launch the Streamlit web application from Colab, open the generated URL and copy the localtunnel entry point IP into the corresponding field on the opened page. Once submited, you will be redirected to your Streamlit web application.
# Test the changes by generarating the report from the modified YAML file
report_type = "streamlit"
_ = report_generator.get_report(
config_path=config_path, report_type=report_type, logger=None
)
Show code cell output
Hide code cell output
[2026-02-10 13:05:20,364] vuegen: INFO - Path to log file: logs/2026-02-10_13-05-20_report.log
[2026-02-10 13:05:20,387] vuegen: INFO - Report 'Basic Example Vuegen Demo Notebook' initialized with 5 sections.
[2026-02-10 13:05:20,389] vuegen: INFO - running in a normal Python process
[2026-02-10 13:05:20,390] vuegen: DEBUG - Generating 'streamlit' report in directory: 'streamlit_report/sections'
[2026-02-10 13:05:20,391] vuegen: INFO - Output directory already existed: 'streamlit_report/sections'
[2026-02-10 13:05:20,392] vuegen: INFO - Output directory for static content already existed: 'streamlit_report/static'
[2026-02-10 13:05:20,393] vuegen: DEBUG - Processing app navigation code.
[2026-02-10 13:05:20,395] vuegen: DEBUG - Processing home section.
[2026-02-10 13:05:20,396] vuegen: DEBUG - Home directory already existed: streamlit_report/sections/Home
[2026-02-10 13:05:20,398] vuegen: INFO - Home page content written to 'streamlit_report/sections/Home/Homepage.py'.
[2026-02-10 13:05:20,399] vuegen: INFO - Home page added to the report manager content.
[2026-02-10 13:05:20,401] vuegen: DEBUG - Section directory already existed: streamlit_report/sections/Plots
[2026-02-10 13:05:20,401] vuegen: DEBUG - Section directory already existed: streamlit_report/sections/Dataframes
[2026-02-10 13:05:20,403] vuegen: DEBUG - Section directory already existed: streamlit_report/sections/Networks
[2026-02-10 13:05:20,405] vuegen: DEBUG - Section directory already existed: streamlit_report/sections/Html
[2026-02-10 13:05:20,405] vuegen: DEBUG - Section directory already existed: streamlit_report/sections/Markdown
[2026-02-10 13:05:20,406] vuegen: INFO - Created app navigation script: report_manager.py
[2026-02-10 13:05:20,408] vuegen: INFO - Starting to generate sections for the report.
[2026-02-10 13:05:20,410] vuegen: DEBUG - Processing section '11': 'Plots' - 2 subsection(s)
[2026-02-10 13:05:20,410] vuegen: DEBUG - Processing subsection '15': 'Interactive Plots' - 7 component(s)
[2026-02-10 13:05:20,412] vuegen: INFO - Successfully generated content for plot '25': 'Top Species Plot By Biome Plotly'
[2026-02-10 13:05:20,414] vuegen: INFO - Successfully generated content for plot '26': 'Multiline Plot Altair'
[2026-02-10 13:05:20,416] vuegen: INFO - Successfully generated content for plot '27': 'Pie Plot Countries Plotly'
[2026-02-10 13:05:20,417] vuegen: INFO - Successfully generated content for plot '28': 'Pie Plots Biomes Plotly'
[2026-02-10 13:05:20,419] vuegen: INFO - Successfully generated content for plot '29': 'Saline Metagenomics Samples Map Altair'
[2026-02-10 13:05:20,420] vuegen: INFO - Successfully generated content for plot '30': 'Plotly Plot R'
[2026-02-10 13:05:20,422] vuegen: INFO - Successfully generated content for Markdown: 'Description'
[2026-02-10 13:05:20,422] vuegen: INFO - Generated content and imports for subsection: 'Interactive Plots'
[2026-02-10 13:05:20,424] vuegen: INFO - Subsection file created: 'streamlit_report/sections/Plots/Interactive_Plots.py'
[2026-02-10 13:05:20,426] vuegen: DEBUG - Processing subsection '16': 'Static Plots' - 4 component(s)
[2026-02-10 13:05:20,427] vuegen: INFO - Successfully generated content for plot '31': 'Number Samples Per Study'
[2026-02-10 13:05:20,429] vuegen: INFO - Successfully generated content for plot '32': 'Animal Metagenomics Samples Map'
[2026-02-10 13:05:20,430] vuegen: INFO - Successfully generated content for plot '33': 'Alpha Diversity Host Associated Samples'
[2026-02-10 13:05:20,432] vuegen: INFO - Successfully generated content for plot '34': 'Graphical overview of VueGen’s workflow and components'
[2026-02-10 13:05:20,433] vuegen: INFO - Generated content and imports for subsection: 'Static Plots'
[2026-02-10 13:05:20,434] vuegen: INFO - Subsection file created: 'streamlit_report/sections/Plots/Static_Plots.py'
[2026-02-10 13:05:20,435] vuegen: DEBUG - Processing section '12': 'Dataframes' - 1 subsection(s)
[2026-02-10 13:05:20,437] vuegen: DEBUG - Processing subsection '17': 'All Formats' - 5 component(s)
[2026-02-10 13:05:20,438] vuegen: INFO - Successfully generated content for DataFrame: 'Phyla Correlation Network Csv'
[2026-02-10 13:05:20,448] vuegen: INFO - Successfully generated content for DataFrame: 'Abundance Table Example Xls'
[2026-02-10 13:05:20,449] vuegen: INFO - Successfully generated content for DataFrame: 'Sample Info Example Txt'
[2026-02-10 13:05:20,451] vuegen: INFO - Successfully generated content for DataFrame: 'Sample Info Example Parquet'
[2026-02-10 13:05:20,458] vuegen: INFO - Successfully generated content for DataFrame: 'Example Xlsx'
[2026-02-10 13:05:20,460] vuegen: INFO - Generated content and imports for subsection: 'All Formats'
[2026-02-10 13:05:20,461] vuegen: INFO - Subsection file created: 'streamlit_report/sections/Dataframes/All_Formats.py'
[2026-02-10 13:05:20,462] vuegen: DEBUG - Processing section '13': 'Networks' - 2 subsection(s)
[2026-02-10 13:05:20,464] vuegen: DEBUG - Processing subsection '18': 'Interactive Networks' - 2 component(s)
[2026-02-10 13:05:20,468] vuegen: INFO - Successfully read network from file: /home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/docs/example_data/Basic_example_vuegen_demo_notebook/3_Networks/1_Interactive_networks/1_man_example.graphml.
[2026-02-10 13:05:20,468] vuegen: DEBUG - Try to save network as PyVis network: /home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/docs/streamlit_report/static/Man_Example.html.
[2026-02-10 13:05:20,487] vuegen: INFO - PyVis network created and saved as: /home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/docs/streamlit_report/static/Man_Example.html.
[2026-02-10 13:05:20,489] vuegen: INFO - Successfully generated content for plot '35': 'Man Example'
[2026-02-10 13:05:20,491] vuegen: INFO - Successfully generated content for Markdown: 'Description'
[2026-02-10 13:05:20,491] vuegen: INFO - Generated content and imports for subsection: 'Interactive Networks'
[2026-02-10 13:05:20,493] vuegen: INFO - Subsection file created: 'streamlit_report/sections/Networks/Interactive_Networks.py'
[2026-02-10 13:05:20,494] vuegen: DEBUG - Processing subsection '19': 'Static Networks' - 1 component(s)
[2026-02-10 13:05:20,496] vuegen: INFO - Successfully generated content for plot '36': 'Phyla Correlation Network'
[2026-02-10 13:05:20,498] vuegen: INFO - Generated content and imports for subsection: 'Static Networks'
[2026-02-10 13:05:20,498] vuegen: INFO - Subsection file created: 'streamlit_report/sections/Networks/Static_Networks.py'
[2026-02-10 13:05:20,500] vuegen: DEBUG - Processing section '14': 'Html' - 1 subsection(s)
[2026-02-10 13:05:20,501] vuegen: DEBUG - Processing subsection '20': 'All Html' - 3 component(s)
[2026-02-10 13:05:20,502] vuegen: INFO - Successfully generated content for HTML: 'Plot'
[2026-02-10 13:05:20,507] vuegen: INFO - Successfully generated content for plot '37': 'Ckg Network'
[2026-02-10 13:05:20,508] vuegen: INFO - Successfully generated content for HTML: 'Multiqc Report'
[2026-02-10 13:05:20,510] vuegen: INFO - Generated content and imports for subsection: 'All Html'
[2026-02-10 13:05:20,510] vuegen: INFO - Subsection file created: 'streamlit_report/sections/Html/All_Html.py'
[2026-02-10 13:05:20,512] vuegen: DEBUG - Processing section '15': 'Markdown' - 1 subsection(s)
[2026-02-10 13:05:20,513] vuegen: DEBUG - Processing subsection '21': 'All Markdown' - 1 component(s)
[2026-02-10 13:05:20,514] vuegen: INFO - Successfully generated content for Markdown: 'Readme'
[2026-02-10 13:05:20,516] vuegen: INFO - Generated content and imports for subsection: 'All Markdown'
[2026-02-10 13:05:20,517] vuegen: INFO - Subsection file created: 'streamlit_report/sections/Markdown/All_Markdown.py'
[2026-02-10 13:05:20,519] vuegen: INFO - All the scripts to build the Streamlit app are available at streamlit_report/sections
[2026-02-10 13:05:20,520] vuegen: INFO - To run the Streamlit app, use the following command:
[2026-02-10 13:05:20,521] vuegen: INFO - streamlit run streamlit_report/sections/report_manager.py
All the scripts to build the Streamlit app are available at: streamlit_report/sections
To run the Streamlit app, use the following command:
streamlit run streamlit_report/sections/report_manager.py
run_streamlit = False
# run_streamlit = True # uncomment line to run the streamlit report
# Launch the Streamlit report depneding on the platform
if not IN_COLAB and run_streamlit:
!streamlit run streamlit_report/sections/report_manager.py
elif run_streamlit:
# see: https://discuss.streamlit.io/t/how-to-launch-streamlit-app-from-google-colab-notebook/42399
print(
"Password/Enpoint IP for localtunnel is:",
urllib.request.urlopen("https://ipv4.icanhazip.com")
.read()
.decode("utf8")
.strip("\n"),
)
# Run the Streamlit app in the background
!streamlit run streamlit_report/sections/report_manager.py --server.address=localhost &>/content/logs.txt &
# Expose the Streamlit app on port 8501
!npx localtunnel --port 8501 --subdomain vuegen-demo
else:
print("Streamlit report not executed, set run_streamlit to True to run the report")
Show code cell output
Hide code cell output
Streamlit report not executed, set run_streamlit to True to run the report
2.6. HTML and other report types with the extended configuration file#
# Test the changes by generarating the report from the modified YAML file
report_type = "html"
_ = report_generator.get_report(
config_path=config_path, report_type=report_type, logger=None
)
Show code cell output
Hide code cell output
[2026-02-10 13:05:20,542] vuegen: INFO - Path to log file: logs/2026-02-10_13-05-20_report.log
[2026-02-10 13:05:20,565] vuegen: INFO - Report 'Basic Example Vuegen Demo Notebook' initialized with 5 sections.
[2026-02-10 13:05:20,566] vuegen: INFO - running in a normal Python process
[2026-02-10 13:05:20,568] vuegen: DEBUG - env_vars (QuartoReport): environ({'READTHEDOCS_VIRTUALENV_PATH': '/home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest', 'READTHEDOCS_CANONICAL_URL': 'https://vuegen.readthedocs.io/en/latest/', 'HOSTNAME': 'build-31350061-project-1135329-vuegen', 'READTHEDOCS_GIT_CLONE_URL': 'https://github.com/Multiomics-Analytics-Group/vuegen.git', 'HOME': '/home/docs', 'NO_COLOR': '1', 'READTHEDOCS': 'True', 'READTHEDOCS_PRODUCTION_DOMAIN': 'app.readthedocs.org', 'READTHEDOCS_REPOSITORY_PATH': '/home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest', 'READTHEDOCS_PROJECT': 'vuegen', 'READTHEDOCS_OUTPUT': '/home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/_readthedocs/', 'PATH': '/home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/bin:/home/docs/.asdf/shims:/home/docs/.asdf/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 'READTHEDOCS_VERSION_TYPE': 'branch', 'LANG': 'C.UTF-8', 'READTHEDOCS_LANGUAGE': 'en', 'DEBIAN_FRONTEND': 'noninteractive', 'READTHEDOCS_GIT_COMMIT_HASH': '1a42fa37f8f843f0111db72fc2c035c6f3ebb2de', 'READTHEDOCS_VERSION_NAME': 'latest', 'READTHEDOCS_VERSION': 'latest', 'PWD': '/home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/docs', 'READTHEDOCS_GIT_IDENTIFIER': 'main', 'DOCUTILSCONFIG': '/home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/docs/docutils.conf', 'MPLBACKEND': 'Agg', 'JPY_PARENT_PID': '704', 'PYDEVD_USE_FRAME_EVAL': 'NO', 'TERM': 'xterm-color', 'CLICOLOR': '1', 'FORCE_COLOR': '1', 'CLICOLOR_FORCE': '1', 'PAGER': 'cat', 'GIT_PAGER': 'cat'})
[2026-02-10 13:05:20,570] vuegen: DEBUG - PATH: /home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/bin:/home/docs/.asdf/shims:/home/docs/.asdf/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[2026-02-10 13:05:20,570] vuegen: DEBUG - sys.path: ['/home/docs/.asdf/installs/python/3.11.12/lib/python311.zip', '/home/docs/.asdf/installs/python/3.11.12/lib/python3.11', '/home/docs/.asdf/installs/python/3.11.12/lib/python3.11/lib-dynload', '', '/home/docs/checkouts/readthedocs.org/user_builds/vuegen/envs/latest/lib/python3.11/site-packages']
[2026-02-10 13:05:20,572] vuegen: DEBUG - Generating 'html' report in directory: '/home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/docs/quarto_report'
[2026-02-10 13:05:20,573] vuegen: DEBUG - Output directory already existed: '/home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/docs/quarto_report'
[2026-02-10 13:05:20,574] vuegen: INFO - Output directory for static content already existed: 'quarto_report/static'
[2026-02-10 13:05:20,576] vuegen: INFO - Starting to generate sections for the report.
[2026-02-10 13:05:20,578] vuegen: DEBUG - Processing section: 'Plots' - 2 subsection(s)
[2026-02-10 13:05:20,579] vuegen: DEBUG - Processing subsection: 'Interactive Plots' - 7 component(s)
[2026-02-10 13:05:20,580] vuegen: DEBUG - component_imports: ['import plotly.io as pio', 'import requests', 'import json']
[2026-02-10 13:05:20,582] vuegen: INFO - Successfully generated content for plot: 'Top Species Plot By Biome Plotly'
[2026-02-10 13:05:20,582] vuegen: DEBUG - component_imports: ['import altair as alt', 'import requests', 'import json']
[2026-02-10 13:05:20,584] vuegen: INFO - Successfully generated content for plot: 'Multiline Plot Altair'
[2026-02-10 13:05:20,586] vuegen: DEBUG - component_imports: ['import plotly.io as pio', 'import requests', 'import json']
[2026-02-10 13:05:20,587] vuegen: INFO - Successfully generated content for plot: 'Pie Plot Countries Plotly'
[2026-02-10 13:05:20,589] vuegen: DEBUG - component_imports: ['import plotly.io as pio', 'import requests', 'import json']
[2026-02-10 13:05:20,590] vuegen: INFO - Successfully generated content for plot: 'Pie Plots Biomes Plotly'
[2026-02-10 13:05:20,591] vuegen: DEBUG - component_imports: ['import altair as alt', 'import requests', 'import json']
[2026-02-10 13:05:20,592] vuegen: INFO - Successfully generated content for plot: 'Saline Metagenomics Samples Map Altair'
[2026-02-10 13:05:20,594] vuegen: DEBUG - component_imports: ['import plotly.io as pio', 'import requests', 'import json']
[2026-02-10 13:05:20,595] vuegen: INFO - Successfully generated content for plot: 'Plotly Plot R'
[2026-02-10 13:05:20,597] vuegen: DEBUG - component_imports: ['import IPython.display as display', 'import requests']
[2026-02-10 13:05:20,598] vuegen: DEBUG - Skipping description.md markdown of section.
[2026-02-10 13:05:20,599] vuegen: INFO - Generated content and imports for subsection: 'Interactive Plots'
[2026-02-10 13:05:20,600] vuegen: DEBUG - Processing subsection: 'Static Plots' - 4 component(s)
[2026-02-10 13:05:20,602] vuegen: DEBUG - component_imports: []
[2026-02-10 13:05:20,603] vuegen: INFO - Successfully generated content for plot: 'Number Samples Per Study'
[2026-02-10 13:05:20,605] vuegen: DEBUG - component_imports: []
[2026-02-10 13:05:20,606] vuegen: INFO - Successfully generated content for plot: 'Animal Metagenomics Samples Map'
[2026-02-10 13:05:20,607] vuegen: DEBUG - component_imports: []
[2026-02-10 13:05:20,608] vuegen: INFO - Successfully generated content for plot: 'Alpha Diversity Host Associated Samples'
[2026-02-10 13:05:20,610] vuegen: DEBUG - component_imports: []
[2026-02-10 13:05:20,611] vuegen: INFO - Successfully generated content for plot: 'Graphical overview of VueGen’s workflow and components'
[2026-02-10 13:05:20,612] vuegen: INFO - Generated content and imports for subsection: 'Static Plots'
[2026-02-10 13:05:20,613] vuegen: DEBUG - Processing section: 'Dataframes' - 1 subsection(s)
[2026-02-10 13:05:20,614] vuegen: DEBUG - Processing subsection: 'All Formats' - 5 component(s)
[2026-02-10 13:05:20,617] vuegen: DEBUG - component_imports: ['import pandas as pd', 'from itables import show, init_notebook_mode', 'init_notebook_mode(all_interactive=True)']
[2026-02-10 13:05:20,618] vuegen: INFO - Successfully generated content for DataFrame: 'Phyla Correlation Network Csv'
[2026-02-10 13:05:20,619] vuegen: DEBUG - component_imports: ['import pandas as pd', 'from itables import show, init_notebook_mode', 'init_notebook_mode(all_interactive=True)']
[2026-02-10 13:05:20,629] vuegen: INFO - Multiple sheets found in the Excel file: example_data/Basic_example_vuegen_demo_notebook/2_Dataframes/1_All_formats/2_abundance_table_example_xls.xls. Sheets: ['abundance_data_allbiomes', 'infos']
[2026-02-10 13:05:20,630] vuegen: INFO - Successfully generated content for DataFrame: 'Abundance Table Example Xls'
[2026-02-10 13:05:20,631] vuegen: DEBUG - component_imports: ['import pandas as pd', 'from itables import show, init_notebook_mode', 'init_notebook_mode(all_interactive=True)']
[2026-02-10 13:05:20,633] vuegen: INFO - Successfully generated content for DataFrame: 'Sample Info Example Txt'
[2026-02-10 13:05:20,634] vuegen: DEBUG - component_imports: ['import pandas as pd', 'from itables import show, init_notebook_mode', 'init_notebook_mode(all_interactive=True)']
[2026-02-10 13:05:20,635] vuegen: INFO - Successfully generated content for DataFrame: 'Sample Info Example Parquet'
[2026-02-10 13:05:20,637] vuegen: DEBUG - component_imports: ['import pandas as pd', 'from itables import show, init_notebook_mode', 'init_notebook_mode(all_interactive=True)']
[2026-02-10 13:05:20,644] vuegen: INFO - Successfully generated content for DataFrame: 'Example Xlsx'
[2026-02-10 13:05:20,646] vuegen: INFO - Generated content and imports for subsection: 'All Formats'
[2026-02-10 13:05:20,647] vuegen: DEBUG - Processing section: 'Networks' - 2 subsection(s)
[2026-02-10 13:05:20,647] vuegen: DEBUG - Processing subsection: 'Interactive Networks' - 2 component(s)
[2026-02-10 13:05:20,649] vuegen: DEBUG - component_imports: []
[2026-02-10 13:05:20,652] vuegen: INFO - Successfully read network from file: /home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/docs/example_data/Basic_example_vuegen_demo_notebook/3_Networks/1_Interactive_networks/1_man_example.graphml.
[2026-02-10 13:05:20,653] vuegen: DEBUG - Try to save network as PyVis network: /home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/docs/quarto_report/static/Man_Example.html.
[2026-02-10 13:05:20,672] vuegen: INFO - PyVis network created and saved as: /home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/docs/quarto_report/static/Man_Example.html.
[2026-02-10 13:05:20,674] vuegen: INFO - Successfully generated content for plot: 'Man Example'
[2026-02-10 13:05:20,675] vuegen: DEBUG - component_imports: ['import IPython.display as display', 'import requests']
[2026-02-10 13:05:20,676] vuegen: DEBUG - Skipping description.md markdown of section.
[2026-02-10 13:05:20,676] vuegen: INFO - Generated content and imports for subsection: 'Interactive Networks'
[2026-02-10 13:05:20,678] vuegen: DEBUG - Processing subsection: 'Static Networks' - 1 component(s)
[2026-02-10 13:05:20,679] vuegen: DEBUG - component_imports: []
[2026-02-10 13:05:20,681] vuegen: INFO - Successfully generated content for plot: 'Phyla Correlation Network'
[2026-02-10 13:05:20,682] vuegen: INFO - Generated content and imports for subsection: 'Static Networks'
[2026-02-10 13:05:20,683] vuegen: DEBUG - Processing section: 'Html' - 1 subsection(s)
[2026-02-10 13:05:20,685] vuegen: DEBUG - Processing subsection: 'All Html' - 3 component(s)
[2026-02-10 13:05:20,686] vuegen: DEBUG - component_imports: []
[2026-02-10 13:05:20,687] vuegen: INFO - Successfully generated content for HTML: 'Plot'
[2026-02-10 13:05:20,688] vuegen: DEBUG - component_imports: []
[2026-02-10 13:05:20,692] vuegen: INFO - Successfully generated content for plot: 'Ckg Network'
[2026-02-10 13:05:20,694] vuegen: DEBUG - component_imports: []
[2026-02-10 13:05:20,695] vuegen: INFO - Successfully generated content for HTML: 'Multiqc Report'
[2026-02-10 13:05:20,696] vuegen: INFO - Generated content and imports for subsection: 'All Html'
[2026-02-10 13:05:20,698] vuegen: DEBUG - Processing section: 'Markdown' - 1 subsection(s)
[2026-02-10 13:05:20,699] vuegen: DEBUG - Processing subsection: 'All Markdown' - 1 component(s)
[2026-02-10 13:05:20,700] vuegen: DEBUG - component_imports: ['import IPython.display as display', 'import requests']
[2026-02-10 13:05:20,701] vuegen: INFO - Successfully generated content for Markdown: 'Readme'
[2026-02-10 13:05:20,703] vuegen: INFO - Generated content and imports for subsection: 'All Markdown'
[2026-02-10 13:05:20,704] vuegen: INFO - Created qmd script to render the app: /home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/docs/quarto_report/quarto_report.qmd
[2026-02-10 13:05:20,705] vuegen: INFO - Running 'Basic Example Vuegen Demo Notebook' 'html' report with ['quarto', 'render', '/home/docs/checkouts/readthedocs.org/user_builds/vuegen/checkouts/latest/docs/quarto_report/quarto_report.qmd']
[2026-02-10 13:05:49,994] vuegen: INFO - 'Basic Example Vuegen Demo Notebook' 'html' report rendered
Starting python3 kernel...
Done
Executing 'quarto_report.quarto_ipynb'
Cell 1/14: 'Imports'.....................................
Done
Cell 2/14: 'Top Species Plot By Biome Plotly 38'.........Done
Cell 3/14: 'Multiline Plot Altair 39'....................
Done
Cell 4/14: 'Pie Plot Countries Plotly 40'................Done
Cell 5/14: 'Pie Plots Biomes Plotly 41'..................Done
Cell 6/14: 'Saline Metagenomics Samples Map Altair 42'...
Done
Cell 7/14: 'Plotly Plot R 43'............................Done
Cell 8/14: 'Phyla Correlation Network Csv 16'............Done
Cell 9/14: 'Abundance Table Example Xls 17'..............Done
Cell 10/14: 'Abundance Table Example Xls 17 infos'........Done
Cell 11/14: 'Sample Info Example Txt 18'..................Done
Cell 12/14: 'Sample Info Example Parquet 19'..............
Done
Cell 13/14: 'Example Xlsx 20'.............................Done
Cell 14/14: 'Readme 12'...................................Done
pandoc
to: html
output-file: quarto_report.html
standalone: true
self-contained: true
section-divs: true
html-math-method: mathjax
wrap: none
default-image-extension: png
toc: true
toc-depth: 3
variables: {}
metadata
document-css: false
link-citations: true
date-format: long
lang: en
title: Basic Example Vuegen Demo Notebook
jupyter: python3
toc-location: left
page-layout: full
Output created: quarto_report.html