xref: /libCEED/doc/sphinx/source/conf.py (revision 8355605fb12655f53893674f518ac7968aa830ae)
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 sphinx_rtd_theme
264c4400c7SValeria Barraimport sys
274c4400c7SValeria Barraimport breathe
284c4400c7SValeria Barraimport os
294c4400c7SValeria Barraimport subprocess
308c5d743aSJed Brownfrom sphinxcontrib import katex
314c4400c7SValeria Barra
324c4400c7SValeria Barra# -- General configuration ------------------------------------------------
334c4400c7SValeria Barra
344c4400c7SValeria Barra# If your documentation needs a minimal Sphinx version, state it here.
354c4400c7SValeria Barra#
364c4400c7SValeria Barra# needs_sphinx = '1.0'
374c4400c7SValeria Barra
384c4400c7SValeria Barra# Add any Sphinx extension module names here, as strings. They can be
394c4400c7SValeria Barra# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
404c4400c7SValeria Barra# ones.
414c4400c7SValeria Barraextensions = [
42*8355605fSKaren (Ren) Stengel    'altair.sphinxext.altairplot',
434c4400c7SValeria Barra    'breathe',
4461dafefdSJed Brown    'hoverxref.extension',
454c4400c7SValeria Barra    'recommonmark',
464c4400c7SValeria Barra    'sphinx_markdown_tables',
47eccc2849SRezgar Shakeri    'sphinx_panels',
484c4400c7SValeria Barra    'sphinx_rtd_theme',
494c4400c7SValeria Barra    'sphinx.ext.autodoc',
504c4400c7SValeria Barra    'sphinx.ext.coverage',
514c4400c7SValeria Barra    'sphinx.ext.doctest',
524c4400c7SValeria Barra    'sphinx.ext.ifconfig',
534c4400c7SValeria Barra    'sphinx.ext.intersphinx',
544c4400c7SValeria Barra    'sphinx.ext.githubpages',
55b1581481SJed Brown    'sphinxcontrib.katex',
564c4400c7SValeria Barra    'sphinxcontrib.mermaid',  # still in beta; fails with latexpdf builder
574c4400c7SValeria Barra    'sphinx.ext.todo',
584c4400c7SValeria Barra    'sphinx.ext.viewcode',
594c4400c7SValeria Barra    'sphinxcontrib.bibtex',
604c4400c7SValeria Barra    'sphinxcontrib.rsvgconverter',
614c4400c7SValeria Barra]
624c4400c7SValeria Barra
634c4400c7SValeria Barra# The following, if true, allows figures, tables and code-blocks to be
644c4400c7SValeria Barra# automatically numbered if they have a caption.
654c4400c7SValeria Barranumfig = True
664c4400c7SValeria Barra
674c4400c7SValeria Barra# Add any paths that contain templates here, relative to this directory.
684c4400c7SValeria Barratemplates_path = ['_templates']
694c4400c7SValeria Barra
704c4400c7SValeria Barra# The suffix(es) of source filenames.
714c4400c7SValeria Barra# You can specify multiple suffix as a list of string:
724c4400c7SValeria Barra#
734c4400c7SValeria Barra# source_suffix = ['.rst', '.md']
744c4400c7SValeria Barrasource_suffix = {
754c4400c7SValeria Barra    '.rst': 'restructuredtext',
764c4400c7SValeria Barra    '.md': 'markdown'}
774c4400c7SValeria Barra
784c4400c7SValeria Barra# The master toctree document.
794c4400c7SValeria Barramaster_doc = 'index'
804c4400c7SValeria Barra
814c4400c7SValeria Barra# General information about the project.
824c4400c7SValeria Barraproject = 'libCEED'
834c4400c7SValeria Barracopyright = '2020, LLNL, University of Colorado, University of Illinois, University of Tennesee, and the authors'
844c4400c7SValeria Barrawith open('../../../AUTHORS') as f:
854c4400c7SValeria Barra    authorlist = f.readlines()
864c4400c7SValeria Barraauthor = ', '.join(authorlist)
874c4400c7SValeria Barra
884c4400c7SValeria Barra# The version info for the project you're documenting, acts as replacement for
894c4400c7SValeria Barra# |version| and |release|, also used in various other places throughout the
904c4400c7SValeria Barra# built documents.
914c4400c7SValeria Barra#
924c4400c7SValeria Barra# The short X.Y version.
934c4400c7SValeria Barrawith open('../../../ceed.pc.template') as f:
944c4400c7SValeria Barra    pkgconf_version = 'unknown'
954c4400c7SValeria Barra    for line in f:
964c4400c7SValeria Barra        if line.startswith('Version:'):
974c4400c7SValeria Barra            pkgconf_version = line.partition(': ')[2]
984c4400c7SValeria Barra            break
994c4400c7SValeria Barraversion = pkgconf_version
1004c4400c7SValeria Barra# The full version, including alpha/beta/rc tags.
1014c4400c7SValeria Barrarelease = pkgconf_version
1024c4400c7SValeria Barra
1034c4400c7SValeria Barra# The language for content autogenerated by Sphinx. Refer to documentation
1044c4400c7SValeria Barra# for a list of supported languages.
1054c4400c7SValeria Barra#
1064c4400c7SValeria Barra# This is also used if you do content translation via gettext catalogs.
1074c4400c7SValeria Barra# Usually you set "language" from the command line for these cases.
1084c4400c7SValeria Barralanguage = None
1094c4400c7SValeria Barra
1104c4400c7SValeria Barra# List of patterns, relative to source directory, that match files and
1114c4400c7SValeria Barra# directories to ignore when looking for source files.
1124c4400c7SValeria Barra# This patterns also effect to html_static_path and html_extra_path
11390d4e7b2Svaleriabarraexclude_patterns = ['examples/README.rst']
1144c4400c7SValeria Barra
1154c4400c7SValeria Barra# The name of the Pygments (syntax highlighting) style to use.
1164c4400c7SValeria Barrapygments_style = 'sphinx'
1174c4400c7SValeria Barra
1184c4400c7SValeria Barra# If true, `todo` and `todoList` produce output, else they produce nothing.
1194c4400c7SValeria Barratodo_include_todos = True
1204c4400c7SValeria Barra
121094d5ef2SJed Brown# sphinxcontrib-bibtex 2.0 requires listing all bibtex files here
122094d5ef2SJed Brownbibtex_bibfiles = [
123094d5ef2SJed Brown    'references.bib',
124094d5ef2SJed Brown]
1254c4400c7SValeria Barra
1264c4400c7SValeria Barra# -- Options for HTML output ----------------------------------------------
1274c4400c7SValeria Barra
1284c4400c7SValeria Barra# The theme to use for HTML and HTML Help pages.  See the documentation for
1294c4400c7SValeria Barra# a list of builtin themes.
1304c4400c7SValeria Barra#
1314c4400c7SValeria Barrahtml_theme = 'sphinx_rtd_theme'
1324c4400c7SValeria Barra
1334c4400c7SValeria Barra# Theme options are theme-specific and customize the look and feel of a theme
1344c4400c7SValeria Barra# further.  For a list of options available for each theme, see the
1354c4400c7SValeria Barra# documentation.
1364c4400c7SValeria Barra#
1374c4400c7SValeria Barra# html_theme_options = {}
1384c4400c7SValeria Barra
1394c4400c7SValeria Barra# Add any paths that contain custom static files (such as style sheets) here,
1404c4400c7SValeria Barra# relative to this directory. They are copied after the builtin static files,
1414c4400c7SValeria Barra# so a file named "default.css" will overwrite the builtin "default.css".
142f6d735e9SValeria Barrahtml_static_path = []
1434c4400c7SValeria Barra
1444c4400c7SValeria Barra# Custom sidebar templates, must be a dictionary that maps document names
1454c4400c7SValeria Barra# to template names.
1464c4400c7SValeria Barra#
1474c4400c7SValeria Barra# This is required for the alabaster theme
1484c4400c7SValeria Barra# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars
1494c4400c7SValeria Barrahtml_sidebars = {
1504c4400c7SValeria Barra    '**': [
1514c4400c7SValeria Barra        'relations.html',  # needs 'show_related': True theme option to display
1524c4400c7SValeria Barra        'searchbox.html',
1534c4400c7SValeria Barra    ]
1544c4400c7SValeria Barra}
1554c4400c7SValeria Barra
1564c4400c7SValeria Barra# hoverxref options
1574c4400c7SValeria Barrahoverxref_auto_ref = True
1584c4400c7SValeria Barrahoverxref_mathjax = True
1594c4400c7SValeria Barra
1608c5d743aSJed Brownlatex_macros = r"""
1618c5d743aSJed Brown\def \diff {\operatorname{d}\!}
162eccc2849SRezgar Shakeri\def \tcolon {\!:\!}
163eccc2849SRezgar Shakeri\def \trace {\operatorname{trace}}
1648c5d743aSJed Brown"""
1658c5d743aSJed Brown
1668c5d743aSJed Brown# Translate LaTeX macros to KaTeX and add to options for HTML builder
1678c5d743aSJed Brownkatex_macros = katex.latex_defs_to_katex_macros(latex_macros)
1688c5d743aSJed Brownkatex_options = 'macros: {' + katex_macros + '}'
169ccaff030SJeremy L Thompson
17030e7c925SJed Brown
17130e7c925SJed Browndef katex_cdn(path):
17230e7c925SJed Brown    katex_gitcommit = '7c696bb7ac8995f177676d62be09ceefa37d66e3'
17330e7c925SJed Brown    return f'https://cdn.jsdelivr.net/gh/jedbrown/katex@{katex_gitcommit}/' + path
17430e7c925SJed Brown
17530e7c925SJed Brown
17630e7c925SJed Brownkatex_css_path = katex_cdn('dist/katex.min.css')
17730e7c925SJed Brownkatex_js_path = katex_cdn('dist/katex.min.js')
17830e7c925SJed Brownkatex_autorender_path = katex_cdn('dist/contrib/auto-render.min.js')
17930e7c925SJed Brown
1804c4400c7SValeria Barra# -- Options for HTMLHelp output ------------------------------------------
1814c4400c7SValeria Barra
1824c4400c7SValeria Barra# Output file base name for HTML help builder.
1834c4400c7SValeria Barrahtmlhelp_basename = 'libCEEDdoc'
1844c4400c7SValeria Barra
1854c4400c7SValeria Barra
1864c4400c7SValeria Barra# -- Options for LaTeX output ---------------------------------------------
1874c4400c7SValeria Barra
1884c4400c7SValeria Barralatex_engine = 'xelatex'
1894c4400c7SValeria Barra
1904c4400c7SValeria Barralatex_elements = {
1914c4400c7SValeria Barra    # The paper size ('letterpaper' or 'a4paper').
1924c4400c7SValeria Barra    #
1934c4400c7SValeria Barra    # 'papersize': 'letterpaper',
1944c4400c7SValeria Barra
1954c4400c7SValeria Barra    # The font size ('10pt', '11pt' or '12pt').
1964c4400c7SValeria Barra    #
1974c4400c7SValeria Barra    # 'pointsize': '10pt',
1984c4400c7SValeria Barra
1994c4400c7SValeria Barra    # Additional stuff for the LaTeX preamble.
2004c4400c7SValeria Barra    #
2018c5d743aSJed Brown    'preamble': r"""
202ccaff030SJeremy L Thompson\usepackage{bm}
20330e7c925SJed Brown\usepackage{amscd}
2048c5d743aSJed Brown""" + latex_macros,
2054c4400c7SValeria Barra
2064c4400c7SValeria Barra    # Latex figure (float) alignment
2074c4400c7SValeria Barra    #
2084c4400c7SValeria Barra    # 'figure_align': 'htbp',
2094c4400c7SValeria Barra    'fontenc': r'\usepackage{mathspec}',
2108c5d743aSJed Brown    'fontpkg': r"""
2114c4400c7SValeria Barra\setmainfont{TeX Gyre Pagella}
2124c4400c7SValeria Barra\setmathfont{TeX Gyre Pagella Math}
2134c4400c7SValeria Barra\setsansfont{DejaVu Sans}
2144c4400c7SValeria Barra\setmonofont{DejaVu Sans Mono}
2158c5d743aSJed Brown""",
2164c4400c7SValeria Barra}
2174c4400c7SValeria Barra
2184c4400c7SValeria Barralatex_logo = '../../img/ceed-full-name-logo.PNG'
2194c4400c7SValeria Barra
2204c4400c7SValeria Barralatexauthorslist = r' \and '.join(authorlist)
2214c4400c7SValeria Barra
2224c4400c7SValeria Barra# Grouping the document tree into LaTeX files. List of tuples
2234c4400c7SValeria Barra# (source start file, target name, title,
2244c4400c7SValeria Barra#  author, documentclass [howto, manual, or own class]).
2254c4400c7SValeria Barralatex_documents = [
2264c4400c7SValeria Barra    (master_doc, 'libCEED.tex', 'libCEED User Manual',
2274c4400c7SValeria Barra     latexauthorslist, 'howto'),
2284c4400c7SValeria Barra]
2294c4400c7SValeria Barra
2304c4400c7SValeria Barra
2314c4400c7SValeria Barra# -- Options for manual page output ---------------------------------------
2324c4400c7SValeria Barra
2334c4400c7SValeria Barra# One entry per manual page. List of tuples
2344c4400c7SValeria Barra# (source start file, name, description, authors, manual section).
2354c4400c7SValeria Barraman_pages = [
2364c4400c7SValeria Barra    (master_doc, 'libceed', 'libCEED User Manual',
2374c4400c7SValeria Barra     [author], 1)
2384c4400c7SValeria Barra]
2394c4400c7SValeria Barra
2404c4400c7SValeria Barra
2414c4400c7SValeria Barra# -- Options for Texinfo output -------------------------------------------
2424c4400c7SValeria Barra
2434c4400c7SValeria Barra# Grouping the document tree into Texinfo files. List of tuples
2444c4400c7SValeria Barra# (source start file, target name, title, author,
2454c4400c7SValeria Barra#  dir menu entry, description, category)
2464c4400c7SValeria Barratexinfo_documents = [
2474c4400c7SValeria Barra    (master_doc, 'libCEED', 'libCEED User Manual',
2484c4400c7SValeria Barra     latexauthorslist, 'libCEED', 'Efficient implementations of finite element operators.',
2494c4400c7SValeria Barra     'Miscellaneous'),
2504c4400c7SValeria Barra]
2514c4400c7SValeria Barra
2524c4400c7SValeria Barra
2534c4400c7SValeria Barra# -- Options for Epub output ----------------------------------------------
2544c4400c7SValeria Barra
2554c4400c7SValeria Barra# Bibliographic Dublin Core info.
2564c4400c7SValeria Barraepub_title = project
2574c4400c7SValeria Barraepub_author = author
2584c4400c7SValeria Barraepub_publisher = author
2594c4400c7SValeria Barraepub_copyright = copyright
2604c4400c7SValeria Barra
2614c4400c7SValeria Barra# The unique identifier of the text. This can be a ISBN number
2624c4400c7SValeria Barra# or the project homepage.
2634c4400c7SValeria Barra#
2644c4400c7SValeria Barra# epub_identifier = ''
2654c4400c7SValeria Barra
2664c4400c7SValeria Barra# A unique identification for the text.
2674c4400c7SValeria Barra#
2684c4400c7SValeria Barra# epub_uid = ''
2694c4400c7SValeria Barra
2704c4400c7SValeria Barra# A list of files that should not be packed into the epub file.
2714c4400c7SValeria Barraepub_exclude_files = ['search.html']
2724c4400c7SValeria Barra
2734c4400c7SValeria Barra
2744c4400c7SValeria Barra# Example configuration for intersphinx: refer to the Python standard library.
2750696387fSJed Brownintersphinx_mapping = {
2767e780f74SJed Brown    'python': ('https://docs.python.org/3', None),
2770696387fSJed Brown    'numpy': ('https://numpy.org/devdocs', None),
2780696387fSJed Brown}
2794c4400c7SValeria Barra
2804c4400c7SValeria Barra
2814c4400c7SValeria Barra# -- Options for breathe --------------------------------------------------
2824c4400c7SValeria Barrasys.path.append(breathe.__path__)
2834c4400c7SValeria Barrabreathe_projects = {"libCEED": "../../../xml"}
2844c4400c7SValeria Barrabreathe_default_project = "libCEED"
2854c4400c7SValeria Barrabreathe_build_directory = "../build/breathe"
286fe7bf0e4SJed Brownbreathe_domain_by_extension = {"c": "c", "h": "c", "cpp": "cpp", "hpp": "cpp"}
2874c4400c7SValeria Barra
2884c4400c7SValeria Barra# Run Doxygen if building on Read The Docs
2897a7b0fa3SJed Brownrootdir = os.path.join(os.path.dirname(__file__),
2907a7b0fa3SJed Brown                       os.pardir, os.pardir, os.pardir)
2912d86b21dSJed Brownif os.environ.get('READTHEDOCS'):
2924c4400c7SValeria Barra    subprocess.check_call(['doxygen', 'Doxyfile'], cwd=rootdir)
2932d86b21dSJed Brown
2947a7b0fa3SJed Brown
2952d86b21dSJed Browndef mkdir_p(path):
2962d86b21dSJed Brown    try:
2972d86b21dSJed Brown        os.makedirs(path)
2982d86b21dSJed Brown    except FileExistsError:
2992d86b21dSJed Brown        pass
3002d86b21dSJed Brown
3017a7b0fa3SJed Brown
3027a7b0fa3SJed Brown# Copy example documentation from source tree
3032d86b21dSJed Browntry:
3042d86b21dSJed Brown    shutil.rmtree('examples')
3052d86b21dSJed Brownexcept FileNotFoundError:
3062d86b21dSJed Brown    pass
3077a7b0fa3SJed Brownfor filename in glob.glob(os.path.join(
3087a7b0fa3SJed Brown        rootdir, 'examples/**/*.rst'), recursive=True):
3092d86b21dSJed Brown    destdir = os.path.dirname(os.path.relpath(filename, rootdir))
3102d86b21dSJed Brown    mkdir_p(destdir)
3112d86b21dSJed Brown    shutil.copy2(filename, destdir)
312*8355605fSKaren (Ren) Stengel
313*8355605fSKaren (Ren) Stengelfor filename in glob.glob(os.path.join(
314*8355605fSKaren (Ren) Stengel        rootdir, 'examples/**/*.csv'), recursive=True):
315*8355605fSKaren (Ren) Stengel    destdir = os.path.dirname(os.path.relpath(filename, rootdir))
316*8355605fSKaren (Ren) Stengel    mkdir_p(destdir)
317*8355605fSKaren (Ren) Stengel    shutil.copy2(filename, destdir)
318