From 7de929fe3cc4dda0fd565bc7ce9bf92c521053ed Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Fri, 12 Aug 2016 15:03:09 +0000 Subject: move cython/doc/source in cython/src/doc git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/ST_cythonize@1433 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 9e9d17b611d04df874ab31a844c9549821bc16ee --- src/cython/CMakeLists.txt | 14 +- src/cython/doc/source/alpha_complex_ref.rst | 10 - src/cython/doc/source/alpha_complex_sum.rst | 21 -- src/cython/doc/source/alpha_complex_user.rst | 192 --------------- src/cython/doc/source/biblio.rst | 7 - src/cython/doc/source/cgal_citation.rst | 8 - src/cython/doc/source/cubical_complex_ref.rst | 9 - src/cython/doc/source/cubical_complex_sum.rst | 12 - src/cython/doc/source/cubical_complex_user.rst | 150 ------------ .../doc/source/periodic_cubical_complex_ref.rst | 9 - .../doc/source/persistent_cohomology_sum.rst | 28 --- .../doc/source/persistent_cohomology_user.rst | 104 -------- src/cython/doc/source/simplex_tree_ref.rst | 10 - src/cython/doc/source/simplex_tree_sum.rst | 13 - src/cython/doc/source/simplex_tree_user.rst | 67 ----- src/cython/doc/source/witness_complex_ref.rst | 10 - src/cython/doc/source/witness_complex_sum.rst | 25 -- src/cython/doc/source/witness_complex_user.rst | 31 --- src/cython/src/doc/Makefile | 177 ++++++++++++++ src/cython/src/doc/alpha_complex_ref.rst | 10 + src/cython/src/doc/alpha_complex_sum.rst | 21 ++ src/cython/src/doc/alpha_complex_user.rst | 192 +++++++++++++++ src/cython/src/doc/biblio.rst | 7 + src/cython/src/doc/cgal_citation.rst | 8 + src/cython/src/doc/conf.py | 271 +++++++++++++++++++++ src/cython/src/doc/cubical_complex_ref.rst | 9 + src/cython/src/doc/cubical_complex_sum.rst | 12 + src/cython/src/doc/cubical_complex_user.rst | 150 ++++++++++++ src/cython/src/doc/index.rst | 63 +++++ src/cython/src/doc/make.bat | 242 ++++++++++++++++++ .../src/doc/periodic_cubical_complex_ref.rst | 9 + src/cython/src/doc/persistent_cohomology_sum.rst | 28 +++ src/cython/src/doc/persistent_cohomology_user.rst | 104 ++++++++ src/cython/src/doc/simplex_tree_ref.rst | 10 + src/cython/src/doc/simplex_tree_sum.rst | 13 + src/cython/src/doc/simplex_tree_user.rst | 67 +++++ src/cython/src/doc/witness_complex_ref.rst | 10 + src/cython/src/doc/witness_complex_sum.rst | 25 ++ src/cython/src/doc/witness_complex_user.rst | 31 +++ 39 files changed, 1466 insertions(+), 713 deletions(-) delete mode 100644 src/cython/doc/source/alpha_complex_ref.rst delete mode 100644 src/cython/doc/source/alpha_complex_sum.rst delete mode 100644 src/cython/doc/source/alpha_complex_user.rst delete mode 100644 src/cython/doc/source/biblio.rst delete mode 100644 src/cython/doc/source/cgal_citation.rst delete mode 100644 src/cython/doc/source/cubical_complex_ref.rst delete mode 100644 src/cython/doc/source/cubical_complex_sum.rst delete mode 100644 src/cython/doc/source/cubical_complex_user.rst delete mode 100644 src/cython/doc/source/periodic_cubical_complex_ref.rst delete mode 100644 src/cython/doc/source/persistent_cohomology_sum.rst delete mode 100644 src/cython/doc/source/persistent_cohomology_user.rst delete mode 100644 src/cython/doc/source/simplex_tree_ref.rst delete mode 100644 src/cython/doc/source/simplex_tree_sum.rst delete mode 100644 src/cython/doc/source/simplex_tree_user.rst delete mode 100644 src/cython/doc/source/witness_complex_ref.rst delete mode 100644 src/cython/doc/source/witness_complex_sum.rst delete mode 100644 src/cython/doc/source/witness_complex_user.rst create mode 100644 src/cython/src/doc/Makefile create mode 100644 src/cython/src/doc/alpha_complex_ref.rst create mode 100644 src/cython/src/doc/alpha_complex_sum.rst create mode 100644 src/cython/src/doc/alpha_complex_user.rst create mode 100644 src/cython/src/doc/biblio.rst create mode 100644 src/cython/src/doc/cgal_citation.rst create mode 100755 src/cython/src/doc/conf.py create mode 100644 src/cython/src/doc/cubical_complex_ref.rst create mode 100644 src/cython/src/doc/cubical_complex_sum.rst create mode 100644 src/cython/src/doc/cubical_complex_user.rst create mode 100644 src/cython/src/doc/index.rst create mode 100644 src/cython/src/doc/make.bat create mode 100644 src/cython/src/doc/periodic_cubical_complex_ref.rst create mode 100644 src/cython/src/doc/persistent_cohomology_sum.rst create mode 100644 src/cython/src/doc/persistent_cohomology_user.rst create mode 100644 src/cython/src/doc/simplex_tree_ref.rst create mode 100644 src/cython/src/doc/simplex_tree_sum.rst create mode 100644 src/cython/src/doc/simplex_tree_user.rst create mode 100644 src/cython/src/doc/witness_complex_ref.rst create mode 100644 src/cython/src/doc/witness_complex_sum.rst create mode 100644 src/cython/src/doc/witness_complex_user.rst (limited to 'src/cython') diff --git a/src/cython/CMakeLists.txt b/src/cython/CMakeLists.txt index b5ed37a6..8012b592 100644 --- a/src/cython/CMakeLists.txt +++ b/src/cython/CMakeLists.txt @@ -91,24 +91,24 @@ if(PYTHON_PATH AND CYTHON_PATH) file(COPY doc DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) # Developper version file(GLOB GUDHI_DEV_DOC_IMAGES "${CMAKE_SOURCE_DIR}/src/*/doc/*.png") - file(COPY ${GUDHI_DEV_DOC_IMAGES} DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/doc/source/img") + file(COPY ${GUDHI_DEV_DOC_IMAGES} DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/src/doc/img") # User version file(GLOB GUDHI_USER_DOC_IMAGES "${CMAKE_SOURCE_DIR}/doc/*/*.png") - file(COPY ${GUDHI_USER_DOC_IMAGES} DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/doc/source/img") + file(COPY ${GUDHI_USER_DOC_IMAGES} DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/src/doc/img") # Biblio file(GLOB GUDHI_BIB_FILES "${CMAKE_SOURCE_DIR}/biblio/*.bib") - file(COPY ${GUDHI_BIB_FILES} DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/doc/source/") + file(COPY ${GUDHI_BIB_FILES} DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/src/doc/") # Cubical complex perseus doc example file(GLOB GUDHI_CUBICAL_PERSEUS_FILES "${CMAKE_SOURCE_DIR}/data/bitmap/*cubicalcomplexdoc.txt") - file(COPY ${GUDHI_CUBICAL_PERSEUS_FILES} DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/doc/source/") - file(COPY "${CMAKE_SOURCE_DIR}/data/points/alphacomplexdoc.off" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/doc/source/") + file(COPY ${GUDHI_CUBICAL_PERSEUS_FILES} DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/src/doc/") + file(COPY "${CMAKE_SOURCE_DIR}/data/points/alphacomplexdoc.off" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/src/doc/") if (UNIX) add_custom_target(html - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src/doc COMMAND make html && make doctest) else (UNIX) add_custom_target(html - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src/doc COMMAND make.bat html) endif (UNIX) endif(SPHINX_PATH) diff --git a/src/cython/doc/source/alpha_complex_ref.rst b/src/cython/doc/source/alpha_complex_ref.rst deleted file mode 100644 index 6a122b09..00000000 --- a/src/cython/doc/source/alpha_complex_ref.rst +++ /dev/null @@ -1,10 +0,0 @@ -============================== -Alpha complex reference manual -============================== - -.. autoclass:: gudhi.AlphaComplex - :members: - :undoc-members: - :show-inheritance: - - .. automethod:: gudhi.AlphaComplex.__init__ diff --git a/src/cython/doc/source/alpha_complex_sum.rst b/src/cython/doc/source/alpha_complex_sum.rst deleted file mode 100644 index b608050e..00000000 --- a/src/cython/doc/source/alpha_complex_sum.rst +++ /dev/null @@ -1,21 +0,0 @@ -===================================== ===================================== ===================================== -:Author: Vincent Rouvreau :Introduced in: GUDHI PYTHON 1.4.0 :Copyright: GPL v3 -===================================== ===================================== ===================================== - -+-------------------------------------------+----------------------------------------------------------------------+ -| .. image:: | Alpha_complex is a simplicial complex constructed from the finite | -| img/alpha_complex_representation.png | cells of a Delaunay Triangulation. | -| | | -| | The filtration value of each simplex is computed as the square of the| -| | circumradius of the simplex if the circumsphere is empty (the simplex| -| | is then said to be Gabriel), and as the minimum of the filtration | -| | values of the codimension 1 cofaces that make it not Gabriel | -| | otherwise. All simplices that have a filtration value strictly | -| | greater than a given alpha squared value are not inserted into the | -| | complex. | -| | | -| | This package requires having CGAL version 4.7 or higher (4.8.1 is | -| | advised for better perfomances). | -+-------------------------------------------+----------------------------------------------------------------------+ -| :doc:`alpha_complex_user` | :doc:`alpha_complex_ref` | -+-------------------------------------------+----------------------------------------------------------------------+ diff --git a/src/cython/doc/source/alpha_complex_user.rst b/src/cython/doc/source/alpha_complex_user.rst deleted file mode 100644 index 07bfcabf..00000000 --- a/src/cython/doc/source/alpha_complex_user.rst +++ /dev/null @@ -1,192 +0,0 @@ -========================= -Alpha complex user manual -========================= -Definition ----------- - -.. include:: alpha_complex_sum.rst - -Alpha_complex is constructing a :doc:`Simplex_tree ` using -`Delaunay Triangulation `_ -:cite:`cgal:hdj-t-15b` from `CGAL `_ (the Computational Geometry Algorithms Library -:cite:`cgal:eb-15b`). - -Remarks -^^^^^^^ -When Alpha_complex is constructed with an infinite value of :math:`\alpha`, the complex is a Delaunay complex. - -Example from points -------------------- - -This example builds the Delaunay triangulation from the given points, and initializes the alpha complex with it: - -.. testcode:: - - import gudhi - alpha_complex = gudhi.AlphaComplex(points=[[1, 1], [7, 0], [4, 6], [9, 6], [0, 14], [2, 19], [9, 17]], - max_alpha_square=60.0) - result_str = 'Alpha complex is of dimension ' + repr(alpha_complex.dimension()) + ' - ' + \ - repr(alpha_complex.num_simplices()) + ' simplices - ' + \ - repr(alpha_complex.num_vertices()) + ' vertices.' - print(result_str) - for fitered_value in alpha_complex.get_filtered_tree(): - print(fitered_value) - -The output is: - -.. testoutput:: - - Alpha complex is of dimension 2 - 25 simplices - 7 vertices. - ([0], 0.0) - ([1], 0.0) - ([2], 0.0) - ([3], 0.0) - ([4], 0.0) - ([5], 0.0) - ([6], 0.0) - ([2, 3], 6.25) - ([4, 5], 7.25) - ([0, 2], 8.5) - ([0, 1], 9.25) - ([1, 3], 10.0) - ([1, 2], 11.25) - ([1, 2, 3], 12.5) - ([0, 1, 2], 12.995867768595042) - ([5, 6], 13.25) - ([2, 4], 20.0) - ([4, 6], 22.736686390532547) - ([4, 5, 6], 22.736686390532547) - ([3, 6], 30.25) - ([2, 6], 36.5) - ([2, 3, 6], 36.5) - ([2, 4, 6], 37.24489795918368) - ([0, 4], 59.710743801652896) - ([0, 2, 4], 59.710743801652896) - - -Algorithm ---------- - -Data structure -^^^^^^^^^^^^^^ - -In order to build the alpha complex, first, a Simplex tree is built from the cells of a Delaunay Triangulation. -(The filtration value is set to NaN, which stands for unknown value): - -.. image:: - img/alpha_complex_doc.png - :align: center - :alt: Simplex tree structure construction example - -Filtration value computation algorithm -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - **for** i : dimension :math:`\rightarrow` 0 **do** - **for all** :math:`\sigma` of dimension i - **if** filtration(:math:`\sigma`) is NaN **then** - filtration(:math:`\sigma`) = :math:`\alpha^2(\sigma)` - **end if** - - *//propagate alpha filtration value* - - **for all** :math:`\tau` face of :math:`\sigma` - **if** filtration(:math:`\tau`) is not NaN **then** - filtration(:math:`\tau`) = filtration(:math:`\sigma`) - **end if** - **end for** - **end for** - **end for** - - make_filtration_non_decreasing() - - prune_above_filtration() - -Dimension 2 -^^^^^^^^^^^ - -From the example above, it means the algorithm looks into each triangle ([0,1,2], [0,2,4], [1,2,3], ...), -computes the filtration value of the triangle, and then propagates the filtration value as described -here: - -.. image:: - img/alpha_complex_doc_420.png - :align: center - :alt: Filtration value propagation example - -Dimension 1 -^^^^^^^^^^^ - -Then, the algorithm looks into each edge ([0,1], [0,2], [1,2], ...), -computes the filtration value of the edge (in this case, propagation will have no effect). - -Dimension 0 -^^^^^^^^^^^ - -Finally, the algorithm looks into each vertex ([0], [1], [2], [3], [4], [5] and [6]) and -sets the filtration value (0 in case of a vertex - propagation will have no effect). - -Non decreasing filtration values -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -As the squared radii computed by CGAL are an approximation, it might happen that these alpha squared values do not -quite define a proper filtration (i.e. non-decreasing with respect to inclusion). -We fix that up by calling `Simplex_tree::make_filtration_non_decreasing()` (cf. -`C++ version `_). - -Prune above given filtration value -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The simplex tree is pruned from the given maximum alpha squared value (cf. `Simplex_tree::prune_above_filtration()` -int he `C++ version `_). -In the following example, the value is given by the user as argument of the program. - - -Example from OFF file -^^^^^^^^^^^^^^^^^^^^^ - -This example builds the Delaunay triangulation from the points given by an OFF file, and initializes the alpha complex -with it. - - -Then, it is asked to display information about the alpha complex: - -.. testcode:: - - import gudhi - alpha_complex = gudhi.AlphaComplex(off_file='source/alphacomplexdoc.off', - max_alpha_square=59.0) - result_str = 'Alpha complex is of dimension ' + repr(alpha_complex.dimension()) + ' - ' + \ - repr(alpha_complex.num_simplices()) + ' simplices - ' + \ - repr(alpha_complex.num_vertices()) + ' vertices.' - print(result_str) - for fitered_value in alpha_complex.get_filtered_tree(): - print(fitered_value) - -the program output is: - -.. testoutput:: - - Alpha complex is of dimension 2 - 23 simplices - 7 vertices. - ([0], 0.0) - ([1], 0.0) - ([2], 0.0) - ([3], 0.0) - ([4], 0.0) - ([5], 0.0) - ([6], 0.0) - ([2, 3], 6.25) - ([4, 5], 7.25) - ([0, 2], 8.5) - ([0, 1], 9.25) - ([1, 3], 10.0) - ([1, 2], 11.25) - ([1, 2, 3], 12.5) - ([0, 1, 2], 12.995867768595042) - ([5, 6], 13.25) - ([2, 4], 20.0) - ([4, 6], 22.736686390532547) - ([4, 5, 6], 22.736686390532547) - ([3, 6], 30.25) - ([2, 6], 36.5) - ([2, 3, 6], 36.5) - ([2, 4, 6], 37.24489795918368) diff --git a/src/cython/doc/source/biblio.rst b/src/cython/doc/source/biblio.rst deleted file mode 100644 index b8e733ed..00000000 --- a/src/cython/doc/source/biblio.rst +++ /dev/null @@ -1,7 +0,0 @@ -============ -Bibliography -============ - -.. bibliography:: bibliography.bib - :filter: docnames - :style: unsrt diff --git a/src/cython/doc/source/cgal_citation.rst b/src/cython/doc/source/cgal_citation.rst deleted file mode 100644 index bbc4ef9e..00000000 --- a/src/cython/doc/source/cgal_citation.rst +++ /dev/null @@ -1,8 +0,0 @@ -============== -CGAL citations -============== - -.. - bibliography:: how_to_cite_cgal.bib - :filter: docnames - :style: unsrt diff --git a/src/cython/doc/source/cubical_complex_ref.rst b/src/cython/doc/source/cubical_complex_ref.rst deleted file mode 100644 index 84aa4223..00000000 --- a/src/cython/doc/source/cubical_complex_ref.rst +++ /dev/null @@ -1,9 +0,0 @@ -Cubical complex reference manual -################################ - -.. autoclass:: gudhi.CubicalComplex - :members: - :undoc-members: - :show-inheritance: - - .. automethod:: gudhi.CubicalComplex.__init__ diff --git a/src/cython/doc/source/cubical_complex_sum.rst b/src/cython/doc/source/cubical_complex_sum.rst deleted file mode 100644 index 4008a1fd..00000000 --- a/src/cython/doc/source/cubical_complex_sum.rst +++ /dev/null @@ -1,12 +0,0 @@ -===================================== ===================================== ===================================== -:Author: Pawel Dlotko :Introduced in: GUDHI PYTHON 1.4.0 :Copyright: GPL v3 -===================================== ===================================== ===================================== - -+---------------------------------------------+----------------------------------------------------------------------+ -| .. image:: | The cubical complex is an example of a structured complex useful in | -| img/Cubical_complex_representation.png | computational mathematics (specially rigorous numerics) and image | -| | analysis. | -+---------------------------------------------+----------------------------------------------------------------------+ -| :doc:`cubical_complex_user` | * :doc:`cubical_complex_ref` | -| | * :doc:`periodic_cubical_complex_ref` | -+---------------------------------------------+----------------------------------------------------------------------+ diff --git a/src/cython/doc/source/cubical_complex_user.rst b/src/cython/doc/source/cubical_complex_user.rst deleted file mode 100644 index 38ff978c..00000000 --- a/src/cython/doc/source/cubical_complex_user.rst +++ /dev/null @@ -1,150 +0,0 @@ -=========================== -Cubical complex user manual -=========================== -Definition ----------- - -===================================== ===================================== ===================================== -:Author: Pawel Dlotko :Introduced in: GUDHI PYTHON 1.4.0 :Copyright: GPL v3 -===================================== ===================================== ===================================== - -+---------------------------------------------+----------------------------------------------------------------------+ -| :doc:`cubical_complex_user` | * :doc:`cubical_complex_ref` | -| | * :doc:`periodic_cubical_complex_ref` | -+---------------------------------------------+----------------------------------------------------------------------+ - -The cubical complex is an example of a structured complex useful in computational mathematics (specially rigorous -numerics) and image analysis. - -An *elementary interval* is an interval of a form :math:`[n,n+1]`, or :math:`[n,n]`, for :math:`n \in \mathcal{Z}`. -The first one is called *non-degenerate*, while the second one is a *degenerate* interval. A -*boundary of a elementary interval* is a chain :math:`\partial [n,n+1] = [n+1,n+1]-[n,n]` in case of -non-degenerated elementary interval and :math:`\partial [n,n] = 0` in case of degenerate elementary interval. An -*elementary cube* :math:`C` is a product of elementary intervals, :math:`C=I_1 \times \ldots \times I_n`. -*Embedding dimension* of a cube is n, the number of elementary intervals (degenerate or not) in the product. -A *dimension of a cube* :math:`C=I_1 \times ... \times I_n` is the number of non degenerate elementary -intervals in the product. A *boundary of a cube* :math:`C=I_1 \times \ldots \times I_n` is a chain obtained -in the following way: - -.. math:: - - \partial C = (\partial I_1 \times \ldots \times I_n) + (I_1 \times \partial I_2 \times \ldots \times I_n) + - \ldots + (I_1 \times I_2 \times \ldots \times \partial I_n). - -A *cubical complex* :math:`\mathcal{K}` is a collection of cubes closed under operation of taking boundary -(i.e. boundary of every cube from the collection is in the collection). A cube :math:`C` in cubical complex -:math:`\mathcal{K}` is *maximal* if it is not in a boundary of any other cube in :math:`\mathcal{K}`. A -*support* of a cube :math:`C` is the set in :math:`\mathbb{R}^n` occupied by :math:`C` (:math:`n` is the embedding -dimension of :math:`C`). - -Cubes may be equipped with a filtration values in which case we have filtered cubical complex. All the cubical -complexes considered in this implementation are filtered cubical complexes (although, the range of a filtration may -be a set of two elements). - -For further details and theory of cubical complexes, please consult :cite:`kaczynski2004computational` as well as the -following paper :cite:`peikert2012topological`. - -Data structure. ---------------- - -The implementation of Cubical complex provides a representation of complexes that occupy a rectangular region in -:math:`\mathbb{R}^n`. This extra assumption allows for a memory efficient way of storing cubical complexes in a form -of so called bitmaps. Let -:math:`R = [b_1,e_1] \times \ldots \times [b_n,e_n]`, for :math:`b_1,...b_n,e_1,...,e_n \in \mathbb{Z}`, -:math:`b_i \leq d_i` be the considered rectangular region and let :math:`\mathcal{K}` be a filtered -cubical complex having the rectangle :math:`R` as its support. Note that the structure of the coordinate system gives -a way a lexicographical ordering of cells of :math:`\mathcal{K}`. This ordering is a base of the presented -bitmap-based implementation. In this implementation, the whole cubical complex is stored as a vector of the values -of filtration. This, together with dimension of :math:`\mathcal{K}` and the sizes of :math:`\mathcal{K}` in all -directions, allows to determine, dimension, neighborhood, boundary and coboundary of every cube -:math:`C \in \mathcal{K}`. - -.. image:: - img/Cubical_complex_representation.png - :align: center - :alt: Cubical complex. - -Note that the cubical complex in the figure above is, in a natural way, a product of one dimensional cubical -complexes in :math:`\mathbb{R}`. The number of all cubes in each direction is equal :math:`2n+1`, where :math:`n` is -the number of maximal cubes in the considered direction. Let us consider a cube at the position :math:`k` in the -bitmap. -Knowing the sizes of the bitmap, by a series of modulo operation, we can determine which elementary intervals are -present in the product that gives the cube :math:`C`. In a similar way, we can compute boundary and the coboundary of -each cube. Further details can be found in the literature. - -Input Format. -------------- - -In the current implantation, filtration is given at the maximal cubes, and it is then extended by the lower star -filtration to all cubes. There are a number of constructors that can be used to construct cubical complex by users -who want to use the code directly. They can be found in the :doc:`cubical_complex_ref`. -Currently one input from a text file is used. It uses a format used already in -`Perseus software `_ by Vidit Nanda. -Below we are providing a description of the format. The first line contains a number d begin the dimension of the -bitmap (2 in the example below). Next d lines are the numbers of top dimensional cubes in each dimensions (3 and 3 -in the example below). Next, in lexicographical order, the filtration of top dimensional cubes is given (1 4 6 8 -20 4 7 6 5 in the example below). - -.. image:: - img/exampleBitmap.png - :align: center - :alt: Example of a input data. - -The input file for the following complex is: - -.. literalinclude:: cubicalcomplexdoc.txt - -.. centered:: cubicalcomplexdoc.txt - -.. testcode:: - - import gudhi - cubical_complex = gudhi.CubicalComplex(perseus_file='source/cubicalcomplexdoc.txt') - result_str = 'Cubical complex is of dimension ' + repr(cubical_complex.dimension()) + ' - ' + \ - repr(cubical_complex.num_simplices()) + ' simplices.' - print(result_str) - -the program output is: - -.. testoutput:: - - Cubical complex is of dimension 2 - 49 simplices. - -Periodic boundary conditions. ------------------------------ - -Often one would like to impose periodic boundary conditions to the cubical complex (cf. -:doc:`periodic_cubical_complex_ref`). -Let :math:`I_1\times ... \times I_n` be a box that is decomposed with a cubical complex :math:`\mathcal{K}`. -Imposing periodic boundary conditions in the direction i, means that the left and the right side of a complex -:math:`\mathcal{K}` are considered the same. In particular, if for a bitmap :math:`\mathcal{K}` periodic boundary -conditions are imposed in all directions, then complex :math:`\mathcal{K}` became n-dimensional torus. One can use -various constructors from the file Bitmap_cubical_complex_periodic_boundary_conditions_base.h to construct cubical -complex with periodic boundary conditions. One can also use Perseus style input files. To indicate periodic boundary -conditions in a given direction, then number of top dimensional cells in this direction have to be multiplied by -1. -For instance: - -.. literalinclude:: periodiccubicalcomplexdoc.txt - -.. centered:: periodiccubicalcomplexdoc.txt - -Indicate that we have imposed periodic boundary conditions in the direction x, but not in the direction y. - -.. testcode:: - - import gudhi - periodic_cc = gudhi.PeriodicCubicalComplex(perseus_file='source/periodiccubicalcomplexdoc.txt') - result_str = 'Periodic cubical complex is of dimension ' + repr(periodic_cc.dimension()) + ' - ' + \ - repr(periodic_cc.num_simplices()) + ' simplices.' - print(result_str) - -the program output is: - -.. testoutput:: - - Periodic cubical complex is of dimension 2 - 42 simplices. - -Examples. ---------- - -End user programs are available in cython/example/ folder. diff --git a/src/cython/doc/source/periodic_cubical_complex_ref.rst b/src/cython/doc/source/periodic_cubical_complex_ref.rst deleted file mode 100644 index c6190a1b..00000000 --- a/src/cython/doc/source/periodic_cubical_complex_ref.rst +++ /dev/null @@ -1,9 +0,0 @@ -Periodic cubical complex reference manual -######################################### - -.. autoclass:: gudhi.PeriodicCubicalComplex - :members: - :undoc-members: - :show-inheritance: - - .. automethod:: gudhi.PeriodicCubicalComplex.__init__ diff --git a/src/cython/doc/source/persistent_cohomology_sum.rst b/src/cython/doc/source/persistent_cohomology_sum.rst deleted file mode 100644 index 081399a5..00000000 --- a/src/cython/doc/source/persistent_cohomology_sum.rst +++ /dev/null @@ -1,28 +0,0 @@ -===================================== ===================================== ===================================== -:Author: Clément Maria :Introduced in: GUDHI PYTHON 1.4.0 :Copyright: GPL v3 -===================================== ===================================== ===================================== - -+---------------------------------------------+----------------------------------------------------------------------+ -| .. image:: | The theory of homology consists in attaching to a topological space | -| img/3DTorus_poch.png | a sequence of (homology) groups, capturing global topological | -| | features like connected components, holes, cavities, etc. Persistent | -| | homology studies the evolution -- birth, life and death -- of these | -| | features when the topological space is changing. Consequently, the | -| | theory is essentially composed of three elements: topological spaces,| -| | their homology groups and an evolution scheme. | -| | | -| | Computation of persistent cohomology using the algorithm of | -| | :cite:`DBLP:journals/dcg/SilvaMV11` and | -| | :cite:`DBLP:journals/corr/abs-1208-5018` and the Compressed | -| | Annotation Matrix implementation of | -| | :cite:`DBLP:conf/esa/BoissonnatDM13`. | -| | | -+---------------------------------------------+----------------------------------------------------------------------+ -| :doc:`persistent_cohomology_user` | Please refer to each data structure that contains persistence | -| | feature for reference: | -| | | -| | * :doc:`alpha_complex_ref` | -| | * :doc:`cubical_complex_ref` | -| | * :doc:`simplex_tree_ref` | -| | * :doc:`witness_complex_ref` | -+---------------------------------------------+----------------------------------------------------------------------+ diff --git a/src/cython/doc/source/persistent_cohomology_user.rst b/src/cython/doc/source/persistent_cohomology_user.rst deleted file mode 100644 index 33b19ce2..00000000 --- a/src/cython/doc/source/persistent_cohomology_user.rst +++ /dev/null @@ -1,104 +0,0 @@ -================================= -Persistent cohomology user manual -================================= -Definition ----------- -===================================== ===================================== ===================================== -:Author: Clément Maria :Introduced in: GUDHI PYTHON 1.4.0 :Copyright: GPL v3 -===================================== ===================================== ===================================== - -+---------------------------------------------+----------------------------------------------------------------------+ -| :doc:`persistent_cohomology_user` | Please refer to each data structure that contains persistence | -| | feature for reference: | -| | | -| | * :doc:`alpha_complex_ref` | -| | * :doc:`cubical_complex_ref` | -| | * :doc:`simplex_tree_ref` | -| | * :doc:`witness_complex_ref` | -+---------------------------------------------+----------------------------------------------------------------------+ - - -Computation of persistent cohomology using the algorithm of :cite:`DBLP:journals/dcg/SilvaMV11` and -:cite:`DBLP:journals/corr/abs-1208-5018` and the Compressed Annotation Matrix implementation of -:cite:`DBLP:conf/esa/BoissonnatDM13`. - -The theory of homology consists in attaching to a topological space a sequence of (homology) groups, capturing global -topological features like connected components, holes, cavities, etc. Persistent homology studies the evolution -- -birth, life and death -- of these features when the topological space is changing. Consequently, the theory is -essentially composed of three elements: - -* topological spaces -* their homology groups -* an evolution scheme. - -Topological Spaces ------------------- - -Topological spaces are represented by simplicial complexes. -Let :math:`V = \{1, \cdots ,|V|\}` be a set of *vertices*. -A *simplex* :math:`\sigma` is a subset of vertices :math:`\sigma \subseteq V`. -A *simplicial complex* :math:`\mathbf{K}` on :math:`V` is a collection of simplices :math:`\{\sigma\}`, -:math:`\sigma \subseteq V`, such that :math:`\tau \subseteq \sigma \in \mathbf{K} \Rightarrow \tau \in \mathbf{K}`. -The dimension :math:`n=|\sigma|-1` of :math:`\sigma` is its number of elements minus 1. -A *filtration* of a simplicial complex is a function :math:`f:\mathbf{K} \rightarrow \mathbb{R}` satisfying -:math:`f(\tau)\leq f(\sigma)` whenever :math:`\tau \subseteq \sigma`. - -Homology --------- - -For a ring :math:`\mathcal{R}`, the group of *n-chains*, denoted :math:`\mathbf{C}_n(\mathbf{K},\mathcal{R})`, of -:math:`\mathbf{K}` is the group of formal sums of n-simplices with :math:`\mathcal{R}` coefficients. The -*boundary operator* is a linear operator -:math:`\partial_n: \mathbf{C}_n(\mathbf{K},\mathcal{R}) \rightarrow \mathbf{C}_{n-1}(\mathbf{K},\mathcal{R})` -such that :math:`\partial_n \sigma = \partial_n [v_0, \cdots , v_n] = \sum_{i=0}^n (-1)^{i}[v_0,\cdots ,\widehat{v_i}, \cdots,v_n]`, -where :math:`\widehat{v_i}` means :math:`v_i` is omitted from the list. The chain groups form a sequence: - -.. math:: - - \cdots \ \ \mathbf{C}_n(\mathbf{K},\mathcal{R}) \xrightarrow{\ \partial_n\ } - \mathbf{C}_{n-1}(\mathbf{K},\mathcal{R}) \xrightarrow{\partial_{n-1}} \cdots \xrightarrow{\ \partial_2 \ } - \mathbf{C}_1(\mathbf{K},\mathcal{R}) \xrightarrow{\ \partial_1 \ } \mathbf{C}_0(\mathbf{K},\mathcal{R}) - -of finitely many groups :math:`\mathbf{C}_n(\mathbf{K},\mathcal{R})` and homomorphisms :math:`\partial_n`, indexed by -the dimension :math:`n \geq 0`. The boundary operators satisfy the property :math:`\partial_n \circ \partial_{n+1}=0` -for every :math:`n > 0` and we define the homology groups: - -.. math:: - - \mathbf{H}_n(\mathbf{K},\mathcal{R}) = \ker \partial_n / \mathrm{im} \ \partial_{n+1} - -We refer to :cite:`Munkres-elementsalgtop1984` for an introduction to homology -theory and to :cite:`DBLP:books/daglib/0025666` for an introduction to persistent homology. - -Indexing Scheme ---------------- - -"Changing" a simplicial complex consists in applying a simplicial map. An *indexing scheme* is a directed graph -together with a traversal order, such that two consecutive nodes in the graph are connected by an arrow (either forward -or backward). -The nodes represent simplicial complexes and the directed edges simplicial maps. - -From the computational point of view, there are two types of indexing schemes of interest in persistent homology: - -* linear ones - :math:`\bullet \longrightarrow \bullet \longrightarrow \cdots \longrightarrow \bullet \longrightarrow \bullet` - in persistent homology :cite:`DBLP:journals/dcg/ZomorodianC05`, -* zigzag ones - :math:`\bullet \longrightarrow \bullet \longleftarrow \cdots \longrightarrow \bullet \longleftarrow \bullet` - in zigzag persistent homology :cite:`DBLP:journals/focm/CarlssonS10`. - -These indexing schemes have a natural left-to-right traversal order, and we describe them with ranges and iterators. -In the current release of the Gudhi library, only the linear case is implemented. - -In the following, we consider the case where the indexing scheme is induced by a filtration. - -Ordering the simplices by increasing filtration values (breaking ties so as a simplex appears after its subsimplices of -same filtration value) provides an indexing scheme. - -Examples --------- - -We provide several example files: run these examples with -h for details on their use. - -.. todo:: - examples for persistence diff --git a/src/cython/doc/source/simplex_tree_ref.rst b/src/cython/doc/source/simplex_tree_ref.rst deleted file mode 100644 index 6d196843..00000000 --- a/src/cython/doc/source/simplex_tree_ref.rst +++ /dev/null @@ -1,10 +0,0 @@ -============================= -Simplex tree reference manual -============================= - -.. autoclass:: gudhi.SimplexTree - :members: - :undoc-members: - :show-inheritance: - - .. automethod:: gudhi.SimplexTree.__init__ diff --git a/src/cython/doc/source/simplex_tree_sum.rst b/src/cython/doc/source/simplex_tree_sum.rst deleted file mode 100644 index ffdb2cf4..00000000 --- a/src/cython/doc/source/simplex_tree_sum.rst +++ /dev/null @@ -1,13 +0,0 @@ -===================================== ===================================== ===================================== -:Author: Clément Maria :Introduced in: GUDHI PYTHON 1.4.0 :Copyright: GPL v3 -===================================== ===================================== ===================================== - -+-------------------------------------------+----------------------------------------------------------------------+ -| .. image:: | The simplex tree is an efficient and flexible data structure for | -| img/Simplex_tree_representation.png | representing general (filtered) simplicial complexes. | -| | | -| | The data structure is described in | -| | :cite:`boissonnatmariasimplextreealgorithmica` | -+-------------------------------------------+----------------------------------------------------------------------+ -| :doc:`simplex_tree_user` | :doc:`simplex_tree_ref` | -+-------------------------------------------+----------------------------------------------------------------------+ diff --git a/src/cython/doc/source/simplex_tree_user.rst b/src/cython/doc/source/simplex_tree_user.rst deleted file mode 100644 index 3a00f1ac..00000000 --- a/src/cython/doc/source/simplex_tree_user.rst +++ /dev/null @@ -1,67 +0,0 @@ -======================== -Simplex tree user manual -======================== -Definition ----------- - -.. include:: simplex_tree_sum.rst - -A simplicial complex :math:`\mathbf{K}` on a set of vertices :math:`V = \{1, \cdots ,|V|\}` is a collection of -simplices :math:`\{\sigma\}`, :math:`\sigma \subseteq V` such that -:math:`\tau \subseteq \sigma \in \mathbf{K} \rightarrow \tau \in \mathbf{K}`. The dimension :math:`n=|\sigma|-1` of -:math:`\sigma` is its number of elements minus `1`. - -A filtration of a simplicial complex is a function :math:`f:\mathbf{K} \rightarrow \mathbb{R}` satisfying -:math:`f(\tau)\leq f(\sigma)` whenever :math:`\tau \subseteq \sigma`. Ordering the simplices by increasing filtration -values (breaking ties so as a simplex appears after its subsimplices of same filtration value) provides an indexing -scheme. - - -Implementation --------------- - -There are two implementation of complexes. The first on is the Simplex_tree data structure. -The simplex tree is an efficient and flexible data structure for representing general (filtered) simplicial complexes. -The data structure is described in :cite`boissonnatmariasimplextreealgorithmica`. - -The second one is the Hasse_complex. The Hasse complex is a data structure representing explicitly all co-dimension 1 -incidence relations in a complex. It is consequently faster when accessing the boundary of a simplex, but is less -compact and harder to construct from scratch. - -Example -------- - -.. testcode:: - - import gudhi - st = gudhi.SimplexTree() - if st.insert([0, 1]): - print("[0, 1] inserted") - if st.insert([0, 1, 2], filtration=4.0): - print("[0, 1, 2] inserted") - if st.find([0, 1]): - print("[0, 1] found") - print("num_vertices=", st.num_vertices()) - print("num_simplices=", st.num_simplices()) - print("skeleton_tree(2) =") - for sk_value in st.get_skeleton_tree(2): - print(sk_value) - - -The output is: - -.. testoutput:: - - [0, 1] inserted - [0, 1, 2] inserted - [0, 1] found - ('num_vertices=', 3) - ('num_simplices=', 7) - skeleton_tree(2) = - ([0, 1, 2], 4.0) - ([0, 1], 0.0) - ([0, 2], 4.0) - ([0], 0.0) - ([1, 2], 4.0) - ([1], 0.0) - ([2], 4.0) diff --git a/src/cython/doc/source/witness_complex_ref.rst b/src/cython/doc/source/witness_complex_ref.rst deleted file mode 100644 index c78760cb..00000000 --- a/src/cython/doc/source/witness_complex_ref.rst +++ /dev/null @@ -1,10 +0,0 @@ -================================ -Witness complex reference manual -================================ - -.. autoclass:: gudhi.WitnessComplex - :members: - :undoc-members: - :show-inheritance: - - .. automethod:: gudhi.WitnessComplex.__init__ diff --git a/src/cython/doc/source/witness_complex_sum.rst b/src/cython/doc/source/witness_complex_sum.rst deleted file mode 100644 index 0d65d420..00000000 --- a/src/cython/doc/source/witness_complex_sum.rst +++ /dev/null @@ -1,25 +0,0 @@ -===================================== ===================================== ===================================== -:Author: Siargey Kachanovich :Introduced in: GUDHI PYTHON 1.4.0 :Copyright: GPL v3 -===================================== ===================================== ===================================== - -+---------------------------------------------+----------------------------------------------------------------------+ -| .. image:: | Witness complex :math:`Wit(W,L)` is a simplicial complex defined on | -| img/Witness_complex_representation.png | two sets of points in :math:`\mathbb{R}^D`:Wit(W,L)` is a simplicial | -| | complex defined on two sets of points in :math:`\mathbb{R}^D`: | -| | | -| | * :math:`W` set of **witnesses** and | -| | * :math:`L \subseteq W` set of **landmarks**. | -| | | -| | The simplices are based on landmarks and a simplex belongs to the | -| | witness complex if and only if it is witnessed, that is: | -| | | -| | :math:`\sigma \subset L` is witnessed if there exists a point | -| | :math:`w \in W` such that w is closer to the vertices of | -| | :math:`\sigma` than other points in :math:`L` and all of its faces | -| | are witnessed as well. | -| | | -| | The data structure is described in | -| | :cite:`boissonnatmariasimplextreealgorithmica`. | -+---------------------------------------------+----------------------------------------------------------------------+ -| :doc:`witness_complex_user` | :doc:`witness_complex_ref` | -+---------------------------------------------+----------------------------------------------------------------------+ diff --git a/src/cython/doc/source/witness_complex_user.rst b/src/cython/doc/source/witness_complex_user.rst deleted file mode 100644 index 604c7357..00000000 --- a/src/cython/doc/source/witness_complex_user.rst +++ /dev/null @@ -1,31 +0,0 @@ -=========================== -Witness complex user manual -=========================== -Definition ----------- - -.. include:: witness_complex_sum.rst - -Implementation --------------- - -The principal class of this module is Gudhi::Witness_complex. - -In both cases, the constructor for this class takes a {witness}x{closest_landmarks} table, where each row represents a -witness and consists of landmarks sorted by distance to this witness. - -.. todo:: - This table can be constructed by two additional classes Landmark_choice_by_furthest_point and - Landmark_choice_by_random_point also included in the module. - -.. figure:: - img/bench_Cy8.png - :align: center - - Running time as function on number of landmarks. - -.. figure:: - img/bench_sphere.png - :align: center - - Running time as function on number of witnesses for |L|=300. diff --git a/src/cython/src/doc/Makefile b/src/cython/src/doc/Makefile new file mode 100644 index 00000000..fc353a37 --- /dev/null +++ b/src/cython/src/doc/Makefile @@ -0,0 +1,177 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# User-friendly check for sphinx-build +ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) +$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) +endif + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " xml to make Docutils-native XML files" + @echo " pseudoxml to make pseudoxml-XML files for display purposes" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/pouet.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/pouet.qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/pouet" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/pouet" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +latexpdfja: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through platex and dvipdfmx..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." + +xml: + $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml + @echo + @echo "Build finished. The XML files are in $(BUILDDIR)/xml." + +pseudoxml: + $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml + @echo + @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." diff --git a/src/cython/src/doc/alpha_complex_ref.rst b/src/cython/src/doc/alpha_complex_ref.rst new file mode 100644 index 00000000..6a122b09 --- /dev/null +++ b/src/cython/src/doc/alpha_complex_ref.rst @@ -0,0 +1,10 @@ +============================== +Alpha complex reference manual +============================== + +.. autoclass:: gudhi.AlphaComplex + :members: + :undoc-members: + :show-inheritance: + + .. automethod:: gudhi.AlphaComplex.__init__ diff --git a/src/cython/src/doc/alpha_complex_sum.rst b/src/cython/src/doc/alpha_complex_sum.rst new file mode 100644 index 00000000..b608050e --- /dev/null +++ b/src/cython/src/doc/alpha_complex_sum.rst @@ -0,0 +1,21 @@ +===================================== ===================================== ===================================== +:Author: Vincent Rouvreau :Introduced in: GUDHI PYTHON 1.4.0 :Copyright: GPL v3 +===================================== ===================================== ===================================== + ++-------------------------------------------+----------------------------------------------------------------------+ +| .. image:: | Alpha_complex is a simplicial complex constructed from the finite | +| img/alpha_complex_representation.png | cells of a Delaunay Triangulation. | +| | | +| | The filtration value of each simplex is computed as the square of the| +| | circumradius of the simplex if the circumsphere is empty (the simplex| +| | is then said to be Gabriel), and as the minimum of the filtration | +| | values of the codimension 1 cofaces that make it not Gabriel | +| | otherwise. All simplices that have a filtration value strictly | +| | greater than a given alpha squared value are not inserted into the | +| | complex. | +| | | +| | This package requires having CGAL version 4.7 or higher (4.8.1 is | +| | advised for better perfomances). | ++-------------------------------------------+----------------------------------------------------------------------+ +| :doc:`alpha_complex_user` | :doc:`alpha_complex_ref` | ++-------------------------------------------+----------------------------------------------------------------------+ diff --git a/src/cython/src/doc/alpha_complex_user.rst b/src/cython/src/doc/alpha_complex_user.rst new file mode 100644 index 00000000..b6b6e550 --- /dev/null +++ b/src/cython/src/doc/alpha_complex_user.rst @@ -0,0 +1,192 @@ +========================= +Alpha complex user manual +========================= +Definition +---------- + +.. include:: alpha_complex_sum.rst + +Alpha_complex is constructing a :doc:`Simplex_tree ` using +`Delaunay Triangulation `_ +:cite:`cgal:hdj-t-15b` from `CGAL `_ (the Computational Geometry Algorithms Library +:cite:`cgal:eb-15b`). + +Remarks +^^^^^^^ +When Alpha_complex is constructed with an infinite value of :math:`\alpha`, the complex is a Delaunay complex. + +Example from points +------------------- + +This example builds the Delaunay triangulation from the given points, and initializes the alpha complex with it: + +.. testcode:: + + import gudhi + alpha_complex = gudhi.AlphaComplex(points=[[1, 1], [7, 0], [4, 6], [9, 6], [0, 14], [2, 19], [9, 17]], + max_alpha_square=60.0) + result_str = 'Alpha complex is of dimension ' + repr(alpha_complex.dimension()) + ' - ' + \ + repr(alpha_complex.num_simplices()) + ' simplices - ' + \ + repr(alpha_complex.num_vertices()) + ' vertices.' + print(result_str) + for fitered_value in alpha_complex.get_filtered_tree(): + print(fitered_value) + +The output is: + +.. testoutput:: + + Alpha complex is of dimension 2 - 25 simplices - 7 vertices. + ([0], 0.0) + ([1], 0.0) + ([2], 0.0) + ([3], 0.0) + ([4], 0.0) + ([5], 0.0) + ([6], 0.0) + ([2, 3], 6.25) + ([4, 5], 7.25) + ([0, 2], 8.5) + ([0, 1], 9.25) + ([1, 3], 10.0) + ([1, 2], 11.25) + ([1, 2, 3], 12.5) + ([0, 1, 2], 12.995867768595042) + ([5, 6], 13.25) + ([2, 4], 20.0) + ([4, 6], 22.736686390532547) + ([4, 5, 6], 22.736686390532547) + ([3, 6], 30.25) + ([2, 6], 36.5) + ([2, 3, 6], 36.5) + ([2, 4, 6], 37.24489795918368) + ([0, 4], 59.710743801652896) + ([0, 2, 4], 59.710743801652896) + + +Algorithm +--------- + +Data structure +^^^^^^^^^^^^^^ + +In order to build the alpha complex, first, a Simplex tree is built from the cells of a Delaunay Triangulation. +(The filtration value is set to NaN, which stands for unknown value): + +.. image:: + img/alpha_complex_doc.png + :align: center + :alt: Simplex tree structure construction example + +Filtration value computation algorithm +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + **for** i : dimension :math:`\rightarrow` 0 **do** + **for all** :math:`\sigma` of dimension i + **if** filtration(:math:`\sigma`) is NaN **then** + filtration(:math:`\sigma`) = :math:`\alpha^2(\sigma)` + **end if** + + *//propagate alpha filtration value* + + **for all** :math:`\tau` face of :math:`\sigma` + **if** filtration(:math:`\tau`) is not NaN **then** + filtration(:math:`\tau`) = filtration(:math:`\sigma`) + **end if** + **end for** + **end for** + **end for** + + make_filtration_non_decreasing() + + prune_above_filtration() + +Dimension 2 +^^^^^^^^^^^ + +From the example above, it means the algorithm looks into each triangle ([0,1,2], [0,2,4], [1,2,3], ...), +computes the filtration value of the triangle, and then propagates the filtration value as described +here: + +.. image:: + img/alpha_complex_doc_420.png + :align: center + :alt: Filtration value propagation example + +Dimension 1 +^^^^^^^^^^^ + +Then, the algorithm looks into each edge ([0,1], [0,2], [1,2], ...), +computes the filtration value of the edge (in this case, propagation will have no effect). + +Dimension 0 +^^^^^^^^^^^ + +Finally, the algorithm looks into each vertex ([0], [1], [2], [3], [4], [5] and [6]) and +sets the filtration value (0 in case of a vertex - propagation will have no effect). + +Non decreasing filtration values +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +As the squared radii computed by CGAL are an approximation, it might happen that these alpha squared values do not +quite define a proper filtration (i.e. non-decreasing with respect to inclusion). +We fix that up by calling `Simplex_tree::make_filtration_non_decreasing()` (cf. +`C++ version `_). + +Prune above given filtration value +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The simplex tree is pruned from the given maximum alpha squared value (cf. `Simplex_tree::prune_above_filtration()` +int he `C++ version `_). +In the following example, the value is given by the user as argument of the program. + + +Example from OFF file +^^^^^^^^^^^^^^^^^^^^^ + +This example builds the Delaunay triangulation from the points given by an OFF file, and initializes the alpha complex +with it. + + +Then, it is asked to display information about the alpha complex: + +.. testcode:: + + import gudhi + alpha_complex = gudhi.AlphaComplex(off_file='alphacomplexdoc.off', + max_alpha_square=59.0) + result_str = 'Alpha complex is of dimension ' + repr(alpha_complex.dimension()) + ' - ' + \ + repr(alpha_complex.num_simplices()) + ' simplices - ' + \ + repr(alpha_complex.num_vertices()) + ' vertices.' + print(result_str) + for fitered_value in alpha_complex.get_filtered_tree(): + print(fitered_value) + +the program output is: + +.. testoutput:: + + Alpha complex is of dimension 2 - 23 simplices - 7 vertices. + ([0], 0.0) + ([1], 0.0) + ([2], 0.0) + ([3], 0.0) + ([4], 0.0) + ([5], 0.0) + ([6], 0.0) + ([2, 3], 6.25) + ([4, 5], 7.25) + ([0, 2], 8.5) + ([0, 1], 9.25) + ([1, 3], 10.0) + ([1, 2], 11.25) + ([1, 2, 3], 12.5) + ([0, 1, 2], 12.995867768595042) + ([5, 6], 13.25) + ([2, 4], 20.0) + ([4, 6], 22.736686390532547) + ([4, 5, 6], 22.736686390532547) + ([3, 6], 30.25) + ([2, 6], 36.5) + ([2, 3, 6], 36.5) + ([2, 4, 6], 37.24489795918368) diff --git a/src/cython/src/doc/biblio.rst b/src/cython/src/doc/biblio.rst new file mode 100644 index 00000000..b8e733ed --- /dev/null +++ b/src/cython/src/doc/biblio.rst @@ -0,0 +1,7 @@ +============ +Bibliography +============ + +.. bibliography:: bibliography.bib + :filter: docnames + :style: unsrt diff --git a/src/cython/src/doc/cgal_citation.rst b/src/cython/src/doc/cgal_citation.rst new file mode 100644 index 00000000..bbc4ef9e --- /dev/null +++ b/src/cython/src/doc/cgal_citation.rst @@ -0,0 +1,8 @@ +============== +CGAL citations +============== + +.. + bibliography:: how_to_cite_cgal.bib + :filter: docnames + :style: unsrt diff --git a/src/cython/src/doc/conf.py b/src/cython/src/doc/conf.py new file mode 100755 index 00000000..bc138025 --- /dev/null +++ b/src/cython/src/doc/conf.py @@ -0,0 +1,271 @@ +# -*- coding: utf-8 -*- +# +# GUDHI documentation build configuration file, created by +# sphinx-quickstart on Thu Jun 30 09:55:51 2016. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys +import os + +# 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. +#sys.path.insert(0, os.path.abspath('.')) + +# Path to Gudhi.so from source path +sys.path.insert(0, os.path.abspath('../..')) + +# -- 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.doctest', + 'sphinx.ext.todo', + 'sphinx.ext.coverage', + 'sphinx.ext.mathjax', + 'sphinx.ext.ifconfig', + 'sphinx.ext.viewcode', + 'sphinxcontrib.bibtex', +] + +todo_include_todos = True +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'GUDHI' +copyright = u'2016, Vincent Rouvreau' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '1.3.1' +# The full version, including alpha/beta/rc tags. +release = '1.3.1' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ['_build'] + +# The reST default role (used for this markup: `text`) to use for all +# documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + +# If true, keep warnings as "system message" paragraphs in the built documents. +#keep_warnings = False + + +# -- 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 = 'default' + +# 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 = {} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# 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'] + +# Add any extra paths that contain custom files (such as robots.txt or +# .htaccess) here, relative to this directory. These files are copied +# directly to the root of the documentation. +#html_extra_path = [] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = 'GUDHIdoc' + + +# -- 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': '', +} + +# 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 = [ + ('index', 'GUDHI.tex', u'GUDHI Documentation', + u'Vincent Rouvreau', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ('index', 'gudhi', u'GUDHI Documentation', + [u'Vincent Rouvreau'], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- 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 = [ + ('index', 'GUDHI', u'GUDHI Documentation', + u'Vincent Rouvreau', 'GUDHI', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' + +# If true, do not generate a @detailmenu in the "Top" node's menu. +#texinfo_no_detailmenu = False diff --git a/src/cython/src/doc/cubical_complex_ref.rst b/src/cython/src/doc/cubical_complex_ref.rst new file mode 100644 index 00000000..84aa4223 --- /dev/null +++ b/src/cython/src/doc/cubical_complex_ref.rst @@ -0,0 +1,9 @@ +Cubical complex reference manual +################################ + +.. autoclass:: gudhi.CubicalComplex + :members: + :undoc-members: + :show-inheritance: + + .. automethod:: gudhi.CubicalComplex.__init__ diff --git a/src/cython/src/doc/cubical_complex_sum.rst b/src/cython/src/doc/cubical_complex_sum.rst new file mode 100644 index 00000000..4008a1fd --- /dev/null +++ b/src/cython/src/doc/cubical_complex_sum.rst @@ -0,0 +1,12 @@ +===================================== ===================================== ===================================== +:Author: Pawel Dlotko :Introduced in: GUDHI PYTHON 1.4.0 :Copyright: GPL v3 +===================================== ===================================== ===================================== + ++---------------------------------------------+----------------------------------------------------------------------+ +| .. image:: | The cubical complex is an example of a structured complex useful in | +| img/Cubical_complex_representation.png | computational mathematics (specially rigorous numerics) and image | +| | analysis. | ++---------------------------------------------+----------------------------------------------------------------------+ +| :doc:`cubical_complex_user` | * :doc:`cubical_complex_ref` | +| | * :doc:`periodic_cubical_complex_ref` | ++---------------------------------------------+----------------------------------------------------------------------+ diff --git a/src/cython/src/doc/cubical_complex_user.rst b/src/cython/src/doc/cubical_complex_user.rst new file mode 100644 index 00000000..2cd85c0a --- /dev/null +++ b/src/cython/src/doc/cubical_complex_user.rst @@ -0,0 +1,150 @@ +=========================== +Cubical complex user manual +=========================== +Definition +---------- + +===================================== ===================================== ===================================== +:Author: Pawel Dlotko :Introduced in: GUDHI PYTHON 1.4.0 :Copyright: GPL v3 +===================================== ===================================== ===================================== + ++---------------------------------------------+----------------------------------------------------------------------+ +| :doc:`cubical_complex_user` | * :doc:`cubical_complex_ref` | +| | * :doc:`periodic_cubical_complex_ref` | ++---------------------------------------------+----------------------------------------------------------------------+ + +The cubical complex is an example of a structured complex useful in computational mathematics (specially rigorous +numerics) and image analysis. + +An *elementary interval* is an interval of a form :math:`[n,n+1]`, or :math:`[n,n]`, for :math:`n \in \mathcal{Z}`. +The first one is called *non-degenerate*, while the second one is a *degenerate* interval. A +*boundary of a elementary interval* is a chain :math:`\partial [n,n+1] = [n+1,n+1]-[n,n]` in case of +non-degenerated elementary interval and :math:`\partial [n,n] = 0` in case of degenerate elementary interval. An +*elementary cube* :math:`C` is a product of elementary intervals, :math:`C=I_1 \times \ldots \times I_n`. +*Embedding dimension* of a cube is n, the number of elementary intervals (degenerate or not) in the product. +A *dimension of a cube* :math:`C=I_1 \times ... \times I_n` is the number of non degenerate elementary +intervals in the product. A *boundary of a cube* :math:`C=I_1 \times \ldots \times I_n` is a chain obtained +in the following way: + +.. math:: + + \partial C = (\partial I_1 \times \ldots \times I_n) + (I_1 \times \partial I_2 \times \ldots \times I_n) + + \ldots + (I_1 \times I_2 \times \ldots \times \partial I_n). + +A *cubical complex* :math:`\mathcal{K}` is a collection of cubes closed under operation of taking boundary +(i.e. boundary of every cube from the collection is in the collection). A cube :math:`C` in cubical complex +:math:`\mathcal{K}` is *maximal* if it is not in a boundary of any other cube in :math:`\mathcal{K}`. A +*support* of a cube :math:`C` is the set in :math:`\mathbb{R}^n` occupied by :math:`C` (:math:`n` is the embedding +dimension of :math:`C`). + +Cubes may be equipped with a filtration values in which case we have filtered cubical complex. All the cubical +complexes considered in this implementation are filtered cubical complexes (although, the range of a filtration may +be a set of two elements). + +For further details and theory of cubical complexes, please consult :cite:`kaczynski2004computational` as well as the +following paper :cite:`peikert2012topological`. + +Data structure. +--------------- + +The implementation of Cubical complex provides a representation of complexes that occupy a rectangular region in +:math:`\mathbb{R}^n`. This extra assumption allows for a memory efficient way of storing cubical complexes in a form +of so called bitmaps. Let +:math:`R = [b_1,e_1] \times \ldots \times [b_n,e_n]`, for :math:`b_1,...b_n,e_1,...,e_n \in \mathbb{Z}`, +:math:`b_i \leq d_i` be the considered rectangular region and let :math:`\mathcal{K}` be a filtered +cubical complex having the rectangle :math:`R` as its support. Note that the structure of the coordinate system gives +a way a lexicographical ordering of cells of :math:`\mathcal{K}`. This ordering is a base of the presented +bitmap-based implementation. In this implementation, the whole cubical complex is stored as a vector of the values +of filtration. This, together with dimension of :math:`\mathcal{K}` and the sizes of :math:`\mathcal{K}` in all +directions, allows to determine, dimension, neighborhood, boundary and coboundary of every cube +:math:`C \in \mathcal{K}`. + +.. image:: + img/Cubical_complex_representation.png + :align: center + :alt: Cubical complex. + +Note that the cubical complex in the figure above is, in a natural way, a product of one dimensional cubical +complexes in :math:`\mathbb{R}`. The number of all cubes in each direction is equal :math:`2n+1`, where :math:`n` is +the number of maximal cubes in the considered direction. Let us consider a cube at the position :math:`k` in the +bitmap. +Knowing the sizes of the bitmap, by a series of modulo operation, we can determine which elementary intervals are +present in the product that gives the cube :math:`C`. In a similar way, we can compute boundary and the coboundary of +each cube. Further details can be found in the literature. + +Input Format. +------------- + +In the current implantation, filtration is given at the maximal cubes, and it is then extended by the lower star +filtration to all cubes. There are a number of constructors that can be used to construct cubical complex by users +who want to use the code directly. They can be found in the :doc:`cubical_complex_ref`. +Currently one input from a text file is used. It uses a format used already in +`Perseus software `_ by Vidit Nanda. +Below we are providing a description of the format. The first line contains a number d begin the dimension of the +bitmap (2 in the example below). Next d lines are the numbers of top dimensional cubes in each dimensions (3 and 3 +in the example below). Next, in lexicographical order, the filtration of top dimensional cubes is given (1 4 6 8 +20 4 7 6 5 in the example below). + +.. image:: + img/exampleBitmap.png + :align: center + :alt: Example of a input data. + +The input file for the following complex is: + +.. literalinclude:: cubicalcomplexdoc.txt + +.. centered:: cubicalcomplexdoc.txt + +.. testcode:: + + import gudhi + cubical_complex = gudhi.CubicalComplex(perseus_file='cubicalcomplexdoc.txt') + result_str = 'Cubical complex is of dimension ' + repr(cubical_complex.dimension()) + ' - ' + \ + repr(cubical_complex.num_simplices()) + ' simplices.' + print(result_str) + +the program output is: + +.. testoutput:: + + Cubical complex is of dimension 2 - 49 simplices. + +Periodic boundary conditions. +----------------------------- + +Often one would like to impose periodic boundary conditions to the cubical complex (cf. +:doc:`periodic_cubical_complex_ref`). +Let :math:`I_1\times ... \times I_n` be a box that is decomposed with a cubical complex :math:`\mathcal{K}`. +Imposing periodic boundary conditions in the direction i, means that the left and the right side of a complex +:math:`\mathcal{K}` are considered the same. In particular, if for a bitmap :math:`\mathcal{K}` periodic boundary +conditions are imposed in all directions, then complex :math:`\mathcal{K}` became n-dimensional torus. One can use +various constructors from the file Bitmap_cubical_complex_periodic_boundary_conditions_base.h to construct cubical +complex with periodic boundary conditions. One can also use Perseus style input files. To indicate periodic boundary +conditions in a given direction, then number of top dimensional cells in this direction have to be multiplied by -1. +For instance: + +.. literalinclude:: periodiccubicalcomplexdoc.txt + +.. centered:: periodiccubicalcomplexdoc.txt + +Indicate that we have imposed periodic boundary conditions in the direction x, but not in the direction y. + +.. testcode:: + + import gudhi + periodic_cc = gudhi.PeriodicCubicalComplex(perseus_file='periodiccubicalcomplexdoc.txt') + result_str = 'Periodic cubical complex is of dimension ' + repr(periodic_cc.dimension()) + ' - ' + \ + repr(periodic_cc.num_simplices()) + ' simplices.' + print(result_str) + +the program output is: + +.. testoutput:: + + Periodic cubical complex is of dimension 2 - 42 simplices. + +Examples. +--------- + +End user programs are available in cython/example/ folder. diff --git a/src/cython/src/doc/index.rst b/src/cython/src/doc/index.rst new file mode 100644 index 00000000..5245d69d --- /dev/null +++ b/src/cython/src/doc/index.rst @@ -0,0 +1,63 @@ +.. GUDHI documentation master file, created by + sphinx-quickstart on Thu Jun 30 09:55:51 2016. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +GUDHI's documentation +##################### + +.. image:: img/Gudhi_banner.png + :align: center + +Introduction +************ + +The Gudhi library (Geometry Understanding in Higher Dimensions) is a generic +open source C++ library for Computational Topology and Topological Data +Analysis (`TDA `_). +The GUDHI library intends to help the development of new algorithmic solutions +in TDA and their transfer to applications. It provides robust, efficient, +flexible and easy to use implementations of state-of-the-art algorithms and +data structures. + +The current release of the GUDHI library includes: + +* Data structures to represent, construct and manipulate simplicial complexes. +* Algorithms to compute persistent homology and multi-field persistent homology. +* Simplication of simplicial complexes by edge contraction. + +All data-structures are generic and several of their aspects can be +parameterized via template classes. We refer to :cite:`gudhilibrary_ICMS14` +for a detailed description of the design of the library. + +Data structures +*************** + +Alpha complex +============= + +.. include:: alpha_complex_sum.rst + +Cubical complex +=============== + +.. include:: cubical_complex_sum.rst + +Simplex tree +============ + +.. include:: simplex_tree_sum.rst + +Witness complex +=============== + +.. include:: witness_complex_sum.rst + + +Toolbox +******* + +Persistence cohomology +====================== + +.. include:: persistent_cohomology_sum.rst diff --git a/src/cython/src/doc/make.bat b/src/cython/src/doc/make.bat new file mode 100644 index 00000000..656c0105 --- /dev/null +++ b/src/cython/src/doc/make.bat @@ -0,0 +1,242 @@ +@ECHO OFF + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set BUILDDIR=_build +set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . +set I18NSPHINXOPTS=%SPHINXOPTS% . +if NOT "%PAPER%" == "" ( + set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% + set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% +) + +if "%1" == "" goto help + +if "%1" == "help" ( + :help + echo.Please use `make ^` where ^ is one of + echo. html to make standalone HTML files + echo. dirhtml to make HTML files named index.html in directories + echo. singlehtml to make a single large HTML file + echo. pickle to make pickle files + echo. json to make JSON files + echo. htmlhelp to make HTML files and a HTML help project + echo. qthelp to make HTML files and a qthelp project + echo. devhelp to make HTML files and a Devhelp project + echo. epub to make an epub + echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter + echo. text to make text files + echo. man to make manual pages + echo. texinfo to make Texinfo files + echo. gettext to make PO message catalogs + echo. changes to make an overview over all changed/added/deprecated items + echo. xml to make Docutils-native XML files + echo. pseudoxml to make pseudoxml-XML files for display purposes + echo. linkcheck to check all external links for integrity + echo. doctest to run all doctests embedded in the documentation if enabled + goto end +) + +if "%1" == "clean" ( + for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i + del /q /s %BUILDDIR%\* + goto end +) + + +%SPHINXBUILD% 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 +) + +if "%1" == "html" ( + %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/html. + goto end +) + +if "%1" == "dirhtml" ( + %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. + goto end +) + +if "%1" == "singlehtml" ( + %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. + goto end +) + +if "%1" == "pickle" ( + %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the pickle files. + goto end +) + +if "%1" == "json" ( + %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the JSON files. + goto end +) + +if "%1" == "htmlhelp" ( + %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run HTML Help Workshop with the ^ +.hhp project file in %BUILDDIR%/htmlhelp. + goto end +) + +if "%1" == "qthelp" ( + %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run "qcollectiongenerator" with the ^ +.qhcp project file in %BUILDDIR%/qthelp, like this: + echo.^> qcollectiongenerator %BUILDDIR%\qthelp\pouet.qhcp + echo.To view the help file: + echo.^> assistant -collectionFile %BUILDDIR%\qthelp\pouet.ghc + goto end +) + +if "%1" == "devhelp" ( + %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. + goto end +) + +if "%1" == "epub" ( + %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The epub file is in %BUILDDIR%/epub. + goto end +) + +if "%1" == "latex" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "latexpdf" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + cd %BUILDDIR%/latex + make all-pdf + cd %BUILDDIR%/.. + echo. + echo.Build finished; the PDF files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "latexpdfja" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + cd %BUILDDIR%/latex + make all-pdf-ja + cd %BUILDDIR%/.. + echo. + echo.Build finished; the PDF files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "text" ( + %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The text files are in %BUILDDIR%/text. + goto end +) + +if "%1" == "man" ( + %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The manual pages are in %BUILDDIR%/man. + goto end +) + +if "%1" == "texinfo" ( + %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. + goto end +) + +if "%1" == "gettext" ( + %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The message catalogs are in %BUILDDIR%/locale. + goto end +) + +if "%1" == "changes" ( + %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes + if errorlevel 1 exit /b 1 + echo. + echo.The overview file is in %BUILDDIR%/changes. + goto end +) + +if "%1" == "linkcheck" ( + %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck + if errorlevel 1 exit /b 1 + echo. + echo.Link check complete; look for any errors in the above output ^ +or in %BUILDDIR%/linkcheck/output.txt. + goto end +) + +if "%1" == "doctest" ( + %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest + if errorlevel 1 exit /b 1 + echo. + echo.Testing of doctests in the sources finished, look at the ^ +results in %BUILDDIR%/doctest/output.txt. + goto end +) + +if "%1" == "xml" ( + %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The XML files are in %BUILDDIR%/xml. + goto end +) + +if "%1" == "pseudoxml" ( + %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. + goto end +) + +:end diff --git a/src/cython/src/doc/periodic_cubical_complex_ref.rst b/src/cython/src/doc/periodic_cubical_complex_ref.rst new file mode 100644 index 00000000..c6190a1b --- /dev/null +++ b/src/cython/src/doc/periodic_cubical_complex_ref.rst @@ -0,0 +1,9 @@ +Periodic cubical complex reference manual +######################################### + +.. autoclass:: gudhi.PeriodicCubicalComplex + :members: + :undoc-members: + :show-inheritance: + + .. automethod:: gudhi.PeriodicCubicalComplex.__init__ diff --git a/src/cython/src/doc/persistent_cohomology_sum.rst b/src/cython/src/doc/persistent_cohomology_sum.rst new file mode 100644 index 00000000..081399a5 --- /dev/null +++ b/src/cython/src/doc/persistent_cohomology_sum.rst @@ -0,0 +1,28 @@ +===================================== ===================================== ===================================== +:Author: Clément Maria :Introduced in: GUDHI PYTHON 1.4.0 :Copyright: GPL v3 +===================================== ===================================== ===================================== + ++---------------------------------------------+----------------------------------------------------------------------+ +| .. image:: | The theory of homology consists in attaching to a topological space | +| img/3DTorus_poch.png | a sequence of (homology) groups, capturing global topological | +| | features like connected components, holes, cavities, etc. Persistent | +| | homology studies the evolution -- birth, life and death -- of these | +| | features when the topological space is changing. Consequently, the | +| | theory is essentially composed of three elements: topological spaces,| +| | their homology groups and an evolution scheme. | +| | | +| | Computation of persistent cohomology using the algorithm of | +| | :cite:`DBLP:journals/dcg/SilvaMV11` and | +| | :cite:`DBLP:journals/corr/abs-1208-5018` and the Compressed | +| | Annotation Matrix implementation of | +| | :cite:`DBLP:conf/esa/BoissonnatDM13`. | +| | | ++---------------------------------------------+----------------------------------------------------------------------+ +| :doc:`persistent_cohomology_user` | Please refer to each data structure that contains persistence | +| | feature for reference: | +| | | +| | * :doc:`alpha_complex_ref` | +| | * :doc:`cubical_complex_ref` | +| | * :doc:`simplex_tree_ref` | +| | * :doc:`witness_complex_ref` | ++---------------------------------------------+----------------------------------------------------------------------+ diff --git a/src/cython/src/doc/persistent_cohomology_user.rst b/src/cython/src/doc/persistent_cohomology_user.rst new file mode 100644 index 00000000..33b19ce2 --- /dev/null +++ b/src/cython/src/doc/persistent_cohomology_user.rst @@ -0,0 +1,104 @@ +================================= +Persistent cohomology user manual +================================= +Definition +---------- +===================================== ===================================== ===================================== +:Author: Clément Maria :Introduced in: GUDHI PYTHON 1.4.0 :Copyright: GPL v3 +===================================== ===================================== ===================================== + ++---------------------------------------------+----------------------------------------------------------------------+ +| :doc:`persistent_cohomology_user` | Please refer to each data structure that contains persistence | +| | feature for reference: | +| | | +| | * :doc:`alpha_complex_ref` | +| | * :doc:`cubical_complex_ref` | +| | * :doc:`simplex_tree_ref` | +| | * :doc:`witness_complex_ref` | ++---------------------------------------------+----------------------------------------------------------------------+ + + +Computation of persistent cohomology using the algorithm of :cite:`DBLP:journals/dcg/SilvaMV11` and +:cite:`DBLP:journals/corr/abs-1208-5018` and the Compressed Annotation Matrix implementation of +:cite:`DBLP:conf/esa/BoissonnatDM13`. + +The theory of homology consists in attaching to a topological space a sequence of (homology) groups, capturing global +topological features like connected components, holes, cavities, etc. Persistent homology studies the evolution -- +birth, life and death -- of these features when the topological space is changing. Consequently, the theory is +essentially composed of three elements: + +* topological spaces +* their homology groups +* an evolution scheme. + +Topological Spaces +------------------ + +Topological spaces are represented by simplicial complexes. +Let :math:`V = \{1, \cdots ,|V|\}` be a set of *vertices*. +A *simplex* :math:`\sigma` is a subset of vertices :math:`\sigma \subseteq V`. +A *simplicial complex* :math:`\mathbf{K}` on :math:`V` is a collection of simplices :math:`\{\sigma\}`, +:math:`\sigma \subseteq V`, such that :math:`\tau \subseteq \sigma \in \mathbf{K} \Rightarrow \tau \in \mathbf{K}`. +The dimension :math:`n=|\sigma|-1` of :math:`\sigma` is its number of elements minus 1. +A *filtration* of a simplicial complex is a function :math:`f:\mathbf{K} \rightarrow \mathbb{R}` satisfying +:math:`f(\tau)\leq f(\sigma)` whenever :math:`\tau \subseteq \sigma`. + +Homology +-------- + +For a ring :math:`\mathcal{R}`, the group of *n-chains*, denoted :math:`\mathbf{C}_n(\mathbf{K},\mathcal{R})`, of +:math:`\mathbf{K}` is the group of formal sums of n-simplices with :math:`\mathcal{R}` coefficients. The +*boundary operator* is a linear operator +:math:`\partial_n: \mathbf{C}_n(\mathbf{K},\mathcal{R}) \rightarrow \mathbf{C}_{n-1}(\mathbf{K},\mathcal{R})` +such that :math:`\partial_n \sigma = \partial_n [v_0, \cdots , v_n] = \sum_{i=0}^n (-1)^{i}[v_0,\cdots ,\widehat{v_i}, \cdots,v_n]`, +where :math:`\widehat{v_i}` means :math:`v_i` is omitted from the list. The chain groups form a sequence: + +.. math:: + + \cdots \ \ \mathbf{C}_n(\mathbf{K},\mathcal{R}) \xrightarrow{\ \partial_n\ } + \mathbf{C}_{n-1}(\mathbf{K},\mathcal{R}) \xrightarrow{\partial_{n-1}} \cdots \xrightarrow{\ \partial_2 \ } + \mathbf{C}_1(\mathbf{K},\mathcal{R}) \xrightarrow{\ \partial_1 \ } \mathbf{C}_0(\mathbf{K},\mathcal{R}) + +of finitely many groups :math:`\mathbf{C}_n(\mathbf{K},\mathcal{R})` and homomorphisms :math:`\partial_n`, indexed by +the dimension :math:`n \geq 0`. The boundary operators satisfy the property :math:`\partial_n \circ \partial_{n+1}=0` +for every :math:`n > 0` and we define the homology groups: + +.. math:: + + \mathbf{H}_n(\mathbf{K},\mathcal{R}) = \ker \partial_n / \mathrm{im} \ \partial_{n+1} + +We refer to :cite:`Munkres-elementsalgtop1984` for an introduction to homology +theory and to :cite:`DBLP:books/daglib/0025666` for an introduction to persistent homology. + +Indexing Scheme +--------------- + +"Changing" a simplicial complex consists in applying a simplicial map. An *indexing scheme* is a directed graph +together with a traversal order, such that two consecutive nodes in the graph are connected by an arrow (either forward +or backward). +The nodes represent simplicial complexes and the directed edges simplicial maps. + +From the computational point of view, there are two types of indexing schemes of interest in persistent homology: + +* linear ones + :math:`\bullet \longrightarrow \bullet \longrightarrow \cdots \longrightarrow \bullet \longrightarrow \bullet` + in persistent homology :cite:`DBLP:journals/dcg/ZomorodianC05`, +* zigzag ones + :math:`\bullet \longrightarrow \bullet \longleftarrow \cdots \longrightarrow \bullet \longleftarrow \bullet` + in zigzag persistent homology :cite:`DBLP:journals/focm/CarlssonS10`. + +These indexing schemes have a natural left-to-right traversal order, and we describe them with ranges and iterators. +In the current release of the Gudhi library, only the linear case is implemented. + +In the following, we consider the case where the indexing scheme is induced by a filtration. + +Ordering the simplices by increasing filtration values (breaking ties so as a simplex appears after its subsimplices of +same filtration value) provides an indexing scheme. + +Examples +-------- + +We provide several example files: run these examples with -h for details on their use. + +.. todo:: + examples for persistence diff --git a/src/cython/src/doc/simplex_tree_ref.rst b/src/cython/src/doc/simplex_tree_ref.rst new file mode 100644 index 00000000..6d196843 --- /dev/null +++ b/src/cython/src/doc/simplex_tree_ref.rst @@ -0,0 +1,10 @@ +============================= +Simplex tree reference manual +============================= + +.. autoclass:: gudhi.SimplexTree + :members: + :undoc-members: + :show-inheritance: + + .. automethod:: gudhi.SimplexTree.__init__ diff --git a/src/cython/src/doc/simplex_tree_sum.rst b/src/cython/src/doc/simplex_tree_sum.rst new file mode 100644 index 00000000..ffdb2cf4 --- /dev/null +++ b/src/cython/src/doc/simplex_tree_sum.rst @@ -0,0 +1,13 @@ +===================================== ===================================== ===================================== +:Author: Clément Maria :Introduced in: GUDHI PYTHON 1.4.0 :Copyright: GPL v3 +===================================== ===================================== ===================================== + ++-------------------------------------------+----------------------------------------------------------------------+ +| .. image:: | The simplex tree is an efficient and flexible data structure for | +| img/Simplex_tree_representation.png | representing general (filtered) simplicial complexes. | +| | | +| | The data structure is described in | +| | :cite:`boissonnatmariasimplextreealgorithmica` | ++-------------------------------------------+----------------------------------------------------------------------+ +| :doc:`simplex_tree_user` | :doc:`simplex_tree_ref` | ++-------------------------------------------+----------------------------------------------------------------------+ diff --git a/src/cython/src/doc/simplex_tree_user.rst b/src/cython/src/doc/simplex_tree_user.rst new file mode 100644 index 00000000..3a00f1ac --- /dev/null +++ b/src/cython/src/doc/simplex_tree_user.rst @@ -0,0 +1,67 @@ +======================== +Simplex tree user manual +======================== +Definition +---------- + +.. include:: simplex_tree_sum.rst + +A simplicial complex :math:`\mathbf{K}` on a set of vertices :math:`V = \{1, \cdots ,|V|\}` is a collection of +simplices :math:`\{\sigma\}`, :math:`\sigma \subseteq V` such that +:math:`\tau \subseteq \sigma \in \mathbf{K} \rightarrow \tau \in \mathbf{K}`. The dimension :math:`n=|\sigma|-1` of +:math:`\sigma` is its number of elements minus `1`. + +A filtration of a simplicial complex is a function :math:`f:\mathbf{K} \rightarrow \mathbb{R}` satisfying +:math:`f(\tau)\leq f(\sigma)` whenever :math:`\tau \subseteq \sigma`. Ordering the simplices by increasing filtration +values (breaking ties so as a simplex appears after its subsimplices of same filtration value) provides an indexing +scheme. + + +Implementation +-------------- + +There are two implementation of complexes. The first on is the Simplex_tree data structure. +The simplex tree is an efficient and flexible data structure for representing general (filtered) simplicial complexes. +The data structure is described in :cite`boissonnatmariasimplextreealgorithmica`. + +The second one is the Hasse_complex. The Hasse complex is a data structure representing explicitly all co-dimension 1 +incidence relations in a complex. It is consequently faster when accessing the boundary of a simplex, but is less +compact and harder to construct from scratch. + +Example +------- + +.. testcode:: + + import gudhi + st = gudhi.SimplexTree() + if st.insert([0, 1]): + print("[0, 1] inserted") + if st.insert([0, 1, 2], filtration=4.0): + print("[0, 1, 2] inserted") + if st.find([0, 1]): + print("[0, 1] found") + print("num_vertices=", st.num_vertices()) + print("num_simplices=", st.num_simplices()) + print("skeleton_tree(2) =") + for sk_value in st.get_skeleton_tree(2): + print(sk_value) + + +The output is: + +.. testoutput:: + + [0, 1] inserted + [0, 1, 2] inserted + [0, 1] found + ('num_vertices=', 3) + ('num_simplices=', 7) + skeleton_tree(2) = + ([0, 1, 2], 4.0) + ([0, 1], 0.0) + ([0, 2], 4.0) + ([0], 0.0) + ([1, 2], 4.0) + ([1], 0.0) + ([2], 4.0) diff --git a/src/cython/src/doc/witness_complex_ref.rst b/src/cython/src/doc/witness_complex_ref.rst new file mode 100644 index 00000000..c78760cb --- /dev/null +++ b/src/cython/src/doc/witness_complex_ref.rst @@ -0,0 +1,10 @@ +================================ +Witness complex reference manual +================================ + +.. autoclass:: gudhi.WitnessComplex + :members: + :undoc-members: + :show-inheritance: + + .. automethod:: gudhi.WitnessComplex.__init__ diff --git a/src/cython/src/doc/witness_complex_sum.rst b/src/cython/src/doc/witness_complex_sum.rst new file mode 100644 index 00000000..0d65d420 --- /dev/null +++ b/src/cython/src/doc/witness_complex_sum.rst @@ -0,0 +1,25 @@ +===================================== ===================================== ===================================== +:Author: Siargey Kachanovich :Introduced in: GUDHI PYTHON 1.4.0 :Copyright: GPL v3 +===================================== ===================================== ===================================== + ++---------------------------------------------+----------------------------------------------------------------------+ +| .. image:: | Witness complex :math:`Wit(W,L)` is a simplicial complex defined on | +| img/Witness_complex_representation.png | two sets of points in :math:`\mathbb{R}^D`:Wit(W,L)` is a simplicial | +| | complex defined on two sets of points in :math:`\mathbb{R}^D`: | +| | | +| | * :math:`W` set of **witnesses** and | +| | * :math:`L \subseteq W` set of **landmarks**. | +| | | +| | The simplices are based on landmarks and a simplex belongs to the | +| | witness complex if and only if it is witnessed, that is: | +| | | +| | :math:`\sigma \subset L` is witnessed if there exists a point | +| | :math:`w \in W` such that w is closer to the vertices of | +| | :math:`\sigma` than other points in :math:`L` and all of its faces | +| | are witnessed as well. | +| | | +| | The data structure is described in | +| | :cite:`boissonnatmariasimplextreealgorithmica`. | ++---------------------------------------------+----------------------------------------------------------------------+ +| :doc:`witness_complex_user` | :doc:`witness_complex_ref` | ++---------------------------------------------+----------------------------------------------------------------------+ diff --git a/src/cython/src/doc/witness_complex_user.rst b/src/cython/src/doc/witness_complex_user.rst new file mode 100644 index 00000000..604c7357 --- /dev/null +++ b/src/cython/src/doc/witness_complex_user.rst @@ -0,0 +1,31 @@ +=========================== +Witness complex user manual +=========================== +Definition +---------- + +.. include:: witness_complex_sum.rst + +Implementation +-------------- + +The principal class of this module is Gudhi::Witness_complex. + +In both cases, the constructor for this class takes a {witness}x{closest_landmarks} table, where each row represents a +witness and consists of landmarks sorted by distance to this witness. + +.. todo:: + This table can be constructed by two additional classes Landmark_choice_by_furthest_point and + Landmark_choice_by_random_point also included in the module. + +.. figure:: + img/bench_Cy8.png + :align: center + + Running time as function on number of landmarks. + +.. figure:: + img/bench_sphere.png + :align: center + + Running time as function on number of witnesses for |L|=300. -- cgit v1.2.3