xref: /libCEED/doc/sphinx/source/conf.py (revision dd75fd25173ccc390ac3dae7b2b394bf6101854f)
14c4400c7SValeria Barra#!/usr/bin/env python3
24c4400c7SValeria Barra# -*- coding: utf-8 -*-
34c4400c7SValeria Barra#
44c4400c7SValeria Barra# libCEED documentation build configuration file, created by
54c4400c7SValeria Barra# sphinx-quickstart on Tue Jan  7 18:59:28 2020.
64c4400c7SValeria Barra#
74c4400c7SValeria Barra# This file is execfile()d with the current directory set to its
84c4400c7SValeria Barra# containing dir.
94c4400c7SValeria Barra#
104c4400c7SValeria Barra# Note that not all possible configuration values are present in this
114c4400c7SValeria Barra# autogenerated file.
124c4400c7SValeria Barra#
134c4400c7SValeria Barra# All configuration values have a default; values that are commented out
144c4400c7SValeria Barra# serve to show the default.
154c4400c7SValeria Barra
164c4400c7SValeria Barra# If extensions (or modules to document with autodoc) are in another directory,
174c4400c7SValeria Barra# add these directories to sys.path here. If the directory is relative to the
184c4400c7SValeria Barra# documentation root, use os.path.abspath to make it absolute, like shown here.
194c4400c7SValeria Barra#
204c4400c7SValeria Barra# import os
214c4400c7SValeria Barra# import sys
224c4400c7SValeria Barra# sys.path.insert(0, os.path.abspath('.'))
237a7b0fa3SJed Brownimport glob
247a7b0fa3SJed Brownimport shutil
254c4400c7SValeria Barraimport sys
264c4400c7SValeria Barraimport breathe
274c4400c7SValeria Barraimport os
284c4400c7SValeria Barraimport subprocess
298c5d743aSJed Brownfrom sphinxcontrib import katex
304c4400c7SValeria Barra
314c4400c7SValeria Barra# -- General configuration ------------------------------------------------
324c4400c7SValeria Barra
334c4400c7SValeria Barra# If your documentation needs a minimal Sphinx version, state it here.
344c4400c7SValeria Barra#
354c4400c7SValeria Barra# needs_sphinx = '1.0'
364c4400c7SValeria Barra
374c4400c7SValeria Barra# Add any Sphinx extension module names here, as strings. They can be
384c4400c7SValeria Barra# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
394c4400c7SValeria Barra# ones.
404c4400c7SValeria Barraextensions = [
41*dd75fd25SJed Brown    "altair.sphinxext.altairplot",
42*dd75fd25SJed Brown    "breathe",
43*dd75fd25SJed Brown    "hoverxref.extension",
44*dd75fd25SJed Brown    "sphinx_design",
45*dd75fd25SJed Brown    "myst_parser",
46*dd75fd25SJed Brown    "sphinx_rtd_theme",
47*dd75fd25SJed Brown    "sphinx.ext.autodoc",
48*dd75fd25SJed Brown    "sphinx.ext.coverage",
49*dd75fd25SJed Brown    "sphinx.ext.doctest",
50*dd75fd25SJed Brown    "sphinx.ext.ifconfig",
51*dd75fd25SJed Brown    "sphinx.ext.intersphinx",
52*dd75fd25SJed Brown    "sphinx.ext.githubpages",
53*dd75fd25SJed Brown    "sphinxcontrib.katex",
54*dd75fd25SJed Brown    "sphinxcontrib.mermaid",  # still in beta; fails with latexpdf builder
55*dd75fd25SJed Brown    "sphinx.ext.todo",
56*dd75fd25SJed Brown    "sphinx.ext.viewcode",
57*dd75fd25SJed Brown    "sphinxcontrib.bibtex",
58*dd75fd25SJed Brown    "sphinxcontrib.rsvgconverter",
594c4400c7SValeria Barra]
604c4400c7SValeria Barra
614c4400c7SValeria Barra# The following, if true, allows figures, tables and code-blocks to be
624c4400c7SValeria Barra# automatically numbered if they have a caption.
634c4400c7SValeria Barranumfig = True
644c4400c7SValeria Barra
654c4400c7SValeria Barra# Add any paths that contain templates here, relative to this directory.
66*dd75fd25SJed Browntemplates_path = ["_templates"]
674c4400c7SValeria Barra
684c4400c7SValeria Barra# The master toctree document.
69*dd75fd25SJed Brownmaster_doc = "index"
704c4400c7SValeria Barra
714c4400c7SValeria Barra# General information about the project.
72*dd75fd25SJed Brownproject = "libCEED"
73*dd75fd25SJed Browncopyright = "2020, LLNL, University of Colorado, University of Illinois, University of Tennesee, and the authors"
74*dd75fd25SJed Brownwith open("../../../AUTHORS") as f:
754c4400c7SValeria Barra    authorlist = f.readlines()
76*dd75fd25SJed Brownauthor = ", ".join(authorlist)
774c4400c7SValeria Barra
784c4400c7SValeria Barra# The version info for the project you're documenting, acts as replacement for
794c4400c7SValeria Barra# |version| and |release|, also used in various other places throughout the
804c4400c7SValeria Barra# built documents.
814c4400c7SValeria Barra#
824c4400c7SValeria Barra# The short X.Y version.
83*dd75fd25SJed Brownwith open("../../../ceed.pc.template") as f:
84*dd75fd25SJed Brown    pkgconf_version = "unknown"
854c4400c7SValeria Barra    for line in f:
86*dd75fd25SJed Brown        if line.startswith("Version:"):
87*dd75fd25SJed Brown            pkgconf_version = line.partition(": ")[2]
884c4400c7SValeria Barra            break
894c4400c7SValeria Barraversion = pkgconf_version
904c4400c7SValeria Barra# The full version, including alpha/beta/rc tags.
914c4400c7SValeria Barrarelease = pkgconf_version
924c4400c7SValeria Barra
934c4400c7SValeria Barra# The language for content autogenerated by Sphinx. Refer to documentation
944c4400c7SValeria Barra# for a list of supported languages.
954c4400c7SValeria Barra#
964c4400c7SValeria Barra# This is also used if you do content translation via gettext catalogs.
974c4400c7SValeria Barra# Usually you set "language" from the command line for these cases.
9801ea9c81SJed Brownlanguage = "en"
994c4400c7SValeria Barra
1004c4400c7SValeria Barra# List of patterns, relative to source directory, that match files and
1014c4400c7SValeria Barra# directories to ignore when looking for source files.
1024c4400c7SValeria Barra# This patterns also effect to html_static_path and html_extra_path
103bcb2dfaeSJed Brownexclude_patterns = [
104*dd75fd25SJed Brown    "examples/README.md",
105*dd75fd25SJed Brown    "examples/ceed/README.md",
106*dd75fd25SJed Brown    "examples/fluids/README.md",
107*dd75fd25SJed Brown    "examples/nek/README.md",
108*dd75fd25SJed Brown    "examples/petsc/README.md",
109*dd75fd25SJed Brown    "examples/solid/README.md",
110bcb2dfaeSJed Brown]
1114c4400c7SValeria Barra
1124c4400c7SValeria Barra# The name of the Pygments (syntax highlighting) style to use.
113*dd75fd25SJed Brownpygments_style = "sphinx"
1144c4400c7SValeria Barra
1154c4400c7SValeria Barra# If true, `todo` and `todoList` produce output, else they produce nothing.
1164c4400c7SValeria Barratodo_include_todos = True
1174c4400c7SValeria Barra
118094d5ef2SJed Brown# sphinxcontrib-bibtex 2.0 requires listing all bibtex files here
119094d5ef2SJed Brownbibtex_bibfiles = [
120*dd75fd25SJed Brown    "references.bib",
121094d5ef2SJed Brown]
1224c4400c7SValeria Barra
123bcb2dfaeSJed Brownmyst_enable_extensions = [
124*dd75fd25SJed Brown    "deflist",
125*dd75fd25SJed Brown    "dollarmath",
126*dd75fd25SJed Brown    "html_image",
127*dd75fd25SJed Brown    "linkify",
128*dd75fd25SJed Brown    "colon_fence",
129bcb2dfaeSJed Brown]
130bcb2dfaeSJed Brown
131bcb2dfaeSJed Brownmyst_heading_anchors = 2
1322926379fSJed Brownmyst_url_schemes = ("http", "https", "mailto")
133bcb2dfaeSJed Brown
1344c4400c7SValeria Barra# -- Options for HTML output ----------------------------------------------
1354c4400c7SValeria Barra
1364c4400c7SValeria Barra# The theme to use for HTML and HTML Help pages.  See the documentation for
1374c4400c7SValeria Barra# a list of builtin themes.
1384c4400c7SValeria Barra#
139*dd75fd25SJed Brownhtml_theme = "sphinx_rtd_theme"
1404c4400c7SValeria Barra
1414c4400c7SValeria Barra# Theme options are theme-specific and customize the look and feel of a theme
1424c4400c7SValeria Barra# further.  For a list of options available for each theme, see the
1434c4400c7SValeria Barra# documentation.
1444c4400c7SValeria Barra#
1454c4400c7SValeria Barra# html_theme_options = {}
1464c4400c7SValeria Barra
1474c4400c7SValeria Barra# Add any paths that contain custom static files (such as style sheets) here,
1484c4400c7SValeria Barra# relative to this directory. They are copied after the builtin static files,
1494c4400c7SValeria Barra# so a file named "default.css" will overwrite the builtin "default.css".
1502d2e5827SJed Brownhtml_static_path = ["css"]
1514c4400c7SValeria Barra
1524c4400c7SValeria Barra# Custom sidebar templates, must be a dictionary that maps document names
1534c4400c7SValeria Barra# to template names.
1544c4400c7SValeria Barra#
1554c4400c7SValeria Barra# This is required for the alabaster theme
1564c4400c7SValeria Barra# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars
1574c4400c7SValeria Barrahtml_sidebars = {
158*dd75fd25SJed Brown    "**": [
159*dd75fd25SJed Brown        "relations.html",  # needs 'show_related': True theme option to display
160*dd75fd25SJed Brown        "searchbox.html",
1614c4400c7SValeria Barra    ]
1624c4400c7SValeria Barra}
1634c4400c7SValeria Barra
1644c4400c7SValeria Barra# hoverxref options
1654c4400c7SValeria Barrahoverxref_auto_ref = True
1664c4400c7SValeria Barrahoverxref_mathjax = True
16773d4748aSJeremy L Thompsonhoverxref_role_types = {
168*dd75fd25SJed Brown    "ref": "modal",
16973d4748aSJeremy L Thompson}
1704c4400c7SValeria Barra
1718c5d743aSJed Brownlatex_macros = r"""
1728c5d743aSJed Brown\def \diff {\operatorname{d}\!}
173eccc2849SRezgar Shakeri\def \tcolon {\!:\!}
174eccc2849SRezgar Shakeri\def \trace {\operatorname{trace}}
1758c5d743aSJed Brown"""
1768c5d743aSJed Brown
1778c5d743aSJed Brown# Translate LaTeX macros to KaTeX and add to options for HTML builder
1788c5d743aSJed Brownkatex_macros = katex.latex_defs_to_katex_macros(latex_macros)
179*dd75fd25SJed Brownkatex_options = "macros: {" + katex_macros + "}"
180ccaff030SJeremy L Thompson
1814c4400c7SValeria Barra# -- Options for HTMLHelp output ------------------------------------------
1824c4400c7SValeria Barra
1834c4400c7SValeria Barra# Output file base name for HTML help builder.
184*dd75fd25SJed Brownhtmlhelp_basename = "libCEEDdoc"
1854c4400c7SValeria Barra
1864c4400c7SValeria Barra
1874c4400c7SValeria Barra# -- Options for LaTeX output ---------------------------------------------
1884c4400c7SValeria Barra
189*dd75fd25SJed Brownlatex_engine = "lualatex"
1904c4400c7SValeria Barra
1914c4400c7SValeria Barralatex_elements = {
1924c4400c7SValeria Barra    # The paper size ('letterpaper' or 'a4paper').
1934c4400c7SValeria Barra    #
1944c4400c7SValeria Barra    # 'papersize': 'letterpaper',
1954c4400c7SValeria Barra    # The font size ('10pt', '11pt' or '12pt').
1964c4400c7SValeria Barra    #
1974c4400c7SValeria Barra    # 'pointsize': '10pt',
1984c4400c7SValeria Barra    # Additional stuff for the LaTeX preamble.
1994c4400c7SValeria Barra    #
200*dd75fd25SJed Brown    "preamble": r"""
20130e7c925SJed Brown\usepackage{amscd}
2022926379fSJed Brown\newcommand\bm[1]{\symbf{#1}}
203*dd75fd25SJed Brown"""
204*dd75fd25SJed Brown    + latex_macros,
2054c4400c7SValeria Barra    # Latex figure (float) alignment
2064c4400c7SValeria Barra    #
2074c4400c7SValeria Barra    # 'figure_align': 'htbp',
208*dd75fd25SJed Brown    "fontpkg": r"""
2092926379fSJed Brown\usepackage[math-style=ISO,bold-style=ISO]{unicode-math}
2104c4400c7SValeria Barra\setmainfont{TeX Gyre Pagella}
2114c4400c7SValeria Barra\setmathfont{TeX Gyre Pagella Math}
2124c4400c7SValeria Barra\setsansfont{DejaVu Sans}
2134c4400c7SValeria Barra\setmonofont{DejaVu Sans Mono}
2148c5d743aSJed Brown""",
2154c4400c7SValeria Barra}
2164c4400c7SValeria Barra
217*dd75fd25SJed Brownlatex_logo = "../../img/ceed-full-name-logo.PNG"
2184c4400c7SValeria Barra
219*dd75fd25SJed Brownlatexauthorslist = r" \and ".join(authorlist)
2204c4400c7SValeria Barra
2214c4400c7SValeria Barra# Grouping the document tree into LaTeX files. List of tuples
2224c4400c7SValeria Barra# (source start file, target name, title,
2234c4400c7SValeria Barra#  author, documentclass [howto, manual, or own class]).
2244c4400c7SValeria Barralatex_documents = [
225*dd75fd25SJed Brown    (master_doc, "libCEED.tex", "libCEED User Manual", latexauthorslist, "howto"),
2264c4400c7SValeria Barra]
2274c4400c7SValeria Barra
2284c4400c7SValeria Barra
2294c4400c7SValeria Barra# -- Options for manual page output ---------------------------------------
2304c4400c7SValeria Barra
2314c4400c7SValeria Barra# One entry per manual page. List of tuples
2324c4400c7SValeria Barra# (source start file, name, description, authors, manual section).
233*dd75fd25SJed Brownman_pages = [(master_doc, "libceed", "libCEED User Manual", [author], 1)]
2344c4400c7SValeria Barra
2354c4400c7SValeria Barra
2364c4400c7SValeria Barra# -- Options for Texinfo output -------------------------------------------
2374c4400c7SValeria Barra
2384c4400c7SValeria Barra# Grouping the document tree into Texinfo files. List of tuples
2394c4400c7SValeria Barra# (source start file, target name, title, author,
2404c4400c7SValeria Barra#  dir menu entry, description, category)
2414c4400c7SValeria Barratexinfo_documents = [
242*dd75fd25SJed Brown    (
243*dd75fd25SJed Brown        master_doc,
244*dd75fd25SJed Brown        "libCEED",
245*dd75fd25SJed Brown        "libCEED User Manual",
246*dd75fd25SJed Brown        latexauthorslist,
247*dd75fd25SJed Brown        "libCEED",
248*dd75fd25SJed Brown        "Efficient implementations of finite element operators.",
249*dd75fd25SJed Brown        "Miscellaneous",
250*dd75fd25SJed Brown    ),
2514c4400c7SValeria Barra]
2524c4400c7SValeria Barra
2534c4400c7SValeria Barra
2544c4400c7SValeria Barra# -- Options for Epub output ----------------------------------------------
2554c4400c7SValeria Barra
2564c4400c7SValeria Barra# Bibliographic Dublin Core info.
2574c4400c7SValeria Barraepub_title = project
2584c4400c7SValeria Barraepub_author = author
2594c4400c7SValeria Barraepub_publisher = author
2604c4400c7SValeria Barraepub_copyright = copyright
2614c4400c7SValeria Barra
2624c4400c7SValeria Barra# The unique identifier of the text. This can be a ISBN number
2634c4400c7SValeria Barra# or the project homepage.
2644c4400c7SValeria Barra#
2654c4400c7SValeria Barra# epub_identifier = ''
2664c4400c7SValeria Barra
2674c4400c7SValeria Barra# A unique identification for the text.
2684c4400c7SValeria Barra#
2694c4400c7SValeria Barra# epub_uid = ''
2704c4400c7SValeria Barra
2714c4400c7SValeria Barra# A list of files that should not be packed into the epub file.
272*dd75fd25SJed Brownepub_exclude_files = ["search.html"]
2734c4400c7SValeria Barra
2744c4400c7SValeria Barra
2754c4400c7SValeria Barra# Example configuration for intersphinx: refer to the Python standard library.
2760696387fSJed Brownintersphinx_mapping = {
277*dd75fd25SJed Brown    "python": ("https://docs.python.org/3", None),
278*dd75fd25SJed Brown    "numpy": ("https://numpy.org/devdocs", None),
2790696387fSJed Brown}
2804c4400c7SValeria Barra
2814c4400c7SValeria Barra
2824c4400c7SValeria Barra# -- Options for breathe --------------------------------------------------
2834c4400c7SValeria Barrasys.path.append(breathe.__path__)
2844c4400c7SValeria Barrabreathe_projects = {"libCEED": "../../../xml"}
2854c4400c7SValeria Barrabreathe_default_project = "libCEED"
2864c4400c7SValeria Barrabreathe_build_directory = "../build/breathe"
287fe7bf0e4SJed Brownbreathe_domain_by_extension = {"c": "c", "h": "c", "cpp": "cpp", "hpp": "cpp"}
2884c4400c7SValeria Barra
2894c4400c7SValeria Barra# Run Doxygen if building on Read The Docs
290*dd75fd25SJed Brownrootdir = os.path.join(
291*dd75fd25SJed Brown    os.path.dirname(__file__),
292*dd75fd25SJed Brown    os.pardir,
293*dd75fd25SJed Brown    os.pardir,
294*dd75fd25SJed Brown    os.pardir)
295*dd75fd25SJed Brownif os.environ.get("READTHEDOCS"):
296*dd75fd25SJed Brown    subprocess.check_call(["doxygen", "Doxyfile"], cwd=rootdir)
2972d86b21dSJed Brown
2987a7b0fa3SJed Brown
2992d86b21dSJed Browndef mkdir_p(path):
3002d86b21dSJed Brown    try:
3012d86b21dSJed Brown        os.makedirs(path)
3022d86b21dSJed Brown    except FileExistsError:
3032d86b21dSJed Brown        pass
3042d86b21dSJed Brown
3057a7b0fa3SJed Brown
3067a7b0fa3SJed Brown# Copy example documentation from source tree
3072d86b21dSJed Browntry:
308*dd75fd25SJed Brown    shutil.rmtree("examples")
3092d86b21dSJed Brownexcept FileNotFoundError:
3102d86b21dSJed Brown    pass
3117a7b0fa3SJed Brownfor filename in glob.glob(os.path.join(
312*dd75fd25SJed Brown        rootdir, "examples/**/*.md"), recursive=True):
3132d86b21dSJed Brown    destdir = os.path.dirname(os.path.relpath(filename, rootdir))
3142d86b21dSJed Brown    mkdir_p(destdir)
3152d86b21dSJed Brown    shutil.copy2(filename, destdir)
316*dd75fd25SJed Brownshutil.copy2(os.path.join(rootdir, "README.md"), ".")
3178355605fSKaren (Ren) Stengel
3188355605fSKaren (Ren) Stengelfor filename in glob.glob(os.path.join(
319*dd75fd25SJed Brown        rootdir, "examples/**/*.csv"), recursive=True):
3208355605fSKaren (Ren) Stengel    destdir = os.path.dirname(os.path.relpath(filename, rootdir))
3218355605fSKaren (Ren) Stengel    mkdir_p(destdir)
3228355605fSKaren (Ren) Stengel    shutil.copy2(filename, destdir)
323