Skip to content
Projects

Building the docs

The site in docs/ is built with Astro and Starlight. It has three kinds of pages:

  • Hand-written pages in docs/src/content/docs/, as Markdown or MDX.
  • Tutorials, converted from the Jupyter notebooks in tutorials/ by starlight-notebooks. Each notebook is executed and its outputs (text, images, tables) are written into an MDX page.
  • Full examples, built from Python scripts in examples/ by docs/tools/examples.py. Each page shows the module docstring, the complete source file, and its Matplotlib plots.
  • API reference, generated from the docstrings by starlight-pydocs, one page per module.

The configuration (defineDocs in docs/astro.config.mjs), the look, the header, the notebook tool and the build workflow come from the shared starlight-theme of the max-models projects; change them there, and update the version in docs/package.json and .github/workflows/docs.yml to pick up a new release.

  • Node 22 or newer.
  • The package installed with the docs extra: pip install -e ".[docs]".
Terminal window
make docs-install # npm packages and the Python docs extra
make docs-notebooks # execute tutorials/*.ipynb and convert them to pages
make docs-examples # run examples/*.py and publish their plots
make docs-dev # live preview at http://localhost:4321/mhd-sandbox/
make docs-build # the static site in docs/dist, as in CI
make docs-preview # serve docs/dist
make docs-clean # remove generated pages and build output

make docs-notebooks only reruns a notebook whose cells changed since the last run; pass FORCE=1 to rerun all of them.

Put a Jupyter notebook in tutorials/. Tutorials are authored only as .ipynb files. Its first # Heading becomes the page title and the first paragraph its description. Cell tags control the output:

TagEffect
remove-cellthe cell is left out of the page
hide-inputthe code is hidden, the outputs are kept
fold-inputthe code is in a closed “Show code” box
remove-outputthe outputs are left out
raises-exceptionan error output is shown, not a failure

Math in $...$ and $$...$$ is rendered with KaTeX.

Put a Python script in examples/ with a module docstring. Its first line becomes the page title and the rest becomes the description. Leave Matplotlib figures open at the end of the script so the docs builder can save them as plots. The complete script is shown on the page.