Documentation¶
Sphinx¶
For initialization¶
Initialize requirements of documentation generation:
pip install -r requirements/pypi-doc.txt
Initialize Sphinx project:
mkdir docs && cd docs
sphinx-quickstart
# Tips for the interactive configuration phase
# Choose the option "Separate sources from build"
# Reference: https://stackoverflow.com/questions/65829149/what-does-separate-source-and-build-directories-mean
Build HTML:
cd build
make html
For incremental changes¶
As documentation of the current project has already been set up, you can only run ./docs/make-html.sh instead of the previous steps:
#!/bin/bash
source setup.sh
pushd docs
rm -rf build
make html SPHINXOPTS="-W"
make_sphinx_ret_val=$?
if [ $make_sphinx_ret_val -eq 0 ];then
echo "Built the Sphinx documentation successfully."
else
echo "Sphinx documentation building failed!!!"
fi
popd
exit $make_sphinx_ret_val
Start the server and view the documentation pages¶
Start the HTTP server on the remote side
cd docs/build/html
python -m http.server 8080 -b localhost
Create an SSH tunneling on the local side, which forwards connections/requests from local to remote (server)
ssh -L 8080:localhost:8080 remote-server
Use RST Files within the Sphinx Documentation¶
Include Markdown¶
For including Markdown files into the Sphinx documentation, this project utilizes m2r2 which needs to be installed through pip:
pip install m2r2
Then in .rst file, use the .. mdinclude:: directive to include Markdown file. The path needs to be relative to the .rst file.
.. mdinclude:: ../../../README.md
Include Code snippets¶
Use the .. literalinclude:: directive to include a code snippet from a script/source file.
For example,
.. literalinclude:: ../../../docs/make-html.sh
:language: bash
results in:
#!/bin/bash
source setup.sh
pushd docs
rm -rf build
make html SPHINXOPTS="-W"
make_sphinx_ret_val=$?
if [ $make_sphinx_ret_val -eq 0 ];then
echo "Built the Sphinx documentation successfully."
else
echo "Sphinx documentation building failed!!!"
fi
popd
exit $make_sphinx_ret_val
Auto-Generation of API Documentations¶
The feature of auto-documentation is realized by various Sphinx extensions and third-party tools.
This project adopts Google-style Python docstrings, Example Google Style Python Docstrings for auto-generation of Python API pages.
The authors would like to thank PyTorch for being an exemplar of documentation.
Reference:
Python documentation¶
Sphinx can utilize Napoleon for auto-generation of API pages of Python code.
import os
import sys
sys.path.insert(0, os.path.abspath(path_to_python_module_dir))
sys.path.insert(0, os.path.abspath(path_to_python_module2_dir))
...
extensions = [
...
'sphinx.ext.autodoc', # support for auto-doc generation
'sphinx.ext.napoleon', # support for numpy / google style
]
References:
Doxygen documentation¶
This project utilizes Doxygen for auto-generation of API pages of C++ SDK, and breathe for including these pages into the Sphinx documentation.
breathe needs to be installed through pip:
pip install breath
Firstly, XML files are generated:
cd sdk
doxygen Doxyfile-cpp
Then, in conf.py, set up breathe to include the XML generated in the previous step.
extensions = [
"...",
"breathe",
]
sdk_name = "..."
breathe_projects = { sdk_name: "../../sdk/doxygen_output/xml/" }
breathe_default_project = sdk_name
Reference:
Protobuf documentation¶
This project uses protoc-gen-doc, an extension of the Protobuf compiler, to automatically generate API pages for Protobuf definitions.
To activate this extension, pass --doc_out argument to protoc.
protoc ... \
--doc_out ${doc_output_dir} \
...
References: