From 220cc50c68e82df2d6afd6b7d0cfd43068864145 Mon Sep 17 00:00:00 2001 From: FRIGO Matteo <frigo.mat@live.com> Date: Wed, 9 Jun 2021 12:08:18 +0200 Subject: [PATCH] DOC: add sphinx documentation --- doc/Makefile | 19 +++ doc/make.bat | 35 +++++ doc/source/api.rst | 22 +++ doc/source/citation.rst | 27 ++++ doc/source/command-line-interface.rst | 41 ++++++ doc/source/conf.py | 198 ++++++++++++++++++++++++++ doc/source/contributors.rst | 12 ++ doc/source/funding.rst | 13 ++ doc/source/img/logo_erc_eu.jpg | Bin 0 -> 57629 bytes doc/source/index.rst | 92 ++++++++++++ doc/source/installation.rst | 104 ++++++++++++++ doc/source/license.rst | 26 ++++ 12 files changed, 589 insertions(+) create mode 100644 doc/Makefile create mode 100644 doc/make.bat create mode 100644 doc/source/api.rst create mode 100644 doc/source/citation.rst create mode 100644 doc/source/command-line-interface.rst create mode 100644 doc/source/conf.py create mode 100644 doc/source/contributors.rst create mode 100644 doc/source/funding.rst create mode 100644 doc/source/img/logo_erc_eu.jpg create mode 100644 doc/source/index.rst create mode 100644 doc/source/installation.rst create mode 100644 doc/source/license.rst diff --git a/doc/Makefile b/doc/Makefile new file mode 100644 index 0000000..69fe55e --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,19 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/doc/make.bat b/doc/make.bat new file mode 100644 index 0000000..543c6b1 --- /dev/null +++ b/doc/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=source +set BUILDDIR=build + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% + +:end +popd diff --git a/doc/source/api.rst b/doc/source/api.rst new file mode 100644 index 0000000..6381032 --- /dev/null +++ b/doc/source/api.rst @@ -0,0 +1,22 @@ +.. _api: + +================ +Alignment module +================ + +.. automodule:: wlalign.alignment + :members: permutation_from_alignment, apply_alignment, length_wl_signature, signature_wl, wl_align + +================= +Similarity module +================= + +.. automodule:: wlalign.similarity + :members: graph_jaccard_index + +============ +Utils module +============ + +.. automodule:: wlalign.utils + :members: load_network, symmetrize_adj, check_is_adj, check_compatible_adj, check_is_alignment, check_can_write_file diff --git a/doc/source/citation.rst b/doc/source/citation.rst new file mode 100644 index 0000000..a94636c --- /dev/null +++ b/doc/source/citation.rst @@ -0,0 +1,27 @@ +.. _citation: + +==================== +How to cite WL-align +==================== +If you use WL-align in your research, please cite the following article. + + Matteo Frigo, Emilio Cruciani, David Coudert, Rachid Deriche, Emanuele + Natale, Samuel Deslauriers-Gauthier; Network alignment and similarity + reveal atlas-based topological differences in structural connectomes. + Network Neuroscience 2021; + `DOI: 10.1162/netn_a_00199 <https://doi.org/10.1162/netn_a_00199>`_ + +.. code:: bibtex + + @article{wlalign, + author = {Frigo, Matteo and Cruciani, Emilio and Coudert, David and + Deriche, Rachid and Natale, Emanuele and + Deslauriers-Gauthier, Samuel}, + title = {Network alignment and similarity + reveal atlas-based topological differences in structural + connectomes}, + journal = {Network Neuroscience}, + url = {https://hal.archives-ouvertes.fr/hal-03116143}, + doi = {10.1162/netn_a_00199}, + year = {2021} + } diff --git a/doc/source/command-line-interface.rst b/doc/source/command-line-interface.rst new file mode 100644 index 0000000..8512ef3 --- /dev/null +++ b/doc/source/command-line-interface.rst @@ -0,0 +1,41 @@ +.. _command-line-interface: + +=========================== +CLI: Command Line Interface +=========================== + +The user can align two graphs from the command line by providing their +adjacency matrices in text form. +The edge weights in each line must be separated by whitespaces. + +.. code:: bash + + wlalign --help + +.. code:: text + + usage: wlalign [-h] [--first_aligned FIRST_ALIGNED] [--k INT] [--l INT] + [--force] [-v] + in_graph1 in_graph2 out_matching + + This program uses WL-align to compute an alignment between two graphs having + the same number of nodes. It takes as input their adjacency matrices and it + returns a matching (a.k.a. alignment) between their nodes. + + positional arguments: + in_graph1 Path to the first graph to be aligned + in_graph2 Path to the second graph to be aligned + out_matching Path where the matching will be saved. The first + element of each row is the index of the node in the + first graph that is aligned with the node in the + second graph indexed by the second element of the row + + optional arguments: + -h, --help show this help message and exit + --first_aligned FIRST_ALIGNED + The aligned version of the first input graph will be + saved in the specified position (default: None) + --k INT Width parameter (default: 2) + --l INT Depth parameter (default: 2) + --force Overwrite existing files (default: False) + -v, --verbose Set verbose output (default: False) diff --git a/doc/source/conf.py b/doc/source/conf.py new file mode 100644 index 0000000..ec0f949 --- /dev/null +++ b/doc/source/conf.py @@ -0,0 +1,198 @@ +# -*- coding: utf-8 -*- +# +# Configuration file for the Sphinx documentation builder. +# +# This file does only contain a selection of the most common options. For a +# full list see the documentation: +# http://www.sphinx-doc.org/en/master/config + +# -- Path setup -------------------------------------------------------------- + +# 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 sys +import wlalign +sys.path.insert(0, os.path.abspath(os.path.join('..', '..'))) + + +# -- Project information ----------------------------------------------------- + +project = 'WL-align' +copyright = '2021, CoBCoM' +author = 'Matteo Frigo, Emilio Cruciani, David Coudert, Rachid Deriche, ' \ + 'Emanuele Natale, Samuel Deslauriers-Gauthier' + +# The short X.Y version +version = wlalign.__version__ +# The full version, including alpha/beta/rc tags +release = wlalign.__version__ + + +# -- General configuration --------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# 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.mathjax', + 'sphinx.ext.napoleon', + 'sphinx.ext.viewcode', +] + +# 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' + +# 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 = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = None + + +# -- 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 = 'sphinx_rtd_theme' + +# 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 = { + 'nosidebar': True, +} + +# 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_static_path = [] + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# The default sidebars (for documents that don't match any pattern) are +# defined by theme itself. Builtin themes are using these templates by +# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', +# 'searchbox.html']``. +# +# html_sidebars = {} + + +# -- Options for HTMLHelp output --------------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = 'wlaligndoc' + + +# -- 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, 'wlalign.tex', 'WL-align Documentation', + 'Matteo Frigo, Emilio Cruciani, David Coudert, Rachid Deriche, ' \ + 'Emanuele Natale, Samuel Deslauriers-Gauthier', '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, 'wlalign', 'wlalign 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, 'wlalign', 'WL-align Documentation', + author, 'wlalign', 'One line description of project.', + 'Miscellaneous'), +] + + +# -- Options for Epub output ------------------------------------------------- + +# Bibliographic Dublin Core info. +epub_title = project + +# The unique identifier of the text. This can be a ISBN number +# or the project homepage. +# +# epub_identifier = '' + +# A unique identification for the text. +# +# epub_uid = '' + +# A list of files that should not be packed into the epub file. +epub_exclude_files = ['search.html'] + + +# -- Extension configuration ------------------------------------------------- +# Napoleon +napoleon_google_docstring = True +napoleon_numpy_docstring = True +napoleon_include_init_with_doc = True +napoleon_include_private_with_doc = False +napoleon_include_special_with_doc = False +napoleon_use_admonition_for_examples = False +napoleon_use_admonition_for_notes = False +napoleon_use_admonition_for_references = False +napoleon_use_ivar = False +napoleon_use_param = True +napoleon_use_rtype = True diff --git a/doc/source/contributors.rst b/doc/source/contributors.rst new file mode 100644 index 0000000..63ce733 --- /dev/null +++ b/doc/source/contributors.rst @@ -0,0 +1,12 @@ +.. _contributors: + +==================== +List of Contributors +==================== +WL-align was conceived in the COATI and ATHENA Project Teams at Inria Sophia +Antipolis - Méditerranée. The Python package was developed by: + +* `Matteo Frigo <https://www.mfrigo.com>`_ , ATHENA Project Team, Inria Sophia + Antipolis - Méditerranée. +* `Emilio Cruciani <https://sites.google.com/view/emiliocruciani/>`_ , COATI + Project Team, Inria Sophia Antipolis - Méditerranée. diff --git a/doc/source/funding.rst b/doc/source/funding.rst new file mode 100644 index 0000000..b97fa77 --- /dev/null +++ b/doc/source/funding.rst @@ -0,0 +1,13 @@ +.. _funding: + +==================== +Funding +==================== +The development of WL-align was funded by the European Research Council (ERC) +under the European Union’s Horizon 2020 research and innovation program (ERC +Advanced Grant agreement No 694665: `CoBCoM - Computational Brain Connectivity +Mapping <https://project.inria.fr/cobcom/>`_ ). + +.. image:: img/logo_erc_eu.jpg + :align: center + :width: 600 diff --git a/doc/source/img/logo_erc_eu.jpg b/doc/source/img/logo_erc_eu.jpg new file mode 100644 index 0000000000000000000000000000000000000000..16c972ea3ac24562f4b0dff8245a74259aba6a4b GIT binary patch literal 57629 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 literal 0 HcmV?d00001 diff --git a/doc/source/index.rst b/doc/source/index.rst new file mode 100644 index 0000000..e3b0b99 --- /dev/null +++ b/doc/source/index.rst @@ -0,0 +1,92 @@ +==================================== +Welcome to WL-align's documentation! +==================================== + +.. image:: https://gitlab.inria.fr/cobcom/wlalign/badges/master/pipeline.svg + :target: https://gitlab.inria.fr/cobcom/wlalign/-/commits/master" + :alt: Pipeline Status + +.. image:: https://gitlab.inria.fr/cobcom/wlalign/badges/master/coverage.svg + :target: https://gitlab.inria.fr/cobcom/wlalign/-/commits/master + :alt: Coverage Report + + +`wlalign` is a pure Python package that implements the graph-alignment routine +based on the generalization of the Weisfeiler-Lehman algorithm proposed in +`this paper <https://doi.org/10.1162/netn_a_00199>`_. + +The software provides the ``wlalign`` Python module, which includes all the +**functions and tools that are necessary for computing network alignments and +similarity**. +In particular, specific functions are devoted to: + +* Computing the **graph Jaccard index** of **similarity** between two weighted graphs. +* Solving the **graph alignment problem** with **WL-align**. + +The package is `available at Pypi <#>`_ and can be easily installed from the +command line. + +.. code:: bash + + pip install wlalign + + +Talon is a free software released under `MIT license <LICENSE>`_. + +Getting help +============ +The preferred way to get assistance in running code that uses WL-align is +through the issue system of the +`Gitlab repository <https://gitlab.inria.fr/cobcom/wlalign>`_ where the +source code is available. +Developers and maintainers frequently check newly opened issues and will be +happy to help you. + + +Contributing guidelines +======================= +The development happens in the ``devel`` branch of the +`Gitlab repository <https://gitlab.inria.fr/cobcom/wlalign>`_, while the +``master`` is kept for the stable releases only. +We will consider only merge requests towards the ``devel`` branch. + + +How to cite +=========== +If you publish works using WL-align, please cite us as indicated here: + + Matteo Frigo, Emilio Cruciani, David Coudert, Rachid Deriche, Emanuele + Natale, Samuel Deslauriers-Gauthier; Network alignment and similarity + reveal atlas-based topological differences in structural connectomes. + Network Neuroscience 2021; doi: https://doi.org/10.1162/netn_a_00199 + +In section :ref:`citation` you will find the Bibtex entry. + + +.. toctree:: + :maxdepth: 2 + :caption: Install + + installation + +.. toctree:: + :maxdepth: 2 + :caption: Command Line Interface + + command-line-interface + + +.. toctree:: + :maxdepth: 2 + :caption: API documentation + + api + +.. toctree:: + :maxdepth: 1 + :caption: About the project + + citation + contributors + license + funding diff --git a/doc/source/installation.rst b/doc/source/installation.rst new file mode 100644 index 0000000..6e098d1 --- /dev/null +++ b/doc/source/installation.rst @@ -0,0 +1,104 @@ +.. _installation: + +============ +Installation +============ +WL-align runs only on Python 3. +The installation has the following dependencies: + +* Numpy +* Scipy + +If you are an Anaconda user, you may want to create a dedicated ``wlalign-env`` +environment and populate it with the right dependencies, then install WL-align. + +.. code:: bash + + conda env create -n wlalign-env -f environment.yml + pip install wlalign + +Alternatively, you can install the dependencies and WL-align all via ``pip``. + +.. code:: bash + + pip install numpy + pip install scipy + + pip install wlalign + +To install WL-align directly from the source, clone this repository and run the +standard local setup commands. + +.. code:: bash + + git clone https://gitlab.inria.fr/cobcom/wlalign.git + cd wlalign + pip install -U . + + +Check installation +================== +To check that WL-align has been properly installed, try to import the ``wlalign`` +module into a Python session and print the version as follows. If no error is +raised, the installation has been successful. + +.. code:: python + + >>> import wlalign + >>> print(wlalign.__version__) + + +For developers +============== +If you are thinking about developing your own fork of WL-align, you may want to +use the latest version in the ``devel`` branch of the repository and install it +in editable mode. + +.. code:: bash + + git clone https://gitlab.inria.fr/cobcom/wlalign.git + cd WL-align + git checkout devel + pip install -e . + + +Tests +~~~~~ +The package uses ``unittest`` as a testing suite. +To run all the tests, execute the following command in the source's root +directory. + +.. code:: bash + + python -m unittest -v + +Test coverage can be checked with ``coverage`` as follows. + +.. code:: bash + + coverage run -m unittest + coverage report -m + + +Documentation +~~~~~~~~~~~~~ +The sources of the documentation are in the ``doc`` folder. +The compilation requires the ``sphinx`` package and the theme to be installed. + +.. code:: bash + + pip install sphinx + pip install sphinx_rtd_theme + +To compile the documentation, move to the ``doc`` folder and run +``make <format>``, where the format can be ``html``, ``latex`` or any other +sphinx-compatible format. +To get a local copy of the the html documentation, run the ``make html`` +command. + +.. code:: bash + + cd doc + make clean # deletes results of previous compilations + make html + diff --git a/doc/source/license.rst b/doc/source/license.rst new file mode 100644 index 0000000..8528545 --- /dev/null +++ b/doc/source/license.rst @@ -0,0 +1,26 @@ +.. _license: + +==================== +License +==================== +MIT License + +Copyright (c) 2021 WL-align developers + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. -- GitLab