.. _general.docs.add.python:
Adding Documentation to Python Code
-----------------------------------
Documentation for Python is provided through docstrings and generated using
`Sphinx `__. Please reference the
`Google-style Python docstrings
`__
guide for docstring formatting examples.
Follow these instructions to document, generate, and publish a new Python
docstring:
#. Add the docstring directly under the name of the target method. At a very
minimum, please add descriptions of:
* The method's functional behavior
* The arguments, as denoted by the ``Args`` section
* The return value, as denoted by the ``Returns`` section
* The exceptions that can be thrown (if applicable), as denoted by the
``Raises`` section
Other sections such as ``Todo``, ``Note``, and ``Example`` should be added
as needed.
Here is an example Python docstring:
.. literalinclude:: ../../../../fbgemm_gpu/docs/examples.py
:language: python
:start-after: fbgemm-gpu.python.docs.examples.docstring.start
:end-before: fbgemm-gpu.python.docs.examples.docstring.end
#. On the Sphinx documentation side, add an ``autofunction`` directive to the
corresponding ``.rst`` file. If an ``.rst`` file for the corresponding
Python source file does not exist, create a new one by the same name as the
Python source file. Using the above example:
.. code:: rst
.. autofunction:: fbgemm_gpu.docs.examples.example_method
#. Make sure the ``.rst`` file is included in to the ``toctree`` in
``index.rst`` (e.g. :ref:`fbgemm-gpu.toc.api.python`).
#. Verify the changes by building the docs locally with
:ref:`general.docs.build` or submitting a PR for a Netlify preview.
------------
The Python docstring example above generates the following HTML output:
.. autofunction:: fbgemm_gpu.docs.examples.example_method
------------
.. _general.docs.add.autogen:
Adding Documentation to Auto-Generated Python Code
--------------------------------------------------
Many FBGEMM_GPU Python API methods are auto-generated through PyTorch during the
build process, and require docstrings to be attached after the fact. Follow
these instructions to document auto-generated Python methods:
#. If needed, create a Python file under ``fbgemm_gpu/fbgemm_gpu/docs`` in the
repo.
#. In the Python file, use the provided helper methods in
``fbgemm_gpu.docs.common`` to add attach a docstring to the target
auto-generated method by method name. Here is an example from the codebase:
.. literalinclude:: ../../../../fbgemm_gpu/docs/jagged_tensor_ops.py
:language: python
:start-after: fbgemm-gpu.autogen.docs.examples.docstring.start
:end-before: fbgemm-gpu.autogen.docs.examples.docstring.end
#. If not already present, append the Python file to the imports list in
``fbgemm_gpu/fbgemm_gpu/docs/__init__.py``. This will force the ad-hoc
documentation to be loaded on ``fbgemm_gpu`` module load. For example:
.. code:: rst
from . import the_new_doc_module
#. Follow the remaining steps in :ref:`general.docs.add.python` to render the
docstring in the documentation.