Writing documentation

Documentation is a crutial part of this library. Here, we cover some elements of syntax with Sphinx and reStructuredText (the .rst files), which is the format we use.

Docstrings

All functions and classes should come with useful docstrings. For these, we use the numpy style docstrings. For instance, for a function, we expect the following docstring:

def function(arg):
   """One line description

   Longer description,
   possibly in several lines

   Parameters
   ----------
   arg : type
      description
      **Notice the space before and after the colon!**

   Returns
   -------
   variable : type
      description

   Examples
   --------
   text
   >>> code
   expected result

   Notes
   -----
   Detailed explanation
   """
   pass

In particular, use single backticks for variable’s names: `variable`.

Double backticks are used for inline code: ``inline code``.

For blocks of code, use double colons, leave a white line and indent said lines of code

::

   block of code
   on
   several
   lines...

Refer to functions or modules

In the documentation, you can refer to modules as :mod:`tensorly.module`, for instance the tensor algebra module: tensorly.tenalg. Similarly, use :func:`tensorly.function` to refer a function: tensorly.base.unfold.

Titles

Titles are created by underlying them, and the hierarchy is automatically determined by Sphinx. If you do not want your title to appear in the table of contents, use a rubric:

.. rubric:: Title

Examples

Examples are located in tensorly/examples and executed everytime the documentation is built. We use the Sphinx-Gallery which you can refer to for documentation but, in short, your example should be called plot_xyz.py and the the structure of that file should typically look like:

"""
Title of your example
=====================

The above title will be the name of the example. The remainder of this text is included in the generated example.

"""

# Comments are converted into text, while code (below) is executed (and displayed)
myvariable = 2
print("my variable is {}".format(myvariable))

# %%
# This is a section header
# ------------------------
#
# In the built documentation, it will be rendered as rST. All rST lines
# must begin with '# ' (note the space) including underlines below section
# headers.
#
# Note
# ----
# You can embed rST in your Python examples by including a line of >= 20 # symbols, #%%, or # %%.
# For consistency, it is recommended that you use only one of the above three ‘block splitter’ options in your project.
# If using a line of #’s, we recommend using 79 #’s, like this:
###############################################################################