blob: f8b62717336caabe785ee887bd57561a867b9f20 [file] [log] [blame]
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.
# Configuration file for the Sphinx documentation builder.
# Created by isphinx-quickstart on Tue Jul 19 14:58:12 2022.
#
# This file only contains a selection of the most common options. For a full
# list see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html
# -- 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 distutils.file_util
import glob
import os
import sys
import pytorch_sphinx_theme
sys.path.insert(0, os.path.abspath("."))
sys.path.insert(0, os.path.abspath("../../.."))
sys.path.insert(0, os.path.abspath("../.."))
# -- Project information -----------------------------------------------------
project = "ExecuTorch"
copyright = "2023, ExecuTorch"
author = "ExecuTorch Contributors"
# -- General configuration ---------------------------------------------------
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
import os
import sys
sys.path.insert(0, os.path.abspath("../../"))
extensions = [
"breathe",
"sphinx.ext.autodoc",
"sphinx.ext.autosectionlabel",
"sphinx.ext.autosummary",
"sphinx.ext.coverage",
"sphinx.ext.doctest",
"sphinx_copybutton",
"sphinx.ext.napoleon",
"sphinx.ext.todo",
"sphinx.ext.viewcode",
"sphinx.ext.intersphinx",
"sphinx.ext.coverage",
"myst_parser",
"sphinx_design",
"sphinx_gallery.gen_gallery",
"executorch_custom_versions",
]
this_file_dir = os.path.abspath(os.path.dirname(__file__))
doxygen_xml_dir = os.path.join(
os.path.dirname(this_file_dir), # {repo_root}/docs/
"build", # {repo_root}/docs/build
"xml", # {repo_root}/docs/cpp/build/xml
)
html_favicon = "_static/img/ExecuTorch-Logo-cropped.svg"
# Get ET_VERSION_DOCS during the build.
et_version_docs = os.environ.get("ET_VERSION_DOCS", None)
# The code below will cut version displayed in the dropdown like this:
# tags like v0.1.0 = > 0.1
# branch like release/0.1 => 0.1
# main will remain main
# if not set will fail back to main
# the version varible is used in layout.html: https://github.com/pytorch/executorch/blob/main/docs/source/_templates/layout.html#L29
if et_version_docs:
# Check if starts with release/ and set the version to the number after slash
if et_version_docs.startswith("release/"):
version = et_version_docs.split("/")[-1]
else:
# Remove "v" prefix if present
if et_version_docs.startswith("v"):
et_version_docs = et_version_docs[1:]
# Split to major, minor, and patch
version_components = et_version_docs.split(".")
# Combine the major and minor version components:
if len(version_components) >= 2:
version = release = ".".join(version_components[:2])
else:
# If there are not enough components, use the full version
version = release = et_version_docs
html_title = " ".join((project, version, "documentation"))
# IF ET_VERSION_DOCS not set, set version to main.
# This can be updated to nightly and so on.
else:
version = "main"
release = "main"
breathe_projects = {"ExecuTorch": "../build/xml/"}
breathe_default_project = "ExecuTorch"
templates_path = ["_templates"]
autodoc_typehints = "description"
myst_enable_extensions = [
"colon_fence",
]
myst_heading_anchors = 4
sphinx_gallery_conf = {
"examples_dirs": ["tutorials_source"],
"ignore_pattern": "template_tutorial.py",
"gallery_dirs": ["tutorials"],
"filename_pattern": "/tutorials_source/",
"promote_jupyter_magic": True,
"backreferences_dir": None,
"first_notebook_cell": ("%matplotlib inline"),
}
assert len(sphinx_gallery_conf["examples_dirs"]) == len(
sphinx_gallery_conf["gallery_dirs"]
), "Lengths of galery_dirs and examples_dir must be same."
for i in range(len(sphinx_gallery_conf["examples_dirs"])):
gallery_dir = sphinx_gallery_conf["gallery_dirs"][i]
source_dir = sphinx_gallery_conf["examples_dirs"][i]
# Create gallery dirs if it doesn't exist
os.makedirs(gallery_dir, exist_ok=True)
# Copy .md files from source dir to gallery dir
for f in glob.glob(os.path.join(source_dir, "*.md")):
distutils.file_util.copy_file(f, gallery_dir, update=True)
source_suffix = [".rst", ".md"]
autodoc_typehints = "none"
# Add any paths that contain templates here, relative to this directory.
# templates_path = ["../_templates"]
# 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", "tutorial-template.md"]
exclude_patterns += sphinx_gallery_conf["examples_dirs"]
exclude_patterns += ["*/index.rst"]
# autosectionlabel throws warnings if section names are duplicated.
# The following tells autosectionlabel to not throw a warning for
# duplicated section names that are in different documents.
autosectionlabel_prefix_document = True
# -- 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 = "pytorch_sphinx_theme"
html_theme_path = [pytorch_sphinx_theme.get_html_theme_path()]
# 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 = {
"pytorch_project": "executorch",
"display_version": True,
"logo_only": True,
"collapse_navigation": False,
"sticky_navigation": False,
"navigation_depth": 4,
"includehidden": True,
"titles_only": False,
"analytics_id": "GTM-T8XT4PS",
}
# 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 = ["css/custom.css", "progress-bar.css"]
html_js_files = ["js/progress-bar.js"]
# Example configuration for intersphinx: refer to the Python standard library.
intersphinx_mapping = {
"python": ("https://docs.python.org/", None),
"numpy": ("https://docs.scipy.org/doc/numpy/", None),
"torch": ("https://pytorch.org/docs/stable/", None),
}
# Custom directives defintions to create cards on main landing page
from custom_directives import (
CustomCardEnd,
CustomCardItem,
CustomCardStart,
SupportedDevices,
SupportedProperties,
)
from docutils.parsers import rst
# Register custom directives
rst.directives.register_directive("devices", SupportedDevices)
rst.directives.register_directive("properties", SupportedProperties)
rst.directives.register_directive("customcardstart", CustomCardStart)
rst.directives.register_directive("customcarditem", CustomCardItem)
rst.directives.register_directive("customcardend", CustomCardEnd)