diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 8e701df..67d25f5 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -11,6 +11,12 @@ jobs: name: Build docs runs-on: ubuntu-latest steps: + - name: Install LAPACK, OpenBLAS + run: sudo apt-get install -y libopenblas-dev liblapack-dev + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.14" - name: Set up Rust uses: actions-rust-lang/setup-rust-toolchain@v1 with: @@ -20,22 +26,43 @@ jobs: with: mpi: "mpich" - uses: actions/checkout@v4 - - - name: Build docs + - name: Build Rust docs run: cargo +nightly doc --no-deps -Zunstable-options -Zrustdoc-scrape-examples --all-features - + - name: Make index page + run: echo "" > target/doc/index.html - name: Set file permissions run: | rm target/doc/.lock chmod -c -R +rX target/doc + - name: Install uv + run: pip install uv + - name: Make virtual environment + run: | + uv venv .venv + uv pip install pip + - name: Build Python docs + run: | + source .venv/bin/activate + cd python/docs + uv pip install -r requirements.txt + make html + + - name: Move docs + run: | + mkdir doc + mv target/doc doc/rust + mv python/docs/_build/html doc/python + - name: Make index page + run: echo "ndelement docs
Rust docs
Python docs
" > doc/index.html + - name: Setup Pages uses: actions/configure-pages@v3 if: github.ref == 'refs/heads/main' - name: Upload artifact for docs uses: actions/upload-pages-artifact@v3 with: - path: 'target/doc' + path: 'doc' if: github.ref == 'refs/heads/main' deploy-docs: diff --git a/README.md b/README.md index 5f6e262..0906016 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,9 @@ # ndelement [![DefElement verification](https://defelement.org/badges/ndelement.svg)](https://defelement.org/verification/ndelement.html) -[![crates.io](https://img.shields.io/crates/v/ndelement)](https://crates.io/crates/ndelement) +[![crates.io](https://img.shields.io/crates/v/ndelement?color=blue)](https://crates.io/crates/ndelement) [![docs.rs](https://img.shields.io/docsrs/ndelement?label=docs.rs)](https://docs.rs/ndelement/latest/ndelement/) +[![PyPI](https://img.shields.io/pypi/v/ndelement?color=blue&label=PyPI&logo=pypi&logoColor=white)](https://pypi.org/project/ndelement/) ndelement is an open-source library written in Rust that can be used to create n-dimensional finite elements. diff --git a/pyproject.toml b/pyproject.toml index 3752ff3..d477925 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,6 +27,7 @@ packages = ["ndelement"] [project.urls] homepage = "https://github.com/bempp/ndelement" repository = "https://github.com/bempp/ndelement" +documentation = "https://bempp.github.io/ndelement/python" [tool.maturin] python-source = "python" diff --git a/python/docs/Makefile b/python/docs/Makefile new file mode 100644 index 0000000..5128596 --- /dev/null +++ b/python/docs/Makefile @@ -0,0 +1,19 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/python/docs/conf.py b/python/docs/conf.py new file mode 100644 index 0000000..0c2983c --- /dev/null +++ b/python/docs/conf.py @@ -0,0 +1,180 @@ +"""Configuration file for the Sphinx documentation builder. + +This file does only contain a selection of the most common options. For a +full list see the documentation: +http://www.sphinx-doc.org/en/master/config +""" + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +import os +import sys +import tomllib + +sys.path.insert(0, os.path.abspath("..")) + + +# -- Project information ----------------------------------------------------- + +project = "ndelement" +copyright = "2022-, Matthew Scroggs" +author = "Matthew Scroggs" + +with open("../../pyproject.toml", "rb") as f: + version = tomllib.load(f)["project"]["version"] + + +# -- General configuration --------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + "sphinx.ext.autodoc", + "sphinx.ext.mathjax", + "autoapi.extension", +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = ".rst" + +# The master toctree document. +master_doc = "index" + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = "en" + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = None + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = "sphinxdoc" + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +# html_theme_options = {} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +# html_static_path = ["_static"] + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# The default sidebars (for documents that don't match any pattern) are +# defined by theme itself. Builtin themes are using these templates by +# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', +# 'searchbox.html']``. +# +# html_sidebars = {} + + +# -- Options for HTMLHelp output --------------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = "ndelementdoc" + + +# -- Options for LaTeX output ------------------------------------------------ + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + "papersize": "a4paper", + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, "ndelement.tex", "ndelement Documentation", "Matthew Scroggs", "manual"), +] + + +# -- Options for manual page output ------------------------------------------ + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [(master_doc, "ndelement", "ndelement Documentation", [author], 1)] + + +# -- Options for Texinfo output ---------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ( + master_doc, + "ndelement", + "ndelement Documentation", + author, + "ndelement", + "Python interface to Rust finite element definition library", + "Miscellaneous", + ), +] + + +# -- Options for Epub output ------------------------------------------------- + +# Bibliographic Dublin Core info. +epub_title = project + +# The unique identifier of the text. This can be a ISBN number +# or the project homepage. +# +# epub_identifier = '' + +# A unique identification for the text. +# +# epub_uid = '' + +# A list of files that should not be packed into the epub file. +epub_exclude_files = ["search.html"] + + +# -- Extension configuration ------------------------------------------------- +autoapi_type = "python" +autoapi_dirs = ["../ndelement"] +autoapi_root = "docs" diff --git a/python/docs/index.rst b/python/docs/index.rst new file mode 100644 index 0000000..2b57c19 --- /dev/null +++ b/python/docs/index.rst @@ -0,0 +1,11 @@ +========= +ndelement +========= + +Welcome to the documention of ndelement. + +Documentation index +=================== + +.. toctree:: + :titlesonly: diff --git a/python/docs/requirements.txt b/python/docs/requirements.txt new file mode 100644 index 0000000..68736ef --- /dev/null +++ b/python/docs/requirements.txt @@ -0,0 +1,2 @@ +sphinx +sphinx-autoapi