From 55c7181126aa7defce38c9b82872d14223d4c1dd Mon Sep 17 00:00:00 2001 From: Gard Spreemann Date: Tue, 7 Feb 2017 17:33:01 +0100 Subject: Initial import of upstream's 1.3.1. --- doc/Alpha_complex/Intro_alpha_complex.h | 170 ++ doc/Alpha_complex/alpha_complex_doc.ipe | 595 ++++++ doc/Alpha_complex/alpha_complex_doc.png | Bin 0 -> 25554 bytes doc/Alpha_complex/alpha_complex_doc_420.ipe | 514 +++++ doc/Alpha_complex/alpha_complex_doc_420.png | Bin 0 -> 80794 bytes doc/Alpha_complex/alpha_complex_representation.ipe | 321 +++ doc/Alpha_complex/alpha_complex_representation.png | Bin 0 -> 14606 bytes .../Cubical_complex_representation.ipe | 732 +++++++ .../Cubical_complex_representation.png | Bin 0 -> 19167 bytes .../Gudhi_Cubical_Complex_doc.h | 159 ++ doc/Bitmap_cubical_complex/bitmapAllCubes.png | Bin 0 -> 38944 bytes doc/Bitmap_cubical_complex/exampleBitmap.png | Bin 0 -> 2549 bytes doc/Contraction/SO3_rips.png | Bin 0 -> 883320 bytes doc/Contraction/SO3_simplified.png | Bin 0 -> 48126 bytes doc/Contraction/SO3points.png | Bin 0 -> 62539 bytes doc/Contraction/so3.png | Bin 0 -> 137258 bytes doc/Contraction/so3.svg | 209 ++ .../sphere_contraction_representation.png | Bin 0 -> 44839 bytes doc/Contraction/zoom.png | Bin 0 -> 39710 bytes doc/Persistent_cohomology/3DTorus_poch.png | Bin 0 -> 40164 bytes .../Intro_persistent_cohomology.h | 206 ++ doc/Simplex_tree/Intro_simplex_tree.h | 84 + doc/Simplex_tree/Simplex_tree_representation.png | Bin 0 -> 39217 bytes doc/Skeleton_blocker/blocker_curve.svg | 2177 ++++++++++++++++++++ doc/Skeleton_blocker/blockers_curve.png | Bin 0 -> 38135 bytes doc/Skeleton_blocker/ds_representation.png | Bin 0 -> 36412 bytes doc/Skeleton_blocker/ds_representation.svg | 470 +++++ doc/Skeleton_blocker/ds_scheme.svg | 477 +++++ doc/Skeleton_blocker/sphere_contraction.png | Bin 0 -> 48755 bytes doc/Witness_complex/Witness_complex_doc.h | 42 + .../Witness_complex_representation.png | Bin 0 -> 48899 bytes doc/Witness_complex/bench_Cy8.png | Bin 0 -> 15254 bytes doc/Witness_complex/bench_sphere.png | Bin 0 -> 16614 bytes doc/common/Gudhi_banner.png | Bin 0 -> 34877 bytes doc/common/footer.html | 29 + doc/common/header.html | 83 + doc/common/main_page.h | 343 +++ doc/common/main_page.h~ | 341 +++ doc/common/stylesheet.css | 1367 ++++++++++++ 39 files changed, 8319 insertions(+) create mode 100644 doc/Alpha_complex/Intro_alpha_complex.h create mode 100644 doc/Alpha_complex/alpha_complex_doc.ipe create mode 100644 doc/Alpha_complex/alpha_complex_doc.png create mode 100644 doc/Alpha_complex/alpha_complex_doc_420.ipe create mode 100644 doc/Alpha_complex/alpha_complex_doc_420.png create mode 100644 doc/Alpha_complex/alpha_complex_representation.ipe create mode 100644 doc/Alpha_complex/alpha_complex_representation.png create mode 100644 doc/Bitmap_cubical_complex/Cubical_complex_representation.ipe create mode 100644 doc/Bitmap_cubical_complex/Cubical_complex_representation.png create mode 100644 doc/Bitmap_cubical_complex/Gudhi_Cubical_Complex_doc.h create mode 100644 doc/Bitmap_cubical_complex/bitmapAllCubes.png create mode 100644 doc/Bitmap_cubical_complex/exampleBitmap.png create mode 100644 doc/Contraction/SO3_rips.png create mode 100644 doc/Contraction/SO3_simplified.png create mode 100644 doc/Contraction/SO3points.png create mode 100644 doc/Contraction/so3.png create mode 100644 doc/Contraction/so3.svg create mode 100644 doc/Contraction/sphere_contraction_representation.png create mode 100644 doc/Contraction/zoom.png create mode 100644 doc/Persistent_cohomology/3DTorus_poch.png create mode 100644 doc/Persistent_cohomology/Intro_persistent_cohomology.h create mode 100644 doc/Simplex_tree/Intro_simplex_tree.h create mode 100644 doc/Simplex_tree/Simplex_tree_representation.png create mode 100644 doc/Skeleton_blocker/blocker_curve.svg create mode 100644 doc/Skeleton_blocker/blockers_curve.png create mode 100644 doc/Skeleton_blocker/ds_representation.png create mode 100644 doc/Skeleton_blocker/ds_representation.svg create mode 100644 doc/Skeleton_blocker/ds_scheme.svg create mode 100644 doc/Skeleton_blocker/sphere_contraction.png create mode 100644 doc/Witness_complex/Witness_complex_doc.h create mode 100644 doc/Witness_complex/Witness_complex_representation.png create mode 100644 doc/Witness_complex/bench_Cy8.png create mode 100644 doc/Witness_complex/bench_sphere.png create mode 100644 doc/common/Gudhi_banner.png create mode 100644 doc/common/footer.html create mode 100644 doc/common/header.html create mode 100644 doc/common/main_page.h create mode 100644 doc/common/main_page.h~ create mode 100644 doc/common/stylesheet.css (limited to 'doc') diff --git a/doc/Alpha_complex/Intro_alpha_complex.h b/doc/Alpha_complex/Intro_alpha_complex.h new file mode 100644 index 00000000..f3126169 --- /dev/null +++ b/doc/Alpha_complex/Intro_alpha_complex.h @@ -0,0 +1,170 @@ +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Author(s): Vincent Rouvreau + * + * Copyright (C) 2015 INRIA Saclay (France) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef DOC_ALPHA_COMPLEX_INTRO_ALPHA_COMPLEX_H_ +#define DOC_ALPHA_COMPLEX_INTRO_ALPHA_COMPLEX_H_ + +// needs namespace for Doxygen to link on classes +namespace Gudhi { +// needs namespace for Doxygen to link on classes +namespace alpha_complex { + +/** \defgroup alpha_complex Alpha complex + * + * \author Vincent Rouvreau + * + * @{ + * + * \section definition Definition + * + * Alpha_complex is a simplicial complex + * constructed from the finite 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. + * + * \image html "alpha_complex_representation.png" "Alpha-complex representation" + * + * Alpha_complex is constructing a `Simplex_tree` using Delaunay Triangulation + * \cite cgal:hdj-t-15b from CGAL (the Computational Geometry + * Algorithms Library \cite cgal:eb-15b). + * + * The complex is a template class requiring an Epick_d dD Geometry Kernel + * \cite cgal:s-gkd-15b from CGAL as template parameter. + * + * \remark When Alpha_complex is constructed with an infinite value of alpha, the complex is a Delaunay complex. + * + * \section pointsexample Example from points + * + * This example builds the Delaunay triangulation from the given points in a 2D static kernel, and initializes the + * alpha complex with it. + * + * Then, it is asked to display information about the alpha complex. + * + * \include Alpha_complex/Alpha_complex_from_points.cpp + * + * When launching: + * + * \code $> ./alphapoints + * \endcode + * + * the program output is: + * + * \include Alpha_complex/alphaoffreader_for_doc_60.txt + * + * \section algorithm Algorithm + * + * \subsection datastructure 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 html "alpha_complex_doc.png" "Simplex tree structure construction example" + * + * \subsection filtrationcomputation Filtration value computation algorithm + * + * \f{algorithm}{ + * \caption{Filtration value computation algorithm}\label{alpha} + * \begin{algorithmic} + * \For{i : dimension $\rightarrow$ 0} + * \ForAll{$\sigma$ of dimension i} + * \If {filtration($\sigma$) is NaN} + * \State filtration($\sigma$) = $\alpha^2(\sigma)$ + * \EndIf + * \ForAll{$\tau$ face of $\sigma$} \Comment{propagate alpha filtration value} + * \If {filtration($\tau$) is not NaN} + * \State filtration($\tau$) = min (filtration($\tau$), filtration($\sigma$)) + * \Else + * \If {$\tau$ is not Gabriel for $\sigma$} + * \State filtration($\tau$) = filtration($\sigma$) + * \EndIf + * \EndIf + * \EndFor + * \EndFor + * \EndFor + * \State make\_filtration\_non\_decreasing() + * \State prune\_above\_filtration() + * \end{algorithmic} + * \f} + * + * \subsubsection dimension2 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 html "alpha_complex_doc_420.png" "Filtration value propagation example" + * + * \subsubsection dimension1 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). + * + * \subsubsection dimension0 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). + * + * \subsubsection nondecreasing 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()`. + * + * \subsubsection pruneabove Prune above given filtration value + * + * The simplex tree is pruned from the given maximum alpha squared value (cf. `Simplex_tree::prune_above_filtration()`). + * In the following example, the value is given by the user as argument of the program. + * + * + * \section offexample Example from OFF file + * + * This example builds the Delaunay triangulation in a dynamic kernel, and initializes the alpha complex with it. + * + * + * Then, it is asked to display information about the alpha complex. + * + * \include Alpha_complex/Alpha_complex_from_off.cpp + * + * When launching: + * + * \code $> ./alphaoffreader ../../data/points/alphacomplexdoc.off 32.0 + * \endcode + * + * the program output is: + * + * \include Alpha_complex/alphaoffreader_for_doc_32.txt + * + * \copyright GNU General Public License v3. + * \verbatim Contact: gudhi-users@lists.gforge.inria.fr \endverbatim + */ +/** @} */ // end defgroup alpha_complex + +} // namespace alpha_complex + +namespace alphacomplex = alpha_complex; + +} // namespace Gudhi + +#endif // DOC_ALPHA_COMPLEX_INTRO_ALPHA_COMPLEX_H_ diff --git a/doc/Alpha_complex/alpha_complex_doc.ipe b/doc/Alpha_complex/alpha_complex_doc.ipe new file mode 100644 index 00000000..baf0d26a --- /dev/null +++ b/doc/Alpha_complex/alpha_complex_doc.ipe @@ -0,0 +1,595 @@ + + + + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e + + + + +0.6 0 0 0.6 0 0 e + + + + + +0.5 0 0 0.5 0 0 e + + +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e + + + + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h + + + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h + + + + + +-0.5 -0.5 m +0.5 -0.5 l +0.5 0.5 l +-0.5 0.5 l +h + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h + + + + + + +-0.43 -0.57 m +0.57 0.43 l +0.43 0.57 l +-0.57 -0.43 l +h + + +-0.43 0.57 m +0.57 -0.43 l +0.43 -0.57 l +-0.57 0.43 l +h + + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +-1 0.333 m +0 0 l +-1 -0.333 l + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +320 580 m +350 520 l +290 530 l +320 580 l +320 580 l + + +320 580 m +280 660 l +290 530 l +320 580 l +320 580 l + + +320 580 m +370 580 l +350 520 l +320 580 l + +Delaunay triangulation +0 +1 +2 +3 +4 +5 +6 + +280 660 m +300 710 l +370 690 l +280 660 l + + +320 580 m +370 690 l +370 580 l +320 580 l + + +280 660 m +370 690 l +320 580 l +280 660 l + + +4 0 0 4 320 704 e + + +322.919 706.788 m +317.189 701.058 l +317.189 701.203 l + + +317.551 706.934 m +322.629 701.058 l + + +240 620 m +220 600 l + + +240 620 m +220 640 l + +Simplex tree structure + +280 630 m +170 630 l + + +280 610 m +170 610 l + + + + + + + + +2 + +300 688 m +300 676 l +312 676 l +312 688 l +h + +2 + +300 688 m +300 676 l +312 676 l +312 688 l +h + + +300 688 m +300 676 l +312 676 l +312 688 l +h + +4 +1 + +300 688 m +300 676 l +312 676 l +312 688 l +h + + +300 688 m +300 676 l +312 676 l +312 688 l +h + +4 +3 + +300 688 m +300 676 l +312 676 l +312 688 l +h + +2 + +300 688 m +300 676 l +312 676 l +312 688 l +h + + +300 688 m +300 676 l +312 676 l +312 688 l +h + +3 +6 + +300 688 m +300 676 l +312 676 l +312 688 l +h + +4 + +300 688 m +300 676 l +312 676 l +312 688 l +h + + +300 688 m +300 676 l +312 676 l +312 688 l +h + +6 +6 + +300 688 m +300 676 l +312 676 l +312 688 l +h + +5 + +300 688 m +300 676 l +312 676 l +312 688 l +h + + +300 688 m +300 676 l +312 676 l +312 688 l +h + +6 + +300 688 m +300 676 l +312 676 l +312 688 l +h + +6 + +292 716 m +292 728 l +316 728 l +316 716 l +h + + +316 716 m +316 728 l +340 728 l +340 716 l +h + + +340 716 m +340 728 l +364 728 l +364 716 l +h + + +364 716 m +364 728 l +388 728 l +388 716 l +h + + +388 716 m +388 728 l +412 728 l +412 716 l +h + + +412 716 m +412 728 l +436 728 l +436 716 l +h + + +436 716 m +436 728 l +460 728 l +460 716 l +h + +0 +1 +2 +3 +4 +5 +6 + +436 708 m +436 716 l + + +364 708 m +364 716 l + + +364 688 m +364 696 l + + +320 688 m +320 696 l + + +296 708 m +308 716 l +308 716 l + + +264 688 m +268 696 l + + +292 688 m +292 696 l + + +388 736 m +388 728 l + + +372 612 m +376 620 l + + +448 612 m +448 620 l + +3 + +300 688 m +300 676 l +312 676 l +312 688 l +h + + +300 688 m +300 676 l +312 676 l +312 688 l +h + +6 + +364 688 m +364 696 l + + +300 688 m +300 676 l +312 676 l +312 688 l +h + +6 + +300 688 m +300 676 l +312 676 l +312 688 l +h + +6 + +436 708 m +436 716 l + + +300 688 m +300 676 l +312 676 l +312 688 l +h + +6 + +300 688 m +300 676 l +312 676 l +312 688 l +h + +6 + +436 708 m +436 716 l + + + diff --git a/doc/Alpha_complex/alpha_complex_doc.png b/doc/Alpha_complex/alpha_complex_doc.png new file mode 100644 index 00000000..0b6201da Binary files /dev/null and b/doc/Alpha_complex/alpha_complex_doc.png differ diff --git a/doc/Alpha_complex/alpha_complex_doc_420.ipe b/doc/Alpha_complex/alpha_complex_doc_420.ipe new file mode 100644 index 00000000..5d1d29d4 --- /dev/null +++ b/doc/Alpha_complex/alpha_complex_doc_420.ipe @@ -0,0 +1,514 @@ + + + + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e + + + + +0.6 0 0 0.6 0 0 e + + + + + +0.5 0 0 0.5 0 0 e + + +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e + + + + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h + + + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h + + + + + +-0.5 -0.5 m +0.5 -0.5 l +0.5 0.5 l +-0.5 0.5 l +h + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h + + + + + + +-0.43 -0.57 m +0.57 0.43 l +0.43 0.57 l +-0.57 -0.43 l +h + + +-0.43 0.57 m +0.57 -0.43 l +0.43 -0.57 l +-0.57 0.43 l +h + + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +-1 0.333 m +0 0 l +-1 -0.333 l + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +320 580 m +350 520 l +290 530 l +320 580 l +320 580 l + + +320 580 m +280 660 l +290 530 l +320 580 l +320 580 l + + +320 580 m +370 580 l +350 520 l +320 580 l + +Cell [4,2,0] +0 +1 +2 +3 +4 +5 +6 + +280 660 m +300 710 l +370 690 l +280 660 l + + +320 580 m +370 690 l +370 580 l +320 580 l + + +280 660 m +370 690 l +320 580 l +280 660 l + + +77.2727 0 0 77.2727 243.636 591.818 e + + +243.428 591.569 m +186.061 643.28 l + +$\alpha_{420}$ + +320 580 m +350 520 l +290 530 l +320 580 l +320 580 l + + +320 580 m +280 660 l +290 530 l +320 580 l +320 580 l + + +320 580 m +370 580 l +350 520 l +320 580 l + +[2,0] is Gabriel $\rightarrow$ $\alpha_{20}$ is not$\\$ +modified (NaN) + +0 +2 +3 +4 +5 +6 + +280 660 m +300 710 l +370 690 l +280 660 l + + +320 580 m +370 690 l +370 580 l +320 580 l + + +280 660 m +370 690 l +320 580 l +280 660 l + +$\alpha_{20}$ + +290 530 m +320 580 l + + +29.1548 0 0 29.1548 305 555 e + + +304.883 555.015 m +334.509 555.015 l + + +320 580 m +350 520 l +290 530 l +320 580 l +320 580 l + + +320 580 m +280 660 l +290 530 l +320 580 l +320 580 l + + +320 580 m +370 580 l +350 520 l +320 580 l + +[0,4] is not Gabriel $\rightarrow$ $\alpha_{40} = \alpha_{420}$ +0 +3 +5 +6 + +280 660 m +300 710 l +370 690 l +280 660 l + + +320 580 m +370 690 l +370 580 l +320 580 l + + +280 660 m +370 690 l +320 580 l +280 660 l + +$\alpha_{40}$ + +290 530 m +280 660 l + + +320 580 m +350 520 l +290 530 l +320 580 l +320 580 l + + +320 580 m +280 660 l +290 530 l +320 580 l +320 580 l + + +320 580 m +370 580 l +350 520 l +320 580 l + +0 +1 +2 +3 +5 +6 + +280 660 m +300 710 l +370 690 l +280 660 l + + +320 580 m +370 690 l +370 580 l +320 580 l + + +280 660 m +370 690 l +320 580 l +280 660 l + +$\alpha_{42}$ +4 + +406.093 497.775 m +446.094 418.092 l + + +44.5799 0 0 44.5799 425.934 457.774 e + + +425.854 457.774 m +470.795 457.774 l + +[2,4] is Gabriel $\rightarrow$ $\alpha_{42}$ is not modified (NaN) + + +205.028 596.091 m +110.946 544.02 l + + +280.768 588.99 m +280.768 547.57 l + + +341.123 594.316 m +413.904 554.079 l + +For all faces of [4,2,0] +N.B. : is Gabriel on a single point has no sense. +Dimension =2 - $\sigma$ = [4,2,0] + +247.333 430.892 m +311.764 430.892 l + + + + + + + + + + + + + + +1 + + + + + +4 + + +1 + + +2 + +65.192 0 0 65.192 285 595 e + + + + + + + + + + + + + diff --git a/doc/Alpha_complex/alpha_complex_doc_420.png b/doc/Alpha_complex/alpha_complex_doc_420.png new file mode 100644 index 00000000..ef7187f7 Binary files /dev/null and b/doc/Alpha_complex/alpha_complex_doc_420.png differ diff --git a/doc/Alpha_complex/alpha_complex_representation.ipe b/doc/Alpha_complex/alpha_complex_representation.ipe new file mode 100644 index 00000000..e8096b93 --- /dev/null +++ b/doc/Alpha_complex/alpha_complex_representation.ipe @@ -0,0 +1,321 @@ + + + + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e + + + + +0.6 0 0 0.6 0 0 e + + + + + +0.5 0 0 0.5 0 0 e + + +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e + + + + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h + + + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h + + + + + +-0.5 -0.5 m +0.5 -0.5 l +0.5 0.5 l +-0.5 0.5 l +h + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h + + + + + + +-0.43 -0.57 m +0.57 0.43 l +0.43 0.57 l +-0.57 -0.43 l +h + + +-0.43 0.57 m +0.57 -0.43 l +0.43 -0.57 l +-0.57 0.43 l +h + + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +-1 0.333 m +0 0 l +-1 -0.333 l + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +109.771 601.912 m +159.595 601.797 l +140.058 541.915 l +h + + +79.8776 552.169 m +109.756 601.699 l +139.812 542.209 l +h + + +69.8453 682.419 m +159.925 712.208 l +90.12 732.039 l +h + +Alpha complex +0 +1 +2 +3 +4 +5 +6 + +58.1341 0 0 58.1341 218.925 692.601 e + + +60 710 m +40 660 l + + +40 660 m +130 690 l + + +130 690 m +60 710 l + + +40 660 m +80 580 l + + +80 580 m +130 580 l +130 580 l + + +130 580 m +110 520 l + + +110 520 m +50 530 l +50 530 l +50 530 l + + +50 530 m +80 580 l + + +130 580 m +130 690 l + + + +108.275 743.531 m +166.45 743.531 l + +$\alpha$ + + + + + + +150.038 609.9 m +179.929 549.727 l + + + + + diff --git a/doc/Alpha_complex/alpha_complex_representation.png b/doc/Alpha_complex/alpha_complex_representation.png new file mode 100644 index 00000000..7b81cd69 Binary files /dev/null and b/doc/Alpha_complex/alpha_complex_representation.png differ diff --git a/doc/Bitmap_cubical_complex/Cubical_complex_representation.ipe b/doc/Bitmap_cubical_complex/Cubical_complex_representation.ipe new file mode 100644 index 00000000..bec245e7 --- /dev/null +++ b/doc/Bitmap_cubical_complex/Cubical_complex_representation.ipe @@ -0,0 +1,732 @@ + + + + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e + + + + +0.6 0 0 0.6 0 0 e + + + + + +0.5 0 0 0.5 0 0 e + + +0.6 0 0 0.6 0 0 e +0.4 0 0 0.4 0 0 e + + + + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h + + + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h + + + + + +-0.5 -0.5 m +0.5 -0.5 l +0.5 0.5 l +-0.5 0.5 l +h + + +-0.6 -0.6 m +0.6 -0.6 l +0.6 0.6 l +-0.6 0.6 l +h +-0.4 -0.4 m +0.4 -0.4 l +0.4 0.4 l +-0.4 0.4 l +h + + + + + + +-0.43 -0.57 m +0.57 0.43 l +0.43 0.57 l +-0.57 -0.43 l +h + + +-0.43 0.57 m +0.57 -0.43 l +0.43 -0.57 l +-0.57 0.43 l +h + + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-0.8 0 l +-1 -0.333 l +h + + + + +-1 0.333 m +0 0 l +-1 -0.333 l + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h + + + + +0 0 m +-1 0.333 l +-1 -0.333 l +h +-1 0 m +-2 0.333 l +-2 -0.333 l +h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +176 496 m +176 480 l +192 480 l +192 496 l +h + +0 + +192 496 m +192 480 l +240 480 l +240 496 l +h + +1 + +176 496 m +176 480 l +192 480 l +192 496 l +h + +2 + +192 496 m +192 480 l +240 480 l +240 496 l +h + +3 + +176 496 m +176 480 l +192 480 l +192 496 l +h + +4 + +192 496 m +192 480 l +240 480 l +240 496 l +h + +5 + +176 496 m +176 480 l +192 480 l +192 496 l +h + +6 + +192 496 m +192 480 l +240 480 l +240 496 l +h + +7 + +176 496 m +176 480 l +192 480 l +192 496 l +h + +8 + +176 496 m +176 480 l +192 480 l +192 496 l +h + +1 + +192 496 m +192 480 l +240 480 l +240 496 l +h + + +176 496 m +176 480 l +192 480 l +192 496 l +h + +2 + +192 496 m +192 480 l +240 480 l +240 496 l +h + +3 + +176 496 m +176 480 l +192 480 l +192 496 l +h + +4 + +192 496 m +192 480 l +240 480 l +240 496 l +h + +5 + +176 496 m +176 480 l +192 480 l +192 496 l +h + + +192 496 m +192 480 l +240 480 l +240 496 l +h + + +176 496 m +176 480 l +192 480 l +192 496 l +h + + +176 496 m +176 480 l +192 480 l +192 496 l +h + + +160 496 m +160 544 l +144 544 l +144 496 l +h + + +176 496 m +176 480 l +192 480 l +192 496 l +h + + +160 496 m +160 544 l +144 544 l +144 496 l +h + + +176 496 m +176 480 l +192 480 l +192 496 l +h + +1 +2 +3 + +160 496 m +160 544 l +144 544 l +144 496 l +h + +9 + +160 496 m +160 544 l +144 544 l +144 496 l +h + +11 + +160 496 m +160 544 l +144 544 l +144 496 l +h + + +160 496 m +160 544 l +144 544 l +144 496 l +h + + +160 496 m +160 544 l +144 544 l +144 496 l +h + + +176 496 m +176 480 l +192 480 l +192 496 l +h + + +192 496 m +192 480 l +240 480 l +240 496 l +h + + +176 496 m +176 480 l +192 480 l +192 496 l +h + + +192 496 m +192 480 l +240 480 l +240 496 l +h + + +176 496 m +176 480 l +192 480 l +192 496 l +h + + +192 496 m +192 480 l +240 480 l +240 496 l +h + + +176 496 m +176 480 l +192 480 l +192 496 l +h + + +192 496 m +192 480 l +240 480 l +240 496 l +h + + +176 496 m +176 480 l +192 480 l +192 496 l +h + + +176 496 m +176 480 l +192 480 l +192 496 l +h + + +192 496 m +192 480 l +240 480 l +240 496 l +h + + +176 496 m +176 480 l +192 480 l +192 496 l +h + + +192 496 m +192 480 l +240 480 l +240 496 l +h + + +176 496 m +176 480 l +192 480 l +192 496 l +h + + +192 496 m +192 480 l +240 480 l +240 496 l +h + + +176 496 m +176 480 l +192 480 l +192 496 l +h + + +192 496 m +192 480 l +240 480 l +240 496 l +h + + +176 496 m +176 480 l +192 480 l +192 496 l +h + + +160 496 m +160 544 l +144 544 l +144 496 l +h + + +160 496 m +160 544 l +144 544 l +144 496 l +h + + +160 496 m +160 544 l +144 544 l +144 496 l +h + + +160 496 m +160 544 l +144 544 l +144 496 l +h + + +160 496 m +160 544 l +144 544 l +144 496 l +h + + +192 544 m +192 496 l +240 496 l +240 544 l +h + + +192 544 m +192 496 l +240 496 l +240 544 l +h + + +192 544 m +192 496 l +240 496 l +240 544 l +h + + +192 544 m +192 496 l +240 496 l +240 544 l +h + + +192 544 m +192 496 l +240 496 l +240 544 l +h + + +192 544 m +192 496 l +240 496 l +240 544 l +h + + +192 544 m +192 496 l +240 496 l +240 544 l +h + + +192 544 m +192 496 l +240 496 l +240 544 l +h + +10 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 + +152 456 m +472 456 l + + +152 456 m +152 648 l + + + diff --git a/doc/Bitmap_cubical_complex/Cubical_complex_representation.png b/doc/Bitmap_cubical_complex/Cubical_complex_representation.png new file mode 100644 index 00000000..afb2a75e Binary files /dev/null and b/doc/Bitmap_cubical_complex/Cubical_complex_representation.png differ diff --git a/doc/Bitmap_cubical_complex/Gudhi_Cubical_Complex_doc.h b/doc/Bitmap_cubical_complex/Gudhi_Cubical_Complex_doc.h new file mode 100644 index 00000000..4c9c04d9 --- /dev/null +++ b/doc/Bitmap_cubical_complex/Gudhi_Cubical_Complex_doc.h @@ -0,0 +1,159 @@ +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Author(s): Pawel Dlotko + * + * Copyright (C) 2015 INRIA Sophia-Saclay (France) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +#ifndef DOC_GUDHI_CUBICAL_COMPLEX_COMPLEX_H_ +#define DOC_GUDHI_CUBICAL_COMPLEX_COMPLEX_H_ + +namespace Gudhi { + +namespace cubical_complex { + +/** \defgroup cubical_complex Cubical complex + * + * \author Pawel Dlotko + * + * @{ + * + + * Bitmap_cubical_complex is an example of a structured complex useful in computational mathematics (specially rigorous + * numerics) and image analysis. The presented implementation of cubical complexes is based on the following + * definition. + * + * An elementary interval is an interval of a form \f$ [n,n+1] \f$, or \f$[n,n]\f$, for \f$ n \in \mathcal{Z} + * \f$. The first one is called non-degenerate, while the second one is \a degenerate interval. A + * boundary of a elementary interval is a chain \f$\partial [n,n+1] = [n+1,n+1]-[n,n] \f$ in case of + * non-degenerated elementary interval and \f$\partial [n,n] = 0 \f$ in case of degenerate elementary interval. An + * elementary cube \f$ C \f$ is a product of elementary intervals, \f$C=I_1 \times \ldots \times I_n\f$. + * Embedding dimension of a cube is n, the number of elementary intervals (degenerate or not) in the product. + * A dimension of a cube \f$C=I_1 \times ... \times I_n\f$ is the number of non degenerate elementary + * intervals in the product. A boundary of a cube \f$C=I_1 \times \ldots \times I_n\f$ is a chain obtained + * in the following way: + * \f[\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).\f] + * A cubical complex \f$\mathcal{K}\f$ 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 \f$C\f$ in cubical complex + * \f$\mathcal{K}\f$ is maximal if it is not in a boundary of any other cube in \f$\mathcal{K}\f$. A \a + * support of a cube \f$C\f$ is the set in \f$\mathbb{R}^n\f$ occupied by \f$C\f$ (\f$n\f$ is the embedding dimension + * of \f$C\f$). + * + * 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 . + * + * \section datastructure Data structure. + * + * The implementation of Cubical complex provides a representation of complexes that occupy a rectangular region in + * \f$\mathbb{R}^n\f$. This extra assumption allows for a memory efficient way of storing cubical complexes in a form + * of so called bitmaps. Let \f$R = [b_1,e_1] \times \ldots \times [b_n,e_n]\f$, for \f$b_1,...b_n,e_1,...,e_n \in + * \mathbb{Z}\f$, \f$b_i \leq d_i\f$ be the considered rectangular region and let \f$\mathcal{K}\f$ be a filtered + * cubical complex having the rectangle \f$R\f$ as its support. Note that the structure of the coordinate system gives + * a way a lexicographical ordering of cells of \f$\mathcal{K}\f$. 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 \f$\mathcal{K}\f$ and the sizes of \f$\mathcal{K}\f$ in all + * directions, allows to determine, dimension, neighborhood, boundary and coboundary of every cube \f$C \in + * \mathcal{K}\f$. + * + * \image html "Cubical_complex_representation.png" Cubical complex. + * + * Note that the cubical complex in the figure above is, in a natural way, a product of one dimensional cubical + * complexes in \f$\mathbb{R}\f$. The number of all cubes in each direction is equal \f$2n+1\f$, where \f$n\f$ is the + * number of maximal cubes in the considered direction. Let us consider a cube at the position \f$k\f$ 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 \f$C\f$. In a similar way, we can compute boundary and the coboundary of + * each cube. Further details can be found in the literature. + * + * \section inputformat 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 \a Bitmap_cubical_complex class. + * Currently one input from a text file is used. It uses a format used already in Perseus software + * (http://www.sas.upenn.edu/~vnanda/perseus/) 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 html "exampleBitmap.png" "Example of a input data." + * + * The input file for the following complex is: + * \verbatim +2 +3 +3 +1 +4 +6 +8 +20 +4 +7 +6 +5 +\endverbatim + + * \section PeriodicBoundaryConditions Periodic boundary conditions + * Often one would like to impose periodic boundary conditions to the cubical complex. Let \f$ I_1\times ... \times + * I_n \f$ be a box that is decomposed with a cubical complex \f$ \mathcal{K} \f$. Imposing periodic boundary + * conditions in the direction i, means that the left and the right side of a complex \f$ \mathcal{K} \f$ are + * considered the same. In particular, if for a bitmap \f$ \mathcal{K} \f$ periodic boundary conditions are imposed + * in all directions, then complex \f$ \mathcal{K} \f$ 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: + + *\verbatim +2 +-3 +3 +1 +4 +6 +8 +20 +4 +7 +6 +5 +\endverbatim + + * Indicate that we have imposed periodic boundary conditions in the direction x, but not in the direction y. + + * \section BitmapExamples Examples + * End user programs are available in example/Bitmap_cubical_complex folder. + * + * \copyright GNU General Public License v3. + */ +/** @} */ // end defgroup cubical_complex + +} // namespace cubical_complex + +namespace Cubical_complex = cubical_complex; + +} // namespace Gudhi + +#endif // DOC_GUDHI_CUBICAL_COMPLEX_COMPLEX_H_ diff --git a/doc/Bitmap_cubical_complex/bitmapAllCubes.png b/doc/Bitmap_cubical_complex/bitmapAllCubes.png new file mode 100644 index 00000000..77167b13 Binary files /dev/null and b/doc/Bitmap_cubical_complex/bitmapAllCubes.png differ diff --git a/doc/Bitmap_cubical_complex/exampleBitmap.png b/doc/Bitmap_cubical_complex/exampleBitmap.png new file mode 100644 index 00000000..069c6eb2 Binary files /dev/null and b/doc/Bitmap_cubical_complex/exampleBitmap.png differ diff --git a/doc/Contraction/SO3_rips.png b/doc/Contraction/SO3_rips.png new file mode 100644 index 00000000..60452f86 Binary files /dev/null and b/doc/Contraction/SO3_rips.png differ diff --git a/doc/Contraction/SO3_simplified.png b/doc/Contraction/SO3_simplified.png new file mode 100644 index 00000000..f70a1903 Binary files /dev/null and b/doc/Contraction/SO3_simplified.png differ diff --git a/doc/Contraction/SO3points.png b/doc/Contraction/SO3points.png new file mode 100644 index 00000000..0362d98f Binary files /dev/null and b/doc/Contraction/SO3points.png differ diff --git a/doc/Contraction/so3.png b/doc/Contraction/so3.png new file mode 100644 index 00000000..e66acae1 Binary files /dev/null and b/doc/Contraction/so3.png differ diff --git a/doc/Contraction/so3.svg b/doc/Contraction/so3.svg new file mode 100644 index 00000000..adea3f38 --- /dev/null +++ b/doc/Contraction/so3.svg @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + Point cloud sampling SO3 (points are in R but projected into Rfor vizualization) + 9 + 3 + Rips complex built uppon these points20 millions simplices + Simplicial complex obtained after simplification714 simplices + + diff --git a/doc/Contraction/sphere_contraction_representation.png b/doc/Contraction/sphere_contraction_representation.png new file mode 100644 index 00000000..edf37bf3 Binary files /dev/null and b/doc/Contraction/sphere_contraction_representation.png differ diff --git a/doc/Contraction/zoom.png b/doc/Contraction/zoom.png new file mode 100644 index 00000000..38d2b520 Binary files /dev/null and b/doc/Contraction/zoom.png differ diff --git a/doc/Persistent_cohomology/3DTorus_poch.png b/doc/Persistent_cohomology/3DTorus_poch.png new file mode 100644 index 00000000..1c9d8328 Binary files /dev/null and b/doc/Persistent_cohomology/3DTorus_poch.png differ diff --git a/doc/Persistent_cohomology/Intro_persistent_cohomology.h b/doc/Persistent_cohomology/Intro_persistent_cohomology.h new file mode 100644 index 00000000..0cba6361 --- /dev/null +++ b/doc/Persistent_cohomology/Intro_persistent_cohomology.h @@ -0,0 +1,206 @@ +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Author(s): Clément Maria + * + * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef DOC_PERSISTENT_COHOMOLOGY_INTRO_PERSISTENT_COHOMOLOGY_H_ +#define DOC_PERSISTENT_COHOMOLOGY_INTRO_PERSISTENT_COHOMOLOGY_H_ + +// needs namespace for Doxygen to link on classes +namespace Gudhi { +// needs namespace for Doxygen to link on classes +namespace persistent_cohomology { + +/** \defgroup persistent_cohomology Persistent Cohomology + + \author Clément Maria + + 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 and an evolution scheme. + + \section persistencetopolocalspaces Topological Spaces + Topological spaces are represented by simplicial complexes. + Let \f$V = \{1, \cdots ,|V|\}\f$ be a set of vertices. + A simplex \f$\sigma\f$ is a subset of vertices + \f$\sigma \subseteq V\f$. A simplicial complex \f$\mathbf{K}\f$ + on \f$V\f$ is a collection of simplices \f$\{\sigma\}\f$, + \f$\sigma \subseteq V\f$, such that \f$\tau \subseteq \sigma \in \mathbf{K} + \Rightarrow \tau \in \mathbf{K}\f$. The dimension \f$n=|\sigma|-1\f$ of \f$\sigma\f$ + is its number of elements minus 1. A filtration of a simplicial complex is + a function \f$f:\mathbf{K} \rightarrow \mathbb{R}\f$ satisfying \f$f(\tau)\leq + f(\sigma)\f$ whenever \f$\tau \subseteq \sigma\f$. + + We define the concept FilteredComplex which enumerates the requirements for a class + to represent a filtered complex from which persistent homology may be computed. + We use the vocabulary of simplicial complexes, but the concept + is valid for any type of cell complex. The main requirements + are the definition of: + \li type Indexing_tag, which is a model of the concept + IndexingTag, + describing the nature of the indexing scheme, + \li type Simplex_handle to manipulate simplices, + \li method int dimension(Simplex_handle) returning + the dimension of a simplex, + \li type and method Boundary_simplex_range + boundary_simplex_range(Simplex_handle) that returns + a range giving access to the codimension 1 subsimplices of the + input simplex, as-well-as the coefficients \f$(-1)^i\f$ in the + definition of the operator \f$\partial\f$. The iterators have + value type Simplex_handle, + \li type and method + Filtration_simplex_range filtration_simplex_range () + that returns a range giving + access to all the simplices of the complex read in the order + assigned by the indexing scheme, + \li type and method + Filtration_value filtration (Simplex_handle) that returns the value of + the filtration on the simplex represented by the handle. + + \section persistencehomology Homology + For a ring \f$\mathcal{R}\f$, the group of n-chains, + denoted \f$\mathbf{C}_n(\mathbf{K},\mathcal{R})\f$, of \f$\mathbf{K}\f$ is the + group of formal sums of + n-simplices with \f$\mathcal{R}\f$ coefficients. The boundary operator is a + linear operator + \f$\partial_n: \mathbf{C}_n(\mathbf{K},\mathcal{R}) \rightarrow \mathbf{C}_{n-1}(\mathbf{K},\mathcal{R})\f$ + such that \f$\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]\f$, + where \f$\widehat{v_i}\f$ means \f$v_i\f$ is omitted from the list. The chain + groups form a sequence: + + \f[\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}) \f] + + of finitely many groups \f$\mathbf{C}_n(\mathbf{K},\mathcal{R})\f$ and homomorphisms + \f$\partial_n\f$, indexed by the dimension \f$n \geq 0\f$. + The boundary operators satisfy the property \f$\partial_n \circ \partial_{n+1}=0\f$ + for every \f$n > 0\f$ + and we define the homology groups: + + \f[\mathbf{H}_n(\mathbf{K},\mathcal{R}) = \ker \partial_n / \mathrm{im} \ \partial_{n+1}\f] + + 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. + + \section persistenceindexingscheme 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 + \f$\bullet \longrightarrow \bullet \longrightarrow \cdots \longrightarrow \bullet + \longrightarrow \bullet\f$ + in persistent homology \cite DBLP:journals/dcg/ZomorodianC05 , + and zigzag ones + \f$\bullet \longrightarrow \bullet \longleftarrow \cdots + \longrightarrow \bullet + \longleftarrow \bullet \f$ 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. + +\section Examples + +We provide several example files: run these examples with -h for details on their use, and read the README file. + +\li +Persistent_cohomology/rips_persistence.cpp computes the Rips complex of a point cloud and its persistence diagram. + +\li +Persistent_cohomology/rips_multifield_persistence.cpp computes the Rips complex of a point cloud and its +persistence diagram with a family of field coefficients. + +\li +Persistent_cohomology/performance_rips_persistence.cpp provides timings for the construction of the Rips complex +on a set of points sampling a Klein bottle in \f$\mathbb{R}^5\f$ with a simplex tree, its conversion to a +Hasse diagram and the computation of persistent homology and multi-field persistent homology for the +different representations. + +\li +Persistent_cohomology/alpha_complex_3d_persistence.cpp computes the persistent homology with +\f$\mathbb{Z}/2\mathbb{Z}\f$ coefficients of the alpha complex on points sampling from an OFF file. +\code $> ./alpha_complex_3d_persistence ../../data/points/tore3D_300.off 2 0.45 \endcode +\code Simplex_tree dim: 3 +2 0 0 inf +2 1 0.0682162 1.0001 +2 1 0.0934117 1.00003 +2 2 0.56444 1.03938 \endcode + +\li +Persistent_cohomology/alpha_complex_persistence.cpp computes the persistent homology with +\f$\mathbb{Z}/p\mathbb{Z}\f$ coefficients of the alpha complex on points sampling from an OFF file. +\code $> ./alpha_complex_persistence -r 32 -p 2 -m 0.45 ../../data/points/tore3D_300.off \endcode +\code Alpha complex is of dimension 3 - 9273 simplices - 300 vertices. +Simplex_tree dim: 3 +2 0 0 inf +2 1 0.0682162 1.0001 +2 1 0.0934117 1.00003 +2 2 0.56444 1.03938 \endcode + +\li +Persistent_cohomology/periodic_alpha_complex_3d_persistence.cpp computes the persistent homology with +\f$\mathbb{Z}/2\mathbb{Z}\f$ coefficients of the periodic alpha complex on points sampling from an OFF file. +\code $> ./periodic_alpha_complex_3d_persistence ../../data/points/grid_10_10_10_in_0_1.off 3 1.0 \endcode +\code Periodic Delaunay computed. +Simplex_tree dim: 3 +3 0 0 inf +3 1 0.0025 inf +3 1 0.0025 inf +3 1 0.0025 inf +3 2 0.005 inf +3 2 0.005 inf +3 2 0.005 inf +3 3 0.0075 inf \endcode + +\li +Persistent_cohomology/plain_homology.cpp computes the plain homology of a simple simplicial complex without +filtration values. + + \copyright GNU General Public License v3. + */ + +} // namespace persistent_cohomology + +} // namespace Gudhi + +#endif // DOC_PERSISTENT_COHOMOLOGY_INTRO_PERSISTENT_COHOMOLOGY_H_ diff --git a/doc/Simplex_tree/Intro_simplex_tree.h b/doc/Simplex_tree/Intro_simplex_tree.h new file mode 100644 index 00000000..ddf9ad22 --- /dev/null +++ b/doc/Simplex_tree/Intro_simplex_tree.h @@ -0,0 +1,84 @@ +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Author(s): Clément Maria + * + * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef DOC_SIMPLEX_TREE_INTRO_SIMPLEX_TREE_H_ +#define DOC_SIMPLEX_TREE_INTRO_SIMPLEX_TREE_H_ + +// needs namespace for Doxygen to link on classes +namespace Gudhi { + + +/** \defgroup simplex_tree Filtered Complexes + * \author Clément Maria + * + * A simplicial complex \f$\mathbf{K}\f$ on a set of vertices \f$V = \{1, \cdots ,|V|\}\f$ is a collection of + * implices \f$\{\sigma\}\f$, \f$\sigma \subseteq V\f$ such that + * \f$\tau \subseteq \sigma \in \mathbf{K} \rightarrow \tau \in \mathbf{K}\f$. The dimension \f$n=|\sigma|-1\f$ of + * \f$\sigma\f$ is its number of elements minus \f$1\f$. + * + * A filtration of a simplicial complex is a function \f$f:\mathbf{K} \rightarrow \mathbb{R}\f$ satisfying + * \f$f(\tau)\leq f(\sigma)\f$ whenever \f$\tau \subseteq \sigma\f$. 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. + * + * \section filteredcomplexesimplementation Implementations + * \subsection filteredcomplexessimplextree Simplex tree + * 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 + * \image html "Simplex_tree_representation.png" "Simplex tree representation" + * + * \subsubsection filteredcomplexessimplextreeexamples Examples + * + * Here is a list of simplex tree examples : + * \li + * Simplex_tree/simple_simplex_tree.cpp - Simple simplex tree construction and basic function use. + * + * \li + * Simplex_tree/simplex_tree_from_cliques_of_graph.cpp - Simplex tree construction from cliques of graph read in + * a file. + * + * Simplex tree construction with \f$\mathbb{Z}/3\mathbb{Z}\f$ coefficients on weighted graph Klein bottle file: + * \code $> ./simplex_tree_from_cliques_of_graph ../../data/points/Klein_bottle_complex.txt 3 \endcode + * \code Insert the 1-skeleton in the simplex tree in 0.000404 s. +max_dim = 3 +Expand the simplex tree in 3.8e-05 s. +Information of the Simplex Tree: +Number of vertices = 10 Number of simplices = 98 \endcode + * + * \li + * Simplex_tree/simplex_tree_from_alpha_shapes_3.cpp - Simplex tree is computed and displayed from a 3D alpha + * complex (Requires CGAL, GMP and GMPXX to be installed) + * + * + * \subsection filteredcomplexeshassecomplex Hasse complex + * 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. + * + * \copyright GNU General Public License v3. + * @{ + */ + +} // namespace Gudhi + +#endif // DOC_SIMPLEX_TREE_INTRO_SIMPLEX_TREE_H_ diff --git a/doc/Simplex_tree/Simplex_tree_representation.png b/doc/Simplex_tree/Simplex_tree_representation.png new file mode 100644 index 00000000..9d401520 Binary files /dev/null and b/doc/Simplex_tree/Simplex_tree_representation.png differ diff --git a/doc/Skeleton_blocker/blocker_curve.svg b/doc/Skeleton_blocker/blocker_curve.svg new file mode 100644 index 00000000..0094a379 --- /dev/null +++ b/doc/Skeleton_blocker/blocker_curve.svg @@ -0,0 +1,2177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + 1000 + + + + + + + + + + + + 2000 + + + + + + + + + + + + 3000 + + + + + + + + + + + + 4000 + + + + + + + + + + + + 5000 + Number of vertices + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + 20000 + + + + + + + + + + + + + + + + 40000 + + + + + + + + + + + + + + + + 60000 + + + + + + + + + + + + + + + + 80000 + + + + + + + + + + + + + + + + 100000 + + + + + + + + + + + + + + + + 120000 + + + + + + + + + + + + + + + + 140000 + + + + + + + + + + + + 160000 + + + Size + + + + + + + + + + + + + + + + + + + + + + + + + + + + + numsimplices + + + + + + + + + + num blockers + + + + + + + + + + num non popable blockers + + + + size of the graph + + + + + diff --git a/doc/Skeleton_blocker/blockers_curve.png b/doc/Skeleton_blocker/blockers_curve.png new file mode 100644 index 00000000..58863ece Binary files /dev/null and b/doc/Skeleton_blocker/blockers_curve.png differ diff --git a/doc/Skeleton_blocker/ds_representation.png b/doc/Skeleton_blocker/ds_representation.png new file mode 100644 index 00000000..8136621a Binary files /dev/null and b/doc/Skeleton_blocker/ds_representation.png differ diff --git a/doc/Skeleton_blocker/ds_representation.svg b/doc/Skeleton_blocker/ds_representation.svg new file mode 100644 index 00000000..981b2874 --- /dev/null +++ b/doc/Skeleton_blocker/ds_representation.svg @@ -0,0 +1,470 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Simplicial complex + Encoding + Graph + Blockers + + + = + + diff --git a/doc/Skeleton_blocker/ds_scheme.svg b/doc/Skeleton_blocker/ds_scheme.svg new file mode 100644 index 00000000..f13a6213 --- /dev/null +++ b/doc/Skeleton_blocker/ds_scheme.svg @@ -0,0 +1,477 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Simplicial complex + Encoding + Graph + Blockers + + + + diff --git a/doc/Skeleton_blocker/sphere_contraction.png b/doc/Skeleton_blocker/sphere_contraction.png new file mode 100644 index 00000000..502f73f7 Binary files /dev/null and b/doc/Skeleton_blocker/sphere_contraction.png differ diff --git a/doc/Witness_complex/Witness_complex_doc.h b/doc/Witness_complex/Witness_complex_doc.h new file mode 100644 index 00000000..60dfd27b --- /dev/null +++ b/doc/Witness_complex/Witness_complex_doc.h @@ -0,0 +1,42 @@ +#ifndef WITNESS_COMPLEX_DOC_H_ +#define WITNESS_COMPLEX_DOC_H_ + +/** + \defgroup witness_complex Witness complex + + \author Siargey Kachanovich + + \image html "Witness_complex_representation.png" "Witness complex representation" + + \section Definitions + + Witness complex \f$ Wit(W,L) \f$ is a simplicial complex defined on two sets of points in \f$\mathbb{R}^D\f$: + + \li \f$W\f$ set of **witnesses** and + \li \f$L \subseteq W\f$ 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: + + \f$ \sigma \subset L \f$ is witnessed if there exists a point \f$w \in W\f$ such that + w is closer to the vertices of \f$ \sigma \f$ than other points in \f$ L \f$ and all of its faces are witnessed as well. + + The data structure is described in \cite boissonnatmariasimplextreealgorithmica . + + \section 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. + 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. + + *\image html "bench_Cy8.png" "Running time as function on number of landmarks" width=10cm + *\image html "bench_sphere.png" "Running time as function on number of witnesses for |L|=300" width=10cm + + + \copyright GNU General Public License v3. + + + */ + +#endif // WITNESS_COMPLEX_DOC_H_ diff --git a/doc/Witness_complex/Witness_complex_representation.png b/doc/Witness_complex/Witness_complex_representation.png new file mode 100644 index 00000000..1d31a490 Binary files /dev/null and b/doc/Witness_complex/Witness_complex_representation.png differ diff --git a/doc/Witness_complex/bench_Cy8.png b/doc/Witness_complex/bench_Cy8.png new file mode 100644 index 00000000..d9045294 Binary files /dev/null and b/doc/Witness_complex/bench_Cy8.png differ diff --git a/doc/Witness_complex/bench_sphere.png b/doc/Witness_complex/bench_sphere.png new file mode 100644 index 00000000..ba6bb381 Binary files /dev/null and b/doc/Witness_complex/bench_sphere.png differ diff --git a/doc/common/Gudhi_banner.png b/doc/common/Gudhi_banner.png new file mode 100644 index 00000000..18e8a672 Binary files /dev/null and b/doc/common/Gudhi_banner.png differ diff --git a/doc/common/footer.html b/doc/common/footer.html new file mode 100644 index 00000000..7b4cdc5c --- /dev/null +++ b/doc/common/footer.html @@ -0,0 +1,29 @@ + + + + + + + +
+ $projectname + Version $projectnumber + - $projectbrief + + + + $generatedby + + doxygen $doxygenversion + +
+ + + + + + diff --git a/doc/common/header.html b/doc/common/header.html new file mode 100644 index 00000000..a6f3ed9c --- /dev/null +++ b/doc/common/header.html @@ -0,0 +1,83 @@ + + + + + + + + +$projectname: $title +$title + + + + + + +$treeview +$search +$mathjax + +$extrastylesheet + + + + + + + +
+ + +
+ + + + + + + + + + +
$searchbox
+
+ + diff --git a/doc/common/main_page.h b/doc/common/main_page.h new file mode 100644 index 00000000..0983051d --- /dev/null +++ b/doc/common/main_page.h @@ -0,0 +1,343 @@ +/*! \mainpage + * \tableofcontents + * \image html "Gudhi_banner.png" "" width=20cm + * + * \section Introduction 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: + * + * \li Data structures to represent, construct and manipulate simplicial complexes. + * \li Simplification of simplicial complexes by edge contraction. + * \li Algorithms to compute persistent homology persistent homology. + * + * 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. + * + \section DataStructures Data structures + \subsection AlphaComplexDataStructure Alpha complex + \image html "alpha_complex_representation.png" "Alpha complex representation" + + + + + +
+ Author: Vincent Rouvreau
+ Introduced in: GUDHI 1.3.0
+ Copyright: GPL v3
+
+ Alpha_complex is a simplicial complex constructed from the finite 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.
+ User manual: \ref alpha_complex - Reference manual: Gudhi::alpha_complex::Alpha_complex +
+ \subsection CubicalComplexDataStructure Cubical complex + \image html "Cubical_complex_representation.png" "Cubical complex representation" + + + + + +
+ Author: Pawel Dlotko
+ Introduced in: GUDHI 1.3.0
+ Copyright: GPL v3
+
+ The cubical complex is an example of a structured complex useful in computational mathematics (specially + rigorous numerics) and image analysis.
+ User manual: \ref cubical_complex - Reference manual: Gudhi::cubical_complex::Bitmap_cubical_complex +
+ \subsection SimplexTreeDataStructure Simplex tree + \image html "Simplex_tree_representation.png" "Simplex tree representation" + + + + + +
+ Author: Clément Maria
+ Introduced in: GUDHI 1.0.0
+ Copyright: GPL v3
+
+ The simplex tree is an efficient and flexible + data structure for representing general (filtered) simplicial complexes. The data structure + is described in \cite boissonnatmariasimplextreealgorithmica .
+ User manual: \ref simplex_tree - Reference manual: Gudhi::Simplex_tree +
+ \subsection SkeletonBlockerDataStructure Skeleton blocker + \image html "ds_representation.png" "Skeleton blocker representation" + + + + + +
+ Author: David Salinas
+ Introduced in: GUDHI 1.1.0
+ Copyright: GPL v3
+
+ The Skeleton-Blocker data-structure proposes a light encoding for simplicial complexes by storing only an *implicit* + representation of its simplices \cite socg_blockers_2011,\cite blockers2012. Intuitively, it just stores the + 1-skeleton of a simplicial complex with a graph and the set of its "missing faces" that is very small in practice. + This data-structure handles all simplicial complexes operations such as simplex enumeration or simplex removal but + operations that are particularly efficient are operations that do not require simplex enumeration such as edge + iteration, link computation or simplex contraction.
+ User manual: \ref skbl - Reference manual: Gudhi::skeleton_blocker::Skeleton_blocker_complex +
+ \subsection WitnessComplexDataStructure Witness complex + \image html "Witness_complex_representation.png" "Witness complex representation" + + + + + +
+ Author: Siargey Kachanovich
+ Introduced in: GUDHI 1.3.0
+ Copyright: GPL v3
+
+ Witness complex \f$ Wit(W,L) \f$ is a simplicial complex defined on two sets of points in \f$\mathbb{R}^D\f$. + The data structure is described in \cite boissonnatmariasimplextreealgorithmica .
+ User manual: \ref witness_complex - Reference manual: Gudhi::witness_complex::SimplicialComplexForWitness +
+ + \section Toolbox Toolbox + \subsection ContractionToolbox Contraction + \image html "sphere_contraction_representation.png" "Sphere contraction example" + + + + + +
+ Author: David Salinas
+ Introduced in: GUDHI 1.1.0
+ Copyright: GPL v3
+
+ The purpose of this package is to offer a user-friendly interface for edge contraction simplification of huge + simplicial complexes. It uses the \ref skbl data-structure whose size remains small during simplification of most + used geometrical complexes of topological data analysis such as the Rips or the Delaunay complexes. In practice, + the size of this data-structure is even much lower than the total number of simplices.
+ User manual: \ref contr +
+ \subsection PersistentCohomologyToolbox Persistent Cohomology + \image html "3DTorus_poch.png" "Rips Persistent Cohomology on a 3D Torus" + + + + + +
+ Author: Clément Maria
+ Introduced in: GUDHI 1.0.0
+ Copyright: GPL v3
+
+ 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 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 .
+ User manual: \ref persistent_cohomology - Reference manual: Gudhi::persistent_cohomology::Persistent_cohomology +
+*/ + +/*! \page installation Gudhi installation + * \tableofcontents + * As Gudhi is a header only library, there is no need to install the library. + * + * Examples of Gudhi headers inclusion can be found in \ref demos. + * + * \section compiling Compiling + * The library uses c++11 and requires Boost with version 1.48.0 or + * more recent. It is a multi-platform library and compiles on Linux, Mac OSX and Visual Studio 2015. + * + * \subsection demos Demos and examples + * To build the demos and examples, run the following commands in a terminal: +\verbatim cd /path-to-gudhi/ +mkdir build +cd build/ +cmake .. +make \endverbatim + * A list of examples is available here. + * + * \subsection testsuites Test suites + * To test your build, run the following command in a terminal: + * \verbatim make test \endverbatim + * + * \section optionallibrary Optional third-party library + * \subsection gmp GMP: + * The multi-field persistent homology algorithm requires GMP which is a free library for arbitrary-precision + * arithmetic, operating on signed integers, rational numbers, and floating point numbers. + * + * The following example requires the GNU Multiple Precision Arithmetic + * Library (GMP) and will not be built if GMP is not installed: + * \li + * Persistent_cohomology/performance_rips_persistence.cpp + * \li + * Persistent_cohomology/rips_multifield_persistence.cpp + * + * Having GMP version 4.2 or higher installed is recommended. + * + * \subsection cgal CGAL: + * The \ref alpha_complex data structure and few examples requires CGAL, which is a C++ library which provides easy + * access to efficient and reliable geometric algorithms. + * + * Having CGAL version 4.4 or higher installed is recommended. The procedure to install this library according to + * your operating system is detailed here http://doc.cgal.org/latest/Manual/installation.html + * + * The following examples require the Computational Geometry Algorithms + * Library (CGAL \cite cgal:eb-15b) and will not be built if CGAL is not installed: + * \li + * Persistent_cohomology/alpha_complex_3d_persistence.cpp + * \li + * Simplex_tree/simplex_tree_from_alpha_shapes_3.cpp + * + * The following example requires CGAL version ≥ 4.6: + * \li + * Witness_complex/witness_complex_sphere.cpp + * + * The following example requires CGAL version ≥ 4.7: + * \li + * Alpha_complex/Alpha_complex_from_off.cpp + * \li + * Alpha_complex/Alpha_complex_from_points.cpp + * \li + * Persistent_cohomology/alpha_complex_persistence.cpp + * \li + * Persistent_cohomology/periodic_alpha_complex_3d_persistence.cpp + * \li + * Persistent_cohomology/custom_persistence_sort.cpp + * + * \subsection eigen3 Eigen3: + * The \ref alpha_complex data structure and few examples requires + * Eigen3 is a C++ template library for linear algebra: + * matrices, vectors, numerical solvers, and related algorithms. + * + * The following example requires the Eigen3 and will not be + * built if Eigen3 is not installed: + * \li + * Alpha_complex/Alpha_complex_from_off.cpp (requires also Eigen3) + * \li + * Alpha_complex/Alpha_complex_from_points.cpp (requires also Eigen3) + * \li + * Persistent_cohomology/alpha_complex_persistence.cpp + * \li + * Persistent_cohomology/periodic_alpha_complex_3d_persistence.cpp + * \li + * Persistent_cohomology/custom_persistence_sort.cpp + * + * \subsection tbb Threading Building Blocks: + * Intel® TBB lets you easily write parallel + * C++ programs that take full advantage of multicore performance, that are portable and composable, and that have + * future-proof scalability. + * + * Having Intel® TBB installed is recommended to parallelize and accelerate some GUDHI computations. + * + * The following examples are using Intel® TBB if installed: + * \li + * Alpha_complex/Alpha_complex_from_off.cpp + * \li + * Alpha_complex/Alpha_complex_from_points.cpp + * \li + * Bitmap_cubical_complex/Bitmap_cubical_complex.cpp + * \li + * Bitmap_cubical_complex/Bitmap_cubical_complex_periodic_boundary_conditions.cpp + * \li + * Bitmap_cubical_complex/Random_bitmap_cubical_complex.cpp + * \li + * Persistent_cohomology/alpha_complex_3d_persistence.cpp + * \li + * Persistent_cohomology/alpha_complex_persistence.cpp + * \li + * Simplex_tree/simple_simplex_tree.cpp + * \li + * Simplex_tree/simplex_tree_from_alpha_shapes_3.cpp + * \li + * Simplex_tree/simplex_tree_from_cliques_of_graph.cpp + * \li + * Persistent_cohomology/alpha_complex_3d_persistence.cpp + * \li + * Persistent_cohomology/alpha_complex_persistence.cpp + * \li + * Persistent_cohomology/rips_persistence_via_boundary_matrix.cpp + * \li + * Persistent_cohomology/performance_rips_persistence.cpp + * \li + * Persistent_cohomology/persistence_from_file.cpp + * \li + * Persistent_cohomology/persistence_from_simple_simplex_tree.cpp + * \li + * Persistent_cohomology/plain_homology.cpp + * \li + * Persistent_cohomology/rips_multifield_persistence.cpp + * \li + * Persistent_cohomology/rips_persistence.cpp + * \li + * Persistent_cohomology/periodic_alpha_complex_3d_persistence.cpp + * \li + * Persistent_cohomology/custom_persistence_sort.cpp + * + * \section Contributions Bug reports and contributions + * Please help us improving the quality of the GUDHI library. You may report bugs or suggestions to: + * \verbatim Contact: gudhi-users@lists.gforge.inria.fr \endverbatim + * + * Gudhi is open to external contributions. If you want to join our development team, please contact us. + * +*/ + +/*! \page Citation Acknowledging the GUDHI library + * We kindly ask users to cite the GUDHI library as appropriately as possible in their papers, and to mention the use + * of the GUDHI library on the web pages of their projects using GUDHI and provide us with links to these web pages. + * Feel free to contact us in case you have any question or remark on this topic. + * + * We provide \ref GudhiBibtex entries for the modules of the User and Reference Manual, as well as for publications + * directly related to the GUDHI library. + * \section GudhiBibtex GUDHI bibtex + * \verbinclude biblio/how_to_cite_gudhi.bib +*/ + +// List of Gudhi examples - Doxygen needs at least a file tag to analyse comments +/*! @file Examples + * @example Alpha_complex/Alpha_complex_from_off.cpp + * @example Alpha_complex/Alpha_complex_from_points.cpp + * @example Bitmap_cubical_complex/Bitmap_cubical_complex.cpp + * @example Bitmap_cubical_complex/Bitmap_cubical_complex_periodic_boundary_conditions.cpp + * @example Bitmap_cubical_complex/Random_bitmap_cubical_complex.cpp + * @example common/CGAL_3D_points_off_reader.cpp + * @example common/CGAL_points_off_reader.cpp + * @example Contraction/Garland_heckbert.cpp + * @example Contraction/Rips_contraction.cpp + * @example Persistent_cohomology/alpha_complex_3d_persistence.cpp + * @example Persistent_cohomology/alpha_complex_persistence.cpp + * @example Persistent_cohomology/rips_persistence_via_boundary_matrix.cpp + * @example Persistent_cohomology/performance_rips_persistence.cpp + * @example Persistent_cohomology/periodic_alpha_complex_3d_persistence.cpp + * @example Persistent_cohomology/persistence_from_file.cpp + * @example Persistent_cohomology/persistence_from_simple_simplex_tree.cpp + * @example Persistent_cohomology/plain_homology.cpp + * @example Persistent_cohomology/rips_multifield_persistence.cpp + * @example Persistent_cohomology/rips_persistence.cpp + * @example Persistent_cohomology/custom_persistence_sort.cpp + * @example Simplex_tree/mini_simplex_tree.cpp + * @example Simplex_tree/simple_simplex_tree.cpp + * @example Simplex_tree/simplex_tree_from_alpha_shapes_3.cpp + * @example Simplex_tree/simplex_tree_from_cliques_of_graph.cpp + * @example Skeleton_blocker/Skeleton_blocker_from_simplices.cpp + * @example Skeleton_blocker/Skeleton_blocker_iteration.cpp + * @example Skeleton_blocker/Skeleton_blocker_link.cpp + * @example Witness_complex/witness_complex_from_file.cpp + * @example Witness_complex/witness_complex_sphere.cpp + */ + diff --git a/doc/common/main_page.h~ b/doc/common/main_page.h~ new file mode 100644 index 00000000..abe7398b --- /dev/null +++ b/doc/common/main_page.h~ @@ -0,0 +1,341 @@ +/*! \mainpage + * \tableofcontents + * \image html "Gudhi_banner.png" "" width=20cm + * + * \section Introduction 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: + * + * \li Data structures to represent, construct and manipulate simplicial complexes. + * \li Algorithms to compute persistent homology and multi-field persistent homology. + * \li 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. + * + \section DataStructures Data structures + \subsection AlphaComplexDataStructure Alpha complex + \image html "alpha_complex_representation.png" "Alpha complex representation" + + + + + +
+ Author: Vincent Rouvreau
+ Introduced in: GUDHI 1.3.0
+ Copyright: GPL v3
+
+ Alpha_complex is a simplicial complex constructed from the finite 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.
+ User manual: \ref alpha_complex - Reference manual: Gudhi::alphacomplex::Alpha_complex +
+ \subsection CubicalComplexDataStructure Cubical complex + \image html "Cubical_complex_representation.png" "Cubical complex representation" + + + + + +
+ Author: Pawel Dlotko
+ Introduced in: GUDHI 1.3.0
+ Copyright: GPL v3
+
+ The cubical complex is an example of a structured complex useful in computational mathematics (specially + rigorous numerics) and image analysis.
+ User manual: \ref cubical_complex - Reference manual: Gudhi::Cubical_complex::Bitmap_cubical_complex +
+ \subsection SimplexTreeDataStructure Simplex tree + \image html "Simplex_tree_representation.png" "Simplex tree representation" + + + + + +
+ Author: Clément Maria
+ Introduced in: GUDHI 1.0.0
+ Copyright: GPL v3
+
+ The simplex tree is an efficient and flexible + data structure for representing general (filtered) simplicial complexes. The data structure + is described in \cite boissonnatmariasimplextreealgorithmica .
+ User manual: \ref simplex_tree - Reference manual: Gudhi::Simplex_tree +
+ \subsection SkeletonBlockerDataStructure Skeleton blocker + \image html "ds_representation.png" "Skeleton blocker representation" + + + + + +
+ Author: David Salinas
+ Introduced in: GUDHI 1.1.0
+ Copyright: GPL v3
+
+ The Skeleton-Blocker data-structure proposes a light encoding for simplicial complexes by storing only an *implicit* + representation of its simplices \cite socg_blockers_2011,\cite blockers2012. Intuitively, it just stores the + 1-skeleton of a simplicial complex with a graph and the set of its "missing faces" that is very small in practice. + This data-structure handles all simplicial complexes operations such as simplex enumeration or simplex removal but + operations that are particularly efficient are operations that do not require simplex enumeration such as edge + iteration, link computation or simplex contraction.
+ User manual: \ref skbl - Reference manual: Gudhi::skbl::Skeleton_blocker_complex +
+ \subsection WitnessComplexDataStructure Witness complex + \image html "Witness_complex_representation.png" "Witness complex representation" + + + + + +
+ Author: Siargey Kachanovich
+ Introduced in: GUDHI 1.3.0
+ Copyright: GPL v3
+
+ Witness complex \f$ Wit(W,L) \f$ is a simplicial complex defined on two sets of points in \f$\mathbb{R}^D\f$. + The data structure is described in \cite boissonnatmariasimplextreealgorithmica .
+ User manual: \ref witness_complex - Reference manual: Gudhi::witness_complex::SimplicialComplexForWitness +
+ + \section Toolbox Toolbox + \subsection ContractionToolbox Contraction + \image html "sphere_contraction_representation.png" "Sphere contraction example" + + + + + +
+ Author: David Salinas
+ Introduced in: GUDHI 1.1.0
+ Copyright: GPL v3
+
+ The purpose of this package is to offer a user-friendly interface for edge contraction simplification of huge + simplicial complexes. It uses the \ref skbl data-structure whose size remains small during simplification of most + used geometrical complexes of topological data analysis such as the Rips or the Delaunay complexes. In practice, + the size of this data-structure is even much lower than the total number of simplices.
+ User manual: \ref contr +
+ \subsection PersistentCohomologyToolbox Persistent Cohomology + \image html "3DTorus_poch.png" "Rips Persistent Cohomology on a 3D Torus" + + + + + +
+ Author: Clément Maria
+ Introduced in: GUDHI 1.0.0
+ Copyright: GPL v3
+
+ 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 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 .
+ User manual: \ref persistent_cohomology - Reference manual: Gudhi::persistent_cohomology::Persistent_cohomology +
+*/ + +/*! \page installation Gudhi installation + * As Gudhi is a header only library, there is no need to install the library. + * + * Examples of Gudhi headers inclusion can be found in \ref demos. + * + * \section compiling Compiling + * The library uses c++11 and requires Boost with version 1.48.0 or + * more recent. It is a multi-platform library and compiles on Linux, Mac OSX and Visual Studio 2015. + * + * \subsection gmp GMP: + * The multi-field persistent homology algorithm requires GMP which is a free library for arbitrary-precision + * arithmetic, operating on signed integers, rational numbers, and floating point numbers. + * + * The following example requires the GNU Multiple Precision Arithmetic + * Library (GMP) and will not be built if GMP is not installed: + * \li + * Persistent_cohomology/performance_rips_persistence.cpp + * \li + * Persistent_cohomology/rips_multifield_persistence.cpp + * + * Having GMP version 4.2 or higher installed is recommended. + * + * \subsection cgal CGAL: + * CGAL is a C++ library which provides easy access to efficient and reliable geometric algorithms. + * + * Having CGAL version 4.4 or higher installed is recommended. The procedure to install this library according to + * your operating system is detailed here http://doc.cgal.org/latest/Manual/installation.html + * + * The following examples require the Computational Geometry Algorithms + * Library (CGAL \cite cgal:eb-15b) and will not be built if CGAL is not installed: + * \li + * Persistent_cohomology/alpha_complex_3d_persistence.cpp + * \li + * Simplex_tree/simplex_tree_from_alpha_shapes_3.cpp + * \li + * Alpha_complex/Alpha_complex_from_off.cpp + * \li + * Alpha_complex/Alpha_complex_from_points.cpp + * + * The following example requires CGAL version ≥ 4.6: + * \li + * Witness_complex/witness_complex_sphere.cpp + * + * The following example requires CGAL version ≥ 4.7: + * \li + * Alpha_complex/Alpha_complex_from_off.cpp + * \li + * Alpha_complex/Alpha_complex_from_points.cpp + * \li + * Persistent_cohomology/alpha_complex_persistence.cpp + * \li + * Persistent_cohomology/periodic_alpha_complex_3d_persistence.cpp + * \li + * Persistent_cohomology/custom_persistence_sort.cpp + * + * \subsection eigen3 Eigen3: + * Eigen3 is a C++ template library for linear algebra: + * matrices, vectors, numerical solvers, and related algorithms. + * + * The following example requires the Eigen3 and will not be + * built if Eigen3 is not installed: + * \li + * Alpha_complex/Alpha_complex_from_off.cpp (requires also Eigen3) + * \li + * Alpha_complex/Alpha_complex_from_points.cpp (requires also Eigen3) + * \li + * Persistent_cohomology/alpha_complex_persistence.cpp + * \li + * Persistent_cohomology/periodic_alpha_complex_3d_persistence.cpp + * \li + * Persistent_cohomology/custom_persistence_sort.cpp + * + * \subsection tbb Threading Building Blocks: + * Intel® TBB lets you easily write parallel + * C++ programs that take full advantage of multicore performance, that are portable and composable, and that have + * future-proof scalability. + * + * Having Intel® TBB installed is recommended to parallelize and accelerate some GUDHI computations. + * + * The following examples are using Intel® TBB if installed: + * \li + * Alpha_complex/Alpha_complex_from_off.cpp + * \li + * Alpha_complex/Alpha_complex_from_points.cpp + * \li + * Bitmap_cubical_complex/Bitmap_cubical_complex.cpp + * \li + * Bitmap_cubical_complex/Bitmap_cubical_complex_periodic_boundary_conditions.cpp + * \li + * Bitmap_cubical_complex/Random_bitmap_cubical_complex.cpp + * \li + * Persistent_cohomology/alpha_complex_3d_persistence.cpp + * \li + * Persistent_cohomology/alpha_complex_persistence.cpp + * \li + * Simplex_tree/simple_simplex_tree.cpp + * \li + * Simplex_tree/simplex_tree_from_alpha_shapes_3.cpp + * \li + * Simplex_tree/simplex_tree_from_cliques_of_graph.cpp + * \li + * Persistent_cohomology/alpha_shapes_persistence.cpp + * \li + * Persistent_cohomology/rips_persistence_via_boundary_matrix.cpp + * \li + * Persistent_cohomology/performance_rips_persistence.cpp + * \li + * Persistent_cohomology/persistence_from_file.cpp + * \li + * Persistent_cohomology/persistence_from_simple_simplex_tree.cpp + * \li + * Persistent_cohomology/plain_homology.cpp + * \li + * Persistent_cohomology/rips_multifield_persistence.cpp + * \li + * Persistent_cohomology/rips_persistence.cpp + * \li + * Persistent_cohomology/periodic_alpha_complex_3d_persistence.cpp + * \li + * Persistent_cohomology/custom_persistence_sort.cpp + * + * \subsection demos Demos and examples + * To build the demos and examples, run the following commands in a terminal: +\verbatim cd /path-to-gudhi/ +mkdir build +cd build/ +cmake .. +make \endverbatim + * A list of examples is available here. + * + * \subsection testsuites Test suites + * To test your build, run the following command in a terminal: + * \verbatim make test \endverbatim + * + * \section Contributions Bug reports and contributions + * Please help us improving the quality of the GUDHI library. You may report bugs or suggestions to: + * \verbatim Contact: gudhi-users@lists.gforge.inria.fr \endverbatim + * + * Gudhi is open to external contributions. If you want to join our development team, please contact us. + * +*/ + +/*! \page Citation Acknowledging the GUDHI library + * We kindly ask users to cite the GUDHI library as appropriately as possible in their papers, and to mention the use + * of the GUDHI library on the web pages of their projects using GUDHI and provide us with links to these web pages. + * Feel free to contact us in case you have any question or remark on this topic. + * + * We provide \ref GudhiBibtex entries for the modules of the User and Reference Manual, as well as for publications + * directly related to the GUDHI library. + * \section GudhiBibtex GUDHI bibtex + * \verbinclude biblio/how_to_cite_gudhi.bib +*/ + +// List of Gudhi examples - Doxygen needs at least a file tag to analyse comments +/*! @file Examples + * @example Alpha_complex/Alpha_complex_from_off.cpp + * @example Alpha_complex/Alpha_complex_from_points.cpp + * @example Bitmap_cubical_complex/Bitmap_cubical_complex.cpp + * @example Bitmap_cubical_complex/Bitmap_cubical_complex_periodic_boundary_conditions.cpp + * @example Bitmap_cubical_complex/Random_bitmap_cubical_complex.cpp + * @example common/CGAL_3D_points_off_reader.cpp + * @example common/CGAL_points_off_reader.cpp + * @example Contraction/Garland_heckbert.cpp + * @example Contraction/Rips_contraction.cpp + * @example Persistent_cohomology/alpha_complex_3d_persistence.cpp + * @example Persistent_cohomology/alpha_complex_persistence.cpp + * @example Persistent_cohomology/rips_persistence_via_boundary_matrix.cpp + * @example Persistent_cohomology/performance_rips_persistence.cpp + * @example Persistent_cohomology/periodic_alpha_complex_3d_persistence.cpp + * @example Persistent_cohomology/persistence_from_file.cpp + * @example Persistent_cohomology/persistence_from_simple_simplex_tree.cpp + * @example Persistent_cohomology/plain_homology.cpp + * @example Persistent_cohomology/rips_multifield_persistence.cpp + * @example Persistent_cohomology/rips_persistence.cpp + * @example Persistent_cohomology/custom_persistence_sort.cpp + * @example Simplex_tree/mini_simplex_tree.cpp + * @example Simplex_tree/simple_simplex_tree.cpp + * @example Simplex_tree/simplex_tree_from_alpha_shapes_3.cpp + * @example Simplex_tree/simplex_tree_from_cliques_of_graph.cpp + * @example Skeleton_blocker/Skeleton_blocker_from_simplices.cpp + * @example Skeleton_blocker/Skeleton_blocker_iteration.cpp + * @example Skeleton_blocker/Skeleton_blocker_link.cpp + * @example Witness_complex/witness_complex_from_file.cpp + * @example Witness_complex/witness_complex_sphere.cpp + */ + diff --git a/doc/common/stylesheet.css b/doc/common/stylesheet.css new file mode 100644 index 00000000..1df177a4 --- /dev/null +++ b/doc/common/stylesheet.css @@ -0,0 +1,1367 @@ +/* The standard CSS for doxygen 1.8.6 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 4px 6px; + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +div.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: bold; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view when not used as main index */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectname +{ + border: 0px none; + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 60% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 80% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 20px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + -- cgit v1.2.3