--- a +++ b/docs/conf.py @@ -0,0 +1,476 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# Braindecode documentation build configuration file, created by +# sphinx-quickstart on Sat Jul 1 01:51:38 2017. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# 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 inspect +import os +import os.path as op +import sys + +import matplotlib + +matplotlib.use("agg") +import faulthandler +from datetime import datetime, timezone + +import sphinx_gallery # noqa +from numpydoc import docscrape, numpydoc # noqa +from sphinx_gallery.sorting import ExplicitOrder, FileNameSortKey + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +needs_sphinx = "2.0" + +curdir = os.path.dirname(__file__) +sys.path.append(os.path.abspath(os.path.join(curdir, "..", "braindecode"))) +sys.path.append(os.path.abspath(os.path.join(curdir, "sphinxext"))) + +# 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.autosummary", + "sphinx.ext.doctest", + "sphinx.ext.todo", + "sphinx.ext.coverage", + "sphinx.ext.mathjax", + "sphinx.ext.ifconfig", + "sphinx.ext.intersphinx", + "sphinx.ext.githubpages", + "sphinx.ext.napoleon", + "sphinx_gallery.gen_gallery", + "sphinx.ext.linkcode", + "sphinx_design", + "numpydoc", + "gh_substitutions", +] + + +def linkcode_resolve(domain, info): + """Determine the URL corresponding to a Python object. + + Parameters + ---------- + domain : str + Only useful when "py". + info : dict + With keys "module" and "fullname". + + Returns + ------- + url : str + The code URL. + + Notes + ----- + This has been adapted to deal with our "verbose" decorator. + Adapted from SciPy (doc/source/conf.py). + """ + repo = "https://github.com/braindecode/braindecode/" + if domain != "py": + return None + if not info["module"]: + return None + + modname = info["module"] + fullname = info["fullname"] + + submod = sys.modules.get(modname) + if submod is None: + return None + + obj = submod + for part in fullname.split("."): + try: + obj = getattr(obj, part) + except Exception: + return None + + try: + fn = inspect.getsourcefile(obj) + except Exception: + fn = None + if not fn: + try: + fn = inspect.getsourcefile(sys.modules[obj.__module__]) + except Exception: + fn = None + if not fn: + return None + fn = op.relpath(fn, start=op.dirname(braindecode.__file__)) + fn = "/".join(op.normpath(fn).split(os.sep)) # in case on Windows + + try: + source, lineno = inspect.getsourcelines(obj) + except Exception: + lineno = None + + if lineno: + linespec = "#L%d-L%d" % (lineno, lineno + len(source) - 1) + else: + linespec = "" + + return f"{repo}/blob/master/braindecode/{fn}{linespec}" + + +# -- Options for sphinx gallery -------------------------------------------- +faulthandler.enable() +os.environ["_BRAINDECODE_BROWSER_NO_BLOCK"] = "true" +os.environ["BRAINDECODE_BROWSER_OVERVIEW_MODE"] = "hidden" +os.environ["BRAINDECODE_BROWSER_THEME"] = "light" + +# -- 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. +curdir = os.path.dirname(__file__) +sys.path.append(os.path.abspath(os.path.join(curdir, "..", "mne"))) +sys.path.append(os.path.abspath(os.path.join(curdir, "sphinxext"))) + +autosummary_generate = True +autodoc_default_options = {"inherited-members": False} + +numpydoc_show_class_members = False + +exclude_patterns = ["_build", "_templates"] + +# 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" + +# General information about the project. + + +# -- Project information ----------------------------------------------------- + +project = "Braindecode" +td = datetime.now(tz=timezone.utc) + +# We need to triage which date type we use so that incremental builds work +# (Sphinx looks at variable changes and rewrites all files if some change) +copyright = ( + f'2012–{td.year}, Braindecode Developers. Last updated <time datetime="{td.isoformat()}" class="localized">{td.strftime("%Y-%m-%d %H:%M %Z")}</time>\n' # noqa: E501 + '<script type="text/javascript">$(function () { $("time.localized").each(function () { var el = $(this); el.text(new Date(el.attr("datetime")).toLocaleString([], {dateStyle: "medium", timeStyle: "long"})); }); } )</script>' +) # noqa: E501 +if os.getenv("BRAINDECODE_FULL_DATE", "false").lower() != "true": + copyright = f"2018–{td.year}, Braindecode Developers." + +author = "Braindecode developers" + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +import braindecode + +release = braindecode.__version__ +# The full version, including alpha/beta/rc tags. +version = ".".join(release.split(".")[:2]) + +# 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 = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to 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 = "sphinx" + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = True + +# Sphinx-gallery configuration + +# Example configuration for intersphinx: refer to the Python standard library. +intersphinx_mapping = { + "python": ("https://docs.python.org/{.major}".format(sys.version_info), None), + "numpy": ("https://docs.scipy.org/doc/numpy/", None), + "scipy": ("https://docs.scipy.org/doc/scipy/reference", None), + "matplotlib": ("https://matplotlib.org/", None), + "sklearn": ("http://scikit-learn.org/stable", None), + "mne": ("http://mne.tools/stable", None), + "skorch": ("https://skorch.readthedocs.io/en/stable/", None), + "torch": ("https://pytorch.org/docs/stable/", None), + "braindecode": ("https://braindecode.org/", None), +} + +sphinx_gallery_conf = { + "examples_dirs": ["../examples"], + "gallery_dirs": ["auto_examples"], + "doc_module": ("braindecode", "mne"), + "backreferences_dir": "generated", + "show_memory": True, + "reference_url": dict(braindecode=None), + "subsection_order": ExplicitOrder( + [ + "../examples/model_building", + "../examples/datasets_io", + "../examples/advanced_training", + "../examples/applied_examples", + ] + ), + "within_subsection_order": FileNameSortKey, +} + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +import sphinx_rtd_theme # noqa + +html_theme = "pydata_sphinx_theme" +html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] +switcher_version_match = "dev" if release.endswith("dev0") else version +# 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 = { + "icon_links": [ + { + "name": "GitHub", + "url": "https://github.com/braindecode/braindecode", + "icon": "fa-brands fa-github", + }, + ], + "github_url": "https://github.com/braindecode/braindecode", + "icon_links_label": "External Links", # for screen reader + "use_edit_page_button": False, + "navigation_with_keys": False, + "collapse_navigation": False, + "header_links_before_dropdown": 6, + "navigation_depth": 6, + "show_toc_level": 1, + "navbar_end": ["theme-switcher", "version-switcher"], + "switcher": { + "json_url": "https://braindecode.org/stable/_static/versions.json", + "version_match": switcher_version_match, + }, + "logo": { + "image_light": "_static/braindecode_symbol.png", + "image_dark": "_static/braindecode_symbol.png", + "alt_text": "Braindecode Logo", + }, + "footer_start": ["copyright"], + # 'pygment_light_style': 'default', + "analytics": dict(google_analytics_id="G-7Q43R82K6D"), +} + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +html_logo = "_static/braindecode_symbol.png" + +# 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"] +html_css_files = [ + "style.css", +] + +# If true, links to the reST sources are added to the pages. +html_show_sourcelink = False +html_copy_source = False + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +html_show_sphinx = False + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = "Braindecode-doc" + +# accommodate different logo shapes (width values in rem) +xs = "2" +sm = "2.5" +md = "3" +lg = "4.5" +xl = "5" +xxl = "6" + +html_context = { + "build_dev_html": bool(int(os.environ.get("BUILD_DEV_HTML", False))), + "default_mode": "light", + "pygment_light_style": "tango", + "pygment_dark_style": "native", + "icon_links_label": "Quick Links", # for screen reader + "show_toc_level": 1, + "institutions": [ + dict( + name="University of Freiburg", + img="unifreiburg.png", + url="https://www.ieeg.uni-freiburg.de/", + size=lg, + ), + dict( + name="Institut national de recherche en informatique et en automatique", # noqa E501 + img="inria.png", + url="https://www.inria.fr/", + size=xl, + ), + ], + "navbar_align": "content", + "github_user": "braindecode", + "github_repo": "braindecode", + "github_version": "main", + "doc_path": "docs", +} + +html_sidebars = { + "models_summary": [], + "cite": [], + "help": [], + "whats_new": [], +} + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +latex_logo = "_static/braindecode_symbol.png" +latex_toplevel_sectioning = "part" + +# 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, + "Braindecode.tex", + "Braindecode", + "Robin Tibor Schirrmeister", + "manual", + ), +] + +# -- Fontawesome support ----------------------------------------------------- + +# here the "fab" and "fas" refer to "brand" and "solid" (determines which font +# file to look in). "fw" indicates fixed width. +brand_icons = ("apple", "linux", "windows", "discourse", "python") +fixed_icons = ( + # homepage: + "book", + "code-branch", + "newspaper", + "question-circle", + "quote-left", + # contrib guide: + "bug", + "comment", + "hand-sparkles", + "magic", + "pencil-alt", + "remove-format", + "universal-access", + "discourse", + "python", +) +other_icons = ( + "hand-paper", + "question", + "rocket", + "server", + "code", + "desktop", + "terminal", + "cloud-download-alt", + "wrench", + "hourglass", +) +icons = dict() +for icon in brand_icons + fixed_icons + other_icons: + font = ("fab" if icon in brand_icons else "fas",) # brand or solid font + fw = ("fa-fw",) if icon in fixed_icons else () # fixed-width + icons[icon] = font + fw + +prolog = "" +for icon, classes in icons.items(): + prolog += f""" +.. |{icon}| raw:: html + + <i class="{" ".join(classes)} fa-{icon}"></i> +""" + +prolog += """ +.. |fix-bug| raw:: html + + <span class="fa-stack small-stack"> + <i class="fas fa-bug fa-stack-1x"></i> + <i class="fas fa-ban fa-stack-2x"></i> + </span> +""" + +prolog += """ +.. |ensp| unicode:: U+2002 .. EN SPACE +""" + +# -- 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, "braindecode", "Braindecode", [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, + "Braindecode", + "Braindecode", + author, + "Braindecode", + "One line description of project.", + "Miscellaneous", + ), +]