========================================
Writing documentation or website content
========================================
We assume you have
cloned a version of the
`qucat repository `_
to your machine.
The source code for the documentation is located in the
``/docs_src/source`` folder.
The built documentation is stored in the ``/docs/`` folder.
Through Github pages, the website (qucat.org) always
matches the contents of the ``/docs/`` folder of the
master branch.
The website can be previewed locally by opening the ``/docs/index.html``
file with a web browser.
In order to edit the documentation/website one should thus follow
these steps
- edit the reStructuredText files located in ``/docs_src/source``
- build the documentation by runing the ``build_docs.py`` script
- check the changes locally by opening the ``/docs/index.html`` file with a web browser
- push the code to the github repository
- Once the code is pulled into the master branch, these changes are automatically applied to the website.
Building the documentation,
and editing the tutorials or the documentation of the functions
requires specific instruction given below.
Building the documentation
--------------------------
The documentation can be built by runing the ``build_docs.py`` script.
Some details about the build process:
we use Sphinx to build the html content for the website
from the reStructuredText (.rst) files located in ``/docs_src/source``.
This build process if configured through the ``/docs_src/source/conf.py``.
Information on sphinx, on reStructuredText and the configuration file
can be found online,
notably `here `_.
.. note:: Building the docs requires `pandoc `_, and the pip-installable packages sphinx, nbsphinx, recommonmark, sphinx_rtd_theme
Editing class or function documentation
--------------------------------------------
One advantage of using Sphinx, is that it can
extract docstrings from the source-code
(located in the ``src`` folder) and turn
it into elegant html documentation of
a class or function.
As an example for classes, inserting the following code
in the reStructuredText file of one of the documentation pages
.. literalinclude:: example_class_autostring.rst
:language: rst
will produce the content of the page
:ref:`capacitor`.
Here ``:members:`` and ``:inherited-members:`` indicates that
we also want to display information about the class
methods and inherited methods.
One can similarly include documentation for
functions using ``.. automodule::``, more
details on the topic can be found
`here `_.
Since the automatic documentation
has already been set up for all QuCAT classes,
**any public modules added to existing classes
by a contributor, and correctly commented, will thus be automatically
included in the documentaion website after their pull request
is merged into the master branch**.
Details about how to write good docstrings
which lead to
such documentation can be found at
:ref:`commenting`.
Note that one can also create a private module,
which will not be included
in the documentation,
by prepending the name
of the function by an underscore.
Editing the tutorials
--------------------------------------------
The tutorials featured on the website correspond
to jupyter notebooks located in the ``docs_src/source/tutorials``
folder.
In order to **edit** a tutorial
- Open a tutorial in ``docs_src/source/tutorials``, edit and save it
In order to **add a new** tutorial
- Add your jupyter notebook to the ``docs_src/source/tutorials`` folder.
- Edit the ``docs_src/source/tutorials/index.rst`` file by adding the name of your notebook to the existing list
In **both cases**, subsequently
- Build the documentation by runing the ``build_docs.py`` script
- Preview your changes by opening the ``/docs/index.html`` file with a web browser
- Make a pull request: your changes will be visible on the website when merged to the master branch
If you are adding a new tutorial, you may want to include it in the
set of tests QuCAT performs each time a change is made to the code, see
:ref:`unittesting`.