| # |
| # 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 os |
| |
| import functorch |
| |
| |
| # import sys |
| |
| # source code directory, relative to this file, for sphinx-autobuild |
| # sys.path.insert(0, os.path.abspath('../..')) |
| |
| |
| RELEASE = os.environ.get("RELEASE", False) |
| |
| |
| import pytorch_sphinx_theme |
| |
| |
| # -- General configuration ------------------------------------------------ |
| |
| # Required version of sphinx is set from docs/requirements.txt |
| |
| # 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.intersphinx", |
| "sphinx.ext.todo", |
| "sphinx.ext.coverage", |
| "sphinx.ext.napoleon", |
| "sphinx.ext.viewcode", |
| # 'sphinxcontrib.katex', |
| "sphinx.ext.autosectionlabel", |
| "sphinx_copybutton", |
| "myst_nb", |
| ] |
| |
| # sys.path.insert(0, os.path.abspath('./notebooks')) |
| |
| # build the templated autosummary files |
| # autosummary_generate = True |
| numpydoc_show_class_members = False |
| |
| # 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 |
| |
| # tell myst to not execute ipynb tutorials. |
| nb_execution_mode = "off" |
| |
| # katex options |
| # |
| # |
| |
| katex_prerender = True |
| |
| napoleon_use_ivar = True |
| |
| # build the templated autosummary files |
| autosummary_generate = True |
| |
| # 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 = "functorch" |
| copyright = "PyTorch Contributors" |
| author = "PyTorch Contributors" |
| functorch_version = str(functorch.__version__) |
| |
| # 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. |
| # TODO: change to [:2] at v1.0 |
| version = "nightly (" + functorch_version + ")" |
| # The full version, including alpha/beta/rc tags. |
| # TODO: verify this works as expected |
| release = "nightly" |
| |
| # Customized html_title here. |
| # Default is " ".join(project, release, "documentation") if not set |
| # TODO: I don't know if this flag works, please check before using it |
| if RELEASE: |
| raise RuntimeError("NYI") |
| # remove hash (start with 'a') from version number if any |
| # version_end = functorch_version.find('a') |
| # if version_end == -1: |
| # html_title = " ".join((project, functorch_version, "documentation")) |
| # version = functorch_version |
| # else: |
| # html_title = " ".join((project, functorch_version[:version_end], "documentation")) |
| # version = functorch_version[:version_end] |
| # release = version |
| |
| # 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 patterns also effect to html_static_path and html_extra_path |
| exclude_patterns = ["notebooks/colab**", "notebooks/_src/**"] |
| |
| # 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 |
| |
| # Disable docstring inheritance |
| autodoc_inherit_docstrings = False |
| |
| # Disable displaying type annotations, these can be very verbose |
| autodoc_typehints = "none" |
| |
| # Enable overriding of function signatures in the first line of the docstring. |
| autodoc_docstring_signature = True |
| |
| # -- katex javascript in header |
| # |
| # def setup(app): |
| # app.add_javascript("https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.js") |
| |
| |
| # -- 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 = { |
| "collapse_navigation": False, |
| "display_version": True, |
| "logo_only": True, |
| "pytorch_project": "functorch", |
| "navigation_with_keys": True, |
| "analytics_id": "UA-117752657-2", |
| } |
| |
| # 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", |
| ] |
| |
| |
| # Called automatically by Sphinx, making this `conf.py` an "extension". |
| def setup(app): |
| # NOTE: in Sphinx 1.8+ `html_css_files` is an official configuration value |
| # and can be moved outside of this function (and the setup(app) function |
| # can be deleted). |
| html_css_files = [ |
| "https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.css" |
| ] |
| |
| # In Sphinx 1.8 it was renamed to `add_css_file`, 1.7 and prior it is |
| # `add_stylesheet` (deprecated in 1.8). |
| add_css = getattr(app, "add_css_file", app.add_stylesheet) |
| for css_file in html_css_files: |
| add_css(css_file) |
| |
| |
| # -- Options for HTMLHelp output ------------------------------------------ |
| |
| # Output file base name for HTML help builder. |
| htmlhelp_basename = "PyTorchdoc" |
| |
| |
| # -- 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', |
| } |
| |
| # 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, |
| "pytorch.tex", |
| "PyTorch Documentation", |
| "Torch Contributors", |
| "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, "functorch", "functorch 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, |
| "functorch", |
| "functorch Documentation", |
| author, |
| "functorch", |
| "One line description of project.", |
| "Miscellaneous", |
| ), |
| ] |
| |
| |
| # Example configuration for intersphinx: refer to the Python standard library. |
| intersphinx_mapping = { |
| "python": ("https://docs.python.org/3", None), |
| "numpy": ("https://numpy.org/doc/stable", None), |
| "torch": ("https://pytorch.org/docs/stable/", None), |
| } |
| |
| import sphinx.ext.doctest |
| |
| # -- A patch that prevents Sphinx from cross-referencing ivar tags ------- |
| # See http://stackoverflow.com/a/41184353/3343043 |
| from docutils import nodes |
| from sphinx import addnodes |
| from sphinx.util.docfields import TypedField |
| |
| |
| # Without this, doctest adds any example with a `>>>` as a test |
| doctest_test_doctest_blocks = "" |
| doctest_default_flags = sphinx.ext.doctest.doctest.ELLIPSIS |
| doctest_global_setup = """ |
| import torch |
| try: |
| import torchvision |
| except ImportError: |
| torchvision = None |
| """ |
| |
| |
| def patched_make_field(self, types, domain, items, **kw): |
| # `kw` catches `env=None` needed for newer sphinx while maintaining |
| # backwards compatibility when passed along further down! |
| |
| # (List, unicode, Tuple) -> nodes.field |
| def handle_item(fieldarg, content): |
| par = nodes.paragraph() |
| par += addnodes.literal_strong("", fieldarg) # Patch: this line added |
| # par.extend(self.make_xrefs(self.rolename, domain, fieldarg, |
| # addnodes.literal_strong)) |
| if fieldarg in types: |
| par += nodes.Text(" (") |
| # NOTE: using .pop() here to prevent a single type node to be |
| # inserted twice into the doctree, which leads to |
| # inconsistencies later when references are resolved |
| fieldtype = types.pop(fieldarg) |
| if len(fieldtype) == 1 and isinstance(fieldtype[0], nodes.Text): |
| typename = "".join(n.astext() for n in fieldtype) |
| typename = typename.replace("int", "python:int") |
| typename = typename.replace("long", "python:long") |
| typename = typename.replace("float", "python:float") |
| typename = typename.replace("bool", "python:bool") |
| typename = typename.replace("type", "python:type") |
| par.extend( |
| self.make_xrefs( |
| self.typerolename, |
| domain, |
| typename, |
| addnodes.literal_emphasis, |
| **kw, |
| ) |
| ) |
| else: |
| par += fieldtype |
| par += nodes.Text(")") |
| par += nodes.Text(" -- ") |
| par += content |
| return par |
| |
| fieldname = nodes.field_name("", self.label) |
| if len(items) == 1 and self.can_collapse: |
| fieldarg, content = items[0] |
| bodynode = handle_item(fieldarg, content) |
| else: |
| bodynode = self.list_type() |
| for fieldarg, content in items: |
| bodynode += nodes.list_item("", handle_item(fieldarg, content)) |
| fieldbody = nodes.field_body("", bodynode) |
| return nodes.field("", fieldname, fieldbody) |
| |
| |
| TypedField.make_field = patched_make_field |
| |
| copybutton_prompt_text = r">>> |\.\.\. " |
| copybutton_prompt_is_regexp = True |