From b39dc7e8b886be32bbcf39559d1a40498d0ce184 Mon Sep 17 00:00:00 2001 From: Lars Bilke <lars.bilke@ufz.de> Date: Mon, 6 Mar 2023 15:34:32 +0100 Subject: [PATCH] [web] Consolidated notebook docs in new doumentation section. --- .../jupyter-docs/index.md | 52 ------ .../docs/devguide/documentation/_index.md | 4 + .../jupyter-docs/binderhub-button.png | Bin 0 -> 44205 bytes .../documentation/jupyter-docs/index.md | 154 ++++++++++++++++++ .../docs/devguide/testing/test-data/index.md | 61 +------ 5 files changed, 160 insertions(+), 111 deletions(-) delete mode 100644 web/content/docs/devguide/development-workflows/jupyter-docs/index.md create mode 100644 web/content/docs/devguide/documentation/_index.md create mode 100644 web/content/docs/devguide/documentation/jupyter-docs/binderhub-button.png create mode 100644 web/content/docs/devguide/documentation/jupyter-docs/index.md diff --git a/web/content/docs/devguide/development-workflows/jupyter-docs/index.md b/web/content/docs/devguide/development-workflows/jupyter-docs/index.md deleted file mode 100644 index dd3ffe1f49f..00000000000 --- a/web/content/docs/devguide/development-workflows/jupyter-docs/index.md +++ /dev/null @@ -1,52 +0,0 @@ -+++ -date = "2022-06-28T15:28:13+01:00" -title = "Jupyter notebooks as documentation" -author = "Lars Bilke" -weight = 1025 - -[menu.devguide] -parent = "development-workflows" -+++ - -## The big picture - -Jupyter notebooks can be placed in `Tests/Data` along regular benchmarks. See [Notebook testing]({{< relref "test-data#notebook-testing" >}}) for details on how to setup ogs execution (especially input data path handling) inside the notebook. See also the [SimpleMechanics.ipynb](https://gitlab.opengeosys.org/ogs/ogs/-/blob/master/Tests/Data/Mechanics/Linear/SimpleMechanics.ipynb)-notebook as an example. - -## Add web meta information - -Similar to regular web documentation pages the notebook requires to have a frontmatter with some meta information as the first cell in the notebook: - -- Add a new cell and move it to the first position in the notebook -- Change the cell type to `raw`! -- Add meta information, conclude with a end-of-file marker (`<!--eofm-->`) e.g.: - - ```toml - title = "SimplePETSc" - date = "2021-11-09" - author = "Lars Bilke" - notebook = "Mechanics/Linear/SimpleMechanics.ipynb" - image = "optional_gallery_image.png" - web_subsection = "small-deformations" - <!--eofm--> - ``` - -Static images e.g. for the gallery image or to be used in Markdown cells have to located in either `images`- or `figures`-subdirectories beneath the Notebook file! Otherwise they will not show up in the web site. - -## General advice - -### Python cells - -- Do not use machine-specific or absolute paths! -- Assume that ogs and other tools are in the `PATH`. - -### Markdown cells - -- Do not use HTML inside Markdown blocks. -- For image captions add a title in quotation marks after the image path, e.g. - - ```md -  - ``` - -- Please use `images`- or `figures`-subdirectories! -- Please note that in merge request web previews images are not shown at all. diff --git a/web/content/docs/devguide/documentation/_index.md b/web/content/docs/devguide/documentation/_index.md new file mode 100644 index 00000000000..b9bef53bcf7 --- /dev/null +++ b/web/content/docs/devguide/documentation/_index.md @@ -0,0 +1,4 @@ ++++ +title = "Documentation" +weight = 3 ++++ diff --git a/web/content/docs/devguide/documentation/jupyter-docs/binderhub-button.png b/web/content/docs/devguide/documentation/jupyter-docs/binderhub-button.png new file mode 100644 index 0000000000000000000000000000000000000000..191653032475f9e847e6e416fad1cd467a85c61b GIT binary patch literal 44205 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 D2EPf8 literal 0 HcmV?d00001 diff --git a/web/content/docs/devguide/documentation/jupyter-docs/index.md b/web/content/docs/devguide/documentation/jupyter-docs/index.md new file mode 100644 index 00000000000..82ae9b05266 --- /dev/null +++ b/web/content/docs/devguide/documentation/jupyter-docs/index.md @@ -0,0 +1,154 @@ ++++ +date = "2022-06-28T15:28:13+01:00" +title = "Jupyter notebooks as documentation and tests" +author = "Lars Bilke" +weight = 1025 + +[menu.devguide] +parent = "development-workflows" ++++ + +## The big picture + +[Jupyter notebooks](https://jupyter.org) are interactive computing environments where prose and code can be combined. In the OGS project notebooks can be used to define complex benchmark workflows and its results can be converted to be shown on the OGS web page (see an [example here](/docs/benchmarks/small-deformations/linear_disc_with_hole/)). + +## Create a new notebook + +Create a new notebook file in `Tests/Data` (either as regular `.ipynb`-files or as Markdown-based notebooks via [jupytext](https://jupytext.readthedocs.io/en/latest)). See examples: + +- [SimpleMechanics.ipynb](https://gitlab.opengeosys.org/ogs/ogs/-/blob/master/Tests/Data/Mechanics/Linear/SimpleMechanics.ipynb) (regular `.ipynb`-notebook) +- [Linear_Disc_with_hole.md](https://gitlab.opengeosys.org/ogs/ogs/-/blob/master/Tests/Data/Mechanics/Linear/DiscWithHole/Linear_Disc_with_hole.md) (jupytext-based notebook in Markdown) + +## Add web meta information + +If the notebook result should appear as a page on the web documentation a frontmatter with some meta information (similar to [regular web pages]({{< ref "web-docs.md" >}})) is required as the first cell in the notebook: + +- Add a new cell and move it to the first position in the notebook +- Change the cell type to `raw`! +- Add meta information, conclude with a end-of-file marker (`<!--eofm-->`) e.g.: + + ```md + title = "SimplePETSc" + date = "2021-11-09" + author = "Lars Bilke" + image = "optional_gallery_image.png" + web_subsection = "small-deformations" + <!--eofm--> + ``` + +<div class='note'> + +In jupytext-based notebooks you can add the frontmatter within the `<!-- #raw -->`- and `<!-- #endraw -->`-markers: + +```md +<!-- #raw --> +title = "Linear elasticity: disc with hole" +date = "2022-04-27" +author = "Linda Günther, Sophia Einspänner, Robert Habel, Christoph Lehmann and Thomas Nagel" +web_subsection = "small-deformations" +<!--eofm--> +<!-- #endraw --> +``` + +`web_subsection` needs to be set to a sub-folder in [web/content/docs/benchmarks](https://gitlab.opengeosys.org/ogs/ogs/-/tree/master/web/content/docs/benchmarks) (if not set the notebook page will not be linked from navigation bar / benchmark gallery on the web page). + +</div> + +## Notebook setup + +### Python cells + +- Do not use machine-specific or absolute paths! See the following example to set up notebook output paths: + + ```python + import os + + # On CI out_dir is set to the notebooks directory inside the build directory + # similar to regular benchmark tests. On local testing it will output to the + # notebooks source directory under a _out-subdirectory. + out_dir = os.environ.get('OGS_TESTRUNNER_OUT_DIR', '_out') + if not os.path.exists(out_dir): + os.makedirs(out_dir) + + # ... + # Run ogs; get input data from current directory; write to `out_dir` + ! ogs my_project.prj -o {out_dir} > {out_dir}/log.txt + + # Verify results; on failure assert with: + assert False + # or + raise SystemExit() + ``` + +- Do not write anything into the source directories. Use an `out_dir` as above. +- Assume that `ogs` and other tools are in the `PATH`. + +### Markdown cells + +- Do not use HTML inside Markdown blocks. +- Static images e.g. for the gallery image or to be used in Markdown cells have to be located in either `images`- or `figures`-subdirectories beneath the Notebook file! Otherwise they will not show up in the web site. + - For image captions add a title in quotation marks after the image path, e.g. + + ```md +  + ``` + + - Please note that in merge request web previews static images are not shown at all. + +## Execution environment + +In CI the notebooks are executed with all dependencies installed into a virtual environment in the build directory. The installed packages are defined in `Test/Data/requirements.txt`. The same setup can be enabled locally by setting the CMake option `OGS_USE_PIP=ON`. E.g. + +```bash +cmake --preset release -DOGS_USE_PIP=ON # Creates the virtual environment +source ../build/release/.venv/bin/activate # Activates the virtual environment +jupyter lab # Starts Jupyter Lab +``` + +## Register with CTest + +Add the notebook to CTest with e.g.: + +```cmake +if(NOT OGS_USE_PETSC) + NotebookTest(NOTEBOOKFILE Mechanics/Linear/SimpleMechanics.ipynb RUNTIME 10) +endif() +``` + +Then e.g. run all notebook test (`-R nb`) in parallel (`-j 4`) with: + +```bash +# cd into build directory +source .venv/bin/activate # Is created with OGS_USE_PIP=ON, see above note on environment. +ctest -R nb -j 4 --output-on-failure +``` + +## Advanced topics + +### jupytext usage + +If you use the [execution environment](#execution-environment) [jupytext](https://jupytext.readthedocs.io/en/latest) as already configured and its usage is transparent: + +- Double-click on a markdown file will open it as a Notebook +- Upon saving or executing a linked `.ipynb`-file is created in the background which stores outputs +- You still edit the Markdown file but don't notice the difference to regular notebooks in the Lab UI + +### Run a notebook in BinderHub + +On the web site or MR web previews on pages generated by a notebook there is a new banner: + + + +- Click the button to launch the notebook in BinderHub. +- The environment running in BinderHub is defined in [bilke/binder-ogs-requirements at GitHub](https://github.com/bilke/binder-ogs-requirements) +- When clicking the link it launches a Jupyter Lab instance pre-configured with ogs [via wheel](https://gitlab.opengeosys.org/ogs/ogs/-/blob/master/Tests/Data/requirements-ogs.txt#L2), clones the current ogs repo in it and opens the respective notebook ready to run. Please note that startup times may be several minutes and the computing resources are limited (1 core, 2GB RAM). For improved performance we would need to setup own infrastructure. Also currently only works for serial ogs configs. + +### PyVista notebooks on headless Linux systems + +PyVista (or VTK) requires a windowing environment for rendering. You can provide a virtual window with `xvfb-run`: + +```bash +sudo apt install libgl1-mesa-glx xvbf # install xvfb + +xvfb-run -a ctest [...] # provide a virtual window to the ctest-run +``` diff --git a/web/content/docs/devguide/testing/test-data/index.md b/web/content/docs/devguide/testing/test-data/index.md index b115b206ea6..ddf98eb1df0 100644 --- a/web/content/docs/devguide/testing/test-data/index.md +++ b/web/content/docs/devguide/testing/test-data/index.md @@ -61,63 +61,6 @@ In code `BaseLib::BuildInfo::data_path` (from `BuildInfo.h`) references the data For adding new data files simply commit the new files as usual. -## Notebook testing +## Notebook tests -Full Jupyter Notebooks based workflows can be tested too. Create the notebook in `Tests/Data`. Configure output directory and try to use it for all outputs: - -```python -import os - -# On CI out_dir is set to the notebooks directory inside the build directory -# similar to regular benchmark tests. On local testing it will output to the -# notebooks source directory under a _out-subdirectory. -out_dir = os.environ.get('OGS_TESTRUNNER_OUT_DIR', '_out') -if not os.path.exists(out_dir): - os.makedirs(out_dir) - -# ... -# Run ogs; get input data from current directory; write to `out_dir` -! ogs my_project.prj -o {out_dir} > {out_dir}/log.txt - -# Verify results; on failure assert with: -assert False -# or -raise SystemExit() -``` - -Add new Python dependencies to `Test/Data/requirements.txt`. - -### Register with CTest - -Add the benchmark to CTest with e.g.: - -```cmake -if(NOT OGS_USE_PETSC) - NotebookTest(NOTEBOOKFILE Mechanics/Linear/SimpleMechanics.ipynb RUNTIME 10) -endif() -``` - -By registering notebooks [are automatically added]({{< relref "jupyter-docs" >}}) to the benchmark documentation page. - -For local testing please note that you need to configure OGS with `OGS_USE_PIP=ON` (to automatically create a virtual environment in the build directory which is used by the notebook tests). - -Then e.g. run all notebook test (`-R nb`) in parallel with: - -```bash -source .venv/bin/activate # May need to be activated -ctest -R nb -j 4 --output-on-failure -``` - -<div class='note'> - -### PyVista notebooks on headless Linux systems - -PyVista (or VTK) requires a windowing environment for rendering. You can provide a virtual window with `xvfb-run`: - -```bash -sudo apt install libgl1-mesa-glx xvbf # install xvfb - -xvfb-run -a ctest [...] # provide a virtual window to the ctest-run -``` - -</div> +For notebook-based tests [see its dedicated page]({{< ref "jupyter-docs.md" >}}). -- GitLab