From ca2ad986b9925ab7006597f0f7045f7be47a42b2 Mon Sep 17 00:00:00 2001 From: pdlotko Date: Fri, 7 Apr 2017 09:10:52 +0000 Subject: Answers to Marc's comments git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/gudhi_stat@2317 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: f941a6b20210282408d0ef95b84daa973add2513 --- src/common/doc/main_page.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src/common/doc') diff --git a/src/common/doc/main_page.h b/src/common/doc/main_page.h index e6f29fa8..55673f60 100644 --- a/src/common/doc/main_page.h +++ b/src/common/doc/main_page.h @@ -151,6 +151,23 @@ + + \subsection Gudhi_stat Gudhi statistical sublibrary + \image html "average_landscape.png" "Gudhi statistical sublibrary" + + + + + +
+ Author: Pawel Dlotko
+ Introduced in: GUDHI 2.0.0
+ Copyright: GPL v3
+
+ This is a statistical library for gudhi. It contain implementation of various representations of persistence diagrams; diagrams themselves, persistence landscapes (rigorous and grid version), + persistence heath maps, vectors and others. It implements basic functionalities which are neccessary to use persistence in statistics and machine learning. + User manual: \ref gudhi_stat - Reference manual: Gudhi::Gudhi_stat +
\section Toolbox Toolbox \subsection BottleneckDistanceToolbox Bottleneck distance -- cgit v1.2.3 From aecf253b150fcaf0a9e2a41686de7dfea91fa4d8 Mon Sep 17 00:00:00 2001 From: pdlotko Date: Thu, 13 Apr 2017 12:42:19 +0000 Subject: Answer to Vincent's comments. At the moment I need to discuss how to correct the doc. At the moment make doxygen generate some errors. git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/gudhi_stat@2342 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 4bb5c3b30bca852045fb414eacf59936975a3855 --- .../Persistence_landscape.h | 6 ++-- .../Persistence_landscape_on_grid.h | 6 ++-- src/Gudhi_stat/utilities/Landscape_bootstrap.cpp | 2 +- .../create_persistence_heat_maps.cpp | 2 +- ...aps_weighted_by_arctan_of_their_persistence.cpp | 2 +- ...eat_maps_weighted_by_distance_from_diagonal.cpp | 2 +- ..._weighted_by_squared_distance_from_diagonal.cpp | 2 +- .../persistence_heat_maps/create_pssk.cpp | 2 +- ...te_birth_death_range_in_persistence_diagram.cpp | 2 +- .../compute_bottleneck_distance.cpp | 2 +- .../compute_number_of_dominant_intervals.cpp | 2 +- .../plot_histogram_of_intervals_lengths.cpp | 2 +- .../plot_persistence_Betti_numbers.cpp | 2 +- .../plot_persistence_intervals.cpp | 2 +- .../persistence_landscapes/create_landscapes.cpp | 2 +- .../create_landscapes_on_grid.cpp | 2 +- .../create_persistence_vectors.cpp | 2 +- src/common/doc/main_page.h | 34 ++++++++++++---------- 18 files changed, 39 insertions(+), 37 deletions(-) (limited to 'src/common/doc') diff --git a/src/Gudhi_stat/include/gudhi/persistence_representations/Persistence_landscape.h b/src/Gudhi_stat/include/gudhi/persistence_representations/Persistence_landscape.h index 681f5d8d..925d784f 100644 --- a/src/Gudhi_stat/include/gudhi/persistence_representations/Persistence_landscape.h +++ b/src/Gudhi_stat/include/gudhi/persistence_representations/Persistence_landscape.h @@ -270,7 +270,7 @@ public: } /** - *\private Computations of a L^i norm of landscape, where i is the input parameter. + *\private Computations of a \f$L^i\f$ norm of landscape, where i is the input parameter. **/ double compute_norm_of_landscape( double i ) { @@ -291,14 +291,14 @@ public: double operator()(unsigned level,double x)const{return this->compute_value_at_a_given_point(level,x);} /** - *\private Computations of L^{\infty} distance between two landscapes. + *\private Computations of \f$L^{\infty}\f$ distance between two landscapes. **/ friend double compute_max_norm_distance_of_landscapes( const Persistence_landscape& first, const Persistence_landscape& second ); //friend double compute_max_norm_distance_of_landscapes( const Persistence_landscape& first, const Persistence_landscape& second , unsigned& nrOfLand , double&x , double& y1, double& y2 ); /** - *\private Computations of L^{p} distance between two landscapes. p is the parameter of the procedure. + *\private Computations of \f$L^{p}\f$ distance between two landscapes. p is the parameter of the procedure. **/ friend double compute_distance_of_landscapes( const Persistence_landscape& first, const Persistence_landscape& second , double p ); diff --git a/src/Gudhi_stat/include/gudhi/persistence_representations/Persistence_landscape_on_grid.h b/src/Gudhi_stat/include/gudhi/persistence_representations/Persistence_landscape_on_grid.h index 1f4cb3ff..3103172d 100644 --- a/src/Gudhi_stat/include/gudhi/persistence_representations/Persistence_landscape_on_grid.h +++ b/src/Gudhi_stat/include/gudhi/persistence_representations/Persistence_landscape_on_grid.h @@ -595,7 +595,7 @@ public: } /** - * Computations of a L^i norm of landscape, where i is the input parameter. + * Computations of a \f$L^i\f$ norm of landscape, where i is the input parameter. **/ double compute_norm_of_landscape( double i )const { @@ -618,7 +618,7 @@ public: double operator()(unsigned level,double x)const{return this->compute_value_at_a_given_point(level,x);} /** - * Computations of L^{\infty} distance between two landscapes. + * Computations of \f$L^{\infty}\f$ distance between two landscapes. **/ friend double compute_max_norm_distance_of_landscapes( const Persistence_landscape_on_grid& first, const Persistence_landscape_on_grid& second ); //friend double compute_max_norm_distance_of_landscapes( const Persistence_landscape_on_grid& first, const Persistence_landscape_on_grid& second , unsigned& nrOfLand , double&x , double& y1, double& y2 ); @@ -765,7 +765,7 @@ public: /** - * Computations of L^{p} distance between two landscapes on a grid. p is the parameter of the procedure. + * Computations of \f$L^{p}\f$ distance between two landscapes on a grid. p is the parameter of the procedure. * FIXME: Note that, due to the grid representation, the method below may give non--accurate results in case when the landscape P and Q the difference of which we want to compute * are interxsecting. This is a consequence of a general way they are computed. In the future, an integral of absolute value of a difference of P and Q will be given as a separated * function to fix that inaccuracy. diff --git a/src/Gudhi_stat/utilities/Landscape_bootstrap.cpp b/src/Gudhi_stat/utilities/Landscape_bootstrap.cpp index d67bb820..9bd6c89e 100644 --- a/src/Gudhi_stat/utilities/Landscape_bootstrap.cpp +++ b/src/Gudhi_stat/utilities/Landscape_bootstrap.cpp @@ -38,7 +38,7 @@ using Persistence_landscape = Gudhi::Gudhi_stat::Persistence_landscape; typedef int Vertex_handle; -typedef double Filtration_value; +//typedef double Filtration_value; //if this variable is -1, then the infinite interals are ignored. If not, they infinite values are replaced with what_to_replace_infinite_intervals_with: diff --git a/src/Gudhi_stat/utilities/persistence_heat_maps/create_persistence_heat_maps.cpp b/src/Gudhi_stat/utilities/persistence_heat_maps/create_persistence_heat_maps.cpp index d9c7aded..e99b829a 100644 --- a/src/Gudhi_stat/utilities/persistence_heat_maps/create_persistence_heat_maps.cpp +++ b/src/Gudhi_stat/utilities/persistence_heat_maps/create_persistence_heat_maps.cpp @@ -57,7 +57,7 @@ int main( int argc , char** argv ) unsigned dimension = std::numeric_limits::max(); int dim = atoi( argv[5] ); - if ( (dim != -1) && (dim >= 0) ) + if ( dim >= 0 ) { dimension = (unsigned)dim; } diff --git a/src/Gudhi_stat/utilities/persistence_heat_maps/create_persistence_heat_maps_weighted_by_arctan_of_their_persistence.cpp b/src/Gudhi_stat/utilities/persistence_heat_maps/create_persistence_heat_maps_weighted_by_arctan_of_their_persistence.cpp index 7cb7eeb7..b98fc3f7 100644 --- a/src/Gudhi_stat/utilities/persistence_heat_maps/create_persistence_heat_maps_weighted_by_arctan_of_their_persistence.cpp +++ b/src/Gudhi_stat/utilities/persistence_heat_maps/create_persistence_heat_maps_weighted_by_arctan_of_their_persistence.cpp @@ -58,7 +58,7 @@ int main( int argc , char** argv ) unsigned dimension = std::numeric_limits::max(); int dim = atoi( argv[5] ); - if ( (dim != -1) && (dim >= 0) ) + if ( dim >= 0 ) { dimension = (unsigned)dim; } diff --git a/src/Gudhi_stat/utilities/persistence_heat_maps/create_persistence_heat_maps_weighted_by_distance_from_diagonal.cpp b/src/Gudhi_stat/utilities/persistence_heat_maps/create_persistence_heat_maps_weighted_by_distance_from_diagonal.cpp index 3242e106..ecef449a 100644 --- a/src/Gudhi_stat/utilities/persistence_heat_maps/create_persistence_heat_maps_weighted_by_distance_from_diagonal.cpp +++ b/src/Gudhi_stat/utilities/persistence_heat_maps/create_persistence_heat_maps_weighted_by_distance_from_diagonal.cpp @@ -57,7 +57,7 @@ int main( int argc , char** argv ) unsigned dimension = std::numeric_limits::max(); int dim = atoi( argv[5] ); - if ( (dim != -1) && (dim >= 0) ) + if ( dim >= 0 ) { dimension = (unsigned)dim; } diff --git a/src/Gudhi_stat/utilities/persistence_heat_maps/create_persistence_heat_maps_weighted_by_squared_distance_from_diagonal.cpp b/src/Gudhi_stat/utilities/persistence_heat_maps/create_persistence_heat_maps_weighted_by_squared_distance_from_diagonal.cpp index 27846a99..59966855 100644 --- a/src/Gudhi_stat/utilities/persistence_heat_maps/create_persistence_heat_maps_weighted_by_squared_distance_from_diagonal.cpp +++ b/src/Gudhi_stat/utilities/persistence_heat_maps/create_persistence_heat_maps_weighted_by_squared_distance_from_diagonal.cpp @@ -57,7 +57,7 @@ int main( int argc , char** argv ) unsigned dimension = std::numeric_limits::max(); int dim = atoi( argv[5] ); - if ( (dim != -1) && (dim >= 0) ) + if ( dim >= 0 ) { dimension = (unsigned)dim; } diff --git a/src/Gudhi_stat/utilities/persistence_heat_maps/create_pssk.cpp b/src/Gudhi_stat/utilities/persistence_heat_maps/create_pssk.cpp index 404a4be3..78989ccc 100644 --- a/src/Gudhi_stat/utilities/persistence_heat_maps/create_pssk.cpp +++ b/src/Gudhi_stat/utilities/persistence_heat_maps/create_pssk.cpp @@ -57,7 +57,7 @@ int main( int argc , char** argv ) unsigned dimension = std::numeric_limits::max(); int dim = atoi( argv[5] ); - if ( (dim != -1) && (dim >= 0) ) + if ( dim >= 0 ) { dimension = (unsigned)dim; } diff --git a/src/Gudhi_stat/utilities/persistence_intervals/compute_birth_death_range_in_persistence_diagram.cpp b/src/Gudhi_stat/utilities/persistence_intervals/compute_birth_death_range_in_persistence_diagram.cpp index 426a9b7b..a3e19400 100644 --- a/src/Gudhi_stat/utilities/persistence_intervals/compute_birth_death_range_in_persistence_diagram.cpp +++ b/src/Gudhi_stat/utilities/persistence_intervals/compute_birth_death_range_in_persistence_diagram.cpp @@ -45,7 +45,7 @@ int main( int argc , char** argv ) int dim = atoi( argv[1] ); unsigned dimension = std::numeric_limits::max(); - if ( (dim != -1) && (dim >= 0) ) + if ( dim >= 0 ) { dimension = (unsigned)dim; } diff --git a/src/Gudhi_stat/utilities/persistence_intervals/compute_bottleneck_distance.cpp b/src/Gudhi_stat/utilities/persistence_intervals/compute_bottleneck_distance.cpp index 6f0ba635..d8b533cf 100644 --- a/src/Gudhi_stat/utilities/persistence_intervals/compute_bottleneck_distance.cpp +++ b/src/Gudhi_stat/utilities/persistence_intervals/compute_bottleneck_distance.cpp @@ -48,7 +48,7 @@ int main( int argc , char** argv ) int dim = atoi(argv[1]); unsigned dimension = std::numeric_limits::max(); - if ( (dim != -1) && (dim >= 0) ) + if ( dim >= 0 ) { dimension = (unsigned)dim; } diff --git a/src/Gudhi_stat/utilities/persistence_intervals/compute_number_of_dominant_intervals.cpp b/src/Gudhi_stat/utilities/persistence_intervals/compute_number_of_dominant_intervals.cpp index 0a7f7c2b..281902fe 100644 --- a/src/Gudhi_stat/utilities/persistence_intervals/compute_number_of_dominant_intervals.cpp +++ b/src/Gudhi_stat/utilities/persistence_intervals/compute_number_of_dominant_intervals.cpp @@ -43,7 +43,7 @@ int main( int argc , char** argv ) } int dim = atoi( argv[2] ); unsigned dimension = std::numeric_limits::max(); - if ( (dim != -1) && (dim >= 0) ) + if ( dim >= 0 ) { dimension = (unsigned)dim; } diff --git a/src/Gudhi_stat/utilities/persistence_intervals/plot_histogram_of_intervals_lengths.cpp b/src/Gudhi_stat/utilities/persistence_intervals/plot_histogram_of_intervals_lengths.cpp index 11876a0d..acfb0eed 100644 --- a/src/Gudhi_stat/utilities/persistence_intervals/plot_histogram_of_intervals_lengths.cpp +++ b/src/Gudhi_stat/utilities/persistence_intervals/plot_histogram_of_intervals_lengths.cpp @@ -48,7 +48,7 @@ int main( int argc , char** argv ) { dim = atoi( argv[2] ); } - if ( (dim != -1) && (dim >= 0) ) + if ( dim >= 0 ) { dimension = (unsigned)dim; } diff --git a/src/Gudhi_stat/utilities/persistence_intervals/plot_persistence_Betti_numbers.cpp b/src/Gudhi_stat/utilities/persistence_intervals/plot_persistence_Betti_numbers.cpp index 09c6cc22..21ba06f4 100644 --- a/src/Gudhi_stat/utilities/persistence_intervals/plot_persistence_Betti_numbers.cpp +++ b/src/Gudhi_stat/utilities/persistence_intervals/plot_persistence_Betti_numbers.cpp @@ -48,7 +48,7 @@ int main( int argc , char** argv ) { dim = atoi( argv[2] ); } - if ( (dim != -1) && (dim >= 0) ) + if ( dim >= 0 ) { dimension = (unsigned)dim; } diff --git a/src/Gudhi_stat/utilities/persistence_intervals/plot_persistence_intervals.cpp b/src/Gudhi_stat/utilities/persistence_intervals/plot_persistence_intervals.cpp index 4315abb9..95c0cf1f 100644 --- a/src/Gudhi_stat/utilities/persistence_intervals/plot_persistence_intervals.cpp +++ b/src/Gudhi_stat/utilities/persistence_intervals/plot_persistence_intervals.cpp @@ -51,7 +51,7 @@ int main( int argc , char** argv ) { dim = atoi( argv[2] ); } - if ( (dim != -1) && (dim >= 0) ) + if ( dim >= 0 ) { dimension = (unsigned)dim; } diff --git a/src/Gudhi_stat/utilities/persistence_landscapes/create_landscapes.cpp b/src/Gudhi_stat/utilities/persistence_landscapes/create_landscapes.cpp index f36e313a..040ccc95 100644 --- a/src/Gudhi_stat/utilities/persistence_landscapes/create_landscapes.cpp +++ b/src/Gudhi_stat/utilities/persistence_landscapes/create_landscapes.cpp @@ -40,7 +40,7 @@ int main( int argc , char** argv ) std::vector< const char* > filenames; int dim = atoi(argv[1]); unsigned dimension = std::numeric_limits::max(); - if ( (dim != -1) && (dim >= 0) ) + if ( dim >= 0 ) { dimension = (unsigned)dim; } diff --git a/src/Gudhi_stat/utilities/persistence_landscapes_on_grid/create_landscapes_on_grid.cpp b/src/Gudhi_stat/utilities/persistence_landscapes_on_grid/create_landscapes_on_grid.cpp index eb534bf1..6dbb70c4 100644 --- a/src/Gudhi_stat/utilities/persistence_landscapes_on_grid/create_landscapes_on_grid.cpp +++ b/src/Gudhi_stat/utilities/persistence_landscapes_on_grid/create_landscapes_on_grid.cpp @@ -52,7 +52,7 @@ int main( int argc , char** argv ) double max_ = atof( argv[3] ); int dim = atoi( argv[4] ); unsigned dimension = std::numeric_limits::max(); - if ( (dim != -1) && (dim >= 0) ) + if ( dim >= 0 ) { dimension = (unsigned)dim; } diff --git a/src/Gudhi_stat/utilities/persistence_vectors/create_persistence_vectors.cpp b/src/Gudhi_stat/utilities/persistence_vectors/create_persistence_vectors.cpp index 40f5e81f..7f0492c6 100644 --- a/src/Gudhi_stat/utilities/persistence_vectors/create_persistence_vectors.cpp +++ b/src/Gudhi_stat/utilities/persistence_vectors/create_persistence_vectors.cpp @@ -39,7 +39,7 @@ int main( int argc , char** argv ) std::cout << "The remaining parameters are the names of files with persistence diagrams. \n"; int dim = atoi( argv[1] ); unsigned dimension = std::numeric_limits::max(); - if ( (dim != -1) && (dim >= 0) ) + if ( dim >= 0 ) { dimension = (unsigned)dim; } diff --git a/src/common/doc/main_page.h b/src/common/doc/main_page.h index 55673f60..f3816238 100644 --- a/src/common/doc/main_page.h +++ b/src/common/doc/main_page.h @@ -151,22 +151,6 @@ - - \subsection Gudhi_stat Gudhi statistical sublibrary - \image html "average_landscape.png" "Gudhi statistical sublibrary" - - - - -
- Author: Pawel Dlotko
- Introduced in: GUDHI 2.0.0
- Copyright: GPL v3
-
- This is a statistical library for gudhi. It contain implementation of various representations of persistence diagrams; diagrams themselves, persistence landscapes (rigorous and grid version), - persistence heath maps, vectors and others. It implements basic functionalities which are neccessary to use persistence in statistics and machine learning. - User manual: \ref gudhi_stat - Reference manual: Gudhi::Gudhi_stat -
\section Toolbox Toolbox @@ -227,9 +211,27 @@ \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 + + + + \subsection Gudhi_stat_sublibrary Gudhi statistical sublibrary + \image html "average_landscape.png" "Gudhi statistical sublibrary" + + + +
+ Author: Pawel Dlotko
+ Introduced in: GUDHI 2.0.0
+ Copyright: GPL v3
+
+ This is a statistical library for gudhi. It contain implementation of various representations of persistence diagrams; diagrams themselves, persistence landscapes (rigorous and grid version), + persistence heath maps, vectors and others. It implements basic functionalities which are neccessary to use persistence in statistics and machine learning. + User manual: \ref Gudhi_stat +
+ */ /*! \page installation GUDHI installation -- cgit v1.2.3 From 6adf87fe0a609443962238200e877c60d90f6a2d Mon Sep 17 00:00:00 2001 From: mcarrier Date: Fri, 12 May 2017 15:37:55 +0000 Subject: git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/Nerve_GIC@2413 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: a0a65ae49ca0bb6e5ed614f44cabb060fa0e7490 --- CMakeLists.txt | 3 + data/points/COIL_database/asian_mug.off | 2 + data/points/COIL_database/lucky_cat_PCA1 | 72 +++++++++++++++ src/CMakeLists.txt | 1 + src/Nerve_GIC/example/CMakeLists.txt | 6 ++ src/Nerve_GIC/example/GIC.cpp | 15 ++-- src/Nerve_GIC/example/GICvoronoi.cpp | 59 ++++++++++++ src/Nerve_GIC/example/MapperDeltaCoord.cpp | 13 ++- src/Nerve_GIC/example/MapperDeltaFunc.cpp | 13 ++- src/Nerve_GIC/example/Nerve.cpp | 13 ++- src/Nerve_GIC/include/gudhi/GIC.h | 139 +++++++++++++++++++++-------- src/Nerve_GIC/test/CMakeLists.txt | 23 +++++ src/common/doc/main_page.h | 18 ++++ 13 files changed, 309 insertions(+), 68 deletions(-) create mode 100644 data/points/COIL_database/lucky_cat_PCA1 create mode 100644 src/Nerve_GIC/example/GICvoronoi.cpp create mode 100644 src/Nerve_GIC/test/CMakeLists.txt (limited to 'src/common/doc') diff --git a/CMakeLists.txt b/CMakeLists.txt index aef771d0..f9029bb1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,6 +54,7 @@ include_directories(src/Spatial_searching/include/) include_directories(src/Subsampling/include/) include_directories(src/Tangential_complex/include/) include_directories(src/Witness_complex/include/) +include_directories(src/Nerve_GIC/include/) add_subdirectory(src/common/example) add_subdirectory(src/common/test) @@ -83,6 +84,8 @@ add_subdirectory(src/Bottleneck_distance/test) add_subdirectory(src/Bottleneck_distance/benchmark) add_subdirectory(src/Rips_complex/example) add_subdirectory(src/Rips_complex/test) +add_subdirectory(src/Nerve_GIC/example) +add_subdirectory(src/Nerve_GIC/test) # data points generator add_subdirectory(data/points/generator) diff --git a/data/points/COIL_database/asian_mug.off b/data/points/COIL_database/asian_mug.off index 93d2ab00..f6a9a972 100644 --- a/data/points/COIL_database/asian_mug.off +++ b/data/points/COIL_database/asian_mug.off @@ -1,3 +1,5 @@ +OFF +72 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0117647 0.0352941 0.0588235 0.101961 0.133333 0.152941 0.180392 0.211765 0.227451 0.219608 0.215686 0.196078 0.160784 0.145098 0.101961 0.0666667 0.0392157 0.0117647 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0313725 0.0745098 0.117647 0.219608 0.341176 0.439216 0.505882 0.552941 0.592157 0.6 0.611765 0.639216 0.639216 0.635294 0.647059 0.658824 0.654902 0.662745 0.647059 0.662745 0.690196 0.756863 0.72549 0.717647 0.713725 0.682353 0.662745 0.662745 0.647059 0.639216 0.627451 0.623529 0.588235 0.552941 0.482353 0.372549 0.266667 0.172549 0.101961 0.0392157 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.113725 0.258824 0.364706 0.466667 0.541176 0.564706 0.580392 0.588235 0.6 0.611765 0.611765 0.603922 0.592157 0.6 0.580392 0.584314 0.584314 0.576471 0.560784 0.560784 0.572549 0.560784 0.564706 0.552941 0.568627 0.698039 0.831373 0.854902 0.862745 0.8 0.72549 0.647059 0.647059 0.647059 0.631373 0.635294 0.65098 0.654902 0.65098 0.662745 0.65098 0.635294 0.647059 0.631373 0.623529 0.576471 0.509804 0.403922 0.27451 0.133333 0.0196078 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0196078 0.211765 0.396078 0.490196 0.52549 0.556863 0.568627 0.564706 0.564706 0.568627 0.568627 0.541176 0.52549 0.486275 0.47451 0.454902 0.439216 0.415686 0.392157 0.372549 0.352941 0.360784 0.360784 0.337255 0.341176 0.34902 0.329412 0.321569 0.341176 0.329412 0.368627 0.482353 0.462745 0.352941 0.356863 0.364706 0.372549 0.380392 0.384314 0.403922 0.435294 0.443137 0.454902 0.494118 0.529412 0.623529 0.74902 0.894118 0.964706 0.835294 0.682353 0.666667 0.662745 0.647059 0.627451 0.603922 0.545098 0.447059 0.243137 0.0588235 0.0196078 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0392157 0.14902 0.376471 0.478431 0.517647 0.533333 0.541176 0.541176 0.521569 0.521569 0.494118 0.470588 0.443137 0.4 0.368627 0.337255 0.301961 0.294118 0.282353 0.286275 0.282353 0.278431 0.262745 0.262745 0.278431 0.317647 0.294118 0.254902 0.270588 0.270588 0.278431 0.290196 0.329412 0.478431 0.545098 0.341176 0.309804 0.313725 0.298039 0.282353 0.286275 0.290196 0.290196 0.290196 0.294118 0.298039 0.294118 0.309804 0.313725 0.313725 0.321569 0.356863 0.368627 0.403922 0.443137 0.470588 0.529412 0.556863 0.584314 0.603922 0.619608 0.627451 0.607843 0.592157 0.552941 0.419608 0.184314 0.0627451 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0313725 0.235294 0.415686 0.482353 0.505882 0.517647 0.517647 0.505882 0.470588 0.443137 0.396078 0.360784 0.317647 0.298039 0.27451 0.270588 0.262745 0.254902 0.243137 0.227451 0.227451 0.247059 0.25098 0.25098 0.235294 0.243137 0.243137 0.266667 0.305882 0.286275 0.243137 0.333333 0.329412 0.25098 0.282353 0.290196 0.972549 0.992157 0.356863 0.317647 0.345098 0.294118 0.262745 0.282353 0.266667 0.270588 0.270588 0.254902 0.25098 0.270588 0.270588 0.286275 0.290196 0.286275 0.301961 0.290196 0.301961 0.313725 0.32549 0.333333 0.34902 0.372549 0.411765 0.454902 0.521569 0.54902 0.580392 0.603922 0.592157 0.584314 0.54902 0.435294 0.227451 0.0313725 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.137255 0.388235 0.447059 0.470588 0.498039 0.482353 0.45098 0.435294 0.388235 0.329412 0.290196 0.262745 0.25098 0.239216 0.231373 0.231373 0.227451 0.239216 0.227451 0.235294 0.227451 0.215686 0.215686 0.231373 0.235294 0.239216 0.239216 0.239216 0.231373 0.25098 0.278431 0.266667 0.235294 0.247059 0.286275 0.243137 0.254902 0.282353 0.423529 0.576471 0.282353 0.27451 0.278431 0.266667 0.247059 0.25098 0.254902 0.243137 0.25098 0.243137 0.247059 0.243137 0.235294 0.266667 0.270588 0.278431 0.278431 0.282353 0.282353 0.301961 0.290196 0.290196 0.290196 0.294118 0.301961 0.313725 0.329412 0.34902 0.396078 0.45098 0.513725 0.552941 0.572549 0.584314 0.552941 0.517647 0.396078 0.121569 0.0156863 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.00392157 0.196078 0.435294 0.447059 0.443137 0.45098 0.435294 0.415686 0.341176 0.309804 0.258824 0.227451 0.211765 0.215686 0.219608 0.203922 0.207843 0.207843 0.219608 0.211765 0.219608 0.219608 0.223529 0.219608 0.188235 0.207843 0.215686 0.227451 0.235294 0.227451 0.231373 0.211765 0.235294 0.278431 0.270588 0.223529 0.231373 0.235294 0.231373 0.243137 0.290196 0.286275 0.294118 0.27451 0.247059 0.25098 0.254902 0.247059 0.243137 0.258824 0.247059 0.231373 0.235294 0.243137 0.243137 0.254902 0.25098 0.243137 0.25098 0.258824 0.266667 0.270588 0.270588 0.262745 0.266667 0.258824 0.262745 0.27451 0.254902 0.266667 0.25098 0.270588 0.27451 0.317647 0.368627 0.439216 0.494118 0.541176 0.552941 0.545098 0.541176 0.443137 0.172549 0.0235294 0.0117647 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.160784 0.403922 0.431373 0.415686 0.411765 0.4 0.352941 0.305882 0.247059 0.215686 0.192157 0.192157 0.192157 0.180392 0.192157 0.188235 0.2 0.196078 0.192157 0.196078 0.211765 0.215686 0.211765 0.207843 0.203922 0.192157 0.192157 0.211765 0.227451 0.231373 0.223529 0.219608 0.207843 0.219608 0.247059 0.262745 0.223529 0.219608 0.227451 0.219608 0.235294 0.258824 0.282353 0.282353 0.258824 0.235294 0.247059 0.247059 0.223529 0.235294 0.243137 0.235294 0.227451 0.223529 0.231373 0.247059 0.235294 0.231373 0.219608 0.239216 0.258824 0.258824 0.25098 0.243137 0.25098 0.270588 0.258824 0.25098 0.247059 0.243137 0.235294 0.247059 0.235294 0.239216 0.25098 0.258824 0.270588 0.317647 0.372549 0.447059 0.501961 0.521569 0.533333 0.513725 0.427451 0.188235 0.0196078 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.00784314 0.329412 0.407843 0.388235 0.368627 0.345098 0.298039 0.262745 0.231373 0.196078 0.180392 0.168627 0.14902 0.168627 0.176471 0.180392 0.176471 0.176471 0.188235 0.184314 0.2 0.196078 0.2 0.211765 0.2 0.219608 0.219608 0.184314 0.180392 0.203922 0.227451 0.227451 0.227451 0.215686 0.207843 0.203922 0.243137 0.266667 0.219608 0.211765 0.219608 0.235294 0.231373 0.258824 0.278431 0.258824 0.258824 0.243137 0.243137 0.239216 0.235294 0.231373 0.223529 0.239216 0.243137 0.227451 0.247059 0.235294 0.231373 0.219608 0.219608 0.227451 0.262745 0.25098 0.262745 0.258824 0.219608 0.262745 0.247059 0.235294 0.25098 0.231373 0.231373 0.223529 0.215686 0.223529 0.227451 0.239216 0.243137 0.239216 0.247059 0.278431 0.329412 0.419608 0.466667 0.498039 0.513725 0.490196 0.384314 0.0784314 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0823529 0.388235 0.376471 0.352941 0.321569 0.278431 0.215686 0.196078 0.188235 0.164706 0.160784 0.160784 0.14902 0.152941 0.164706 0.168627 0.184314 0.196078 0.180392 0.172549 0.184314 0.184314 0.188235 0.184314 0.188235 0.188235 0.203922 0.192157 0.176471 0.188235 0.203922 0.215686 0.219608 0.211765 0.215686 0.207843 0.215686 0.239216 0.239216 0.223529 0.219608 0.215686 0.219608 0.219608 0.235294 0.247059 0.247059 0.247059 0.243137 0.235294 0.231373 0.243137 0.231373 0.239216 0.219608 0.223529 0.219608 0.227451 0.227451 0.219608 0.219608 0.219608 0.231373 0.25098 0.239216 0.25098 0.25098 0.231373 0.243137 0.227451 0.235294 0.231373 0.243137 0.227451 0.231373 0.25098 0.262745 0.270588 0.247059 0.247059 0.231373 0.243137 0.270588 0.247059 0.262745 0.305882 0.4 0.45098 0.478431 0.490196 0.435294 0.188235 0.0156863 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0862745 0.388235 0.360784 0.317647 0.282353 0.254902 0.196078 0.164706 0.141176 0.145098 0.141176 0.133333 0.141176 0.141176 0.137255 0.152941 0.156863 0.14902 0.145098 0.156863 0.168627 0.176471 0.2 0.215686 0.196078 0.172549 0.172549 0.180392 0.172549 0.176471 0.188235 0.172549 0.192157 0.2 0.192157 0.188235 0.196078 0.203922 0.207843 0.2 0.219608 0.211765 0.203922 0.207843 0.211765 0.219608 0.219608 0.219608 0.223529 0.219608 0.215686 0.219608 0.207843 0.215686 0.219608 0.215686 0.219608 0.215686 0.211765 0.211765 0.211765 0.215686 0.219608 0.219608 0.215686 0.215686 0.219608 0.223529 0.223529 0.215686 0.215686 0.223529 0.219608 0.207843 0.215686 0.215686 0.219608 0.215686 0.215686 0.235294 0.215686 0.219608 0.223529 0.227451 0.219608 0.227451 0.235294 0.270588 0.337255 0.423529 0.443137 0.443137 0.427451 0.192157 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0235294 0.360784 0.352941 0.282353 0.258824 0.219608 0.156863 0.14902 0.137255 0.121569 0.12549 0.129412 0.121569 0.137255 0.129412 0.141176 0.141176 0.156863 0.145098 0.145098 0.145098 0.160784 0.168627 0.164706 0.164706 0.160784 0.172549 0.172549 0.164706 0.176471 0.180392 0.184314 0.176471 0.188235 0.180392 0.192157 0.192157 0.196078 0.188235 0.192157 0.188235 0.196078 0.203922 0.188235 0.215686 0.203922 0.207843 0.211765 0.207843 0.219608 0.207843 0.207843 0.215686 0.215686 0.207843 0.219608 0.207843 0.219608 0.219608 0.219608 0.219608 0.219608 0.215686 0.219608 0.211765 0.215686 0.203922 0.215686 0.207843 0.203922 0.219608 0.211765 0.207843 0.207843 0.211765 0.211765 0.188235 0.196078 0.211765 0.196078 0.227451 0.203922 0.215686 0.215686 0.2 0.207843 0.211765 0.215686 0.219608 0.231373 0.309804 0.380392 0.415686 0.435294 0.396078 0.152941 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.262745 0.364706 0.286275 0.25098 0.207843 0.152941 0.12549 0.121569 0.121569 0.113725 0.117647 0.121569 0.117647 0.12549 0.12549 0.12549 0.133333 0.137255 0.152941 0.141176 0.137255 0.152941 0.141176 0.164706 0.156863 0.160784 0.156863 0.168627 0.168627 0.172549 0.172549 0.172549 0.176471 0.172549 0.172549 0.188235 0.2 0.180392 0.188235 0.196078 0.2 0.196078 0.203922 0.188235 0.203922 0.203922 0.2 0.196078 0.203922 0.203922 0.203922 0.207843 0.211765 0.203922 0.207843 0.203922 0.211765 0.219608 0.203922 0.219608 0.211765 0.219608 0.203922 0.219608 0.207843 0.203922 0.207843 0.211765 0.219608 0.211765 0.207843 0.219608 0.211765 0.207843 0.2 0.211765 0.203922 0.219608 0.2 0.2 0.223529 0.215686 0.2 0.192157 0.196078 0.203922 0.196078 0.196078 0.2 0.184314 0.219608 0.270588 0.360784 0.384314 0.403922 0.337255 0.0588235 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0196078 0.372549 0.329412 0.25098 0.196078 0.137255 0.113725 0.109804 0.109804 0.113725 0.109804 0.117647 0.113725 0.12549 0.121569 0.12549 0.129412 0.141176 0.145098 0.145098 0.145098 0.137255 0.145098 0.14902 0.156863 0.152941 0.156863 0.156863 0.160784 0.160784 0.152941 0.176471 0.164706 0.172549 0.168627 0.184314 0.176471 0.180392 0.192157 0.188235 0.192157 0.196078 0.2 0.2 0.2 0.203922 0.207843 0.207843 0.207843 0.211765 0.211765 0.207843 0.203922 0.207843 0.215686 0.203922 0.207843 0.203922 0.207843 0.203922 0.207843 0.211765 0.203922 0.211765 0.203922 0.207843 0.203922 0.2 0.2 0.203922 0.2 0.196078 0.203922 0.211765 0.207843 0.219608 0.196078 0.203922 0.192157 0.203922 0.207843 0.215686 0.203922 0.2 0.192157 0.188235 0.196078 0.196078 0.192157 0.196078 0.184314 0.192157 0.203922 0.27451 0.356863 0.372549 0.380392 0.219608 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0823529 0.396078 0.309804 0.215686 0.14902 0.113725 0.105882 0.0980392 0.109804 0.109804 0.109804 0.109804 0.113725 0.121569 0.113725 0.12549 0.12549 0.133333 0.133333 0.133333 0.137255 0.145098 0.14902 0.141176 0.145098 0.156863 0.160784 0.156863 0.164706 0.168627 0.164706 0.168627 0.172549 0.164706 0.176471 0.176471 0.180392 0.188235 0.192157 0.176471 0.2 0.188235 0.2 0.207843 0.192157 0.2 0.2 0.203922 0.211765 0.203922 0.203922 0.211765 0.203922 0.2 0.203922 0.203922 0.211765 0.219608 0.219608 0.203922 0.207843 0.211765 0.207843 0.207843 0.219608 0.207843 0.203922 0.207843 0.211765 0.211765 0.203922 0.211765 0.2 0.207843 0.203922 0.196078 0.211765 0.203922 0.188235 0.211765 0.215686 0.192157 0.188235 0.192157 0.184314 0.184314 0.188235 0.196078 0.176471 0.180392 0.172549 0.176471 0.184314 0.196078 0.305882 0.333333 0.364706 0.305882 0.0235294 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.109804 0.411765 0.317647 0.2 0.121569 0.101961 0.0941176 0.101961 0.0941176 0.0980392 0.101961 0.109804 0.105882 0.109804 0.117647 0.12549 0.121569 0.137255 0.137255 0.133333 0.137255 0.141176 0.141176 0.137255 0.141176 0.160784 0.160784 0.160784 0.164706 0.160784 0.172549 0.176471 0.180392 0.164706 0.172549 0.184314 0.172549 0.180392 0.188235 0.192157 0.196078 0.184314 0.176471 0.196078 0.207843 0.2 0.203922 0.215686 0.207843 0.207843 0.196078 0.211765 0.211765 0.196078 0.207843 0.2 0.215686 0.203922 0.184314 0.203922 0.203922 0.203922 0.207843 0.203922 0.196078 0.207843 0.196078 0.207843 0.196078 0.215686 0.188235 0.203922 0.207843 0.207843 0.196078 0.196078 0.2 0.203922 0.196078 0.196078 0.2 0.180392 0.196078 0.196078 0.188235 0.192157 0.188235 0.184314 0.180392 0.176471 0.168627 0.164706 0.156863 0.176471 0.227451 0.329412 0.360784 0.329412 0.0666667 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.101961 0.4 0.368627 0.215686 0.113725 0.105882 0.0862745 0.0862745 0.0823529 0.101961 0.0980392 0.0980392 0.109804 0.105882 0.113725 0.121569 0.117647 0.117647 0.133333 0.121569 0.129412 0.133333 0.145098 0.141176 0.137255 0.156863 0.152941 0.137255 0.152941 0.160784 0.164706 0.14902 0.164706 0.180392 0.168627 0.172549 0.176471 0.184314 0.180392 0.180392 0.176471 0.176471 0.176471 0.184314 0.188235 0.196078 0.2 0.203922 0.207843 0.188235 0.211765 0.192157 0.196078 0.196078 0.192157 0.2 0.203922 0.2 0.2 0.2 0.207843 0.211765 0.203922 0.196078 0.203922 0.2 0.207843 0.203922 0.2 0.196078 0.196078 0.196078 0.192157 0.184314 0.196078 0.196078 0.192157 0.2 0.180392 0.203922 0.188235 0.180392 0.184314 0.172549 0.172549 0.168627 0.176471 0.176471 0.168627 0.164706 0.164706 0.160784 0.152941 0.164706 0.215686 0.317647 0.368627 0.313725 0.0784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0705882 0.352941 0.447059 0.317647 0.117647 0.101961 0.0941176 0.0862745 0.0784314 0.0862745 0.0941176 0.0980392 0.0941176 0.101961 0.105882 0.0980392 0.101961 0.117647 0.105882 0.105882 0.109804 0.117647 0.12549 0.129412 0.133333 0.133333 0.12549 0.137255 0.133333 0.14902 0.137255 0.156863 0.156863 0.14902 0.14902 0.164706 0.164706 0.172549 0.160784 0.172549 0.172549 0.168627 0.172549 0.172549 0.164706 0.180392 0.188235 0.184314 0.188235 0.184314 0.188235 0.196078 0.184314 0.184314 0.180392 0.188235 0.188235 0.188235 0.192157 0.184314 0.184314 0.188235 0.184314 0.192157 0.180392 0.180392 0.188235 0.180392 0.184314 0.184314 0.192157 0.188235 0.188235 0.192157 0.180392 0.160784 0.176471 0.180392 0.168627 0.176471 0.176471 0.160784 0.176471 0.160784 0.172549 0.164706 0.160784 0.172549 0.160784 0.164706 0.156863 0.141176 0.14902 0.152941 0.223529 0.321569 0.360784 0.258824 0.0588235 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.054902 0.278431 0.454902 0.470588 0.290196 0.105882 0.109804 0.109804 0.0823529 0.0784314 0.0862745 0.0980392 0.0901961 0.0941176 0.0941176 0.0941176 0.101961 0.109804 0.0941176 0.113725 0.117647 0.117647 0.121569 0.113725 0.121569 0.129412 0.12549 0.133333 0.137255 0.137255 0.133333 0.145098 0.14902 0.156863 0.141176 0.160784 0.145098 0.160784 0.160784 0.160784 0.168627 0.164706 0.164706 0.168627 0.176471 0.172549 0.176471 0.168627 0.184314 0.180392 0.172549 0.192157 0.184314 0.164706 0.192157 0.172549 0.176471 0.172549 0.188235 0.168627 0.176471 0.188235 0.188235 0.184314 0.196078 0.184314 0.184314 0.176471 0.188235 0.184314 0.172549 0.180392 0.176471 0.176471 0.184314 0.168627 0.180392 0.184314 0.168627 0.172549 0.180392 0.176471 0.160784 0.164706 0.172549 0.156863 0.156863 0.160784 0.168627 0.160784 0.160784 0.14902 0.14902 0.168627 0.309804 0.392157 0.333333 0.211765 0.054902 0 0 0 0 0 0 0 0 0 0 0 0.00392157 0.00392157 0.00392157 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0509804 0.243137 0.380392 0.505882 0.505882 0.305882 0.117647 0.0980392 0.0980392 0.0823529 0.0941176 0.0941176 0.0901961 0.0745098 0.0901961 0.101961 0.0941176 0.101961 0.0980392 0.109804 0.105882 0.109804 0.113725 0.109804 0.117647 0.137255 0.129412 0.133333 0.129412 0.141176 0.141176 0.14902 0.14902 0.137255 0.137255 0.156863 0.156863 0.14902 0.168627 0.168627 0.160784 0.168627 0.168627 0.172549 0.176471 0.172549 0.184314 0.172549 0.168627 0.172549 0.184314 0.180392 0.180392 0.184314 0.176471 0.188235 0.184314 0.188235 0.180392 0.188235 0.188235 0.176471 0.184314 0.180392 0.192157 0.172549 0.188235 0.192157 0.188235 0.176471 0.180392 0.176471 0.188235 0.176471 0.180392 0.172549 0.180392 0.180392 0.172549 0.164706 0.160784 0.164706 0.160784 0.164706 0.164706 0.14902 0.14902 0.168627 0.156863 0.152941 0.152941 0.137255 0.168627 0.329412 0.411765 0.360784 0.258824 0.172549 0.0509804 0 0 0 0 0 0 0.0627451 0.168627 0.278431 0.329412 0.356863 0.360784 0.372549 0.368627 0.356863 0.329412 0.298039 0.188235 0.0784314 0 0 0 0 0 0 0 0 0 0 0.00784314 0.192157 0.305882 0.411765 0.517647 0.552941 0.435294 0.180392 0.109804 0.109804 0.0941176 0.0823529 0.0941176 0.0901961 0.0941176 0.0941176 0.105882 0.101961 0.101961 0.109804 0.109804 0.105882 0.117647 0.109804 0.109804 0.129412 0.121569 0.133333 0.129412 0.133333 0.133333 0.145098 0.137255 0.133333 0.145098 0.14902 0.152941 0.152941 0.156863 0.156863 0.156863 0.176471 0.164706 0.172549 0.168627 0.168627 0.172549 0.172549 0.176471 0.172549 0.188235 0.184314 0.184314 0.176471 0.180392 0.180392 0.176471 0.180392 0.180392 0.180392 0.180392 0.172549 0.184314 0.192157 0.180392 0.180392 0.168627 0.176471 0.180392 0.184314 0.176471 0.176471 0.184314 0.180392 0.176471 0.180392 0.180392 0.168627 0.172549 0.180392 0.168627 0.172549 0.152941 0.152941 0.156863 0.152941 0.141176 0.152941 0.152941 0.152941 0.137255 0.211765 0.380392 0.435294 0.380392 0.301961 0.290196 0.235294 0.0352941 0 0 0 0.0352941 0.207843 0.329412 0.376471 0.423529 0.443137 0.470588 0.478431 0.498039 0.494118 0.486275 0.486275 0.470588 0.443137 0.423529 0.364706 0.294118 0.14902 0.00784314 0 0 0 0 0 0 0 0.00392157 0.156863 0.270588 0.337255 0.435294 0.560784 0.619608 0.576471 0.407843 0.152941 0.113725 0.109804 0.0941176 0.0901961 0.105882 0.0980392 0.0941176 0.105882 0.101961 0.109804 0.101961 0.109804 0.105882 0.113725 0.113725 0.12549 0.117647 0.12549 0.12549 0.141176 0.141176 0.133333 0.137255 0.14902 0.141176 0.160784 0.152941 0.160784 0.164706 0.164706 0.152941 0.176471 0.168627 0.164706 0.152941 0.164706 0.188235 0.188235 0.184314 0.180392 0.184314 0.180392 0.188235 0.192157 0.192157 0.192157 0.188235 0.180392 0.196078 0.184314 0.176471 0.188235 0.196078 0.188235 0.188235 0.176471 0.184314 0.188235 0.180392 0.180392 0.176471 0.180392 0.176471 0.192157 0.180392 0.172549 0.180392 0.176471 0.164706 0.160784 0.160784 0.164706 0.160784 0.164706 0.168627 0.156863 0.156863 0.156863 0.156863 0.192157 0.356863 0.447059 0.447059 0.392157 0.329412 0.32549 0.294118 0.254902 0.0509804 0 0.0627451 0.219608 0.305882 0.392157 0.466667 0.494118 0.521569 0.537255 0.545098 0.556863 0.576471 0.568627 0.572549 0.572549 0.545098 0.541176 0.505882 0.482353 0.435294 0.368627 0.282353 0.0980392 0.0117647 0.00392157 0 0 0 0 0 0.12549 0.235294 0.305882 0.380392 0.439216 0.529412 0.596078 0.643137 0.607843 0.431373 0.207843 0.12549 0.109804 0.109804 0.101961 0.101961 0.105882 0.101961 0.101961 0.105882 0.105882 0.109804 0.109804 0.109804 0.121569 0.121569 0.129412 0.12549 0.133333 0.137255 0.133333 0.145098 0.145098 0.133333 0.160784 0.14902 0.156863 0.160784 0.160784 0.152941 0.172549 0.176471 0.172549 0.176471 0.180392 0.176471 0.184314 0.192157 0.180392 0.176471 0.168627 0.176471 0.184314 0.180392 0.184314 0.188235 0.180392 0.188235 0.176471 0.176471 0.188235 0.184314 0.176471 0.184314 0.188235 0.172549 0.188235 0.188235 0.184314 0.180392 0.188235 0.180392 0.180392 0.188235 0.176471 0.172549 0.168627 0.164706 0.168627 0.164706 0.160784 0.160784 0.152941 0.160784 0.156863 0.156863 0.243137 0.4 0.470588 0.478431 0.443137 0.380392 0.337255 0.329412 0.313725 0.286275 0.266667 0.207843 0.290196 0.329412 0.364706 0.423529 0.498039 0.54902 0.580392 0.588235 0.603922 0.627451 0.627451 0.627451 0.627451 0.627451 0.619608 0.607843 0.588235 0.576471 0.552941 0.509804 0.466667 0.415686 0.32549 0.168627 0.0196078 0 0 0 0 0 0.109804 0.207843 0.27451 0.329412 0.4 0.447059 0.498039 0.556863 0.619608 0.662745 0.662745 0.560784 0.368627 0.176471 0.121569 0.113725 0.109804 0.101961 0.105882 0.101961 0.109804 0.109804 0.117647 0.109804 0.121569 0.113725 0.121569 0.12549 0.133333 0.137255 0.129412 0.141176 0.14902 0.14902 0.152941 0.168627 0.156863 0.156863 0.168627 0.168627 0.160784 0.180392 0.168627 0.168627 0.176471 0.184314 0.172549 0.176471 0.180392 0.184314 0.192157 0.188235 0.184314 0.196078 0.192157 0.188235 0.184314 0.184314 0.184314 0.192157 0.184314 0.180392 0.188235 0.180392 0.168627 0.192157 0.184314 0.188235 0.176471 0.192157 0.184314 0.196078 0.176471 0.180392 0.180392 0.168627 0.164706 0.176471 0.168627 0.168627 0.168627 0.160784 0.164706 0.231373 0.380392 0.486275 0.513725 0.498039 0.447059 0.403922 0.356863 0.317647 0.305882 0.298039 0.305882 0.286275 0.27451 0.301961 0.392157 0.403922 0.427451 0.47451 0.541176 0.6 0.631373 0.65098 0.647059 0.662745 0.686275 0.886275 0.882353 0.858824 0.670588 0.666667 0.647059 0.619608 0.596078 0.572549 0.545098 0.482353 0.415686 0.337255 0.192157 0.0117647 0 0 0 0 0.0784314 0.192157 0.25098 0.305882 0.352941 0.403922 0.45098 0.478431 0.517647 0.572549 0.627451 0.670588 0.701961 0.694118 0.615686 0.431373 0.219608 0.156863 0.137255 0.121569 0.117647 0.121569 0.117647 0.109804 0.117647 0.12549 0.121569 0.129412 0.133333 0.145098 0.137255 0.145098 0.14902 0.14902 0.152941 0.152941 0.164706 0.156863 0.164706 0.156863 0.160784 0.168627 0.180392 0.172549 0.176471 0.184314 0.180392 0.192157 0.184314 0.176471 0.184314 0.188235 0.184314 0.192157 0.188235 0.196078 0.188235 0.192157 0.188235 0.184314 0.188235 0.180392 0.192157 0.196078 0.184314 0.188235 0.180392 0.180392 0.188235 0.188235 0.176471 0.176471 0.184314 0.192157 0.188235 0.188235 0.184314 0.184314 0.176471 0.192157 0.298039 0.45098 0.529412 0.54902 0.533333 0.501961 0.470588 0.415686 0.364706 0.321569 0.301961 0.290196 0.239216 0.219608 0.286275 0.290196 0.278431 0.380392 0.447059 0.45098 0.466667 0.505882 0.556863 0.635294 0.65098 0.658824 0.670588 0.658824 0.647059 0.670588 0.72549 0.701961 0.631373 0.65098 0.631373 0.627451 0.619608 0.596078 0.572549 0.541176 0.501961 0.427451 0.329412 0.164706 0.0117647 0 0 0 0.0588235 0.184314 0.231373 0.294118 0.337255 0.376471 0.411765 0.45098 0.47451 0.498039 0.541176 0.568627 0.607843 0.65098 0.682353 0.72549 0.733333 0.698039 0.592157 0.431373 0.286275 0.211765 0.14902 0.133333 0.12549 0.117647 0.133333 0.129412 0.137255 0.137255 0.141176 0.145098 0.152941 0.152941 0.152941 0.156863 0.164706 0.160784 0.164706 0.168627 0.168627 0.172549 0.164706 0.168627 0.176471 0.172549 0.184314 0.176471 0.176471 0.188235 0.180392 0.188235 0.180392 0.192157 0.184314 0.2 0.188235 0.192157 0.188235 0.196078 0.192157 0.192157 0.192157 0.180392 0.184314 0.184314 0.184314 0.196078 0.184314 0.176471 0.180392 0.184314 0.180392 0.184314 0.196078 0.25098 0.333333 0.45098 0.545098 0.572549 0.576471 0.545098 0.521569 0.494118 0.447059 0.411765 0.376471 0.341176 0.321569 0.294118 0.27451 0.247059 0.211765 0.184314 0.313725 0.309804 0.294118 0.431373 0.478431 0.482353 0.501961 0.537255 0.670588 0.619608 0.619608 0.596078 0.568627 0.533333 0.513725 0.498039 0.470588 0.470588 0.494118 0.509804 0.568627 0.596078 0.588235 0.588235 0.584314 0.572549 0.533333 0.494118 0.403922 0.290196 0.0941176 0.0117647 0 0 0.0156863 0.168627 0.227451 0.278431 0.329412 0.356863 0.396078 0.415686 0.443137 0.47451 0.494118 0.517647 0.537255 0.568627 0.596078 0.623529 0.670588 0.690196 0.705882 0.74902 0.74902 0.741176 0.701961 0.607843 0.501961 0.388235 0.278431 0.184314 0.145098 0.145098 0.141176 0.141176 0.156863 0.141176 0.160784 0.160784 0.164706 0.160784 0.172549 0.156863 0.168627 0.172549 0.180392 0.176471 0.176471 0.176471 0.180392 0.188235 0.184314 0.192157 0.176471 0.188235 0.184314 0.203922 0.184314 0.192157 0.188235 0.192157 0.184314 0.188235 0.184314 0.188235 0.184314 0.188235 0.196078 0.188235 0.184314 0.188235 0.2 0.25098 0.333333 0.411765 0.498039 0.572549 0.603922 0.607843 0.619608 0.580392 0.560784 0.52549 0.486275 0.470588 0.439216 0.415686 0.380392 0.364706 0.329412 0.305882 0.286275 0.266667 0.254902 0.227451 0.184314 0.152941 0.258824 0.309804 0.313725 0.572549 0.52549 0.494118 0.517647 0.545098 0.545098 0.533333 0.498039 0.415686 0.337255 0.231373 0.152941 0.109804 0.0784314 0.0941176 0.121569 0.152941 0.266667 0.392157 0.482353 0.552941 0.564706 0.564706 0.552941 0.517647 0.47451 0.372549 0.235294 0.027451 0 0 0.00392157 0.137255 0.219608 0.270588 0.313725 0.34902 0.372549 0.4 0.419608 0.45098 0.470588 0.498039 0.509804 0.529412 0.533333 0.54902 0.572549 0.592157 0.619608 0.65098 0.666667 0.713725 0.705882 0.737255 0.741176 0.784314 0.866667 0.886275 0.760784 0.705882 0.639216 0.564706 0.454902 0.364706 0.282353 0.231373 0.215686 0.188235 0.180392 0.180392 0.180392 0.184314 0.192157 0.184314 0.184314 0.188235 0.176471 0.192157 0.184314 0.207843 0.192157 0.196078 0.192157 0.2 0.184314 0.196078 0.196078 0.215686 0.192157 0.211765 0.239216 0.290196 0.34902 0.435294 0.513725 0.560784 0.611765 0.654902 0.662745 0.666667 0.65098 0.635294 0.619608 0.607843 0.584314 0.552941 0.521569 0.490196 0.458824 0.443137 0.411765 0.392157 0.376471 0.364706 0.345098 0.317647 0.301961 0.282353 0.262745 0.239216 0.25098 0.215686 0.172549 0.156863 0.258824 0.262745 0.360784 0.552941 0.513725 0.509804 0.54902 0.490196 0.423529 0.329412 0.196078 0.054902 0 0 0 0 0 0 0 0 0 0.0627451 0.247059 0.392157 0.486275 0.54902 0.545098 0.52549 0.482353 0.427451 0.305882 0.105882 0.00784314 0 0 0.101961 0.203922 0.254902 0.298039 0.329412 0.356863 0.384314 0.403922 0.423529 0.443137 0.454902 0.470588 0.494118 0.498039 0.521569 0.537255 0.552941 0.564706 0.576471 0.592157 0.603922 0.619608 0.643137 0.662745 0.678431 0.705882 0.72549 0.713725 0.72549 0.745098 0.796078 0.823529 0.815686 0.8 0.776471 0.792157 0.776471 0.760784 0.756863 0.74902 0.752941 0.752941 0.745098 0.737255 0.72549 0.721569 0.701961 0.67451 0.666667 0.662745 0.662745 0.682353 0.694118 0.686275 0.686275 0.717647 0.717647 0.72549 0.709804 0.72549 0.709804 0.698039 0.686275 0.678431 0.647059 0.639216 0.627451 0.592157 0.576471 0.54902 0.541176 0.517647 0.494118 0.482353 0.470588 0.447059 0.431373 0.411765 0.392157 0.380392 0.360784 0.337255 0.329412 0.317647 0.298039 0.27451 0.254902 0.239216 0.243137 0.239216 0.211765 0.156863 0.145098 0.243137 0.247059 0.372549 0.509804 0.498039 0.490196 0.447059 0.34902 0.192157 0.0352941 0 0 0 0 0 0 0 0 0 0 0 0 0 0.133333 0.356863 0.482353 0.521569 0.521569 0.501961 0.45098 0.376471 0.2 0.0196078 0 0 0.0666667 0.184314 0.239216 0.278431 0.329412 0.356863 0.384314 0.4 0.419608 0.431373 0.443137 0.466667 0.47451 0.478431 0.501961 0.513725 0.52549 0.533333 0.552941 0.568627 0.580392 0.580392 0.580392 0.596078 0.596078 0.615686 0.619608 0.631373 0.643137 0.639216 0.654902 0.662745 0.670588 0.670588 0.666667 0.690196 0.709804 0.717647 0.72549 0.713725 0.709804 0.733333 0.717647 0.752941 0.780392 0.807843 0.976471 1 0.756863 0.756863 0.752941 0.721569 0.729412 0.709804 0.678431 0.686275 0.67451 0.658824 0.631373 0.623529 0.607843 0.584314 0.572549 0.560784 0.552941 0.541176 0.52549 0.517647 0.501961 0.486275 0.478431 0.470588 0.45098 0.435294 0.427451 0.407843 0.392157 0.384314 0.368627 0.345098 0.333333 0.329412 0.317647 0.286275 0.278431 0.254902 0.243137 0.223529 0.247059 0.227451 0.203922 0.156863 0.137255 0.227451 0.243137 0.384314 0.513725 0.466667 0.423529 0.294118 0.0941176 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12549 0.356863 0.47451 0.501961 0.505882 0.45098 0.388235 0.270588 0.0666667 0 0 0.027451 0.156863 0.219608 0.266667 0.313725 0.341176 0.376471 0.4 0.411765 0.423529 0.439216 0.454902 0.466667 0.458824 0.486275 0.494118 0.501961 0.513725 0.529412 0.537255 0.545098 0.552941 0.560784 0.560784 0.564706 0.588235 0.592157 0.584314 0.592157 0.603922 0.607843 0.615686 0.623529 0.635294 0.619608 0.623529 0.615686 0.623529 0.631373 0.615686 0.619608 0.619608 0.603922 0.615686 0.623529 0.607843 0.611765 0.615686 0.615686 0.607843 0.592157 0.588235 0.576471 0.615686 0.607843 0.580392 0.568627 0.560784 0.545098 0.545098 0.54902 0.529412 0.529412 0.521569 0.513725 0.498039 0.482353 0.458824 0.458824 0.443137 0.443137 0.45098 0.423529 0.431373 0.4 0.384314 0.376471 0.360784 0.341176 0.337255 0.321569 0.301961 0.286275 0.27451 0.262745 0.247059 0.235294 0.219608 0.247059 0.223529 0.196078 0.14902 0.133333 0.227451 0.254902 0.380392 0.423529 0.4 0.266667 0.0588235 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.188235 0.407843 0.498039 0.501961 0.466667 0.415686 0.321569 0.113725 0 0 0 0.137255 0.207843 0.247059 0.301961 0.329412 0.368627 0.388235 0.411765 0.423529 0.439216 0.45098 0.466667 0.454902 0.478431 0.486275 0.494118 0.494118 0.505882 0.509804 0.521569 0.517647 0.529412 0.54902 0.552941 0.552941 0.556863 0.564706 0.572549 0.572549 0.576471 0.584314 0.576471 0.592157 0.576471 0.584314 0.596078 0.584314 0.592157 0.584314 0.572549 0.584314 0.572549 0.580392 0.568627 0.588235 0.584314 0.584314 0.580392 0.576471 0.576471 0.560784 0.552941 0.54902 0.54902 0.54902 0.537255 0.52549 0.529412 0.513725 0.513725 0.498039 0.498039 0.470588 0.466667 0.466667 0.443137 0.431373 0.431373 0.419608 0.415686 0.419608 0.396078 0.380392 0.368627 0.356863 0.345098 0.333333 0.329412 0.317647 0.298039 0.298039 0.290196 0.266667 0.262745 0.239216 0.227451 0.227451 0.258824 0.227451 0.192157 0.145098 0.137255 0.215686 0.258824 0.360784 0.352941 0.25098 0.054902 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.054902 0.309804 0.462745 0.486275 0.462745 0.427451 0.341176 0.164706 0 0 0 0.105882 0.188235 0.235294 0.290196 0.313725 0.345098 0.376471 0.396078 0.415686 0.431373 0.443137 0.462745 0.462745 0.478431 0.486275 0.490196 0.490196 0.494118 0.498039 0.498039 0.466667 0.490196 0.52549 0.52549 0.52549 0.533333 0.537255 0.552941 0.54902 0.560784 0.556863 0.552941 0.564706 0.556863 0.572549 0.564706 0.568627 0.572549 0.568627 0.564706 0.560784 0.568627 0.564706 0.584314 0.584314 0.615686 0.611765 0.572549 0.552941 0.552941 0.545098 0.537255 0.52549 0.52549 0.513725 0.509804 0.505882 0.498039 0.482353 0.47451 0.466667 0.478431 0.466667 0.458824 0.443137 0.435294 0.431373 0.415686 0.403922 0.4 0.384314 0.376471 0.364706 0.356863 0.345098 0.337255 0.32549 0.317647 0.298039 0.298039 0.282353 0.266667 0.262745 0.254902 0.235294 0.227451 0.219608 0.254902 0.215686 0.176471 0.133333 0.121569 0.196078 0.25098 0.317647 0.258824 0.0784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.00784314 0.207843 0.431373 0.490196 0.462745 0.407843 0.337255 0.180392 0 0 0 0.0784314 0.168627 0.235294 0.27451 0.309804 0.341176 0.368627 0.392157 0.407843 0.423529 0.439216 0.447059 0.458824 0.470588 0.478431 0.490196 0.494118 0.486275 0.498039 0.498039 0.494118 0.505882 0.529412 0.517647 0.533333 0.517647 0.529412 0.533333 0.541176 0.533333 0.529412 0.545098 0.54902 0.541176 0.54902 0.537255 0.552941 0.54902 0.537255 0.552941 0.537255 0.552941 0.556863 0.552941 0.568627 0.560784 0.560784 0.541176 0.537255 0.533333 0.52549 0.521569 0.505882 0.498039 0.490196 0.482353 0.478431 0.486275 0.466667 0.466667 0.454902 0.443137 0.431373 0.435294 0.435294 0.423529 0.403922 0.4 0.4 0.376471 0.372549 0.364706 0.345098 0.352941 0.329412 0.329412 0.32549 0.309804 0.294118 0.290196 0.286275 0.27451 0.254902 0.243137 0.223529 0.211765 0.227451 0.247059 0.215686 0.156863 0.12549 0.129412 0.176471 0.243137 0.231373 0.0784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0.407843 0.486275 0.447059 0.396078 0.317647 0.160784 0 0 0 0.027451 0.152941 0.211765 0.25098 0.298039 0.329412 0.356863 0.376471 0.403922 0.419608 0.431373 0.439216 0.45098 0.470588 0.466667 0.478431 0.494118 0.490196 0.498039 0.505882 0.505882 0.513725 0.509804 0.509804 0.513725 0.52549 0.521569 0.529412 0.533333 0.521569 0.533333 0.533333 0.529412 0.529412 0.541176 0.533333 0.529412 0.537255 0.533333 0.529412 0.533333 0.533333 0.529412 0.52549 0.52549 0.52549 0.509804 0.501961 0.513725 0.498039 0.501961 0.498039 0.490196 0.478431 0.482353 0.478431 0.458824 0.458824 0.454902 0.447059 0.443137 0.435294 0.427451 0.435294 0.415686 0.407843 0.4 0.392157 0.384314 0.380392 0.364706 0.356863 0.345098 0.341176 0.337255 0.329412 0.321569 0.301961 0.309804 0.282353 0.282353 0.278431 0.247059 0.235294 0.231373 0.219608 0.235294 0.231373 0.2 0.145098 0.113725 0.109804 0.14902 0.223529 0.113725 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.172549 0.380392 0.47451 0.447059 0.388235 0.305882 0.156863 0 0 0 0 0.113725 0.192157 0.239216 0.27451 0.317647 0.337255 0.372549 0.388235 0.411765 0.419608 0.435294 0.45098 0.447059 0.47451 0.47451 0.482353 0.482353 0.490196 0.501961 0.498039 0.505882 0.513725 0.513725 0.517647 0.529412 0.521569 0.52549 0.529412 0.52549 0.533333 0.529412 0.529412 0.529412 0.52549 0.529412 0.529412 0.521569 0.521569 0.521569 0.529412 0.517647 0.517647 0.509804 0.513725 0.505882 0.509804 0.498039 0.501961 0.490196 0.490196 0.486275 0.486275 0.486275 0.47451 0.466667 0.462745 0.45098 0.447059 0.443137 0.443137 0.439216 0.427451 0.415686 0.415686 0.403922 0.407843 0.392157 0.372549 0.364706 0.360784 0.364706 0.333333 0.341176 0.333333 0.329412 0.321569 0.301961 0.294118 0.286275 0.27451 0.258824 0.243137 0.231373 0.219608 0.211765 0.239216 0.223529 0.192157 0.137255 0.109804 0.0862745 0.121569 0.109804 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.192157 0.372549 0.486275 0.45098 0.376471 0.298039 0.156863 0 0 0 0 0.0745098 0.168627 0.235294 0.270588 0.305882 0.329412 0.356863 0.368627 0.392157 0.419608 0.423529 0.439216 0.443137 0.45098 0.466667 0.470588 0.470588 0.490196 0.494118 0.486275 0.509804 0.505882 0.509804 0.521569 0.517647 0.52549 0.533333 0.529412 0.541176 0.537255 0.529412 0.529412 0.52549 0.529412 0.537255 0.529412 0.529412 0.533333 0.521569 0.517647 0.513725 0.509804 0.517647 0.509804 0.509804 0.513725 0.505882 0.498039 0.498039 0.501961 0.478431 0.470588 0.470588 0.470588 0.466667 0.458824 0.454902 0.443137 0.443137 0.447059 0.415686 0.427451 0.415686 0.411765 0.396078 0.396078 0.388235 0.384314 0.372549 0.364706 0.34902 0.352941 0.333333 0.329412 0.317647 0.305882 0.298039 0.290196 0.27451 0.266667 0.258824 0.231373 0.223529 0.211765 0.207843 0.266667 0.211765 0.180392 0.12549 0.0941176 0.0784314 0.0509804 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0392157 0.247059 0.403922 0.494118 0.443137 0.352941 0.27451 0.121569 0 0 0 0 0.0352941 0.14902 0.207843 0.25098 0.286275 0.329412 0.337255 0.364706 0.388235 0.396078 0.427451 0.431373 0.423529 0.443137 0.466667 0.478431 0.466667 0.486275 0.494118 0.486275 0.505882 0.505882 0.509804 0.517647 0.521569 0.52549 0.52549 0.529412 0.521569 0.517647 0.517647 0.521569 0.521569 0.513725 0.533333 0.517647 0.529412 0.517647 0.501961 0.517647 0.513725 0.513725 0.505882 0.501961 0.501961 0.509804 0.501961 0.490196 0.482353 0.494118 0.486275 0.47451 0.47451 0.462745 0.462745 0.458824 0.443137 0.443137 0.439216 0.431373 0.431373 0.419608 0.419608 0.396078 0.396078 0.388235 0.376471 0.380392 0.364706 0.360784 0.34902 0.34902 0.329412 0.329412 0.313725 0.309804 0.298039 0.278431 0.27451 0.25098 0.25098 0.227451 0.215686 0.203922 0.176471 0.239216 0.203922 0.168627 0.113725 0.0862745 0.0431373 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.133333 0.301961 0.431373 0.509804 0.443137 0.345098 0.25098 0.0862745 0 0 0 0 0 0.113725 0.188235 0.231373 0.27451 0.305882 0.329412 0.352941 0.380392 0.388235 0.415686 0.415686 0.431373 0.439216 0.45098 0.458824 0.466667 0.478431 0.486275 0.47451 0.490196 0.486275 0.498039 0.498039 0.505882 0.509804 0.521569 0.501961 0.52549 0.517647 0.509804 0.513725 0.521569 0.501961 0.509804 0.513725 0.521569 0.501961 0.513725 0.52549 0.509804 0.501961 0.505882 0.498039 0.509804 0.490196 0.498039 0.494118 0.486275 0.478431 0.478431 0.470588 0.462745 0.458824 0.45098 0.45098 0.443137 0.447059 0.435294 0.431373 0.423529 0.411765 0.403922 0.4 0.388235 0.384314 0.368627 0.360784 0.356863 0.34902 0.341176 0.329412 0.329412 0.317647 0.305882 0.294118 0.286275 0.27451 0.262745 0.25098 0.235294 0.219608 0.211765 0.188235 0.196078 0.235294 0.2 0.156863 0.109804 0.0666667 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0745098 0.247059 0.372549 0.482353 0.505882 0.415686 0.305882 0.2 0.0392157 0 0 0 0 0 0.0745098 0.164706 0.215686 0.25098 0.294118 0.317647 0.341176 0.360784 0.392157 0.411765 0.392157 0.423529 0.439216 0.443137 0.458824 0.454902 0.47451 0.470588 0.482353 0.494118 0.486275 0.498039 0.501961 0.494118 0.521569 0.501961 0.505882 0.509804 0.509804 0.513725 0.501961 0.513725 0.513725 0.517647 0.505882 0.52549 0.501961 0.509804 0.513725 0.494118 0.501961 0.486275 0.494118 0.509804 0.486275 0.478431 0.478431 0.470588 0.482353 0.470588 0.466667 0.466667 0.45098 0.454902 0.443137 0.443137 0.443137 0.431373 0.439216 0.411765 0.411765 0.396078 0.4 0.392157 0.376471 0.368627 0.356863 0.352941 0.34902 0.32549 0.329412 0.321569 0.313725 0.298039 0.286275 0.27451 0.266667 0.258824 0.235294 0.231373 0.227451 0.211765 0.180392 0.192157 0.223529 0.188235 0.137255 0.0941176 0.0352941 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0392157 0.211765 0.337255 0.443137 0.521569 0.498039 0.376471 0.266667 0.137255 0 0 0 0 0 0 0.0196078 0.137255 0.2 0.239216 0.278431 0.313725 0.329412 0.34902 0.364706 0.388235 0.392157 0.415686 0.431373 0.427451 0.443137 0.447059 0.454902 0.462745 0.470588 0.466667 0.478431 0.482353 0.490196 0.490196 0.498039 0.490196 0.501961 0.505882 0.501961 0.505882 0.513725 0.501961 0.513725 0.505882 0.509804 0.513725 0.498039 0.498039 0.501961 0.509804 0.501961 0.482353 0.494118 0.494118 0.478431 0.47451 0.478431 0.470588 0.466667 0.458824 0.466667 0.45098 0.443137 0.443137 0.439216 0.431373 0.419608 0.427451 0.415686 0.403922 0.396078 0.392157 0.392157 0.384314 0.368627 0.360784 0.345098 0.345098 0.345098 0.329412 0.321569 0.317647 0.301961 0.294118 0.27451 0.270588 0.258824 0.25098 0.239216 0.227451 0.211765 0.192157 0.172549 0.203922 0.215686 0.176471 0.121569 0.0784314 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0196078 0.184314 0.32549 0.419608 0.513725 0.560784 0.454902 0.337255 0.223529 0.0666667 0 0 0 0 0 0 0 0.109804 0.172549 0.219608 0.262745 0.298039 0.32549 0.341176 0.360784 0.380392 0.384314 0.4 0.415686 0.427451 0.435294 0.443137 0.447059 0.454902 0.466667 0.466667 0.466667 0.482353 0.486275 0.490196 0.490196 0.498039 0.490196 0.501961 0.501961 0.509804 0.490196 0.490196 0.501961 0.509804 0.498039 0.498039 0.498039 0.494118 0.494118 0.486275 0.494118 0.490196 0.482353 0.478431 0.470588 0.482353 0.47451 0.462745 0.462745 0.443137 0.454902 0.45098 0.443137 0.439216 0.439216 0.431373 0.419608 0.419608 0.415686 0.407843 0.392157 0.388235 0.380392 0.368627 0.360784 0.356863 0.34902 0.341176 0.337255 0.317647 0.309804 0.305882 0.294118 0.290196 0.27451 0.266667 0.258824 0.235294 0.231373 0.215686 0.211765 0.188235 0.172549 0.211765 0.203922 0.168627 0.105882 0.0588235 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0235294 0.188235 0.305882 0.411765 0.494118 0.564706 0.529412 0.396078 0.266667 0.160784 0.0156863 0 0 0 0 0 0 0 0.0627451 0.14902 0.196078 0.239216 0.27451 0.309804 0.333333 0.352941 0.368627 0.388235 0.4 0.415686 0.415686 0.435294 0.443137 0.443137 0.458824 0.458824 0.458824 0.466667 0.447059 0.47451 0.47451 0.482353 0.490196 0.482353 0.494118 0.494118 0.490196 0.494118 0.490196 0.482353 0.498039 0.490196 0.505882 0.494118 0.490196 0.490196 0.47451 0.486275 0.482353 0.47451 0.478431 0.486275 0.47451 0.458824 0.462745 0.458824 0.443137 0.443137 0.447059 0.443137 0.431373 0.443137 0.419608 0.415686 0.407843 0.392157 0.392157 0.392157 0.384314 0.384314 0.360784 0.360784 0.352941 0.345098 0.329412 0.32549 0.309804 0.305882 0.298039 0.290196 0.278431 0.266667 0.254902 0.25098 0.231373 0.219608 0.211765 0.192157 0.176471 0.160784 0.203922 0.192157 0.160784 0.101961 0.0313725 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0588235 0.2 0.301961 0.392157 0.490196 0.560784 0.580392 0.470588 0.317647 0.211765 0.0745098 0.00392157 0 0 0 0 0 0 0 0.0156863 0.113725 0.184314 0.219608 0.266667 0.294118 0.317647 0.341176 0.356863 0.376471 0.376471 0.403922 0.411765 0.411765 0.427451 0.439216 0.443137 0.443137 0.454902 0.45098 0.454902 0.454902 0.466667 0.470588 0.47451 0.470588 0.482353 0.490196 0.47451 0.490196 0.47451 0.486275 0.482353 0.494118 0.47451 0.490196 0.486275 0.47451 0.478431 0.486275 0.47451 0.478431 0.470588 0.458824 0.458824 0.466667 0.45098 0.443137 0.439216 0.443137 0.443137 0.427451 0.423529 0.415686 0.407843 0.411765 0.380392 0.403922 0.4 0.384314 0.388235 0.364706 0.356863 0.341176 0.337255 0.337255 0.32549 0.321569 0.305882 0.298039 0.290196 0.278431 0.266667 0.25098 0.254902 0.235294 0.219608 0.215686 0.203922 0.180392 0.164706 0.152941 0.211765 0.176471 0.14902 0.0705882 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.129412 0.223529 0.305882 0.403922 0.486275 0.572549 0.596078 0.517647 0.368627 0.239216 0.117647 0.00784314 0 0 0 0 0 0 0 0 0 0.0862745 0.168627 0.207843 0.243137 0.286275 0.305882 0.32549 0.341176 0.356863 0.372549 0.388235 0.4 0.411765 0.415686 0.419608 0.443137 0.435294 0.454902 0.443137 0.454902 0.447059 0.458824 0.466667 0.466667 0.470588 0.482353 0.470588 0.470588 0.466667 0.470588 0.482353 0.490196 0.478431 0.478431 0.466667 0.478431 0.47451 0.466667 0.47451 0.458824 0.458824 0.466667 0.458824 0.458824 0.454902 0.447059 0.443137 0.431373 0.435294 0.427451 0.427451 0.423529 0.407843 0.411765 0.4 0.396078 0.388235 0.380392 0.376471 0.356863 0.356863 0.345098 0.337255 0.333333 0.329412 0.317647 0.305882 0.301961 0.294118 0.294118 0.27451 0.258824 0.239216 0.239216 0.235294 0.211765 0.2 0.2 0.164706 0.156863 0.164706 0.215686 0.184314 0.137255 0.0509804 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.00392157 0.0862745 0.196078 0.254902 0.341176 0.431373 0.513725 0.584314 0.611765 0.533333 0.380392 0.25098 0.145098 0.0196078 0 0 0 0 0 0 0 0 0 0 0.027451 0.12549 0.192157 0.219608 0.262745 0.298039 0.305882 0.329412 0.34902 0.368627 0.384314 0.392157 0.407843 0.419608 0.419608 0.431373 0.439216 0.435294 0.447059 0.447059 0.454902 0.462745 0.458824 0.458824 0.462745 0.470588 0.462745 0.466667 0.47451 0.466667 0.470588 0.47451 0.478431 0.466667 0.478431 0.462745 0.47451 0.466667 0.462745 0.462745 0.462745 0.458824 0.45098 0.443137 0.443137 0.447059 0.431373 0.443137 0.427451 0.427451 0.415686 0.411765 0.403922 0.403922 0.388235 0.388235 0.388235 0.368627 0.356863 0.356863 0.352941 0.337255 0.329412 0.329412 0.321569 0.305882 0.298039 0.298039 0.286275 0.270588 0.262745 0.258824 0.239216 0.227451 0.219608 0.203922 0.2 0.172549 0.164706 0.145098 0.156863 0.2 0.180392 0.12549 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.101961 0.180392 0.227451 0.290196 0.380392 0.454902 0.537255 0.596078 0.619608 0.545098 0.396078 0.25098 0.152941 0.0313725 0 0 0 0 0 0 0 0 0 0 0 0 0.0980392 0.156863 0.2 0.243137 0.266667 0.286275 0.317647 0.333333 0.34902 0.356863 0.384314 0.388235 0.4 0.415686 0.427451 0.427451 0.419608 0.45098 0.447059 0.443137 0.45098 0.447059 0.45098 0.447059 0.458824 0.458824 0.466667 0.466667 0.458824 0.458824 0.470588 0.458824 0.458824 0.454902 0.454902 0.454902 0.447059 0.462745 0.462745 0.443137 0.447059 0.443137 0.439216 0.443137 0.419608 0.411765 0.419608 0.427451 0.419608 0.415686 0.403922 0.388235 0.396078 0.388235 0.388235 0.368627 0.364706 0.368627 0.34902 0.345098 0.333333 0.32549 0.313725 0.317647 0.294118 0.290196 0.286275 0.278431 0.254902 0.25098 0.243137 0.235294 0.219608 0.215686 0.188235 0.180392 0.168627 0.14902 0.133333 0.180392 0.196078 0.180392 0.0784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0235294 0.141176 0.203922 0.227451 0.290196 0.356863 0.427451 0.501961 0.564706 0.635294 0.619608 0.52549 0.380392 0.247059 0.133333 0.0196078 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0509804 0.133333 0.180392 0.223529 0.25098 0.278431 0.301961 0.329412 0.345098 0.360784 0.364706 0.384314 0.396078 0.411765 0.411765 0.419608 0.423529 0.439216 0.439216 0.439216 0.443137 0.443137 0.443137 0.443137 0.458824 0.45098 0.462745 0.447059 0.45098 0.462745 0.454902 0.462745 0.462745 0.462745 0.454902 0.45098 0.45098 0.443137 0.443137 0.447059 0.45098 0.443137 0.443137 0.431373 0.431373 0.431373 0.415686 0.415686 0.407843 0.4 0.376471 0.396078 0.380392 0.376471 0.368627 0.360784 0.352941 0.352941 0.345098 0.329412 0.329412 0.317647 0.309804 0.309804 0.290196 0.286275 0.278431 0.258824 0.25098 0.25098 0.231373 0.219608 0.219608 0.2 0.188235 0.172549 0.160784 0.141176 0.133333 0.2 0.196078 0.160784 0.027451 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0313725 0.109804 0.184314 0.219608 0.25098 0.294118 0.356863 0.407843 0.470588 0.545098 0.596078 0.643137 0.6 0.482353 0.345098 0.223529 0.117647 0.0156863 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.101961 0.160784 0.203922 0.231373 0.258824 0.294118 0.313725 0.329412 0.345098 0.360784 0.364706 0.372549 0.392157 0.407843 0.411765 0.411765 0.415686 0.431373 0.435294 0.439216 0.439216 0.439216 0.443137 0.443137 0.45098 0.443137 0.447059 0.447059 0.439216 0.458824 0.458824 0.462745 0.447059 0.443137 0.443137 0.447059 0.443137 0.443137 0.435294 0.443137 0.427451 0.435294 0.427451 0.419608 0.415686 0.411765 0.407843 0.403922 0.392157 0.396078 0.376471 0.388235 0.372549 0.364706 0.360784 0.345098 0.352941 0.337255 0.321569 0.313725 0.305882 0.301961 0.301961 0.286275 0.27451 0.266667 0.258824 0.239216 0.231373 0.219608 0.215686 0.2 0.192157 0.180392 0.164706 0.152941 0.137255 0.129412 0.203922 0.192157 0.133333 0 0 0 0 0 0 0 0 0 0 0 0.0745098 0.133333 0.184314 0.219608 0.247059 0.282353 0.32549 0.368627 0.411765 0.478431 0.52549 0.576471 0.854902 0.670588 0.54902 0.443137 0.309804 0.188235 0.0980392 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0627451 0.137255 0.176471 0.223529 0.25098 0.270588 0.294118 0.321569 0.337255 0.345098 0.364706 0.368627 0.380392 0.396078 0.392157 0.396078 0.415686 0.411765 0.423529 0.411765 0.431373 0.435294 0.439216 0.435294 0.447059 0.439216 0.447059 0.435294 0.443137 0.439216 0.443137 0.439216 0.439216 0.439216 0.435294 0.435294 0.439216 0.435294 0.423529 0.435294 0.427451 0.415686 0.423529 0.407843 0.396078 0.403922 0.396078 0.4 0.388235 0.376471 0.376471 0.356863 0.356863 0.352941 0.356863 0.337255 0.337255 0.329412 0.313725 0.313725 0.286275 0.294118 0.286275 0.266667 0.262745 0.247059 0.247059 0.231373 0.223529 0.219608 0.2 0.188235 0.188235 0.168627 0.152941 0.145098 0.121569 0.133333 0.211765 0.176471 0.054902 0 0 0 0 0 0 0 0.0666667 0.14902 0.192157 0.215686 0.239216 0.262745 0.290196 0.329412 0.356863 0.403922 0.443137 0.482353 0.541176 0.588235 0.807843 0.647059 0.54902 0.454902 0.341176 0.223529 0.133333 0.0352941 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.105882 0.164706 0.196078 0.219608 0.266667 0.282353 0.305882 0.317647 0.337255 0.345098 0.364706 0.364706 0.384314 0.380392 0.4 0.407843 0.407843 0.415686 0.403922 0.423529 0.427451 0.431373 0.427451 0.431373 0.439216 0.439216 0.427451 0.431373 0.435294 0.443137 0.443137 0.423529 0.435294 0.427451 0.427451 0.427451 0.427451 0.423529 0.427451 0.419608 0.415686 0.403922 0.403922 0.403922 0.392157 0.392157 0.380392 0.376471 0.376471 0.360784 0.360784 0.356863 0.345098 0.333333 0.333333 0.32549 0.321569 0.309804 0.294118 0.294118 0.282353 0.27451 0.262745 0.254902 0.25098 0.235294 0.227451 0.219608 0.215686 0.203922 0.188235 0.180392 0.156863 0.137255 0.12549 0.117647 0.129412 0.219608 0.152941 0.0117647 0 0.00392157 0.0117647 0.0666667 0.129412 0.172549 0.2 0.235294 0.258824 0.290196 0.309804 0.345098 0.364706 0.396078 0.427451 0.466667 0.517647 0.568627 0.611765 0.654902 0.619608 0.537255 0.45098 0.341176 0.235294 0.145098 0.0705882 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.054902 0.133333 0.172549 0.215686 0.239216 0.270588 0.282353 0.305882 0.321569 0.333333 0.345098 0.356863 0.368627 0.376471 0.388235 0.396078 0.392157 0.4 0.4 0.411765 0.419608 0.415686 0.423529 0.427451 0.427451 0.423529 0.431373 0.419608 0.427451 0.431373 0.431373 0.423529 0.427451 0.415686 0.419608 0.419608 0.411765 0.407843 0.403922 0.419608 0.4 0.396078 0.4 0.392157 0.384314 0.372549 0.372549 0.360784 0.372549 0.34902 0.352941 0.341176 0.329412 0.329412 0.321569 0.313725 0.313725 0.298039 0.298039 0.278431 0.278431 0.266667 0.254902 0.25098 0.235294 0.235294 0.219608 0.215686 0.2 0.192157 0.176471 0.164706 0.156863 0.133333 0.117647 0.101961 0.141176 0.203922 0.129412 0.0784314 0.0705882 0.0823529 0.109804 0.168627 0.219608 0.262745 0.298039 0.329412 0.364706 0.396078 0.423529 0.447059 0.486275 0.517647 0.54902 0.603922 0.619608 0.603922 0.552941 0.470588 0.388235 0.298039 0.219608 0.137255 0.0705882 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.101961 0.160784 0.203922 0.227451 0.254902 0.282353 0.301961 0.309804 0.329412 0.337255 0.34902 0.372549 0.364706 0.384314 0.376471 0.396078 0.403922 0.396078 0.407843 0.415686 0.407843 0.403922 0.415686 0.419608 0.415686 0.419608 0.423529 0.419608 0.427451 0.419608 0.427451 0.419608 0.4 0.411765 0.419608 0.407843 0.407843 0.411765 0.396078 0.403922 0.396078 0.384314 0.384314 0.372549 0.376471 0.360784 0.360784 0.356863 0.352941 0.337255 0.337255 0.329412 0.333333 0.317647 0.321569 0.313725 0.294118 0.282353 0.27451 0.27451 0.270588 0.239216 0.25098 0.231373 0.219608 0.215686 0.2 0.192157 0.180392 0.168627 0.152941 0.141176 0.117647 0.129412 0.101961 0.160784 0.196078 0.14902 0.129412 0.129412 0.164706 0.227451 0.290196 0.341176 0.364706 0.415686 0.45098 0.478431 0.501961 0.533333 0.552941 0.607843 0.611765 0.592157 0.533333 0.478431 0.411765 0.313725 0.235294 0.168627 0.105882 0.054902 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0509804 0.121569 0.168627 0.207843 0.235294 0.254902 0.27451 0.294118 0.317647 0.321569 0.341176 0.356863 0.356863 0.372549 0.372549 0.384314 0.388235 0.396078 0.392157 0.415686 0.392157 0.403922 0.411765 0.415686 0.427451 0.415686 0.415686 0.407843 0.419608 0.415686 0.415686 0.407843 0.407843 0.403922 0.4 0.396078 0.407843 0.388235 0.392157 0.376471 0.388235 0.372549 0.388235 0.364706 0.364706 0.372549 0.352941 0.352941 0.352941 0.337255 0.329412 0.321569 0.313725 0.313725 0.317647 0.298039 0.286275 0.278431 0.27451 0.258824 0.25098 0.239216 0.231373 0.227451 0.207843 0.203922 0.196078 0.176471 0.172549 0.152941 0.141176 0.129412 0.109804 0.101961 0.0901961 0.180392 0.176471 0.2 0.215686 0.235294 0.301961 0.368627 0.419608 0.462745 0.490196 0.52549 0.556863 0.572549 0.603922 0.584314 0.552941 0.517647 0.454902 0.396078 0.317647 0.243137 0.180392 0.121569 0.0745098 0.0156863 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.105882 0.152941 0.184314 0.219608 0.247059 0.262745 0.282353 0.298039 0.321569 0.329412 0.337255 0.345098 0.34902 0.368627 0.368627 0.372549 0.380392 0.388235 0.392157 0.396078 0.392157 0.392157 0.407843 0.407843 0.407843 0.407843 0.4 0.407843 0.407843 0.403922 0.4 0.407843 0.4 0.403922 0.403922 0.396078 0.407843 0.384314 0.388235 0.388235 0.372549 0.372549 0.360784 0.360784 0.352941 0.34902 0.345098 0.329412 0.32549 0.321569 0.317647 0.313725 0.301961 0.294118 0.282353 0.282353 0.278431 0.258824 0.25098 0.25098 0.239216 0.223529 0.211765 0.203922 0.2 0.188235 0.176471 0.156863 0.14902 0.133333 0.121569 0.109804 0.101961 0.0901961 0.168627 0.180392 0.247059 0.301961 0.372549 0.435294 0.490196 0.541176 0.556863 0.545098 0.54902 0.541176 0.494118 0.45098 0.392157 0.345098 0.290196 0.219608 0.160784 0.117647 0.0745098 0.0235294 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.054902 0.121569 0.164706 0.211765 0.227451 0.254902 0.262745 0.294118 0.290196 0.317647 0.337255 0.333333 0.345098 0.34902 0.34902 0.368627 0.364706 0.364706 0.388235 0.384314 0.396078 0.384314 0.392157 0.403922 0.396078 0.407843 0.4 0.4 0.415686 0.403922 0.396078 0.403922 0.380392 0.403922 0.384314 0.392157 0.384314 0.380392 0.372549 0.364706 0.364706 0.360784 0.360784 0.341176 0.356863 0.345098 0.341176 0.321569 0.32549 0.321569 0.309804 0.305882 0.290196 0.290196 0.27451 0.270588 0.270588 0.247059 0.239216 0.227451 0.219608 0.223529 0.207843 0.192157 0.188235 0.180392 0.176471 0.152941 0.137255 0.129412 0.113725 0.105882 0.0941176 0.0980392 0.145098 0.203922 0.34902 0.411765 0.454902 0.482353 0.482353 0.47451 0.458824 0.415686 0.368627 0.329412 0.278431 0.227451 0.184314 0.141176 0.105882 0.0666667 0.0117647 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0901961 0.141176 0.180392 0.219608 0.247059 0.247059 0.27451 0.286275 0.298039 0.317647 0.32549 0.329412 0.352941 0.345098 0.360784 0.356863 0.376471 0.376471 0.380392 0.384314 0.380392 0.388235 0.388235 0.392157 0.384314 0.388235 0.392157 0.388235 0.392157 0.384314 0.388235 0.384314 0.380392 0.376471 0.384314 0.380392 0.360784 0.376471 0.376471 0.360784 0.356863 0.345098 0.341176 0.337255 0.329412 0.32549 0.321569 0.317647 0.317647 0.301961 0.290196 0.290196 0.282353 0.266667 0.254902 0.258824 0.243137 0.239216 0.231373 0.227451 0.203922 0.203922 0.184314 0.180392 0.164706 0.156863 0.137255 0.129412 0.121569 0.105882 0.0941176 0.0823529 0.0941176 0.129412 0.207843 0.278431 0.329412 0.345098 0.333333 0.32549 0.27451 0.243137 0.207843 0.168627 0.117647 0.0980392 0.0745098 0.0313725 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0392157 0.117647 0.160784 0.2 0.227451 0.235294 0.27451 0.278431 0.294118 0.317647 0.321569 0.329412 0.329412 0.337255 0.34902 0.352941 0.352941 0.364706 0.372549 0.372549 0.376471 0.384314 0.384314 0.380392 0.380392 0.384314 0.380392 0.376471 0.372549 0.384314 0.380392 0.372549 0.368627 0.372549 0.360784 0.364706 0.368627 0.352941 0.352941 0.34902 0.345098 0.329412 0.337255 0.329412 0.321569 0.309804 0.313725 0.305882 0.298039 0.294118 0.282353 0.270588 0.262745 0.254902 0.254902 0.243137 0.231373 0.223529 0.219608 0.215686 0.203922 0.192157 0.180392 0.172549 0.160784 0.141176 0.137255 0.117647 0.113725 0.0941176 0.0745098 0.0627451 0.0823529 0.129412 0.168627 0.192157 0.196078 0.176471 0.160784 0.133333 0.0980392 0.0823529 0.0470588 0.0156863 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0745098 0.121569 0.172549 0.2 0.227451 0.243137 0.270588 0.282353 0.286275 0.305882 0.317647 0.337255 0.329412 0.341176 0.341176 0.352941 0.34902 0.356863 0.368627 0.341176 0.360784 0.372549 0.376471 0.376471 0.380392 0.364706 0.368627 0.372549 0.368627 0.372549 0.364706 0.356863 0.368627 0.364706 0.376471 0.360784 0.34902 0.345098 0.337255 0.329412 0.345098 0.329412 0.329412 0.321569 0.313725 0.309804 0.298039 0.290196 0.286275 0.278431 0.27451 0.254902 0.266667 0.247059 0.235294 0.239216 0.219608 0.219608 0.196078 0.192157 0.184314 0.168627 0.160784 0.14902 0.137255 0.12549 0.121569 0.109804 0.101961 0.0745098 0.0392157 0.0784314 0.101961 0.101961 0.0823529 0.0627451 0.054902 0.027451 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0235294 0.105882 0.152941 0.188235 0.215686 0.235294 0.254902 0.27451 0.282353 0.294118 0.305882 0.317647 0.329412 0.329412 0.305882 0.337255 0.34902 0.345098 0.356863 0.364706 0.364706 0.360784 0.360784 0.368627 0.364706 0.360784 0.364706 0.364706 0.356863 0.360784 0.360784 0.360784 0.360784 0.356863 0.356863 0.352941 0.341176 0.341176 0.337255 0.337255 0.317647 0.321569 0.313725 0.317647 0.305882 0.294118 0.294118 0.286275 0.282353 0.278431 0.258824 0.258824 0.247059 0.235294 0.223529 0.219608 0.211765 0.203922 0.196078 0.192157 0.172549 0.14902 0.152941 0.133333 0.12549 0.109804 0.105882 0.0901961 0.0745098 0.0352941 0.027451 0.0392157 0.0156863 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0588235 0.121569 0.152941 0.196078 0.215686 0.235294 0.254902 0.270588 0.286275 0.294118 0.313725 0.321569 0.321569 0.329412 0.337255 0.341176 0.341176 0.352941 0.352941 0.345098 0.34902 0.360784 0.360784 0.352941 0.356863 0.356863 0.364706 0.360784 0.364706 0.352941 0.356863 0.34902 0.345098 0.345098 0.337255 0.341176 0.337255 0.329412 0.32549 0.321569 0.317647 0.309804 0.298039 0.294118 0.294118 0.278431 0.270588 0.258824 0.266667 0.254902 0.239216 0.231373 0.227451 0.223529 0.215686 0.207843 0.2 0.184314 0.176471 0.168627 0.14902 0.145098 0.129412 0.117647 0.109804 0.0980392 0.0862745 0.0509804 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0862745 0.129412 0.168627 0.196078 0.219608 0.243137 0.262745 0.27451 0.278431 0.294118 0.309804 0.309804 0.321569 0.32549 0.333333 0.333333 0.352941 0.341176 0.341176 0.352941 0.34902 0.345098 0.352941 0.34902 0.356863 0.352941 0.352941 0.352941 0.345098 0.34902 0.345098 0.345098 0.341176 0.32549 0.329412 0.337255 0.317647 0.32549 0.321569 0.309804 0.301961 0.290196 0.294118 0.278431 0.27451 0.270588 0.266667 0.25098 0.243137 0.235294 0.227451 0.223529 0.223529 0.207843 0.196078 0.192157 0.172549 0.164706 0.152941 0.145098 0.141176 0.121569 0.113725 0.101961 0.0901961 0.0588235 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.00784314 0.0941176 0.145098 0.176471 0.203922 0.219608 0.247059 0.258824 0.262745 0.286275 0.294118 0.301961 0.305882 0.321569 0.329412 0.329412 0.329412 0.329412 0.337255 0.337255 0.345098 0.34902 0.341176 0.34902 0.34902 0.34902 0.341176 0.345098 0.333333 0.337255 0.341176 0.333333 0.329412 0.32549 0.333333 0.317647 0.313725 0.305882 0.301961 0.309804 0.286275 0.286275 0.286275 0.27451 0.262745 0.258824 0.25098 0.25098 0.231373 0.231373 0.219608 0.215686 0.203922 0.192157 0.188235 0.168627 0.168627 0.14902 0.141176 0.12549 0.12549 0.113725 0.109804 0.0901961 0.0627451 0.027451 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0235294 0.0941176 0.141176 0.172549 0.203922 0.227451 0.231373 0.262745 0.270588 0.282353 0.290196 0.294118 0.305882 0.309804 0.32549 0.321569 0.32549 0.333333 0.337255 0.329412 0.341176 0.341176 0.337255 0.337255 0.341176 0.341176 0.337255 0.329412 0.337255 0.329412 0.329412 0.329412 0.317647 0.321569 0.313725 0.305882 0.301961 0.301961 0.290196 0.282353 0.282353 0.270588 0.262745 0.258824 0.254902 0.247059 0.235294 0.235294 0.223529 0.219608 0.203922 0.2 0.192157 0.172549 0.168627 0.160784 0.152941 0.137255 0.12549 0.113725 0.109804 0.0941176 0.0666667 0.0352941 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0352941 0.0901961 0.137255 0.164706 0.2 0.215686 0.243137 0.25098 0.270588 0.27451 0.286275 0.298039 0.305882 0.313725 0.317647 0.313725 0.321569 0.329412 0.32549 0.329412 0.333333 0.329412 0.329412 0.329412 0.329412 0.329412 0.313725 0.317647 0.321569 0.32549 0.309804 0.313725 0.309804 0.309804 0.290196 0.290196 0.301961 0.27451 0.286275 0.266667 0.266667 0.262745 0.258824 0.247059 0.243137 0.243137 0.223529 0.215686 0.203922 0.192157 0.184314 0.184314 0.164706 0.160784 0.14902 0.137255 0.129412 0.117647 0.105882 0.0901961 0.0705882 0.0313725 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0588235 0.0901961 0.121569 0.164706 0.188235 0.215686 0.231373 0.254902 0.266667 0.278431 0.282353 0.294118 0.286275 0.301961 0.309804 0.309804 0.321569 0.321569 0.313725 0.32549 0.321569 0.317647 0.32549 0.321569 0.317647 0.321569 0.317647 0.313725 0.305882 0.32549 0.301961 0.298039 0.294118 0.294118 0.294118 0.270588 0.282353 0.266667 0.270588 0.247059 0.239216 0.231373 0.235294 0.227451 0.223529 0.211765 0.211765 0.192157 0.184314 0.188235 0.160784 0.160784 0.156863 0.137255 0.117647 0.12549 0.0901961 0.0862745 0.0705882 0.0313725 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0745098 0.0941176 0.113725 0.141176 0.172549 0.2 0.215686 0.231373 0.243137 0.266667 0.270588 0.278431 0.294118 0.286275 0.305882 0.298039 0.301961 0.309804 0.301961 0.313725 0.321569 0.309804 0.313725 0.301961 0.305882 0.309804 0.305882 0.294118 0.301961 0.294118 0.298039 0.286275 0.282353 0.278431 0.270588 0.262745 0.258824 0.25098 0.243137 0.235294 0.231373 0.227451 0.219608 0.211765 0.203922 0.192157 0.180392 0.176471 0.168627 0.156863 0.141176 0.133333 0.121569 0.101961 0.101961 0.0784314 0.0627451 0.0392157 0.0117647 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.00784314 0.0705882 0.113725 0.121569 0.129412 0.160784 0.180392 0.211765 0.207843 0.227451 0.243137 0.25098 0.27451 0.278431 0.282353 0.294118 0.294118 0.301961 0.301961 0.298039 0.309804 0.301961 0.298039 0.305882 0.301961 0.301961 0.298039 0.298039 0.298039 0.290196 0.286275 0.278431 0.270588 0.266667 0.258824 0.25098 0.25098 0.239216 0.239216 0.231373 0.219608 0.219608 0.203922 0.196078 0.184314 0.188235 0.172549 0.156863 0.14902 0.145098 0.129412 0.109804 0.0980392 0.0862745 0.0745098 0.0705882 0.0509804 0.0156863 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0784314 0.0980392 0.141176 0.156863 0.152941 0.145098 0.168627 0.188235 0.207843 0.219608 0.231373 0.239216 0.258824 0.262745 0.266667 0.266667 0.278431 0.290196 0.286275 0.282353 0.27451 0.282353 0.282353 0.290196 0.278431 0.282353 0.27451 0.27451 0.262745 0.266667 0.262745 0.258824 0.239216 0.235294 0.231373 0.223529 0.219608 0.223529 0.207843 0.188235 0.188235 0.172549 0.168627 0.152941 0.14902 0.12549 0.117647 0.117647 0.0980392 0.0862745 0.0901961 0.0941176 0.0784314 0.0431373 0.0196078 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0509804 0.105882 0.109804 0.141176 0.188235 0.207843 0.188235 0.176471 0.172549 0.192157 0.196078 0.207843 0.223529 0.223529 0.231373 0.235294 0.25098 0.254902 0.254902 0.254902 0.25098 0.258824 0.258824 0.243137 0.25098 0.247059 0.243137 0.247059 0.235294 0.231373 0.227451 0.219608 0.211765 0.211765 0.192157 0.188235 0.184314 0.176471 0.164706 0.160784 0.14902 0.137255 0.12549 0.113725 0.109804 0.113725 0.113725 0.113725 0.109804 0.0901961 0.0666667 0.0509804 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0745098 0.113725 0.14902 0.145098 0.168627 0.211765 0.219608 0.219608 0.215686 0.211765 0.192157 0.180392 0.184314 0.2 0.2 0.211765 0.211765 0.215686 0.215686 0.215686 0.219608 0.215686 0.219608 0.211765 0.203922 0.207843 0.207843 0.188235 0.192157 0.184314 0.188235 0.176471 0.172549 0.152941 0.156863 0.145098 0.137255 0.129412 0.12549 0.137255 0.141176 0.145098 0.129412 0.113725 0.0980392 0.0901961 0.0784314 0.0627451 0.027451 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0235294 0.0588235 0.113725 0.156863 0.168627 0.172549 0.156863 0.192157 0.203922 0.219608 0.223529 0.235294 0.247059 0.235294 0.235294 0.227451 0.219608 0.211765 0.2 0.180392 0.192157 0.176471 0.184314 0.168627 0.180392 0.172549 0.176471 0.172549 0.168627 0.180392 0.176471 0.160784 0.172549 0.188235 0.188235 0.176471 0.160784 0.14902 0.133333 0.121569 0.12549 0.129412 0.109804 0.109804 0.0784314 0.0352941 0.0196078 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0431373 0.0470588 0.0509804 0.0901961 0.121569 0.160784 0.184314 0.196078 0.2 0.188235 0.192157 0.196078 0.192157 0.196078 0.207843 0.219608 0.227451 0.223529 0.235294 0.235294 0.231373 0.231373 0.219608 0.219608 0.215686 0.215686 0.207843 0.196078 0.192157 0.164706 0.164706 0.168627 0.152941 0.141176 0.137255 0.12549 0.117647 0.129412 0.12549 0.164706 0.164706 0.145098 0.0980392 0.0509804 0.0352941 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.00784314 0.137255 0.141176 0.0784314 0.0784314 0.0980392 0.109804 0.129412 0.152941 0.180392 0.192157 0.207843 0.207843 0.207843 0.203922 0.215686 0.2 0.2 0.192157 0.192157 0.188235 0.180392 0.180392 0.180392 0.172549 0.184314 0.168627 0.164706 0.168627 0.156863 0.160784 0.145098 0.14902 0.129412 0.105882 0.109804 0.137255 0.164706 0.172549 0.101961 0.0901961 0.0901961 0.0509804 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0235294 0.145098 0.121569 0.0588235 0.0470588 0.0705882 0.0784314 0.0823529 0.0941176 0.101961 0.105882 0.109804 0.117647 0.133333 0.133333 0.152941 0.14902 0.156863 0.14902 0.156863 0.137255 0.137255 0.141176 0.133333 0.121569 0.117647 0.101961 0.0941176 0.0784314 0.0823529 0.0745098 0.0901961 0.105882 0.12549 0.12549 0.0901961 0.12549 0.0352941 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0117647 0.0745098 0.0745098 0.0705882 0.0666667 0.0627451 0.0627451 0.0705882 0.0666667 0.0745098 0.0784314 0.0784314 0.0784314 0.0862745 0.0901961 0.0862745 0.0862745 0.0862745 0.0784314 0.0745098 0.0705882 0.0588235 0.0588235 0.0588235 0.0823529 0.105882 0.109804 0.113725 0.0980392 0.0784314 0.0196078 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0156863 0.0313725 0.0352941 0.0627451 0.0901961 0.109804 0.109804 0.105882 0.0980392 0.109804 0.0980392 0.0941176 0.0941176 0.101961 0.0901961 0.0941176 0.0823529 0.0705882 0.0941176 0.105882 0.0431373 0.027451 0.0117647 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.00784314 0.027451 0.054902 0.0862745 0.133333 0.172549 0.2 0.239216 0.235294 0.254902 0.239216 0.235294 0.231373 0.196078 0.160784 0.121569 0.0823529 0.0509804 0.0156863 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0117647 0.0627451 0.113725 0.192157 0.305882 0.415686 0.494118 0.54902 0.588235 0.6 0.611765 0.631373 0.643137 0.643137 0.639216 0.647059 0.654902 0.662745 0.654902 0.658824 0.678431 0.717647 0.776471 0.752941 0.745098 0.72549 0.701961 0.678431 0.658824 0.658824 0.658824 0.647059 0.619608 0.603922 0.564706 0.494118 0.376471 0.258824 0.168627 0.109804 0.0352941 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0705882 0.203922 0.321569 0.423529 0.521569 0.572549 0.592157 0.603922 0.603922 0.619608 0.619608 0.611765 0.611765 0.596078 0.607843 0.596078 0.588235 0.584314 0.580392 0.560784 0.564706 0.576471 0.564706 0.572549 0.556863 0.572549 0.698039 0.803922 0.831373 0.847059 0.796078 0.74902 0.65098 0.647059 0.643137 0.643137 0.647059 0.658824 0.666667 0.662745 0.654902 0.654902 0.643137 0.65098 0.635294 0.615686 0.576471 0.501961 0.388235 0.270588 0.113725 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.156863 0.360784 0.458824 0.517647 0.556863 0.580392 0.572549 0.584314 0.584314 0.568627 0.552941 0.552941 0.517647 0.498039 0.466667 0.45098 0.427451 0.392157 0.392157 0.372549 0.360784 0.368627 0.360784 0.345098 0.341176 0.34902 0.345098 0.337255 0.337255 0.333333 0.380392 0.47451 0.439216 0.356863 0.372549 0.372549 0.372549 0.388235 0.396078 0.423529 0.435294 0.454902 0.482353 0.513725 0.572549 0.639216 0.764706 0.929412 0.972549 0.807843 0.682353 0.670588 0.666667 0.647059 0.627451 0.588235 0.529412 0.415686 0.196078 0.0392157 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.00784314 0.0784314 0.309804 0.47451 0.505882 0.541176 0.552941 0.552941 0.537255 0.52549 0.501961 0.490196 0.458824 0.415686 0.392157 0.360784 0.333333 0.298039 0.286275 0.290196 0.290196 0.27451 0.266667 0.278431 0.270588 0.301961 0.305882 0.305882 0.254902 0.278431 0.278431 0.262745 0.298039 0.341176 0.647059 0.596078 0.34902 0.32549 0.317647 0.298039 0.286275 0.298039 0.294118 0.290196 0.298039 0.305882 0.298039 0.313725 0.305882 0.305882 0.321569 0.337255 0.368627 0.376471 0.403922 0.454902 0.494118 0.545098 0.576471 0.588235 0.615686 0.635294 0.639216 0.615686 0.603922 0.541176 0.376471 0.141176 0.027451 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.145098 0.341176 0.470588 0.501961 0.537255 0.52549 0.513725 0.490196 0.47451 0.427451 0.384314 0.34902 0.313725 0.290196 0.278431 0.262745 0.254902 0.254902 0.231373 0.243137 0.239216 0.258824 0.247059 0.258824 0.25098 0.247059 0.247059 0.270588 0.294118 0.27451 0.235294 0.447059 0.341176 0.254902 0.290196 0.309804 0.980392 1 0.423529 0.352941 0.356863 0.294118 0.266667 0.278431 0.262745 0.266667 0.270588 0.262745 0.266667 0.278431 0.27451 0.286275 0.294118 0.294118 0.309804 0.305882 0.305882 0.321569 0.321569 0.337255 0.360784 0.396078 0.435294 0.482353 0.541176 0.568627 0.592157 0.603922 0.603922 0.580392 0.552941 0.4 0.192157 0.0156863 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.00784314 0.298039 0.447059 0.470588 0.478431 0.498039 0.482353 0.454902 0.411765 0.360784 0.337255 0.282353 0.258824 0.25098 0.231373 0.239216 0.227451 0.235294 0.239216 0.243137 0.239216 0.223529 0.223529 0.227451 0.239216 0.243137 0.239216 0.231373 0.235294 0.235294 0.25098 0.282353 0.278431 0.247059 0.290196 0.258824 0.243137 0.262745 0.305882 0.462745 0.454902 0.298039 0.270588 0.278431 0.258824 0.25098 0.262745 0.247059 0.258824 0.247059 0.247059 0.243137 0.27451 0.266667 0.278431 0.270588 0.282353 0.294118 0.298039 0.298039 0.290196 0.278431 0.313725 0.298039 0.298039 0.309804 0.321569 0.341176 0.384314 0.4 0.466667 0.529412 0.572549 0.588235 0.584314 0.560784 0.509804 0.356863 0.0705882 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0352941 0.329412 0.458824 0.45098 0.447059 0.462745 0.419608 0.396078 0.341176 0.294118 0.243137 0.215686 0.207843 0.211765 0.203922 0.215686 0.211765 0.211765 0.207843 0.219608 0.215686 0.215686 0.219608 0.215686 0.203922 0.2 0.211765 0.239216 0.231373 0.243137 0.223529 0.211765 0.227451 0.27451 0.262745 0.235294 0.231373 0.235294 0.239216 0.243137 0.266667 0.305882 0.278431 0.286275 0.247059 0.254902 0.254902 0.247059 0.254902 0.243137 0.247059 0.243137 0.247059 0.231373 0.258824 0.25098 0.254902 0.25098 0.247059 0.27451 0.262745 0.270588 0.262745 0.278431 0.286275 0.286275 0.266667 0.278431 0.27451 0.262745 0.27451 0.282353 0.305882 0.32549 0.380392 0.45098 0.509804 0.54902 0.568627 0.552941 0.529412 0.415686 0.137255 0.0235294 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.266667 0.431373 0.415686 0.411765 0.396078 0.392157 0.345098 0.278431 0.243137 0.215686 0.203922 0.2 0.188235 0.192157 0.196078 0.192157 0.2 0.188235 0.196078 0.203922 0.207843 0.215686 0.211765 0.211765 0.207843 0.192157 0.203922 0.219608 0.231373 0.235294 0.219608 0.215686 0.215686 0.223529 0.25098 0.266667 0.223529 0.223529 0.227451 0.227451 0.247059 0.270588 0.301961 0.294118 0.258824 0.239216 0.25098 0.25098 0.231373 0.243137 0.239216 0.231373 0.227451 0.239216 0.239216 0.254902 0.25098 0.247059 0.227451 0.243137 0.270588 0.270588 0.266667 0.262745 0.247059 0.266667 0.27451 0.243137 0.247059 0.25098 0.25098 0.247059 0.247059 0.254902 0.266667 0.270588 0.282353 0.317647 0.392157 0.458824 0.517647 0.533333 0.537255 0.517647 0.407843 0.152941 0.0117647 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.137255 0.388235 0.407843 0.384314 0.364706 0.321569 0.290196 0.243137 0.207843 0.196078 0.184314 0.172549 0.184314 0.180392 0.168627 0.188235 0.196078 0.192157 0.184314 0.188235 0.196078 0.192157 0.196078 0.203922 0.203922 0.207843 0.196078 0.196078 0.207843 0.196078 0.215686 0.235294 0.215686 0.223529 0.203922 0.2 0.247059 0.254902 0.219608 0.219608 0.227451 0.215686 0.231373 0.258824 0.278431 0.266667 0.254902 0.25098 0.254902 0.235294 0.247059 0.235294 0.247059 0.227451 0.219608 0.227451 0.235294 0.243137 0.243137 0.227451 0.239216 0.239216 0.258824 0.270588 0.266667 0.247059 0.227451 0.258824 0.254902 0.235294 0.258824 0.247059 0.223529 0.235294 0.231373 0.239216 0.227451 0.239216 0.25098 0.239216 0.262745 0.282353 0.352941 0.443137 0.490196 0.513725 0.509804 0.478431 0.32549 0.0392157 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.164706 0.396078 0.380392 0.34902 0.321569 0.270588 0.215686 0.2 0.172549 0.160784 0.145098 0.156863 0.152941 0.141176 0.172549 0.176471 0.172549 0.172549 0.172549 0.184314 0.184314 0.192157 0.2 0.188235 0.188235 0.203922 0.2 0.203922 0.184314 0.196078 0.2 0.223529 0.215686 0.215686 0.211765 0.2 0.203922 0.25098 0.247059 0.207843 0.219608 0.215686 0.211765 0.227451 0.243137 0.254902 0.25098 0.25098 0.239216 0.235294 0.243137 0.243137 0.231373 0.239216 0.219608 0.219608 0.235294 0.231373 0.227451 0.223529 0.235294 0.239216 0.235294 0.254902 0.254902 0.254902 0.239216 0.243137 0.235294 0.243137 0.239216 0.235294 0.227451 0.231373 0.243137 0.258824 0.270588 0.286275 0.25098 0.243137 0.262745 0.25098 0.266667 0.254902 0.278431 0.321569 0.427451 0.470588 0.490196 0.498039 0.435294 0.156863 0.0156863 0.0156863 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.231373 0.384314 0.341176 0.298039 0.282353 0.231373 0.180392 0.156863 0.141176 0.145098 0.141176 0.145098 0.14902 0.145098 0.156863 0.145098 0.168627 0.156863 0.156863 0.156863 0.168627 0.184314 0.2 0.215686 0.192157 0.192157 0.180392 0.184314 0.188235 0.188235 0.188235 0.180392 0.188235 0.196078 0.192157 0.192157 0.196078 0.207843 0.2 0.207843 0.203922 0.207843 0.2 0.219608 0.231373 0.223529 0.211765 0.223529 0.215686 0.227451 0.219608 0.215686 0.215686 0.203922 0.215686 0.215686 0.215686 0.215686 0.211765 0.223529 0.223529 0.219608 0.215686 0.219608 0.215686 0.219608 0.223529 0.215686 0.219608 0.227451 0.219608 0.219608 0.223529 0.223529 0.223529 0.219608 0.231373 0.215686 0.219608 0.239216 0.227451 0.215686 0.235294 0.231373 0.231373 0.243137 0.254902 0.290196 0.376471 0.435294 0.462745 0.470588 0.423529 0.152941 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.117647 0.380392 0.337255 0.27451 0.258824 0.2 0.145098 0.141176 0.137255 0.12549 0.129412 0.129412 0.137255 0.133333 0.133333 0.145098 0.145098 0.152941 0.145098 0.152941 0.160784 0.172549 0.164706 0.152941 0.164706 0.164706 0.168627 0.164706 0.172549 0.172549 0.184314 0.180392 0.188235 0.192157 0.192157 0.176471 0.2 0.203922 0.2 0.196078 0.192157 0.207843 0.207843 0.196078 0.2 0.2 0.203922 0.215686 0.211765 0.211765 0.196078 0.223529 0.211765 0.211765 0.223529 0.223529 0.219608 0.227451 0.215686 0.215686 0.211765 0.227451 0.219608 0.219608 0.219608 0.219608 0.211765 0.215686 0.223529 0.219608 0.223529 0.211765 0.215686 0.211765 0.203922 0.231373 0.207843 0.207843 0.219608 0.211765 0.215686 0.211765 0.203922 0.211765 0.196078 0.211765 0.215686 0.223529 0.227451 0.243137 0.333333 0.396078 0.431373 0.447059 0.4 0.129412 0.0117647 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.352941 0.345098 0.270588 0.25098 0.188235 0.133333 0.129412 0.121569 0.117647 0.12549 0.121569 0.121569 0.129412 0.141176 0.133333 0.137255 0.145098 0.145098 0.156863 0.152941 0.160784 0.164706 0.14902 0.160784 0.156863 0.176471 0.156863 0.180392 0.176471 0.164706 0.168627 0.180392 0.184314 0.180392 0.188235 0.180392 0.180392 0.192157 0.192157 0.203922 0.2 0.2 0.196078 0.196078 0.211765 0.196078 0.207843 0.203922 0.2 0.215686 0.207843 0.211765 0.211765 0.203922 0.203922 0.215686 0.196078 0.219608 0.211765 0.203922 0.219608 0.211765 0.211765 0.227451 0.203922 0.207843 0.219608 0.219608 0.215686 0.203922 0.215686 0.207843 0.203922 0.207843 0.2 0.223529 0.196078 0.207843 0.207843 0.211765 0.223529 0.196078 0.207843 0.211765 0.196078 0.196078 0.207843 0.203922 0.215686 0.211765 0.219608 0.301961 0.392157 0.407843 0.411765 0.34902 0.0509804 0 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0980392 0.396078 0.309804 0.243137 0.176471 0.133333 0.121569 0.101961 0.109804 0.117647 0.113725 0.113725 0.12549 0.133333 0.129412 0.129412 0.137255 0.133333 0.14902 0.141176 0.14902 0.14902 0.160784 0.14902 0.152941 0.160784 0.160784 0.168627 0.176471 0.176471 0.172549 0.172549 0.176471 0.180392 0.180392 0.196078 0.188235 0.188235 0.196078 0.196078 0.196078 0.188235 0.196078 0.2 0.2 0.203922 0.2 0.196078 0.219608 0.203922 0.211765 0.203922 0.215686 0.211765 0.203922 0.207843 0.203922 0.2 0.215686 0.207843 0.2 0.207843 0.207843 0.215686 0.211765 0.203922 0.207843 0.211765 0.203922 0.207843 0.2 0.215686 0.203922 0.207843 0.207843 0.196078 0.203922 0.207843 0.2 0.203922 0.211765 0.211765 0.203922 0.196078 0.2 0.196078 0.196078 0.196078 0.196078 0.203922 0.196078 0.188235 0.207843 0.286275 0.368627 0.392157 0.396078 0.219608 0.00392157 0.0117647 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.176471 0.396078 0.290196 0.203922 0.133333 0.113725 0.109804 0.0980392 0.113725 0.101961 0.105882 0.12549 0.12549 0.109804 0.12549 0.12549 0.133333 0.133333 0.14902 0.14902 0.152941 0.145098 0.152941 0.145098 0.156863 0.152941 0.156863 0.168627 0.164706 0.176471 0.168627 0.164706 0.184314 0.180392 0.180392 0.188235 0.192157 0.192157 0.188235 0.180392 0.196078 0.2 0.192157 0.203922 0.196078 0.203922 0.2 0.207843 0.211765 0.203922 0.211765 0.203922 0.2 0.2 0.207843 0.207843 0.203922 0.211765 0.207843 0.2 0.207843 0.223529 0.207843 0.207843 0.203922 0.215686 0.215686 0.203922 0.207843 0.207843 0.207843 0.2 0.196078 0.2 0.196078 0.2 0.203922 0.2 0.203922 0.2 0.192157 0.196078 0.192157 0.196078 0.196078 0.196078 0.196078 0.196078 0.196078 0.184314 0.184314 0.184314 0.180392 0.207843 0.313725 0.345098 0.380392 0.317647 0.0352941 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0.407843 0.301961 0.176471 0.117647 0.109804 0.0941176 0.101961 0.0941176 0.105882 0.101961 0.101961 0.121569 0.113725 0.117647 0.129412 0.133333 0.129412 0.14902 0.137255 0.137255 0.152941 0.145098 0.141176 0.156863 0.164706 0.156863 0.168627 0.172549 0.168627 0.176471 0.176471 0.172549 0.172549 0.192157 0.188235 0.184314 0.180392 0.196078 0.192157 0.2 0.192157 0.196078 0.196078 0.203922 0.211765 0.203922 0.207843 0.219608 0.215686 0.215686 0.207843 0.203922 0.207843 0.207843 0.2 0.211765 0.211765 0.203922 0.2 0.207843 0.2 0.2 0.207843 0.227451 0.215686 0.207843 0.207843 0.2 0.203922 0.207843 0.207843 0.2 0.196078 0.2 0.2 0.2 0.207843 0.196078 0.2 0.211765 0.2 0.196078 0.196078 0.196078 0.192157 0.188235 0.184314 0.188235 0.176471 0.172549 0.164706 0.172549 0.188235 0.258824 0.337255 0.368627 0.333333 0.0745098 0.00392157 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.176471 0.427451 0.356863 0.188235 0.105882 0.0980392 0.0980392 0.0745098 0.0941176 0.0980392 0.0980392 0.0941176 0.101961 0.0980392 0.117647 0.113725 0.113725 0.12549 0.137255 0.133333 0.121569 0.141176 0.145098 0.141176 0.14902 0.156863 0.156863 0.14902 0.160784 0.160784 0.164706 0.168627 0.176471 0.172549 0.164706 0.176471 0.192157 0.192157 0.176471 0.192157 0.192157 0.2 0.184314 0.2 0.192157 0.196078 0.196078 0.203922 0.203922 0.203922 0.2 0.203922 0.203922 0.211765 0.207843 0.2 0.2 0.203922 0.203922 0.203922 0.2 0.203922 0.2 0.2 0.211765 0.2 0.207843 0.196078 0.203922 0.196078 0.203922 0.196078 0.196078 0.192157 0.196078 0.203922 0.2 0.184314 0.2 0.196078 0.207843 0.184314 0.184314 0.180392 0.184314 0.192157 0.180392 0.172549 0.180392 0.164706 0.164706 0.160784 0.176471 0.164706 0.215686 0.32549 0.368627 0.333333 0.0745098 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.145098 0.4 0.45098 0.282353 0.109804 0.101961 0.101961 0.0862745 0.0941176 0.0980392 0.0941176 0.0901961 0.0941176 0.0941176 0.101961 0.0941176 0.109804 0.109804 0.113725 0.117647 0.129412 0.117647 0.12549 0.129412 0.129412 0.129412 0.129412 0.14902 0.145098 0.141176 0.152941 0.14902 0.168627 0.156863 0.168627 0.168627 0.156863 0.164706 0.180392 0.176471 0.180392 0.172549 0.180392 0.176471 0.184314 0.188235 0.188235 0.180392 0.196078 0.180392 0.188235 0.188235 0.184314 0.188235 0.192157 0.184314 0.188235 0.196078 0.196078 0.188235 0.196078 0.196078 0.192157 0.203922 0.192157 0.188235 0.196078 0.203922 0.188235 0.188235 0.184314 0.184314 0.188235 0.188235 0.192157 0.188235 0.188235 0.184314 0.168627 0.188235 0.176471 0.180392 0.180392 0.172549 0.176471 0.164706 0.164706 0.164706 0.172549 0.152941 0.168627 0.160784 0.160784 0.160784 0.215686 0.329412 0.384314 0.290196 0.0705882 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.113725 0.32549 0.470588 0.466667 0.262745 0.101961 0.101961 0.0980392 0.0823529 0.0980392 0.0901961 0.0862745 0.0980392 0.101961 0.0901961 0.105882 0.105882 0.101961 0.101961 0.121569 0.105882 0.109804 0.121569 0.12549 0.12549 0.129412 0.129412 0.129412 0.141176 0.133333 0.145098 0.152941 0.14902 0.156863 0.152941 0.14902 0.160784 0.168627 0.160784 0.160784 0.168627 0.172549 0.176471 0.180392 0.184314 0.180392 0.180392 0.180392 0.188235 0.192157 0.180392 0.188235 0.180392 0.192157 0.188235 0.172549 0.188235 0.184314 0.180392 0.2 0.184314 0.196078 0.180392 0.192157 0.196078 0.192157 0.196078 0.192157 0.192157 0.180392 0.196078 0.192157 0.188235 0.188235 0.184314 0.188235 0.188235 0.176471 0.176471 0.176471 0.172549 0.168627 0.172549 0.176471 0.176471 0.160784 0.156863 0.164706 0.152941 0.168627 0.156863 0.14902 0.156863 0.160784 0.278431 0.388235 0.372549 0.235294 0.0784314 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0745098 0.254902 0.396078 0.521569 0.513725 0.305882 0.117647 0.109804 0.101961 0.0901961 0.0862745 0.101961 0.0901961 0.0823529 0.101961 0.0980392 0.101961 0.105882 0.105882 0.109804 0.105882 0.129412 0.12549 0.113725 0.129412 0.12549 0.129412 0.137255 0.137255 0.137255 0.152941 0.137255 0.145098 0.156863 0.156863 0.168627 0.152941 0.164706 0.168627 0.164706 0.172549 0.168627 0.172549 0.176471 0.172549 0.176471 0.184314 0.172549 0.180392 0.188235 0.188235 0.188235 0.188235 0.188235 0.184314 0.180392 0.196078 0.184314 0.196078 0.188235 0.196078 0.196078 0.192157 0.188235 0.196078 0.192157 0.184314 0.180392 0.196078 0.196078 0.188235 0.196078 0.180392 0.184314 0.180392 0.172549 0.176471 0.172549 0.184314 0.172549 0.168627 0.172549 0.172549 0.172549 0.160784 0.172549 0.172549 0.164706 0.152941 0.145098 0.145098 0.152941 0.160784 0.239216 0.380392 0.392157 0.305882 0.203922 0.0627451 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.054902 0.227451 0.329412 0.431373 0.552941 0.572549 0.427451 0.180392 0.117647 0.105882 0.0862745 0.0862745 0.0862745 0.0941176 0.0980392 0.0901961 0.105882 0.101961 0.101961 0.105882 0.109804 0.105882 0.121569 0.117647 0.12549 0.12549 0.12549 0.133333 0.133333 0.141176 0.14902 0.14902 0.152941 0.152941 0.14902 0.156863 0.160784 0.160784 0.160784 0.168627 0.176471 0.164706 0.172549 0.176471 0.176471 0.176471 0.168627 0.176471 0.192157 0.180392 0.180392 0.188235 0.188235 0.192157 0.176471 0.188235 0.192157 0.184314 0.188235 0.188235 0.180392 0.192157 0.196078 0.196078 0.188235 0.180392 0.192157 0.192157 0.184314 0.184314 0.184314 0.188235 0.176471 0.176471 0.176471 0.184314 0.184314 0.172549 0.172549 0.176471 0.176471 0.168627 0.168627 0.160784 0.164706 0.156863 0.156863 0.152941 0.156863 0.14902 0.14902 0.164706 0.305882 0.415686 0.407843 0.321569 0.239216 0.176471 0.0431373 0 0 0 0 0 0 0 0 0 0 0.027451 0.0588235 0.0666667 0.054902 0.0196078 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.027451 0.192157 0.286275 0.364706 0.454902 0.588235 0.619608 0.580392 0.388235 0.156863 0.117647 0.117647 0.0980392 0.0823529 0.0941176 0.0823529 0.109804 0.105882 0.101961 0.101961 0.0980392 0.117647 0.105882 0.117647 0.12549 0.121569 0.129412 0.133333 0.137255 0.141176 0.141176 0.141176 0.141176 0.137255 0.152941 0.156863 0.152941 0.172549 0.160784 0.168627 0.168627 0.168627 0.160784 0.168627 0.176471 0.188235 0.164706 0.180392 0.184314 0.184314 0.192157 0.184314 0.192157 0.192157 0.180392 0.188235 0.192157 0.203922 0.192157 0.188235 0.192157 0.192157 0.188235 0.196078 0.188235 0.176471 0.196078 0.196078 0.176471 0.192157 0.188235 0.188235 0.184314 0.180392 0.188235 0.180392 0.184314 0.164706 0.172549 0.176471 0.180392 0.176471 0.176471 0.164706 0.168627 0.160784 0.156863 0.152941 0.141176 0.145098 0.247059 0.407843 0.45098 0.415686 0.34902 0.290196 0.278431 0.160784 0.0117647 0 0 0 0 0 0.027451 0.196078 0.27451 0.32549 0.356863 0.380392 0.396078 0.388235 0.396078 0.376471 0.345098 0.313725 0.223529 0.0666667 0 0 0 0 0 0 0 0 0 0 0.0117647 0.156863 0.247059 0.329412 0.392157 0.454902 0.541176 0.607843 0.654902 0.615686 0.443137 0.203922 0.12549 0.117647 0.109804 0.101961 0.109804 0.101961 0.105882 0.109804 0.101961 0.101961 0.121569 0.105882 0.113725 0.12549 0.121569 0.129412 0.129412 0.137255 0.141176 0.137255 0.160784 0.145098 0.156863 0.160784 0.160784 0.164706 0.152941 0.160784 0.156863 0.168627 0.168627 0.164706 0.164706 0.184314 0.176471 0.184314 0.180392 0.192157 0.196078 0.188235 0.184314 0.188235 0.188235 0.188235 0.184314 0.180392 0.184314 0.192157 0.188235 0.192157 0.184314 0.184314 0.196078 0.188235 0.192157 0.180392 0.188235 0.196078 0.188235 0.184314 0.176471 0.192157 0.180392 0.184314 0.184314 0.160784 0.172549 0.176471 0.164706 0.164706 0.156863 0.172549 0.164706 0.172549 0.168627 0.176471 0.270588 0.431373 0.486275 0.470588 0.415686 0.368627 0.337255 0.313725 0.27451 0.160784 0.00784314 0 0 0.0117647 0.168627 0.333333 0.392157 0.427451 0.458824 0.486275 0.498039 0.498039 0.513725 0.501961 0.513725 0.490196 0.47451 0.454902 0.411765 0.372549 0.309804 0.121569 0.0117647 0 0 0 0 0 0 0 0 0.141176 0.227451 0.294118 0.356863 0.407843 0.470588 0.513725 0.572549 0.643137 0.666667 0.67451 0.584314 0.364706 0.196078 0.133333 0.121569 0.113725 0.105882 0.113725 0.105882 0.109804 0.121569 0.105882 0.113725 0.12549 0.12549 0.137255 0.137255 0.141176 0.14902 0.137255 0.160784 0.152941 0.14902 0.145098 0.152941 0.168627 0.156863 0.168627 0.176471 0.164706 0.168627 0.172549 0.172549 0.188235 0.184314 0.180392 0.192157 0.188235 0.180392 0.180392 0.192157 0.196078 0.180392 0.192157 0.192157 0.196078 0.196078 0.188235 0.196078 0.192157 0.196078 0.188235 0.180392 0.188235 0.192157 0.188235 0.196078 0.188235 0.188235 0.188235 0.176471 0.188235 0.188235 0.176471 0.176471 0.180392 0.176471 0.176471 0.172549 0.172549 0.172549 0.160784 0.156863 0.231373 0.364706 0.498039 0.517647 0.498039 0.45098 0.396078 0.360784 0.345098 0.32549 0.298039 0.27451 0.223529 0.141176 0.109804 0.196078 0.305882 0.392157 0.478431 0.517647 0.533333 0.560784 0.568627 0.580392 0.588235 0.596078 0.6 0.572549 0.580392 0.560784 0.54902 0.517647 0.482353 0.435294 0.376471 0.278431 0.0901961 0.00392157 0 0 0 0 0 0 0.117647 0.211765 0.270588 0.333333 0.384314 0.419608 0.462745 0.498039 0.517647 0.580392 0.631373 0.678431 0.713725 0.705882 0.611765 0.454902 0.243137 0.14902 0.133333 0.129412 0.109804 0.133333 0.12549 0.12549 0.12549 0.129412 0.129412 0.12549 0.137255 0.152941 0.145098 0.164706 0.152941 0.172549 0.156863 0.164706 0.156863 0.164706 0.176471 0.168627 0.168627 0.168627 0.176471 0.184314 0.176471 0.184314 0.184314 0.192157 0.188235 0.180392 0.188235 0.196078 0.184314 0.188235 0.192157 0.196078 0.192157 0.184314 0.188235 0.192157 0.2 0.196078 0.192157 0.196078 0.192157 0.176471 0.184314 0.180392 0.184314 0.180392 0.188235 0.184314 0.180392 0.184314 0.176471 0.184314 0.192157 0.172549 0.164706 0.180392 0.176471 0.27451 0.419608 0.509804 0.552941 0.537255 0.490196 0.45098 0.407843 0.364706 0.333333 0.337255 0.313725 0.305882 0.282353 0.286275 0.270588 0.337255 0.360784 0.384314 0.415686 0.494118 0.560784 0.588235 0.607843 0.623529 0.635294 0.635294 0.654902 0.654902 0.647059 0.635294 0.635294 0.619608 0.611765 0.592157 0.556863 0.513725 0.478431 0.407843 0.337255 0.172549 0.0156863 0 0 0 0 0 0.0901961 0.2 0.25098 0.305882 0.352941 0.388235 0.427451 0.462745 0.490196 0.517647 0.541176 0.584314 0.623529 0.666667 0.705882 0.741176 0.745098 0.713725 0.627451 0.458824 0.27451 0.196078 0.164706 0.145098 0.133333 0.129412 0.141176 0.129412 0.141176 0.145098 0.141176 0.152941 0.152941 0.156863 0.168627 0.164706 0.160784 0.176471 0.172549 0.172549 0.168627 0.180392 0.180392 0.176471 0.184314 0.176471 0.176471 0.176471 0.188235 0.184314 0.192157 0.184314 0.196078 0.180392 0.188235 0.184314 0.184314 0.188235 0.203922 0.188235 0.196078 0.184314 0.192157 0.196078 0.184314 0.196078 0.196078 0.192157 0.188235 0.184314 0.184314 0.192157 0.196078 0.188235 0.188235 0.203922 0.203922 0.282353 0.423529 0.529412 0.572549 0.580392 0.560784 0.537255 0.490196 0.447059 0.403922 0.376471 0.345098 0.317647 0.298039 0.262745 0.258824 0.313725 0.278431 0.294118 0.333333 0.423529 0.439216 0.439216 0.486275 0.552941 0.615686 0.635294 0.658824 0.654902 0.662745 0.678431 0.682353 0.678431 0.764706 0.764706 0.717647 0.666667 0.65098 0.631373 0.615686 0.576471 0.541176 0.486275 0.423529 0.333333 0.192157 0.0117647 0 0 0 0 0.054902 0.180392 0.247059 0.286275 0.333333 0.372549 0.396078 0.427451 0.462745 0.486275 0.509804 0.52549 0.517647 0.576471 0.6 0.639216 0.682353 0.709804 0.729412 0.760784 0.764706 0.756863 0.721569 0.631373 0.486275 0.360784 0.266667 0.188235 0.156863 0.14902 0.152941 0.160784 0.152941 0.156863 0.164706 0.156863 0.156863 0.172549 0.168627 0.168627 0.172549 0.180392 0.180392 0.180392 0.184314 0.180392 0.192157 0.188235 0.180392 0.192157 0.192157 0.184314 0.184314 0.184314 0.196078 0.192157 0.192157 0.192157 0.192157 0.2 0.192157 0.196078 0.188235 0.196078 0.196078 0.192157 0.184314 0.192157 0.188235 0.192157 0.231373 0.290196 0.345098 0.439216 0.537255 0.588235 0.611765 0.611765 0.588235 0.576471 0.537255 0.509804 0.470588 0.443137 0.411765 0.388235 0.356863 0.32549 0.305882 0.294118 0.262745 0.227451 0.211765 0.27451 0.290196 0.294118 0.392157 0.482353 0.470588 0.482353 0.533333 0.596078 0.768627 0.796078 0.72549 0.690196 0.690196 0.662745 0.647059 0.647059 0.635294 0.756863 0.862745 0.701961 0.658824 0.662745 0.647059 0.615686 0.580392 0.556863 0.498039 0.415686 0.32549 0.14902 0.0117647 0 0 0 0.0235294 0.164706 0.227451 0.278431 0.321569 0.356863 0.380392 0.403922 0.431373 0.458824 0.47451 0.482353 0.513725 0.537255 0.556863 0.572549 0.596078 0.615686 0.623529 0.658824 0.694118 0.713725 0.72549 0.760784 0.772549 0.780392 0.839216 0.890196 0.776471 0.686275 0.607843 0.545098 0.462745 0.364706 0.294118 0.219608 0.196078 0.180392 0.164706 0.176471 0.180392 0.180392 0.172549 0.176471 0.192157 0.188235 0.184314 0.192157 0.196078 0.196078 0.192157 0.192157 0.196078 0.196078 0.188235 0.192157 0.192157 0.192157 0.192157 0.196078 0.2 0.211765 0.247059 0.317647 0.376471 0.447059 0.505882 0.552941 0.611765 0.639216 0.654902 0.658824 0.65098 0.643137 0.615686 0.6 0.564706 0.521569 0.505882 0.466667 0.458824 0.419608 0.4 0.388235 0.364706 0.337255 0.313725 0.290196 0.282353 0.286275 0.235294 0.203922 0.196078 0.258824 0.321569 0.301961 0.447059 0.501961 0.490196 0.521569 0.552941 0.639216 0.729412 0.65098 0.603922 0.580392 0.54902 0.513725 0.490196 0.478431 0.478431 0.513725 0.545098 0.576471 0.631373 0.686275 0.6 0.596078 0.603922 0.568627 0.529412 0.486275 0.396078 0.282353 0.0705882 0.00784314 0 0 0 0.137255 0.215686 0.27451 0.313725 0.34902 0.368627 0.4 0.407843 0.435294 0.458824 0.462745 0.490196 0.509804 0.529412 0.545098 0.545098 0.564706 0.576471 0.596078 0.6 0.623529 0.643137 0.662745 0.658824 0.701961 0.709804 0.737255 0.741176 0.74902 0.756863 0.811765 0.811765 0.835294 0.815686 0.784314 0.788235 0.764706 0.752941 0.745098 0.729412 0.721569 0.690196 0.678431 0.643137 0.639216 0.623529 0.603922 0.603922 0.603922 0.596078 0.592157 0.607843 0.623529 0.631373 0.654902 0.666667 0.694118 0.694118 0.717647 0.698039 0.721569 0.717647 0.705882 0.705882 0.678431 0.670588 0.65098 0.631373 0.619608 0.6 0.568627 0.556863 0.541176 0.521569 0.498039 0.47451 0.447059 0.435294 0.415686 0.388235 0.376471 0.364706 0.341176 0.32549 0.313725 0.27451 0.262745 0.278431 0.254902 0.219608 0.192157 0.180392 0.254902 0.270588 0.345098 0.596078 0.623529 0.521569 0.52549 0.564706 0.568627 0.52549 0.501961 0.407843 0.317647 0.227451 0.152941 0.0901961 0.0588235 0.0784314 0.141176 0.192157 0.231373 0.4 0.509804 0.623529 0.592157 0.592157 0.584314 0.564706 0.513725 0.462745 0.352941 0.211765 0.0235294 0.00392157 0 0 0.0980392 0.2 0.247059 0.298039 0.341176 0.364706 0.392157 0.403922 0.427451 0.443137 0.439216 0.478431 0.490196 0.509804 0.509804 0.533333 0.537255 0.545098 0.560784 0.568627 0.596078 0.596078 0.6 0.596078 0.619608 0.619608 0.635294 0.639216 0.65098 0.654902 0.67451 0.686275 0.694118 0.698039 0.705882 0.705882 0.713725 0.733333 0.733333 0.745098 0.737255 0.752941 0.776471 0.8 0.831373 0.858824 0.996078 0.976471 0.8 0.784314 0.780392 0.74902 0.745098 0.756863 0.709804 0.717647 0.709804 0.694118 0.666667 0.654902 0.643137 0.631373 0.611765 0.603922 0.588235 0.572549 0.54902 0.541176 0.517647 0.509804 0.498039 0.494118 0.47451 0.462745 0.431373 0.419608 0.419608 0.396078 0.384314 0.368627 0.356863 0.337255 0.329412 0.305882 0.294118 0.270588 0.254902 0.266667 0.243137 0.215686 0.192157 0.176471 0.262745 0.286275 0.368627 0.517647 0.513725 0.509804 0.517647 0.490196 0.435294 0.345098 0.196078 0.0588235 0 0 0 0 0 0 0 0 0 0.0509804 0.211765 0.380392 0.505882 0.572549 0.580392 0.564706 0.537255 0.482353 0.419608 0.298039 0.101961 0.00784314 0 0 0.0666667 0.176471 0.243137 0.286275 0.321569 0.360784 0.392157 0.407843 0.411765 0.443137 0.443137 0.454902 0.47451 0.47451 0.486275 0.505882 0.509804 0.521569 0.537255 0.541176 0.54902 0.568627 0.580392 0.584314 0.588235 0.596078 0.603922 0.596078 0.603922 0.603922 0.631373 0.615686 0.635294 0.627451 0.643137 0.627451 0.654902 0.643137 0.647059 0.639216 0.631373 0.635294 0.639216 0.639216 0.647059 0.635294 0.639216 0.631373 0.639216 0.627451 0.619608 0.611765 0.607843 0.623529 0.619608 0.603922 0.588235 0.584314 0.568627 0.564706 0.560784 0.54902 0.533333 0.537255 0.521569 0.517647 0.501961 0.498039 0.482353 0.470588 0.45098 0.454902 0.447059 0.423529 0.411765 0.403922 0.384314 0.364706 0.360784 0.34902 0.32549 0.313725 0.301961 0.282353 0.27451 0.262745 0.239216 0.266667 0.239216 0.219608 0.180392 0.160784 0.235294 0.258824 0.376471 0.6 0.509804 0.494118 0.470588 0.372549 0.207843 0.054902 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0.0627451 0.317647 0.462745 0.545098 0.560784 0.545098 0.517647 0.447059 0.376471 0.211765 0.0313725 0 0 0.0235294 0.160784 0.227451 0.266667 0.317647 0.34902 0.384314 0.4 0.423529 0.431373 0.462745 0.454902 0.462745 0.482353 0.498039 0.490196 0.498039 0.470588 0.501961 0.521569 0.52549 0.545098 0.545098 0.564706 0.572549 0.568627 0.572549 0.588235 0.592157 0.592157 0.596078 0.6 0.603922 0.6 0.603922 0.6 0.6 0.611765 0.596078 0.596078 0.596078 0.607843 0.592157 0.6 0.592157 0.596078 0.603922 0.6 0.596078 0.603922 0.6 0.576471 0.580392 0.576471 0.564706 0.560784 0.556863 0.537255 0.537255 0.537255 0.533333 0.509804 0.513725 0.490196 0.490196 0.478431 0.462745 0.454902 0.447059 0.439216 0.435294 0.427451 0.411765 0.392157 0.392157 0.392157 0.364706 0.352941 0.337255 0.32549 0.321569 0.301961 0.294118 0.282353 0.262745 0.247059 0.235294 0.254902 0.239216 0.211765 0.176471 0.164706 0.231373 0.266667 0.388235 0.47451 0.470588 0.439216 0.32549 0.137255 0.0117647 0.0117647 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0235294 0.290196 0.470588 0.541176 0.537255 0.517647 0.470588 0.411765 0.294118 0.0823529 0 0 0.00392157 0.129412 0.2 0.254902 0.309804 0.341176 0.360784 0.388235 0.407843 0.427451 0.447059 0.454902 0.466667 0.478431 0.486275 0.494118 0.494118 0.494118 0.501961 0.505882 0.517647 0.52549 0.529412 0.537255 0.545098 0.552941 0.552941 0.560784 0.568627 0.560784 0.580392 0.568627 0.568627 0.580392 0.580392 0.580392 0.580392 0.572549 0.576471 0.584314 0.568627 0.580392 0.588235 0.584314 0.596078 0.596078 0.611765 0.623529 0.596078 0.572549 0.564706 0.552941 0.560784 0.545098 0.537255 0.52549 0.52549 0.52549 0.509804 0.505882 0.498039 0.486275 0.490196 0.470588 0.458824 0.454902 0.447059 0.443137 0.439216 0.423529 0.407843 0.403922 0.396078 0.380392 0.364706 0.356863 0.34902 0.337255 0.329412 0.313725 0.301961 0.301961 0.282353 0.266667 0.262745 0.247059 0.243137 0.262745 0.227451 0.2 0.172549 0.160784 0.215686 0.270588 0.384314 0.435294 0.407843 0.294118 0.109804 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.054902 0.356863 0.498039 0.529412 0.505882 0.470588 0.411765 0.333333 0.133333 0 0 0 0.0980392 0.188235 0.235294 0.290196 0.317647 0.356863 0.372549 0.396078 0.411765 0.431373 0.45098 0.45098 0.470588 0.482353 0.490196 0.498039 0.501961 0.505882 0.509804 0.509804 0.517647 0.529412 0.533333 0.529412 0.545098 0.545098 0.537255 0.545098 0.541176 0.556863 0.552941 0.545098 0.556863 0.552941 0.556863 0.560784 0.560784 0.560784 0.564706 0.564706 0.568627 0.560784 0.560784 0.564706 0.576471 0.576471 0.572549 0.560784 0.552941 0.533333 0.529412 0.529412 0.513725 0.517647 0.498039 0.498039 0.501961 0.490196 0.482353 0.470588 0.462745 0.462745 0.447059 0.447059 0.443137 0.427451 0.419608 0.403922 0.4 0.396078 0.376471 0.376471 0.368627 0.356863 0.345098 0.337255 0.329412 0.32549 0.305882 0.301961 0.286275 0.27451 0.266667 0.25098 0.243137 0.254902 0.262745 0.231373 0.192157 0.164706 0.145098 0.207843 0.27451 0.368627 0.364706 0.266667 0.0980392 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.203922 0.447059 0.498039 0.498039 0.47451 0.411765 0.34902 0.156863 0 0 0 0.0509804 0.164706 0.231373 0.270588 0.317647 0.337255 0.380392 0.396078 0.403922 0.423529 0.439216 0.447059 0.462745 0.470588 0.47451 0.486275 0.498039 0.498039 0.501961 0.505882 0.529412 0.517647 0.517647 0.537255 0.537255 0.529412 0.533333 0.545098 0.541176 0.52549 0.545098 0.541176 0.541176 0.541176 0.541176 0.552941 0.541176 0.545098 0.541176 0.545098 0.537255 0.533333 0.529412 0.537255 0.529412 0.533333 0.52549 0.505882 0.513725 0.509804 0.505882 0.505882 0.513725 0.490196 0.498039 0.490196 0.478431 0.47451 0.47451 0.458824 0.45098 0.447059 0.443137 0.435294 0.419608 0.411765 0.411765 0.407843 0.396078 0.392157 0.380392 0.368627 0.360784 0.34902 0.341176 0.333333 0.333333 0.317647 0.298039 0.298039 0.282353 0.27451 0.258824 0.247059 0.231373 0.25098 0.247059 0.215686 0.176471 0.152941 0.133333 0.196078 0.262745 0.317647 0.270588 0.109804 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0784314 0.376471 0.490196 0.494118 0.470588 0.415686 0.333333 0.172549 0 0 0 0.00392157 0.145098 0.211765 0.254902 0.294118 0.321569 0.360784 0.376471 0.396078 0.415686 0.423529 0.443137 0.458824 0.462745 0.466667 0.482353 0.486275 0.501961 0.498039 0.509804 0.505882 0.517647 0.52549 0.517647 0.533333 0.537255 0.541176 0.545098 0.537255 0.537255 0.537255 0.533333 0.537255 0.541176 0.541176 0.552941 0.533333 0.521569 0.541176 0.537255 0.529412 0.517647 0.537255 0.517647 0.521569 0.517647 0.52549 0.509804 0.513725 0.486275 0.494118 0.498039 0.482353 0.482353 0.482353 0.466667 0.47451 0.470588 0.462745 0.45098 0.45098 0.439216 0.435294 0.415686 0.423529 0.407843 0.411765 0.392157 0.392157 0.392157 0.368627 0.364706 0.352941 0.352941 0.329412 0.329412 0.305882 0.329412 0.301961 0.290196 0.286275 0.270588 0.25098 0.243137 0.227451 0.262745 0.243137 0.215686 0.164706 0.141176 0.129412 0.172549 0.243137 0.231373 0.141176 0.0235294 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0156863 0.290196 0.482353 0.498039 0.458824 0.403922 0.329412 0.188235 0 0 0 0 0.109804 0.192157 0.239216 0.282353 0.317647 0.341176 0.376471 0.392157 0.4 0.419608 0.439216 0.45098 0.462745 0.466667 0.490196 0.490196 0.486275 0.505882 0.509804 0.517647 0.513725 0.52549 0.529412 0.529412 0.529412 0.533333 0.533333 0.533333 0.533333 0.537255 0.533333 0.52549 0.537255 0.537255 0.52549 0.529412 0.529412 0.529412 0.533333 0.529412 0.517647 0.521569 0.52549 0.521569 0.513725 0.521569 0.501961 0.501961 0.498039 0.505882 0.486275 0.486275 0.486275 0.478431 0.47451 0.458824 0.462745 0.462745 0.443137 0.435294 0.439216 0.423529 0.423529 0.419608 0.407843 0.4 0.388235 0.380392 0.368627 0.372549 0.364706 0.345098 0.333333 0.329412 0.329412 0.317647 0.305882 0.301961 0.290196 0.266667 0.258824 0.25098 0.235294 0.231373 0.254902 0.231373 0.2 0.156863 0.137255 0.109804 0.152941 0.196078 0.14902 0.0352941 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.00392157 0.243137 0.462745 0.490196 0.435294 0.396078 0.317647 0.176471 0 0 0 0 0.0627451 0.164706 0.211765 0.266667 0.298039 0.333333 0.356863 0.384314 0.396078 0.407843 0.427451 0.423529 0.454902 0.454902 0.478431 0.478431 0.486275 0.494118 0.498039 0.498039 0.513725 0.517647 0.509804 0.513725 0.521569 0.533333 0.529412 0.513725 0.533333 0.52549 0.52549 0.529412 0.537255 0.517647 0.529412 0.533333 0.533333 0.529412 0.517647 0.513725 0.521569 0.521569 0.517647 0.521569 0.521569 0.501961 0.501961 0.505882 0.490196 0.501961 0.490196 0.486275 0.486275 0.470588 0.470588 0.462745 0.458824 0.458824 0.435294 0.443137 0.431373 0.423529 0.415686 0.407843 0.4 0.403922 0.388235 0.384314 0.376471 0.372549 0.360784 0.345098 0.345098 0.333333 0.321569 0.317647 0.298039 0.290196 0.278431 0.270588 0.254902 0.247059 0.231373 0.219608 0.258824 0.219608 0.196078 0.152941 0.12549 0.101961 0.117647 0.113725 0.0156863 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.227451 0.447059 0.494118 0.439216 0.384314 0.313725 0.172549 0 0 0 0 0.0196078 0.141176 0.2 0.247059 0.278431 0.317647 0.345098 0.376471 0.384314 0.4 0.407843 0.423529 0.447059 0.454902 0.454902 0.462745 0.482353 0.490196 0.490196 0.498039 0.513725 0.513725 0.513725 0.513725 0.509804 0.517647 0.521569 0.533333 0.533333 0.52549 0.517647 0.52549 0.52549 0.517647 0.529412 0.533333 0.521569 0.513725 0.513725 0.521569 0.517647 0.52549 0.521569 0.513725 0.517647 0.505882 0.498039 0.505882 0.501961 0.486275 0.482353 0.478431 0.478431 0.466667 0.458824 0.466667 0.454902 0.458824 0.439216 0.435294 0.435294 0.411765 0.419608 0.411765 0.392157 0.396078 0.384314 0.372549 0.372549 0.372549 0.352941 0.345098 0.329412 0.32549 0.313725 0.301961 0.286275 0.27451 0.270588 0.266667 0.243137 0.235294 0.203922 0.227451 0.258824 0.211765 0.188235 0.145098 0.113725 0.0941176 0.0627451 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0196078 0.258824 0.447059 0.494118 0.423529 0.352941 0.278431 0.141176 0 0 0 0 0 0.0980392 0.188235 0.219608 0.262745 0.309804 0.329412 0.34902 0.372549 0.396078 0.411765 0.411765 0.435294 0.443137 0.454902 0.462745 0.466667 0.47451 0.486275 0.478431 0.501961 0.505882 0.501961 0.505882 0.505882 0.517647 0.521569 0.509804 0.517647 0.52549 0.509804 0.521569 0.513725 0.521569 0.529412 0.513725 0.517647 0.513725 0.513725 0.517647 0.517647 0.501961 0.501961 0.509804 0.498039 0.498039 0.498039 0.501961 0.482353 0.486275 0.486275 0.470588 0.458824 0.470588 0.466667 0.454902 0.447059 0.435294 0.427451 0.423529 0.427451 0.415686 0.407843 0.4 0.388235 0.384314 0.384314 0.368627 0.360784 0.352941 0.34902 0.337255 0.321569 0.317647 0.305882 0.298039 0.282353 0.266667 0.262745 0.25098 0.235294 0.227451 0.207843 0.231373 0.25098 0.211765 0.184314 0.133333 0.105882 0.0745098 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0862745 0.313725 0.470588 0.501961 0.419608 0.337255 0.243137 0.105882 0 0 0 0 0 0.054902 0.160784 0.211765 0.25098 0.294118 0.313725 0.352941 0.364706 0.376471 0.407843 0.396078 0.419608 0.439216 0.439216 0.454902 0.462745 0.47451 0.47451 0.47451 0.486275 0.498039 0.498039 0.490196 0.509804 0.521569 0.509804 0.52549 0.509804 0.521569 0.513725 0.517647 0.517647 0.513725 0.505882 0.517647 0.505882 0.505882 0.509804 0.517647 0.505882 0.498039 0.494118 0.498039 0.498039 0.494118 0.482353 0.490196 0.478431 0.47451 0.47451 0.462745 0.466667 0.45098 0.45098 0.443137 0.443137 0.443137 0.431373 0.419608 0.427451 0.411765 0.396078 0.396078 0.384314 0.388235 0.368627 0.368627 0.34902 0.34902 0.337255 0.317647 0.313725 0.301961 0.290196 0.282353 0.282353 0.262745 0.254902 0.235294 0.231373 0.215686 0.2 0.239216 0.235294 0.196078 0.168627 0.117647 0.0941176 0.0392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0.396078 0.501961 0.486275 0.396078 0.309804 0.215686 0.0588235 0 0 0 0 0 0.0117647 0.137255 0.192157 0.243137 0.278431 0.309804 0.333333 0.360784 0.372549 0.388235 0.403922 0.411765 0.423529 0.431373 0.439216 0.443137 0.45098 0.466667 0.462745 0.478431 0.490196 0.498039 0.498039 0.498039 0.498039 0.501961 0.509804 0.509804 0.513725 0.505882 0.521569 0.509804 0.501961 0.505882 0.517647 0.501961 0.490196 0.513725 0.505882 0.490196 0.501961 0.494118 0.494118 0.498039 0.47451 0.478431 0.486275 0.470588 0.462745 0.462745 0.462745 0.462745 0.447059 0.45098 0.439216 0.431373 0.443137 0.423529 0.419608 0.419608 0.396078 0.403922 0.396078 0.380392 0.384314 0.364706 0.360784 0.34902 0.333333 0.341176 0.317647 0.313725 0.294118 0.294118 0.278431 0.266667 0.258824 0.239216 0.227451 0.223529 0.2 0.192157 0.239216 0.215686 0.196078 0.14902 0.101961 0.0823529 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.121569 0.321569 0.45098 0.537255 0.458824 0.364706 0.270588 0.168627 0.0156863 0 0 0 0 0 0 0.0901961 0.172549 0.207843 0.254902 0.298039 0.32549 0.341176 0.368627 0.376471 0.396078 0.407843 0.415686 0.423529 0.443137 0.443137 0.443137 0.466667 0.466667 0.470588 0.466667 0.47451 0.482353 0.494118 0.494118 0.494118 0.501961 0.490196 0.501961 0.501961 0.509804 0.505882 0.494118 0.509804 0.498039 0.509804 0.501961 0.505882 0.498039 0.494118 0.486275 0.505882 0.482353 0.490196 0.486275 0.47451 0.470588 0.470588 0.470588 0.466667 0.45098 0.454902 0.447059 0.439216 0.431373 0.427451 0.427451 0.411765 0.407843 0.4 0.392157 0.380392 0.384314 0.364706 0.368627 0.360784 0.34902 0.356863 0.333333 0.321569 0.309804 0.305882 0.294118 0.286275 0.27451 0.258824 0.25098 0.239216 0.231373 0.215686 0.2 0.192157 0.239216 0.203922 0.184314 0.141176 0.0980392 0.0470588 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0941176 0.27451 0.411765 0.52549 0.541176 0.443137 0.32549 0.235294 0.0941176 0 0 0 0 0 0 0 0.0431373 0.137255 0.196078 0.243137 0.27451 0.301961 0.329412 0.352941 0.372549 0.392157 0.4 0.407843 0.415686 0.423529 0.435294 0.443137 0.454902 0.439216 0.458824 0.47451 0.458824 0.466667 0.478431 0.478431 0.494118 0.490196 0.501961 0.486275 0.486275 0.494118 0.486275 0.498039 0.494118 0.490196 0.494118 0.498039 0.494118 0.498039 0.490196 0.490196 0.482353 0.494118 0.490196 0.47451 0.470588 0.478431 0.462745 0.466667 0.454902 0.454902 0.45098 0.439216 0.427451 0.435294 0.419608 0.411765 0.403922 0.407843 0.396078 0.384314 0.380392 0.368627 0.368627 0.368627 0.34902 0.337255 0.313725 0.317647 0.309804 0.305882 0.290196 0.278431 0.27451 0.266667 0.258824 0.239216 0.235294 0.223529 0.203922 0.184314 0.180392 0.235294 0.196078 0.180392 0.12549 0.0862745 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0941176 0.258824 0.392157 0.490196 0.572549 0.517647 0.392157 0.278431 0.188235 0.0431373 0 0 0 0 0 0 0 0 0.109804 0.172549 0.211765 0.25098 0.278431 0.309804 0.341176 0.360784 0.364706 0.392157 0.396078 0.407843 0.411765 0.427451 0.435294 0.443137 0.454902 0.458824 0.458824 0.462745 0.470588 0.466667 0.478431 0.482353 0.482353 0.482353 0.486275 0.494118 0.486275 0.482353 0.482353 0.486275 0.490196 0.490196 0.486275 0.478431 0.478431 0.478431 0.466667 0.478431 0.470588 0.454902 0.466667 0.466667 0.462745 0.45098 0.45098 0.45098 0.439216 0.427451 0.439216 0.431373 0.423529 0.407843 0.423529 0.396078 0.396078 0.380392 0.372549 0.372549 0.360784 0.34902 0.34902 0.345098 0.321569 0.32549 0.309804 0.305882 0.298039 0.27451 0.270588 0.262745 0.266667 0.239216 0.235294 0.227451 0.215686 0.188235 0.184314 0.184314 0.227451 0.196078 0.172549 0.117647 0.0705882 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.129412 0.262745 0.392157 0.47451 0.564706 0.576471 0.443137 0.321569 0.227451 0.101961 0.00392157 0 0 0 0 0 0 0 0 0.054902 0.152941 0.196078 0.231373 0.266667 0.301961 0.329412 0.356863 0.360784 0.384314 0.388235 0.396078 0.407843 0.419608 0.419608 0.435294 0.447059 0.454902 0.443137 0.458824 0.466667 0.462745 0.470588 0.466667 0.47451 0.478431 0.47451 0.47451 0.478431 0.47451 0.47451 0.494118 0.482353 0.478431 0.478431 0.482353 0.478431 0.47451 0.47451 0.47451 0.466667 0.47451 0.458824 0.45098 0.458824 0.447059 0.439216 0.443137 0.439216 0.439216 0.419608 0.423529 0.419608 0.415686 0.407843 0.396078 0.392157 0.384314 0.384314 0.368627 0.356863 0.356863 0.352941 0.333333 0.32549 0.329412 0.305882 0.313725 0.294118 0.282353 0.266667 0.262745 0.247059 0.235294 0.227451 0.207843 0.196078 0.188235 0.164706 0.180392 0.219608 0.192157 0.164706 0.105882 0.0392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0392157 0.196078 0.294118 0.392157 0.494118 0.584314 0.603922 0.501961 0.368627 0.25098 0.145098 0.0235294 0 0 0 0 0 0 0 0 0 0.00392157 0.121569 0.172549 0.211765 0.243137 0.286275 0.305882 0.329412 0.356863 0.360784 0.384314 0.392157 0.396078 0.403922 0.423529 0.427451 0.439216 0.439216 0.447059 0.435294 0.45098 0.458824 0.462745 0.470588 0.470588 0.466667 0.47451 0.47451 0.470588 0.478431 0.47451 0.478431 0.470588 0.47451 0.47451 0.462745 0.47451 0.470588 0.454902 0.462745 0.462745 0.458824 0.435294 0.447059 0.439216 0.439216 0.447059 0.427451 0.427451 0.427451 0.423529 0.415686 0.403922 0.4 0.392157 0.392157 0.384314 0.384314 0.372549 0.364706 0.352941 0.352941 0.337255 0.32549 0.32549 0.313725 0.294118 0.282353 0.286275 0.262745 0.258824 0.247059 0.239216 0.227451 0.215686 0.203922 0.188235 0.180392 0.160784 0.196078 0.215686 0.184314 0.168627 0.0862745 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0117647 0.156863 0.239216 0.32549 0.427451 0.517647 0.580392 0.611765 0.52549 0.396078 0.266667 0.176471 0.0431373 0 0 0 0 0 0 0 0 0 0 0 0.0745098 0.156863 0.196078 0.235294 0.262745 0.294118 0.309804 0.341176 0.352941 0.368627 0.372549 0.388235 0.407843 0.407843 0.411765 0.427451 0.427451 0.45098 0.443137 0.45098 0.454902 0.454902 0.458824 0.470588 0.458824 0.47451 0.470588 0.462745 0.458824 0.478431 0.462745 0.462745 0.458824 0.458824 0.470588 0.458824 0.466667 0.462745 0.45098 0.454902 0.454902 0.439216 0.439216 0.45098 0.443137 0.419608 0.431373 0.423529 0.419608 0.419608 0.407843 0.403922 0.4 0.388235 0.384314 0.376471 0.388235 0.364706 0.34902 0.356863 0.341176 0.333333 0.321569 0.317647 0.301961 0.298039 0.294118 0.278431 0.254902 0.25098 0.243137 0.235294 0.223529 0.207843 0.192157 0.180392 0.164706 0.164706 0.207843 0.207843 0.180392 0.164706 0.0588235 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0117647 0.156863 0.215686 0.294118 0.380392 0.470588 0.541176 0.611765 0.627451 0.54902 0.411765 0.278431 0.168627 0.0705882 0 0 0 0 0 0 0 0 0 0 0 0 0.0156863 0.121569 0.176471 0.207843 0.247059 0.278431 0.305882 0.32549 0.337255 0.352941 0.372549 0.384314 0.388235 0.396078 0.407843 0.411765 0.423529 0.431373 0.431373 0.439216 0.443137 0.45098 0.458824 0.45098 0.462745 0.454902 0.45098 0.462745 0.466667 0.462745 0.470588 0.458824 0.454902 0.462745 0.45098 0.458824 0.462745 0.45098 0.439216 0.439216 0.439216 0.435294 0.431373 0.431373 0.419608 0.423529 0.403922 0.415686 0.419608 0.4 0.388235 0.396078 0.376471 0.380392 0.380392 0.360784 0.34902 0.345098 0.345098 0.329412 0.32549 0.309804 0.298039 0.301961 0.290196 0.286275 0.27451 0.262745 0.247059 0.247059 0.227451 0.227451 0.2 0.196078 0.188235 0.168627 0.152941 0.156863 0.196078 0.196078 0.184314 0.121569 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0196078 0.0901961 0.184314 0.231373 0.290196 0.368627 0.443137 0.517647 0.592157 0.643137 0.623529 0.533333 0.396078 0.266667 0.168627 0.0627451 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0745098 0.156863 0.192157 0.227451 0.258824 0.282353 0.305882 0.329412 0.34902 0.356863 0.364706 0.380392 0.388235 0.396078 0.403922 0.4 0.415686 0.423529 0.431373 0.431373 0.439216 0.447059 0.439216 0.45098 0.454902 0.454902 0.458824 0.454902 0.45098 0.466667 0.45098 0.439216 0.45098 0.439216 0.45098 0.439216 0.443137 0.443137 0.447059 0.435294 0.423529 0.435294 0.435294 0.419608 0.407843 0.396078 0.396078 0.4 0.384314 0.388235 0.388235 0.368627 0.372549 0.364706 0.34902 0.34902 0.341176 0.341176 0.32549 0.313725 0.305882 0.290196 0.298039 0.282353 0.270588 0.270588 0.247059 0.231373 0.231373 0.227451 0.215686 0.2 0.184314 0.176471 0.160784 0.152941 0.152941 0.2 0.196078 0.172549 0.0745098 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0313725 0.101961 0.168627 0.215686 0.266667 0.317647 0.380392 0.454902 0.509804 0.584314 0.627451 0.654902 0.611765 0.505882 0.372549 0.239216 0.152941 0.0509804 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0352941 0.12549 0.176471 0.207843 0.247059 0.27451 0.298039 0.321569 0.341176 0.352941 0.372549 0.368627 0.380392 0.388235 0.396078 0.403922 0.415686 0.411765 0.427451 0.431373 0.435294 0.443137 0.439216 0.443137 0.439216 0.427451 0.439216 0.443137 0.447059 0.439216 0.439216 0.454902 0.439216 0.435294 0.439216 0.447059 0.431373 0.423529 0.431373 0.443137 0.423529 0.427451 0.415686 0.4 0.407843 0.4 0.392157 0.396078 0.384314 0.380392 0.376471 0.360784 0.352941 0.352941 0.34902 0.356863 0.333333 0.321569 0.321569 0.298039 0.301961 0.294118 0.290196 0.27451 0.258824 0.247059 0.247059 0.235294 0.223529 0.215686 0.2 0.192157 0.180392 0.176471 0.164706 0.137255 0.14902 0.211765 0.196078 0.145098 0.00392157 0 0 0 0 0 0 0 0 0 0 0.00784314 0.0980392 0.164706 0.196078 0.235294 0.270588 0.309804 0.360784 0.403922 0.470588 0.533333 0.584314 0.639216 0.670588 0.631373 0.564706 0.431373 0.313725 0.2 0.121569 0.0196078 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0784314 0.14902 0.184314 0.211765 0.258824 0.27451 0.305882 0.317647 0.341176 0.352941 0.360784 0.372549 0.392157 0.396078 0.403922 0.396078 0.396078 0.423529 0.411765 0.407843 0.423529 0.423529 0.423529 0.427451 0.435294 0.435294 0.427451 0.435294 0.439216 0.435294 0.419608 0.427451 0.427451 0.423529 0.427451 0.423529 0.431373 0.423529 0.423529 0.415686 0.415686 0.403922 0.403922 0.403922 0.396078 0.388235 0.392157 0.376471 0.376471 0.368627 0.34902 0.356863 0.345098 0.337255 0.333333 0.329412 0.317647 0.313725 0.294118 0.294118 0.282353 0.270588 0.258824 0.254902 0.254902 0.227451 0.211765 0.219608 0.203922 0.196078 0.188235 0.180392 0.164706 0.14902 0.133333 0.152941 0.211765 0.192157 0.113725 0 0 0 0 0 0.0117647 0.0235294 0.0823529 0.14902 0.188235 0.203922 0.235294 0.258824 0.290196 0.313725 0.356863 0.4 0.439216 0.501961 0.537255 0.607843 0.658824 0.694118 0.647059 0.580392 0.470588 0.356863 0.243137 0.168627 0.0823529 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0313725 0.121569 0.168627 0.2 0.235294 0.254902 0.286275 0.305882 0.321569 0.333333 0.360784 0.360784 0.372549 0.380392 0.384314 0.396078 0.403922 0.4 0.4 0.411765 0.423529 0.415686 0.415686 0.419608 0.419608 0.435294 0.427451 0.423529 0.427451 0.427451 0.427451 0.423529 0.427451 0.423529 0.431373 0.419608 0.419608 0.411765 0.415686 0.411765 0.403922 0.396078 0.396078 0.388235 0.388235 0.392157 0.372549 0.368627 0.364706 0.356863 0.341176 0.341176 0.333333 0.333333 0.337255 0.317647 0.305882 0.298039 0.298039 0.282353 0.27451 0.262745 0.258824 0.247059 0.235294 0.235294 0.207843 0.207843 0.2 0.184314 0.180392 0.160784 0.14902 0.141176 0.117647 0.156863 0.219608 0.176471 0.12549 0.0627451 0.0431373 0.0627451 0.109804 0.164706 0.196078 0.231373 0.231373 0.266667 0.305882 0.321569 0.34902 0.380392 0.407843 0.447059 0.494118 0.537255 0.580392 0.635294 0.85098 0.807843 0.65098 0.576471 0.47451 0.364706 0.254902 0.172549 0.105882 0.0196078 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0862745 0.145098 0.188235 0.207843 0.247059 0.270588 0.294118 0.309804 0.317647 0.345098 0.352941 0.368627 0.356863 0.364706 0.396078 0.396078 0.4 0.396078 0.407843 0.415686 0.411765 0.419608 0.419608 0.415686 0.419608 0.415686 0.419608 0.419608 0.415686 0.415686 0.431373 0.407843 0.415686 0.411765 0.419608 0.407843 0.407843 0.415686 0.4 0.396078 0.392157 0.396078 0.388235 0.380392 0.364706 0.372549 0.364706 0.360784 0.352941 0.341176 0.341176 0.333333 0.321569 0.321569 0.309804 0.294118 0.286275 0.282353 0.270588 0.266667 0.262745 0.258824 0.243137 0.231373 0.223529 0.211765 0.2 0.184314 0.188235 0.168627 0.156863 0.14902 0.129412 0.121569 0.164706 0.215686 0.172549 0.156863 0.12549 0.133333 0.172549 0.219608 0.270588 0.301961 0.317647 0.356863 0.392157 0.419608 0.435294 0.47451 0.509804 0.54902 0.576471 0.607843 0.784314 0.847059 0.670588 0.596078 0.517647 0.415686 0.321569 0.231373 0.152941 0.101961 0.0196078 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.027451 0.113725 0.164706 0.196078 0.227451 0.247059 0.27451 0.294118 0.309804 0.333333 0.337255 0.356863 0.356863 0.360784 0.376471 0.376471 0.384314 0.396078 0.4 0.392157 0.396078 0.4 0.415686 0.411765 0.407843 0.415686 0.411765 0.407843 0.411765 0.419608 0.415686 0.411765 0.407843 0.411765 0.4 0.403922 0.396078 0.392157 0.403922 0.392157 0.380392 0.384314 0.380392 0.376471 0.360784 0.360784 0.352941 0.345098 0.34902 0.329412 0.341176 0.317647 0.313725 0.309804 0.294118 0.290196 0.290196 0.270588 0.266667 0.258824 0.247059 0.247059 0.231373 0.215686 0.203922 0.196078 0.184314 0.176471 0.168627 0.152941 0.141176 0.137255 0.121569 0.105882 0.211765 0.247059 0.192157 0.239216 0.239216 0.27451 0.32549 0.368627 0.396078 0.419608 0.454902 0.482353 0.509804 0.541176 0.556863 0.6 0.631373 0.701961 0.721569 0.6 0.552941 0.482353 0.411765 0.32549 0.247059 0.176471 0.121569 0.0627451 0.0117647 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0823529 0.145098 0.184314 0.207843 0.235294 0.258824 0.282353 0.298039 0.301961 0.333333 0.337255 0.352941 0.360784 0.360784 0.376471 0.388235 0.380392 0.388235 0.396078 0.396078 0.4 0.396078 0.403922 0.407843 0.407843 0.411765 0.415686 0.4 0.415686 0.407843 0.4 0.411765 0.396078 0.4 0.4 0.4 0.4 0.388235 0.380392 0.384314 0.380392 0.364706 0.372549 0.360784 0.360784 0.34902 0.341176 0.337255 0.32549 0.321569 0.313725 0.309804 0.309804 0.290196 0.286275 0.278431 0.266667 0.262745 0.25098 0.239216 0.227451 0.227451 0.215686 0.203922 0.196078 0.180392 0.168627 0.156863 0.152941 0.133333 0.12549 0.109804 0.101961 0.192157 0.180392 0.254902 0.309804 0.368627 0.411765 0.462745 0.490196 0.52549 0.545098 0.556863 0.584314 0.615686 0.623529 0.627451 0.6 0.533333 0.494118 0.431373 0.368627 0.290196 0.223529 0.172549 0.121569 0.0666667 0.0235294 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0235294 0.113725 0.160784 0.192157 0.223529 0.247059 0.254902 0.282353 0.301961 0.313725 0.333333 0.329412 0.352941 0.360784 0.360784 0.372549 0.384314 0.384314 0.380392 0.392157 0.392157 0.396078 0.396078 0.396078 0.396078 0.411765 0.396078 0.388235 0.4 0.396078 0.388235 0.396078 0.403922 0.384314 0.388235 0.384314 0.396078 0.384314 0.376471 0.360784 0.368627 0.368627 0.364706 0.34902 0.352941 0.337255 0.333333 0.32549 0.329412 0.329412 0.309804 0.298039 0.294118 0.282353 0.27451 0.262745 0.258824 0.25098 0.243137 0.235294 0.231373 0.211765 0.207843 0.196078 0.184314 0.176471 0.156863 0.152941 0.145098 0.121569 0.113725 0.0941176 0.113725 0.160784 0.196078 0.345098 0.470588 0.478431 0.517647 0.560784 0.580392 0.580392 0.560784 0.541176 0.52549 0.482353 0.454902 0.403922 0.352941 0.301961 0.239216 0.196078 0.14902 0.109804 0.0666667 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0705882 0.141176 0.172549 0.203922 0.231373 0.25098 0.262745 0.286275 0.305882 0.317647 0.321569 0.333333 0.345098 0.356863 0.360784 0.364706 0.368627 0.376471 0.376471 0.392157 0.392157 0.380392 0.380392 0.396078 0.396078 0.396078 0.392157 0.392157 0.380392 0.392157 0.380392 0.376471 0.392157 0.380392 0.368627 0.392157 0.368627 0.356863 0.352941 0.356863 0.352941 0.341176 0.34902 0.337255 0.333333 0.329412 0.317647 0.309804 0.305882 0.298039 0.286275 0.278431 0.266667 0.27451 0.258824 0.25098 0.243137 0.227451 0.215686 0.215686 0.207843 0.196078 0.184314 0.176471 0.168627 0.145098 0.141176 0.133333 0.109804 0.0901961 0.0941176 0.113725 0.137255 0.231373 0.341176 0.423529 0.466667 0.470588 0.466667 0.443137 0.403922 0.380392 0.337255 0.309804 0.258824 0.219608 0.188235 0.145098 0.105882 0.0745098 0.0392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.00784314 0.105882 0.14902 0.184314 0.215686 0.239216 0.266667 0.282353 0.294118 0.305882 0.32549 0.321569 0.337255 0.345098 0.352941 0.34902 0.364706 0.364706 0.368627 0.384314 0.376471 0.376471 0.380392 0.384314 0.392157 0.376471 0.388235 0.388235 0.384314 0.384314 0.364706 0.376471 0.380392 0.368627 0.372549 0.368627 0.352941 0.364706 0.352941 0.34902 0.34902 0.341176 0.333333 0.341176 0.32549 0.32549 0.309804 0.301961 0.294118 0.286275 0.282353 0.27451 0.262745 0.262745 0.25098 0.243137 0.235294 0.227451 0.215686 0.211765 0.196078 0.184314 0.172549 0.164706 0.160784 0.145098 0.133333 0.117647 0.105882 0.0941176 0.0705882 0.0901961 0.141176 0.223529 0.266667 0.298039 0.298039 0.282353 0.254902 0.223529 0.196078 0.168627 0.145098 0.117647 0.0901961 0.054902 0.0235294 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0588235 0.12549 0.164706 0.196078 0.227451 0.247059 0.262745 0.278431 0.290196 0.305882 0.305882 0.329412 0.32549 0.341176 0.341176 0.356863 0.356863 0.368627 0.368627 0.360784 0.364706 0.372549 0.364706 0.372549 0.372549 0.384314 0.376471 0.380392 0.380392 0.372549 0.364706 0.364706 0.372549 0.352941 0.368627 0.360784 0.34902 0.352941 0.333333 0.341176 0.329412 0.333333 0.313725 0.309804 0.309804 0.298039 0.294118 0.286275 0.282353 0.27451 0.270588 0.254902 0.254902 0.243137 0.231373 0.207843 0.211765 0.207843 0.196078 0.192157 0.176471 0.164706 0.156863 0.14902 0.133333 0.12549 0.113725 0.0941176 0.0745098 0.0470588 0.0862745 0.12549 0.14902 0.141176 0.137255 0.12549 0.113725 0.0980392 0.0705882 0.0509804 0.0117647 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0862745 0.141176 0.172549 0.196078 0.223529 0.25098 0.262745 0.278431 0.294118 0.301961 0.321569 0.321569 0.337255 0.341176 0.341176 0.352941 0.345098 0.364706 0.368627 0.356863 0.364706 0.364706 0.376471 0.368627 0.368627 0.368627 0.364706 0.372549 0.360784 0.360784 0.364706 0.352941 0.364706 0.352941 0.34902 0.341176 0.345098 0.32549 0.341176 0.32549 0.313725 0.313725 0.309804 0.294118 0.301961 0.282353 0.266667 0.262745 0.258824 0.262745 0.243137 0.243137 0.235294 0.215686 0.215686 0.196078 0.196078 0.192157 0.168627 0.176471 0.156863 0.14902 0.141176 0.121569 0.113725 0.0980392 0.0745098 0.0509804 0.0352941 0.0705882 0.0745098 0.0470588 0.0431373 0.027451 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0156863 0.101961 0.145098 0.180392 0.211765 0.231373 0.25098 0.266667 0.282353 0.294118 0.298039 0.313725 0.32549 0.32549 0.341176 0.34902 0.345098 0.364706 0.356863 0.356863 0.368627 0.368627 0.356863 0.364706 0.364706 0.360784 0.352941 0.356863 0.356863 0.360784 0.360784 0.352941 0.34902 0.34902 0.333333 0.341176 0.337255 0.329412 0.321569 0.321569 0.317647 0.309804 0.290196 0.305882 0.286275 0.266667 0.278431 0.266667 0.25098 0.266667 0.243137 0.227451 0.223529 0.215686 0.207843 0.196078 0.188235 0.176471 0.172549 0.164706 0.14902 0.141176 0.12549 0.117647 0.105882 0.0862745 0.0627451 0.027451 0.0117647 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0431373 0.109804 0.152941 0.180392 0.219608 0.223529 0.247059 0.270588 0.286275 0.294118 0.305882 0.309804 0.32549 0.329412 0.333333 0.337255 0.345098 0.356863 0.341176 0.34902 0.34902 0.356863 0.356863 0.352941 0.356863 0.34902 0.360784 0.352941 0.352941 0.34902 0.345098 0.333333 0.345098 0.341176 0.32549 0.329412 0.321569 0.317647 0.313725 0.305882 0.298039 0.294118 0.294118 0.282353 0.270588 0.262745 0.25098 0.247059 0.239216 0.231373 0.227451 0.211765 0.211765 0.2 0.192157 0.180392 0.176471 0.160784 0.14902 0.141176 0.137255 0.117647 0.0980392 0.0941176 0.0705882 0.0313725 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0627451 0.121569 0.164706 0.188235 0.215686 0.243137 0.258824 0.266667 0.270588 0.294118 0.298039 0.301961 0.321569 0.32549 0.337255 0.329412 0.345098 0.34902 0.341176 0.337255 0.352941 0.34902 0.34902 0.345098 0.34902 0.34902 0.341176 0.341176 0.352941 0.333333 0.329412 0.333333 0.333333 0.32549 0.32549 0.317647 0.317647 0.301961 0.301961 0.298039 0.290196 0.27451 0.270588 0.254902 0.25098 0.25098 0.235294 0.239216 0.219608 0.215686 0.211765 0.2 0.192157 0.188235 0.188235 0.164706 0.152941 0.141176 0.141176 0.129412 0.109804 0.101961 0.0705882 0.0313725 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0588235 0.121569 0.156863 0.192157 0.219608 0.239216 0.254902 0.266667 0.282353 0.298039 0.298039 0.313725 0.317647 0.317647 0.329412 0.321569 0.32549 0.341176 0.333333 0.337255 0.337255 0.337255 0.337255 0.337255 0.337255 0.341176 0.32549 0.329412 0.345098 0.333333 0.321569 0.321569 0.317647 0.317647 0.305882 0.301961 0.298039 0.286275 0.282353 0.278431 0.27451 0.262745 0.262745 0.25098 0.239216 0.235294 0.223529 0.215686 0.203922 0.188235 0.188235 0.188235 0.180392 0.160784 0.152941 0.14902 0.141176 0.12549 0.113725 0.0862745 0.0705882 0.0470588 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0117647 0.0588235 0.0980392 0.141176 0.176471 0.2 0.235294 0.247059 0.262745 0.27451 0.278431 0.290196 0.305882 0.301961 0.317647 0.321569 0.317647 0.333333 0.32549 0.329412 0.333333 0.333333 0.32549 0.337255 0.321569 0.317647 0.32549 0.329412 0.313725 0.313725 0.321569 0.313725 0.309804 0.301961 0.298039 0.294118 0.286275 0.278431 0.266667 0.266667 0.254902 0.25098 0.243137 0.239216 0.227451 0.223529 0.219608 0.203922 0.207843 0.192157 0.188235 0.176471 0.176471 0.152941 0.14902 0.133333 0.121569 0.109804 0.0862745 0.0705882 0.0352941 0.0156863 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0392157 0.0901961 0.0980392 0.12549 0.168627 0.211765 0.211765 0.231373 0.262745 0.258824 0.27451 0.282353 0.290196 0.301961 0.309804 0.313725 0.309804 0.321569 0.32549 0.317647 0.321569 0.32549 0.317647 0.313725 0.321569 0.32549 0.317647 0.317647 0.298039 0.309804 0.298039 0.294118 0.301961 0.286275 0.27451 0.282353 0.270588 0.262745 0.254902 0.247059 0.239216 0.231373 0.231373 0.223529 0.219608 0.203922 0.2 0.188235 0.188235 0.172549 0.164706 0.14902 0.137255 0.129412 0.12549 0.0980392 0.0901961 0.0666667 0.027451 0.027451 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0352941 0.0901961 0.129412 0.109804 0.145098 0.172549 0.196078 0.211765 0.235294 0.247059 0.262745 0.270588 0.290196 0.298039 0.298039 0.298039 0.309804 0.301961 0.313725 0.305882 0.305882 0.329412 0.305882 0.317647 0.301961 0.301961 0.305882 0.298039 0.317647 0.294118 0.270588 0.286275 0.286275 0.270588 0.262745 0.262745 0.247059 0.247059 0.247059 0.235294 0.223529 0.231373 0.2 0.203922 0.2 0.180392 0.188235 0.164706 0.156863 0.145098 0.129412 0.117647 0.109804 0.0901961 0.0784314 0.054902 0.0588235 0.027451 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0352941 0.0862745 0.117647 0.156863 0.164706 0.145098 0.164706 0.188235 0.2 0.219608 0.227451 0.243137 0.247059 0.262745 0.278431 0.286275 0.290196 0.290196 0.286275 0.298039 0.294118 0.301961 0.294118 0.298039 0.286275 0.298039 0.286275 0.282353 0.270588 0.27451 0.270588 0.258824 0.258824 0.254902 0.239216 0.239216 0.235294 0.231373 0.219608 0.207843 0.2 0.196078 0.188235 0.172549 0.168627 0.152941 0.145098 0.129412 0.121569 0.113725 0.0941176 0.0862745 0.0823529 0.0745098 0.0509804 0.0313725 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.00392157 0.0901961 0.113725 0.141176 0.176471 0.196078 0.196078 0.184314 0.172549 0.188235 0.211765 0.207843 0.219608 0.243137 0.243137 0.25098 0.247059 0.262745 0.262745 0.258824 0.266667 0.278431 0.258824 0.262745 0.270588 0.258824 0.266667 0.25098 0.247059 0.239216 0.235294 0.239216 0.223529 0.219608 0.203922 0.207843 0.2 0.184314 0.192157 0.180392 0.176471 0.152941 0.164706 0.137255 0.133333 0.117647 0.101961 0.105882 0.113725 0.0980392 0.0823529 0.0627451 0.054902 0.0235294 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0392157 0.113725 0.129412 0.152941 0.172549 0.2 0.215686 0.223529 0.211765 0.196078 0.196078 0.192157 0.2 0.196078 0.215686 0.219608 0.219608 0.227451 0.227451 0.223529 0.235294 0.231373 0.235294 0.223529 0.223529 0.223529 0.219608 0.203922 0.203922 0.196078 0.2 0.2 0.188235 0.180392 0.172549 0.168627 0.160784 0.145098 0.141176 0.129412 0.129412 0.12549 0.133333 0.141176 0.12549 0.121569 0.101961 0.0862745 0.0666667 0.0392157 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0235294 0.0392157 0.109804 0.152941 0.172549 0.164706 0.176471 0.192157 0.207843 0.227451 0.243137 0.243137 0.243137 0.235294 0.219608 0.219608 0.207843 0.207843 0.196078 0.196078 0.196078 0.192157 0.188235 0.196078 0.172549 0.180392 0.172549 0.164706 0.172549 0.168627 0.168627 0.164706 0.168627 0.172549 0.164706 0.168627 0.176471 0.168627 0.160784 0.164706 0.137255 0.121569 0.109804 0.0980392 0.0901961 0.0823529 0.0509804 0.0196078 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0235294 0.0588235 0.0470588 0.0862745 0.121569 0.168627 0.188235 0.196078 0.188235 0.196078 0.184314 0.196078 0.207843 0.219608 0.219608 0.239216 0.243137 0.243137 0.239216 0.247059 0.235294 0.239216 0.231373 0.235294 0.231373 0.219608 0.219608 0.207843 0.203922 0.196078 0.203922 0.184314 0.180392 0.164706 0.152941 0.145098 0.129412 0.137255 0.137255 0.14902 0.145098 0.113725 0.0862745 0.0509804 0.0313725 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0352941 0.168627 0.133333 0.0588235 0.0745098 0.0901961 0.105882 0.137255 0.164706 0.188235 0.207843 0.211765 0.207843 0.203922 0.207843 0.188235 0.196078 0.192157 0.192157 0.184314 0.188235 0.180392 0.192157 0.176471 0.172549 0.164706 0.164706 0.156863 0.164706 0.164706 0.14902 0.156863 0.145098 0.156863 0.141176 0.141176 0.160784 0.188235 0.180392 0.156863 0.113725 0.0666667 0.0588235 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0156863 0.0588235 0.0627451 0.0588235 0.0470588 0.0588235 0.0666667 0.0862745 0.0941176 0.105882 0.117647 0.129412 0.14902 0.168627 0.176471 0.188235 0.192157 0.184314 0.180392 0.196078 0.180392 0.176471 0.172549 0.172549 0.164706 0.152941 0.137255 0.137255 0.121569 0.109804 0.0941176 0.0980392 0.145098 0.176471 0.196078 0.156863 0.133333 0.0980392 0.0980392 0.0431373 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0156863 0.0392157 0.105882 0.0862745 0.0470588 0.054902 0.0666667 0.0705882 0.0784314 0.0862745 0.0862745 0.0941176 0.0941176 0.0980392 0.0941176 0.0980392 0.0901961 0.0980392 0.101961 0.0941176 0.0823529 0.0901961 0.0745098 0.0784314 0.0666667 0.0980392 0.129412 0.141176 0.117647 0.14902 0.129412 0.0588235 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0196078 0.0784314 0.117647 0.105882 0.0980392 0.0862745 0.0745098 0.0627451 0.0509804 0.0509804 0.0588235 0.0509804 0.0627451 0.0588235 0.0431373 0.0666667 0.0627451 0.109804 0.141176 0.160784 0.14902 0.129412 0.0627451 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.027451 0.0588235 0.101961 0.156863 0.2 0.235294 0.27451 0.301961 0.313725 0.317647 0.32549 0.313725 0.301961 0.270588 0.235294 0.188235 0.133333 0.0901961 0.0470588 0.027451 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0392157 0.0784314 0.141176 0.243137 0.368627 0.47451 0.537255 0.576471 0.596078 0.623529 0.627451 0.639216 0.647059 0.654902 0.643137 0.662745 0.662745 0.666667 0.666667 0.654902 0.678431 0.713725 0.784314 0.772549 0.776471 0.772549 0.752941 0.694118 0.690196 0.682353 0.670588 0.658824 0.643137 0.627451 0.596078 0.545098 0.45098 0.321569 0.215686 0.137255 0.0666667 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.00392157 0.129412 0.262745 0.368627 0.494118 0.556863 0.584314 0.603922 0.611765 0.603922 0.619608 0.615686 0.607843 0.607843 0.611765 0.592157 0.588235 0.584314 0.572549 0.568627 0.560784 0.556863 0.54902 0.556863 0.556863 0.545098 0.560784 0.619608 0.807843 0.823529 0.819608 0.803922 0.764706 0.662745 0.662745 0.658824 0.65098 0.654902 0.662745 0.666667 0.67451 0.678431 0.678431 0.654902 0.65098 0.647059 0.631373 0.603922 0.533333 0.423529 0.309804 0.160784 0.0313725 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0117647 0.231373 0.403922 0.494118 0.545098 0.564706 0.576471 0.584314 0.572549 0.560784 0.560784 0.560784 0.533333 0.509804 0.494118 0.458824 0.431373 0.423529 0.411765 0.388235 0.360784 0.345098 0.352941 0.356863 0.333333 0.329412 0.341176 0.32549 0.333333 0.341176 0.341176 0.372549 0.458824 0.454902 0.368627 0.368627 0.372549 0.380392 0.372549 0.4 0.423529 0.443137 0.454902 0.478431 0.513725 0.560784 0.631373 0.709804 0.882353 1 0.905882 0.717647 0.678431 0.690196 0.658824 0.643137 0.615686 0.552941 0.45098 0.243137 0.054902 0.0196078 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0156863 0.117647 0.372549 0.490196 0.521569 0.54902 0.560784 0.54902 0.537255 0.533333 0.501961 0.486275 0.45098 0.415686 0.384314 0.368627 0.32549 0.294118 0.270588 0.270588 0.282353 0.282353 0.282353 0.278431 0.282353 0.282353 0.313725 0.301961 0.270588 0.278431 0.298039 0.270588 0.278431 0.329412 0.498039 0.647059 0.341176 0.329412 0.32549 0.294118 0.290196 0.294118 0.305882 0.290196 0.294118 0.298039 0.290196 0.294118 0.313725 0.32549 0.317647 0.345098 0.360784 0.384314 0.407843 0.447059 0.490196 0.52549 0.560784 0.592157 0.607843 0.631373 0.639216 0.627451 0.607843 0.564706 0.423529 0.180392 0.0666667 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.164706 0.372549 0.490196 0.501961 0.517647 0.529412 0.513725 0.490196 0.466667 0.423529 0.388235 0.34902 0.317647 0.298039 0.278431 0.262745 0.266667 0.258824 0.25098 0.227451 0.223529 0.247059 0.254902 0.258824 0.258824 0.262745 0.25098 0.266667 0.298039 0.294118 0.258824 0.290196 0.52549 0.258824 0.266667 0.321569 0.894118 0.988235 0.607843 0.341176 0.356863 0.313725 0.266667 0.27451 0.278431 0.258824 0.266667 0.266667 0.262745 0.278431 0.27451 0.286275 0.290196 0.305882 0.298039 0.309804 0.313725 0.32549 0.329412 0.333333 0.345098 0.380392 0.431373 0.462745 0.521569 0.568627 0.6 0.615686 0.611765 0.611765 0.576471 0.447059 0.25098 0.0627451 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0156863 0.313725 0.45098 0.470588 0.478431 0.501961 0.490196 0.45098 0.423529 0.364706 0.321569 0.290196 0.254902 0.243137 0.231373 0.243137 0.231373 0.235294 0.239216 0.235294 0.235294 0.223529 0.219608 0.219608 0.231373 0.239216 0.239216 0.25098 0.235294 0.243137 0.247059 0.278431 0.298039 0.247059 0.243137 0.266667 0.25098 0.262745 0.337255 0.427451 0.521569 0.321569 0.278431 0.278431 0.278431 0.262745 0.258824 0.262745 0.243137 0.254902 0.254902 0.25098 0.270588 0.27451 0.27451 0.278431 0.27451 0.286275 0.282353 0.286275 0.294118 0.294118 0.286275 0.305882 0.298039 0.305882 0.317647 0.333333 0.372549 0.415686 0.454902 0.521569 0.560784 0.588235 0.603922 0.580392 0.556863 0.435294 0.172549 0.0235294 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.027451 0.341176 0.447059 0.458824 0.439216 0.45098 0.435294 0.388235 0.337255 0.278431 0.239216 0.227451 0.219608 0.219608 0.211765 0.207843 0.207843 0.203922 0.223529 0.211765 0.223529 0.219608 0.223529 0.219608 0.203922 0.2 0.227451 0.235294 0.243137 0.231373 0.235294 0.223529 0.235294 0.270588 0.27451 0.235294 0.231373 0.247059 0.223529 0.258824 0.278431 0.317647 0.294118 0.282353 0.266667 0.25098 0.254902 0.266667 0.258824 0.254902 0.258824 0.243137 0.243137 0.239216 0.254902 0.258824 0.258824 0.262745 0.247059 0.247059 0.266667 0.266667 0.266667 0.286275 0.278431 0.282353 0.270588 0.278431 0.286275 0.27451 0.278431 0.282353 0.290196 0.317647 0.364706 0.423529 0.501961 0.545098 0.572549 0.564706 0.541176 0.498039 0.227451 0.0352941 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.00784314 0.27451 0.431373 0.423529 0.407843 0.4 0.380392 0.333333 0.27451 0.235294 0.211765 0.188235 0.196078 0.188235 0.188235 0.2 0.180392 0.196078 0.2 0.203922 0.2 0.2 0.211765 0.215686 0.215686 0.207843 0.196078 0.184314 0.2 0.231373 0.231373 0.235294 0.223529 0.219608 0.2 0.243137 0.270588 0.243137 0.239216 0.235294 0.235294 0.227451 0.262745 0.286275 0.286275 0.262745 0.25098 0.25098 0.258824 0.239216 0.247059 0.254902 0.25098 0.239216 0.243137 0.235294 0.243137 0.25098 0.247059 0.243137 0.223529 0.266667 0.270588 0.254902 0.266667 0.25098 0.266667 0.282353 0.25098 0.258824 0.27451 0.247059 0.25098 0.247059 0.270588 0.254902 0.27451 0.290196 0.317647 0.368627 0.45098 0.513725 0.541176 0.552941 0.533333 0.47451 0.207843 0.0196078 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.117647 0.388235 0.411765 0.380392 0.364706 0.341176 0.294118 0.247059 0.219608 0.2 0.180392 0.180392 0.172549 0.188235 0.164706 0.176471 0.192157 0.192157 0.2 0.196078 0.180392 0.2 0.2 0.215686 0.207843 0.215686 0.211765 0.188235 0.188235 0.203922 0.219608 0.235294 0.207843 0.207843 0.219608 0.219608 0.243137 0.258824 0.235294 0.223529 0.231373 0.231373 0.247059 0.25098 0.282353 0.266667 0.258824 0.247059 0.243137 0.25098 0.243137 0.243137 0.243137 0.235294 0.231373 0.235294 0.239216 0.235294 0.239216 0.231373 0.235294 0.223529 0.266667 0.266667 0.258824 0.25098 0.243137 0.266667 0.278431 0.247059 0.247059 0.243137 0.239216 0.243137 0.243137 0.235294 0.25098 0.243137 0.258824 0.25098 0.258824 0.278431 0.337255 0.427451 0.486275 0.517647 0.517647 0.505882 0.403922 0.105882 0.00392157 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.176471 0.407843 0.384314 0.345098 0.321569 0.278431 0.215686 0.188235 0.164706 0.160784 0.145098 0.156863 0.156863 0.14902 0.152941 0.172549 0.172549 0.168627 0.164706 0.180392 0.196078 0.188235 0.184314 0.192157 0.184314 0.188235 0.196078 0.196078 0.188235 0.188235 0.203922 0.215686 0.211765 0.207843 0.207843 0.211765 0.207843 0.227451 0.25098 0.223529 0.211765 0.219608 0.231373 0.231373 0.239216 0.254902 0.262745 0.262745 0.254902 0.235294 0.235294 0.243137 0.243137 0.247059 0.223529 0.235294 0.227451 0.231373 0.239216 0.215686 0.219608 0.231373 0.235294 0.25098 0.262745 0.243137 0.243137 0.247059 0.227451 0.243137 0.227451 0.239216 0.239216 0.243137 0.239216 0.266667 0.278431 0.266667 0.270588 0.25098 0.243137 0.243137 0.27451 0.254902 0.278431 0.317647 0.415686 0.470588 0.501961 0.498039 0.466667 0.215686 0.027451 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14902 0.392157 0.360784 0.309804 0.286275 0.25098 0.176471 0.160784 0.145098 0.133333 0.145098 0.133333 0.137255 0.141176 0.145098 0.145098 0.160784 0.145098 0.156863 0.156863 0.160784 0.184314 0.192157 0.196078 0.192157 0.172549 0.176471 0.176471 0.180392 0.192157 0.188235 0.188235 0.184314 0.196078 0.192157 0.196078 0.203922 0.196078 0.2 0.203922 0.203922 0.203922 0.203922 0.215686 0.227451 0.215686 0.223529 0.223529 0.231373 0.231373 0.223529 0.227451 0.223529 0.215686 0.223529 0.223529 0.211765 0.227451 0.227451 0.227451 0.215686 0.223529 0.223529 0.219608 0.223529 0.231373 0.227451 0.223529 0.227451 0.219608 0.227451 0.219608 0.223529 0.207843 0.223529 0.227451 0.207843 0.227451 0.223529 0.231373 0.235294 0.223529 0.227451 0.231373 0.227451 0.239216 0.266667 0.282353 0.337255 0.419608 0.470588 0.482353 0.458824 0.286275 0.0392157 0.0156863 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0745098 0.392157 0.345098 0.286275 0.262745 0.211765 0.152941 0.137255 0.145098 0.133333 0.12549 0.129412 0.137255 0.12549 0.145098 0.141176 0.14902 0.14902 0.14902 0.152941 0.145098 0.145098 0.156863 0.156863 0.176471 0.160784 0.164706 0.172549 0.164706 0.184314 0.176471 0.180392 0.180392 0.180392 0.188235 0.192157 0.180392 0.196078 0.2 0.192157 0.188235 0.192157 0.2 0.203922 0.2 0.2 0.2 0.211765 0.207843 0.207843 0.207843 0.219608 0.215686 0.207843 0.211765 0.223529 0.219608 0.211765 0.223529 0.215686 0.219608 0.223529 0.219608 0.219608 0.219608 0.215686 0.207843 0.211765 0.215686 0.211765 0.231373 0.219608 0.211765 0.215686 0.223529 0.223529 0.207843 0.215686 0.215686 0.215686 0.219608 0.223529 0.207843 0.219608 0.211765 0.211765 0.211765 0.227451 0.231373 0.247059 0.309804 0.388235 0.439216 0.470588 0.45098 0.278431 0.0196078 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.294118 0.368627 0.278431 0.262745 0.196078 0.141176 0.12549 0.129412 0.12549 0.12549 0.121569 0.129412 0.133333 0.141176 0.141176 0.133333 0.137255 0.141176 0.152941 0.156863 0.152941 0.152941 0.156863 0.160784 0.164706 0.172549 0.168627 0.172549 0.168627 0.180392 0.180392 0.176471 0.184314 0.180392 0.176471 0.2 0.180392 0.192157 0.180392 0.192157 0.192157 0.192157 0.2 0.219608 0.2 0.215686 0.211765 0.211765 0.223529 0.211765 0.219608 0.207843 0.207843 0.235294 0.211765 0.196078 0.211765 0.211765 0.223529 0.203922 0.207843 0.223529 0.215686 0.2 0.219608 0.219608 0.231373 0.219608 0.219608 0.231373 0.211765 0.215686 0.207843 0.219608 0.211765 0.215686 0.211765 0.211765 0.203922 0.207843 0.207843 0.211765 0.219608 0.203922 0.207843 0.196078 0.2 0.211765 0.223529 0.207843 0.207843 0.262745 0.384314 0.411765 0.427451 0.411765 0.219608 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.027451 0.376471 0.329412 0.247059 0.203922 0.141176 0.117647 0.109804 0.113725 0.113725 0.117647 0.117647 0.121569 0.129412 0.133333 0.133333 0.137255 0.137255 0.14902 0.14902 0.152941 0.14902 0.152941 0.156863 0.156863 0.160784 0.168627 0.156863 0.156863 0.176471 0.172549 0.172549 0.172549 0.176471 0.184314 0.172549 0.192157 0.176471 0.192157 0.192157 0.196078 0.188235 0.2 0.192157 0.2 0.211765 0.2 0.211765 0.207843 0.211765 0.211765 0.219608 0.207843 0.211765 0.211765 0.203922 0.223529 0.215686 0.211765 0.211765 0.211765 0.207843 0.219608 0.211765 0.223529 0.215686 0.211765 0.207843 0.211765 0.223529 0.211765 0.211765 0.215686 0.207843 0.215686 0.215686 0.215686 0.2 0.219608 0.211765 0.203922 0.215686 0.2 0.196078 0.196078 0.2 0.2 0.192157 0.211765 0.2 0.207843 0.203922 0.2 0.258824 0.360784 0.380392 0.415686 0.34902 0.0666667 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.105882 0.407843 0.313725 0.215686 0.145098 0.113725 0.101961 0.105882 0.0980392 0.105882 0.0980392 0.117647 0.117647 0.12549 0.129412 0.12549 0.12549 0.145098 0.141176 0.145098 0.152941 0.152941 0.152941 0.141176 0.152941 0.156863 0.164706 0.160784 0.160784 0.164706 0.172549 0.172549 0.176471 0.184314 0.184314 0.184314 0.192157 0.176471 0.184314 0.2 0.184314 0.196078 0.192157 0.207843 0.2 0.207843 0.207843 0.211765 0.207843 0.219608 0.219608 0.215686 0.219608 0.211765 0.211765 0.211765 0.215686 0.219608 0.211765 0.196078 0.203922 0.215686 0.219608 0.207843 0.215686 0.215686 0.207843 0.215686 0.227451 0.219608 0.211765 0.215686 0.215686 0.196078 0.211765 0.211765 0.211765 0.207843 0.2 0.211765 0.207843 0.203922 0.207843 0.2 0.196078 0.188235 0.192157 0.2 0.196078 0.2 0.188235 0.180392 0.188235 0.2 0.270588 0.360784 0.376471 0.380392 0.160784 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0862745 0.407843 0.345098 0.215686 0.121569 0.101961 0.105882 0.101961 0.0941176 0.0980392 0.0980392 0.109804 0.113725 0.113725 0.117647 0.12549 0.117647 0.133333 0.141176 0.137255 0.137255 0.141176 0.137255 0.152941 0.152941 0.156863 0.14902 0.160784 0.160784 0.156863 0.168627 0.172549 0.180392 0.180392 0.172549 0.180392 0.184314 0.184314 0.188235 0.184314 0.188235 0.184314 0.207843 0.196078 0.188235 0.196078 0.215686 0.2 0.211765 0.203922 0.207843 0.227451 0.211765 0.211765 0.215686 0.207843 0.207843 0.207843 0.207843 0.203922 0.215686 0.211765 0.223529 0.211765 0.211765 0.219608 0.207843 0.215686 0.211765 0.196078 0.2 0.196078 0.211765 0.211765 0.207843 0.211765 0.207843 0.196078 0.203922 0.203922 0.211765 0.207843 0.188235 0.203922 0.184314 0.203922 0.188235 0.180392 0.188235 0.180392 0.176471 0.176471 0.184314 0.176471 0.203922 0.321569 0.356863 0.388235 0.239216 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.117647 0.415686 0.403922 0.223529 0.109804 0.105882 0.0980392 0.0784314 0.0901961 0.0941176 0.0862745 0.0862745 0.109804 0.101961 0.105882 0.113725 0.121569 0.113725 0.129412 0.121569 0.145098 0.12549 0.14902 0.141176 0.145098 0.156863 0.152941 0.160784 0.164706 0.156863 0.160784 0.160784 0.164706 0.172549 0.164706 0.176471 0.176471 0.184314 0.180392 0.184314 0.196078 0.188235 0.196078 0.192157 0.196078 0.203922 0.196078 0.211765 0.196078 0.211765 0.203922 0.207843 0.196078 0.207843 0.211765 0.207843 0.2 0.215686 0.203922 0.211765 0.211765 0.223529 0.219608 0.215686 0.211765 0.203922 0.203922 0.203922 0.2 0.211765 0.207843 0.207843 0.223529 0.2 0.211765 0.2 0.192157 0.203922 0.180392 0.196078 0.2 0.184314 0.2 0.180392 0.188235 0.192157 0.180392 0.168627 0.176471 0.180392 0.172549 0.168627 0.172549 0.172549 0.184314 0.298039 0.352941 0.380392 0.231373 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0627451 0.341176 0.482353 0.364706 0.160784 0.0980392 0.0901961 0.0901961 0.0862745 0.0941176 0.0941176 0.0901961 0.0980392 0.0901961 0.0980392 0.0980392 0.0941176 0.0901961 0.113725 0.109804 0.117647 0.129412 0.133333 0.117647 0.133333 0.141176 0.133333 0.137255 0.14902 0.152941 0.152941 0.152941 0.156863 0.160784 0.156863 0.168627 0.164706 0.168627 0.160784 0.172549 0.176471 0.176471 0.184314 0.180392 0.188235 0.180392 0.184314 0.180392 0.184314 0.196078 0.188235 0.184314 0.203922 0.192157 0.196078 0.192157 0.196078 0.2 0.2 0.192157 0.188235 0.2 0.196078 0.192157 0.196078 0.192157 0.203922 0.207843 0.2 0.192157 0.192157 0.188235 0.184314 0.188235 0.2 0.188235 0.184314 0.192157 0.192157 0.180392 0.188235 0.172549 0.176471 0.184314 0.168627 0.172549 0.172549 0.164706 0.176471 0.164706 0.164706 0.168627 0.152941 0.156863 0.164706 0.278431 0.34902 0.368627 0.219608 0.0156863 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0627451 0.282353 0.454902 0.501961 0.356863 0.121569 0.0980392 0.0941176 0.0784314 0.0862745 0.0941176 0.0862745 0.0941176 0.101961 0.0862745 0.0941176 0.0941176 0.101961 0.0941176 0.109804 0.117647 0.113725 0.117647 0.133333 0.129412 0.137255 0.133333 0.137255 0.137255 0.137255 0.133333 0.141176 0.133333 0.164706 0.152941 0.152941 0.152941 0.160784 0.164706 0.160784 0.156863 0.164706 0.168627 0.176471 0.172549 0.172549 0.180392 0.176471 0.180392 0.192157 0.176471 0.196078 0.176471 0.188235 0.180392 0.192157 0.196078 0.188235 0.180392 0.196078 0.184314 0.192157 0.2 0.188235 0.188235 0.192157 0.196078 0.184314 0.172549 0.188235 0.192157 0.180392 0.188235 0.172549 0.188235 0.184314 0.180392 0.192157 0.172549 0.180392 0.180392 0.180392 0.172549 0.168627 0.180392 0.172549 0.168627 0.168627 0.172549 0.164706 0.164706 0.156863 0.164706 0.156863 0.188235 0.321569 0.407843 0.337255 0.168627 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0431373 0.231373 0.372549 0.498039 0.556863 0.392157 0.14902 0.105882 0.101961 0.0941176 0.0784314 0.0901961 0.0941176 0.0705882 0.0901961 0.0823529 0.0901961 0.0980392 0.101961 0.101961 0.113725 0.105882 0.113725 0.129412 0.117647 0.12549 0.129412 0.152941 0.141176 0.133333 0.14902 0.14902 0.14902 0.164706 0.156863 0.152941 0.160784 0.14902 0.168627 0.156863 0.172549 0.164706 0.156863 0.180392 0.176471 0.180392 0.176471 0.168627 0.172549 0.184314 0.188235 0.188235 0.180392 0.196078 0.188235 0.184314 0.196078 0.192157 0.192157 0.188235 0.184314 0.188235 0.192157 0.188235 0.192157 0.180392 0.180392 0.184314 0.180392 0.188235 0.176471 0.188235 0.184314 0.188235 0.176471 0.176471 0.168627 0.176471 0.176471 0.180392 0.180392 0.168627 0.180392 0.164706 0.164706 0.164706 0.168627 0.168627 0.156863 0.160784 0.160784 0.14902 0.14902 0.160784 0.298039 0.4 0.392157 0.270588 0.145098 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0196078 0.196078 0.298039 0.407843 0.521569 0.596078 0.513725 0.262745 0.121569 0.109804 0.0980392 0.0862745 0.0901961 0.0862745 0.0901961 0.101961 0.0901961 0.105882 0.101961 0.101961 0.105882 0.113725 0.117647 0.117647 0.117647 0.12549 0.12549 0.133333 0.137255 0.133333 0.14902 0.152941 0.145098 0.156863 0.160784 0.160784 0.164706 0.14902 0.168627 0.160784 0.172549 0.164706 0.180392 0.176471 0.164706 0.164706 0.188235 0.188235 0.180392 0.172549 0.188235 0.188235 0.192157 0.188235 0.188235 0.192157 0.192157 0.184314 0.180392 0.184314 0.184314 0.172549 0.188235 0.184314 0.192157 0.184314 0.192157 0.180392 0.188235 0.184314 0.180392 0.184314 0.184314 0.192157 0.192157 0.188235 0.176471 0.184314 0.172549 0.172549 0.168627 0.176471 0.184314 0.160784 0.164706 0.160784 0.160784 0.156863 0.156863 0.14902 0.14902 0.152941 0.14902 0.290196 0.403922 0.4 0.321569 0.227451 0.129412 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.160784 0.270588 0.345098 0.439216 0.552941 0.619608 0.615686 0.498039 0.247059 0.117647 0.117647 0.105882 0.0941176 0.0901961 0.0901961 0.0980392 0.105882 0.101961 0.101961 0.109804 0.109804 0.121569 0.121569 0.12549 0.133333 0.129412 0.129412 0.137255 0.137255 0.141176 0.145098 0.145098 0.145098 0.145098 0.152941 0.160784 0.152941 0.156863 0.172549 0.152941 0.168627 0.172549 0.160784 0.164706 0.176471 0.180392 0.160784 0.180392 0.188235 0.176471 0.184314 0.184314 0.184314 0.192157 0.176471 0.184314 0.192157 0.188235 0.188235 0.180392 0.192157 0.188235 0.188235 0.188235 0.180392 0.184314 0.192157 0.176471 0.192157 0.196078 0.192157 0.184314 0.192157 0.188235 0.176471 0.180392 0.172549 0.180392 0.172549 0.160784 0.160784 0.168627 0.176471 0.164706 0.172549 0.152941 0.141176 0.164706 0.145098 0.141176 0.215686 0.396078 0.454902 0.411765 0.345098 0.278431 0.196078 0.101961 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12549 0.235294 0.298039 0.380392 0.435294 0.509804 0.596078 0.654902 0.654902 0.556863 0.305882 0.156863 0.12549 0.117647 0.101961 0.0901961 0.0980392 0.101961 0.0980392 0.105882 0.0980392 0.109804 0.113725 0.121569 0.12549 0.12549 0.113725 0.133333 0.141176 0.133333 0.141176 0.145098 0.145098 0.156863 0.145098 0.164706 0.164706 0.168627 0.168627 0.168627 0.160784 0.168627 0.176471 0.180392 0.172549 0.168627 0.184314 0.188235 0.184314 0.184314 0.188235 0.188235 0.192157 0.203922 0.196078 0.188235 0.176471 0.188235 0.192157 0.196078 0.192157 0.184314 0.2 0.207843 0.192157 0.196078 0.188235 0.184314 0.188235 0.192157 0.184314 0.176471 0.184314 0.192157 0.180392 0.164706 0.180392 0.188235 0.164706 0.172549 0.168627 0.164706 0.172549 0.164706 0.168627 0.152941 0.14902 0.152941 0.2 0.388235 0.470588 0.470588 0.435294 0.384314 0.301961 0.25098 0.184314 0.0666667 0 0 0 0 0 0 0 0 0 0 0 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0980392 0.203922 0.282353 0.34902 0.403922 0.45098 0.498039 0.552941 0.615686 0.666667 0.701961 0.654902 0.482353 0.258824 0.168627 0.129412 0.113725 0.113725 0.109804 0.109804 0.109804 0.113725 0.117647 0.117647 0.12549 0.117647 0.141176 0.121569 0.137255 0.137255 0.141176 0.145098 0.152941 0.156863 0.152941 0.156863 0.160784 0.164706 0.164706 0.160784 0.168627 0.168627 0.176471 0.180392 0.168627 0.180392 0.184314 0.192157 0.180392 0.180392 0.203922 0.188235 0.188235 0.192157 0.176471 0.180392 0.196078 0.184314 0.196078 0.184314 0.192157 0.2 0.192157 0.192157 0.184314 0.180392 0.180392 0.184314 0.192157 0.184314 0.188235 0.188235 0.184314 0.180392 0.184314 0.180392 0.184314 0.168627 0.172549 0.172549 0.168627 0.172549 0.168627 0.160784 0.152941 0.188235 0.278431 0.435294 0.498039 0.498039 0.470588 0.415686 0.372549 0.341176 0.313725 0.270588 0.168627 0.0352941 0 0 0 0 0.00784314 0.0627451 0.184314 0.301961 0.337255 0.372549 0.388235 0.392157 0.407843 0.396078 0.372549 0.345098 0.301961 0.168627 0.0392157 0 0 0 0 0 0 0 0 0 0 0 0.0627451 0.192157 0.254902 0.305882 0.368627 0.419608 0.454902 0.486275 0.521569 0.564706 0.615686 0.662745 0.709804 0.72549 0.682353 0.541176 0.376471 0.207843 0.137255 0.129412 0.12549 0.117647 0.12549 0.117647 0.121569 0.129412 0.129412 0.133333 0.137255 0.14902 0.145098 0.14902 0.14902 0.156863 0.156863 0.160784 0.156863 0.164706 0.164706 0.172549 0.168627 0.172549 0.168627 0.172549 0.172549 0.172549 0.176471 0.176471 0.188235 0.184314 0.180392 0.2 0.192157 0.180392 0.188235 0.192157 0.192157 0.184314 0.188235 0.192157 0.184314 0.2 0.184314 0.196078 0.196078 0.2 0.196078 0.188235 0.180392 0.188235 0.176471 0.180392 0.176471 0.184314 0.184314 0.180392 0.176471 0.176471 0.176471 0.172549 0.172549 0.160784 0.188235 0.305882 0.435294 0.521569 0.541176 0.509804 0.47451 0.431373 0.384314 0.352941 0.352941 0.333333 0.301961 0.270588 0.188235 0.0705882 0 0 0.054902 0.207843 0.356863 0.407843 0.447059 0.478431 0.494118 0.505882 0.509804 0.513725 0.513725 0.509804 0.498039 0.482353 0.45098 0.411765 0.368627 0.286275 0.109804 0 0 0 0 0 0 0 0 0 0.0509804 0.184314 0.247059 0.305882 0.345098 0.396078 0.427451 0.462745 0.490196 0.501961 0.529412 0.584314 0.607843 0.662745 0.690196 0.729412 0.745098 0.733333 0.690196 0.580392 0.376471 0.207843 0.152941 0.152941 0.145098 0.137255 0.117647 0.137255 0.137255 0.14902 0.137255 0.141176 0.156863 0.145098 0.160784 0.156863 0.160784 0.168627 0.160784 0.164706 0.176471 0.164706 0.184314 0.168627 0.172549 0.192157 0.180392 0.176471 0.184314 0.180392 0.184314 0.176471 0.184314 0.192157 0.196078 0.196078 0.196078 0.192157 0.196078 0.2 0.2 0.192157 0.196078 0.184314 0.196078 0.196078 0.2 0.184314 0.188235 0.188235 0.176471 0.180392 0.180392 0.188235 0.2 0.184314 0.184314 0.172549 0.203922 0.301961 0.443137 0.529412 0.552941 0.564706 0.552941 0.501961 0.462745 0.419608 0.388235 0.368627 0.356863 0.333333 0.333333 0.305882 0.301961 0.278431 0.282353 0.294118 0.262745 0.305882 0.380392 0.478431 0.509804 0.533333 0.556863 0.576471 0.584314 0.596078 0.6 0.592157 0.588235 0.584314 0.572549 0.54902 0.533333 0.505882 0.478431 0.427451 0.364706 0.239216 0.027451 0 0 0 0 0 0 0 0.00392157 0.156863 0.231373 0.282353 0.321569 0.368627 0.396078 0.423529 0.458824 0.482353 0.498039 0.52549 0.552941 0.580392 0.615686 0.627451 0.670588 0.698039 0.733333 0.752941 0.764706 0.760784 0.741176 0.658824 0.533333 0.368627 0.258824 0.215686 0.172549 0.14902 0.145098 0.156863 0.14902 0.14902 0.160784 0.164706 0.160784 0.160784 0.164706 0.164706 0.176471 0.168627 0.180392 0.184314 0.188235 0.184314 0.180392 0.192157 0.188235 0.184314 0.196078 0.180392 0.184314 0.196078 0.196078 0.196078 0.192157 0.192157 0.196078 0.192157 0.180392 0.203922 0.188235 0.196078 0.192157 0.188235 0.192157 0.196078 0.188235 0.196078 0.184314 0.188235 0.207843 0.227451 0.309804 0.407843 0.529412 0.588235 0.6 0.619608 0.596078 0.572549 0.533333 0.486275 0.458824 0.427451 0.4 0.360784 0.341176 0.329412 0.298039 0.309804 0.337255 0.309804 0.286275 0.313725 0.368627 0.419608 0.4 0.427451 0.498039 0.564706 0.588235 0.615686 0.635294 0.647059 0.643137 0.647059 0.654902 0.654902 0.654902 0.639216 0.627451 0.623529 0.615686 0.572549 0.54902 0.513725 0.462745 0.396078 0.313725 0.109804 0.00784314 0 0 0 0 0 0 0.141176 0.227451 0.27451 0.321569 0.360784 0.376471 0.415686 0.423529 0.458824 0.482353 0.498039 0.517647 0.533333 0.556863 0.572549 0.596078 0.615686 0.627451 0.658824 0.698039 0.717647 0.72549 0.752941 0.780392 0.807843 0.823529 0.847059 0.831373 0.717647 0.6 0.505882 0.431373 0.360784 0.286275 0.239216 0.192157 0.180392 0.168627 0.168627 0.172549 0.176471 0.180392 0.188235 0.188235 0.180392 0.192157 0.2 0.192157 0.192157 0.192157 0.196078 0.2 0.196078 0.192157 0.196078 0.2 0.192157 0.188235 0.2 0.196078 0.196078 0.188235 0.196078 0.215686 0.254902 0.301961 0.364706 0.423529 0.490196 0.572549 0.611765 0.639216 0.658824 0.65098 0.635294 0.627451 0.592157 0.560784 0.533333 0.509804 0.478431 0.443137 0.423529 0.411765 0.380392 0.34902 0.333333 0.317647 0.286275 0.266667 0.254902 0.294118 0.286275 0.305882 0.337255 0.45098 0.47451 0.435294 0.486275 0.572549 0.627451 0.639216 0.654902 0.670588 0.666667 0.682353 0.701961 0.690196 0.690196 0.694118 0.694118 0.678431 0.65098 0.639216 0.623529 0.603922 0.568627 0.52549 0.47451 0.415686 0.32549 0.137255 0.0117647 0 0 0 0 0 0.101961 0.207843 0.262745 0.305882 0.34902 0.372549 0.396078 0.415686 0.439216 0.466667 0.486275 0.498039 0.52549 0.52549 0.541176 0.552941 0.560784 0.584314 0.588235 0.615686 0.615686 0.647059 0.670588 0.670588 0.690196 0.72549 0.737255 0.752941 0.756863 0.803922 0.815686 0.815686 0.839216 0.815686 0.823529 0.772549 0.772549 0.733333 0.717647 0.682353 0.639216 0.611765 0.584314 0.560784 0.52549 0.505882 0.486275 0.490196 0.458824 0.462745 0.47451 0.478431 0.498039 0.501961 0.537255 0.556863 0.568627 0.6 0.623529 0.647059 0.670588 0.682353 0.67451 0.701961 0.701961 0.698039 0.690196 0.666667 0.662745 0.65098 0.635294 0.623529 0.588235 0.568627 0.545098 0.517647 0.505882 0.47451 0.454902 0.427451 0.403922 0.392157 0.368627 0.364706 0.329412 0.313725 0.305882 0.290196 0.270588 0.239216 0.223529 0.266667 0.294118 0.333333 0.376471 0.498039 0.486275 0.486275 0.537255 0.603922 0.666667 0.811765 0.988235 0.945098 0.772549 0.752941 0.709804 0.67451 0.686275 0.690196 0.729412 0.992157 0.984314 0.705882 0.682353 0.682353 0.627451 0.584314 0.537255 0.490196 0.415686 0.317647 0.121569 0.00784314 0 0 0 0 0.0666667 0.180392 0.25098 0.290196 0.333333 0.360784 0.384314 0.411765 0.431373 0.45098 0.462745 0.478431 0.494118 0.501961 0.509804 0.52549 0.537255 0.545098 0.560784 0.580392 0.576471 0.588235 0.596078 0.615686 0.615686 0.643137 0.647059 0.631373 0.666667 0.658824 0.678431 0.682353 0.690196 0.701961 0.709804 0.72549 0.721569 0.741176 0.74902 0.756863 0.764706 0.780392 0.8 0.847059 0.921569 0.972549 0.976471 0.980392 0.862745 0.803922 0.8 0.780392 0.756863 0.760784 0.745098 0.741176 0.733333 0.721569 0.729412 0.698039 0.690196 0.670588 0.666667 0.654902 0.635294 0.643137 0.6 0.572549 0.552941 0.541176 0.533333 0.517647 0.505882 0.490196 0.478431 0.462745 0.447059 0.427451 0.407843 0.384314 0.380392 0.356863 0.356863 0.337255 0.321569 0.290196 0.294118 0.278431 0.25098 0.215686 0.211765 0.266667 0.294118 0.305882 0.439216 0.556863 0.517647 0.513725 0.556863 0.611765 0.647059 0.631373 0.615686 0.592157 0.568627 0.529412 0.517647 0.509804 0.509804 0.537255 0.572549 0.619608 0.635294 0.717647 0.670588 0.654902 0.635294 0.596078 0.560784 0.533333 0.466667 0.388235 0.286275 0.0627451 0.00784314 0 0 0 0.0313725 0.160784 0.239216 0.278431 0.317647 0.364706 0.380392 0.407843 0.427451 0.443137 0.462745 0.466667 0.47451 0.490196 0.462745 0.494118 0.521569 0.529412 0.541176 0.560784 0.552941 0.576471 0.576471 0.592157 0.592157 0.603922 0.611765 0.611765 0.615686 0.611765 0.631373 0.619608 0.643137 0.639216 0.647059 0.635294 0.635294 0.65098 0.643137 0.658824 0.654902 0.65098 0.639216 0.647059 0.666667 0.662745 0.658824 0.670588 0.658824 0.65098 0.654902 0.647059 0.639216 0.627451 0.635294 0.639216 0.623529 0.607843 0.588235 0.6 0.588235 0.572549 0.560784 0.54902 0.552941 0.537255 0.517647 0.505882 0.501961 0.494118 0.486275 0.47451 0.478431 0.454902 0.435294 0.435294 0.403922 0.388235 0.372549 0.356863 0.345098 0.329412 0.313725 0.309804 0.278431 0.27451 0.286275 0.25098 0.239216 0.215686 0.192157 0.258824 0.286275 0.321569 0.486275 0.662745 0.521569 0.521569 0.572549 0.588235 0.564706 0.521569 0.447059 0.345098 0.258824 0.172549 0.133333 0.105882 0.117647 0.164706 0.239216 0.286275 0.439216 0.533333 0.611765 0.639216 0.623529 0.615686 0.588235 0.560784 0.509804 0.454902 0.352941 0.203922 0.0196078 0 0 0 0.00784314 0.141176 0.219608 0.266667 0.309804 0.352941 0.372549 0.403922 0.419608 0.439216 0.45098 0.466667 0.478431 0.486275 0.47451 0.494118 0.498039 0.509804 0.52549 0.52549 0.54902 0.541176 0.552941 0.560784 0.568627 0.576471 0.572549 0.588235 0.588235 0.592157 0.592157 0.592157 0.6 0.607843 0.6 0.615686 0.607843 0.615686 0.615686 0.596078 0.592157 0.603922 0.619608 0.603922 0.603922 0.619608 0.607843 0.603922 0.603922 0.6 0.588235 0.6 0.576471 0.576471 0.580392 0.580392 0.572549 0.564706 0.545098 0.552941 0.537255 0.533333 0.521569 0.521569 0.494118 0.494118 0.498039 0.478431 0.470588 0.454902 0.454902 0.439216 0.45098 0.435294 0.407843 0.388235 0.388235 0.360784 0.352941 0.341176 0.329412 0.305882 0.298039 0.290196 0.270588 0.270588 0.27451 0.254902 0.235294 0.207843 0.192157 0.247059 0.270588 0.364706 0.501961 0.529412 0.513725 0.529412 0.509804 0.462745 0.364706 0.215686 0.0862745 0.027451 0 0 0 0 0 0 0 0 0.0470588 0.270588 0.443137 0.52549 0.811765 0.588235 0.596078 0.592157 0.537255 0.478431 0.411765 0.286275 0.0823529 0.0117647 0 0 0 0.105882 0.192157 0.247059 0.286275 0.333333 0.368627 0.392157 0.411765 0.419608 0.45098 0.470588 0.466667 0.482353 0.498039 0.498039 0.498039 0.501961 0.521569 0.517647 0.517647 0.541176 0.533333 0.533333 0.552941 0.54902 0.54902 0.568627 0.572549 0.572549 0.580392 0.588235 0.580392 0.580392 0.6 0.592157 0.588235 0.592157 0.596078 0.580392 0.592157 0.592157 0.592157 0.580392 0.592157 0.6 0.615686 0.635294 0.623529 0.588235 0.568627 0.54902 0.556863 0.556863 0.560784 0.545098 0.521569 0.529412 0.517647 0.509804 0.505882 0.509804 0.494118 0.490196 0.470588 0.466667 0.470588 0.458824 0.447059 0.431373 0.439216 0.411765 0.411765 0.392157 0.380392 0.380392 0.356863 0.352941 0.337255 0.313725 0.301961 0.301961 0.282353 0.282353 0.270588 0.278431 0.270588 0.25098 0.235294 0.2 0.184314 0.239216 0.27451 0.392157 0.498039 0.498039 0.498039 0.47451 0.376471 0.219608 0.0745098 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0.0980392 0.360784 0.513725 0.666667 0.580392 0.572549 0.541176 0.494118 0.45098 0.345098 0.176471 0.0156863 0 0 0 0.0705882 0.184314 0.235294 0.290196 0.32549 0.356863 0.380392 0.407843 0.419608 0.435294 0.45098 0.458824 0.478431 0.490196 0.498039 0.494118 0.498039 0.501961 0.521569 0.529412 0.52549 0.52549 0.541176 0.537255 0.545098 0.541176 0.545098 0.54902 0.545098 0.552941 0.560784 0.556863 0.556863 0.568627 0.568627 0.572549 0.564706 0.568627 0.568627 0.568627 0.572549 0.564706 0.560784 0.572549 0.572549 0.584314 0.596078 0.588235 0.576471 0.52549 0.545098 0.541176 0.529412 0.52549 0.52549 0.513725 0.513725 0.501961 0.494118 0.494118 0.486275 0.47451 0.466667 0.462745 0.447059 0.45098 0.439216 0.419608 0.419608 0.407843 0.403922 0.392157 0.372549 0.364706 0.34902 0.345098 0.341176 0.329412 0.309804 0.309804 0.298039 0.278431 0.286275 0.266667 0.290196 0.266667 0.239216 0.231373 0.196078 0.176471 0.227451 0.286275 0.4 0.470588 0.478431 0.443137 0.329412 0.156863 0.0313725 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0588235 0.352941 0.501961 0.564706 0.576471 0.54902 0.509804 0.454902 0.384314 0.223529 0.0392157 0 0 0 0.0392157 0.156863 0.223529 0.262745 0.309804 0.337255 0.376471 0.392157 0.411765 0.435294 0.439216 0.458824 0.47451 0.482353 0.498039 0.494118 0.498039 0.517647 0.517647 0.517647 0.529412 0.52549 0.537255 0.533333 0.537255 0.54902 0.529412 0.541176 0.54902 0.54902 0.541176 0.541176 0.54902 0.552941 0.54902 0.54902 0.54902 0.556863 0.541176 0.545098 0.556863 0.541176 0.541176 0.545098 0.529412 0.533333 0.545098 0.533333 0.529412 0.521569 0.517647 0.509804 0.509804 0.501961 0.505882 0.505882 0.501961 0.482353 0.486275 0.47451 0.458824 0.466667 0.454902 0.435294 0.435294 0.431373 0.415686 0.411765 0.403922 0.376471 0.376471 0.384314 0.368627 0.352941 0.352941 0.341176 0.329412 0.32549 0.309804 0.309804 0.290196 0.278431 0.266667 0.25098 0.278431 0.27451 0.247059 0.215686 0.188235 0.168627 0.231373 0.282353 0.392157 0.443137 0.411765 0.298039 0.137255 0.0235294 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0705882 0.392157 0.513725 0.560784 0.537255 0.513725 0.462745 0.411765 0.290196 0.0901961 0 0 0 0 0.129412 0.2 0.254902 0.298039 0.337255 0.364706 0.388235 0.411765 0.427451 0.435294 0.45098 0.458824 0.47451 0.490196 0.482353 0.494118 0.505882 0.517647 0.513725 0.513725 0.533333 0.529412 0.537255 0.545098 0.521569 0.541176 0.54902 0.537255 0.533333 0.545098 0.537255 0.541176 0.537255 0.54902 0.552941 0.545098 0.537255 0.545098 0.52549 0.54902 0.529412 0.52549 0.533333 0.517647 0.533333 0.517647 0.521569 0.513725 0.509804 0.513725 0.498039 0.498039 0.490196 0.490196 0.47451 0.482353 0.478431 0.470588 0.458824 0.462745 0.45098 0.443137 0.443137 0.431373 0.427451 0.411765 0.403922 0.396078 0.384314 0.384314 0.368627 0.364706 0.356863 0.345098 0.337255 0.329412 0.32549 0.313725 0.313725 0.286275 0.278431 0.258824 0.25098 0.286275 0.258824 0.231373 0.211765 0.184314 0.160784 0.219608 0.278431 0.356863 0.372549 0.294118 0.145098 0.0431373 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.14902 0.443137 0.533333 0.537255 0.509804 0.470588 0.427451 0.333333 0.141176 0 0 0 0 0.0901961 0.176471 0.239216 0.27451 0.317647 0.356863 0.372549 0.384314 0.415686 0.427451 0.447059 0.447059 0.47451 0.47451 0.486275 0.498039 0.498039 0.501961 0.509804 0.513725 0.513725 0.521569 0.521569 0.521569 0.537255 0.529412 0.537255 0.537255 0.541176 0.545098 0.529412 0.529412 0.533333 0.545098 0.537255 0.537255 0.529412 0.545098 0.537255 0.533333 0.533333 0.529412 0.529412 0.529412 0.521569 0.517647 0.513725 0.521569 0.513725 0.509804 0.498039 0.490196 0.486275 0.478431 0.470588 0.47451 0.466667 0.458824 0.454902 0.447059 0.443137 0.443137 0.431373 0.423529 0.419608 0.4 0.392157 0.388235 0.396078 0.364706 0.376471 0.34902 0.356863 0.345098 0.329412 0.313725 0.309804 0.301961 0.294118 0.278431 0.262745 0.254902 0.25098 0.282353 0.254902 0.231373 0.196078 0.160784 0.14902 0.188235 0.258824 0.309804 0.27451 0.164706 0.0588235 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0156863 0.356863 0.513725 0.509804 0.498039 0.47451 0.407843 0.333333 0.152941 0 0 0 0 0.0313725 0.156863 0.211765 0.258824 0.294118 0.333333 0.360784 0.380392 0.392157 0.419608 0.439216 0.447059 0.458824 0.458824 0.478431 0.482353 0.494118 0.501961 0.513725 0.501961 0.513725 0.509804 0.517647 0.517647 0.517647 0.529412 0.52549 0.52549 0.533333 0.529412 0.521569 0.533333 0.537255 0.537255 0.537255 0.529412 0.529412 0.537255 0.533333 0.521569 0.533333 0.529412 0.529412 0.521569 0.513725 0.529412 0.517647 0.505882 0.501961 0.501961 0.501961 0.498039 0.482353 0.486275 0.478431 0.478431 0.466667 0.466667 0.454902 0.45098 0.439216 0.435294 0.423529 0.423529 0.419608 0.403922 0.4 0.396078 0.380392 0.372549 0.368627 0.352941 0.341176 0.337255 0.32549 0.317647 0.309804 0.294118 0.294118 0.278431 0.266667 0.247059 0.247059 0.27451 0.25098 0.223529 0.184314 0.160784 0.145098 0.168627 0.243137 0.247059 0.168627 0.0823529 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.231373 0.486275 0.517647 0.486275 0.462745 0.4 0.313725 0.160784 0 0 0 0 0 0.121569 0.192157 0.247059 0.282353 0.313725 0.345098 0.368627 0.396078 0.411765 0.419608 0.431373 0.447059 0.462745 0.470588 0.482353 0.490196 0.490196 0.501961 0.509804 0.501961 0.517647 0.505882 0.498039 0.517647 0.529412 0.533333 0.517647 0.533333 0.529412 0.529412 0.529412 0.537255 0.529412 0.533333 0.52549 0.52549 0.54902 0.529412 0.517647 0.529412 0.52549 0.529412 0.517647 0.521569 0.517647 0.505882 0.509804 0.498039 0.505882 0.498039 0.498039 0.494118 0.482353 0.478431 0.470588 0.482353 0.458824 0.458824 0.447059 0.435294 0.419608 0.423529 0.411765 0.407843 0.4 0.396078 0.392157 0.376471 0.376471 0.360784 0.345098 0.337255 0.329412 0.321569 0.301961 0.301961 0.286275 0.27451 0.266667 0.254902 0.25098 0.247059 0.278431 0.239216 0.215686 0.184314 0.14902 0.133333 0.156863 0.2 0.172549 0.0901961 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.176471 0.466667 0.517647 0.478431 0.447059 0.396078 0.301961 0.145098 0 0 0 0 0 0.0862745 0.168627 0.223529 0.270588 0.313725 0.32549 0.356863 0.380392 0.392157 0.411765 0.427451 0.443137 0.447059 0.462745 0.470588 0.478431 0.482353 0.486275 0.498039 0.490196 0.505882 0.501961 0.509804 0.52549 0.517647 0.52549 0.52549 0.517647 0.521569 0.521569 0.52549 0.529412 0.52549 0.533333 0.517647 0.533333 0.517647 0.529412 0.513725 0.517647 0.505882 0.517647 0.501961 0.509804 0.505882 0.490196 0.501961 0.498039 0.490196 0.490196 0.490196 0.47451 0.486275 0.470588 0.478431 0.458824 0.447059 0.443137 0.45098 0.435294 0.419608 0.423529 0.407843 0.396078 0.396078 0.392157 0.384314 0.364706 0.368627 0.345098 0.32549 0.321569 0.32549 0.309804 0.298039 0.298039 0.286275 0.27451 0.254902 0.239216 0.235294 0.262745 0.258824 0.227451 0.207843 0.164706 0.137255 0.129412 0.133333 0.113725 0.0431373 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.121569 0.431373 0.509804 0.482353 0.431373 0.372549 0.278431 0.113725 0 0 0 0 0 0.0313725 0.137255 0.207843 0.25098 0.294118 0.32549 0.34902 0.364706 0.376471 0.407843 0.415686 0.431373 0.439216 0.45098 0.454902 0.47451 0.47451 0.490196 0.494118 0.498039 0.498039 0.505882 0.505882 0.517647 0.513725 0.517647 0.517647 0.513725 0.52549 0.509804 0.513725 0.521569 0.521569 0.521569 0.52549 0.517647 0.521569 0.513725 0.52549 0.513725 0.509804 0.521569 0.505882 0.498039 0.501961 0.501961 0.494118 0.494118 0.490196 0.486275 0.478431 0.47451 0.470588 0.458824 0.45098 0.447059 0.45098 0.447059 0.431373 0.431373 0.415686 0.403922 0.403922 0.4 0.392157 0.372549 0.380392 0.364706 0.360784 0.341176 0.341176 0.333333 0.321569 0.301961 0.294118 0.286275 0.282353 0.262745 0.247059 0.235294 0.235294 0.258824 0.258824 0.235294 0.196078 0.164706 0.141176 0.117647 0.109804 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.105882 0.415686 0.513725 0.470588 0.415686 0.341176 0.266667 0.117647 0 0 0 0 0 0.0117647 0.12549 0.184314 0.235294 0.266667 0.313725 0.333333 0.352941 0.376471 0.396078 0.407843 0.419608 0.427451 0.439216 0.45098 0.458824 0.470588 0.486275 0.482353 0.486275 0.494118 0.498039 0.498039 0.505882 0.505882 0.52549 0.509804 0.513725 0.521569 0.517647 0.513725 0.517647 0.501961 0.509804 0.517647 0.521569 0.509804 0.498039 0.521569 0.501961 0.498039 0.505882 0.509804 0.505882 0.494118 0.498039 0.490196 0.482353 0.482353 0.494118 0.47451 0.47451 0.462745 0.45098 0.458824 0.447059 0.443137 0.447059 0.431373 0.427451 0.411765 0.403922 0.403922 0.4 0.380392 0.372549 0.364706 0.356863 0.337255 0.341176 0.329412 0.321569 0.309804 0.294118 0.286275 0.270588 0.270588 0.25098 0.25098 0.235294 0.227451 0.266667 0.247059 0.215686 0.2 0.14902 0.121569 0.113725 0.0470588 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.164706 0.447059 0.505882 0.458824 0.392157 0.32549 0.223529 0.0745098 0 0 0 0 0 0 0.0666667 0.156863 0.2 0.247059 0.290196 0.321569 0.337255 0.364706 0.388235 0.403922 0.415686 0.423529 0.431373 0.443137 0.454902 0.454902 0.466667 0.470588 0.478431 0.490196 0.494118 0.494118 0.498039 0.505882 0.498039 0.501961 0.498039 0.513725 0.501961 0.509804 0.513725 0.505882 0.509804 0.498039 0.505882 0.517647 0.505882 0.501961 0.501961 0.498039 0.505882 0.498039 0.498039 0.498039 0.482353 0.478431 0.482353 0.470588 0.482353 0.478431 0.458824 0.458824 0.443137 0.447059 0.439216 0.435294 0.427451 0.411765 0.411765 0.411765 0.392157 0.392157 0.384314 0.372549 0.356863 0.360784 0.34902 0.34902 0.321569 0.321569 0.313725 0.305882 0.290196 0.282353 0.270588 0.258824 0.235294 0.243137 0.219608 0.215686 0.278431 0.227451 0.219608 0.188235 0.137255 0.113725 0.0980392 0.00784314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.239216 0.462745 0.498039 0.443137 0.376471 0.301961 0.203922 0.0627451 0 0 0 0 0 0 0.0313725 0.141176 0.192157 0.239216 0.286275 0.305882 0.333333 0.356863 0.376471 0.380392 0.411765 0.411765 0.431373 0.431373 0.45098 0.45098 0.470588 0.47451 0.47451 0.470588 0.486275 0.490196 0.47451 0.498039 0.490196 0.498039 0.501961 0.513725 0.505882 0.498039 0.498039 0.509804 0.505882 0.501961 0.498039 0.501961 0.501961 0.498039 0.486275 0.498039 0.498039 0.494118 0.490196 0.486275 0.486275 0.482353 0.462745 0.462745 0.466667 0.458824 0.447059 0.454902 0.443137 0.443137 0.431373 0.427451 0.419608 0.411765 0.407843 0.396078 0.392157 0.384314 0.376471 0.376471 0.352941 0.352941 0.345098 0.337255 0.32549 0.309804 0.309804 0.294118 0.286275 0.27451 0.262745 0.25098 0.243137 0.231373 0.219608 0.211765 0.270588 0.223529 0.2 0.168627 0.121569 0.101961 0.054902 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.105882 0.372549 0.509804 0.498039 0.419608 0.345098 0.266667 0.141176 0.0156863 0 0 0 0 0 0 0 0.0980392 0.168627 0.223529 0.254902 0.286275 0.321569 0.337255 0.364706 0.384314 0.392157 0.407843 0.415686 0.423529 0.439216 0.443137 0.458824 0.458824 0.466667 0.478431 0.458824 0.482353 0.486275 0.490196 0.490196 0.494118 0.494118 0.498039 0.494118 0.498039 0.498039 0.498039 0.501961 0.482353 0.494118 0.498039 0.494118 0.490196 0.482353 0.486275 0.490196 0.478431 0.482353 0.470588 0.458824 0.470588 0.47451 0.458824 0.466667 0.45098 0.458824 0.443137 0.45098 0.435294 0.419608 0.415686 0.411765 0.4 0.4 0.384314 0.380392 0.384314 0.368627 0.34902 0.356863 0.345098 0.337255 0.32549 0.317647 0.305882 0.294118 0.290196 0.278431 0.262745 0.258824 0.247059 0.239216 0.223529 0.207843 0.211765 0.262745 0.215686 0.196078 0.160784 0.133333 0.0901961 0.0156863 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.027451 0.282353 0.454902 0.541176 0.482353 0.396078 0.301961 0.219608 0.0941176 0 0 0 0 0 0 0 0 0.0352941 0.133333 0.192157 0.231373 0.262745 0.301961 0.317647 0.341176 0.360784 0.364706 0.380392 0.411765 0.423529 0.427451 0.431373 0.439216 0.458824 0.458824 0.466667 0.462745 0.478431 0.47451 0.470588 0.482353 0.486275 0.490196 0.498039 0.490196 0.486275 0.494118 0.486275 0.494118 0.498039 0.486275 0.486275 0.482353 0.486275 0.490196 0.482353 0.482353 0.470588 0.466667 0.462745 0.458824 0.458824 0.458824 0.454902 0.462745 0.439216 0.45098 0.431373 0.439216 0.419608 0.431373 0.419608 0.4 0.403922 0.392157 0.376471 0.364706 0.368627 0.364706 0.352941 0.341176 0.337255 0.337255 0.298039 0.317647 0.298039 0.286275 0.282353 0.270588 0.258824 0.254902 0.231373 0.219608 0.211765 0.196078 0.223529 0.247059 0.211765 0.192157 0.156863 0.109804 0.0745098 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.227451 0.4 0.533333 0.54902 0.45098 0.352941 0.254902 0.164706 0.027451 0 0 0 0 0 0 0 0 0 0.101961 0.176471 0.223529 0.25098 0.286275 0.313725 0.321569 0.356863 0.372549 0.376471 0.388235 0.407843 0.423529 0.423529 0.431373 0.454902 0.443137 0.470588 0.462745 0.458824 0.466667 0.470588 0.482353 0.486275 0.470588 0.478431 0.478431 0.486275 0.482353 0.482353 0.486275 0.47451 0.478431 0.47451 0.47451 0.470588 0.466667 0.458824 0.466667 0.466667 0.466667 0.458824 0.454902 0.45098 0.443137 0.439216 0.443137 0.435294 0.439216 0.435294 0.423529 0.431373 0.411765 0.4 0.392157 0.396078 0.392157 0.380392 0.372549 0.356863 0.34902 0.337255 0.333333 0.32549 0.317647 0.301961 0.298039 0.298039 0.278431 0.270588 0.262745 0.25098 0.239216 0.231373 0.211765 0.2 0.184314 0.227451 0.235294 0.203922 0.188235 0.152941 0.105882 0.0431373 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.027451 0.223529 0.384314 0.505882 0.580392 0.513725 0.403922 0.305882 0.211765 0.101961 0 0 0 0 0 0 0 0 0 0 0.054902 0.14902 0.196078 0.231373 0.266667 0.294118 0.317647 0.337255 0.360784 0.376471 0.388235 0.396078 0.419608 0.419608 0.435294 0.427451 0.45098 0.447059 0.454902 0.466667 0.462745 0.462745 0.470588 0.47451 0.478431 0.470588 0.47451 0.478431 0.470588 0.470588 0.478431 0.482353 0.478431 0.482353 0.478431 0.470588 0.47451 0.462745 0.466667 0.458824 0.462745 0.447059 0.458824 0.447059 0.443137 0.447059 0.443137 0.427451 0.431373 0.427451 0.415686 0.415686 0.407843 0.4 0.396078 0.376471 0.380392 0.368627 0.360784 0.360784 0.341176 0.329412 0.329412 0.317647 0.313725 0.301961 0.290196 0.278431 0.270588 0.266667 0.247059 0.235294 0.231373 0.207843 0.207843 0.192157 0.172549 0.219608 0.227451 0.196078 0.184314 0.141176 0.0941176 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0941176 0.243137 0.384314 0.501961 0.584314 0.568627 0.443137 0.345098 0.243137 0.145098 0.0235294 0 0 0 0 0 0 0 0 0 0 0.00392157 0.113725 0.176471 0.207843 0.25098 0.278431 0.301961 0.329412 0.337255 0.364706 0.372549 0.376471 0.396078 0.403922 0.419608 0.423529 0.431373 0.431373 0.447059 0.431373 0.454902 0.466667 0.466667 0.466667 0.462745 0.466667 0.482353 0.466667 0.478431 0.478431 0.466667 0.470588 0.466667 0.47451 0.462745 0.458824 0.466667 0.458824 0.45098 0.447059 0.458824 0.45098 0.427451 0.439216 0.443137 0.431373 0.419608 0.423529 0.431373 0.407843 0.415686 0.403922 0.396078 0.396078 0.376471 0.372549 0.368627 0.352941 0.341176 0.34902 0.333333 0.321569 0.317647 0.305882 0.301961 0.290196 0.286275 0.27451 0.266667 0.254902 0.235294 0.231373 0.223529 0.207843 0.2 0.172549 0.176471 0.227451 0.219608 0.2 0.176471 0.117647 0.0588235 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0588235 0.2 0.313725 0.411765 0.521569 0.6 0.592157 0.478431 0.368627 0.266667 0.168627 0.0509804 0 0 0 0 0 0 0 0 0 0 0 0 0.0784314 0.145098 0.192157 0.227451 0.254902 0.294118 0.321569 0.329412 0.345098 0.360784 0.372549 0.376471 0.396078 0.407843 0.419608 0.415686 0.423529 0.407843 0.443137 0.443137 0.447059 0.45098 0.454902 0.458824 0.454902 0.458824 0.470588 0.462745 0.45098 0.45098 0.462745 0.470588 0.458824 0.454902 0.458824 0.443137 0.458824 0.435294 0.45098 0.439216 0.447059 0.435294 0.435294 0.431373 0.419608 0.423529 0.423529 0.4 0.407843 0.403922 0.396078 0.392157 0.380392 0.372549 0.356863 0.352941 0.333333 0.341176 0.32549 0.317647 0.321569 0.309804 0.305882 0.290196 0.290196 0.27451 0.270588 0.243137 0.247059 0.235294 0.231373 0.207843 0.203922 0.2 0.176471 0.180392 0.227451 0.215686 0.196078 0.176471 0.0941176 0.0196078 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0627451 0.203922 0.278431 0.376471 0.466667 0.556863 0.615686 0.619608 0.501961 0.384314 0.258824 0.180392 0.0745098 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0196078 0.12549 0.168627 0.215686 0.227451 0.27451 0.298039 0.313725 0.333333 0.345098 0.368627 0.380392 0.384314 0.4 0.411765 0.4 0.427451 0.419608 0.431373 0.435294 0.435294 0.439216 0.45098 0.447059 0.439216 0.447059 0.454902 0.447059 0.447059 0.462745 0.447059 0.443137 0.443137 0.45098 0.454902 0.439216 0.45098 0.447059 0.435294 0.439216 0.427451 0.431373 0.431373 0.419608 0.411765 0.407843 0.407843 0.396078 0.384314 0.384314 0.388235 0.384314 0.372549 0.372549 0.352941 0.345098 0.345098 0.333333 0.321569 0.313725 0.309804 0.301961 0.286275 0.282353 0.262745 0.270588 0.254902 0.247059 0.235294 0.223529 0.207843 0.2 0.192157 0.180392 0.168627 0.172549 0.227451 0.203922 0.188235 0.168627 0.0627451 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0509804 0.12549 0.227451 0.290196 0.372549 0.458824 0.513725 0.596078 0.647059 0.611765 0.501961 0.376471 0.262745 0.168627 0.0823529 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0745098 0.137255 0.184314 0.219608 0.247059 0.282353 0.298039 0.32549 0.345098 0.34902 0.368627 0.376471 0.384314 0.388235 0.4 0.411765 0.411765 0.415686 0.415686 0.431373 0.435294 0.447059 0.435294 0.431373 0.45098 0.45098 0.443137 0.443137 0.435294 0.443137 0.439216 0.447059 0.439216 0.447059 0.443137 0.435294 0.443137 0.431373 0.427451 0.435294 0.419608 0.415686 0.411765 0.403922 0.411765 0.384314 0.388235 0.384314 0.376471 0.364706 0.364706 0.352941 0.352941 0.341176 0.345098 0.329412 0.317647 0.313725 0.301961 0.294118 0.290196 0.282353 0.270588 0.266667 0.262745 0.243137 0.231373 0.227451 0.219608 0.2 0.2 0.180392 0.168627 0.164706 0.156863 0.235294 0.203922 0.184314 0.160784 0.0117647 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0666667 0.14902 0.211765 0.266667 0.329412 0.376471 0.458824 0.517647 0.588235 0.631373 0.662745 0.603922 0.490196 0.364706 0.254902 0.168627 0.0705882 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0196078 0.121569 0.172549 0.192157 0.243137 0.266667 0.278431 0.309804 0.32549 0.34902 0.352941 0.352941 0.372549 0.388235 0.392157 0.4 0.4 0.419608 0.415686 0.419608 0.431373 0.435294 0.439216 0.439216 0.427451 0.423529 0.443137 0.427451 0.435294 0.443137 0.443137 0.431373 0.431373 0.435294 0.427451 0.419608 0.431373 0.415686 0.415686 0.423529 0.403922 0.419608 0.403922 0.396078 0.384314 0.388235 0.392157 0.380392 0.372549 0.372549 0.356863 0.352941 0.345098 0.341176 0.345098 0.309804 0.317647 0.305882 0.290196 0.294118 0.282353 0.27451 0.266667 0.254902 0.243137 0.243137 0.235294 0.219608 0.211765 0.192157 0.188235 0.168627 0.164706 0.152941 0.168627 0.235294 0.192157 0.192157 0.0941176 0 0 0 0 0 0 0 0 0 0 0.00392157 0.0156863 0.0823529 0.164706 0.203922 0.235294 0.270588 0.32549 0.380392 0.447059 0.501961 0.541176 0.596078 0.65098 0.670588 0.635294 0.552941 0.439216 0.317647 0.227451 0.133333 0.0509804 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0784314 0.145098 0.164706 0.215686 0.25098 0.266667 0.286275 0.313725 0.329412 0.34902 0.352941 0.364706 0.376471 0.384314 0.392157 0.403922 0.4 0.415686 0.403922 0.423529 0.423529 0.427451 0.423529 0.431373 0.435294 0.427451 0.431373 0.431373 0.435294 0.431373 0.427451 0.423529 0.419608 0.427451 0.407843 0.419608 0.411765 0.407843 0.415686 0.407843 0.407843 0.392157 0.396078 0.384314 0.380392 0.376471 0.372549 0.360784 0.352941 0.352941 0.345098 0.337255 0.329412 0.329412 0.313725 0.309804 0.301961 0.294118 0.282353 0.282353 0.266667 0.262745 0.243137 0.231373 0.231373 0.215686 0.215686 0.203922 0.184314 0.176471 0.160784 0.14902 0.145098 0.168627 0.262745 0.2 0.172549 0.121569 0.0196078 0 0 0.00784314 0.0431373 0.0666667 0.109804 0.14902 0.188235 0.211765 0.231373 0.254902 0.282353 0.309804 0.337255 0.388235 0.439216 0.490196 0.537255 0.596078 0.627451 0.662745 0.682353 0.65098 0.588235 0.486275 0.376471 0.266667 0.180392 0.105882 0.027451 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0235294 0.12549 0.160784 0.2 0.235294 0.247059 0.282353 0.298039 0.317647 0.329412 0.34902 0.356863 0.360784 0.376471 0.380392 0.380392 0.392157 0.403922 0.403922 0.407843 0.415686 0.419608 0.427451 0.419608 0.415686 0.431373 0.427451 0.419608 0.427451 0.423529 0.419608 0.407843 0.423529 0.423529 0.423529 0.415686 0.407843 0.403922 0.4 0.4 0.396078 0.392157 0.396078 0.368627 0.372549 0.376471 0.352941 0.352941 0.356863 0.341176 0.337255 0.333333 0.313725 0.321569 0.305882 0.305882 0.298039 0.282353 0.27451 0.262745 0.258824 0.247059 0.239216 0.227451 0.223529 0.203922 0.196078 0.188235 0.172549 0.172549 0.14902 0.141176 0.133333 0.196078 0.254902 0.196078 0.188235 0.160784 0.117647 0.145098 0.172549 0.203922 0.223529 0.247059 0.27451 0.27451 0.309804 0.341176 0.360784 0.4 0.423529 0.45098 0.505882 0.556863 0.603922 0.635294 0.67451 0.705882 0.698039 0.639216 0.560784 0.470588 0.376471 0.266667 0.184314 0.113725 0.0392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0745098 0.145098 0.176471 0.203922 0.243137 0.262745 0.270588 0.298039 0.317647 0.329412 0.341176 0.352941 0.360784 0.380392 0.376471 0.380392 0.388235 0.396078 0.4 0.4 0.392157 0.419608 0.4 0.411765 0.415686 0.407843 0.415686 0.415686 0.431373 0.415686 0.419608 0.4 0.407843 0.4 0.403922 0.403922 0.396078 0.403922 0.396078 0.392157 0.376471 0.368627 0.368627 0.368627 0.364706 0.34902 0.341176 0.337255 0.329412 0.317647 0.32549 0.305882 0.317647 0.298039 0.294118 0.270588 0.262745 0.27451 0.258824 0.25098 0.25098 0.231373 0.223529 0.2 0.2 0.184314 0.176471 0.164706 0.156863 0.145098 0.137255 0.121569 0.211765 0.243137 0.207843 0.243137 0.239216 0.254902 0.27451 0.294118 0.329412 0.356863 0.380392 0.403922 0.411765 0.447059 0.486275 0.505882 0.541176 0.584314 0.635294 0.658824 0.682353 0.717647 0.705882 0.658824 0.584314 0.505882 0.427451 0.32549 0.243137 0.164706 0.105882 0.0509804 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0156863 0.113725 0.156863 0.188235 0.219608 0.247059 0.266667 0.290196 0.305882 0.317647 0.329412 0.34902 0.356863 0.356863 0.368627 0.380392 0.380392 0.388235 0.388235 0.388235 0.4 0.403922 0.396078 0.4 0.411765 0.407843 0.411765 0.4 0.403922 0.403922 0.403922 0.407843 0.396078 0.396078 0.392157 0.4 0.396078 0.392157 0.396078 0.376471 0.372549 0.364706 0.364706 0.360784 0.352941 0.345098 0.341176 0.345098 0.321569 0.321569 0.317647 0.317647 0.298039 0.286275 0.278431 0.270588 0.258824 0.247059 0.25098 0.239216 0.227451 0.219608 0.211765 0.2 0.184314 0.176471 0.168627 0.164706 0.152941 0.133333 0.12549 0.121569 0.211765 0.215686 0.239216 0.317647 0.364706 0.380392 0.403922 0.431373 0.45098 0.47451 0.494118 0.521569 0.54902 0.576471 0.6 0.65098 0.694118 0.713725 0.733333 0.67451 0.623529 0.568627 0.498039 0.419608 0.333333 0.258824 0.188235 0.137255 0.0784314 0.0313725 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0666667 0.137255 0.180392 0.211765 0.227451 0.254902 0.278431 0.298039 0.305882 0.313725 0.341176 0.345098 0.360784 0.356863 0.360784 0.368627 0.368627 0.372549 0.388235 0.372549 0.403922 0.396078 0.396078 0.392157 0.392157 0.396078 0.4 0.396078 0.396078 0.403922 0.396078 0.396078 0.392157 0.396078 0.384314 0.376471 0.388235 0.364706 0.372549 0.376471 0.360784 0.360784 0.352941 0.34902 0.341176 0.333333 0.337255 0.317647 0.309804 0.305882 0.305882 0.286275 0.282353 0.282353 0.270588 0.254902 0.25098 0.247059 0.231373 0.223529 0.215686 0.196078 0.192157 0.184314 0.176471 0.14902 0.14902 0.152941 0.129412 0.117647 0.117647 0.184314 0.188235 0.298039 0.427451 0.466667 0.498039 0.521569 0.54902 0.576471 0.576471 0.603922 0.666667 0.686275 0.654902 0.682353 0.631373 0.584314 0.54902 0.498039 0.427451 0.368627 0.301961 0.231373 0.172549 0.129412 0.0823529 0.0352941 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.101961 0.14902 0.188235 0.215686 0.235294 0.258824 0.282353 0.298039 0.309804 0.329412 0.337255 0.345098 0.34902 0.356863 0.360784 0.376471 0.376471 0.376471 0.384314 0.396078 0.392157 0.384314 0.392157 0.380392 0.388235 0.392157 0.384314 0.392157 0.384314 0.376471 0.376471 0.384314 0.380392 0.372549 0.376471 0.376471 0.360784 0.368627 0.364706 0.352941 0.352941 0.337255 0.337255 0.337255 0.329412 0.321569 0.309804 0.294118 0.309804 0.286275 0.286275 0.27451 0.270588 0.262745 0.25098 0.243137 0.243137 0.223529 0.215686 0.2 0.203922 0.180392 0.172549 0.156863 0.152941 0.141176 0.12549 0.113725 0.101961 0.121569 0.14902 0.203922 0.415686 0.498039 0.545098 0.556863 0.576471 0.580392 0.568627 0.564706 0.533333 0.509804 0.494118 0.462745 0.427451 0.380392 0.337255 0.290196 0.227451 0.188235 0.141176 0.109804 0.0705882 0.0235294 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0431373 0.113725 0.160784 0.196078 0.215686 0.247059 0.270588 0.286275 0.298039 0.317647 0.321569 0.333333 0.337255 0.352941 0.34902 0.360784 0.368627 0.364706 0.376471 0.380392 0.388235 0.376471 0.380392 0.380392 0.384314 0.376471 0.376471 0.388235 0.380392 0.368627 0.368627 0.376471 0.376471 0.356863 0.360784 0.356863 0.352941 0.360784 0.360784 0.34902 0.341176 0.333333 0.333333 0.329412 0.317647 0.301961 0.298039 0.294118 0.294118 0.286275 0.27451 0.262745 0.254902 0.254902 0.243137 0.235294 0.219608 0.219608 0.2 0.188235 0.188235 0.172549 0.152941 0.160784 0.141176 0.129412 0.129412 0.113725 0.0901961 0.105882 0.145098 0.243137 0.341176 0.403922 0.431373 0.431373 0.419608 0.396078 0.364706 0.345098 0.321569 0.286275 0.262745 0.215686 0.188235 0.152941 0.121569 0.0941176 0.0627451 0.0431373 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0823529 0.133333 0.172549 0.203922 0.227451 0.262745 0.270588 0.290196 0.294118 0.313725 0.32549 0.329412 0.333333 0.341176 0.34902 0.352941 0.352941 0.368627 0.368627 0.364706 0.368627 0.376471 0.376471 0.384314 0.372549 0.380392 0.384314 0.376471 0.368627 0.368627 0.368627 0.376471 0.352941 0.368627 0.360784 0.345098 0.34902 0.337255 0.337255 0.333333 0.329412 0.321569 0.305882 0.309804 0.301961 0.298039 0.294118 0.270588 0.27451 0.270588 0.262745 0.247059 0.243137 0.235294 0.219608 0.223529 0.2 0.203922 0.180392 0.176471 0.172549 0.156863 0.141176 0.133333 0.121569 0.109804 0.0901961 0.0705882 0.0941176 0.141176 0.207843 0.227451 0.239216 0.235294 0.219608 0.203922 0.180392 0.160784 0.141176 0.129412 0.109804 0.0784314 0.054902 0.0235294 0.0156863 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.00784314 0.101961 0.145098 0.180392 0.203922 0.235294 0.254902 0.282353 0.286275 0.298039 0.313725 0.301961 0.329412 0.337255 0.341176 0.352941 0.34902 0.34902 0.364706 0.356863 0.356863 0.364706 0.372549 0.380392 0.352941 0.360784 0.364706 0.360784 0.364706 0.360784 0.352941 0.364706 0.352941 0.352941 0.345098 0.333333 0.345098 0.329412 0.333333 0.32549 0.317647 0.313725 0.313725 0.294118 0.301961 0.290196 0.270588 0.27451 0.270588 0.254902 0.25098 0.239216 0.235294 0.219608 0.211765 0.192157 0.2 0.192157 0.176471 0.168627 0.160784 0.145098 0.141176 0.121569 0.109804 0.0941176 0.0627451 0.0470588 0.0823529 0.113725 0.117647 0.101961 0.0862745 0.0862745 0.0784314 0.0627451 0.0509804 0.027451 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0313725 0.113725 0.152941 0.192157 0.219608 0.239216 0.258824 0.258824 0.278431 0.298039 0.305882 0.317647 0.337255 0.333333 0.345098 0.337255 0.345098 0.364706 0.345098 0.34902 0.360784 0.356863 0.360784 0.360784 0.368627 0.360784 0.356863 0.345098 0.34902 0.356863 0.34902 0.345098 0.345098 0.341176 0.341176 0.337255 0.333333 0.317647 0.305882 0.309804 0.309804 0.301961 0.294118 0.298039 0.27451 0.278431 0.262745 0.258824 0.247059 0.239216 0.223529 0.223529 0.211765 0.207843 0.196078 0.188235 0.184314 0.160784 0.160784 0.152941 0.141176 0.12549 0.113725 0.0941176 0.0705882 0.0392157 0.0509804 0.0431373 0.0196078 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0470588 0.117647 0.156863 0.184314 0.219608 0.231373 0.254902 0.278431 0.290196 0.290196 0.305882 0.309804 0.317647 0.333333 0.337255 0.333333 0.341176 0.34902 0.34902 0.345098 0.34902 0.345098 0.356863 0.360784 0.356863 0.356863 0.34902 0.356863 0.341176 0.345098 0.337255 0.341176 0.345098 0.333333 0.329412 0.32549 0.317647 0.309804 0.305882 0.298039 0.298039 0.282353 0.270588 0.270588 0.258824 0.258824 0.247059 0.247059 0.235294 0.227451 0.223529 0.203922 0.2 0.196078 0.188235 0.172549 0.164706 0.14902 0.14902 0.133333 0.121569 0.101961 0.0784314 0.0509804 0.0313725 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.054902 0.117647 0.160784 0.188235 0.215686 0.243137 0.258824 0.266667 0.282353 0.294118 0.313725 0.321569 0.317647 0.329412 0.321569 0.341176 0.345098 0.333333 0.337255 0.34902 0.34902 0.333333 0.345098 0.352941 0.345098 0.34902 0.345098 0.333333 0.345098 0.32549 0.329412 0.333333 0.32549 0.32549 0.317647 0.305882 0.305882 0.298039 0.286275 0.286275 0.282353 0.270588 0.254902 0.25098 0.247059 0.235294 0.227451 0.223529 0.215686 0.211765 0.196078 0.192157 0.180392 0.172549 0.164706 0.156863 0.145098 0.133333 0.117647 0.101961 0.0901961 0.054902 0.0235294 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.00392157 0.0627451 0.0980392 0.141176 0.176471 0.219608 0.235294 0.254902 0.262745 0.278431 0.298039 0.305882 0.301961 0.317647 0.309804 0.329412 0.329412 0.329412 0.32549 0.341176 0.341176 0.341176 0.337255 0.337255 0.32549 0.329412 0.337255 0.329412 0.337255 0.32549 0.321569 0.317647 0.305882 0.309804 0.305882 0.290196 0.294118 0.290196 0.27451 0.27451 0.270588 0.262745 0.254902 0.254902 0.247059 0.227451 0.223529 0.203922 0.207843 0.2 0.196078 0.180392 0.176471 0.152941 0.156863 0.14902 0.129412 0.133333 0.101961 0.0784314 0.0627451 0.027451 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0196078 0.0901961 0.0823529 0.12549 0.172549 0.188235 0.215686 0.243137 0.262745 0.278431 0.278431 0.278431 0.298039 0.305882 0.321569 0.313725 0.32549 0.329412 0.313725 0.317647 0.333333 0.32549 0.321569 0.32549 0.32549 0.32549 0.32549 0.313725 0.313725 0.317647 0.313725 0.305882 0.305882 0.294118 0.290196 0.286275 0.270588 0.27451 0.270588 0.254902 0.254902 0.243137 0.243137 0.231373 0.223529 0.207843 0.203922 0.192157 0.192157 0.176471 0.180392 0.152941 0.160784 0.141176 0.129412 0.121569 0.105882 0.0666667 0.054902 0.0352941 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0392157 0.0862745 0.12549 0.12549 0.145098 0.180392 0.2 0.219608 0.231373 0.243137 0.258824 0.27451 0.282353 0.301961 0.305882 0.313725 0.305882 0.317647 0.321569 0.317647 0.317647 0.313725 0.317647 0.321569 0.317647 0.309804 0.313725 0.305882 0.309804 0.305882 0.294118 0.298039 0.290196 0.278431 0.278431 0.266667 0.25098 0.25098 0.243137 0.25098 0.227451 0.223529 0.223529 0.2 0.207843 0.196078 0.176471 0.180392 0.164706 0.152941 0.145098 0.129412 0.121569 0.101961 0.0784314 0.0627451 0.0588235 0.0509804 0.0117647 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0196078 0.0823529 0.121569 0.160784 0.145098 0.152941 0.152941 0.192157 0.211765 0.223529 0.239216 0.25098 0.278431 0.282353 0.27451 0.290196 0.298039 0.294118 0.294118 0.301961 0.309804 0.305882 0.305882 0.305882 0.309804 0.286275 0.286275 0.294118 0.286275 0.278431 0.270588 0.282353 0.266667 0.262745 0.25098 0.239216 0.235294 0.231373 0.227451 0.219608 0.215686 0.203922 0.196078 0.184314 0.176471 0.160784 0.160784 0.14902 0.129412 0.117647 0.113725 0.0941176 0.0823529 0.0666667 0.0745098 0.0431373 0.0117647 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0117647 0.0941176 0.113725 0.152941 0.188235 0.180392 0.176471 0.172549 0.188235 0.188235 0.207843 0.235294 0.239216 0.247059 0.258824 0.258824 0.27451 0.266667 0.278431 0.286275 0.278431 0.278431 0.278431 0.27451 0.278431 0.266667 0.270588 0.266667 0.258824 0.258824 0.258824 0.243137 0.239216 0.235294 0.231373 0.219608 0.211765 0.203922 0.196078 0.192157 0.180392 0.164706 0.160784 0.160784 0.137255 0.133333 0.121569 0.105882 0.101961 0.0901961 0.0980392 0.0823529 0.0627451 0.0470588 0.0117647 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0470588 0.121569 0.137255 0.145098 0.180392 0.2 0.211765 0.215686 0.2 0.188235 0.196078 0.196078 0.207843 0.219608 0.223529 0.231373 0.235294 0.243137 0.243137 0.235294 0.247059 0.243137 0.25098 0.235294 0.235294 0.243137 0.219608 0.223529 0.223529 0.211765 0.203922 0.219608 0.196078 0.196078 0.176471 0.176471 0.160784 0.160784 0.156863 0.141176 0.137255 0.121569 0.121569 0.12549 0.12549 0.113725 0.113725 0.0901961 0.0705882 0.0627451 0.0470588 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0235294 0.054902 0.121569 0.156863 0.160784 0.164706 0.180392 0.207843 0.215686 0.239216 0.247059 0.239216 0.231373 0.219608 0.211765 0.196078 0.188235 0.192157 0.196078 0.203922 0.196078 0.211765 0.196078 0.2 0.196078 0.2 0.196078 0.180392 0.176471 0.184314 0.168627 0.160784 0.160784 0.145098 0.133333 0.141176 0.14902 0.156863 0.156863 0.160784 0.152941 0.133333 0.12549 0.109804 0.0901961 0.0823529 0.0784314 0.054902 0.0117647 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0862745 0.0705882 0.0509804 0.0980392 0.14902 0.180392 0.196078 0.180392 0.176471 0.184314 0.188235 0.215686 0.235294 0.235294 0.258824 0.262745 0.254902 0.258824 0.25098 0.25098 0.243137 0.227451 0.231373 0.231373 0.219608 0.219608 0.223529 0.211765 0.223529 0.211765 0.2 0.203922 0.196078 0.188235 0.172549 0.156863 0.156863 0.141176 0.129412 0.12549 0.109804 0.105882 0.0901961 0.0705882 0.0431373 0.0156863 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0745098 0.12549 0.054902 0.0509804 0.0862745 0.0980392 0.129412 0.156863 0.184314 0.192157 0.207843 0.219608 0.203922 0.207843 0.2 0.207843 0.203922 0.196078 0.2 0.203922 0.196078 0.192157 0.196078 0.188235 0.192157 0.192157 0.172549 0.176471 0.168627 0.156863 0.156863 0.156863 0.152941 0.152941 0.14902 0.172549 0.172549 0.152941 0.12549 0.101961 0.0666667 0.0470588 0.027451 0.00392157 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0235294 0.0784314 0.0313725 0.0431373 0.0784314 0.0862745 0.0862745 0.105882 0.12549 0.14902 0.168627 0.188235 0.188235 0.203922 0.211765 0.203922 0.2 0.211765 0.203922 0.192157 0.2 0.203922 0.184314 0.180392 0.172549 0.172549 0.156863 0.152941 0.137255 0.145098 0.160784 0.184314 0.215686 0.196078 0.172549 0.133333 0.0901961 0.0627451 0.0470588 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0509804 0.0980392 0.0431373 0.0431373 0.0588235 0.0627451 0.0705882 0.0823529 0.0862745 0.0941176 0.0980392 0.105882 0.0941176 0.105882 0.101961 0.0980392 0.105882 0.105882 0.101961 0.0862745 0.0941176 0.0980392 0.0862745 0.0862745 0.105882 0.137255 0.176471 0.203922 0.196078 0.156863 0.14902 0.12549 0.12549 0.0784314 0.0196078 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0431373 0.0627451 0.0745098 0.101961 0.0901961 0.0627451 0.0588235 0.0588235 0.054902 0.0509804 0.0627451 0.0588235 0.054902 0.0588235 0.0470588 0.054902 0.0823529 0.0901961 0.121569 0.141176 0.14902 0.152941 0.141176 0.133333 0.0627451 0.0235294 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.00784314 0.0156863 0.0196078 0.0156863 0.0196078 0.0352941 0.0392157 0.0313725 0.0235294 0.0627451 0.109804 0.129412 0.0784314 0.0235294 0.0235294 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 diff --git a/data/points/COIL_database/lucky_cat_PCA1 b/data/points/COIL_database/lucky_cat_PCA1 new file mode 100644 index 00000000..dd0f1eda --- /dev/null +++ b/data/points/COIL_database/lucky_cat_PCA1 @@ -0,0 +1,72 @@ +-1452.382 +-985.983 +-300.7043 +340.9664 +1115.224 +1816.717 +2603.418 +3283.292 +3776.975 +4193.036 +4514.083 +4805.137 +5132.243 +5429.507 +5762.975 +6104.911 +6283.41 +6435.22 +6388.126 +6131.01 +6004.362 +5890.452 +5560.509 +5414.897 +5437.464 +5192.032 +5230.463 +5249.902 +5477.721 +5498.137 +5558.49 +5788.839 +6038.19 +6097.074 +6011.507 +6224.031 +5961.784 +6142.578 +5787.753 +5592.622 +5318.977 +4860.224 +4682.885 +4236.65 +3752.153 +3248.328 +2737.484 +2294.011 +1755.705 +1159.159 +799.5467 +486.5098 +310.7009 +95.86115 +31.67501 +-183.7625 +-297.0857 +-279.4419 +-312.4302 +-608.9743 +-961.9346 +-1167.246 +-1320.912 +-1552.051 +-1915.02 +-2222.397 +-2398.179 +-2565.249 +-2594.809 +-2443.374 +-2182.187 +-1900.618 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0c16c9cc..a4e6eb50 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -54,6 +54,7 @@ add_subdirectory(example/Spatial_searching) add_subdirectory(example/Subsampling) add_subdirectory(example/Tangential_complex) add_subdirectory(example/Bottleneck_distance) +add_subdirectory(example/Nerve_GIC) # data points generator add_subdirectory(data/points/generator) diff --git a/src/Nerve_GIC/example/CMakeLists.txt b/src/Nerve_GIC/example/CMakeLists.txt index d499613d..a4cb0f03 100644 --- a/src/Nerve_GIC/example/CMakeLists.txt +++ b/src/Nerve_GIC/example/CMakeLists.txt @@ -13,9 +13,15 @@ target_link_libraries(MapperDeltaCoord ${Boost_SYSTEM_LIBRARY}) add_executable ( MapperDeltaFunc MapperDeltaFunc.cpp ) target_link_libraries(MapperDeltaFunc ${Boost_SYSTEM_LIBRARY}) +add_executable ( GICvoronoi GICvoronoi.cpp ) +target_link_libraries(GICvoronoi ${Boost_SYSTEM_LIBRARY}) + +file(COPY visu.py km.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/) + if (TBB_FOUND) target_link_libraries(Nerve ${TBB_LIBRARIES}) target_link_libraries(GIC ${TBB_LIBRARIES}) target_link_libraries(MapperDeltaCoord ${TBB_LIBRARIES}) target_link_libraries(MapperDeltaFunc ${TBB_LIBRARIES}) + target_link_libraries(GICvoronoi ${TBB_LIBRARIES}) endif() \ No newline at end of file diff --git a/src/Nerve_GIC/example/GIC.cpp b/src/Nerve_GIC/example/GIC.cpp index 30a485d5..1ab15ecc 100644 --- a/src/Nerve_GIC/example/GIC.cpp +++ b/src/Nerve_GIC/example/GIC.cpp @@ -3,7 +3,7 @@ void usage(int nbArgs, char * const progName) { std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; std::cerr << "Usage: " << progName << " filename.off threshold coordinate resolution gain\n"; - std::cerr << " i.e.: " << progName << " ../../../data/points/human.off 1.5 2 10 0.3 \n"; + std::cerr << " i.e.: " << progName << " ../../../data/points/human.off 0.075 2 10 0.3 \n"; exit(-1); // ----- >> } @@ -17,11 +17,6 @@ int main(int argc, char **argv) { double gain = atof(argv[5]); bool verb = 0; if(argc == 7) verb = 1; - // Type definitions - using Graph_t = boost::adjacency_list < boost::vecS, boost::vecS, boost::undirectedS,\ - boost::property < vertex_filtration_t, Filtration_value >,\ - boost::property < edge_filtration_t, Filtration_value > >; - // ---------------------------------------------------------------------------- // Init of a graph induced complex from an OFF file // ---------------------------------------------------------------------------- @@ -29,12 +24,16 @@ int main(int argc, char **argv) { Gudhi::graph_induced_complex::Graph_induced_complex GIC; GIC.set_verbose(verb); - GIC.set_graph_from_rips(threshold, off_file_name); - GIC.set_function_from_coordinate(coord, off_file_name); GIC.set_color_from_coordinate(off_file_name, coord); + GIC.set_function_from_coordinate(coord, off_file_name); + + GIC.set_graph_from_rips(threshold, off_file_name); + GIC.set_resolution_double(resolution); GIC.set_gain(gain); GIC.set_cover_from_function(1); + GIC.find_GIC_simplices(); + GIC.plot_with_KeplerMapper(); Simplex_tree stree; GIC.create_complex(stree); diff --git a/src/Nerve_GIC/example/GICvoronoi.cpp b/src/Nerve_GIC/example/GICvoronoi.cpp new file mode 100644 index 00000000..2d50ab4d --- /dev/null +++ b/src/Nerve_GIC/example/GICvoronoi.cpp @@ -0,0 +1,59 @@ +#include + +void usage(int nbArgs, char * const progName) { + std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; + std::cerr << "Usage: " << progName << " filename.off threshold N\n"; + std::cerr << " i.e.: " << progName << " ../../../data/points/human.off 0.075 100 \n"; + exit(-1); // ----- >> +} + +int main(int argc, char **argv) { + if ((argc != 4) && (argc != 5)) usage(argc, (argv[0] - 1)); + + std::string off_file_name(argv[1]); + double threshold = atof(argv[2]); + int m = atoi(argv[3]); + bool verb = 0; if(argc == 5) verb = 1; + + // ---------------------------------------------------------------------------- + // Init of a graph induced complex from an OFF file + // ---------------------------------------------------------------------------- + + Gudhi::graph_induced_complex::Graph_induced_complex GIC; + GIC.set_verbose(verb); + + GIC.set_color_from_coordinate(off_file_name); + + GIC.set_graph_from_OFF(off_file_name); + + GIC.set_cover_from_Voronoi(m, off_file_name); + + GIC.find_GIC_simplices(); + + GIC.plot_with_KeplerMapper(); + + Simplex_tree stree; GIC.create_complex(stree); + + std::streambuf* streambufffer = std::cout.rdbuf(); + std::ostream output_stream(streambufffer); + + // ---------------------------------------------------------------------------- + // Display information about the graph induced complex + // ---------------------------------------------------------------------------- + + if(verb){ + output_stream << "Graph induced complex is of dimension " << stree.dimension() << + " - " << stree.num_simplices() << " simplices - " << + stree.num_vertices() << " vertices." << std::endl; + + output_stream << "Iterator on graph induced complex simplices" << std::endl; + for (auto f_simplex : stree.filtration_simplex_range()) { + for (auto vertex : stree.simplex_vertex_range(f_simplex)) { + output_stream << vertex << " "; + } + output_stream << std::endl; + } + } + + return 0; +} diff --git a/src/Nerve_GIC/example/MapperDeltaCoord.cpp b/src/Nerve_GIC/example/MapperDeltaCoord.cpp index aa12afe6..950ee58a 100644 --- a/src/Nerve_GIC/example/MapperDeltaCoord.cpp +++ b/src/Nerve_GIC/example/MapperDeltaCoord.cpp @@ -14,11 +14,6 @@ int main(int argc, char **argv) { int coord = atoi(argv[2]); bool verb = 0; if(argc == 4) verb = 1; - // Type definitions - using Graph_t = boost::adjacency_list < boost::vecS, boost::vecS, boost::undirectedS,\ - boost::property < vertex_filtration_t, Filtration_value >,\ - boost::property < edge_filtration_t, Filtration_value > >; - // --------------------------------------- // Init of a Mapper Delta from an OFF file // --------------------------------------- @@ -26,12 +21,16 @@ int main(int argc, char **argv) { Gudhi::graph_induced_complex::Graph_induced_complex GIC; GIC.set_verbose(verb); - GIC.set_graph_from_automatic_rips(off_file_name); - GIC.set_function_from_coordinate(coord, off_file_name); GIC.set_color_from_coordinate(off_file_name, coord); + GIC.set_function_from_coordinate(coord, off_file_name); + + GIC.set_graph_from_automatic_rips(off_file_name); + GIC.set_automatic_resolution_for_GICMAP(); GIC.set_gain(); GIC.set_cover_from_function(1); + GIC.find_GICMAP_simplices_with_functional_minimal_cover(); + GIC.plot_with_KeplerMapper(); Simplex_tree stree; GIC.create_complex(stree); diff --git a/src/Nerve_GIC/example/MapperDeltaFunc.cpp b/src/Nerve_GIC/example/MapperDeltaFunc.cpp index 20924b9c..658b0273 100644 --- a/src/Nerve_GIC/example/MapperDeltaFunc.cpp +++ b/src/Nerve_GIC/example/MapperDeltaFunc.cpp @@ -14,11 +14,6 @@ int main(int argc, char **argv) { std::string func_file_name = argv[2]; bool verb = 0; if(argc == 4) verb = 1; - // Type definitions - using Graph_t = boost::adjacency_list < boost::vecS, boost::vecS, boost::undirectedS,\ - boost::property < vertex_filtration_t, Filtration_value >,\ - boost::property < edge_filtration_t, Filtration_value > >; - // --------------------------------------- // Init of a Mapper Delta from an OFF file // --------------------------------------- @@ -26,12 +21,16 @@ int main(int argc, char **argv) { Gudhi::graph_induced_complex::Graph_induced_complex GIC; GIC.set_verbose(verb); - GIC.set_graph_from_automatic_rips(off_file_name); - GIC.set_function_from_file(func_file_name); GIC.set_color_from_file(func_file_name); + GIC.set_function_from_file(func_file_name); + + GIC.set_graph_from_automatic_rips(off_file_name); + GIC.set_automatic_resolution_for_GICMAP(); GIC.set_gain(); GIC.set_cover_from_function(1); + GIC.find_GICMAP_simplices_with_functional_minimal_cover(); + GIC.plot_with_KeplerMapper(); Simplex_tree stree; GIC.create_complex(stree); diff --git a/src/Nerve_GIC/example/Nerve.cpp b/src/Nerve_GIC/example/Nerve.cpp index d4a68c71..a0de31ae 100644 --- a/src/Nerve_GIC/example/Nerve.cpp +++ b/src/Nerve_GIC/example/Nerve.cpp @@ -16,11 +16,6 @@ int main(int argc, char **argv) { double gain = atof(argv[4]); bool verb = 0; if(argc == 6) verb = 1; - // Type definitions - using Graph_t = boost::adjacency_list < boost::vecS, boost::vecS, boost::undirectedS,\ - boost::property < vertex_filtration_t, Filtration_value >,\ - boost::property < edge_filtration_t, Filtration_value > >; - // -------------------------------- // Init of a Nerve from an OFF file // -------------------------------- @@ -28,12 +23,16 @@ int main(int argc, char **argv) { Gudhi::graph_induced_complex::Graph_induced_complex GIC; GIC.set_verbose(verb); - GIC.set_graph_from_OFF(off_file_name); + GIC.set_color_from_coordinate(off_file_name, coord); GIC.set_function_from_coordinate(coord, off_file_name); - GIC.set_color_from_coordinate(off_file_name, --coord); + + GIC.set_graph_from_OFF(off_file_name); + GIC.set_resolution_int(resolution); GIC.set_gain(gain); GIC.set_cover_from_function(0); + GIC.find_Nerve_simplices(); + GIC.plot_with_KeplerMapper(); Simplex_tree stree; GIC.create_complex(stree); diff --git a/src/Nerve_GIC/include/gudhi/GIC.h b/src/Nerve_GIC/include/gudhi/GIC.h index e9b7a1f1..205aa87e 100644 --- a/src/Nerve_GIC/include/gudhi/GIC.h +++ b/src/Nerve_GIC/include/gudhi/GIC.h @@ -30,6 +30,8 @@ #include #include #include +#include +#include #include @@ -51,11 +53,18 @@ #define ETA 0.001 #define MASK 0 +namespace gss = Gudhi::spatial_searching; + using Simplex_tree = Gudhi::Simplex_tree<>; using Filtration_value = Simplex_tree::Filtration_value; using Rips_complex = Gudhi::rips_complex::Rips_complex; using Point = std::vector; +typedef CGAL::Epick_d > K; +typedef typename K::Point_d Pointd; +typedef std::vector Pointsd; +typedef gss::Kd_tree_search Points_ds; + std::map func; std::map func_color; @@ -88,14 +97,14 @@ namespace graph_induced_complex { class Graph_induced_complex { private: - bool verbose; - typedef int Cover_t; + bool verbose; // whether to display information. + typedef int Cover_t; // elements of cover C are indexed by integers. std::vector > simplices; std::map > cover; - int maximal_dim; - int data_dimension; - std::map cover_fct; - std::map > cover_color; + int maximal_dim; // maximal dimension of output simplicial complex. + int data_dimension; // dimension of input data. + std::map cover_fct; // integer-valued function that allows to state if two elements of the cover are consecutive or not. + std::map > cover_color; // size and coloring of the vertices of the output simplicial complex. Simplex_tree<> st; std::map > adjacency_matrix; int resolution_int; @@ -187,10 +196,10 @@ class Graph_induced_complex { * */ void set_graph_from_OFF(const std::string& off_file_name){ - int numpts, numedges, numfaces, i; std::vector edge(2); double x; int num; std::vector simplex; + int n, numedges, numfaces, i; std::vector edge(2); double x; int num; std::vector simplex; std::ifstream input(off_file_name); std::string line; getline(input, line); - input >> numpts; input >> numfaces; input >> numedges; - i = 0; while(i < numpts){input >> x; input >> x; input >> x; i++;} + input >> n; input >> numfaces; input >> numedges; + i = 0; while(i < n){input >> x; input >> x; input >> x; i++;} i = 0; while(i < numfaces){ simplex.clear(); input >> num; for(int j = 0; j < num; j++){int k; input >> k; simplex.push_back(k);} @@ -204,7 +213,7 @@ class Graph_induced_complex { } std::vector empty; - for(int i = 0; i < numpts; i++) adjacency_matrix.insert(std::pair >(i,empty)); + for(int i = 0; i < n; i++) adjacency_matrix.insert(std::pair >(i,empty)); for (auto simplex : st.complex_simplex_range()) { if(st.dimension(simplex) == 1){ std::vector vertices; @@ -292,7 +301,7 @@ class Graph_induced_complex { } } - #pragma omp parallel for + //#pragma omp parallel for for (int i = 0; i < N; i++){ SampleWithoutReplacement(n,m,samples); @@ -349,8 +358,8 @@ class Graph_induced_complex { */ void set_function_from_coordinate(const int& k, const std::string& off_file_name){ Points_off_reader off_reader(off_file_name); - int numpts = off_reader.get_point_cloud().size(); - for(int i = 0; i < numpts; i++) func.insert(std::pair(i,off_reader.get_point_cloud()[i][k])); + int n = off_reader.get_point_cloud().size(); + for(int i = 0; i < n; i++) func.insert(std::pair(i,off_reader.get_point_cloud()[i][k])); } public: // Set function from vector. @@ -360,7 +369,8 @@ class Graph_induced_complex { * */ void set_function_from_vector(const std::vector& function){ - for(int i = 0; i < function.size(); i++) func.insert(std::pair(i, function[i])); + int n = function.size(); + for(int i = 0; i < n; i++) func.insert(std::pair(i, function[i])); } // ******************************************************************************************************************* @@ -379,12 +389,56 @@ class Graph_induced_complex { std::ifstream input(cover_file_name); std::string line; while(std::getline(input,line)){ cov_elts.clear(); std::stringstream stream(line); - while(stream >> cov){cov_elts.push_back(cov); cov_number.push_back(cov); cover_fct.insert(std::pair(cov,cov));} - cover.insert(std::pair >(vertex_id, cov_elts)); vertex_id++; + while(stream >> cov){ + cov_elts.push_back(cov); cov_number.push_back(cov); + cover_fct[cov] = cov; cover_color[cov].second += func_color[vertex_id]; cover_color[cov].first++; + } + cover[vertex_id] = cov_elts; vertex_id++; } std::vector::iterator it; std::sort(cov_number.begin(),cov_number.end()); it = std::unique(cov_number.begin(),cov_number.end()); - cov_number.resize(std::distance(cov_number.begin(),it)); maximal_dim = cov_number.size(); + cov_number.resize(std::distance(cov_number.begin(),it)); maximal_dim = cov_number.size()-1; + for(int i = 0; i <= maximal_dim; i++) cover_color[i].second /= cover_color[i].first; + } + + public: // Set cover from Voronoi + /** \brief Creates the cover C from the Voronoï cells of a subsampling of the point cloud. + * + * @param[in] m number of points in the subsample. + * @param[in] off_file_name name of the input .OFF file. + * + */ + void set_cover_from_Voronoi(const int& m, const std::string& off_file_name){ + Points_off_reader off_reader(off_file_name); + int n = off_reader.get_point_cloud().size(); data_dimension = off_reader.get_point_cloud()[0].size(); + Pointsd pointsd(m+1); std::vector samples(m); SampleWithoutReplacement(n,m,samples); + double* coord = new double[data_dimension]; + + for(int i = 1; i <= m; i++){ + for(int j = 0; j < data_dimension; j++) coord[j] = off_reader.get_point_cloud()[samples[i-1]][j]; + pointsd[i] = Pointd(data_dimension, coord+0, coord + data_dimension); cover_fct[i-1] = i-1; + } std::cout << std::endl; + + int curr_subsample = 0; + for(int i = 0; i < n; i++){ + for(int j = 0; j < data_dimension; j++) coord[j] = off_reader.get_point_cloud()[i][j]; + pointsd[0] = Pointd(data_dimension, coord+0, coord + data_dimension); Points_ds points_ds(pointsd); + auto knn_range = points_ds.query_k_nearest_neighbors(pointsd[0], 2, true); + Cover_t cluster = (knn_range.begin()+1)->first-1; + if(cluster >= 0){ // Case where i is not a subsample point. + cover[i].push_back(cluster); cover_color[cluster].second += func_color[i]; cover_color[cluster].first++; + } + else{ // Case where i is a subsample point. + cover[i].push_back(curr_subsample); cover_color[curr_subsample].second += func_color[i]; + cover_color[curr_subsample].first++; curr_subsample++; + } + } + + for(int i = 0; i < m; i++) cover_color[i].second /= cover_color[i].first; + + delete [] coord; + maximal_dim = m-1; + } public: // Automatic tuning of resolution for Mapper Delta. @@ -448,9 +502,10 @@ class Graph_induced_complex { void set_cover_from_function(const bool& token){ // Read function values and compute min and max - std::map::iterator it; double maxf, minf; minf = std::numeric_limits::max(); maxf = std::numeric_limits::min(); + std::map::iterator it; + double maxf, minf; minf = std::numeric_limits::max(); maxf = std::numeric_limits::min(); for(it = func.begin(); it != func.end(); it++){minf = std::min(minf, it->second); maxf = std::max(maxf, it->second);} - int num_pts = func.size(); if(verbose) std::cout << "Min function value = " << minf << " and Max function value = " << maxf << std::endl; + int n = func.size(); if(verbose) std::cout << "Min function value = " << minf << " and Max function value = " << maxf << std::endl; // Compute cover of im(f) std::vector > intervals; int res; @@ -477,40 +532,41 @@ class Graph_induced_complex { y = x + resolution_double; } std::pair interM(x,maxf); intervals.push_back(interM); res = intervals.size(); - for(int i = 0; i < res; i++) if(verbose) std::cout << "Interval " << i << " = [" << intervals[i].first << ", " << intervals[i].second << "]" << std::endl; + for(int i = 0; i < res; i++) if(verbose) std::cout << "Interval " << i << " = [" << \ + intervals[i].first << ", " << intervals[i].second << "]" << std::endl; } // Sort points according to function values - std::vector points(num_pts); for(int i = 0; i < num_pts; i++) points[i] = i; + std::vector points(n); for(int i = 0; i < n; i++) points[i] = i; std::sort(points.begin(),points.end(),functional_comp); - int id = 0; int pos = 0; double min_prop_int; double max_prop_int; + int id = 0; int pos = 0; for(int i = 0; i < res; i++){ // Find points in the preimage std::map > prop; prop.clear(); - std::pair inter1 = intervals[i]; min_prop_int = inter1.first; + std::pair inter1 = intervals[i]; int tmp = pos; if(i != res-1){ if(i != 0){ - std::pair inter3 = intervals[i-1]; min_prop_int = inter3.second; - while(func[points[tmp]] < inter3.second && tmp != num_pts){ + std::pair inter3 = intervals[i-1]; + while(func[points[tmp]] < inter3.second && tmp != n){ prop.insert(std::pair >(points[tmp],adjacency_matrix[points[tmp]])); tmp++; } } - std::pair inter2 = intervals[i+1]; max_prop_int = inter2.first; - while(func[points[tmp]] < inter2.first && tmp != num_pts){ + std::pair inter2 = intervals[i+1]; + while(func[points[tmp]] < inter2.first && tmp != n){ prop.insert(std::pair >(points[tmp],adjacency_matrix[points[tmp]])); tmp++; } pos = tmp; - while(func[points[tmp]] < inter1.second && tmp != num_pts){ + while(func[points[tmp]] < inter1.second && tmp != n){ prop.insert(std::pair >(points[tmp],adjacency_matrix[points[tmp]])); tmp++; } @@ -520,13 +576,12 @@ class Graph_induced_complex { else{ std::pair inter3 = intervals[i-1]; - min_prop_int = inter3.second; max_prop_int = inter1.second; - while(func[points[tmp]] < inter3.second && tmp != num_pts){ + while(func[points[tmp]] < inter3.second && tmp != n){ prop.insert(std::pair >(points[tmp],adjacency_matrix[points[tmp]])); tmp++; } - while(tmp != num_pts){ + while(tmp != n){ prop.insert(std::pair >(points[tmp],adjacency_matrix[points[tmp]])); tmp++; } @@ -552,7 +607,7 @@ class Graph_induced_complex { if(verbose) std::cout << std::endl; } - maximal_dim = id; + maximal_dim = id-1; } @@ -583,8 +638,8 @@ class Graph_induced_complex { */ void set_color_from_coordinate(const std::string& off_file_name, int k = 0){ Points_off_reader off_reader(off_file_name); - int numpts = off_reader.get_point_cloud().size(); - for(int i = 0; i < numpts; i++) func_color.insert(std::pair(i,off_reader.get_point_cloud()[i][k])); + int n = off_reader.get_point_cloud().size(); + for(int i = 0; i < n; i++) func_color[i] = off_reader.get_point_cloud()[i][k]; } public: // Set color from vector. @@ -594,7 +649,7 @@ class Graph_induced_complex { * */ void set_color_from_vector(const std::vector& color){ - for(int i = 0; i < color.size(); i++) func_color.insert(std::pair(i, color[i])); + for(unsigned int i = 0; i < color.size(); i++) func_color.insert(std::pair(i, color[i])); } public: // Create a .dot file that can be compiled with neato to produce a .pdf file @@ -605,7 +660,7 @@ class Graph_induced_complex { double maxv, minv; maxv = std::numeric_limits::min(); minv = std::numeric_limits::max(); for (std::map >::iterator iit = cover_color.begin(); iit != cover_color.end(); iit++){ maxv = std::max(maxv, iit->second.second); minv = std::min(minv, iit->second.second); - } + } //std::cout << minv << " " << maxv << std::endl; int k = 0; std::vector nodes; nodes.clear(); for (std::map >::iterator iit = cover_color.begin(); iit != cover_color.end(); iit++){ if(iit->second.first > MASK){ @@ -622,6 +677,9 @@ class Graph_induced_complex { if (cover_color[simplices[i][0]].first > MASK && cover_color[simplices[i][1]].first > MASK){ graphic << " " << simplices[i][0] << " -- " << simplices[i][1] << " [weight=15];" << std::endl; ke++;} graphic << "}"; graphic.close(); + char command[100]; sprintf(command, "neato SC.dot -Tpdf -o SC_visu.pdf && rm SC.dot"); + int systemRet = system(command); + if(systemRet == -1) std::cout << "Visualization failed. Do you have neato?" << std::endl; } public: // Create a .txt file that can be compiled with KeplerMapper to produce a .html file @@ -649,6 +707,9 @@ class Graph_induced_complex { if (cover_color[simplices[i][0]].first > MASK && cover_color[simplices[i][1]].first > MASK) graphic << simplices[i][0] << " " << simplices[i][1] << std::endl; graphic.close(); + char command[100]; sprintf(command, "python visu.py && firefox SC_visu.html"); + int systemRet = system(command); + if(systemRet == -1) std::cout << "Visualization failed. Do you have python and firefox?" << std::endl; } // ******************************************************************************************************************* @@ -663,8 +724,8 @@ class Graph_induced_complex { */ template void create_complex(SimplicialComplexForGIC & complex) { - size_t sz = simplices.size(); int dimension = 0; - for(int i = 0; i < sz; i++){ + size_t sz = simplices.size(); unsigned int dimension = 0; + for(unsigned int i = 0; i < sz; i++){ complex.insert_simplex_and_subfaces(simplices[i]); if(dimension < simplices[i].size()-1) dimension = simplices[i].size()-1; } @@ -681,7 +742,7 @@ class Graph_induced_complex { int num_nodes = cover_elts.size(); std::vector simplex; for(int i = 0; i < num_nodes; i++) - for(int j = 0; j < cover_elts[i].size(); j++) + for(unsigned int j = 0; j < cover_elts[i].size(); j++) simplex.push_back(cover_elts[i][j]); std::sort(simplex.begin(),simplex.end()); std::vector::iterator it = std::unique(simplex.begin(),simplex.end()); simplex.resize(std::distance(simplex.begin(),it)); diff --git a/src/Nerve_GIC/test/CMakeLists.txt b/src/Nerve_GIC/test/CMakeLists.txt new file mode 100644 index 00000000..627778fa --- /dev/null +++ b/src/Nerve_GIC/test/CMakeLists.txt @@ -0,0 +1,23 @@ +cmake_minimum_required(VERSION 2.6) +project(Graph_induced_complex_tests) + +if (GCOVR_PATH) + # for gcovr to make coverage reports - Corbera Jenkins plugin + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage") +endif() +if (GPROF_PATH) + # for gprof to make coverage reports - Jenkins + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pg") +endif() + +add_executable ( graph_induced_complex_UT test_GIC.cpp ) +target_link_libraries(graph_induced_complex_UT ${Boost_SYSTEM_LIBRARY} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) +if (TBB_FOUND) + target_link_libraries(graph_induced_complex_UT ${TBB_LIBRARIES}) +endif() + +file(COPY data DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/) + +add_test(graph_induced_complex_UT ${CMAKE_CURRENT_BINARY_DIR}/graph_induced_complex_UT + # XML format for Jenkins xUnit plugin + --log_format=XML --log_sink=${CMAKE_SOURCE_DIR}/graph_induced_complex_UT.xml --log_level=test_suite --report_level=no) diff --git a/src/common/doc/main_page.h b/src/common/doc/main_page.h index e6f29fa8..b1625e69 100644 --- a/src/common/doc/main_page.h +++ b/src/common/doc/main_page.h @@ -93,6 +93,24 @@ User manual: \ref simplex_tree - Reference manual: Gudhi::Simplex_tree + + \subsection GICDataStructure Nerves and Graph Induced Complexes + \image html "gic_complex.png" "Graph Induced Complex of a point cloud." + + + + +
+ Author: Mathieu Carrière
+ Introduced in: GUDHI 2.0.1
+ Copyright: GPL v3
+
+ Nerves and Graph Induced Complexes are simplicial complexes that provably contain + topological information about the input data. They can be computed with a cover of the + data, that often comes from the preimage of a family of intervals covering the image + of a scalar-valued function defined on the data.
+ User manual: \ref graph_induced_complex - Reference manual: Gudhi::graph_induced_complex::Graph_induced_complex +
\subsection SkeletonBlockerDataStructure Skeleton blocker \image html "ds_representation.png" "Skeleton blocker representation" -- cgit v1.2.3 From 0654bfbab17fe16edf90445f0a351454b460028f Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Tue, 30 May 2017 15:20:29 +0000 Subject: Fix spell checker errors git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/persistence_representation_integration@2475 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 94422e6f356532b2db4dc5a55cbb851210b3c36d --- CMakeLists.txt | 16 +- src/CMakeLists.txt | 12 +- src/Doxyfile | 4 +- .../concept/Real_valued_topological_data.h | 21 ++- .../concept/Topological_data_with_averages.h | 11 +- .../concept/Topological_data_with_distances.h | 22 ++- .../concept/Topological_data_with_scalar_product.h | 15 +- .../concept/Vectorized_topological_data.h | 15 +- .../doc/Persistence_representations_doc.h | 52 +++--- .../example/persistence_heat_maps.cpp | 4 +- .../example/persistence_intervals.cpp | 4 +- .../example/persistence_landscape.cpp | 4 +- .../example/persistence_landscape_on_grid.cpp | 2 +- .../include/gudhi/PSSK.h | 15 +- .../include/gudhi/Persistence_heat_maps.h | 85 +++++---- .../include/gudhi/Persistence_intervals.h | 106 +++--------- .../gudhi/Persistence_intervals_with_distances.h | 12 +- .../include/gudhi/Persistence_landscape.h | 116 +++++-------- .../include/gudhi/Persistence_landscape_on_grid.h | 192 ++++++--------------- .../include/gudhi/Persistence_vectors.h | 105 ++++------- .../gudhi/common_persistence_representations.h | 28 ++- .../include/gudhi/read_persistence_from_file.h | 104 ++--------- .../compute_distance_of_persistence_heat_maps.cpp | 9 +- ...h_m_weighted_by_arctan_of_their_persistence.cpp | 4 +- ...te_p_h_m_weighted_by_distance_from_diagonal.cpp | 4 +- ...ate_p_h_m_weighted_by_squared_diag_distance.cpp | 2 +- .../create_persistence_heat_maps.cpp | 2 +- .../persistence_heat_maps/create_pssk.cpp | 2 +- .../plot_persistence_heat_map.cpp | 2 +- .../compute_bottleneck_distance.cpp | 2 +- .../plot_histogram_of_intervals_lengths.cpp | 2 +- .../plot_persistence_Betti_numbers.cpp | 7 +- .../compute_distance_of_landscapes.cpp | 2 +- .../persistence_landscapes/plot_landscapes.cpp | 2 +- .../compute_distance_of_landscapes_on_grid.cpp | 6 +- .../plot_landscapes_on_grid.cpp | 2 +- .../compute_distance_of_persistence_vectors.cpp | 3 +- .../create_persistence_vectors.cpp | 3 +- src/cmake/modules/GUDHI_user_version_target.txt | 2 +- src/common/doc/main_page.h | 13 +- src/common/include/gudhi/distance_functions.h | 5 + 41 files changed, 384 insertions(+), 635 deletions(-) (limited to 'src/common/doc') diff --git a/CMakeLists.txt b/CMakeLists.txt index 4c772506..30306885 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,7 +52,7 @@ include_directories(src/Spatial_searching/include/) include_directories(src/Subsampling/include/) include_directories(src/Tangential_complex/include/) include_directories(src/Witness_complex/include/) -include_directories(src/Gudhi_stat/include/) +include_directories(src/Persistence_representations/include/) add_subdirectory(src/common/example) add_subdirectory(src/common/test) @@ -82,13 +82,13 @@ add_subdirectory(src/Bottleneck_distance/test) add_subdirectory(src/Bottleneck_distance/benchmark) add_subdirectory(src/Rips_complex/example) add_subdirectory(src/Rips_complex/test) -add_subdirectory(src/Gudhi_stat/test) -add_subdirectory(src/Gudhi_stat/example) -add_subdirectory(src/Gudhi_stat/utilities/persistence_heat_maps) -add_subdirectory(src/Gudhi_stat/utilities/persistence_intervals) -add_subdirectory(src/Gudhi_stat/utilities/persistence_landscapes) -add_subdirectory(src/Gudhi_stat/utilities/persistence_landscapes_on_grid) -add_subdirectory(src/Gudhi_stat/utilities/persistence_vectors) +add_subdirectory(src/Persistence_representations/test) +add_subdirectory(src/Persistence_representations/example) +add_subdirectory(src/Persistence_representations/utilities/persistence_heat_maps) +add_subdirectory(src/Persistence_representations/utilities/persistence_intervals) +add_subdirectory(src/Persistence_representations/utilities/persistence_landscapes) +add_subdirectory(src/Persistence_representations/utilities/persistence_landscapes_on_grid) +add_subdirectory(src/Persistence_representations/utilities/persistence_vectors) # data points generator add_subdirectory(data/points/generator) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fe4eb677..06e479be 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -52,12 +52,12 @@ add_subdirectory(example/Spatial_searching) add_subdirectory(example/Subsampling) add_subdirectory(example/Tangential_complex) add_subdirectory(example/Bottleneck_distance) -add_subdirectory(example/Gudhi_stat) -add_subdirectory(utilities/Gudhi_stat/persistence_heat_maps) -add_subdirectory(utilities/Gudhi_stat/persistence_intervals) -add_subdirectory(utilities/Gudhi_stat/persistence_landscapes) -add_subdirectory(utilities/Gudhi_stat/persistence_landscapes_on_grid) -add_subdirectory(utilities/Gudhi_stat/persistence_vectors) +add_subdirectory(example/Persistence_representations) +add_subdirectory(utilities/Persistence_representations/persistence_heat_maps) +add_subdirectory(utilities/Persistence_representations/persistence_intervals) +add_subdirectory(utilities/Persistence_representations/persistence_landscapes) +add_subdirectory(utilities/Persistence_representations/persistence_landscapes_on_grid) +add_subdirectory(utilities/Persistence_representations/persistence_vectors) # data points generator add_subdirectory(data/points/generator) diff --git a/src/Doxyfile b/src/Doxyfile index f4df4e84..eb0b3e9e 100644 --- a/src/Doxyfile +++ b/src/Doxyfile @@ -852,7 +852,7 @@ IMAGE_PATH = doc/Skeleton_blocker/ \ doc/Spatial_searching/ \ doc/Tangential_complex/ \ doc/Bottleneck_distance/ \ - doc/Gudhi_stat/ + doc/Persistence_representations/ # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program @@ -2116,7 +2116,7 @@ COLLABORATION_GRAPH = NO # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. -GROUP_GRAPHS = YES +GROUP_GRAPHS = NO # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling diff --git a/src/Persistence_representations/concept/Real_valued_topological_data.h b/src/Persistence_representations/concept/Real_valued_topological_data.h index 4d4ee8d3..5a15c769 100644 --- a/src/Persistence_representations/concept/Real_valued_topological_data.h +++ b/src/Persistence_representations/concept/Real_valued_topological_data.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2015 INRIA (France) + * Copyright (C) 2017 INRIA (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 @@ -20,6 +20,14 @@ * along with this program. If not, see . */ +#ifndef CONCEPT_REAL_VALUED_TOPOLOGICAL_DATA_H_ +#define CONCEPT_REAL_VALUED_TOPOLOGICAL_DATA_H_ + +namespace Gudhi { + +namespace Persistence_representations { + + /** \brief The concept Real_valued_topological_data describes the requirements * for a type to implement a container that allows computations of its projections to R. */ @@ -27,12 +35,19 @@ class Real_valued_topological_data { public: /** - * Typically there are various ways data can be projected to R. This function give us the number of functions for vectorization provided by a given class. + * Typically there are various ways data can be projected to R. This function gives us the number of functions for + * vectorization provided by a given class. **/ size_t number_of_projections_to_R(); /** - * This is a function to compute the projection from this container to reals. The parameter of a function have to be between 0 and the value returned by number_of_projections_to_R(). + * This is a function to compute the projection from this container to reals. The parameter of a function have to + * be between 0 and the value returned by number_of_projections_to_R(). **/ double project_to_R( size_t number_of_projection ); }; +} // namespace Persistence_representations + +} // namespace Gudhi + +#endif // CONCEPT_REAL_VALUED_TOPOLOGICAL_DATA_H_ diff --git a/src/Persistence_representations/concept/Topological_data_with_averages.h b/src/Persistence_representations/concept/Topological_data_with_averages.h index aeeb94f0..0501c306 100644 --- a/src/Persistence_representations/concept/Topological_data_with_averages.h +++ b/src/Persistence_representations/concept/Topological_data_with_averages.h @@ -5,7 +5,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2015 INRIA (France) + * Copyright (C) 2017 INRIA (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 @@ -21,7 +21,12 @@ * along with this program. If not, see . */ +#ifndef CONCEPT_TOPOLOGICAL_DATA_WITH_AVERAGES_H_ +#define CONCEPT_TOPOLOGICAL_DATA_WITH_AVERAGES_H_ +namespace Gudhi { + +namespace Persistence_representations { /** \brief The concept Topological_data_with_averages describes the requirements * for a type to implement a container that allows computations of averages. @@ -33,4 +38,8 @@ public: void compute_average( const std::vector< Topological_data_with_averages* >& to_average ); }; +} // namespace Persistence_representations + +} // namespace Gudhi +#endif // CONCEPT_TOPOLOGICAL_DATA_WITH_AVERAGES_H_ diff --git a/src/Persistence_representations/concept/Topological_data_with_distances.h b/src/Persistence_representations/concept/Topological_data_with_distances.h index 1318b9d1..2e6de729 100644 --- a/src/Persistence_representations/concept/Topological_data_with_distances.h +++ b/src/Persistence_representations/concept/Topological_data_with_distances.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2015 INRIA (France) + * Copyright (C) 2017 INRIA (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 @@ -20,11 +20,22 @@ * along with this program. If not, see . */ +#ifndef CONCEPT_TOPOLOGICAL_DATA_WITH_DISTANCES_H_ +#define CONCEPT_TOPOLOGICAL_DATA_WITH_DISTANCES_H_ + +namespace Gudhi { + +namespace Persistence_representations { + + /** \brief The concept Topological_data_with_distances describes the requirements - * for a type to implement a container that allows computations of distance to another contained of that type. + * for a type to implement a container that allows computations of distance to another contained of that type. + * \details * The second parameter of the distance function allow to declare power of a distance. The exact meaning of that * number will be different for different distances. A few examples are given below: - * In case of p-Wasserstein distance, the power is equal to p. power = std::limit::max() for bottleneck distance. + * In case of p-Wasserstein distance, the power is equal to p. power = std::limit::max() for bottleneck + * distance. + * * In case of L^p landscape distance, the power is equal to p. s */ class Topological_data_with_distances @@ -33,3 +44,8 @@ public: double distance( const Topological_data_with_distances& second , double power = 1); }; +} // namespace Persistence_representations + +} // namespace Gudhi + +#endif // CONCEPT_TOPOLOGICAL_DATA_WITH_DISTANCES_H_ diff --git a/src/Persistence_representations/concept/Topological_data_with_scalar_product.h b/src/Persistence_representations/concept/Topological_data_with_scalar_product.h index f32271c7..203a1d91 100644 --- a/src/Persistence_representations/concept/Topological_data_with_scalar_product.h +++ b/src/Persistence_representations/concept/Topological_data_with_scalar_product.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2015 INRIA (France) + * Copyright (C) 2017 INRIA (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 @@ -20,6 +20,13 @@ * along with this program. If not, see . */ +#ifndef CONCEPT_TOPOLOGICAL_DATA_WITH_SCALAR_PRODUCT_H_ +#define CONCEPT_TOPOLOGICAL_DATA_WITH_SCALAR_PRODUCT_H_ + +namespace Gudhi { + +namespace Persistence_representations { + /** \brief The concept Topological_data_with_scalar_product describes the requirements * for a type to implement a container that allows computations of scalar products. @@ -29,3 +36,9 @@ class Topological_data_with_scalar_product public: double compute_scalar_product( const Topological_data_with_scalar_product& second ); }; + +} // namespace Persistence_representations + +} // namespace Gudhi + +#endif // CONCEPT_TOPOLOGICAL_DATA_WITH_SCALAR_PRODUCT_H_ diff --git a/src/Persistence_representations/concept/Vectorized_topological_data.h b/src/Persistence_representations/concept/Vectorized_topological_data.h index 2dd966fd..8d4105a2 100644 --- a/src/Persistence_representations/concept/Vectorized_topological_data.h +++ b/src/Persistence_representations/concept/Vectorized_topological_data.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2015 INRIA (France) + * Copyright (C) 2017 INRIA (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 @@ -20,6 +20,12 @@ * along with this program. If not, see . */ +#ifndef CONCEPT_VECTORIZED_TOPOLOGICAL_DATA_H_ +#define CONCEPT_VECTORIZED_TOPOLOGICAL_DATA_H_ + +namespace Gudhi { + +namespace Persistence_representations { /** \brief The concept Vectorized_topological_data describes the requirements * for a type to implement a container that allows vectorization. @@ -28,7 +34,7 @@ class Vectorized_topological_data { public: /** - * There are various ways data can be verctorized. This function give us the number of functions for vectorization provided by a given class. + * There are various ways data can be vectorized. This function give us the number of functions for vectorization provided by a given class. **/ size_t number_of_vectorize_functions(); /** @@ -37,3 +43,8 @@ public: std::vector vectorize( int number_of_function ); }; +} // namespace Persistence_representations + +} // namespace Gudhi + +#endif // CONCEPT_VECTORIZED_TOPOLOGICAL_DATA_H_ diff --git a/src/Persistence_representations/doc/Persistence_representations_doc.h b/src/Persistence_representations/doc/Persistence_representations_doc.h index 215616a0..bc11d2c4 100644 --- a/src/Persistence_representations/doc/Persistence_representations_doc.h +++ b/src/Persistence_representations/doc/Persistence_representations_doc.h @@ -28,12 +28,12 @@ namespace Gudhi { namespace Persistence_representations { -/** \defgroup Persistence_representations Persistence_representations +/** \defgroup Persistence_representations Persistence representations * * \author Pawel Dlotko * * @{ - *\section idea Idea + *\section Persistence_representations_idea Idea *In order to perform most of the statistical tests and machine learning algorithms on a data one need to be able to perform only a very limited number of operations on them. Let us fix a representation of * data of a type A. To perform most of the statistical and machine learning operations one need to be able to compute average of objects of type A (so that the averaged object is also of a type A), to @@ -71,24 +71,24 @@ namespace Persistence_representations { *\li Persistence diagrams / barcodes (allow computation of distances, vectorizations and real value characteristics). * * - *Note that at the while functionalities like averaging, distances and scalar products are fixed, there is no canonical way of vectorizing and computing real valued characteristics of objects. Therefore the + * Note that at the while functionalities like averaging, distances and scalar products are fixed, there is no canonical way of vectorizing and computing real valued characteristics of objects. Therefore the * vectorizations and computation of real value characteristics procedures are quite likely to evolve in the furthering versions of the library. * - *The main aim of this implementation is to be able to implement various statistical methods, both on the level of C++ and on the level of python. The methods will operate on the functionalities offered + * The main aim of this implementation is to be able to implement various statistical methods, both on the level of C++ and on the level of python. The methods will operate on the functionalities offered * by concepts. That means that the statistical and ML methods will be able to operate on any representation that implement the required concept (including the ones that are not in the library at the moment). * That gives provides a framework, that is very easy to extend, for topological statistics. * - *Below we are discussing the representations which are currently implemented in Persistence\_representations package: + * Below we are discussing the representations which are currently implemented in Persistence\_representations package: * - *\section sec_persistence_landscapes Persistence Landscapes - * Reference manual: \ref Gudhi::Persistence_representations::Persistence_landscape - *Persistence landscapes were originally proposed by Bubenik in \cite bubenik_landscapes_2015. Efficient algorithms to compute them rigorously were proposed by Bubenik and Dlotko in \cite bubenik_dlotko_landscapes_2016. The idea of + * \section sec_persistence_landscapes Persistence Landscapes + * Reference manual: \ref Gudhi::Persistence_representations::Persistence_landscape
+ * Persistence landscapes were originally proposed by Bubenik in \cite bubenik_landscapes_2015. Efficient algorithms to compute them rigorously were proposed by Bubenik and Dlotko in \cite bubenik_dlotko_landscapes_2016. The idea of * persistence landscapes is shortly summarized in below. * - *To begin with, suppose we are given a point \f$(b,d) \in \mathbb{R}^2\f$ in a - *persistence diagram. With this point, we associate a piecewise - *linear function \f$f_{(b,d)} : \mathbb{R} \rightarrow [0,\infty)\f$, which is - *defined as + * To begin with, suppose we are given a point \f$(b,d) \in \mathbb{R}^2\f$ in a + * persistence diagram. With this point, we associate a piecewise + * linear function \f$f_{(b,d)} : \mathbb{R} \rightarrow [0,\infty)\f$, which is + * defined as * * \f[f_{(b,d)}(x) = * \left\{ \begin{array}{ccl} @@ -100,16 +100,16 @@ namespace Persistence_representations { * \end{array} \right. *\f] * - *A persistence landscape of the birth-death - *pairs \f$(b_i , d_i)\f$, where \f$i = 1,\ldots,m\f$, which constitute the given - *persistence diagram is the sequence of functions \f$\lambda_k : \mathbb{R} \rightarrow [0,\infty)\f$ for \f$k \in \mathbb{N}\f$, where \f$\lambda_k(x)\f$ - *denotes the \f$k^{\rm th}\f$ largest value of the numbers \f$f_{(b_i,d_i)}(x)\f$, - *for \f$i = 1, \ldots, m\f$, and we define \f$\lambda_k(x) = 0\f$ if \f$k > m\f$. - *Equivalently, this sequence of functions can be combined into a single - *function \f$L : \mathbb{N} \times \mathbb{R} \to [0,\infty)\f$ of two - *variables, if we define \f$L(k,t) = \lambda_k(t)\f$. + * A persistence landscape of the birth-death + * pairs \f$(b_i , d_i)\f$, where \f$i = 1,\ldots,m\f$, which constitute the given + * persistence diagram is the sequence of functions \f$\lambda_k : \mathbb{R} \rightarrow [0,\infty)\f$ for \f$k \in \mathbb{N}\f$, where \f$\lambda_k(x)\f$ + * denotes the \f$k^{\rm th}\f$ largest value of the numbers \f$f_{(b_i,d_i)}(x)\f$, + * for \f$i = 1, \ldots, m\f$, and we define \f$\lambda_k(x) = 0\f$ if \f$k > m\f$. + * Equivalently, this sequence of functions can be combined into a single + * function \f$L : \mathbb{N} \times \mathbb{R} \to [0,\infty)\f$ of two + * variables, if we define \f$L(k,t) = \lambda_k(t)\f$. * - *The detailed description of algorithms used to compute persistence landscapes can be found in \cite bubenik_dlotko_landscapes_2016. + * The detailed description of algorithms used to compute persistence landscapes can be found in \cite bubenik_dlotko_landscapes_2016. * Note that this implementation provides exact representation of landscapes. That have many advantages, but also a few drawbacks. For instance, as discussed * in \cite bubenik_dlotko_landscapes_2016, the exact representation of landscape may be of quadratic size with respect to the input persistence diagram. It may therefore happen * that, for very large diagrams, using this representation may be memory--prohibitive. In such a case, there are two possible ways to proceed: @@ -120,13 +120,13 @@ namespace Persistence_representations { * * *\section sec_landscapes_on_grid Persistence Landscapes on a grid - * Reference manual: \ref Gudhi::Persistence_representations::Persistence_landscape_on_grid - *This is an alternative, not--exact, representation of persistence landscapes defined in the Section \ref sec_persistence_landscapes. Unlike in the Section \ref sec_persistence_landscapes we build a + * Reference manual: \ref Gudhi::Persistence_representations::Persistence_landscape_on_grid
+ * This is an alternative, not--exact, representation of persistence landscapes defined in the Section \ref sec_persistence_landscapes. Unlike in the Section \ref sec_persistence_landscapes we build a * representation of persistence landscape by sampling its values on a finite, equally distributed grid of points. * Since, the persistence landscapes that originate from persistence diagrams have slope \f$1\f$ or \f$-1\f$, we have an estimate of a region between the grid points where the landscape cab be located. * That allows to estimate an error make when performing various operations on landscape. Note that for average landscapes the slope is in range \f$[-1,1]\f$ and similar estimate can be used. * - *Due to a lack of rigorous description of the algorithms to deal with this non--rigorous representaion of persistence landscapes in the literature, we are providing a short discussion of them in below. + * Due to a lack of rigorous description of the algorithms to deal with this non--rigorous representation of persistence landscapes in the literature, we are providing a short discussion of them in below. * *Let us assume that we want to compute persistence landscape on a interval \f$[x,y]\f$. Let us assume that we want to use \f$N\f$ grid points for that purpose. * Then we will sample the persistence landscape on points \f$x_1 = x , x_2 = x + \frac{y-x}{N}, \ldots , x_{N} = y\f$. Persistence landscapes are represented as a vector of @@ -153,7 +153,7 @@ namespace Persistence_representations { *Note that the same representation is used in TDA R-package \cite Fasy_Kim_Lecci_Maria_tda. * *\section sec_persistence_heat_maps Persistence heat maps - * Reference manual: \ref Gudhi::Persistence_representations::Persistence heat maps + * Reference manual: \ref Gudhi::Persistence_representations::Persistence_heat_maps
*This is a general class of discrete structures which are based on idea of placing a kernel in the points of persistence diagrams. *This idea appeared in work by many authors over the last 15 years. As far as we know this idea was firstly described in the work of Bologna group in \cite Ferri_Frosini_comparision_sheme_1 and \cite Ferri_Frosini_comparision_sheme_2. *Later it has been described by Colorado State University group in \cite Persistence_Images_2017. The presented paper in the first time provide a discussion of stability of the representation. @@ -177,7 +177,7 @@ namespace Persistence_representations { * * *\section sec_persistence_vectors Persistence vectors - * Reference manual: \ref Gudhi::Persistence_representations::Persistence vectors + * Reference manual: \ref Gudhi::Persistence_representations::Vector_distances_in_diagram
*This is a representation of persistent homology in a form of a vector which was designed for an application in 3d graphic in \cite Carriere_Oudot_Ovsjanikov_top_signatures_3d. Below we provide a short description of this representation. * *Given a persistence diagram \f$D = \{ (b_i,d_i) \}\f$, for every pair of birth--death points \f$(b_1,d_1)\f$ and \f$(b_2,d_2)\f$ we compute the following three distances: diff --git a/src/Persistence_representations/example/persistence_heat_maps.cpp b/src/Persistence_representations/example/persistence_heat_maps.cpp index da87486d..c75e2731 100644 --- a/src/Persistence_representations/example/persistence_heat_maps.cpp +++ b/src/Persistence_representations/example/persistence_heat_maps.cpp @@ -55,7 +55,7 @@ int main( int argc , char** argv ) persistence2.push_back( std::make_pair(3,5) ); persistence2.push_back( std::make_pair(6,10) ); - //over here we define a function we sill put on a top on every birth--death pair in the persistence interval. It can be anything. Over here we will use standarg Gaussian + //over here we define a function we sill put on a top on every birth--death pair in the persistence interval. It can be anything. Over here we will use standard Gaussian std::vector< std::vector > filter = create_Gaussian_filter(5,1); //creating two heat maps. @@ -72,7 +72,7 @@ int main( int argc , char** argv ) Persistence_heat_maps median; median.compute_median( vector_of_maps ); - //to compute L^1 disance between hm1 and hm2: + //to compute L^1 distance between hm1 and hm2: std::cout << "The L^1 distance is : " << hm1.distance( hm2 , 1 ) << std::endl; //to average of hm1 and hm2: diff --git a/src/Persistence_representations/example/persistence_intervals.cpp b/src/Persistence_representations/example/persistence_intervals.cpp index ed5b4e34..947c9627 100644 --- a/src/Persistence_representations/example/persistence_intervals.cpp +++ b/src/Persistence_representations/example/persistence_intervals.cpp @@ -47,7 +47,7 @@ int main( int argc , char** argv ) std::vector dominant_ten_intervals_length = p.length_of_dominant_intervals(10); - std::cout << "Lendth of ten dominant intervals : " < cumulative_histogram = p.cumulative_histogram_of_lengths( 10 ); - std::cout<< "Cumuative histogram : " <. */ -#pragma once -#ifndef PSSK_H -#define PSSK_H +#ifndef PSSK_H_ +#define PSSK_H_ //gudhi include #include @@ -138,7 +137,7 @@ void PSSK::construct( const std::vector< std::pair >& intervals_ std::cerr << "y_grid : " << y_grid << std::endl; } - //x_grid and y_grid gives a center of the kernel. We want to have its lower left cordner. To get this, we need to shift x_grid and y_grid by a grid diameter. + //x_grid and y_grid gives a center of the kernel. We want to have its lower left corner. To get this, we need to shift x_grid and y_grid by a grid diameter. x_grid -= filter.size()/2; y_grid -= filter.size()/2; //note that the numbers x_grid and y_grid may be negative. @@ -174,8 +173,8 @@ void PSSK::construct( const std::vector< std::pair >& intervals_ } }//construct +} //namespace Persistence_representations +} //namespace Gudhi -#endif -}//namespace Gudhi_stat -}//namespace Gudhi +#endif // PSSK_H_ diff --git a/src/Persistence_representations/include/gudhi/Persistence_heat_maps.h b/src/Persistence_representations/include/gudhi/Persistence_heat_maps.h index 59e58e41..a20702ff 100644 --- a/src/Persistence_representations/include/gudhi/Persistence_heat_maps.h +++ b/src/Persistence_representations/include/gudhi/Persistence_heat_maps.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2015 INRIA (France) + * Copyright (C) 2017 INRIA (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 @@ -20,8 +20,8 @@ * along with this program. If not, see . */ -#ifndef Persistence_heat_maps_H -#define Persistence_heat_maps_H +#ifndef PERSISTENCE_HEAT_MAPS_H_ +#define PERSISTENCE_HEAT_MAPS_H_ //standard include #include @@ -69,7 +69,7 @@ std::vector< std::vector > create_Gaussian_filter( size_t pixel_radius , if ( dbg ) { - std::cerr << "Kernel initalize \n"; + std::cerr << "Kernel initialize \n"; std::cerr << "pixel_radius : " << pixel_radius << std::endl; std::cerr << "kernel.size() : " << kernel.size() << std::endl; getchar(); @@ -114,7 +114,7 @@ std::vector< std::vector > create_Gaussian_filter( size_t pixel_radius , /* -* There are various options to scale the poits depending on their location. One can for instance: +* There are various options to scale the points depending on their location. One can for instance: * (1) do nothing (scale all of them with the weight 1), as in the function constant_function * (2) Scale them by the distance to the diagonal. This is implemented in function * (3) Scale them with the square of their distance to diagonal. This is implemented in function @@ -123,8 +123,8 @@ std::vector< std::vector > create_Gaussian_filter( size_t pixel_radius , /** - * This is one of a scaling functions used to weight poits depending on their persistence and/or location in the diagram. - * This particular functiona is a finction which always assign value 1 to a point in the diagram. + * This is one of a scaling functions used to weight points depending on their persistence and/or location in the diagram. + * This particular functionality is a function which always assign value 1 to a point in the diagram. **/ class constant_scaling_function { @@ -137,7 +137,7 @@ public: /** - * This is one of a scaling functions used to weight poits depending on their persistence and/or location in the diagram. + * This is one of a scaling functions used to weight points depending on their persistence and/or location in the diagram. * The scaling given by this function to a point (b,d) is Euclidean distance of (b,d) from diagonal. **/ class distance_from_diagonal_scaling @@ -151,7 +151,7 @@ public: }; /** - * This is one of a scaling functions used to weight poits depending on their persistence and/or location in the diagram. + * This is one of a scaling functions used to weight points depending on their persistence and/or location in the diagram. * The scaling given by this function to a point (b,d) is a square of Euclidean distance of (b,d) from diagonal. **/ class squared_distance_from_diagonal_scaling @@ -164,7 +164,7 @@ public: }; /** - * This is one of a scaling functions used to weight poits depending on their persistence and/or location in the diagram. + * This is one of a scaling functions used to weight points depending on their persistence and/or location in the diagram. * The scaling given by this function to a point (b,d) is an arctan of a persistence of a point (i.e. arctan( b-d ). **/ class arc_tan_of_persistence_of_point @@ -177,7 +177,7 @@ public: }; /** - * This is one of a scaling functions used to weight poits depending on their persistence and/or location in the diagram. + * This is one of a scaling functions used to weight points depending on their persistence and/or location in the diagram. * This scaling function do not only depend on a point (p,d) in the diagram, but it depends on the whole diagram. * The longest persistence pair get a scaling 1. Any other pair get a scaling belong to [0,1], which is proportional * to the persistence of that pair. @@ -196,14 +196,19 @@ private: /** - * This class implements the following concepts: Vectorized_topological_data, Topological_data_with_distances, Real_valued_topological_data, Topological_data_with_averages, Topological_data_with_scalar_product -**/ + * \class Persistence_heat_maps Persistence_heat_maps.h gudhi/Persistence_heat_maps.h + * \brief A class implementing persistence heat maps. + * + * \ingroup Persistence_representations +**/ + +// This class implements the following concepts: Vectorized_topological_data, Topological_data_with_distances, Real_valued_topological_data, Topological_data_with_averages, Topological_data_with_scalar_product template class Persistence_heat_maps { public: /** - * The default constructor. A scaling function from the diagonal is set up to a constant function. The image is not erased below the diagonal. The gaussian have diameter 5. + * The default constructor. A scaling function from the diagonal is set up to a constant function. The image is not erased below the diagonal. The Gaussian have diameter 5. **/ Persistence_heat_maps() { @@ -217,7 +222,7 @@ public: /** * Construction that takes at the input the following parameters: * (1) A vector of pairs of doubles (representing persistence intervals). All other parameters are optional. They are: - * (2) a Gausian filter generated by create_Gaussian_filter filter (the default value of this vaiable is a Gaussian filter of a radius 5), + * (2) a Gaussian filter generated by create_Gaussian_filter filter (the default value of this variable is a Gaussian filter of a radius 5), * (3) a boolean value which determines if the area of image below diagonal should, or should not be erased (it will be erased by default). * (4) a number of pixels in each direction (set to 1000 by default). * (5) a min x and y value of points that are to be taken into account. By default it is set to std::numeric_limits::max(), in which case the program compute the values based on the data, @@ -226,12 +231,12 @@ public: Persistence_heat_maps( const std::vector< std::pair< double,double > > & interval , std::vector< std::vector > filter = create_Gaussian_filter(5,1) , bool erase_below_diagonal = false , size_t number_of_pixels = 1000 , double min_ = std::numeric_limits::max() , double max_ = std::numeric_limits::max() ); /** - * Construction that takes at the input a name of a file with persistence intervals, a filter (radius 5 by default), a scaling function (constant by default), a boolean value which determines if the area of image below diagonal should, or should not be erased (should by default). The next parameter is the number of pixels in each direction (set to 1000 by default). and min and max values of images (both set to std::numeric_limits::max() by defaulet. If this is the case, the program will pick the right values based on the data). + * Construction that takes at the input a name of a file with persistence intervals, a filter (radius 5 by default), a scaling function (constant by default), a boolean value which determines if the area of image below diagonal should, or should not be erased (should by default). The next parameter is the number of pixels in each direction (set to 1000 by default) and min and max values of images (both set to std::numeric_limits::max() by default. If this is the case, the program will pick the right values based on the data). **/ /** * Construction that takes at the input the following parameters: - * (1) A a name of a file with persistence intervals. The file shold be readable by the function read_persistence_intervals_in_one_dimension_from_file. All other parameters are optional. They are: - * (2) a Gausian filter generated by create_Gaussian_filter filter (the default value of this vaiable is a Gaussian filter of a radius 5), + * (1) A name of a file with persistence intervals. The file should be readable by the function read_persistence_intervals_in_one_dimension_from_file. All other parameters are optional. They are: + * (2) a Gaussian filter generated by create_Gaussian_filter filter (the default value of this variable is a Gaussian filter of a radius 5), * (3) a boolean value which determines if the area of image below diagonal should, or should not be erased (it will be erased by default). * (4) a number of pixels in each direction (set to 1000 by default). * (5) a min x and y value of points that are to be taken into account. By default it is set to std::numeric_limits::max(), in which case the program compute the values based on the data, @@ -259,14 +264,14 @@ public: //put to file subroutine /** - * The function outputs the perssitence image to a text file. The format as follow: + * The function outputs the persistence image to a text file. The format as follow: * In the first line, the values min and max of the image are stored * In the next lines, we have the persistence images in a form of a bitmap image. **/ void print_to_file( const char* filename )const; /** - * A function that load a heat map from file to the current object (and arase qhatever was stored in the current object before). + * A function that load a heat map from file to the current object (and erase whatever was stored in the current object before). **/ void load_from_file( const char* filename ); @@ -347,7 +352,7 @@ public: /** - * A function to generate a gnuplot script to vizualize the persistent image. + * A function to generate a gnuplot script to visualize the persistent image. **/ void plot( const char* filename )const; @@ -474,7 +479,7 @@ public: //Implementations of functions for various concepts. /** - * This function produce a vector of doubles based on a persisence heat map. It is required in a concept Vectorized_topological_data + * This function produce a vector of doubles based on a persistence heat map. It is required in a concept Vectorized_topological_data */ std::vector vectorize( int number_of_function )const; /** @@ -486,9 +491,9 @@ public: } /** - * This function is required by the Real_valued_topological_data concept. It returns various projections od the persistence heat map to a real line. - * At the moment this function is not tested, since it is quite likelly to be changed in the future. Given this, when using it, keep in mind that it - * will be most likelly changed in the next versions. + * This function is required by the Real_valued_topological_data concept. It returns various projections on the persistence heat map to a real line. + * At the moment this function is not tested, since it is quite likely to be changed in the future. Given this, when using it, keep in mind that it + * will be most likely changed in the next versions. **/ double project_to_R( int number_of_function )const; /** @@ -515,7 +520,7 @@ public: /** * A function to compute scalar product of persistence heat maps. - * The parameter of this functionis a const reference to an object of a class Persistence_heat_maps. + * The parameter of this function is a const reference to an object of a class Persistence_heat_maps. * This function is required in Topological_data_with_scalar_product concept. **/ double compute_scalar_product( const Persistence_heat_maps& second_ )const; @@ -559,7 +564,6 @@ protected: } //data - //double (*scalling_function_with_respect_to_distance_from_diagonal)( const std::pair< double , double >& point_in_diagram ); Scalling_of_kernels f; bool erase_below_diagonal; double min_; @@ -583,7 +587,7 @@ void Persistence_heat_maps::construct( const std::vector< s if ( min_ == max_ ) { - if (dbg)std::cerr << "min and max parameters will be etermined based on intervals \n"; + if (dbg)std::cerr << "min and max parameters will be determined based on intervals \n"; //in this case, we want the program to set up the min_ and max_ values by itself. min_ = std::numeric_limits::max(); max_ = -std::numeric_limits::max(); @@ -636,7 +640,7 @@ void Persistence_heat_maps::construct( const std::vector< s std::cerr << "y_grid : " << y_grid << std::endl; } - //x_grid and y_grid gives a center of the kernel. We want to have its lower left cordner. To get this, we need to shift x_grid and y_grid by a grid diameter. + //x_grid and y_grid gives a center of the kernel. We want to have its lower left corner. To get this, we need to shift x_grid and y_grid by a grid diameter. x_grid -= filter.size()/2; y_grid -= filter.size()/2; //note that the numbers x_grid and y_grid may be negative. @@ -711,11 +715,6 @@ Persistence_heat_maps::Persistence_heat_maps( const char* f { intervals_ = read_persistence_intervals_in_one_dimension_from_file( filename , dimension ); } - //std::cerr << "intervals_.size() : " << intervals_.size() << std::endl; - //for ( size_t i = 0 ; i != intervals_.size() ; ++i ) - //{ - // std::cerr << intervals_[i].first << " " << intervals_[i].second << std::endl; - //} this->construct( intervals_ , filter, erase_below_diagonal , number_of_pixels , min_ , max_ ); this->set_up_parameters_for_basic_classes(); } @@ -956,11 +955,11 @@ double Persistence_heat_maps::distance( const Persistence_h //first we need to check if (*this) and second are defined on the same domain and have the same dimensions: if ( !this->check_if_the_same(second) ) { - std::cerr << "The persistence images are of noncompatible sizes. We cannot therefore compute distance between them. The program will now terminate"; - throw "The persistence images are of noncompatible sizes. We cannot therefore compute distance between them. The program will now terminate"; + std::cerr << "The persistence images are of non compatible sizes. We cannot therefore compute distance between them. The program will now terminate"; + throw "The persistence images are of non compatible sizes. We cannot therefore compute distance between them. The program will now terminate"; } - //if we are here, we know that the two persistence iomages are defined on the same domain, so we can start computing their distances: + //if we are here, we know that the two persistence images are defined on the same domain, so we can start computing their distances: double distance = 0; if ( power < std::numeric_limits::max() ) @@ -1016,11 +1015,11 @@ double Persistence_heat_maps::compute_scalar_product( const //first we need to check if (*this) and second are defined on the same domain and have the same dimensions: if ( !this->check_if_the_same(second) ) { - std::cerr << "The persistence images are of noncompatible sizes. We cannot therefore compute distance between them. The program will now terminate"; - throw "The persistence images are of noncompatible sizes. We cannot therefore compute distance between them. The program will now terminate"; + std::cerr << "The persistence images are of non compatible sizes. We cannot therefore compute distance between them. The program will now terminate"; + throw "The persistence images are of non compatible sizes. We cannot therefore compute distance between them. The program will now terminate"; } - //if we are here, we know that the two persistence iomages are defined on the same domain, so we can start computing their scalar product: + //if we are here, we know that the two persistence images are defined on the same domain, so we can start computing their scalar product: double scalar_prod = 0; for ( size_t i = 0 ; i != this->heat_map.size() ; ++i ) { @@ -1035,8 +1034,8 @@ double Persistence_heat_maps::compute_scalar_product( const -}//namespace Gudhi_stat -}//namespace Gudhi +} // namespace Persistence_representations +} // namespace Gudhi -#endif +#endif // PERSISTENCE_HEAT_MAPS_H_ diff --git a/src/Persistence_representations/include/gudhi/Persistence_intervals.h b/src/Persistence_representations/include/gudhi/Persistence_intervals.h index 792c0a28..40c24670 100644 --- a/src/Persistence_representations/include/gudhi/Persistence_intervals.h +++ b/src/Persistence_representations/include/gudhi/Persistence_intervals.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2015 INRIA (France) + * Copyright (C) 2017 INRIA (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 @@ -20,8 +20,8 @@ * along with this program. If not, see . */ -#ifndef Persistence_intervals_H_ -#define Persistence_intervals_H_ +#ifndef PERSISTENCE_INTERVALS_H_ +#define PERSISTENCE_INTERVALS_H_ //gudhi include #include @@ -48,14 +48,14 @@ class Persistence_intervals { public: /** - * This is a constructor of a class Persistence_intervals from a text file. Each line of the input file is supposed to contain two numbers of a type doube (or convertable to double) + * This is a constructor of a class Persistence_intervals from a text file. Each line of the input file is supposed to contain two numbers of a type double (or convertible to double) * representing the birth and the death of the persistence interval. If the pairs are not sorted so that birth <= death, then the constructor will sort then that way. - * * The second parameter of a constructor is a dimension of intervals to be read from a file. If your file contains only birt-death pairs, use the default value. + * * The second parameter of a constructor is a dimension of intervals to be read from a file. If your file contains only birth-death pairs, use the default value. **/ Persistence_intervals( const char* filename , unsigned dimension = std::numeric_limits::max() ); /** - * This is a constructor of a class Persistence_intervals from a vector of pairs. Each pair is assumed to represent a persistence interval. We assume that the first elemnets of pairs + * This is a constructor of a class Persistence_intervals from a vector of pairs. Each pair is assumed to represent a persistence interval. We assume that the first elements of pairs * are smaller or equal the second elements of pairs. **/ Persistence_intervals( const std::vector< std::pair< double,double > >& intervals ); @@ -102,15 +102,15 @@ public: std::vector< std::pair > dominant_intervals( size_t where_to_cut = 100 )const; /** - * Procedure to compute a histogram of interva's length. A histogram is a block plot. The number of blocks is determined by the first parameter of the function (set by default to 10). + * Procedure to compute a histogram of interval's length. A histogram is a block plot. The number of blocks is determined by the first parameter of the function (set by default to 10). * For the sake of argument let us assume that the length of the longest interval is 1 and the number of bins is 10. In this case the i-th block correspond to a range between i-1/10 and i10. * The vale of a block supported at the interval is the number of persistence intervals of a length between x_0 and x_1. **/ std::vector< size_t > histogram_of_lengths( size_t number_of_bins = 10 )const; /** - * Based on a histogram of intervals lengts computed by the function histogram_of_lengths H the procedure below computes the cumulative histogram. The i-th position of the resulting histogram - * is the sume of values of H for the positions from 0 to i. + * Based on a histogram of intervals lengths computed by the function histogram_of_lengths H the procedure below computes the cumulative histogram. The i-th position of the resulting histogram + * is the sum of values of H for the positions from 0 to i. **/ std::vector< size_t > cumulative_histogram_of_lengths( size_t number_of_bins = 10 )const; @@ -127,13 +127,13 @@ public: std::vector< double > cumulative_characteristic_function_of_diagram( double x_min , double x_max , size_t number_of_bins = 10 )const; /** - * Compute the funtion of persistence Betti numbers. The returned value is a vector of pair. First element of each pair is a place where persistence Betti numbers change. + * Compute the function of persistence Betti numbers. The returned value is a vector of pair. First element of each pair is a place where persistence Betti numbers change. * Second element of each pair is the value of Persistence Betti numbers at that point. **/ std::vector< std::pair< double , size_t > > compute_persistent_betti_numbers()const; /** - *This is a non optimal procedure that compute vector of distances from each point of diagram to its k-th nearest neighbor (k is a parameted of the program). The resulting vector is by default truncated to 10 + *This is a non optimal procedure that compute vector of distances from each point of diagram to its k-th nearest neighbor (k is a parameter of the program). The resulting vector is by default truncated to 10 *elements (this value can be changed by using the second parameter of the program). The points are returned in order from the ones which are farthest away from their k-th nearest neighbors. **/ std::vector< double > k_n_n( size_t k , size_t where_to_cut = 10 )const; @@ -188,12 +188,9 @@ public: std::cout << "Gnuplot script to visualize persistence diagram written to the file: " << nameStr << ". Type load '" << nameStr << "' in gnuplot to visualize." << std::endl; } - - - /** - * Retun numbr of points in the diagram. + * Return number of points in the diagram. **/ size_t size()const{return this->intervals.size();} @@ -207,25 +204,12 @@ public: } - - - - - - - - - - - - - //Implementations of functions for various concepts. /** - * This is a simple function projectig the persistence intervals to a real number. The function we use here is a sum of squared lendgths of intervals. It can be naturally interpreted as + * This is a simple function projecting the persistence intervals to a real number. The function we use here is a sum of squared lengths of intervals. It can be naturally interpreted as * sum of step function, where the step hight it equal to the length of the interval. - * At the moment this function is not tested, since it is quite likelly to be changed in the future. Given this, when using it, keep in mind that it - * will be most likelly changed in the next versions. + * At the moment this function is not tested, since it is quite likely to be changed in the future. Given this, when using it, keep in mind that it + * will be most likely changed in the next versions. **/ double project_to_R( int number_of_function )const; /** @@ -237,14 +221,14 @@ public: } /** - * Return a familly of vectors obtained from the persistence diagram. The i-th vector consist of the lenfth of i dominant persistence intervals. + * Return a family of vectors obtained from the persistence diagram. The i-th vector consist of the length of i dominant persistence intervals. **/ std::vector vectorize( int number_of_function )const { return this->length_of_dominant_intervals( number_of_function ); } /** - * This function return the number of functions that allows vectorization of a persisence diagram. It is required in a concept Vectorized_topological_data. + * This function return the number of functions that allows vectorization of a persistence diagram. It is required in a concept Vectorized_topological_data. **/ size_t number_of_vectorize_functions()const { @@ -252,19 +236,7 @@ public: } //end of implementation of functions needed for concepts. - //end of implementation of functions needed for concepts. - - - - - - - - - - - - + //For visualization use output from vectorize and build histograms. std::vector< std::pair< double,double > > output_for_visualization() @@ -289,37 +261,6 @@ protected: Persistence_intervals::Persistence_intervals( const char* filename , unsigned dimension ) { - //bool dbg = false; - //ifstream in; - //in.open( filename ); - - //if ( !in.good() ) - //{ - // throw("File with the persistence diagram do not exist, the program will now terminate.\n"); - //} - - //while ( true ) - //{ - // double first; - // double second; - // in >> first >> second; - - // if ( first > second ) - // { - // double buf = first; - // first = second; - // second = buf; - // } - - // if ( in.eof() )break; - // this->intervals.push_back( std::make_pair( first,second ) ); - // if ( dbg ) - // { - // std::cerr << "Adding interval [ " << first << " , " << second << " ]\n"; - // getchar(); - // } - //} - //in.close(); if ( dimension == std::numeric_limits::max() ) { this->intervals = read_persistence_intervals_in_one_dimension_from_file( filename ); @@ -490,7 +431,6 @@ std::vector< double > Persistence_intervals::characteristic_function_of_diagram( { result[pos] += ( (x_max - x_min)/(double)number_of_bins ) * ( this->intervals[i].second - this->intervals[i].first ); } - //cerr << "x_max : " << x_max << " x_min : " << x_min << " , number_of_bins : " << number_of_bins << " this->intervals[i].second : " << this->intervals[i].second << " this->intervals[i].first : " << this->intervals[i].first << endl; if ( dbg ) { std::cerr << "Result at this stage \n"; @@ -499,7 +439,6 @@ std::vector< double > Persistence_intervals::characteristic_function_of_diagram( std::cerr << result[aa] << " "; } std::cerr << std::endl; - //getchar(); } } return result; @@ -599,8 +538,7 @@ std::vector< double > Persistence_intervals::k_n_n( size_t k , size_t where_to_c { distancesFromI.push_back( compute_euclidean_distance( this->intervals[i] , this->intervals[j] ) ); } - //distances.push_back( distancesFromI ); - //also add a distance from this guy to daigonal: + //also add a distance from this guy to diagonal: double distanceToDiagonal = compute_euclidean_distance( this->intervals[i] , std::make_pair( 0.5*(this->intervals[i].first + this->intervals[i].second) , 0.5*(this->intervals[i].first + this->intervals[i].second) ) ); distances_from_diagonal[i] = distanceToDiagonal; @@ -694,7 +632,7 @@ double Persistence_intervals::project_to_R( int number_of_function )const } -}//namespace gudhi stat -}//namespace gudhi +} // namespace Persistence_representations +} // namespace gudhi -#endif +#endif // PERSISTENCE_INTERVALS_H_ diff --git a/src/Persistence_representations/include/gudhi/Persistence_intervals_with_distances.h b/src/Persistence_representations/include/gudhi/Persistence_intervals_with_distances.h index 7ef711e9..0da58399 100644 --- a/src/Persistence_representations/include/gudhi/Persistence_intervals_with_distances.h +++ b/src/Persistence_representations/include/gudhi/Persistence_intervals_with_distances.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2015 INRIA (France) + * Copyright (C) 2017 INRIA (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 @@ -20,8 +20,8 @@ * along with this program. If not, see . */ -#ifndef Persistence_intervals_WITH_DISTANCES_H_ -#define Persistence_intervals_WITH_DISTANCES_H_ +#ifndef PERSISTENCE_INTERVALS_WITH_DISTANCES_H_ +#define PERSISTENCE_INTERVALS_WITH_DISTANCES_H_ #include @@ -59,7 +59,7 @@ public: }; -}//namespace gudhi stat -}//namespace gudhi +} // namespace Persistence_representations +} // namespace gudhi -#endif +#endif // PERSISTENCE_INTERVALS_WITH_DISTANCES_H_ diff --git a/src/Persistence_representations/include/gudhi/Persistence_landscape.h b/src/Persistence_representations/include/gudhi/Persistence_landscape.h index 9a177b60..642bba84 100644 --- a/src/Persistence_representations/include/gudhi/Persistence_landscape.h +++ b/src/Persistence_representations/include/gudhi/Persistence_landscape.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2015 INRIA (France) + * Copyright (C) 2017 INRIA (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 @@ -21,8 +21,8 @@ */ -#ifndef Persistence_landscapes_H -#define Persistence_landscapes_H +#ifndef PERSISTENCE_LANDSCAPE_H_ +#define PERSISTENCE_LANDSCAPE_H_ //standard include #include @@ -48,7 +48,7 @@ namespace Persistence_representations -//predeclaration +// pre declaration class Persistence_landscape; template < typename operation > Persistence_landscape operation_on_pair_of_landscapes( const Persistence_landscape& land1 , const Persistence_landscape& land2 ); @@ -56,12 +56,25 @@ Persistence_landscape operation_on_pair_of_landscapes( const Persistence_landsca /** - * A clas implementing persistence landascpes data structures. For theroretical desciritpion, please consult a paper ''Statistical topological data analysis using persistence landscapes'' by Peter Bubenik. - * For details of algorithms, please consult ''A persistence landscapes toolbox for topological statistics'' by Peter Bubenik and Pawel Dlotko. - * Persistence landscapes allow vertorization, computations of distances, computations of projections to Real, computations of averages and scalar products. Therefore they implement suitable interfaces. - * It implements the following concepts: Vectorized_topological_data, Topological_data_with_distances, Real_valued_topological_data, Topological_data_with_averages, Topological_data_with_scalar_product - * Note that at the moment, due to roundoff errors during the construction of persistence landscapes, elements which are different by 0.000005 are considered the same. If the scale in your persistence diagrams - * is comparable to this value, please rescale them before use this code. + * \class Persistence_landscape Persistence_landscape.h gudhi/Persistence_landscape.h + * \brief A class implementing persistence landscapes data structures. + * + * \ingroup Persistence_representations + * + * \details + * For theoretical description, please consult Statistical topological data analysis using persistence + * landscapes\cite bubenik_landscapes_2015 , and for details of algorithms, + * A persistence landscapes toolbox for topological statistics\cite bubenik_dlotko_landscapes_2016. + * + * Persistence landscapes allow vectorization, computations of distances, computations of projections to Real, + * computations of averages and scalar products. Therefore they implement suitable interfaces. + * It implements the following concepts: Vectorized_topological_data, Topological_data_with_distances, + * Real_valued_topological_data, Topological_data_with_averages, Topological_data_with_scalar_product + * + * Note that at the moment, due to rounding errors during the construction of persistence landscapes, elements which + * are different by 0.000005 are considered the same. If the scale in your persistence diagrams is comparable to this + * value, please rescale them before use this code. + * **/ class Persistence_landscape { @@ -169,7 +182,7 @@ public: } /** - * An operator * that allows multipilication of a landscape by a real number. + * An operator * that allows multiplication of a landscape by a real number. **/ friend Persistence_landscape operator*( const Persistence_landscape& first , double con ) { @@ -177,7 +190,7 @@ public: } /** - * An operator * that allows multipilication of a landscape by a real number (order of parameters swapped). + * An operator * that allows multiplication of a landscape by a real number (order of parameters swapped). **/ friend Persistence_landscape operator*( double con , const Persistence_landscape& first ) { @@ -297,7 +310,6 @@ public: *\private Computations of \f$L^{\infty}\f$ distance between two landscapes. **/ friend double compute_max_norm_distance_of_landscapes( const Persistence_landscape& first, const Persistence_landscape& second ); - //friend double compute_max_norm_distance_of_landscapes( const Persistence_landscape& first, const Persistence_landscape& second , unsigned& nrOfLand , double&x , double& y1, double& y2 ); /** @@ -308,7 +320,7 @@ public: /** - * Function to compute absolute value of a PL function. The representation of persistence landscapes allow to store general PL-function. When computing distance betwen two landscapes, we compute difference between + * Function to compute absolute value of a PL function. The representation of persistence landscapes allow to store general PL-function. When computing distance between two landscapes, we compute difference between * them. In this case, a general PL-function with negative value can appear as a result. Then in order to compute distance, we need to take its absolute value. This is the purpose of this procedure. **/ Persistence_landscape abs(); @@ -319,7 +331,7 @@ public: size_t size()const{return this->land.size(); } /** - * Computate maximal value of lambda-level landscape. + * Compute maximal value of lambda-level landscape. **/ double find_max( unsigned lambda )const; @@ -328,27 +340,13 @@ public: **/ friend double compute_inner_product( const Persistence_landscape& l1 , const Persistence_landscape& l2 ); - - - - - - - - - - - - - - //Implementations of functions for various concepts. /** * The number of projections to R is defined to the number of nonzero landscape functions. I-th projection is an integral of i-th landscape function over whole R. * This function is required by the Real_valued_topological_data concept. - * At the moment this function is not tested, since it is quite likelly to be changed in the future. Given this, when using it, keep in mind that it - * will be most likelly changed in the next versions. + * At the moment this function is not tested, since it is quite likely to be changed in the future. Given this, when using it, keep in mind that it + * will be most likely changed in the next versions. **/ double project_to_R( int number_of_function )const { @@ -382,7 +380,7 @@ public: return v; } /** - * This function return the number of functions that allows vectorization of persistence laandscape. It is required in a concept Vectorized_topological_data. + * This function return the number of functions that allows vectorization of persistence landscape. It is required in a concept Vectorized_topological_data. **/ size_t number_of_vectorize_functions()const { @@ -404,8 +402,8 @@ public: { nextLevelMerge[i] = to_average[i]; } - bool is_this_first_level = true;//in the loop, we will create dynamically a unmber of intermediate complexes. We have to clean that up, but we cannot erase the initial andscapes we have - //to average. In this case, we simply check if the nextLevelMerge are the input landscapes or the ones created in that loop by usig this extra variable. + bool is_this_first_level = true;//in the loop, we will create dynamically a number of intermediate complexes. We have to clean that up, but we cannot erase the initial landscapes we have + //to average. In this case, we simply check if the nextLevelMerge are the input landscapes or the ones created in that loop by using this extra variable. while ( nextLevelMerge.size() != 1 ) { @@ -446,7 +444,7 @@ public: /** * A function to compute distance between persistence landscape. - * The parameter of this functionis a Persistence_landscape. + * The parameter of this function is a Persistence_landscape. * This function is required in Topological_data_with_distances concept. * For max norm distance, set power to std::numeric_limits::max() **/ @@ -465,7 +463,7 @@ public: /** * A function to compute scalar product of persistence landscapes. - * The parameter of this functionis a Persistence_landscape. + * The parameter of this function is a Persistence_landscape. * This function is required in Topological_data_with_scalar_product concept. **/ double compute_scalar_product( const Persistence_landscape& second )const @@ -473,25 +471,6 @@ public: return compute_inner_product( (*this) , second ); } //end of implementation of functions needed for concepts. - - - // - // This procedure returns x-range of a given level persistence landscape. If a default value is used, the x-range - //of 0th level landscape is given (and this range contains the ranges of all other landscapes). - // - //std::pair< double , double > get_x_range( size_t level = 0 )const - //{ - // std::pair< double , double > result; - // if ( level < this->land.size() ) - // { - // result = std::make_pair( this->land[level][1].first , this->land[level][ this->land[level].size() - 2 ].first ); - // } - // else - // { - // result = std::make_pair( 0,0 ); - // } - // return result; - //} /** * This procedure returns y-range of a given level persistence landscape. If a default value is used, the y-range @@ -582,7 +561,6 @@ bool Persistence_landscape::operator == ( const Persistence_landscape& rhs )con { if ( !( almost_equal(this->land[level][i].first , rhs.land[level][i].first) && almost_equal(this->land[level][i].second , rhs.land[level][i].second) ) ) { - //std::cerr<< this->land[level][i].first << " , " << rhs.land[level][i].first << " and " << this->land[level][i].second << " , " << rhs.land[level][i].second << std::endl; if (operatorEqualDbg)std::cerr << "this->land[level][i] : " << this->land[level][i].first << " " << this->land[level][i].second << "\n"; if (operatorEqualDbg)std::cerr << "rhs.land[level][i] : " << rhs.land[level][i].first << " " << rhs.land[level][i].second << "\n"; if (operatorEqualDbg)std::cerr << "3\n"; @@ -768,7 +746,7 @@ double Persistence_landscape::compute_integral_of_landscape()const { for ( size_t nr = 2 ; nr != this->land[i].size()-1 ; ++nr ) { - //it suffices to compute every planar integral and then sum them ap for each lambda_n + //it suffices to compute every planar integral and then sum them up for each lambda_n result += 0.5*( this->land[i][nr].first - this->land[i][nr-1].first )*(this->land[i][nr].second + this->land[i][nr-1].second); } } @@ -780,7 +758,7 @@ double Persistence_landscape::compute_integral_of_a_level_of_a_landscape( size_t double result = 0; if ( level >= this->land.size() ) { - //this landscape function is constantly equal 0, so is the intergral. + //this landscape function is constantly equal 0, so is the integral. return result; } //also negative landscapes are assumed to be zero. @@ -788,7 +766,7 @@ double Persistence_landscape::compute_integral_of_a_level_of_a_landscape( size_t for ( size_t nr = 2 ; nr != this->land[ level ].size()-1 ; ++nr ) { - //it suffices to compute every planar integral and then sum them ap for each lambda_n + //it suffices to compute every planar integral and then sum them up for each lambda_n result += 0.5*( this->land[ level ][nr].first - this->land[ level ][nr-1].first )*(this->land[ level ][nr].second + this->land[ level ][nr-1].second); } @@ -826,7 +804,6 @@ double Persistence_landscape::compute_integral_of_landscape( double p )const std::cout << "result : " << result << std::endl; } } - //if (compute_integral_of_landscapeDbg) std::cin.ignore(); } return result; } @@ -953,7 +930,7 @@ Persistence_landscape Persistence_landscape::abs() for ( size_t i = 1 ; i != this->land[level].size() ; ++i ) { if ( AbsDbg ){std::cout << "this->land[" << level << "][" << i << "] : " << this->land[level][i].first << " " << this->land[level][i].second << std::endl;} - //if a line segment between this->land[level][i-1] and this->land[level][i] crosses the x-axis, then we have to add one landscape point t oresult + //if a line segment between this->land[level][i-1] and this->land[level][i] crosses the x-axis, then we have to add one landscape point t o result if ( (this->land[level][i-1].second)*(this->land[level][i].second) < 0 ) { double zero = find_zero_of_a_line_segment_between_those_two_points( this->land[level][i-1] , this->land[level][i] ); @@ -1025,7 +1002,7 @@ void Persistence_landscape::load_landscape_from_file( const char* filename ) this->land.clear(); - //this constructor reads persistence landscape form a file. This file have to be created by this software beforehead + //this constructor reads persistence landscape form a file. This file have to be created by this software before head std::ifstream in; in.open( filename ); if ( !in.good() ) @@ -1049,7 +1026,7 @@ void Persistence_landscape::load_landscape_from_file( const char* filename ) lineSS >> beginn; lineSS >> endd; landscapeAtThisLevel.push_back( std::make_pair( beginn , endd ) ); - if (dbg){std::cerr << "Reading a pont : " << beginn << " , " << endd << std::endl;} + if (dbg){std::cerr << "Reading a point : " << beginn << " , " << endd << std::endl;} } else { @@ -1117,7 +1094,6 @@ Persistence_landscape operation_on_pair_of_landscapes ( const Persistence_landsc std::cerr << "land2.land[" << i << "].size() : " << land2.land[i].size() << std::endl; std::cout << "land1.land[i][p].first : " << land1.land[i][p].first << "\n"; std::cout << "land2.land[i][q].first : " << land2.land[i][q].first << "\n"; - //getchar(); } if ( land1.land[i][p].first < land2.land[i][q].first ) @@ -1126,7 +1102,6 @@ Persistence_landscape operation_on_pair_of_landscapes ( const Persistence_landsc { std::cout << "first \n"; std::cout << " function_value(land2.land[i][q-1],land2.land[i][q],land1.land[i][p].first) : "<< function_value(land2.land[i][q-1],land2.land[i][q],land1.land[i][p].first) << "\n"; - //std::cout << "oper( " << land1.land[i][p].second <<"," << function_value(land2.land[i][q-1],land2.land[i][q],land1.land[i][p].first) << " : " << oper( land1.land[i][p].second , function_value(land2.land[i][q-1],land2.land[i][q],land1.land[i][p].first) ) << "\n"; } lambda_n.push_back( std::make_pair( @@ -1242,7 +1217,7 @@ double compute_maximal_distance_non_symmetric( const Persistence_landscape& pl1, } int p2Count = 0; - for ( size_t i = 1 ; i != pl1.land[level].size()-1 ; ++i ) //w tym przypadku nie rozwarzam punktow w nieskocznosci + for ( size_t i = 1 ; i != pl1.land[level].size()-1 ; ++i ) // In this case, I consider points at the infinity { while ( true ) { @@ -1488,11 +1463,8 @@ void Persistence_landscape::plot( const char* filename, double xRangeBegin , do std::cout << "Gnuplot script to visualize persistence diagram written to the file: " << nameStr << ". Type load '" << nameStr << "' in gnuplot to visualize." << std::endl; } +} // namespace Persistence_representations +} // namespace gudhi - -}//namespace gudhi stat -}//namespace gudhi - - -#endif +#endif // PERSISTENCE_LANDSCAPE_H_ diff --git a/src/Persistence_representations/include/gudhi/Persistence_landscape_on_grid.h b/src/Persistence_representations/include/gudhi/Persistence_landscape_on_grid.h index 5703163a..d663b543 100644 --- a/src/Persistence_representations/include/gudhi/Persistence_landscape_on_grid.h +++ b/src/Persistence_representations/include/gudhi/Persistence_landscape_on_grid.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2015 INRIA (France) + * Copyright (C) 2017 INRIA (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 @@ -21,8 +21,8 @@ * along with this program. If not, see . **/ -#ifndef Persistence_landscape_on_grid_H_ -#define Persistence_landscape_on_grid_H_ +#ifndef PERSISTENCE_LANDSCAPE_ON_GRID_H_ +#define PERSISTENCE_LANDSCAPE_ON_GRID_H_ //standard include @@ -50,16 +50,25 @@ namespace Gudhi namespace Persistence_representations { -//predeclaration +// pre declaration class Persistence_landscape_on_grid; template < typename operation > Persistence_landscape_on_grid operation_on_pair_of_landscapes_on_grid( const Persistence_landscape_on_grid& land1 , const Persistence_landscape_on_grid& land2 ); /** - * A clas implementing persistence landascpes by approximating them on a collection of grid points. * Persistence landscapes on grid allow vertorization, computations of distances, computations - * of projections to Real, computations of averages and scalar products. Therefore they implement suitable interfaces. - * It implements the following concepts: Vectorized_topological_data, Topological_data_with_distances, Real_valued_topological_data, Topological_data_with_averages, Topological_data_with_scalar_product - * Note that at the moment, due to roundoff errors during the construction of persistence landscapes on a grid, elements which are different by 0.000005 are considered the same. If the scale in your persistence diagrams + * \class Persistence_landscape_on_grid Persistence_landscape_on_grid.h gudhi/Persistence_landscape_on_grid.h + * \brief A class implementing persistence landscapes by approximating them on a collection of grid points. + * + * \ingroup Persistence_representations + * + * \details + * Persistence landscapes on grid allows vectorization, computations of distances, computations of projections to Real, + * computations of averages and scalar products. Therefore they implement suitable interfaces. + * It implements the following concepts: Vectorized_topological_data, Topological_data_with_distances, + * Real_valued_topological_data, Topological_data_with_averages, Topological_data_with_scalar_product + * + * Note that at the moment, due to rounding errors during the construction of persistence landscapes on a grid, + * elements which are different by 0.000005 are considered the same. If the scale in your persistence diagrams * is comparable to this value, please rescale them before use this code. **/ @@ -89,14 +98,14 @@ public: /** * Constructor that reads persistence intervals from file and creates persistence landscape. The format of the input file is the following: in each line we put birth-death pair. Last line is assumed - * to be empty. Even if the points within a line are not ordered, they will be ordered while the input is read. The additional parameters of this procedure are: ranges of grid, resoltion of a grid + * to be empty. Even if the points within a line are not ordered, they will be ordered while the input is read. The additional parameters of this procedure are: ranges of grid, resolution of a grid * number of landscape functions to be created and the dimension of intervals that are need to be read from a file (in case of Gudhi format files). **/ Persistence_landscape_on_grid(const char* filename , double grid_min_, double grid_max_ , size_t number_of_points_ , unsigned number_of_levels_of_landscape , unsigned short dimension_ = std::numeric_limits::max() ); /** * Constructor that reads persistence intervals from file and creates persistence landscape. The format of the input file is the following: in each line we put birth-death pair. Last line is assumed - * to be empty. Even if the points within a line are not ordered, they will be ordered while the input is read. The additional parameters of this procedure are: ranges of grid, resoltion of a grid + * to be empty. Even if the points within a line are not ordered, they will be ordered while the input is read. The additional parameters of this procedure are: ranges of grid, resolution of a grid * and the dimension of intervals that are need to be read from a file (in case of Gudhi format files). **/ Persistence_landscape_on_grid(const char* filename , double grid_min_, double grid_max_ , size_t number_of_points_ , unsigned short dimension_ = std::numeric_limits::max() ); @@ -104,16 +113,16 @@ public: /** * Constructor that reads persistence intervals from file and creates persistence landscape. The format of the input file is the following: in each line we put birth-death pair. Last line is assumed - * to be empty. Even if the points within a line are not ordered, they will be ordered while the input is read. The additional parameter is the resoution of a grid and the number of landscape - * functions to be created. The remaning parameters are calculated based on data. + * to be empty. Even if the points within a line are not ordered, they will be ordered while the input is read. The additional parameter is the resolution of a grid and the number of landscape + * functions to be created. The remaining parameters are calculated based on data. **/ Persistence_landscape_on_grid(const char* filename , size_t number_of_points , unsigned number_of_levels_of_landscape , unsigned short dimension = std::numeric_limits::max() ); /** * Constructor that reads persistence intervals from file and creates persistence landscape. The format of the input file is the following: in each line we put birth-death pair. Last line is assumed - * to be empty. Even if the points within a line are not ordered, they will be ordered while the input is read. The additional parameter is the resoution of a grid. The last parameter is the dimension + * to be empty. Even if the points within a line are not ordered, they will be ordered while the input is read. The additional parameter is the resolution of a grid. The last parameter is the dimension * of a persistence to read from the file. If your file contains only persistence pair in a single dimension, please set it up to std::numeric_limits::max(). - * The remaning parameters are calculated based on data. + * The remaining parameters are calculated based on data. **/ Persistence_landscape_on_grid(const char* filename , size_t number_of_points , unsigned short dimension = std::numeric_limits::max() ); @@ -258,7 +267,7 @@ public: if ( dbg ) { std::cerr << "Increasing result by : " << value_to_add << std::endl; - std::cerr << "restult : " << result << std::endl; + std::cerr << "result : " << result << std::endl; getchar(); } previous_x = current_x; @@ -311,9 +320,9 @@ public: std::cerr << "This is a procedure compute_value_at_a_given_point \n"; std::cerr << "level : " << level << std::endl; std::cerr << "x : " << x << std::endl; - std::cerr << "psoition : " << position << std::endl; + std::cerr << "position : " << position << std::endl; } - //check if we are not exacly in the grid point: + //check if we are not exactly in the grid point: if ( almost_equal( position*dx+ this->grid_min , x) ) { if ( this->values_of_landscapes[position].size() < level ) @@ -389,7 +398,7 @@ public: } /** - * An operator * that allows multipilication of a landscape by a real number. + * An operator * that allows multiplication of a landscape by a real number. **/ friend Persistence_landscape_on_grid operator*( const Persistence_landscape_on_grid& first , double con ) { @@ -397,7 +406,7 @@ public: } /** - * An operator * that allows multipilication of a landscape by a real number (order of parameters swapped). + * An operator * that allows multiplication of a landscape by a real number (order of parameters swapped). **/ friend Persistence_landscape_on_grid operator*( double con , const Persistence_landscape_on_grid& first ) { @@ -413,7 +422,7 @@ public: } /** - * Operator +=. The second parameter is persistnece landwscape. + * Operator +=. The second parameter is persistence landscape. **/ Persistence_landscape_on_grid operator += ( const Persistence_landscape_on_grid& rhs ) { @@ -422,7 +431,7 @@ public: } /** - * Operator -=. The second parameter is persistnece landwscape. + * Operator -=. The second parameter is persistence landscape. **/ Persistence_landscape_on_grid operator -= ( const Persistence_landscape_on_grid& rhs ) { @@ -458,7 +467,7 @@ public: bool dbg = true; if ( this->values_of_landscapes.size() != rhs.values_of_landscapes.size() ) { - if (dbg) std::cerr << "values_of_landscapes of incompatable sizes\n"; + if (dbg) std::cerr << "values_of_landscapes of incompatible sizes\n"; return false; } if ( !almost_equal( this->grid_min , rhs.grid_min ) ) @@ -546,28 +555,6 @@ public: std::pair< double , double > get_x_range( size_t level = 0 )const { return std::make_pair( this->grid_min , this->grid_max ); - //std::pair< double , double > result; - //if ( level < this->land.size() ) - //{ - // double dx = (this->grid_max - this->grid_min)/(double)this->values_of_landscapes.size(); - // size_t first_nonzero = 0; - // while ( (first_nonzero != this->values_of_landscapes.size()) && (this->values_of_landscapes[level][first_nonzero] == 0) )++first_nonzero; - // - // if ( first_nonzero == 0 ) - // { - // return std::make_pair( 0,0 );//this landscape is empty. - // } - // - // size_t last_nonzero = 0; - // while ( (last_nonzero != 0) && (this->values_of_landscapes[level][last_nonzero] == 0) )--last_nonzero; - // - // result = std::make_pair( this->grid_min +first_nonzero*dx , this->grid_max - last_nonzero*dx ); - //} - //else - //{ - // result = std::make_pair( 0,0 ); - //} - //return result; } /** @@ -577,16 +564,6 @@ public: std::pair< double , double > get_y_range( size_t level = 0 )const { return this->compute_minimum_maximum(); - //std::pair< double , double > result; - //if ( level < this->land.size() ) - //{ - // result = this->compute_minimum_maximum() - //} - //else - //{ - // result = std::make_pair( 0,0 ); - //} - //return result; } /** @@ -629,13 +606,11 @@ public: * Computations of \f$L^{\infty}\f$ distance between two landscapes. **/ friend double compute_max_norm_distance_of_landscapes( const Persistence_landscape_on_grid& first, const Persistence_landscape_on_grid& second ); - //friend double compute_max_norm_distance_of_landscapes( const Persistence_landscape_on_grid& first, const Persistence_landscape_on_grid& second , unsigned& nrOfLand , double&x , double& y1, double& y2 ); - /** - * Function to compute absolute value of a PL function. The representation of persistence landscapes allow to store general PL-function. When computing distance betwen two landscapes, we compute difference between + * Function to compute absolute value of a PL function. The representation of persistence landscapes allow to store general PL-function. When computing distance between two landscapes, we compute difference between * them. In this case, a general PL-function with negative value can appear as a result. Then in order to compute distance, we need to take its absolute value. This is the purpose of this procedure. **/ void abs() @@ -655,7 +630,7 @@ public: size_t size()const{return this->number_of_nonzero_levels(); } /** - * Computate maximal value of lambda-level landscape. + * Compute maximal value of lambda-level landscape. **/ double find_max( unsigned lambda )const { @@ -742,14 +717,14 @@ public: } //now, to compute the inner product in this interval we need to compute the integral of (ax+b)(cx+d) = acx^2 + (ad+bc)x + bd in the interval from previous_x to current_x: - //The integal is ac/3*x^3 + (ac+bd)/2*x^2 + bd*x + //The integral is ac/3*x^3 + (ac+bd)/2*x^2 + bd*x double added_value = (a*c/3*current_x*current_x*current_x + (a*d+b*c)/2*current_x*current_x + b*d*current_x)- (a*c/3*previous_x*previous_x*previous_x + (a*d+b*c)/2*previous_x*previous_x + b*d*previous_x); if ( dbg ) { - std::cerr << "Value of the integral on the left end ie : " << previous_x << " is : " << a*c/3*previous_x*previous_x*previous_x + (a*d+b*c)/2*previous_x*previous_x + b*d*previous_x << std::endl; + std::cerr << "Value of the integral on the left end i.e. : " << previous_x << " is : " << a*c/3*previous_x*previous_x*previous_x + (a*d+b*c)/2*previous_x*previous_x + b*d*previous_x << std::endl; std::cerr << "Value of the integral on the right end i.e. : " << current_x << " is " << a*c/3*current_x*current_x*current_x + (a*d+b*c)/2*current_x*current_x + b*d*current_x << std::endl; } @@ -775,7 +750,7 @@ public: /** * Computations of \f$L^{p}\f$ distance between two landscapes on a grid. p is the parameter of the procedure. * FIXME: Note that, due to the grid representation, the method below may give non--accurate results in case when the landscape P and Q the difference of which we want to compute - * are interxsecting. This is a consequence of a general way they are computed. In the future, an integral of absolute value of a difference of P and Q will be given as a separated + * are intersecting. This is a consequence of a general way they are computed. In the future, an integral of absolute value of a difference of P and Q will be given as a separated * function to fix that inaccuracy. **/ friend double compute_distance_of_landscapes_on_grid( const Persistence_landscape_on_grid& first, const Persistence_landscape_on_grid& second , double p ) @@ -819,7 +794,7 @@ public: else { result = lan.compute_integral_of_landscape(); - if (dbg){std::cerr << "integral, wihtout power : " << result << std::endl;getchar();} + if (dbg){std::cerr << "integral, without power : " << result << std::endl;getchar();} } //(\int_{- \infty}^{+\infty}| first-second |^p)^(1/p) return pow( result , 1/(double)p ); @@ -830,45 +805,14 @@ public: return lan.compute_maximum(); } } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //Functions that are needed for that class to implement the concept. /** * The number of projections to R is defined to the number of nonzero landscape functions. I-th projection is an integral of i-th landscape function over whole R. * This function is required by the Real_valued_topological_data concept. - * At the moment this function is not tested, since it is quite likelly to be changed in the future. Given this, when using it, keep in mind that it - * will be most likelly changed in the next versions. + * At the moment this function is not tested, since it is quite likely to be changed in the future. Given this, when using it, keep in mind that it + * will be most likely changed in the next versions. **/ double project_to_R( int number_of_function )const { @@ -884,8 +828,6 @@ public: } - - /** * This function produce a vector of doubles based on a landscape. It is required in a concept Vectorized_topological_data */ @@ -909,16 +851,13 @@ public: } /** - * This function return the number of functions that allows vectorization of persistence laandscape. It is required in a concept Vectorized_topological_data. + * This function return the number of functions that allows vectorization of persistence landscape. It is required in a concept Vectorized_topological_data. **/ size_t number_of_vectorize_functions()const { return number_of_functions_for_vectorization; } - - - /** * A function to compute averaged persistence landscape on a grid, based on vector of persistence landscapes on grid. @@ -932,7 +871,7 @@ public: this->values_of_landscapes .clear(); this->grid_min = this->grid_max = 0; - //if there is nothing to averate, then the average is a zero landscape. + //if there is nothing to average, then the average is a zero landscape. if ( to_average.size() == 0 )return; //now we need to check if the grids in all objects of to_average are the same: @@ -968,7 +907,7 @@ public: std::cerr << "We are considering the point : " << grid_point << " of the grid. In this point, there are at most : " << maximal_size_of_vector << " nonzero landscape functions \n"; } - //and compute an arythmetic average: + //and compute an arithmetic average: for ( size_t land_no = 0 ; land_no != to_average.size() ; ++land_no ) { //summing: @@ -989,7 +928,7 @@ public: /** * A function to compute distance between persistence landscape on a grid. - * The parameter of this functionis a Persistence_landscape_on_grid. + * The parameter of this function is a Persistence_landscape_on_grid. * This function is required in Topological_data_with_distances concept. * For max norm distance, set power to std::numeric_limits::max() **/ @@ -1007,7 +946,7 @@ public: /** * A function to compute scalar product of persistence landscape on a grid. - * The parameter of this functionis a Persistence_landscape_on_grid. + * The parameter of this function is a Persistence_landscape_on_grid. * This function is required in Topological_data_with_scalar_product concept. **/ double compute_scalar_product( const Persistence_landscape_on_grid& second ) @@ -1016,28 +955,9 @@ public: } //end of implementation of functions needed for concepts. - - - - - - - - - - - - - - - - - - - /** - * A function that returns values of landsapes. It can be used for vizualization + * A function that returns values of landscapes. It can be used for visualization **/ std::vector< std::vector< double > > output_for_visualization()const { @@ -1046,7 +966,7 @@ public: /** * function used to create a gnuplot script for visualization of landscapes. Over here we need to specify which landscapes do we want to plot. - * In addition, the user may specify the range (min and max) where landscape is plot. The fefault values for min and max are std::numeric_limits::max(). If the procedure detect those + * In addition, the user may specify the range (min and max) where landscape is plot. The default values for min and max are std::numeric_limits::max(). If the procedure detect those * values, it will determine the range so that the whole landscape is supported there. If at least one min or max value is different from std::numeric_limits::max(), then the values * provided by the user will be used. **/ @@ -1123,7 +1043,7 @@ void Persistence_landscape_on_grid::set_up_values_of_landscapes( const std::vect if ( grid_max_ <= grid_min_ ) { - throw "Wrong parameters of grid_min and grid_max given to the procedure. THe grid have negative, or zero size. The program will now terminate.\n"; + throw "Wrong parameters of grid_min and grid_max given to the procedure. The grid have negative, or zero size. The program will now terminate.\n"; } double dx = ( grid_max_ - grid_min_ )/(double)(number_of_points_); @@ -1174,7 +1094,7 @@ void Persistence_landscape_on_grid::set_up_values_of_landscapes( const std::vect if ( this->values_of_landscapes[i].size() == number_of_levels-1 ) { //this->values_of_landscapes[i].size() == number_of_levels - //in this case we need to create the heep. + //in this case we need to create the heap. std::make_heap (this->values_of_landscapes[i].begin(),this->values_of_landscapes[i].end()); } } @@ -1212,7 +1132,7 @@ void Persistence_landscape_on_grid::set_up_values_of_landscapes( const std::vect if ( this->values_of_landscapes[i].size() == number_of_levels-1 ) { //this->values_of_landscapes[i].size() == number_of_levels - //in this case we need to create the heep. + //in this case we need to create the heap. std::make_heap (this->values_of_landscapes[i].begin(),this->values_of_landscapes[i].end()); } } @@ -1225,7 +1145,7 @@ void Persistence_landscape_on_grid::set_up_values_of_landscapes( const std::vect if ( dbg ) { - std::cerr << "AAdding landscape value (going down) for a point : " << i << " equal : " << landscape_value << std::endl; + std::cerr << "Adding landscape value (going down) for a point : " << i << " equal : " << landscape_value << std::endl; } } landscape_value -= dx; @@ -1235,11 +1155,10 @@ void Persistence_landscape_on_grid::set_up_values_of_landscapes( const std::vect if ( number_of_levels != std::numeric_limits< unsigned >::max() ) { //in this case, vectors are used as heaps. And, since we want to have the smallest element at the top of - //each heap, we store mminus distances. To get if right at the end, we need to multiply each value + //each heap, we store minus distances. To get if right at the end, we need to multiply each value //in the heap by -1 to get real vector of distances. for ( size_t pt = 0 ; pt != this->values_of_landscapes.size() ; ++pt ) { - //std::cerr << this->values_of_landscapes[pt].size() <values_of_landscapes[pt].size() ; ++j ) { this->values_of_landscapes[pt][j] *= -1; @@ -1362,7 +1281,6 @@ void Persistence_landscape_on_grid::load_landscape_from_file( const char* filena //read a line of a file and convert it to a vector. std::vector< double > vv; std::getline(in, line); - //std::cerr << "Reading line : " << line << std::endl;getchar(); std::istringstream stream(line); while (stream >> number) { @@ -1485,7 +1403,7 @@ Persistence_landscape_on_grid operation_on_pair_of_landscapes_on_grid ( const Pe result.grid_min = land1.grid_min; result.grid_max = land1.grid_max; - //now we perorm the operations: + //now we perform the operations: for ( size_t grid_point = 0 ; grid_point != land1.values_of_landscapes.size() ; ++grid_point ) { result.values_of_landscapes[grid_point] = std::vector< double >( std::max( land1.values_of_landscapes[grid_point].size() , land2.values_of_landscapes[grid_point].size() ) ); @@ -1555,9 +1473,7 @@ double compute_max_norm_distance_of_landscapes( const Persistence_landscape_on_g return result; } - - -}//namespace Gudhi_stat +}//namespace Persistence_representations }//namespace Gudhi -#endif +#endif // PERSISTENCE_LANDSCAPE_ON_GRID_H_ diff --git a/src/Persistence_representations/include/gudhi/Persistence_vectors.h b/src/Persistence_representations/include/gudhi/Persistence_vectors.h index 7fde3413..616ec50f 100644 --- a/src/Persistence_representations/include/gudhi/Persistence_vectors.h +++ b/src/Persistence_representations/include/gudhi/Persistence_vectors.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2015 INRIA (France) + * Copyright (C) 2017 INRIA (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 @@ -21,8 +21,8 @@ */ -#ifndef Vector_distances_in_diagram_H -#define Vector_distances_in_diagram_H +#ifndef PERSISTENCE_VECTORS_H_ +#define PERSISTENCE_VECTORS_H_ #include #include @@ -42,32 +42,6 @@ namespace Gudhi namespace Persistence_representations { -/* -template -struct Euclidean_distance -{ - double operator() ( const std::pair< T,T >& f , const std::pair& s ) - { - return sqrt( (f.first-s.first)*(f.first-s.first) + (f.second-s.second)*(f.second-s.second) ); - } - double operator() ( const std::vector< T >& f , const std::vector < T >& s ) - { - if ( f.size() != s.size() ) - { - std::cerr << "Not compatible points dimensions in the procedure to compute Euclidean distance. The program will now terminate. \n"; - std::cout << f.size() << " , " << s.size() << std::endl; - throw "Not compatible points dimensions in the procedure to compute Euclidean distance. The program will now terminate. \n"; - } - double result = 0; - for ( size_t i = 0 ; i != f.size() ; ++i ) - { - result += ( f[i]-s[i] )*( f[i]-s[i] ); - } - return sqrt( result ); - } -}; -* */ - template struct Maximum_distance { @@ -79,16 +53,21 @@ struct Maximum_distance - /** -* This is an implementation of idea presented in the paper 'Stable Topological Signatures for Points on 3D Shapes' by -* M. Carriere, S. Y. Oudot and M. Ovsjanikov published in Computer Graphics Forum (proc. SGP 2015). -* The parameter of the class is the class that computes distance used to construct the vectors. The typical function is -* either Eucludean of maximum (Manhattan) distance. -* This class implements the following concepts: Vectorized_topological_data, Topological_data_with_distances, Real_valued_topological_data, Topological_data_with_averages, Topological_data_with_scalar_product -* -**/ - + * \class Vector_distances_in_diagram Vector_distances_in_diagram.h gudhi/Vector_distances_in_diagram.h + * \brief A class implementing persistence vectors. + * + * \ingroup Persistence_representations + * + * \details + * This is an implementation of idea presented in the paper Stable Topological Signatures for Points on 3D + * Shapes \cite Carriere_Oudot_Ovsjanikov_top_signatures_3d .
+ * The parameter of the class is the class that computes distance used to construct the vectors. The typical function + * is either Euclidean of maximum (Manhattan) distance. + * + * This class implements the following concepts: Vectorized_topological_data, Topological_data_with_distances, + * Real_valued_topological_data, Topological_data_with_averages, Topological_data_with_scalar_product + **/ template class Vector_distances_in_diagram { @@ -99,12 +78,12 @@ public: Vector_distances_in_diagram(){}; /** - * The constructor that takes as an input a multiset of persistence intervals (given as vector of birth-death pairs). The second parameter is the desiered length of the output vectors. + * The constructor that takes as an input a multiset of persistence intervals (given as vector of birth-death pairs). The second parameter is the desired length of the output vectors. **/ Vector_distances_in_diagram( const std::vector< std::pair< double , double > >& intervals , size_t where_to_cut ); /** - * The constructor taking as an input a file with birth-death pairs. The second parameter is the desiered length of the output vectors. + * The constructor taking as an input a file with birth-death pairs. The second parameter is the desired length of the output vectors. **/ Vector_distances_in_diagram( const char* filename , size_t where_to_cut , unsigned dimension = std::numeric_limits::max() ); @@ -155,7 +134,7 @@ public: void load_from_file( const char* filename ); /** - * Comparision operators: + * Comparison operators: **/ bool operator == ( const Vector_distances_in_diagram& second )const { @@ -172,14 +151,11 @@ public: return !( *this == second ); } - - - - //Implementations of functions for various concepts. + //Implementations of functions for various concepts. /** * Compute projection to real numbers of persistence vector. This function is required by the Real_valued_topological_data concept - * At the moment this function is not tested, since it is quite likelly to be changed in the future. Given this, when using it, keep in mind that it - * will be most likelly changed in the next versions. + * At the moment this function is not tested, since it is quite likely to be changed in the future. Given this, when using it, keep in mind that it + * will be most likely changed in the next versions. **/ double project_to_R( int number_of_function )const; /** @@ -195,7 +171,7 @@ public: **/ std::vector vectorize( int number_of_function )const; /** - * This function return the number of functions that allows vectorization of a persisence vector. It is required in a concept Vectorized_topological_data. + * This function return the number of functions that allows vectorization of a persistence vector. It is required in a concept Vectorized_topological_data. **/ size_t number_of_vectorize_functions()const { @@ -220,22 +196,6 @@ public: //end of implementation of functions needed for concepts. - - - - - - - - - - - - - - - - /** * For visualization use output from vectorize and build histograms. **/ @@ -246,7 +206,7 @@ public: /** - * Create a gnuplot script to vizualize the data structure. + * Create a gnuplot script to visualize the data structure. **/ void plot( const char* filename )const { @@ -264,7 +224,7 @@ public: } out <sorted_vector_of_distances[0] , 0); } - //arythmetic operations: + //arithmetic operations: template < typename Operation_type > friend Vector_distances_in_diagram operation_on_pair_of_vectors( const Vector_distances_in_diagram& first , const Vector_distances_in_diagram& second , Operation_type opertion ) { @@ -511,7 +471,6 @@ void Vector_distances_in_diagram::compute_sorted_vector_of_distances_via_heap double value = f( this->intervals[i] , std::make_pair( 0.5*(this->intervals[i].first+this->intervals[i].second) , 0.5*(this->intervals[i].first+this->intervals[i].second) ) ); if ( -value < heap.front() ) { - //std::cerr << "Replacing : " << heap.front() << " with : " << -value <::distance( const Vector_distances_in_diagr } else { - //nax morm + // max norm if ( result < fabs( this->sorted_vector_of_distances[i] - second_.sorted_vector_of_distances[i] ) )result = fabs( this->sorted_vector_of_distances[i] - second_.sorted_vector_of_distances[i] ); } if ( dbg ) @@ -767,12 +726,8 @@ double Vector_distances_in_diagram::compute_scalar_product( const Vector_dist return result; } - - - - -}//namespace Gudhi_stat +}//namespace Persistence_representations }//namespace Gudhi -#endif // Vector_distances_in_diagram_H +#endif // PERSISTENCE_VECTORS_H_ diff --git a/src/Persistence_representations/include/gudhi/common_persistence_representations.h b/src/Persistence_representations/include/gudhi/common_persistence_representations.h index f223079a..f571ca4f 100644 --- a/src/Persistence_representations/include/gudhi/common_persistence_representations.h +++ b/src/Persistence_representations/include/gudhi/common_persistence_representations.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2015 INRIA (France) + * Copyright (C) 2017 INRIA (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 @@ -20,15 +20,15 @@ * along with this program. If not, see . */ -#ifndef common_gudhi_stat_H -#define common_gudhi_stat_H +#ifndef COMMON_PERSISTENCE_REPRESENTATIONS_H_ +#define COMMON_PERSISTENCE_REPRESENTATIONS_H_ namespace Gudhi { namespace Persistence_representations { - //this file contain an implementation of some common procedures used in Gudhi_stat. + //this file contain an implementation of some common procedures used in Persistence_representations. //double epsi = std::numeric_limits::epsilon(); double epsi = 0.000005; @@ -38,8 +38,8 @@ double epsi = 0.000005; /** - * A procedure used to compare doubles. Typically gien two doubles A and B, comparing A == B is not good idea. In this case, we use the procedure almostEqual with the epsi defined at - * the top of the file. Setting up the epsi give the user a tolerance on what should be consider equal. + * A procedure used to compare doubles. Typically given two doubles A and B, comparing A == B is not good idea. In this case, we use the procedure almostEqual with the epsi defined at + * the top of the file. Setting up the epsi gives the user a tolerance on what should be consider equal. **/ inline bool almost_equal( double a , double b ) { @@ -78,7 +78,7 @@ std::pair compute_parameters_of_a_line( std::pair //landscapes /** - * This procedure given two points which lies on the opposide sides of x axis, compute x for which the line connecting those two points crosses x axis. + * This procedure given two points which lies on the opposite sides of x axis, compute x for which the line connecting those two points crosses x axis. **/ double find_zero_of_a_line_segment_between_those_two_points ( std::pair p1, std::pair p2 ) { @@ -86,7 +86,7 @@ double find_zero_of_a_line_segment_between_those_two_points ( std::pair 0 ) { std::ostringstream errMessage; - errMessage <<"In function find_zero_of_a_line_segment_between_those_two_points the agguments are: (" << p1.first << "," << p1.second << ") and (" << p2.first << "," << p2.second << "). There is no zero in line between those two points. Program terminated."; + errMessage <<"In function find_zero_of_a_line_segment_between_those_two_points the arguments are: (" << p1.first << "," << p1.second << ") and (" << p2.first << "," << p2.second << "). There is no zero in line between those two points. Program terminated."; std::string errMessageStr = errMessage.str(); const char* err = errMessageStr.c_str(); throw(err); @@ -94,8 +94,6 @@ double find_zero_of_a_line_segment_between_those_two_points ( std::pair f, std::pair s ) @@ -135,7 +133,7 @@ bool compare_points_sorting( std::pair f, std::pair p1, std::pair p2 , double x ) { @@ -148,7 +146,7 @@ double function_value ( std::pair p1, std::pair p2 -}//namespace Gudhi_stat -}//namespace Gudhi +} // namespace Persistence_representations +} // namespace Gudhi -#endif +#endif // COMMON_PERSISTENCE_REPRESENTATIONS_H_ diff --git a/src/Persistence_representations/include/gudhi/read_persistence_from_file.h b/src/Persistence_representations/include/gudhi/read_persistence_from_file.h index 058c77a4..a4884314 100644 --- a/src/Persistence_representations/include/gudhi/read_persistence_from_file.h +++ b/src/Persistence_representations/include/gudhi/read_persistence_from_file.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2015 INRIA (France) + * Copyright (C) 2017 INRIA (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 @@ -21,8 +21,8 @@ */ -#ifndef Read_Persitence_From_File_H -#define Read_Persitence_From_File_H +#ifndef READ_PERSISTENCE_FROM_FILE_H_ +#define READ_PERSISTENCE_FROM_FILE_H_ #include #include @@ -36,86 +36,6 @@ namespace Gudhi { namespace Persistence_representations { - - - -/** - * This procedure reads names of files which are stored in a file. -**/ -std::vector< std::string > readFileNames( const char* filenameWithFilenames ) -{ - bool dbg = false; - - std::ifstream in(filenameWithFilenames); - if ( !in.good() ) - { - std::cerr << "The file : " << filenameWithFilenames << " do not exist. The program will now terminate \n"; - throw "The file from which you are trying to read do not exist. The program will now terminate \n"; - } - - std::vector< std::string > result; - std::string line; - while (!in.eof()) - { - getline(in,line); - line.erase( std::remove_if( line.begin(), line.end(), ::isspace) , line.end() ); - - if (dbg){std::cerr << "line : " << line << std::endl;} - - if ( (line.length() == 0) || (line[0] == '#') ) - { - //in this case we have a file name. First we should remove all the white spaces. - if ( dbg ){std::cerr << "This is a line with comment, it will be ignored n";} - } - else - { - result.push_back( line ); - if (dbg){std::cerr << "Line after removing white spaces : " << line << std::endl;} - } - } - in.close(); - - return result; -}//readFileNames - - - -std::vector< std::vector< double > > read_numbers_from_file_line_by_line( const char* filename ) -{ - bool dbg = false; - std::ifstream in(filename); - if ( !in.good() ) - { - std::cerr << "The file : " << filename << " do not exist. The program will now terminate \n"; - throw "The file from which you are trying to read the persistence landscape do not exist. The program will now terminate \n"; - } - - std::vector< std::vector< double > > result; - double number; - - - std::string line; - while ( in.good() ) - { - std::getline(in,line); - std::stringstream ss(line); - - if ( dbg )std::cerr << "\n Reading line : " << line << std::endl; - - std::vector< double > this_line; - while ( ss.good() ) - { - ss >> number; - this_line.push_back( number ); - if ( dbg )std::cerr << number << " "; - } - if ( this_line.size() && in.good() ) result.push_back( this_line ); - } - in.close(); - - return result; -}//read_numbers_from_file_line_by_line - /** * Universal procedure to read files with persistence. It ignores the lines starting from # (treat them as comments). @@ -123,7 +43,7 @@ std::vector< std::vector< double > > read_numbers_from_file_line_by_line( const * that each other line in the file, which is not a comment, have the same number of numerical entries (2, 3 or 4). * If there are two numerical entries per line, then the function assume that they are birth/death coordinates. * If there are three numerical entries per line, then the function assume that they are: dimension and birth/death coordinates. - * If there are four numerical entries per line, then the function assume that they are: thc characteristic of a filed over which + * If there are four numerical entries per line, then the function assume that they are: the characteristic of a filed over which * persistence was computed, dimension and birth/death coordinates. * The 'inf' string can appear only as a last element of a line. * The procedure returns vector of persistence pairs. @@ -162,7 +82,7 @@ std::vector > read_persistence_intervals_in_one_dimensi if ( line_copy.find("inf") != std::string::npos ) { size_t np = line_copy.find("inf"); - //replace symbols 'inf' in line_copy with whilespaces: + //replace symbols 'inf' in line_copy with white spaces: line_copy[np] = ' '; line_copy[np+1] = ' '; line_copy[np+2] = ' '; @@ -194,7 +114,7 @@ std::vector > read_persistence_intervals_in_one_dimensi { std::cerr << "This line: " << line << " contains infinite interval. \n"; } - //first we substitute inf by whitespaces: + //first we substitute inf by white spaces: size_t np = line.find("inf"); line[np] = ' '; line[np+1] = ' '; @@ -288,13 +208,9 @@ std::vector > read_persistence_intervals_in_one_dimensi if ( dbg )std::cerr << "End of reading \n"; return barcode; -}//read_persistence_intervals_in_one_dimension_from_file +} // read_persistence_intervals_in_one_dimension_from_file -}//namespace Gudhi_stat -}//namespace Gudhi +} // namespace Persistence_representations +} // namespace Gudhi - - - -#endif - +#endif // READ_PERSISTENCE_FROM_FILE_H_ diff --git a/src/Persistence_representations/utilities/persistence_heat_maps/compute_distance_of_persistence_heat_maps.cpp b/src/Persistence_representations/utilities/persistence_heat_maps/compute_distance_of_persistence_heat_maps.cpp index d3e6f322..27a7836f 100644 --- a/src/Persistence_representations/utilities/persistence_heat_maps/compute_distance_of_persistence_heat_maps.cpp +++ b/src/Persistence_representations/utilities/persistence_heat_maps/compute_distance_of_persistence_heat_maps.cpp @@ -34,8 +34,8 @@ using namespace Gudhi::Persistence_representations; int main( int argc , char** argv ) { - std::cout << "This program compute dsitance of persistence heat maps stored in a file (the file needs to be created beforehand). \n"; - std::cout << "The first parameter of a program is an interger p. The program compute L^p distance of the two heat maps. For L^infty distance choose p = -1. \n"; + std::cout << "This program compute distance of persistence heat maps stored in a file (the file needs to be created beforehand). \n"; + std::cout << "The first parameter of a program is an integer p. The program compute L^p distance of the two heat maps. For L^infty distance choose p = -1. \n"; std::cout << "The remaining parameters of this programs are names of files with persistence heat maps.\n"; if ( argc < 3 ) @@ -76,7 +76,7 @@ int main( int argc , char** argv ) distance[i] = v; } - //and now we can compute the distnaces: + //and now we can compute the distances: for ( size_t i = 0 ; i != filenames.size() ; ++i ) { for ( size_t j = i ; j != filenames.size() ; ++j ) @@ -106,6 +106,3 @@ int main( int argc , char** argv ) - - - diff --git a/src/Persistence_representations/utilities/persistence_heat_maps/create_p_h_m_weighted_by_arctan_of_their_persistence.cpp b/src/Persistence_representations/utilities/persistence_heat_maps/create_p_h_m_weighted_by_arctan_of_their_persistence.cpp index aa887c9c..f755e9a6 100644 --- a/src/Persistence_representations/utilities/persistence_heat_maps/create_p_h_m_weighted_by_arctan_of_their_persistence.cpp +++ b/src/Persistence_representations/utilities/persistence_heat_maps/create_p_h_m_weighted_by_arctan_of_their_persistence.cpp @@ -36,10 +36,10 @@ using namespace Gudhi::Persistence_representations; int main( int argc , char** argv ) { - std::cout << "This program creates persistence heat map of diagrams provided as an input. The Gaussian kernels are weighted by the arcus tangens of their persistence.\n"; + std::cout << "This program creates persistence heat map of diagrams provided as an input. The Gaussian kernels are weighted by the arc tangential of their persistence.\n"; std::cout << "The first parameter of a program is an integer, a size of a grid.\n"; std::cout << "The second and third parameters are min and max of the grid. If you want those numbers to be computed based on the data, set them both to -1 \n"; - std::cerr << "The fourth parameter is an integer, the standard deviation of a gaussian kernel expressed in a number of pixels \n"; + std::cerr << "The fourth parameter is an integer, the standard deviation of a Gaussian kernel expressed in a number of pixels \n"; std::cout << "The fifth parameter of this program is a dimension of persistence that will be used in creation of the persistence heat maps."; std::cout << "If our input files contain persistence pairs of various dimension, as a fifth parameter of the procedure please provide the dimension of persistence you want to use."; std::cout << "If in your file there are only birth-death pairs of the same dimension, set the first parameter to -1." << std::endl; diff --git a/src/Persistence_representations/utilities/persistence_heat_maps/create_p_h_m_weighted_by_distance_from_diagonal.cpp b/src/Persistence_representations/utilities/persistence_heat_maps/create_p_h_m_weighted_by_distance_from_diagonal.cpp index aa13d786..732b3768 100644 --- a/src/Persistence_representations/utilities/persistence_heat_maps/create_p_h_m_weighted_by_distance_from_diagonal.cpp +++ b/src/Persistence_representations/utilities/persistence_heat_maps/create_p_h_m_weighted_by_distance_from_diagonal.cpp @@ -38,7 +38,7 @@ int main( int argc , char** argv ) std::cout << "This program creates persistence heat map of diagrams provided as an input. The Gaussian kernels are weighted by the distance of a center from the diagonal.\n"; std::cout << "The first parameter of a program is an integer, a size of a grid.\n"; std::cout << "The second and third parameters are min and max of the grid. If you want those numbers to be computed based on the data, set them both to -1 \n"; - std::cerr << "The fourth parameter is an integer, the standard deviation of a gaussian kernel expressed in a number of pixels \n"; + std::cerr << "The fourth parameter is an integer, the standard deviation of a Gaussian kernel expressed in a number of pixels \n"; std::cout << "The fifth parameter of this program is a dimension of persistence that will be used in creation of the persistence heat maps."; std::cout << "If our input files contain persistence pairs of various dimension, as a fifth parameter of the procedure please provide the dimension of persistence you want to use."; std::cout << "If in your file there are only birth-death pairs of the same dimension, set the first parameter to -1." << std::endl; @@ -62,8 +62,6 @@ int main( int argc , char** argv ) dimension = (unsigned)dim; } - //std::cout << "Parameters of the program : size_of_grid : " << size_of_grid << ", min_ : " << min_ << ", max_ : " << max_ << ", stdiv: " << stdiv << ", dim : " << dim << std::endl; - std::vector< const char* > filenames; for ( int i = 6 ; i != argc ; ++i ) { diff --git a/src/Persistence_representations/utilities/persistence_heat_maps/create_p_h_m_weighted_by_squared_diag_distance.cpp b/src/Persistence_representations/utilities/persistence_heat_maps/create_p_h_m_weighted_by_squared_diag_distance.cpp index 46258329..58406d08 100644 --- a/src/Persistence_representations/utilities/persistence_heat_maps/create_p_h_m_weighted_by_squared_diag_distance.cpp +++ b/src/Persistence_representations/utilities/persistence_heat_maps/create_p_h_m_weighted_by_squared_diag_distance.cpp @@ -38,7 +38,7 @@ int main( int argc , char** argv ) std::cout << "This program creates persistence heat map of diagrams provided as an input. The Gaussian kernels are weighted by the square of distance of a center from the diagonal.\n"; std::cout << "The first parameter of a program is an integer, a size of a grid.\n"; std::cout << "The second and third parameters are min and max of the grid. If you want those numbers to be computed based on the data, set them both to -1 \n"; - std::cerr << "The fourth parameter is an integer, the standard deviation of a gaussian kernel expressed in a number of pixels \n"; + std::cerr << "The fourth parameter is an integer, the standard deviation of a Gaussian kernel expressed in a number of pixels \n"; std::cout << "The fifth parameter of this program is a dimension of persistence that will be used in creation of the persistence heat maps."; std::cout << "If our input files contain persistence pairs of various dimension, as a fifth parameter of the procedure please provide the dimension of persistence you want to use."; std::cout << "If in your file there are only birth-death pairs of the same dimension, set the first parameter to -1." << std::endl; diff --git a/src/Persistence_representations/utilities/persistence_heat_maps/create_persistence_heat_maps.cpp b/src/Persistence_representations/utilities/persistence_heat_maps/create_persistence_heat_maps.cpp index cac81495..90b50b0b 100644 --- a/src/Persistence_representations/utilities/persistence_heat_maps/create_persistence_heat_maps.cpp +++ b/src/Persistence_representations/utilities/persistence_heat_maps/create_persistence_heat_maps.cpp @@ -39,7 +39,7 @@ int main( int argc , char** argv ) std::cout << "This program creates persistence heat map of diagrams provided as an input.\n"; std::cout << "The first parameter of a program is an integer, a size of a grid.\n"; std::cout << "The second and third parameters are min and max of the grid. If you want those numbers to be computed based on the data, set them both to -1 \n"; - std::cerr << "The fourth parameter is an integer, the standard deviation of a gaussian kernel expressed in a number of pixels \n"; + std::cerr << "The fourth parameter is an integer, the standard deviation of a Gaussian kernel expressed in a number of pixels \n"; std::cout << "The fifth parameter of this program is a dimension of persistence that will be used in creation of the persistence heat maps."; std::cout << "If our input files contain persistence pairs of various dimension, as a fifth parameter of the procedure please provide the dimension of persistence you want to use."; diff --git a/src/Persistence_representations/utilities/persistence_heat_maps/create_pssk.cpp b/src/Persistence_representations/utilities/persistence_heat_maps/create_pssk.cpp index 6aab42f7..6a07bf19 100644 --- a/src/Persistence_representations/utilities/persistence_heat_maps/create_pssk.cpp +++ b/src/Persistence_representations/utilities/persistence_heat_maps/create_pssk.cpp @@ -37,7 +37,7 @@ int main( int argc , char** argv ) std::cout << "This program creates PSSK of diagrams provided as an input.\n"; std::cout << "The first parameter of a program is an integer, a size of a grid.\n"; std::cout << "The second and third parameters are min and max of the grid. If you want those numbers to be computed based on the data, set them both to -1 \n"; - std::cerr << "The fourth parameter is an integer, the standard deviation of a gaussian kernel expressed in a number of pixels \n"; + std::cerr << "The fourth parameter is an integer, the standard deviation of a Gaussian kernel expressed in a number of pixels \n"; std::cout << "The fifth parameter of this program is a dimension of persistence that will be used in creation of the persistence heat maps."; std::cout << "If our input files contain persistence pairs of various dimension, as a fifth parameter of the procedure please provide the dimension of persistence you want to use."; std::cout << "If in your file there are only birth-death pairs of the same dimension, set the first parameter to -1." << std::endl; diff --git a/src/Persistence_representations/utilities/persistence_heat_maps/plot_persistence_heat_map.cpp b/src/Persistence_representations/utilities/persistence_heat_maps/plot_persistence_heat_map.cpp index 5a4776ff..7aedfbb1 100644 --- a/src/Persistence_representations/utilities/persistence_heat_maps/plot_persistence_heat_map.cpp +++ b/src/Persistence_representations/utilities/persistence_heat_maps/plot_persistence_heat_map.cpp @@ -34,7 +34,7 @@ using namespace Gudhi::Persistence_representations; int main( int argc , char** argv ) { - std::cout << "This program plot persistence landscape stored in a file (the file needs to be created beforehand). Please call the code with the name of a landsape file \n"; + std::cout << "This program plot persistence landscape stored in a file (the file needs to be created beforehand). Please call the code with the name of a landscape file \n"; Persistence_heat_maps l; l.load_from_file( argv[1] ); l.plot( argv[1] ); diff --git a/src/Persistence_representations/utilities/persistence_intervals/compute_bottleneck_distance.cpp b/src/Persistence_representations/utilities/persistence_intervals/compute_bottleneck_distance.cpp index 19e49bbb..fe4e709f 100644 --- a/src/Persistence_representations/utilities/persistence_intervals/compute_bottleneck_distance.cpp +++ b/src/Persistence_representations/utilities/persistence_intervals/compute_bottleneck_distance.cpp @@ -34,7 +34,7 @@ using namespace Gudhi::Persistence_representations; int main( int argc , char** argv ) { - std::cout << "This program compute the bottleneck distance of persistence diarams stored in a files. \n"; + std::cout << "This program compute the bottleneck distance of persistence diagrams stored in a files. \n"; std::cout << "The first parameter of the program is the dimension of persistence to be used to construct persistence landscapes. If your file contains "; std::cout << "the information about dimension of persistence pairs, please provide here the dimension of persistence pairs you want to use. If your input files consist only "; std::cout << "of birth-death pairs, please set this first parameter to -1 \n"; diff --git a/src/Persistence_representations/utilities/persistence_intervals/plot_histogram_of_intervals_lengths.cpp b/src/Persistence_representations/utilities/persistence_intervals/plot_histogram_of_intervals_lengths.cpp index b2cbac70..6e2598fa 100644 --- a/src/Persistence_representations/utilities/persistence_intervals/plot_histogram_of_intervals_lengths.cpp +++ b/src/Persistence_representations/utilities/persistence_intervals/plot_histogram_of_intervals_lengths.cpp @@ -71,7 +71,7 @@ int main( int argc , char** argv ) out << histogram[i] << std::endl; } out << std::endl; - std::cout << "To vizualize, open gnuplot and type: load \'" << gnuplot_script.str().c_str() << "\'" << std::endl; + std::cout << "To visualize, open gnuplot and type: load \'" << gnuplot_script.str().c_str() << "\'" << std::endl; out.close(); return 0; } diff --git a/src/Persistence_representations/utilities/persistence_intervals/plot_persistence_Betti_numbers.cpp b/src/Persistence_representations/utilities/persistence_intervals/plot_persistence_Betti_numbers.cpp index e20f85c0..5b36e0ce 100644 --- a/src/Persistence_representations/utilities/persistence_intervals/plot_persistence_Betti_numbers.cpp +++ b/src/Persistence_representations/utilities/persistence_intervals/plot_persistence_Betti_numbers.cpp @@ -89,12 +89,7 @@ int main( int argc , char** argv ) out << std::endl; out.close(); - //for ( size_t i = 0 ; i != pbns.size() ; ++i ) - //{ - // std::cout << pbns[i].first << " " << pbns[i].second << std::endl; - //} - - std::cout << "To vizualize, open gnuplot and type: load \'" << gnuplot_script.str().c_str() << "\'" << std::endl; + std::cout << "To visualize, open gnuplot and type: load \'" << gnuplot_script.str().c_str() << "\'" << std::endl; return 0; } diff --git a/src/Persistence_representations/utilities/persistence_landscapes/compute_distance_of_landscapes.cpp b/src/Persistence_representations/utilities/persistence_landscapes/compute_distance_of_landscapes.cpp index 85954cb2..ef969ed0 100644 --- a/src/Persistence_representations/utilities/persistence_landscapes/compute_distance_of_landscapes.cpp +++ b/src/Persistence_representations/utilities/persistence_landscapes/compute_distance_of_landscapes.cpp @@ -34,7 +34,7 @@ using namespace Gudhi::Persistence_representations; int main( int argc , char** argv ) { std::cout << "This program compute distance of persistence landscapes stored in a file (the file needs to be created beforehand). \n"; - std::cout << "The first parameter of a program is an interger p. The program compute L^p distance of the given landscapes. For L^infty distance choose p = -1. \n"; + std::cout << "The first parameter of a program is an integer p. The program compute L^p distance of the given landscapes. For L^infty distance choose p = -1. \n"; std::cout << "The remaining parameters of this programs are names of files with persistence landscapes."; if ( argc < 3 ) diff --git a/src/Persistence_representations/utilities/persistence_landscapes/plot_landscapes.cpp b/src/Persistence_representations/utilities/persistence_landscapes/plot_landscapes.cpp index b79a689d..670f0364 100644 --- a/src/Persistence_representations/utilities/persistence_landscapes/plot_landscapes.cpp +++ b/src/Persistence_representations/utilities/persistence_landscapes/plot_landscapes.cpp @@ -33,7 +33,7 @@ using namespace Gudhi::Persistence_representations; int main( int argc , char** argv ) { - std::cout << "This program plot persistence landscape stored in a file (the file needs to be created beforehand). Please call the code with the name of a landsape file \n"; + std::cout << "This program plot persistence landscape stored in a file (the file needs to be created beforehand). Please call the code with the name of a landscape file \n"; Persistence_landscape l; l.load_landscape_from_file( argv[1] ); diff --git a/src/Persistence_representations/utilities/persistence_landscapes_on_grid/compute_distance_of_landscapes_on_grid.cpp b/src/Persistence_representations/utilities/persistence_landscapes_on_grid/compute_distance_of_landscapes_on_grid.cpp index 4ecbd548..3065b52c 100644 --- a/src/Persistence_representations/utilities/persistence_landscapes_on_grid/compute_distance_of_landscapes_on_grid.cpp +++ b/src/Persistence_representations/utilities/persistence_landscapes_on_grid/compute_distance_of_landscapes_on_grid.cpp @@ -33,8 +33,8 @@ using namespace Gudhi::Persistence_representations; int main( int argc , char** argv ) { - std::cout << "This program compute dsitance of persistence landscapes on grid stored in a file (the file needs to be created beforehand). \n"; - std::cout << "The first parameter of a program is an interger p. The program compute L^p distance of the the landscapes on grid. For L^infty distance choose p = -1. \n"; + std::cout << "This program compute distance of persistence landscapes on grid stored in a file (the file needs to be created beforehand). \n"; + std::cout << "The first parameter of a program is an integer p. The program compute L^p distance of the landscapes on grid. For L^infty distance choose p = -1. \n"; std::cout << "The remaining parameters of this programs are names of files with persistence landscapes on grid.\n"; if ( argc < 3 ) @@ -106,5 +106,3 @@ int main( int argc , char** argv ) - - diff --git a/src/Persistence_representations/utilities/persistence_landscapes_on_grid/plot_landscapes_on_grid.cpp b/src/Persistence_representations/utilities/persistence_landscapes_on_grid/plot_landscapes_on_grid.cpp index 700b2f1f..b4fa3046 100644 --- a/src/Persistence_representations/utilities/persistence_landscapes_on_grid/plot_landscapes_on_grid.cpp +++ b/src/Persistence_representations/utilities/persistence_landscapes_on_grid/plot_landscapes_on_grid.cpp @@ -33,7 +33,7 @@ using namespace Gudhi::Persistence_representations; int main( int argc , char** argv ) { - std::cout << "This program plot persistence landscape on grid stored in a file (the file needs to be created beforehand). Please call the code with the name of a landsape on grid file \n"; + std::cout << "This program plot persistence landscape on grid stored in a file (the file needs to be created beforehand). Please call the code with the name of a landscape on grid file \n"; if ( argc == 1 ) { std::cout << "Wrong parameters of a program call, the program will now terminate \n"; diff --git a/src/Persistence_representations/utilities/persistence_vectors/compute_distance_of_persistence_vectors.cpp b/src/Persistence_representations/utilities/persistence_vectors/compute_distance_of_persistence_vectors.cpp index 39e24cd7..5c0d3328 100644 --- a/src/Persistence_representations/utilities/persistence_vectors/compute_distance_of_persistence_vectors.cpp +++ b/src/Persistence_representations/utilities/persistence_vectors/compute_distance_of_persistence_vectors.cpp @@ -34,7 +34,7 @@ using namespace Gudhi::Persistence_representations; int main( int argc , char** argv ) { std::cout << "This program compute distance of persistence vectors stored in a file (the file needs to be created beforehand). \n"; - std::cout << "The first parameter of a program is an interger p. The program compute l^p distance of the vectors. For l^infty distance choose p = -1. \n"; + std::cout << "The first parameter of a program is an integer p. The program compute l^p distance of the vectors. For l^infty distance choose p = -1. \n"; std::cout << "The remaining parameters of this programs are names of files with persistence vectors.\n"; if ( argc < 3 ) @@ -60,7 +60,6 @@ int main( int argc , char** argv ) vectors.reserve( filenames.size() ); for ( size_t file_no = 0 ; file_no != filenames.size() ; ++file_no ) { - //cerr << filenames[file_no] << endl; Vector_distances_in_diagram< Euclidean_distance > l; l.load_from_file( filenames[file_no] ); vectors.push_back( l ); diff --git a/src/Persistence_representations/utilities/persistence_vectors/create_persistence_vectors.cpp b/src/Persistence_representations/utilities/persistence_vectors/create_persistence_vectors.cpp index 634bcb13..d7a22e58 100644 --- a/src/Persistence_representations/utilities/persistence_vectors/create_persistence_vectors.cpp +++ b/src/Persistence_representations/utilities/persistence_vectors/create_persistence_vectors.cpp @@ -52,8 +52,7 @@ int main( int argc , char** argv ) for ( size_t i = 0 ; i != filenames.size() ; ++i ) { - std::cerr << "Creatign persistence vectors based on a file : " << filenames[i] << std::endl; - //std::vector< std::pair< double , double > > persistence_pairs = read_gudhi_persistence_file_in_one_dimension( filenames[i] , size_t dimension = 0 ) + std::cerr << "Creating persistence vectors based on a file : " << filenames[i] << std::endl; Vector_distances_in_diagram< Euclidean_distance > l( filenames[i] , dimension ); std::stringstream ss; ss << filenames[i] << ".vect"; diff --git a/src/cmake/modules/GUDHI_user_version_target.txt b/src/cmake/modules/GUDHI_user_version_target.txt index 8b7cf0e2..3172f6b1 100644 --- a/src/cmake/modules/GUDHI_user_version_target.txt +++ b/src/cmake/modules/GUDHI_user_version_target.txt @@ -47,7 +47,7 @@ if (NOT CMAKE_VERSION VERSION_LESS 2.8.11) add_custom_command(TARGET user_version PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/src/GudhUI ${GUDHI_USER_VERSION_DIR}/GudhUI) - set(GUDHI_MODULES "common;Alpha_complex;Bitmap_cubical_complex;Bottleneck_distance;Contraction;Gudhi_stat;Hasse_complex;Persistent_cohomology;Rips_complex;Simplex_tree;Skeleton_blocker;Spatial_searching;Subsampling;Tangential_complex;Witness_complex") + set(GUDHI_MODULES "common;Alpha_complex;Bitmap_cubical_complex;Bottleneck_distance;Contraction;Hasse_complex;Persistence_representations;Persistent_cohomology;Rips_complex;Simplex_tree;Skeleton_blocker;Spatial_searching;Subsampling;Tangential_complex;Witness_complex") set(GUDHI_DIRECTORIES "doc;example;concept;utilities") set(GUDHI_INCLUDE_DIRECTORIES "include/gudhi;include/gudhi_patches") diff --git a/src/common/doc/main_page.h b/src/common/doc/main_page.h index d1cb691c..6986a6b5 100644 --- a/src/common/doc/main_page.h +++ b/src/common/doc/main_page.h @@ -212,19 +212,20 @@ - \subsection Gudhi_stat_sublibrary Gudhi statistical sublibrary - \image html "average_landscape.png" "Gudhi statistical sublibrary" + \subsection PersistenceRepresentationsToolbox Persistence representations + \image html "average_landscape.png" "Persistence representations" diff --git a/src/common/include/gudhi/distance_functions.h b/src/common/include/gudhi/distance_functions.h index f6e2ab5a..f683136b 100644 --- a/src/common/include/gudhi/distance_functions.h +++ b/src/common/include/gudhi/distance_functions.h @@ -48,6 +48,11 @@ class Euclidean_distance { } return std::sqrt(dist); } + template< typename T > + T operator() ( const std::pair< T,T >& f , const std::pair< T,T >& s ) + { + return sqrt( (f.first-s.first)*(f.first-s.first) + (f.second-s.second)*(f.second-s.second) ); + } }; } // namespace Gudhi -- cgit v1.2.3 From 2bcb3d7cb47ce71803f2464cc822346ed2e1b039 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Tue, 30 May 2017 15:43:48 +0000 Subject: Fix doc typo git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/persistence_representation_integration@2476 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: eee441e3902a0995a8356d76007664fe559f3036 --- src/Persistence_representations/include/gudhi/Persistence_vectors.h | 2 +- src/common/doc/main_page.h | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) (limited to 'src/common/doc') diff --git a/src/Persistence_representations/include/gudhi/Persistence_vectors.h b/src/Persistence_representations/include/gudhi/Persistence_vectors.h index 616ec50f..7cfb8e0b 100644 --- a/src/Persistence_representations/include/gudhi/Persistence_vectors.h +++ b/src/Persistence_representations/include/gudhi/Persistence_vectors.h @@ -54,7 +54,7 @@ struct Maximum_distance /** - * \class Vector_distances_in_diagram Vector_distances_in_diagram.h gudhi/Vector_distances_in_diagram.h + * \class Vector_distances_in_diagram Persistence_vectors.h gudhi/Persistence_vectors.h * \brief A class implementing persistence vectors. * * \ingroup Persistence_representations diff --git a/src/common/doc/main_page.h b/src/common/doc/main_page.h index 6986a6b5..ec968558 100644 --- a/src/common/doc/main_page.h +++ b/src/common/doc/main_page.h @@ -222,11 +222,10 @@ Copyright: GPL v3
Author: Pawel Dlotko
- Introduced in: GUDHI 2.0.0
+ Introduced in: GUDHI 2.1.0
Copyright: GPL v3
- This is a statistical library for gudhi. It contain implementation of various representations of persistence diagrams; diagrams themselves, persistence landscapes (rigorous and grid version), - persistence heath maps, vectors and others. It implements basic functionalities which are neccessary to use persistence in statistics and machine learning. - User manual: \ref Gudhi_stat + It contain implementation of various representations of persistence diagrams; diagrams themselves, persistence + landscapes (rigorous and grid version), persistence heath maps, vectors and others. It implements basic + functionalities which are neccessary to use persistence in statistics and machine learning.
+ User manual: \ref Persistence_representations
- It contain implementation of various representations of persistence diagrams; diagrams themselves, persistence + It contains implementation of various representations of persistence diagrams; diagrams themselves, persistence landscapes (rigorous and grid version), persistence heath maps, vectors and others. It implements basic functionalities which are neccessary to use persistence in statistics and machine learning.
User manual: \ref Persistence_representations -
-- cgit v1.2.3 From 3f6290ba33cedec91ca69866d1be33bb4887e31f Mon Sep 17 00:00:00 2001 From: cjamin Date: Wed, 31 May 2017 17:25:00 +0000 Subject: Mention utilities git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/add_utils_in_gudhi_v2@2495 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 40a98c7df253c4938fdadfb8b6ec59174c9f1f4f --- src/common/doc/main_page.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/common/doc') diff --git a/src/common/doc/main_page.h b/src/common/doc/main_page.h index bd4615f5..6ff3f94d 100644 --- a/src/common/doc/main_page.h +++ b/src/common/doc/main_page.h @@ -269,7 +269,7 @@ make doxygen * Having CGAL version 4.4.0 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 + * The following examples/utilities 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 @@ -343,7 +343,7 @@ make doxygen * * Having Intel® TBB installed is recommended to parallelize and accelerate some GUDHI computations. * - * The following examples are using Intel® TBB if installed: + * The following examples/utilities are using Intel® TBB if installed: * \li * Alpha_complex/Alpha_complex_from_off.cpp * \li -- cgit v1.2.3 From f583b644e6bb34e6289c17fa33e34f52897a6329 Mon Sep 17 00:00:00 2001 From: cjamin Date: Tue, 13 Jun 2017 15:27:43 +0000 Subject: Merge read_persistence_from_file into persistence_representation_integration git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/persistence_representation_integration@2539 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 2bfc0f855b4814946c5cad892d6314d147db1caf --- src/Bottleneck_distance/example/CMakeLists.txt | 4 ++ .../example/bottleneck_read_file_example.cpp | 36 ++-------- src/common/doc/file_formats.h | 54 +++++++++++++++ src/common/include/gudhi/reader_utils.h | 76 +++++++++++++++++++++- 4 files changed, 139 insertions(+), 31 deletions(-) create mode 100644 src/common/doc/file_formats.h (limited to 'src/common/doc') diff --git a/src/Bottleneck_distance/example/CMakeLists.txt b/src/Bottleneck_distance/example/CMakeLists.txt index 0534a2c4..508e57bf 100644 --- a/src/Bottleneck_distance/example/CMakeLists.txt +++ b/src/Bottleneck_distance/example/CMakeLists.txt @@ -19,6 +19,10 @@ if (NOT CGAL_WITH_EIGEN3_VERSION VERSION_LESS 4.8.1) COMMAND $ "${CMAKE_SOURCE_DIR}/data/points/tore3D_1307.off" "-r" "0.15" "-m" "0.12" "-d" "3" "-p" "3") + add_test(NAME Bottleneck_read_file_example + COMMAND $ + "${CMAKE_SOURCE_DIR}/data/persistence_diagram/first.pers" "${CMAKE_SOURCE_DIR}/data/persistence_diagram/second.pers") + install(TARGETS bottleneck_read_file_example DESTINATION bin) install(TARGETS bottleneck_basic_example DESTINATION bin) install(TARGETS alpha_rips_persistence_bottleneck_distance DESTINATION bin) diff --git a/src/Bottleneck_distance/example/bottleneck_read_file_example.cpp b/src/Bottleneck_distance/example/bottleneck_read_file_example.cpp index bde05825..238d99ad 100644 --- a/src/Bottleneck_distance/example/bottleneck_read_file_example.cpp +++ b/src/Bottleneck_distance/example/bottleneck_read_file_example.cpp @@ -20,9 +20,8 @@ * along with this program. If not, see . */ -#define CGAL_HAS_THREADS - #include +#include #include #include #include // for pair @@ -30,43 +29,22 @@ #include #include -std::vector< std::pair > read_diagram_from_file(const char* filename) { - std::ifstream in; - in.open(filename); - std::vector< std::pair > result; - if (!in.is_open()) { - std::cerr << "File : " << filename << " do not exist. The program will now terminate \n"; - throw "File do not exist \n"; - } - - std::string line; - while (!in.eof()) { - getline(in, line); - if (line.length() != 0) { - std::stringstream lineSS; - lineSS << line; - double beginn, endd; - lineSS >> beginn; - lineSS >> endd; - result.push_back(std::make_pair(beginn, endd)); - } - } - in.close(); - return result; -} // read_diagram_from_file - int main(int argc, char** argv) { if (argc < 3) { std::cout << "To run this program please provide as an input two files with persistence diagrams. Each file " << "should contain a birth-death pair per line. Third, optional parameter is an error bound on a bottleneck" << " distance (set by default to zero). The program will now terminate \n"; + return -1; } - std::vector< std::pair< double, double > > diag1 = read_diagram_from_file(argv[1]); - std::vector< std::pair< double, double > > diag2 = read_diagram_from_file(argv[2]); + std::vector> diag1 = read_persistence_intervals_in_dimension(argv[1]); + std::vector> diag2 = read_persistence_intervals_in_dimension(argv[2]); + double tolerance = 0.; if (argc == 4) { tolerance = atof(argv[3]); } double b = Gudhi::persistence_diagram::bottleneck_distance(diag1, diag2, tolerance); std::cout << "The distance between the diagrams is : " << b << ". The tolerance is : " << tolerance << std::endl; + + return 0; } diff --git a/src/common/doc/file_formats.h b/src/common/doc/file_formats.h new file mode 100644 index 00000000..c145b271 --- /dev/null +++ b/src/common/doc/file_formats.h @@ -0,0 +1,54 @@ +/* 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 Jamin +* +* Copyright (C) 2017 INRIA +* +* 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_COMMON_FILE_FORMAT_H_ +#define DOC_COMMON_FILE_FORMAT_H_ + +namespace Gudhi { + +/*! \page fileformats File formats + + \tableofcontents + + \section FileFormatsPers Persistence Diagram + + Such a file, whose extension is usually `.pers`, contains a list of persistence intervals.
+ Lines starting with `#` are ignored (comments).
+ Other lines might contain 2, 3 or 4 values (the number of values on each line must be the same for all lines): + \code{.unparsed} + [[field] dimension] birth death + \endcode + + Here is a simple sample file: + \code{.unparsed} + # Beautiful persistence diagram + 2 2.7 3.7 + 2 9.6 14. + 3 34.2 34.974 + 4 3. inf + \endcode + + Other sample files can be found in the `data/persistence_diagram` folder. +*/ +} // namespace Gudhi + +#endif // DOC_COMMON_FILE_FORMAT_H_ diff --git a/src/common/include/gudhi/reader_utils.h b/src/common/include/gudhi/reader_utils.h index 97a87edd..35af09bd 100644 --- a/src/common/include/gudhi/reader_utils.h +++ b/src/common/include/gudhi/reader_utils.h @@ -2,7 +2,7 @@ * (Geometric Understanding in Higher Dimensions) is a generic C++ * library for computational topology. * - * Author(s): Clement Maria, Pawel Dlotko + * Author(s): Clement Maria, Pawel Dlotko, Clement Jamin * * Copyright (C) 2014 INRIA * @@ -24,6 +24,8 @@ #define READER_UTILS_H_ #include +#include +#include #include @@ -92,7 +94,10 @@ template< typename Graph_t, typename Filtration_value, typename Vertex_handle > Graph_t read_graph(std::string file_name) { std::ifstream in_(file_name.c_str(), std::ios::in); if (!in_.is_open()) { - std::cerr << "Unable to open file " << file_name << std::endl; + std::string error_str("read_graph - Unable to open file "); + error_str.append(file_name); + std::cerr << error_str << std::endl; + throw std::invalid_argument(error_str); } typedef std::pair< Vertex_handle, Vertex_handle > Edge_t; @@ -295,4 +300,71 @@ std::vector< std::vector< Filtration_value > > read_lower_triangular_matrix_from return result; } // read_lower_triangular_matrix_from_csv_file +/** +Reads a file containing persistence intervals. +Each line might contain 2, 3 or 4 values: [[field] dimension] birth death +The output iterator `out` is used this way: `*out++ = std::make_tuple(dim, birth, death);` +where `dim` is an `int`, `birth` a `double`, and `death` a `double`. +**/ +template +void read_persistence_intervals_and_dimension(std::string const& filename, OutputIterator out) { + + std::ifstream in(filename); + if (!in.is_open()) { + std::string error_str("read_persistence_intervals_and_dimension - Unable to open file "); + error_str.append(filename); + std::cerr << error_str << std::endl; + throw std::invalid_argument(error_str); + } + + while (!in.eof()) { + std::string line; + getline(in, line); + if (line.length() != 0 && line[0] != '#') { + double numbers[4]; + int n = sscanf(line.c_str(), "%lf %lf %lf %lf", &numbers[0], &numbers[1], &numbers[2], &numbers[3]); + if (n >= 2) { + //int field = (n == 4 ? static_cast(numbers[0]) : -1); + int dim = (n >= 3 ? static_cast(numbers[n - 3]) : -1); + GUDHI_CHECK(numbers[n - 2] <= numbers[n - 1], "Error: birth > death."); + *out++ = std::make_tuple(dim, numbers[n - 2], numbers[n - 1]); + } + } + } +} // read_persistence_diagram_from_file + +/** +Reads a file containing persistence intervals. +Each line might contain 2, 3 or 4 values: [[field] dimension] birth death +The return value is an `std::map>>` +where `dim` is an `int`, `birth` a `double`, and `death` a `double`. +**/ +std::map>> read_persistence_intervals_grouped_by_dimension(std::string const& filename) { + + std::map>> ret; + read_persistence_intervals_and_dimension( + filename, + boost::make_function_output_iterator([&ret](auto t) { ret[get<0>(t)].push_back(std::make_pair(get<1>(t), get<2>(t))); })); + return ret; +} // read_persistence_diagram_from_file + + +/** +Reads a file containing persistence intervals. +Each line might contain 2, 3 or 4 values: [[field] dimension] birth death +If `only_this_dim` = -1, dimension is ignored and all lines are returned. +If `only_this_dim` is >= 0, only the lines where dimension = `only_this_dim` +(or where dimension is not specified) are returned. +The return value is an `std::vector>` +where `dim` is an `int`, `birth` a `double`, and `death` a `double`. +**/ +std::vector> read_persistence_intervals_in_dimension(std::string const& filename, int only_this_dim = -1) { + + std::vector> ret; + read_persistence_intervals_and_dimension( + filename, + boost::make_function_output_iterator([&ret](auto t) { ret.emplace_back(get<1>(t), get<2>(t)); })); + return ret; +} // read_persistence_diagram_from_file + #endif // READER_UTILS_H_ -- cgit v1.2.3 From 300914816e3e5d347efd9eaa5d06c236ad81511e Mon Sep 17 00:00:00 2001 From: cjamin Date: Thu, 5 Oct 2017 08:26:50 +0000 Subject: Move some utils + update doc so that utilities are shown as examples git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/add_utils_in_gudhi_v2@2756 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: a707d174a382da7efad3d12a73bb66d2c90da599 --- src/Doxyfile | 3 +- .../doc/Intro_persistent_cohomology.h | 20 +-- src/Persistent_cohomology/utilities/CMakeLists.txt | 21 --- src/Persistent_cohomology/utilities/README | 66 --------- .../utilities/rips_distance_matrix_persistence.cpp | 144 -------------------- .../utilities/rips_persistence.cpp | 147 --------------------- src/Rips_complex/utilities/CMakeLists.txt | 21 +++ src/Rips_complex/utilities/README | 66 +++++++++ .../utilities/rips_distance_matrix_persistence.cpp | 144 ++++++++++++++++++++ src/Rips_complex/utilities/rips_persistence.cpp | 147 +++++++++++++++++++++ src/common/doc/main_page.h | 54 ++++---- 11 files changed, 415 insertions(+), 418 deletions(-) delete mode 100644 src/Persistent_cohomology/utilities/CMakeLists.txt delete mode 100644 src/Persistent_cohomology/utilities/README delete mode 100644 src/Persistent_cohomology/utilities/rips_distance_matrix_persistence.cpp delete mode 100644 src/Persistent_cohomology/utilities/rips_persistence.cpp create mode 100644 src/Rips_complex/utilities/CMakeLists.txt create mode 100644 src/Rips_complex/utilities/README create mode 100644 src/Rips_complex/utilities/rips_distance_matrix_persistence.cpp create mode 100644 src/Rips_complex/utilities/rips_persistence.cpp (limited to 'src/common/doc') diff --git a/src/Doxyfile b/src/Doxyfile index 7f5975eb..7b506e42 100644 --- a/src/Doxyfile +++ b/src/Doxyfile @@ -819,7 +819,8 @@ EXCLUDE_SYMBOLS = # command). EXAMPLE_PATH = biblio/ \ - example/ + example/ \ + utilities/ # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and diff --git a/src/Persistent_cohomology/doc/Intro_persistent_cohomology.h b/src/Persistent_cohomology/doc/Intro_persistent_cohomology.h index e17e5926..576a1af8 100644 --- a/src/Persistent_cohomology/doc/Intro_persistent_cohomology.h +++ b/src/Persistent_cohomology/doc/Intro_persistent_cohomology.h @@ -143,8 +143,8 @@ namespace persistent_cohomology { 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 outputs its persistence +\li +Rips_complex/rips_persistence.cpp computes the Rips complex of a point cloud and outputs its persistence diagram. \code $> ./rips_persistence ../../data/points/tore3D_1307.off -r 0.25 -m 0.5 -d 3 -p 3 \endcode \code The complex contains 177838 simplices @@ -158,12 +158,12 @@ diagram. Persistent_cohomology/rips_multifield_persistence.cpp computes the Rips complex of a point cloud and outputs its persistence diagram with a family of field coefficients. -\li -Persistent_cohomology/rips_distance_matrix_persistence.cpp computes the Rips complex of a distance matrix and +\li +Rips_complex/rips_distance_matrix_persistence.cpp computes the Rips complex of a distance matrix and outputs its persistence diagram. -\li -Persistent_cohomology/alpha_complex_3d_persistence.cpp computes the persistent homology with +\li +Alpha_complex/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 @@ -194,8 +194,8 @@ and a weights file. 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 +\li +Alpha_complex/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. @@ -205,8 +205,8 @@ Simplex_tree dim: 3 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 +\li +Alpha_complex/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. diff --git a/src/Persistent_cohomology/utilities/CMakeLists.txt b/src/Persistent_cohomology/utilities/CMakeLists.txt deleted file mode 100644 index 9a506b3f..00000000 --- a/src/Persistent_cohomology/utilities/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -cmake_minimum_required(VERSION 2.6) -project(Persistent_cohomology_utilities) - -add_executable(rips_distance_matrix_persistence rips_distance_matrix_persistence.cpp) -target_link_libraries(rips_distance_matrix_persistence ${Boost_PROGRAM_OPTIONS_LIBRARY}) - -add_executable(rips_persistence rips_persistence.cpp) -target_link_libraries(rips_persistence ${Boost_PROGRAM_OPTIONS_LIBRARY}) - -if (TBB_FOUND) - target_link_libraries(rips_distance_matrix_persistence ${TBB_LIBRARIES}) - target_link_libraries(rips_persistence ${TBB_LIBRARIES}) -endif() - -add_test(NAME Persistent_cohomology_example_from_rips_distance_matrix COMMAND $ - "${CMAKE_SOURCE_DIR}/data/distance_matrix/full_square_distance_matrix.csv" "-r" "1.0" "-d" "3" "-p" "3" "-m" "0") -add_test(NAME Persistent_cohomology_example_from_rips_on_tore_3D COMMAND $ - "${CMAKE_SOURCE_DIR}/data/points/tore3D_1307.off" "-r" "0.25" "-m" "0.5" "-d" "3" "-p" "3") - -install(TARGETS rips_distance_matrix_persistence DESTINATION bin) -install(TARGETS rips_persistence DESTINATION bin) diff --git a/src/Persistent_cohomology/utilities/README b/src/Persistent_cohomology/utilities/README deleted file mode 100644 index eecee7ee..00000000 --- a/src/Persistent_cohomology/utilities/README +++ /dev/null @@ -1,66 +0,0 @@ -# Persistent_cohomology # - -## `rips_persistence` ## -This program computes the persistent homology with coefficient field *Z/pZ* of a Rips complex defined on a set of input points. The output diagram contains one bar per line, written with the convention: - -`p dim b d` - -where `dim` is the dimension of the homological feature, `b` and `d` are respectively the birth and death of the feature, and `p` is the characteristic of the field *Z/pZ* used for homology coefficients (`p = p1*...*pr` is the product of prime numbers *pi* such that the homology feature exists in homology with *Z/piZ* coefficients). - -**Usage** -`rips_persistence [options] ` - -**Allowed options** - -* `-h [ --help ]` Produce help message -* `-r [ --max-edge-length ]` (default = inf) Maximal length of an edge for the Rips complex construction. -* `-d [ --cpx-dimension ]` (default = 1) Maximal dimension of the Rips complex we want to compute. -* `-p [ --field-charac ]` (default = 11) Characteristic p of the coefficient field Z/pZ for computing homology. -* `-m [ --min-persistence ]` (default = 0) Minimal lifetime of homology feature to be recorded. Enter a negative value to see zero length intervals. - -**Example 1 with Z/2Z coefficients** -`rips_persistence ../../data/points/tore3D_1307.off -r 0.25 -m 0.5 -d 3 -p 2` - -outputs: -``` -2 0 0 inf -2 1 0.0983494 inf -2 1 0.104347 inf -2 2 0.138335 inf -``` - -**Example 2 with Z/3Z coefficients** - -rips_persistence ../../data/points/tore3D_1307.off -r 0.25 -m 0.5 -d 3 -p 3 - -outputs: -``` -3 0 0 inf -3 1 0.0983494 inf -3 1 0.104347 inf -3 2 0.138335 inf -``` - - - - -## `rips_distance_matrix_persistence` ## -Same as `rips_persistence` but taking an distance matrix as input. - -**Example** -`rips_distance_matrix_persistence data/distance_matrix/full_square_distance_matrix.csv -r 15 -d 3 -p 3 -m 0` - -outputs: -``` -The complex contains 46 simplices - and has dimension 3 -3 0 0 inf -3 0 0 8.94427 -3 0 0 7.28011 -3 0 0 6.08276 -3 0 0 5.83095 -3 0 0 5.38516 -3 0 0 5 -3 1 11 12.0416 -3 1 6.32456 6.7082 -``` diff --git a/src/Persistent_cohomology/utilities/rips_distance_matrix_persistence.cpp b/src/Persistent_cohomology/utilities/rips_distance_matrix_persistence.cpp deleted file mode 100644 index d38808c7..00000000 --- a/src/Persistent_cohomology/utilities/rips_distance_matrix_persistence.cpp +++ /dev/null @@ -1,144 +0,0 @@ -/* 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, Vincent Rouvreau - * - * Copyright (C) 2016 INRIA - * - * 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 . - */ - -#include -#include -#include -#include - -#include - -#include -#include -#include // infinity - -// Types definition -using Simplex_tree = Gudhi::Simplex_tree; -using Filtration_value = Simplex_tree::Filtration_value; -using Rips_complex = Gudhi::rips_complex::Rips_complex; -using Field_Zp = Gudhi::persistent_cohomology::Field_Zp; -using Persistent_cohomology = Gudhi::persistent_cohomology::Persistent_cohomology; -using Distance_matrix = std::vector>; - -void program_options(int argc, char * argv[] - , std::string & csv_matrix_file - , std::string & filediag - , Filtration_value & threshold - , int & dim_max - , int & p - , Filtration_value & min_persistence); - -int main(int argc, char * argv[]) { - std::string csv_matrix_file; - std::string filediag; - Filtration_value threshold; - int dim_max; - int p; - Filtration_value min_persistence; - - program_options(argc, argv, csv_matrix_file, filediag, threshold, dim_max, p, min_persistence); - - Distance_matrix distances = Gudhi::read_lower_triangular_matrix_from_csv_file(csv_matrix_file); - Rips_complex rips_complex_from_file(distances, threshold); - - // Construct the Rips complex in a Simplex Tree - Simplex_tree simplex_tree; - - rips_complex_from_file.create_complex(simplex_tree, dim_max); - std::cout << "The complex contains " << simplex_tree.num_simplices() << " simplices \n"; - std::cout << " and has dimension " << simplex_tree.dimension() << " \n"; - - // Sort the simplices in the order of the filtration - simplex_tree.initialize_filtration(); - - // Compute the persistence diagram of the complex - Persistent_cohomology pcoh(simplex_tree); - // initializes the coefficient field for homology - pcoh.init_coefficients(p); - - pcoh.compute_persistent_cohomology(min_persistence); - - // Output the diagram in filediag - if (filediag.empty()) { - pcoh.output_diagram(); - } else { - std::ofstream out(filediag); - pcoh.output_diagram(out); - out.close(); - } - return 0; -} - -void program_options(int argc, char * argv[] - , std::string & csv_matrix_file - , std::string & filediag - , Filtration_value & threshold - , int & dim_max - , int & p - , Filtration_value & min_persistence) { - namespace po = boost::program_options; - po::options_description hidden("Hidden options"); - hidden.add_options() - ("input-file", po::value(&csv_matrix_file), - "Name of file containing a distance matrix. Can be square or lower triangular matrix. Separator is ';'."); - - po::options_description visible("Allowed options", 100); - visible.add_options() - ("help,h", "produce help message") - ("output-file,o", po::value(&filediag)->default_value(std::string()), - "Name of file in which the persistence diagram is written. Default print in std::cout") - ("max-edge-length,r", - po::value(&threshold)->default_value(std::numeric_limits::infinity()), - "Maximal length of an edge for the Rips complex construction.") - ("cpx-dimension,d", po::value(&dim_max)->default_value(1), - "Maximal dimension of the Rips complex we want to compute.") - ("field-charac,p", po::value(&p)->default_value(11), - "Characteristic p of the coefficient field Z/pZ for computing homology.") - ("min-persistence,m", po::value(&min_persistence), - "Minimal lifetime of homology feature to be recorded. Default is 0. Enter a negative value to see zero length intervals"); - - po::positional_options_description pos; - pos.add("input-file", 1); - - po::options_description all; - all.add(visible).add(hidden); - - po::variables_map vm; - po::store(po::command_line_parser(argc, argv). - options(all).positional(pos).run(), vm); - po::notify(vm); - - if (vm.count("help") || !vm.count("input-file")) { - std::cout << std::endl; - std::cout << "Compute the persistent homology with coefficient field Z/pZ \n"; - std::cout << "of a Rips complex defined on a set of distance matrix.\n \n"; - std::cout << "The output diagram contains one bar per line, written with the convention: \n"; - std::cout << " p dim b d \n"; - std::cout << "where dim is the dimension of the homological feature,\n"; - std::cout << "b and d are respectively the birth and death of the feature and \n"; - std::cout << "p is the characteristic of the field Z/pZ used for homology coefficients." << std::endl << std::endl; - - std::cout << "Usage: " << argv[0] << " [options] input-file" << std::endl << std::endl; - std::cout << visible << std::endl; - std::abort(); - } -} diff --git a/src/Persistent_cohomology/utilities/rips_persistence.cpp b/src/Persistent_cohomology/utilities/rips_persistence.cpp deleted file mode 100644 index d504798b..00000000 --- a/src/Persistent_cohomology/utilities/rips_persistence.cpp +++ /dev/null @@ -1,147 +0,0 @@ -/* 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 - * - * 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 . - */ - -#include -#include -#include -#include -#include - -#include - -#include -#include -#include // infinity - -// Types definition -using Simplex_tree = Gudhi::Simplex_tree; -using Filtration_value = Simplex_tree::Filtration_value; -using Rips_complex = Gudhi::rips_complex::Rips_complex; -using Field_Zp = Gudhi::persistent_cohomology::Field_Zp; -using Persistent_cohomology = Gudhi::persistent_cohomology::Persistent_cohomology; -using Point = std::vector; -using Points_off_reader = Gudhi::Points_off_reader; - -void program_options(int argc, char * argv[] - , std::string & off_file_points - , std::string & filediag - , Filtration_value & threshold - , int & dim_max - , int & p - , Filtration_value & min_persistence); - -int main(int argc, char * argv[]) { - std::string off_file_points; - std::string filediag; - Filtration_value threshold; - int dim_max; - int p; - Filtration_value min_persistence; - - program_options(argc, argv, off_file_points, filediag, threshold, dim_max, p, min_persistence); - - Points_off_reader off_reader(off_file_points); - Rips_complex rips_complex_from_file(off_reader.get_point_cloud(), threshold, Gudhi::Euclidean_distance()); - - // Construct the Rips complex in a Simplex Tree - Simplex_tree simplex_tree; - - rips_complex_from_file.create_complex(simplex_tree, dim_max); - std::cout << "The complex contains " << simplex_tree.num_simplices() << " simplices \n"; - std::cout << " and has dimension " << simplex_tree.dimension() << " \n"; - - // Sort the simplices in the order of the filtration - simplex_tree.initialize_filtration(); - - // Compute the persistence diagram of the complex - Persistent_cohomology pcoh(simplex_tree); - // initializes the coefficient field for homology - pcoh.init_coefficients(p); - - pcoh.compute_persistent_cohomology(min_persistence); - - // Output the diagram in filediag - if (filediag.empty()) { - pcoh.output_diagram(); - } else { - std::ofstream out(filediag); - pcoh.output_diagram(out); - out.close(); - } - - return 0; -} - -void program_options(int argc, char * argv[] - , std::string & off_file_points - , std::string & filediag - , Filtration_value & threshold - , int & dim_max - , int & p - , Filtration_value & min_persistence) { - namespace po = boost::program_options; - po::options_description hidden("Hidden options"); - hidden.add_options() - ("input-file", po::value(&off_file_points), - "Name of an OFF file containing a point set.\n"); - - po::options_description visible("Allowed options", 100); - visible.add_options() - ("help,h", "produce help message") - ("output-file,o", po::value(&filediag)->default_value(std::string()), - "Name of file in which the persistence diagram is written. Default print in std::cout") - ("max-edge-length,r", - po::value(&threshold)->default_value(std::numeric_limits::infinity()), - "Maximal length of an edge for the Rips complex construction.") - ("cpx-dimension,d", po::value(&dim_max)->default_value(1), - "Maximal dimension of the Rips complex we want to compute.") - ("field-charac,p", po::value(&p)->default_value(11), - "Characteristic p of the coefficient field Z/pZ for computing homology.") - ("min-persistence,m", po::value(&min_persistence), - "Minimal lifetime of homology feature to be recorded. Default is 0. Enter a negative value to see zero length intervals"); - - po::positional_options_description pos; - pos.add("input-file", 1); - - po::options_description all; - all.add(visible).add(hidden); - - po::variables_map vm; - po::store(po::command_line_parser(argc, argv). - options(all).positional(pos).run(), vm); - po::notify(vm); - - if (vm.count("help") || !vm.count("input-file")) { - std::cout << std::endl; - std::cout << "Compute the persistent homology with coefficient field Z/pZ \n"; - std::cout << "of a Rips complex defined on a set of input points.\n \n"; - std::cout << "The output diagram contains one bar per line, written with the convention: \n"; - std::cout << " p dim b d \n"; - std::cout << "where dim is the dimension of the homological feature,\n"; - std::cout << "b and d are respectively the birth and death of the feature and \n"; - std::cout << "p is the characteristic of the field Z/pZ used for homology coefficients." << std::endl << std::endl; - - std::cout << "Usage: " << argv[0] << " [options] input-file" << std::endl << std::endl; - std::cout << visible << std::endl; - std::abort(); - } -} diff --git a/src/Rips_complex/utilities/CMakeLists.txt b/src/Rips_complex/utilities/CMakeLists.txt new file mode 100644 index 00000000..baa571fa --- /dev/null +++ b/src/Rips_complex/utilities/CMakeLists.txt @@ -0,0 +1,21 @@ +cmake_minimum_required(VERSION 2.6) +project(Rips_complex_utilities) + +add_executable(rips_distance_matrix_persistence rips_distance_matrix_persistence.cpp) +target_link_libraries(rips_distance_matrix_persistence ${Boost_PROGRAM_OPTIONS_LIBRARY}) + +add_executable(rips_persistence rips_persistence.cpp) +target_link_libraries(rips_persistence ${Boost_PROGRAM_OPTIONS_LIBRARY}) + +if (TBB_FOUND) + target_link_libraries(rips_distance_matrix_persistence ${TBB_LIBRARIES}) + target_link_libraries(rips_persistence ${TBB_LIBRARIES}) +endif() + +add_test(NAME Rips_complex_utility_from_rips_distance_matrix COMMAND $ + "${CMAKE_SOURCE_DIR}/data/distance_matrix/full_square_distance_matrix.csv" "-r" "1.0" "-d" "3" "-p" "3" "-m" "0") +add_test(NAME Rips_complex_utility_from_rips_on_tore_3D COMMAND $ + "${CMAKE_SOURCE_DIR}/data/points/tore3D_1307.off" "-r" "0.25" "-m" "0.5" "-d" "3" "-p" "3") + +install(TARGETS rips_distance_matrix_persistence DESTINATION bin) +install(TARGETS rips_persistence DESTINATION bin) diff --git a/src/Rips_complex/utilities/README b/src/Rips_complex/utilities/README new file mode 100644 index 00000000..ddb7860f --- /dev/null +++ b/src/Rips_complex/utilities/README @@ -0,0 +1,66 @@ +# Rips_complex # + +## `rips_persistence` ## +This program computes the persistent homology with coefficient field *Z/pZ* of a Rips complex defined on a set of input points. The output diagram contains one bar per line, written with the convention: + +`p dim b d` + +where `dim` is the dimension of the homological feature, `b` and `d` are respectively the birth and death of the feature, and `p` is the characteristic of the field *Z/pZ* used for homology coefficients (`p = p1*...*pr` is the product of prime numbers *pi* such that the homology feature exists in homology with *Z/piZ* coefficients). + +**Usage** +`rips_persistence [options] ` + +**Allowed options** + +* `-h [ --help ]` Produce help message +* `-r [ --max-edge-length ]` (default = inf) Maximal length of an edge for the Rips complex construction. +* `-d [ --cpx-dimension ]` (default = 1) Maximal dimension of the Rips complex we want to compute. +* `-p [ --field-charac ]` (default = 11) Characteristic p of the coefficient field Z/pZ for computing homology. +* `-m [ --min-persistence ]` (default = 0) Minimal lifetime of homology feature to be recorded. Enter a negative value to see zero length intervals. + +**Example 1 with Z/2Z coefficients** +`rips_persistence ../../data/points/tore3D_1307.off -r 0.25 -m 0.5 -d 3 -p 2` + +outputs: +``` +2 0 0 inf +2 1 0.0983494 inf +2 1 0.104347 inf +2 2 0.138335 inf +``` + +**Example 2 with Z/3Z coefficients** + +rips_persistence ../../data/points/tore3D_1307.off -r 0.25 -m 0.5 -d 3 -p 3 + +outputs: +``` +3 0 0 inf +3 1 0.0983494 inf +3 1 0.104347 inf +3 2 0.138335 inf +``` + + + + +## `rips_distance_matrix_persistence` ## +Same as `rips_persistence` but taking an distance matrix as input. + +**Example** +`rips_distance_matrix_persistence data/distance_matrix/full_square_distance_matrix.csv -r 15 -d 3 -p 3 -m 0` + +outputs: +``` +The complex contains 46 simplices + and has dimension 3 +3 0 0 inf +3 0 0 8.94427 +3 0 0 7.28011 +3 0 0 6.08276 +3 0 0 5.83095 +3 0 0 5.38516 +3 0 0 5 +3 1 11 12.0416 +3 1 6.32456 6.7082 +``` diff --git a/src/Rips_complex/utilities/rips_distance_matrix_persistence.cpp b/src/Rips_complex/utilities/rips_distance_matrix_persistence.cpp new file mode 100644 index 00000000..d38808c7 --- /dev/null +++ b/src/Rips_complex/utilities/rips_distance_matrix_persistence.cpp @@ -0,0 +1,144 @@ +/* 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, Vincent Rouvreau + * + * Copyright (C) 2016 INRIA + * + * 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 . + */ + +#include +#include +#include +#include + +#include + +#include +#include +#include // infinity + +// Types definition +using Simplex_tree = Gudhi::Simplex_tree; +using Filtration_value = Simplex_tree::Filtration_value; +using Rips_complex = Gudhi::rips_complex::Rips_complex; +using Field_Zp = Gudhi::persistent_cohomology::Field_Zp; +using Persistent_cohomology = Gudhi::persistent_cohomology::Persistent_cohomology; +using Distance_matrix = std::vector>; + +void program_options(int argc, char * argv[] + , std::string & csv_matrix_file + , std::string & filediag + , Filtration_value & threshold + , int & dim_max + , int & p + , Filtration_value & min_persistence); + +int main(int argc, char * argv[]) { + std::string csv_matrix_file; + std::string filediag; + Filtration_value threshold; + int dim_max; + int p; + Filtration_value min_persistence; + + program_options(argc, argv, csv_matrix_file, filediag, threshold, dim_max, p, min_persistence); + + Distance_matrix distances = Gudhi::read_lower_triangular_matrix_from_csv_file(csv_matrix_file); + Rips_complex rips_complex_from_file(distances, threshold); + + // Construct the Rips complex in a Simplex Tree + Simplex_tree simplex_tree; + + rips_complex_from_file.create_complex(simplex_tree, dim_max); + std::cout << "The complex contains " << simplex_tree.num_simplices() << " simplices \n"; + std::cout << " and has dimension " << simplex_tree.dimension() << " \n"; + + // Sort the simplices in the order of the filtration + simplex_tree.initialize_filtration(); + + // Compute the persistence diagram of the complex + Persistent_cohomology pcoh(simplex_tree); + // initializes the coefficient field for homology + pcoh.init_coefficients(p); + + pcoh.compute_persistent_cohomology(min_persistence); + + // Output the diagram in filediag + if (filediag.empty()) { + pcoh.output_diagram(); + } else { + std::ofstream out(filediag); + pcoh.output_diagram(out); + out.close(); + } + return 0; +} + +void program_options(int argc, char * argv[] + , std::string & csv_matrix_file + , std::string & filediag + , Filtration_value & threshold + , int & dim_max + , int & p + , Filtration_value & min_persistence) { + namespace po = boost::program_options; + po::options_description hidden("Hidden options"); + hidden.add_options() + ("input-file", po::value(&csv_matrix_file), + "Name of file containing a distance matrix. Can be square or lower triangular matrix. Separator is ';'."); + + po::options_description visible("Allowed options", 100); + visible.add_options() + ("help,h", "produce help message") + ("output-file,o", po::value(&filediag)->default_value(std::string()), + "Name of file in which the persistence diagram is written. Default print in std::cout") + ("max-edge-length,r", + po::value(&threshold)->default_value(std::numeric_limits::infinity()), + "Maximal length of an edge for the Rips complex construction.") + ("cpx-dimension,d", po::value(&dim_max)->default_value(1), + "Maximal dimension of the Rips complex we want to compute.") + ("field-charac,p", po::value(&p)->default_value(11), + "Characteristic p of the coefficient field Z/pZ for computing homology.") + ("min-persistence,m", po::value(&min_persistence), + "Minimal lifetime of homology feature to be recorded. Default is 0. Enter a negative value to see zero length intervals"); + + po::positional_options_description pos; + pos.add("input-file", 1); + + po::options_description all; + all.add(visible).add(hidden); + + po::variables_map vm; + po::store(po::command_line_parser(argc, argv). + options(all).positional(pos).run(), vm); + po::notify(vm); + + if (vm.count("help") || !vm.count("input-file")) { + std::cout << std::endl; + std::cout << "Compute the persistent homology with coefficient field Z/pZ \n"; + std::cout << "of a Rips complex defined on a set of distance matrix.\n \n"; + std::cout << "The output diagram contains one bar per line, written with the convention: \n"; + std::cout << " p dim b d \n"; + std::cout << "where dim is the dimension of the homological feature,\n"; + std::cout << "b and d are respectively the birth and death of the feature and \n"; + std::cout << "p is the characteristic of the field Z/pZ used for homology coefficients." << std::endl << std::endl; + + std::cout << "Usage: " << argv[0] << " [options] input-file" << std::endl << std::endl; + std::cout << visible << std::endl; + std::abort(); + } +} diff --git a/src/Rips_complex/utilities/rips_persistence.cpp b/src/Rips_complex/utilities/rips_persistence.cpp new file mode 100644 index 00000000..d504798b --- /dev/null +++ b/src/Rips_complex/utilities/rips_persistence.cpp @@ -0,0 +1,147 @@ +/* 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 + * + * 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 . + */ + +#include +#include +#include +#include +#include + +#include + +#include +#include +#include // infinity + +// Types definition +using Simplex_tree = Gudhi::Simplex_tree; +using Filtration_value = Simplex_tree::Filtration_value; +using Rips_complex = Gudhi::rips_complex::Rips_complex; +using Field_Zp = Gudhi::persistent_cohomology::Field_Zp; +using Persistent_cohomology = Gudhi::persistent_cohomology::Persistent_cohomology; +using Point = std::vector; +using Points_off_reader = Gudhi::Points_off_reader; + +void program_options(int argc, char * argv[] + , std::string & off_file_points + , std::string & filediag + , Filtration_value & threshold + , int & dim_max + , int & p + , Filtration_value & min_persistence); + +int main(int argc, char * argv[]) { + std::string off_file_points; + std::string filediag; + Filtration_value threshold; + int dim_max; + int p; + Filtration_value min_persistence; + + program_options(argc, argv, off_file_points, filediag, threshold, dim_max, p, min_persistence); + + Points_off_reader off_reader(off_file_points); + Rips_complex rips_complex_from_file(off_reader.get_point_cloud(), threshold, Gudhi::Euclidean_distance()); + + // Construct the Rips complex in a Simplex Tree + Simplex_tree simplex_tree; + + rips_complex_from_file.create_complex(simplex_tree, dim_max); + std::cout << "The complex contains " << simplex_tree.num_simplices() << " simplices \n"; + std::cout << " and has dimension " << simplex_tree.dimension() << " \n"; + + // Sort the simplices in the order of the filtration + simplex_tree.initialize_filtration(); + + // Compute the persistence diagram of the complex + Persistent_cohomology pcoh(simplex_tree); + // initializes the coefficient field for homology + pcoh.init_coefficients(p); + + pcoh.compute_persistent_cohomology(min_persistence); + + // Output the diagram in filediag + if (filediag.empty()) { + pcoh.output_diagram(); + } else { + std::ofstream out(filediag); + pcoh.output_diagram(out); + out.close(); + } + + return 0; +} + +void program_options(int argc, char * argv[] + , std::string & off_file_points + , std::string & filediag + , Filtration_value & threshold + , int & dim_max + , int & p + , Filtration_value & min_persistence) { + namespace po = boost::program_options; + po::options_description hidden("Hidden options"); + hidden.add_options() + ("input-file", po::value(&off_file_points), + "Name of an OFF file containing a point set.\n"); + + po::options_description visible("Allowed options", 100); + visible.add_options() + ("help,h", "produce help message") + ("output-file,o", po::value(&filediag)->default_value(std::string()), + "Name of file in which the persistence diagram is written. Default print in std::cout") + ("max-edge-length,r", + po::value(&threshold)->default_value(std::numeric_limits::infinity()), + "Maximal length of an edge for the Rips complex construction.") + ("cpx-dimension,d", po::value(&dim_max)->default_value(1), + "Maximal dimension of the Rips complex we want to compute.") + ("field-charac,p", po::value(&p)->default_value(11), + "Characteristic p of the coefficient field Z/pZ for computing homology.") + ("min-persistence,m", po::value(&min_persistence), + "Minimal lifetime of homology feature to be recorded. Default is 0. Enter a negative value to see zero length intervals"); + + po::positional_options_description pos; + pos.add("input-file", 1); + + po::options_description all; + all.add(visible).add(hidden); + + po::variables_map vm; + po::store(po::command_line_parser(argc, argv). + options(all).positional(pos).run(), vm); + po::notify(vm); + + if (vm.count("help") || !vm.count("input-file")) { + std::cout << std::endl; + std::cout << "Compute the persistent homology with coefficient field Z/pZ \n"; + std::cout << "of a Rips complex defined on a set of input points.\n \n"; + std::cout << "The output diagram contains one bar per line, written with the convention: \n"; + std::cout << " p dim b d \n"; + std::cout << "where dim is the dimension of the homological feature,\n"; + std::cout << "b and d are respectively the birth and death of the feature and \n"; + std::cout << "p is the characteristic of the field Z/pZ used for homology coefficients." << std::endl << std::endl; + + std::cout << "Usage: " << argv[0] << " [options] input-file" << std::endl << std::endl; + std::cout << visible << std::endl; + std::abort(); + } +} diff --git a/src/common/doc/main_page.h b/src/common/doc/main_page.h index cee0c28b..466236ad 100644 --- a/src/common/doc/main_page.h +++ b/src/common/doc/main_page.h @@ -271,8 +271,8 @@ make doxygen * * The following examples/utilities 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 + * Alpha_complex/alpha_complex_3d_persistence.cpp * \li * Persistent_cohomology/exact_alpha_complex_3d_persistence.cpp * \li @@ -289,10 +289,10 @@ make doxygen * 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 + * Alpha_complex/alpha_complex_persistence.cpp + * \li + * Alpha_complex/periodic_alpha_complex_3d_persistence.cpp * \li * Persistent_cohomology/custom_persistence_sort.cpp * @@ -329,12 +329,12 @@ make doxygen * Alpha_complex/Alpha_complex_from_off.cpp * \li * Alpha_complex/Alpha_complex_from_points.cpp + * \li + * Alpha_complex/alpha_complex_persistence.cpp + * \li + * Alpha_complex/periodic_alpha_complex_3d_persistence.cpp * \li * Bottleneck_distance/alpha_rips_persistence_bottleneck_distance.cpp.cpp - * \li - * Persistent_cohomology/alpha_complex_persistence.cpp - * \li - * Persistent_cohomology/periodic_alpha_complex_3d_persistence.cpp * \li * Persistent_cohomology/custom_persistence_sort.cpp * \li @@ -364,26 +364,24 @@ make doxygen * Alpha_complex/Alpha_complex_from_off.cpp * \li * Alpha_complex/Alpha_complex_from_points.cpp + * \li + * Alpha_complex/alpha_complex_3d_persistence.cpp + * \li + * Alpha_complex/alpha_complex_persistence.cpp + * \li + * Alpha_complex/periodic_alpha_complex_3d_persistence.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/example_alpha_shapes_3_simplex_tree_from_off_file.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 @@ -392,26 +390,24 @@ make doxygen * Persistent_cohomology/persistence_from_simple_simplex_tree.cpp * \li * Persistent_cohomology/plain_homology.cpp - * \li - * Persistent_cohomology/rips_distance_matrix_persistence.cpp * \li * Persistent_cohomology/rips_multifield_persistence.cpp - * \li - * Persistent_cohomology/rips_persistence.cpp * \li * Persistent_cohomology/rips_persistence_step_by_step.cpp * \li * Persistent_cohomology/exact_alpha_complex_3d_persistence.cpp * \li * Persistent_cohomology/weighted_alpha_complex_3d_persistence.cpp - * \li - * Persistent_cohomology/periodic_alpha_complex_3d_persistence.cpp * \li * Persistent_cohomology/custom_persistence_sort.cpp * \li * Rips_complex/example_one_skeleton_rips_from_points.cpp * \li * Rips_complex/example_rips_complex_from_off_file.cpp + * \li + * Rips_complex/rips_distance_matrix_persistence.cpp + * \li + * Rips_complex/rips_persistence.cpp * * \section Contributions Bug reports and contributions * Please help us improving the quality of the GUDHI library. You may report bugs or suggestions to: @@ -436,6 +432,9 @@ make doxygen /*! @file Examples * @example Alpha_complex/Alpha_complex_from_off.cpp * @example Alpha_complex/Alpha_complex_from_points.cpp + * @example Alpha_complex/alpha_complex_3d_persistence.cpp + * @example Alpha_complex/alpha_complex_persistence.cpp + * @example Alpha_complex/periodic_alpha_complex_3d_persistence.cpp * @example Bottleneck_distance/alpha_rips_persistence_bottleneck_distance.cpp * @example Bottleneck_distance/bottleneck_basic_example.cpp * @example Bottleneck_distance/bottleneck_read_file_example.cpp @@ -446,22 +445,19 @@ make doxygen * @example common/example_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/exact_alpha_complex_3d_persistence.cpp * @example Persistent_cohomology/weighted_alpha_complex_3d_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_distance_matrix_persistence.cpp - * @example Persistent_cohomology/rips_persistence.cpp * @example Persistent_cohomology/custom_persistence_sort.cpp * @example Persistent_cohomology/rips_persistence_step_by_step.cpp * @example Rips_complex/example_one_skeleton_rips_from_points.cpp * @example Rips_complex/example_rips_complex_from_off_file.cpp + * @example Rips_complex/rips_persistence.cpp + * @example Rips_complex/rips_distance_matrix_persistence.cpp * @example Simplex_tree/mini_simplex_tree.cpp * @example Simplex_tree/simple_simplex_tree.cpp * @example Simplex_tree/example_alpha_shapes_3_simplex_tree_from_off_file.cpp -- cgit v1.2.3 From 629542264458d2174ece2c18a490f63d1a231802 Mon Sep 17 00:00:00 2001 From: cjamin Date: Thu, 26 Oct 2017 15:08:50 +0000 Subject: Fix sentence git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/add_utils_in_gudhi_v2@2807 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 8d914e747993fc8c1883ee6c0807c3335c816a3e --- src/common/doc/main_page.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/common/doc') diff --git a/src/common/doc/main_page.h b/src/common/doc/main_page.h index 466236ad..9071b566 100644 --- a/src/common/doc/main_page.h +++ b/src/common/doc/main_page.h @@ -323,7 +323,7 @@ make doxygen * 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 + * The following examples/utilities require the Eigen3 and will not be * built if Eigen3 is not installed: * \li * Alpha_complex/Alpha_complex_from_off.cpp -- cgit v1.2.3 From 3d4c842d34f4d6c52ba6c39836f57d702d6a6ff3 Mon Sep 17 00:00:00 2001 From: mcarrier Date: Tue, 7 Nov 2017 10:30:08 +0000 Subject: git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/Nerve_GIC@2840 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 9037e52ab98b2b9c699c104aa4da45bf6d74cfc7 --- CMakeLists.txt | 3 +-- src/CMakeLists.txt | 1 + src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 4 ++-- src/Nerve_GIC/include/gudhi/GIC.h | 2 +- src/common/doc/main_page.h | 10 +++++----- 5 files changed, 10 insertions(+), 10 deletions(-) (limited to 'src/common/doc') diff --git a/CMakeLists.txt b/CMakeLists.txt index da6f5709..ef129cd1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,7 +33,6 @@ endif() # Add your new module in the list, order is not important include(GUDHI_modules) -include_directories(src/Nerve_GIC/include/) add_gudhi_module(common) add_gudhi_module(Alpha_complex) @@ -49,8 +48,8 @@ add_gudhi_module(Spatial_searching) add_gudhi_module(Subsampling) add_gudhi_module(Tangential_complex) add_gudhi_module(Witness_complex) +add_gudhi_module(Nerve_GIC) add_subdirectory(src/Nerve_GIC/example) -add_subdirectory(src/Nerve_GIC/test) message("++ GUDHI_MODULES list is:\"${GUDHI_MODULES}\"") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9961fcf9..a2617020 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -24,6 +24,7 @@ add_gudhi_module(Spatial_searching) add_gudhi_module(Subsampling) add_gudhi_module(Tangential_complex) add_gudhi_module(Witness_complex) +add_gudhi_module(Nerve_GIC) message("++ GUDHI_MODULES list is:\"${GUDHI_MODULES}\"") diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index 2a869009..cb9ba554 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -2,9 +2,9 @@ * (Geometric Understanding in Higher Dimensions) is a generic C++ * library for computational topology. * - * Author(s): Clément Maria, Pawel Dlotko, Vincent Rouvreau + * Author(s): Mathieu Carriere * - * Copyright (C) 2016 INRIA + * Copyright (C) 2017 INRIA * * 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 diff --git a/src/Nerve_GIC/include/gudhi/GIC.h b/src/Nerve_GIC/include/gudhi/GIC.h index fc615828..2520042d 100644 --- a/src/Nerve_GIC/include/gudhi/GIC.h +++ b/src/Nerve_GIC/include/gudhi/GIC.h @@ -700,7 +700,7 @@ class Cover_complex { * @result cover_back(c) vector of IDs of data points. * */ - std::vector subpopulation(Cover_t c){ + const std::vector & subpopulation(Cover_t c){ return cover_back[c]; } diff --git a/src/common/doc/main_page.h b/src/common/doc/main_page.h index d48294a5..34bf6c22 100644 --- a/src/common/doc/main_page.h +++ b/src/common/doc/main_page.h @@ -93,8 +93,8 @@ - \subsection GICDataStructure Nerves and Graph Induced Complexes - \image html "gic_complex.png" "Graph Induced Complex of a point cloud." + \subsection CoverComplexDataStructure Cover Complexes: Nerves and Graph Induced Complexes + \image html "gicvisu.jpg" "Graph Induced Complex of a point cloud."
@@ -103,11 +103,11 @@ Copyright: GPL v3
- Nerves and Graph Induced Complexes are simplicial complexes that provably contain + Nerves and Graph Induced Complexes are cover complexes, i.e. simplicial complexes that provably contain topological information about the input data. They can be computed with a cover of the - data, that often comes from the preimage of a family of intervals covering the image + data, that comes i.e. from the preimage of a family of intervals covering the image of a scalar-valued function defined on the data.
- User manual: \ref graph_induced_complex - Reference manual: Gudhi::graph_induced_complex::Graph_induced_complex + User manual: \ref cover_complex - Reference manual: Gudhi::cover_complex::Cover_complex
-- cgit v1.2.3 From ae41883215cd89e2ca71fd7e2a46b66d5075dc2d Mon Sep 17 00:00:00 2001 From: cjamin Date: Wed, 15 Nov 2017 14:39:41 +0000 Subject: Add iso-cuboid file format git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/add_utils_in_gudhi_v2@2882 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: ad82867ef7523c4a03fdb89054e5bd7b8d40f7da --- src/Alpha_complex/utilities/README | 3 ++- src/Bottleneck_distance/utilities/README | 6 +++--- src/common/doc/file_formats.h | 15 +++++++++++++++ 3 files changed, 20 insertions(+), 4 deletions(-) (limited to 'src/common/doc') diff --git a/src/Alpha_complex/utilities/README b/src/Alpha_complex/utilities/README index abb17bf7..67ea1875 100644 --- a/src/Alpha_complex/utilities/README +++ b/src/Alpha_complex/utilities/README @@ -48,9 +48,10 @@ This program computes the persistent homology with coefficient field Z/pZ of the where `dim` is the dimension of the homological feature, `b` and `d` are respectively the birth and death of the feature, and `p` is the characteristic of the field *Z/pZ* used for homology coefficients (`p` must be a prime number). **Usage** -`periodic_alpha_complex_3d_persistence

` +`periodic_alpha_complex_3d_persistence

` where `` is the path to the input point cloud in OFF format. +`` is the path to the file describing the periodic domain. It must be in the format described [here](http://gudhi.gforge.inria.fr/doc/latest/fileformats.html#FileFormatsIsoCuboid). `

` is the characteristic p of the coefficient field *Z/pZ* for computing homology. It must be a stricly positive integer. `` is the minimal lifetime of homology feature to be recorded. Enter a negative value to see zero length intervals. diff --git a/src/Bottleneck_distance/utilities/README b/src/Bottleneck_distance/utilities/README index cfdccf0b..d9fdd252 100644 --- a/src/Bottleneck_distance/utilities/README +++ b/src/Bottleneck_distance/utilities/README @@ -5,6 +5,6 @@ This program computes the Bottleneck distance between two persistence diagram fi Usage: `bottleneck_read_file_example []` - - and must be in the format described [here](http://gudhi.gforge.inria.fr/doc/latest/fileformats.html#FileFormatsPers). - is an error bound on the bottleneck distance (set by default to the smallest positive double value). +where +`` and `` must be in the format described [here](http://gudhi.gforge.inria.fr/doc/latest/fileformats.html#FileFormatsPers). +`` is an error bound on the bottleneck distance (set by default to the smallest positive double value). diff --git a/src/common/doc/file_formats.h b/src/common/doc/file_formats.h index d715aa4d..3b3d9248 100644 --- a/src/common/doc/file_formats.h +++ b/src/common/doc/file_formats.h @@ -53,6 +53,21 @@ namespace Gudhi { Such files can be generated with `Gudhi::persistent_cohomology::Persistent_cohomology::output_diagram()` and read with `Gudhi::read_persistence_intervals_and_dimension()`, `Gudhi::read_persistence_intervals_grouped_by_dimension()` or `Gudhi::read_persistence_intervals_in_dimension()`. + + + \section FileFormatsIsoCuboid Iso-cuboid + + Such a file describes an iso-oriented cuboid with diagonal opposite vertices (min_hx, min_hy, min_hz,...) and (max_hx, max_hy, max_hz, ...). The format is:
+ \verbatim + min_hx min_hy [min_hz ...] + max_hx max_hy [max_hz ...] + \endverbatim + + Here is a simple sample file in the 3D case: + \verbatim + -1. -1. -1. + 1. 1. 1. + \endverbatim */ } // namespace Gudhi -- cgit v1.2.3 From def50bba711e9c2a3be86b4944845b0009fe29a2 Mon Sep 17 00:00:00 2001 From: cjamin Date: Wed, 22 Nov 2017 15:48:17 +0000 Subject: Fix typo git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/add_utils_in_gudhi_v2@2940 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: b888519a9985ae84fcf5788eab66fc5b574936f8 --- src/common/doc/file_formats.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/common/doc') diff --git a/src/common/doc/file_formats.h b/src/common/doc/file_formats.h index 3b3d9248..069b19d1 100644 --- a/src/common/doc/file_formats.h +++ b/src/common/doc/file_formats.h @@ -57,10 +57,10 @@ namespace Gudhi { \section FileFormatsIsoCuboid Iso-cuboid - Such a file describes an iso-oriented cuboid with diagonal opposite vertices (min_hx, min_hy, min_hz,...) and (max_hx, max_hy, max_hz, ...). The format is:
+ Such a file describes an iso-oriented cuboid with diagonal opposite vertices (min_x, min_y, min_z,...) and (max_x, max_y, max_z, ...). The format is:
\verbatim - min_hx min_hy [min_hz ...] - max_hx max_hy [max_hz ...] + min_x min_y [min_z ...] + max_x max_y [max_z ...] \endverbatim Here is a simple sample file in the 3D case: -- cgit v1.2.3 From 05224407e92eaf623a980adf5f578b72c64647cb Mon Sep 17 00:00:00 2001 From: cjamin Date: Wed, 22 Nov 2017 16:31:18 +0000 Subject: Rename some utilities + some fix in the doc git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/add_utils_in_gudhi_v2@2942 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: e7fe4af0f7d54ed580e557fe7ff9bc57ced2baa9 --- .../utilities/Bitmap_cubical_complex.cpp | 80 --------------------- ...ubical_complex_periodic_boundary_conditions.cpp | 82 ---------------------- .../utilities/CMakeLists.txt | 20 +++--- src/Bitmap_cubical_complex/utilities/README | 22 +++--- .../utilities/cubical_complex_persistence.cpp | 80 +++++++++++++++++++++ .../periodic_cubical_complex_persistence.cpp | 82 ++++++++++++++++++++++ src/Bottleneck_distance/utilities/CMakeLists.txt | 8 +-- .../utilities/bottleneck_distance.cpp | 50 +++++++++++++ .../utilities/bottleneck_read_file.cpp | 50 ------------- src/common/doc/main_page.h | 12 ++-- 10 files changed, 240 insertions(+), 246 deletions(-) delete mode 100644 src/Bitmap_cubical_complex/utilities/Bitmap_cubical_complex.cpp delete mode 100644 src/Bitmap_cubical_complex/utilities/Bitmap_cubical_complex_periodic_boundary_conditions.cpp create mode 100644 src/Bitmap_cubical_complex/utilities/cubical_complex_persistence.cpp create mode 100644 src/Bitmap_cubical_complex/utilities/periodic_cubical_complex_persistence.cpp create mode 100644 src/Bottleneck_distance/utilities/bottleneck_distance.cpp delete mode 100644 src/Bottleneck_distance/utilities/bottleneck_read_file.cpp (limited to 'src/common/doc') diff --git a/src/Bitmap_cubical_complex/utilities/Bitmap_cubical_complex.cpp b/src/Bitmap_cubical_complex/utilities/Bitmap_cubical_complex.cpp deleted file mode 100644 index 9d1bc08c..00000000 --- a/src/Bitmap_cubical_complex/utilities/Bitmap_cubical_complex.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/* 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 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 . - */ - -#include -#include -#include - -// standard stuff -#include -#include -#include -#include - -int main(int argc, char** argv) { - std::cout - << "This program computes persistent homology, by using bitmap_cubical_complex class, of cubical " - << "complexes provided in text files in Perseus style (the only numbered in the first line is a dimension D of a" - << "bitmap. In the lines I between 2 and D+1 there are numbers of top dimensional cells in the direction I. Let " - << "N denote product of the numbers in the lines between 2 and D. In the lines D+2 to D+2+N there are " - << "filtrations of top dimensional cells. We assume that the cells are in the lexicographical order. See " - << "CubicalOneSphere.txt or CubicalTwoSphere.txt for example.\n" - << std::endl; - - if (argc != 2) { - std::cerr << "Wrong number of parameters. Please provide the name of a file with a Perseus style bitmap at " - << "the input. The program will now terminate.\n"; - return 1; - } - - typedef Gudhi::cubical_complex::Bitmap_cubical_complex_base Bitmap_cubical_complex_base; - typedef Gudhi::cubical_complex::Bitmap_cubical_complex Bitmap_cubical_complex; - typedef Gudhi::persistent_cohomology::Field_Zp Field_Zp; - typedef Gudhi::persistent_cohomology::Persistent_cohomology Persistent_cohomology; - - Bitmap_cubical_complex b(argv[1]); - - // Compute the persistence diagram of the complex - Persistent_cohomology pcoh(b); - int p = 11; - double min_persistence = 0; - - pcoh.init_coefficients(p); // initializes the coefficient field for homology - pcoh.compute_persistent_cohomology(min_persistence); - - std::string output_file_name(argv[1]); - output_file_name += "_persistence"; - - std::size_t last_in_path = output_file_name.find_last_of("/\\"); - - if (last_in_path != std::string::npos) { - output_file_name = output_file_name.substr(last_in_path + 1); - } - - std::ofstream out(output_file_name.c_str()); - pcoh.output_diagram(out); - out.close(); - - std::cout << "Result in file: " << output_file_name << "\n"; - - return 0; -} diff --git a/src/Bitmap_cubical_complex/utilities/Bitmap_cubical_complex_periodic_boundary_conditions.cpp b/src/Bitmap_cubical_complex/utilities/Bitmap_cubical_complex_periodic_boundary_conditions.cpp deleted file mode 100644 index c812cb3a..00000000 --- a/src/Bitmap_cubical_complex/utilities/Bitmap_cubical_complex_periodic_boundary_conditions.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/* 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 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 . - */ - -#include -#include -#include -#include - -// standard stuff -#include -#include -#include -#include - -int main(int argc, char** argv) { - std::cout - << "This program computes persistent homology, by using " - << "Bitmap_cubical_complex_periodic_boundary_conditions class, of cubical complexes provided in text files in " - << "Perseus style (the only numbered in the first line is a dimension D of a bitmap. In the lines I between 2 " - << "and D+1 there are numbers of top dimensional cells in the direction I. Let N denote product of the numbers " - << "in the lines between 2 and D. In the lines D+2 to D+2+N there are filtrations of top dimensional cells. We " - << "assume that the cells are in the lexicographical order. See CubicalOneSphere.txt or CubicalTwoSphere.txt for" - << " example.\n" - << std::endl; - - if (argc != 2) { - std::cerr << "Wrong number of parameters. Please provide the name of a file with a Perseus style bitmap at " - << "the input. The program will now terminate.\n"; - return 1; - } - - typedef Gudhi::cubical_complex::Bitmap_cubical_complex_periodic_boundary_conditions_base Bitmap_base; - typedef Gudhi::cubical_complex::Bitmap_cubical_complex Bitmap_cubical_complex; - - Bitmap_cubical_complex b(argv[1]); - - typedef Gudhi::persistent_cohomology::Field_Zp Field_Zp; - typedef Gudhi::persistent_cohomology::Persistent_cohomology Persistent_cohomology; - // Compute the persistence diagram of the complex - Persistent_cohomology pcoh(b, true); - - int p = 11; - double min_persistence = 0; - pcoh.init_coefficients(p); // initializes the coefficient field for homology - pcoh.compute_persistent_cohomology(min_persistence); - - std::string output_file_name(argv[1]); - output_file_name += "_persistence"; - - std::size_t last_in_path = output_file_name.find_last_of("/\\"); - - if (last_in_path != std::string::npos) { - output_file_name = output_file_name.substr(last_in_path + 1); - } - - std::ofstream out(output_file_name.c_str()); - pcoh.output_diagram(out); - out.close(); - - std::cout << "Result in file: " << output_file_name << "\n"; - - return 0; -} diff --git a/src/Bitmap_cubical_complex/utilities/CMakeLists.txt b/src/Bitmap_cubical_complex/utilities/CMakeLists.txt index f0f80059..676a730a 100644 --- a/src/Bitmap_cubical_complex/utilities/CMakeLists.txt +++ b/src/Bitmap_cubical_complex/utilities/CMakeLists.txt @@ -1,29 +1,29 @@ cmake_minimum_required(VERSION 2.6) project(Bitmap_cubical_complex_utilities) -add_executable ( Bitmap_cubical_complex Bitmap_cubical_complex.cpp ) +add_executable ( cubical_complex_persistence cubical_complex_persistence.cpp ) if (TBB_FOUND) - target_link_libraries(Bitmap_cubical_complex ${TBB_LIBRARIES}) + target_link_libraries(cubical_complex_persistence ${TBB_LIBRARIES}) endif() -add_test(NAME Bitmap_cubical_complex_utility_persistence_one_sphere COMMAND $ +add_test(NAME Bitmap_cubical_complex_utility_persistence_one_sphere COMMAND $ "${CMAKE_SOURCE_DIR}/data/bitmap/CubicalOneSphere.txt") -add_test(NAME Bitmap_cubical_complex_utility_persistence_two_sphere COMMAND $ +add_test(NAME Bitmap_cubical_complex_utility_persistence_two_sphere COMMAND $ "${CMAKE_SOURCE_DIR}/data/bitmap/CubicalTwoSphere.txt") -add_executable ( Bitmap_cubical_complex_periodic_boundary_conditions Bitmap_cubical_complex_periodic_boundary_conditions.cpp ) +add_executable ( periodic_cubical_complex_persistence periodic_cubical_complex_persistence.cpp ) if (TBB_FOUND) - target_link_libraries(Bitmap_cubical_complex_periodic_boundary_conditions ${TBB_LIBRARIES}) + target_link_libraries(periodic_cubical_complex_persistence ${TBB_LIBRARIES}) endif() add_test(NAME Bitmap_cubical_complex_utility_periodic_boundary_conditions_2d_torus - COMMAND $ + COMMAND $ "${CMAKE_SOURCE_DIR}/data/bitmap/2d_torus.txt") add_test(NAME Bitmap_cubical_complex_utility_periodic_boundary_conditions_3d_torus - COMMAND $ + COMMAND $ "${CMAKE_SOURCE_DIR}/data/bitmap/3d_torus.txt") -install(TARGETS Bitmap_cubical_complex DESTINATION bin) -install(TARGETS Bitmap_cubical_complex_periodic_boundary_conditions DESTINATION bin) +install(TARGETS cubical_complex_persistence DESTINATION bin) +install(TARGETS periodic_cubical_complex_persistence DESTINATION bin) diff --git a/src/Bitmap_cubical_complex/utilities/README b/src/Bitmap_cubical_complex/utilities/README index d9085635..e7c10083 100644 --- a/src/Bitmap_cubical_complex/utilities/README +++ b/src/Bitmap_cubical_complex/utilities/README @@ -1,24 +1,18 @@ # Bitmap_cubical_complex # -## `Bitmap_cubical_complex` ## +## `cubical_complex_persistence` ## This program computes persistent homology, by using the Bitmap_cubical_complex class, of cubical complexes provided in text files in Perseus style. The only number in the first line is a dimension D of a bitmap. In the lines I between 2 and D+1 there are numbers of top dimensional cells in the direction I. Let N denote product of the numbers in the lines between 2 and D. In the lines D+2 to D+2+N there are filtrations of top dimensional cells. We assume that the cells are in the lexicographical order. -Examples: +Example: -* Create a Cubical Complex from the Perseus style file CubicalOneSphere.txt, computes Persistence cohomology from it and writes the results in a persistence file: -`Bitmap_cubical_complex data/bitmap/CubicalOneSphere.txt` +* Create a Cubical Complex from the Perseus style file `CubicalTwoSphere.txt`, computes Persistence cohomology from it and writes the results in a persistence file `CubicalTwoSphere.txt_persistence`: +`cubical_complex_persistence data/bitmap/CubicalTwoSphere.txt` -* Create a Cubical Complex from the Perseus style file CubicalTwoSphere.txt, computes Persistence cohomology from it and writes the results in a persistence file: -`Bitmap_cubical_complex data/bitmap/CubicalTwoSphere.txt` - -## `Bitmap_cubical_complex_periodic_boundary_conditions` ## +## `periodic_cubical_complex_persistence` ## Same as above, but with periodic boundary conditions. -Examples: - -* Create a Periodical Cubical Complex from the Perseus style file 2d_torus.txt, computes Persistence cohomology from it and writes the results in a persistence file: -`Bitmap_cubical_complex_periodic_boundary_conditions.exe data/bitmap/2d_torus.txt` +Example: -* Create a Periodical Cubical Complex from the Perseus style file 3d_torus.txt, computes Persistence cohomology from it and writes the results in a persistence file: -`Bitmap_cubical_complex_periodic_boundary_conditions.exe data/bitmap/3d_torus.txt` +* Create a Periodical Cubical Complex from the Perseus style file `3d_torus.txt`, computes Persistence cohomology from it and writes the results in a persistence file `3d_torus.txt_persistence`: +`periodic_cubical_complex_persistence data/bitmap/3d_torus.txt` diff --git a/src/Bitmap_cubical_complex/utilities/cubical_complex_persistence.cpp b/src/Bitmap_cubical_complex/utilities/cubical_complex_persistence.cpp new file mode 100644 index 00000000..9d1bc08c --- /dev/null +++ b/src/Bitmap_cubical_complex/utilities/cubical_complex_persistence.cpp @@ -0,0 +1,80 @@ +/* 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 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 . + */ + +#include +#include +#include + +// standard stuff +#include +#include +#include +#include + +int main(int argc, char** argv) { + std::cout + << "This program computes persistent homology, by using bitmap_cubical_complex class, of cubical " + << "complexes provided in text files in Perseus style (the only numbered in the first line is a dimension D of a" + << "bitmap. In the lines I between 2 and D+1 there are numbers of top dimensional cells in the direction I. Let " + << "N denote product of the numbers in the lines between 2 and D. In the lines D+2 to D+2+N there are " + << "filtrations of top dimensional cells. We assume that the cells are in the lexicographical order. See " + << "CubicalOneSphere.txt or CubicalTwoSphere.txt for example.\n" + << std::endl; + + if (argc != 2) { + std::cerr << "Wrong number of parameters. Please provide the name of a file with a Perseus style bitmap at " + << "the input. The program will now terminate.\n"; + return 1; + } + + typedef Gudhi::cubical_complex::Bitmap_cubical_complex_base Bitmap_cubical_complex_base; + typedef Gudhi::cubical_complex::Bitmap_cubical_complex Bitmap_cubical_complex; + typedef Gudhi::persistent_cohomology::Field_Zp Field_Zp; + typedef Gudhi::persistent_cohomology::Persistent_cohomology Persistent_cohomology; + + Bitmap_cubical_complex b(argv[1]); + + // Compute the persistence diagram of the complex + Persistent_cohomology pcoh(b); + int p = 11; + double min_persistence = 0; + + pcoh.init_coefficients(p); // initializes the coefficient field for homology + pcoh.compute_persistent_cohomology(min_persistence); + + std::string output_file_name(argv[1]); + output_file_name += "_persistence"; + + std::size_t last_in_path = output_file_name.find_last_of("/\\"); + + if (last_in_path != std::string::npos) { + output_file_name = output_file_name.substr(last_in_path + 1); + } + + std::ofstream out(output_file_name.c_str()); + pcoh.output_diagram(out); + out.close(); + + std::cout << "Result in file: " << output_file_name << "\n"; + + return 0; +} diff --git a/src/Bitmap_cubical_complex/utilities/periodic_cubical_complex_persistence.cpp b/src/Bitmap_cubical_complex/utilities/periodic_cubical_complex_persistence.cpp new file mode 100644 index 00000000..c812cb3a --- /dev/null +++ b/src/Bitmap_cubical_complex/utilities/periodic_cubical_complex_persistence.cpp @@ -0,0 +1,82 @@ +/* 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 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 . + */ + +#include +#include +#include +#include + +// standard stuff +#include +#include +#include +#include + +int main(int argc, char** argv) { + std::cout + << "This program computes persistent homology, by using " + << "Bitmap_cubical_complex_periodic_boundary_conditions class, of cubical complexes provided in text files in " + << "Perseus style (the only numbered in the first line is a dimension D of a bitmap. In the lines I between 2 " + << "and D+1 there are numbers of top dimensional cells in the direction I. Let N denote product of the numbers " + << "in the lines between 2 and D. In the lines D+2 to D+2+N there are filtrations of top dimensional cells. We " + << "assume that the cells are in the lexicographical order. See CubicalOneSphere.txt or CubicalTwoSphere.txt for" + << " example.\n" + << std::endl; + + if (argc != 2) { + std::cerr << "Wrong number of parameters. Please provide the name of a file with a Perseus style bitmap at " + << "the input. The program will now terminate.\n"; + return 1; + } + + typedef Gudhi::cubical_complex::Bitmap_cubical_complex_periodic_boundary_conditions_base Bitmap_base; + typedef Gudhi::cubical_complex::Bitmap_cubical_complex Bitmap_cubical_complex; + + Bitmap_cubical_complex b(argv[1]); + + typedef Gudhi::persistent_cohomology::Field_Zp Field_Zp; + typedef Gudhi::persistent_cohomology::Persistent_cohomology Persistent_cohomology; + // Compute the persistence diagram of the complex + Persistent_cohomology pcoh(b, true); + + int p = 11; + double min_persistence = 0; + pcoh.init_coefficients(p); // initializes the coefficient field for homology + pcoh.compute_persistent_cohomology(min_persistence); + + std::string output_file_name(argv[1]); + output_file_name += "_persistence"; + + std::size_t last_in_path = output_file_name.find_last_of("/\\"); + + if (last_in_path != std::string::npos) { + output_file_name = output_file_name.substr(last_in_path + 1); + } + + std::ofstream out(output_file_name.c_str()); + pcoh.output_diagram(out); + out.close(); + + std::cout << "Result in file: " << output_file_name << "\n"; + + return 0; +} diff --git a/src/Bottleneck_distance/utilities/CMakeLists.txt b/src/Bottleneck_distance/utilities/CMakeLists.txt index 063b6ae3..d19e3b1c 100644 --- a/src/Bottleneck_distance/utilities/CMakeLists.txt +++ b/src/Bottleneck_distance/utilities/CMakeLists.txt @@ -2,15 +2,15 @@ cmake_minimum_required(VERSION 2.6) project(Bottleneck_distance_utilities) if (NOT CGAL_WITH_EIGEN3_VERSION VERSION_LESS 4.8.1) - add_executable (bottleneck_read_file bottleneck_read_file.cpp) + add_executable (bottleneck_distance bottleneck_distance.cpp) if (TBB_FOUND) - target_link_libraries(bottleneck_read_file ${TBB_LIBRARIES}) + target_link_libraries(bottleneck_distance ${TBB_LIBRARIES}) endif(TBB_FOUND) add_test(NAME Bottleneck_distance_utilities_Bottleneck_read_file - COMMAND $ + COMMAND $ "${CMAKE_SOURCE_DIR}/data/persistence_diagram/first.pers" "${CMAKE_SOURCE_DIR}/data/persistence_diagram/second.pers") - install(TARGETS bottleneck_read_file DESTINATION bin) + install(TARGETS bottleneck_distance DESTINATION bin) endif (NOT CGAL_WITH_EIGEN3_VERSION VERSION_LESS 4.8.1) diff --git a/src/Bottleneck_distance/utilities/bottleneck_distance.cpp b/src/Bottleneck_distance/utilities/bottleneck_distance.cpp new file mode 100644 index 00000000..9dd52b31 --- /dev/null +++ b/src/Bottleneck_distance/utilities/bottleneck_distance.cpp @@ -0,0 +1,50 @@ +/* This file is part of the Gudhi Library. The Gudhi library + * (Geometric Understanding in Higher Dimensions) is a generic C++ + * library for computational topology. + * + * Authors: Francois Godi, small modifications by Pawel Dlotko + * + * Copyright (C) 2015 INRIA + * + * 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 . + */ + +#include +#include +#include +#include +#include // for pair +#include +#include // for numeric_limits + +int main(int argc, char** argv) { + if (argc < 3) { + std::cout << "To run this program please provide as an input two files with persistence diagrams. Each file" << + " should contain a birth-death pair per line. Third, optional parameter is an error bound on the bottleneck" << + " distance (set by default to the smallest positive double value). If you set the error bound to 0, be" << + " aware this version is exact but expensive. The program will now terminate \n"; + return -1; + } + std::vector> diag1 = Gudhi::read_persistence_intervals_in_dimension(argv[1]); + std::vector> diag2 = Gudhi::read_persistence_intervals_in_dimension(argv[2]); + + double tolerance = std::numeric_limits::min(); + if (argc == 4) { + tolerance = atof(argv[3]); + } + double b = Gudhi::persistence_diagram::bottleneck_distance(diag1, diag2, tolerance); + std::cout << "The distance between the diagrams is : " << b << ". The tolerance is : " << tolerance << std::endl; + + return 0; +} diff --git a/src/Bottleneck_distance/utilities/bottleneck_read_file.cpp b/src/Bottleneck_distance/utilities/bottleneck_read_file.cpp deleted file mode 100644 index 9dd52b31..00000000 --- a/src/Bottleneck_distance/utilities/bottleneck_read_file.cpp +++ /dev/null @@ -1,50 +0,0 @@ -/* This file is part of the Gudhi Library. The Gudhi library - * (Geometric Understanding in Higher Dimensions) is a generic C++ - * library for computational topology. - * - * Authors: Francois Godi, small modifications by Pawel Dlotko - * - * Copyright (C) 2015 INRIA - * - * 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 . - */ - -#include -#include -#include -#include -#include // for pair -#include -#include // for numeric_limits - -int main(int argc, char** argv) { - if (argc < 3) { - std::cout << "To run this program please provide as an input two files with persistence diagrams. Each file" << - " should contain a birth-death pair per line. Third, optional parameter is an error bound on the bottleneck" << - " distance (set by default to the smallest positive double value). If you set the error bound to 0, be" << - " aware this version is exact but expensive. The program will now terminate \n"; - return -1; - } - std::vector> diag1 = Gudhi::read_persistence_intervals_in_dimension(argv[1]); - std::vector> diag2 = Gudhi::read_persistence_intervals_in_dimension(argv[2]); - - double tolerance = std::numeric_limits::min(); - if (argc == 4) { - tolerance = atof(argv[3]); - } - double b = Gudhi::persistence_diagram::bottleneck_distance(diag1, diag2, tolerance); - std::cout << "The distance between the diagrams is : " << b << ". The tolerance is : " << tolerance << std::endl; - - return 0; -} diff --git a/src/common/doc/main_page.h b/src/common/doc/main_page.h index 34d3893d..72ef191d 100644 --- a/src/common/doc/main_page.h +++ b/src/common/doc/main_page.h @@ -328,7 +328,7 @@ make doxygen * \li * Bottleneck_distance/bottleneck_basic_example.cpp * \li - * Bottleneck_distance/bottleneck_read_file.cpp + * Bottleneck_distance/bottleneck_distance.cpp * \li * Spatial_searching/example_spatial_searching.cpp * \li @@ -411,9 +411,9 @@ make doxygen * \li * Alpha_complex/weighted_alpha_complex_3d_persistence.cpp * \li - * Bitmap_cubical_complex/Bitmap_cubical_complex.cpp + * Bitmap_cubical_complex/cubical_complex_persistence.cpp * \li - * Bitmap_cubical_complex/Bitmap_cubical_complex_periodic_boundary_conditions.cpp + * Bitmap_cubical_complex/periodic_cubical_complex_persistence.cpp * \li * Bitmap_cubical_complex/Random_bitmap_cubical_complex.cpp * \li @@ -491,9 +491,9 @@ make doxygen * @example Alpha_complex/weighted_alpha_complex_3d_persistence.cpp * @example Bottleneck_distance/alpha_rips_persistence_bottleneck_distance.cpp * @example Bottleneck_distance/bottleneck_basic_example.cpp - * @example Bottleneck_distance/bottleneck_read_file.cpp - * @example Bitmap_cubical_complex/Bitmap_cubical_complex.cpp - * @example Bitmap_cubical_complex/Bitmap_cubical_complex_periodic_boundary_conditions.cpp + * @example Bottleneck_distance/bottleneck_distance.cpp + * @example Bitmap_cubical_complex/cubical_complex_persistence.cpp + * @example Bitmap_cubical_complex/periodic_cubical_complex_persistence.cpp * @example Bitmap_cubical_complex/Random_bitmap_cubical_complex.cpp * @example common/example_CGAL_3D_points_off_reader.cpp * @example common/example_CGAL_points_off_reader.cpp -- cgit v1.2.3 From f1691997a3f6eceab45256ce4a94a9aa64d92471 Mon Sep 17 00:00:00 2001 From: cjamin Date: Fri, 24 Nov 2017 08:10:28 +0000 Subject: Move Perseus file format to file_formats.h git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/add_utils_in_gudhi_v2@2949 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: e2f0dcf1efdc3c26ff609b7a14d37a604a9c162f --- .../doc/Gudhi_Cubical_Complex_doc.h | 49 ++-------------------- src/common/doc/file_formats.h | 49 ++++++++++++++++++++++ 2 files changed, 53 insertions(+), 45 deletions(-) (limited to 'src/common/doc') diff --git a/src/Bitmap_cubical_complex/doc/Gudhi_Cubical_Complex_doc.h b/src/Bitmap_cubical_complex/doc/Gudhi_Cubical_Complex_doc.h index daba15a4..56b62e92 100644 --- a/src/Bitmap_cubical_complex/doc/Gudhi_Cubical_Complex_doc.h +++ b/src/Bitmap_cubical_complex/doc/Gudhi_Cubical_Complex_doc.h @@ -91,31 +91,8 @@ namespace cubical_complex { * 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 - + * (http://www.sas.upenn.edu/~vnanda/perseus/) by Vidit Nanda. The file format is described here: \ref FileFormatsPerseus. + * * \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 @@ -123,26 +100,8 @@ namespace cubical_complex { * 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. - + * boundary conditions. One can also use Perseus style input files (see \ref FileFormatsPerseus). + * * \section BitmapExamples Examples * End user programs are available in example/Bitmap_cubical_complex and utilities/Bitmap_cubical_complex folders. * diff --git a/src/common/doc/file_formats.h b/src/common/doc/file_formats.h index 069b19d1..d06b81f5 100644 --- a/src/common/doc/file_formats.h +++ b/src/common/doc/file_formats.h @@ -68,6 +68,55 @@ namespace Gudhi { -1. -1. -1. 1. 1. 1. \endverbatim + + + \section FileFormatsPerseus Perseus + + This file format is the format used by the Perseus software + (http://www.sas.upenn.edu/~vnanda/perseus/) by Vidit Nanda. + 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 + + 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. + */ } // namespace Gudhi -- cgit v1.2.3 From 61f55efffe84f56b7de704c3a1fd6a19fd3d60a9 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Fri, 8 Dec 2017 11:07:09 +0000 Subject: File formats for iso cuboid and perseus in the Python version git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@3057 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 6eb0a025d8549320e03727ce491563b2a941c82d --- src/common/doc/file_formats.h | 2 ++ src/cython/doc/cubical_complex_user.rst | 45 ++++++++++++--------------- src/cython/doc/fileformats.rst | 55 ++++++++++++++++++++++++++++++++- 3 files changed, 76 insertions(+), 26 deletions(-) (limited to 'src/common/doc') diff --git a/src/common/doc/file_formats.h b/src/common/doc/file_formats.h index d06b81f5..c60ed15a 100644 --- a/src/common/doc/file_formats.h +++ b/src/common/doc/file_formats.h @@ -117,6 +117,8 @@ namespace Gudhi { Indicate that we have imposed periodic boundary conditions in the direction x, but not in the direction y. + Other sample files can be found in the `data/bitmap` folder. + */ } // namespace Gudhi diff --git a/src/cython/doc/cubical_complex_user.rst b/src/cython/doc/cubical_complex_user.rst index 2bfac62a..34598f02 100644 --- a/src/cython/doc/cubical_complex_user.rst +++ b/src/cython/doc/cubical_complex_user.rst @@ -81,23 +81,7 @@ filtration to all cubes. There are a number of constructors that can be used to who want to use the code directly. They can be found in the :doc:`cubical_complex_ref`. Currently one input from a text file is used. It uses a format used already in `Perseus software `_ by Vidit Nanda. -Below we are providing a description of the format. The first line contains a number d begin the dimension of the -bitmap (2 in the example below). Next d lines are the numbers of top dimensional cubes in each dimensions (3 and 3 -in the example below). Next, in lexicographical order, the filtration of top dimensional cubes is given (1 4 6 8 -20 4 7 6 5 in the example below). - -.. figure:: - ../../doc/Bitmap_cubical_complex/exampleBitmap.png - :alt: Example of a input data. - :figclass: align-center - - Example of a input data. - -The input file for the following complex is: - -.. literalinclude:: ../../data/bitmap/cubicalcomplexdoc.txt - -.. centered:: ../../data/bitmap/cubicalcomplexdoc.txt +The file format is described here: :doc:`Perseus `. .. testcode:: @@ -124,15 +108,9 @@ Imposing periodic boundary conditions in the direction i, means that the left an :math:`\mathcal{K}` are considered the same. In particular, if for a bitmap :math:`\mathcal{K}` periodic boundary conditions are imposed in all directions, then complex :math:`\mathcal{K}` became n-dimensional torus. One can use various constructors from the file Bitmap_cubical_complex_periodic_boundary_conditions_base.h to construct cubical -complex with periodic boundary conditions. One can also use Perseus style input files. To indicate periodic boundary -conditions in a given direction, then number of top dimensional cells in this direction have to be multiplied by -1. -For instance: - -.. literalinclude:: ../../data/bitmap/periodiccubicalcomplexdoc.txt - -.. centered:: ../../data/bitmap/periodiccubicalcomplexdoc.txt +complex with periodic boundary conditions. -Indicate that we have imposed periodic boundary conditions in the direction x, but not in the direction y. +One can also use Perseus style input files (see :doc:`Perseus `) for the specific periodic case: .. testcode:: @@ -149,6 +127,23 @@ the program output is: Periodic cubical complex is of dimension 2 - 42 simplices. +Or it can be defined as follows: + +.. testcode:: + + from gudhi import PeriodicCubicalComplex as pcc + periodic_cc = pcc(dimensions=[3,3], + top_dimensional_cells= [0, 0, 0, 0, 1, 0, 0, 0, 0], + periodic_dimensions=[True, False]) + result_str = 'Periodic cubical complex is of dimension ' + repr(periodic_cc.dimension()) + ' - ' + \ + repr(periodic_cc.num_simplices()) + ' simplices.' + print(result_str) + +the program output is: + +.. testoutput:: + + Periodic cubical complex is of dimension 2 - 42 simplices. Examples. --------- diff --git a/src/cython/doc/fileformats.rst b/src/cython/doc/fileformats.rst index 156ef4e4..4f0b6f6d 100644 --- a/src/cython/doc/fileformats.rst +++ b/src/cython/doc/fileformats.rst @@ -23,7 +23,7 @@ Here is a simple sample file:: 3 34.2 34.974 4 3. inf -Other sample files can be found in the data/persistence_diagram folder. +Other sample files can be found in the `data/persistence_diagram` folder. Such files can be generated with :meth:`gudhi.SimplexTree.write_persistence_diagram`, read with @@ -31,3 +31,56 @@ Such files can be generated with :meth:`gudhi.read_persistence_intervals_in_dimension` and displayed with :meth:`gudhi.plot_persistence_barcode` or :meth:`gudhi.plot_persistence_diagram`. + +Iso-cuboid +********** + +Such a file describes an iso-oriented cuboid with diagonal opposite vertices +(min_x, min_y, min_z,...) and (max_x, max_y, max_z, ...). The format is:: + + min_x min_y [min_z ...] + max_x max_y [max_z ...] + +Here is a simple sample file in the 3D case:: + + -1. -1. -1. + 1. 1. 1. + + +Perseus +******* + +This file format is the format used by the +`Perseus software `_ by Vidit Nanda. +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). + +.. figure:: + ../../doc/Bitmap_cubical_complex/exampleBitmap.png + :alt: Example of a input data. + :figclass: align-center + + Example of a input data. + +The input file for the following complex is: + +.. literalinclude:: ../../data/bitmap/cubicalcomplexdoc.txt + +.. centered:: ../../data/bitmap/cubicalcomplexdoc.txt + +To indicate periodic boundary conditions in a given direction, then number of +top dimensional cells in this direction have to be multiplied by -1. For +instance: + +.. literalinclude:: ../../data/bitmap/periodiccubicalcomplexdoc.txt + +.. centered:: ../../data/bitmap/periodiccubicalcomplexdoc.txt + + +Indicate that we have imposed periodic boundary conditions in the direction x, +but not in the direction y. + +Other sample files can be found in the `data/bitmap` folder. -- cgit v1.2.3 From 51d5cdbb5e0d2ac632611811435eef798e496ac6 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Thu, 14 Dec 2017 12:55:06 +0000 Subject: Version numbers git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@3073 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 38b84cada057e433d09aaf987b0d495e86e19962 --- CMakeGUDHIVersion.txt | 4 ++-- src/Doxyfile | 2 +- src/common/doc/main_page.h | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'src/common/doc') diff --git a/CMakeGUDHIVersion.txt b/CMakeGUDHIVersion.txt index bfef1590..cb07e55a 100644 --- a/CMakeGUDHIVersion.txt +++ b/CMakeGUDHIVersion.txt @@ -1,6 +1,6 @@ set (GUDHI_MAJOR_VERSION 2) -set (GUDHI_MINOR_VERSION 0) -set (GUDHI_PATCH_VERSION 1) +set (GUDHI_MINOR_VERSION 1) +set (GUDHI_PATCH_VERSION 0.rc1) set(GUDHI_VERSION ${GUDHI_MAJOR_VERSION}.${GUDHI_MINOR_VERSION}.${GUDHI_PATCH_VERSION}) message(STATUS "GUDHI version : ${GUDHI_VERSION}") diff --git a/src/Doxyfile b/src/Doxyfile index 429bf6a1..2d5adea1 100644 --- a/src/Doxyfile +++ b/src/Doxyfile @@ -38,7 +38,7 @@ PROJECT_NAME = "GUDHI" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = "2.0.1" +PROJECT_NUMBER = "2.1.0.rc1" # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/src/common/doc/main_page.h b/src/common/doc/main_page.h index 108cf6e3..148ee670 100644 --- a/src/common/doc/main_page.h +++ b/src/common/doc/main_page.h @@ -99,7 +99,7 @@ Author: Mathieu Carrière
- Introduced in: GUDHI 2.0.1
+ Introduced in: GUDHI 2.1.0
Copyright: GPL v3
@@ -551,4 +551,4 @@ make doxygen * @example Witness_complex/weak_witness_persistence.cpp * @example Witness_complex/strong_witness_persistence.cpp */ - \ No newline at end of file + -- cgit v1.2.3 From dc8a8693966e8a6db45b0d9f142d3ff8e3da7c7f Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Tue, 19 Dec 2017 21:06:34 +0000 Subject: Boost minimal version is 1.48.0 (modification rollback) - if boost_version use static_vector (from Boost 1.54.0) git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@3090 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 487d902c645793f2647191a0d8f9218184fa19de --- src/Alpha_complex/utilities/alpha_complex_3d_persistence.cpp | 9 +++++++++ src/cmake/modules/GUDHI_third_party_libraries.cmake | 2 +- src/common/doc/main_page.h | 2 +- src/cython/doc/installation.rst | 2 +- 4 files changed, 12 insertions(+), 3 deletions(-) (limited to 'src/common/doc') diff --git a/src/Alpha_complex/utilities/alpha_complex_3d_persistence.cpp b/src/Alpha_complex/utilities/alpha_complex_3d_persistence.cpp index f4a14ae3..1070d17b 100644 --- a/src/Alpha_complex/utilities/alpha_complex_3d_persistence.cpp +++ b/src/Alpha_complex/utilities/alpha_complex_3d_persistence.cpp @@ -20,9 +20,13 @@ * along with this program. If not, see . */ +#include #include #include + +#if BOOST_VERSION >= 105400 #include +#endif #include #include @@ -66,7 +70,12 @@ using Cell_handle = Alpha_shape_3::Cell_handle; using Facet = Alpha_shape_3::Facet; using Edge_3 = Alpha_shape_3::Edge; using Vertex_handle = Alpha_shape_3::Vertex_handle; + +#if BOOST_VERSION >= 105400 using Vertex_list = boost::container::static_vector; +#else +using Vertex_list = std::vector; +#endif // gudhi type definition using ST = Gudhi::Simplex_tree; diff --git a/src/cmake/modules/GUDHI_third_party_libraries.cmake b/src/cmake/modules/GUDHI_third_party_libraries.cmake index 7696496c..84545f18 100644 --- a/src/cmake/modules/GUDHI_third_party_libraries.cmake +++ b/src/cmake/modules/GUDHI_third_party_libraries.cmake @@ -1,6 +1,6 @@ # This files manage third party libraries required by GUDHI -find_package(Boost 1.56.0 REQUIRED COMPONENTS system filesystem unit_test_framework program_options thread) +find_package(Boost 1.48.0 REQUIRED COMPONENTS system filesystem unit_test_framework program_options thread) if(NOT Boost_FOUND) message(FATAL_ERROR "NOTICE: This program requires Boost and will not be compiled.") diff --git a/src/common/doc/main_page.h b/src/common/doc/main_page.h index 7ba8a4b7..148ee670 100644 --- a/src/common/doc/main_page.h +++ b/src/common/doc/main_page.h @@ -258,7 +258,7 @@ * 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.56.0 or + * 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 diff --git a/src/cython/doc/installation.rst b/src/cython/doc/installation.rst index 2f689497..c182f176 100644 --- a/src/cython/doc/installation.rst +++ b/src/cython/doc/installation.rst @@ -5,7 +5,7 @@ Compiling ********* The library uses c++11 and requires `Boost `_ with -version 1.56.0 or more recent. It is a multi-platform library and compiles on +version 1.48.0 or more recent. It is a multi-platform library and compiles on Linux, Mac OSX and Visual Studio 2015. It also requires cmake to generate makefiles, and cython to compile the library. -- cgit v1.2.3 From 06ff6fac211d2823c7d14a6d2f4a4db03f48d2e3 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Fri, 26 Jan 2018 14:01:39 +0000 Subject: Seperate installation and examples from main page Move cover complex utilities from examples GIC.cpp example was not compiled, nor tested. It is removed. Persistence representation : no need to link with Boost_SYSTEM git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@3164 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: cf2bfa6c6de2ed359aaa165b9f80bca7e06defb1 --- src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 29 -- src/Nerve_GIC/example/CMakeLists.txt | 12 - src/Nerve_GIC/example/GIC.cpp | 95 ----- .../example/KeplerMapperVisuFromTxtFile.py | 72 ---- src/Nerve_GIC/example/Nerve.cpp | 96 ----- src/Nerve_GIC/example/Nerve.txt | 63 ---- src/Nerve_GIC/example/VoronoiGIC.cpp | 90 ----- src/Nerve_GIC/example/km.py | 390 --------------------- src/Nerve_GIC/example/km.py.COPYRIGHT | 26 -- src/Nerve_GIC/utilities/CMakeLists.txt | 22 ++ .../utilities/KeplerMapperVisuFromTxtFile.py | 72 ++++ src/Nerve_GIC/utilities/Nerve.cpp | 96 +++++ src/Nerve_GIC/utilities/Nerve.txt | 63 ++++ src/Nerve_GIC/utilities/VoronoiGIC.cpp | 90 +++++ src/Nerve_GIC/utilities/km.py | 390 +++++++++++++++++++++ src/Nerve_GIC/utilities/km.py.COPYRIGHT | 26 ++ .../example/CMakeLists.txt | 5 - .../test/CMakeLists.txt | 14 +- src/common/doc/examples.h | 99 ++++++ src/common/doc/installation.h | 263 ++++++++++++++ src/common/doc/main_page.h | 305 +--------------- 21 files changed, 1130 insertions(+), 1188 deletions(-) delete mode 100644 src/Nerve_GIC/example/GIC.cpp delete mode 100755 src/Nerve_GIC/example/KeplerMapperVisuFromTxtFile.py delete mode 100644 src/Nerve_GIC/example/Nerve.cpp delete mode 100644 src/Nerve_GIC/example/Nerve.txt delete mode 100644 src/Nerve_GIC/example/VoronoiGIC.cpp delete mode 100755 src/Nerve_GIC/example/km.py delete mode 100644 src/Nerve_GIC/example/km.py.COPYRIGHT create mode 100644 src/Nerve_GIC/utilities/CMakeLists.txt create mode 100755 src/Nerve_GIC/utilities/KeplerMapperVisuFromTxtFile.py create mode 100644 src/Nerve_GIC/utilities/Nerve.cpp create mode 100644 src/Nerve_GIC/utilities/Nerve.txt create mode 100644 src/Nerve_GIC/utilities/VoronoiGIC.cpp create mode 100755 src/Nerve_GIC/utilities/km.py create mode 100644 src/Nerve_GIC/utilities/km.py.COPYRIGHT create mode 100644 src/common/doc/examples.h create mode 100644 src/common/doc/installation.h (limited to 'src/common/doc') diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index 7578cc53..344cb031 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -177,7 +177,6 @@ namespace cover_complex { * \image html "funcGICvisu.jpg" "Visualization with neato" * * \copyright GNU General Public License v3. - * \verbatim Contact: gudhi-users@lists.gforge.inria.fr \endverbatim */ /** @} */ // end defgroup cover_complex @@ -186,31 +185,3 @@ namespace cover_complex { } // namespace Gudhi #endif // DOC_COVER_COMPLEX_INTRO_COVER_COMPLEX_H_ - - -/* * \subsection gicexample Example with cover from function - * - * This example builds the GIC of a point cloud sampled on a 3D human shape (human.off). - * The cover C comes from the preimages of intervals (with length 0.075 and gain 0) - * covering the height function (coordinate 2), - * and the graph G comes from a Rips complex built with threshold 0.075. - * Note that if the gain is too big, the number of cliques increases a lot, - * which make the computation time much larger. - * - * \include Nerve_GIC/GIC.cpp - * - * When launching: - * - * \code $> ./GIC ../../data/points/human.off 0.075 2 0.075 0 --v - * \endcode - * - * the program outputs SC.txt, which can be visualized with python and firefox as before: - * - * \image html "gicvisu.jpg" "Visualization with KeplerMapper" - * */ - - -/* * Using e.g. - * - * \code $> python KeplerMapperVisuFromTxtFile.py && firefox SC.html - * \endcode */ diff --git a/src/Nerve_GIC/example/CMakeLists.txt b/src/Nerve_GIC/example/CMakeLists.txt index 73728dc0..434637fa 100644 --- a/src/Nerve_GIC/example/CMakeLists.txt +++ b/src/Nerve_GIC/example/CMakeLists.txt @@ -3,26 +3,14 @@ project(Nerve_GIC_examples) if (NOT CGAL_VERSION VERSION_LESS 4.8.1) - add_executable ( Nerve Nerve.cpp ) add_executable ( CoordGIC CoordGIC.cpp ) add_executable ( FuncGIC FuncGIC.cpp ) - add_executable ( VoronoiGIC VoronoiGIC.cpp ) if (TBB_FOUND) - target_link_libraries(Nerve ${TBB_LIBRARIES}) target_link_libraries(CoordGIC ${TBB_LIBRARIES}) target_link_libraries(FuncGIC ${TBB_LIBRARIES}) - target_link_libraries(VoronoiGIC ${TBB_LIBRARIES}) endif() - file(COPY KeplerMapperVisuFromTxtFile.py km.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/) - - add_test(NAME Nerve_GIC_example_nerve COMMAND $ - "${CMAKE_SOURCE_DIR}/data/points/human.off" "2" "10" "0.3") - - add_test(NAME Nerve_GIC_example_VoronoiGIC COMMAND $ - "${CMAKE_SOURCE_DIR}/data/points/human.off" "100") - add_test(NAME Nerve_GIC_example_CoordGIC COMMAND $ "${CMAKE_SOURCE_DIR}/data/points/tore3D_1307.off" "0") diff --git a/src/Nerve_GIC/example/GIC.cpp b/src/Nerve_GIC/example/GIC.cpp deleted file mode 100644 index 2bc24a4d..00000000 --- a/src/Nerve_GIC/example/GIC.cpp +++ /dev/null @@ -1,95 +0,0 @@ -/* 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): Mathieu Carrière - * - * Copyright (C) 2017 INRIA - * - * 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 . - */ - -#include - -#include -#include - -void usage(int nbArgs, char *const progName) { - std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; - std::cerr << "Usage: " << progName << " filename.off threshold coordinate resolution gain [--v] \n"; - std::cerr << " i.e.: " << progName << " ../../data/points/human.off 0.075 2 0.075 0 --v \n"; - exit(-1); // ----- >> -} - -int main(int argc, char **argv) { - if ((argc != 6) && (argc != 7)) usage(argc, argv[0]); - - using Point = std::vector; - - std::string off_file_name(argv[1]); - double threshold = atof(argv[2]); - int coord = atoi(argv[3]); - double resolution = atof(argv[4]); - double gain = atof(argv[5]); - bool verb = 0; - if (argc == 7) verb = 1; - - // ---------------------------------------------------------------------------- - // Init of a graph induced complex from an OFF file - // ---------------------------------------------------------------------------- - - Gudhi::graph_induced_complex::Graph_induced_complex GIC; - GIC.set_verbose(verb); - - bool check = GIC.read_point_cloud(off_file_name); - - if (!check) { - std::cout << "Incorrect OFF file." << std::endl; - } else { - GIC.set_color_from_coordinate(coord); - GIC.set_function_from_coordinate(coord); - - GIC.set_graph_from_rips(threshold, Gudhi::Euclidean_distance()); - - GIC.set_resolution_with_interval_length(resolution); - GIC.set_gain(gain); - GIC.set_cover_from_function(); - - GIC.find_GIC_simplices(); - - GIC.plot_TXT_for_KeplerMapper(); - - Gudhi::Simplex_tree<> stree; - GIC.create_complex(stree); - - // ---------------------------------------------------------------------------- - // Display information about the graph induced complex - // ---------------------------------------------------------------------------- - - if (verb) { - std::cout << "Graph induced complex is of dimension " << stree.dimension() << " - " << stree.num_simplices() - << " simplices - " << stree.num_vertices() << " vertices." << std::endl; - - std::cout << "Iterator on graph induced complex simplices" << std::endl; - for (auto f_simplex : stree.filtration_simplex_range()) { - for (auto vertex : stree.simplex_vertex_range(f_simplex)) { - std::cout << vertex << " "; - } - std::cout << std::endl; - } - } - } - - return 0; -} diff --git a/src/Nerve_GIC/example/KeplerMapperVisuFromTxtFile.py b/src/Nerve_GIC/example/KeplerMapperVisuFromTxtFile.py deleted file mode 100755 index d2897774..00000000 --- a/src/Nerve_GIC/example/KeplerMapperVisuFromTxtFile.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python - -import km -import numpy as np -from collections import defaultdict - -"""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): Mathieu Carriere - - Copyright (C) 2017 INRIA - - 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 . -""" - -__author__ = "Mathieu Carriere" -__copyright__ = "Copyright (C) 2017 INRIA" -__license__ = "GPL v3" - -network = {} -mapper = km.KeplerMapper(verbose=0) -data = np.zeros((3,3)) -projected_data = mapper.fit_transform( data, projection="sum", scaler=None ) - -f = open('SC.txt','r') -nodes = defaultdict(list) -links = defaultdict(list) -custom = defaultdict(list) - -dat = f.readline() -lens = f.readline() -color = f.readline(); -param = [float(i) for i in f.readline().split(" ")] - -nums = [int(i) for i in f.readline().split(" ")] -num_nodes = nums[0] -num_edges = nums[1] - -for i in range(0,num_nodes): - point = [float(j) for j in f.readline().split(" ")] - nodes[ str(int(point[0])) ] = [ int(point[0]), point[1], int(point[2]) ] - links[ str(int(point[0])) ] = [] - custom[ int(point[0]) ] = point[1] - -m = min([custom[i] for i in range(0,num_nodes)]) -M = max([custom[i] for i in range(0,num_nodes)]) - -for i in range(0,num_edges): - edge = [int(j) for j in f.readline().split(" ")] - links[ str(edge[0]) ].append( str(edge[1]) ) - links[ str(edge[1]) ].append( str(edge[0]) ) - -network["nodes"] = nodes -network["links"] = links -network["meta"] = lens - -mapper.visualize(network, color_function = color, path_html="SC.html", title=dat, -graph_link_distance=30, graph_gravity=0.1, graph_charge=-120, custom_tooltips=custom, width_html=0, -height_html=0, show_tooltips=True, show_title=True, show_meta=True, res=param[0],gain=param[1], minimum=m,maximum=M) diff --git a/src/Nerve_GIC/example/Nerve.cpp b/src/Nerve_GIC/example/Nerve.cpp deleted file mode 100644 index 6abdedc7..00000000 --- a/src/Nerve_GIC/example/Nerve.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/* 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): Mathieu Carrière - * - * Copyright (C) 2017 INRIA - * - * 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 . - */ - -#include - -#include -#include - -void usage(int nbArgs, char *const progName) { - std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; - std::cerr << "Usage: " << progName << " filename.off coordinate resolution gain [--v] \n"; - std::cerr << " i.e.: " << progName << " ../../data/points/human.off 2 10 0.3 --v \n"; - exit(-1); // ----- >> -} - -int main(int argc, char **argv) { - if ((argc != 5) && (argc != 6)) usage(argc, argv[0]); - - using Point = std::vector; - - std::string off_file_name(argv[1]); - int coord = atoi(argv[2]); - int resolution = atoi(argv[3]); - double gain = atof(argv[4]); - bool verb = 0; - if (argc == 6) verb = 1; - - // -------------------------------- - // Init of a Nerve from an OFF file - // -------------------------------- - - Gudhi::cover_complex::Cover_complex SC; - SC.set_verbose(verb); - - bool check = SC.read_point_cloud(off_file_name); - - if (!check) { - std::cout << "Incorrect OFF file." << std::endl; - } else { - SC.set_type("Nerve"); - - SC.set_color_from_coordinate(coord); - SC.set_function_from_coordinate(coord); - - SC.set_graph_from_OFF(); - SC.set_resolution_with_interval_number(resolution); - SC.set_gain(gain); - SC.set_cover_from_function(); - - SC.find_simplices(); - - SC.write_info(); - - Gudhi::Simplex_tree<> stree; - SC.create_complex(stree); - SC.compute_PD(); - - // ---------------------------------------------------------------------------- - // Display information about the graph induced complex - // ---------------------------------------------------------------------------- - - if (verb) { - std::cout << "Nerve is of dimension " << stree.dimension() << " - " << stree.num_simplices() << " simplices - " - << stree.num_vertices() << " vertices." << std::endl; - - std::cout << "Iterator on Nerve simplices" << std::endl; - for (auto f_simplex : stree.filtration_simplex_range()) { - for (auto vertex : stree.simplex_vertex_range(f_simplex)) { - std::cout << vertex << " "; - } - std::cout << std::endl; - } - } - } - - return 0; -} diff --git a/src/Nerve_GIC/example/Nerve.txt b/src/Nerve_GIC/example/Nerve.txt deleted file mode 100644 index 839ff45e..00000000 --- a/src/Nerve_GIC/example/Nerve.txt +++ /dev/null @@ -1,63 +0,0 @@ -Min function value = -0.979672 and Max function value = 0.816414 -Interval 0 = [-0.979672, -0.761576] -Interval 1 = [-0.838551, -0.581967] -Interval 2 = [-0.658942, -0.402359] -Interval 3 = [-0.479334, -0.22275] -Interval 4 = [-0.299725, -0.0431415] -Interval 5 = [-0.120117, 0.136467] -Interval 6 = [0.059492, 0.316076] -Interval 7 = [0.239101, 0.495684] -Interval 8 = [0.418709, 0.675293] -Interval 9 = [0.598318, 0.816414] -Computing preimages... -Computing connected components... -.txt generated. It can be visualized with e.g. python KeplerMapperVisuFromTxtFile.py and firefox. -5 interval(s) in dimension 0: - [-0.909111, 0.00817529] - [-0.171433, 0.367392] - [-0.171433, 0.367392] - [-0.909111, 0.745853] -0 interval(s) in dimension 1: -Nerve is of dimension 1 - 41 simplices - 21 vertices. -Iterator on Nerve simplices -1 -0 -4 -4 0 -2 -2 1 -8 -8 2 -5 -5 4 -9 -9 8 -13 -13 5 -14 -14 9 -19 -19 13 -25 -32 -20 -32 20 -33 -33 25 -26 -26 14 -26 19 -42 -42 26 -34 -34 33 -27 -27 20 -35 -35 27 -35 34 -42 35 -44 -44 35 -54 -54 44 \ No newline at end of file diff --git a/src/Nerve_GIC/example/VoronoiGIC.cpp b/src/Nerve_GIC/example/VoronoiGIC.cpp deleted file mode 100644 index 32431cc2..00000000 --- a/src/Nerve_GIC/example/VoronoiGIC.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/* 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): Mathieu Carrière - * - * Copyright (C) 2017 INRIA - * - * 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 . - */ - -#include - -#include -#include - -void usage(int nbArgs, char *const progName) { - std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; - std::cerr << "Usage: " << progName << " filename.off N [--v] \n"; - std::cerr << " i.e.: " << progName << " ../../data/points/human.off 100 --v \n"; - exit(-1); // ----- >> -} - -int main(int argc, char **argv) { - if ((argc != 3) && (argc != 4)) usage(argc, argv[0]); - - using Point = std::vector; - - std::string off_file_name(argv[1]); - int m = atoi(argv[2]); - bool verb = 0; - if (argc == 4) verb = 1; - - // ---------------------------------------------------------------------------- - // Init of a graph induced complex from an OFF file - // ---------------------------------------------------------------------------- - - Gudhi::cover_complex::Cover_complex GIC; - GIC.set_verbose(verb); - - bool check = GIC.read_point_cloud(off_file_name); - - if (!check) { - std::cout << "Incorrect OFF file." << std::endl; - } else { - GIC.set_type("GIC"); - - GIC.set_color_from_coordinate(); - - GIC.set_graph_from_OFF(); - GIC.set_cover_from_Voronoi(Gudhi::Euclidean_distance(), m); - - GIC.find_simplices(); - - GIC.plot_OFF(); - - Gudhi::Simplex_tree<> stree; - GIC.create_complex(stree); - - // ---------------------------------------------------------------------------- - // Display information about the graph induced complex - // ---------------------------------------------------------------------------- - - if (verb) { - std::cout << "Graph induced complex is of dimension " << stree.dimension() << " - " << stree.num_simplices() - << " simplices - " << stree.num_vertices() << " vertices." << std::endl; - - std::cout << "Iterator on graph induced complex simplices" << std::endl; - for (auto f_simplex : stree.filtration_simplex_range()) { - for (auto vertex : stree.simplex_vertex_range(f_simplex)) { - std::cout << vertex << " "; - } - std::cout << std::endl; - } - } - } - - return 0; -} diff --git a/src/Nerve_GIC/example/km.py b/src/Nerve_GIC/example/km.py deleted file mode 100755 index 53024aab..00000000 --- a/src/Nerve_GIC/example/km.py +++ /dev/null @@ -1,390 +0,0 @@ -from __future__ import division -import numpy as np -from collections import defaultdict -import json -import itertools -from sklearn import cluster, preprocessing, manifold -from datetime import datetime -import sys - -class KeplerMapper(object): - # With this class you can build topological networks from (high-dimensional) data. - # - # 1) Fit a projection/lens/function to a dataset and transform it. - # For instance "mean_of_row(x) for x in X" - # 2) Map this projection with overlapping intervals/hypercubes. - # Cluster the points inside the interval - # (Note: we cluster on the inverse image/original data to lessen projection loss). - # If two clusters/nodes have the same members (due to the overlap), then: - # connect these with an edge. - # 3) Visualize the network using HTML and D3.js. - # - # functions - # --------- - # fit_transform: Create a projection (lens) from a dataset - # map: Apply Mapper algorithm on this projection and build a simplicial complex - # visualize: Turns the complex dictionary into a HTML/D3.js visualization - - def __init__(self, verbose=2): - self.verbose = verbose - - self.chunk_dist = [] - self.overlap_dist = [] - self.d = [] - self.nr_cubes = 0 - self.overlap_perc = 0 - self.clusterer = False - - def fit_transform(self, X, projection="sum", scaler=preprocessing.MinMaxScaler()): - # Creates the projection/lens from X. - # - # Input: X. Input features as a numpy array. - # Output: projected_X. original data transformed to a projection (lens). - # - # parameters - # ---------- - # projection: Projection parameter is either a string, - # a scikit class with fit_transform, like manifold.TSNE(), - # or a list of dimension indices. - # scaler: if None, do no scaling, else apply scaling to the projection - # Default: Min-Max scaling - - self.scaler = scaler - self.projection = str(projection) - - # Detect if projection is a class (for scikit-learn) - #if str(type(projection))[1:6] == "class": #TODO: de-ugly-fy - # reducer = projection - # if self.verbose > 0: - # try: - # projection.set_params(**{"verbose":self.verbose}) - # except: - # pass - # print("\n..Projecting data using: \n\t%s\n"%str(projection)) - # X = reducer.fit_transform(X) - - # Detect if projection is a string (for standard functions) - if isinstance(projection, str): - if self.verbose > 0: - print("\n..Projecting data using: %s"%(projection)) - # Stats lenses - if projection == "sum": # sum of row - X = np.sum(X, axis=1).reshape((X.shape[0],1)) - if projection == "mean": # mean of row - X = np.mean(X, axis=1).reshape((X.shape[0],1)) - if projection == "median": # mean of row - X = np.median(X, axis=1).reshape((X.shape[0],1)) - if projection == "max": # max of row - X = np.max(X, axis=1).reshape((X.shape[0],1)) - if projection == "min": # min of row - X = np.min(X, axis=1).reshape((X.shape[0],1)) - if projection == "std": # std of row - X = np.std(X, axis=1).reshape((X.shape[0],1)) - - if projection == "dist_mean": # Distance of x to mean of X - X_mean = np.mean(X, axis=0) - X = np.sum(np.sqrt((X - X_mean)**2), axis=1).reshape((X.shape[0],1)) - - # Detect if projection is a list (with dimension indices) - if isinstance(projection, list): - if self.verbose > 0: - print("\n..Projecting data using: %s"%(str(projection))) - X = X[:,np.array(projection)] - - # Scaling - if scaler is not None: - if self.verbose > 0: - print("\n..Scaling with: %s\n"%str(scaler)) - X = scaler.fit_transform(X) - - return X - - def map(self, projected_X, inverse_X=None, clusterer=cluster.DBSCAN(eps=0.5,min_samples=3), nr_cubes=10, overlap_perc=0.1): - # This maps the data to a simplicial complex. Returns a dictionary with nodes and links. - # - # Input: projected_X. A Numpy array with the projection/lens. - # Output: complex. A dictionary with "nodes", "links" and "meta information" - # - # parameters - # ---------- - # projected_X projected_X. A Numpy array with the projection/lens. Required. - # inverse_X Numpy array or None. If None then the projection itself is used for clustering. - # clusterer Scikit-learn API compatible clustering algorithm. Default: DBSCAN - # nr_cubes Int. The number of intervals/hypercubes to create. - # overlap_perc Float. The percentage of overlap "between" the intervals/hypercubes. - - start = datetime.now() - - # Helper function - def cube_coordinates_all(nr_cubes, nr_dimensions): - # Helper function to get origin coordinates for our intervals/hypercubes - # Useful for looping no matter the number of cubes or dimensions - # Example: if there are 4 cubes per dimension and 3 dimensions - # return the bottom left (origin) coordinates of 64 hypercubes, - # as a sorted list of Numpy arrays - # TODO: elegance-ify... - l = [] - for x in range(nr_cubes): - l += [x] * nr_dimensions - return [np.array(list(f)) for f in sorted(set(itertools.permutations(l,nr_dimensions)))] - - nodes = defaultdict(list) - links = defaultdict(list) - complex = {} - self.nr_cubes = nr_cubes - self.clusterer = clusterer - self.overlap_perc = overlap_perc - - if self.verbose > 0: - print("Mapping on data shaped %s using dimensions\n"%(str(projected_X.shape))) - - # If inverse image is not provided, we use the projection as the inverse image (suffer projection loss) - if inverse_X is None: - inverse_X = projected_X - - # We chop up the min-max column ranges into 'nr_cubes' parts - self.chunk_dist = (np.max(projected_X, axis=0) - np.min(projected_X, axis=0))/nr_cubes - - # We calculate the overlapping windows distance - self.overlap_dist = self.overlap_perc * self.chunk_dist - - # We find our starting point - self.d = np.min(projected_X, axis=0) - - # Use a dimension index array on the projected X - # (For now this uses the entire dimensionality, but we keep for experimentation) - di = np.array([x for x in range(projected_X.shape[1])]) - - # Prefix'ing the data with ID's - ids = np.array([x for x in range(projected_X.shape[0])]) - projected_X = np.c_[ids,projected_X] - inverse_X = np.c_[ids,inverse_X] - - # Subdivide the projected data X in intervals/hypercubes with overlap - if self.verbose > 0: - total_cubes = len(cube_coordinates_all(nr_cubes,projected_X.shape[1])) - print("Creating %s hypercubes."%total_cubes) - - for i, coor in enumerate(cube_coordinates_all(nr_cubes,di.shape[0])): - # Slice the hypercube - hypercube = projected_X[ np.invert(np.any((projected_X[:,di+1] >= self.d[di] + (coor * self.chunk_dist[di])) & - (projected_X[:,di+1] < self.d[di] + (coor * self.chunk_dist[di]) + self.chunk_dist[di] + self.overlap_dist[di]) == False, axis=1 )) ] - - if self.verbose > 1: - print("There are %s points in cube_%s / %s with starting range %s"% - (hypercube.shape[0],i,total_cubes,self.d[di] + (coor * self.chunk_dist[di]))) - - # If at least one sample inside the hypercube - if hypercube.shape[0] > 0: - # Cluster the data point(s) in the cube, skipping the id-column - # Note that we apply clustering on the inverse image (original data samples) that fall inside the cube. - inverse_x = inverse_X[[int(nn) for nn in hypercube[:,0]]] - - clusterer.fit(inverse_x[:,1:]) - - if self.verbose > 1: - print("Found %s clusters in cube_%s\n"%(np.unique(clusterer.labels_[clusterer.labels_ > -1]).shape[0],i)) - - #Now for every (sample id in cube, predicted cluster label) - for a in np.c_[hypercube[:,0],clusterer.labels_]: - if a[1] != -1: #if not predicted as noise - cluster_id = str(coor[0])+"_"+str(i)+"_"+str(a[1])+"_"+str(coor)+"_"+str(self.d[di] + (coor * self.chunk_dist[di])) # TODO: de-rudimentary-ify - nodes[cluster_id].append( int(a[0]) ) # Append the member id's as integers - else: - if self.verbose > 1: - print("Cube_%s is empty.\n"%(i)) - - # Create links when clusters from different hypercubes have members with the same sample id. - candidates = itertools.combinations(nodes.keys(),2) - for candidate in candidates: - # if there are non-unique members in the union - if len(nodes[candidate[0]]+nodes[candidate[1]]) != len(set(nodes[candidate[0]]+nodes[candidate[1]])): - links[candidate[0]].append( candidate[1] ) - - # Reporting - if self.verbose > 0: - nr_links = 0 - for k in links: - nr_links += len(links[k]) - print("\ncreated %s edges and %s nodes in %s."%(nr_links,len(nodes),str(datetime.now()-start))) - - complex["nodes"] = nodes - complex["links"] = links - complex["meta"] = self.projection - - return complex - - def visualize(self, complex, color_function="", path_html="mapper_visualization_output.html", title="My Data", - graph_link_distance=30, graph_gravity=0.1, graph_charge=-120, custom_tooltips=None, width_html=0, - height_html=0, show_tooltips=True, show_title=True, show_meta=True, res=0,gain=0,minimum=0,maximum=0): - # Turns the dictionary 'complex' in a html file with d3.js - # - # Input: complex. Dictionary (output from calling .map()) - # Output: a HTML page saved as a file in 'path_html'. - # - # parameters - # ---------- - # color_function string. Not fully implemented. Default: "" (distance to origin) - # path_html file path as string. Where to save the HTML page. - # title string. HTML page document title and first heading. - # graph_link_distance int. Edge length. - # graph_gravity float. "Gravity" to center of layout. - # graph_charge int. charge between nodes. - # custom_tooltips None or Numpy Array. You could use "y"-label array for this. - # width_html int. Width of canvas. Default: 0 (full width) - # height_html int. Height of canvas. Default: 0 (full height) - # show_tooltips bool. default:True - # show_title bool. default:True - # show_meta bool. default:True - - # Format JSON for D3 graph - json_s = {} - json_s["nodes"] = [] - json_s["links"] = [] - k2e = {} # a key to incremental int dict, used for id's when linking - - for e, k in enumerate(complex["nodes"]): - # Tooltip and node color formatting, TODO: de-mess-ify - if custom_tooltips is not None: - tooltip_s = "

Cluster %s

"%k + " ".join(str(custom_tooltips[complex["nodes"][k][0]]).split(" ")) - if maximum == minimum: - tooltip_i = 0 - else: - tooltip_i = int(30*(custom_tooltips[complex["nodes"][k][0]]-minimum)/(maximum-minimum)) - json_s["nodes"].append({"name": str(k), "tooltip": tooltip_s, "group": 2 * int(np.log(complex["nodes"][k][2])), "color": tooltip_i}) - else: - tooltip_s = "

Cluster %s

Contains %s members."%(k,len(complex["nodes"][k])) - json_s["nodes"].append({"name": str(k), "tooltip": tooltip_s, "group": 2 * int(np.log(len(complex["nodes"][k]))), "color": str(k.split("_")[0])}) - k2e[k] = e - for k in complex["links"]: - for link in complex["links"][k]: - json_s["links"].append({"source": k2e[k], "target":k2e[link],"value":1}) - - # Width and height of graph in HTML output - if width_html == 0: - width_css = "100%" - width_js = 'document.getElementById("holder").offsetWidth-20' - else: - width_css = "%spx" % width_html - width_js = "%s" % width_html - if height_html == 0: - height_css = "100%" - height_js = 'document.getElementById("holder").offsetHeight-20' - else: - height_css = "%spx" % height_html - height_js = "%s" % height_html - - # Whether to show certain UI elements or not - if show_tooltips == False: - tooltips_display = "display: none;" - else: - tooltips_display = "" - - if show_meta == False: - meta_display = "display: none;" - else: - meta_display = "" - - if show_title == False: - title_display = "display: none;" - else: - title_display = "" - - with open(path_html,"wb") as outfile: - html = """ - - - %s | KeplerMapper - - - -
-

%s

-

- Lens
%s

- Length of intervals
%s

- Overlap percentage
%s%%

- Color Function
%s -

-
- - """%(title,width_css, height_css, title_display, meta_display, tooltips_display, title,complex["meta"],res,gain*100,color_function,width_js,height_js,graph_charge,graph_link_distance,graph_gravity,json.dumps(json_s)) - outfile.write(html.encode("utf-8")) - if self.verbose > 0: - print("\nWrote d3.js graph to '%s'"%path_html) diff --git a/src/Nerve_GIC/example/km.py.COPYRIGHT b/src/Nerve_GIC/example/km.py.COPYRIGHT deleted file mode 100644 index bef7b121..00000000 --- a/src/Nerve_GIC/example/km.py.COPYRIGHT +++ /dev/null @@ -1,26 +0,0 @@ -km.py is a fork of https://github.com/MLWave/kepler-mapper. -Only the visualization part has been kept (Mapper part has been removed). - -This file has te following Copyright : - -The MIT License (MIT) - -Copyright (c) 2015 Triskelion - HJ van Veen - info@mlwave.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/src/Nerve_GIC/utilities/CMakeLists.txt b/src/Nerve_GIC/utilities/CMakeLists.txt new file mode 100644 index 00000000..a0508dc2 --- /dev/null +++ b/src/Nerve_GIC/utilities/CMakeLists.txt @@ -0,0 +1,22 @@ +cmake_minimum_required(VERSION 2.6) +project(Nerve_GIC_examples) + +if (NOT CGAL_VERSION VERSION_LESS 4.8.1) + + add_executable ( Nerve Nerve.cpp ) + add_executable ( VoronoiGIC VoronoiGIC.cpp ) + + if (TBB_FOUND) + target_link_libraries(Nerve ${TBB_LIBRARIES}) + target_link_libraries(VoronoiGIC ${TBB_LIBRARIES}) + endif() + + file(COPY KeplerMapperVisuFromTxtFile.py km.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/) + + add_test(NAME Nerve_GIC_utilities_nerve COMMAND $ + "${CMAKE_SOURCE_DIR}/data/points/human.off" "2" "10" "0.3") + + add_test(NAME Nerve_GIC_utilities_VoronoiGIC COMMAND $ + "${CMAKE_SOURCE_DIR}/data/points/human.off" "100") + +endif (NOT CGAL_VERSION VERSION_LESS 4.8.1) diff --git a/src/Nerve_GIC/utilities/KeplerMapperVisuFromTxtFile.py b/src/Nerve_GIC/utilities/KeplerMapperVisuFromTxtFile.py new file mode 100755 index 00000000..d2897774 --- /dev/null +++ b/src/Nerve_GIC/utilities/KeplerMapperVisuFromTxtFile.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python + +import km +import numpy as np +from collections import defaultdict + +"""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): Mathieu Carriere + + Copyright (C) 2017 INRIA + + 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 . +""" + +__author__ = "Mathieu Carriere" +__copyright__ = "Copyright (C) 2017 INRIA" +__license__ = "GPL v3" + +network = {} +mapper = km.KeplerMapper(verbose=0) +data = np.zeros((3,3)) +projected_data = mapper.fit_transform( data, projection="sum", scaler=None ) + +f = open('SC.txt','r') +nodes = defaultdict(list) +links = defaultdict(list) +custom = defaultdict(list) + +dat = f.readline() +lens = f.readline() +color = f.readline(); +param = [float(i) for i in f.readline().split(" ")] + +nums = [int(i) for i in f.readline().split(" ")] +num_nodes = nums[0] +num_edges = nums[1] + +for i in range(0,num_nodes): + point = [float(j) for j in f.readline().split(" ")] + nodes[ str(int(point[0])) ] = [ int(point[0]), point[1], int(point[2]) ] + links[ str(int(point[0])) ] = [] + custom[ int(point[0]) ] = point[1] + +m = min([custom[i] for i in range(0,num_nodes)]) +M = max([custom[i] for i in range(0,num_nodes)]) + +for i in range(0,num_edges): + edge = [int(j) for j in f.readline().split(" ")] + links[ str(edge[0]) ].append( str(edge[1]) ) + links[ str(edge[1]) ].append( str(edge[0]) ) + +network["nodes"] = nodes +network["links"] = links +network["meta"] = lens + +mapper.visualize(network, color_function = color, path_html="SC.html", title=dat, +graph_link_distance=30, graph_gravity=0.1, graph_charge=-120, custom_tooltips=custom, width_html=0, +height_html=0, show_tooltips=True, show_title=True, show_meta=True, res=param[0],gain=param[1], minimum=m,maximum=M) diff --git a/src/Nerve_GIC/utilities/Nerve.cpp b/src/Nerve_GIC/utilities/Nerve.cpp new file mode 100644 index 00000000..6abdedc7 --- /dev/null +++ b/src/Nerve_GIC/utilities/Nerve.cpp @@ -0,0 +1,96 @@ +/* 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): Mathieu Carrière + * + * Copyright (C) 2017 INRIA + * + * 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 . + */ + +#include + +#include +#include + +void usage(int nbArgs, char *const progName) { + std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; + std::cerr << "Usage: " << progName << " filename.off coordinate resolution gain [--v] \n"; + std::cerr << " i.e.: " << progName << " ../../data/points/human.off 2 10 0.3 --v \n"; + exit(-1); // ----- >> +} + +int main(int argc, char **argv) { + if ((argc != 5) && (argc != 6)) usage(argc, argv[0]); + + using Point = std::vector; + + std::string off_file_name(argv[1]); + int coord = atoi(argv[2]); + int resolution = atoi(argv[3]); + double gain = atof(argv[4]); + bool verb = 0; + if (argc == 6) verb = 1; + + // -------------------------------- + // Init of a Nerve from an OFF file + // -------------------------------- + + Gudhi::cover_complex::Cover_complex SC; + SC.set_verbose(verb); + + bool check = SC.read_point_cloud(off_file_name); + + if (!check) { + std::cout << "Incorrect OFF file." << std::endl; + } else { + SC.set_type("Nerve"); + + SC.set_color_from_coordinate(coord); + SC.set_function_from_coordinate(coord); + + SC.set_graph_from_OFF(); + SC.set_resolution_with_interval_number(resolution); + SC.set_gain(gain); + SC.set_cover_from_function(); + + SC.find_simplices(); + + SC.write_info(); + + Gudhi::Simplex_tree<> stree; + SC.create_complex(stree); + SC.compute_PD(); + + // ---------------------------------------------------------------------------- + // Display information about the graph induced complex + // ---------------------------------------------------------------------------- + + if (verb) { + std::cout << "Nerve is of dimension " << stree.dimension() << " - " << stree.num_simplices() << " simplices - " + << stree.num_vertices() << " vertices." << std::endl; + + std::cout << "Iterator on Nerve simplices" << std::endl; + for (auto f_simplex : stree.filtration_simplex_range()) { + for (auto vertex : stree.simplex_vertex_range(f_simplex)) { + std::cout << vertex << " "; + } + std::cout << std::endl; + } + } + } + + return 0; +} diff --git a/src/Nerve_GIC/utilities/Nerve.txt b/src/Nerve_GIC/utilities/Nerve.txt new file mode 100644 index 00000000..839ff45e --- /dev/null +++ b/src/Nerve_GIC/utilities/Nerve.txt @@ -0,0 +1,63 @@ +Min function value = -0.979672 and Max function value = 0.816414 +Interval 0 = [-0.979672, -0.761576] +Interval 1 = [-0.838551, -0.581967] +Interval 2 = [-0.658942, -0.402359] +Interval 3 = [-0.479334, -0.22275] +Interval 4 = [-0.299725, -0.0431415] +Interval 5 = [-0.120117, 0.136467] +Interval 6 = [0.059492, 0.316076] +Interval 7 = [0.239101, 0.495684] +Interval 8 = [0.418709, 0.675293] +Interval 9 = [0.598318, 0.816414] +Computing preimages... +Computing connected components... +.txt generated. It can be visualized with e.g. python KeplerMapperVisuFromTxtFile.py and firefox. +5 interval(s) in dimension 0: + [-0.909111, 0.00817529] + [-0.171433, 0.367392] + [-0.171433, 0.367392] + [-0.909111, 0.745853] +0 interval(s) in dimension 1: +Nerve is of dimension 1 - 41 simplices - 21 vertices. +Iterator on Nerve simplices +1 +0 +4 +4 0 +2 +2 1 +8 +8 2 +5 +5 4 +9 +9 8 +13 +13 5 +14 +14 9 +19 +19 13 +25 +32 +20 +32 20 +33 +33 25 +26 +26 14 +26 19 +42 +42 26 +34 +34 33 +27 +27 20 +35 +35 27 +35 34 +42 35 +44 +44 35 +54 +54 44 \ No newline at end of file diff --git a/src/Nerve_GIC/utilities/VoronoiGIC.cpp b/src/Nerve_GIC/utilities/VoronoiGIC.cpp new file mode 100644 index 00000000..32431cc2 --- /dev/null +++ b/src/Nerve_GIC/utilities/VoronoiGIC.cpp @@ -0,0 +1,90 @@ +/* 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): Mathieu Carrière + * + * Copyright (C) 2017 INRIA + * + * 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 . + */ + +#include + +#include +#include + +void usage(int nbArgs, char *const progName) { + std::cerr << "Error: Number of arguments (" << nbArgs << ") is not correct\n"; + std::cerr << "Usage: " << progName << " filename.off N [--v] \n"; + std::cerr << " i.e.: " << progName << " ../../data/points/human.off 100 --v \n"; + exit(-1); // ----- >> +} + +int main(int argc, char **argv) { + if ((argc != 3) && (argc != 4)) usage(argc, argv[0]); + + using Point = std::vector; + + std::string off_file_name(argv[1]); + int m = atoi(argv[2]); + bool verb = 0; + if (argc == 4) verb = 1; + + // ---------------------------------------------------------------------------- + // Init of a graph induced complex from an OFF file + // ---------------------------------------------------------------------------- + + Gudhi::cover_complex::Cover_complex GIC; + GIC.set_verbose(verb); + + bool check = GIC.read_point_cloud(off_file_name); + + if (!check) { + std::cout << "Incorrect OFF file." << std::endl; + } else { + GIC.set_type("GIC"); + + GIC.set_color_from_coordinate(); + + GIC.set_graph_from_OFF(); + GIC.set_cover_from_Voronoi(Gudhi::Euclidean_distance(), m); + + GIC.find_simplices(); + + GIC.plot_OFF(); + + Gudhi::Simplex_tree<> stree; + GIC.create_complex(stree); + + // ---------------------------------------------------------------------------- + // Display information about the graph induced complex + // ---------------------------------------------------------------------------- + + if (verb) { + std::cout << "Graph induced complex is of dimension " << stree.dimension() << " - " << stree.num_simplices() + << " simplices - " << stree.num_vertices() << " vertices." << std::endl; + + std::cout << "Iterator on graph induced complex simplices" << std::endl; + for (auto f_simplex : stree.filtration_simplex_range()) { + for (auto vertex : stree.simplex_vertex_range(f_simplex)) { + std::cout << vertex << " "; + } + std::cout << std::endl; + } + } + } + + return 0; +} diff --git a/src/Nerve_GIC/utilities/km.py b/src/Nerve_GIC/utilities/km.py new file mode 100755 index 00000000..53024aab --- /dev/null +++ b/src/Nerve_GIC/utilities/km.py @@ -0,0 +1,390 @@ +from __future__ import division +import numpy as np +from collections import defaultdict +import json +import itertools +from sklearn import cluster, preprocessing, manifold +from datetime import datetime +import sys + +class KeplerMapper(object): + # With this class you can build topological networks from (high-dimensional) data. + # + # 1) Fit a projection/lens/function to a dataset and transform it. + # For instance "mean_of_row(x) for x in X" + # 2) Map this projection with overlapping intervals/hypercubes. + # Cluster the points inside the interval + # (Note: we cluster on the inverse image/original data to lessen projection loss). + # If two clusters/nodes have the same members (due to the overlap), then: + # connect these with an edge. + # 3) Visualize the network using HTML and D3.js. + # + # functions + # --------- + # fit_transform: Create a projection (lens) from a dataset + # map: Apply Mapper algorithm on this projection and build a simplicial complex + # visualize: Turns the complex dictionary into a HTML/D3.js visualization + + def __init__(self, verbose=2): + self.verbose = verbose + + self.chunk_dist = [] + self.overlap_dist = [] + self.d = [] + self.nr_cubes = 0 + self.overlap_perc = 0 + self.clusterer = False + + def fit_transform(self, X, projection="sum", scaler=preprocessing.MinMaxScaler()): + # Creates the projection/lens from X. + # + # Input: X. Input features as a numpy array. + # Output: projected_X. original data transformed to a projection (lens). + # + # parameters + # ---------- + # projection: Projection parameter is either a string, + # a scikit class with fit_transform, like manifold.TSNE(), + # or a list of dimension indices. + # scaler: if None, do no scaling, else apply scaling to the projection + # Default: Min-Max scaling + + self.scaler = scaler + self.projection = str(projection) + + # Detect if projection is a class (for scikit-learn) + #if str(type(projection))[1:6] == "class": #TODO: de-ugly-fy + # reducer = projection + # if self.verbose > 0: + # try: + # projection.set_params(**{"verbose":self.verbose}) + # except: + # pass + # print("\n..Projecting data using: \n\t%s\n"%str(projection)) + # X = reducer.fit_transform(X) + + # Detect if projection is a string (for standard functions) + if isinstance(projection, str): + if self.verbose > 0: + print("\n..Projecting data using: %s"%(projection)) + # Stats lenses + if projection == "sum": # sum of row + X = np.sum(X, axis=1).reshape((X.shape[0],1)) + if projection == "mean": # mean of row + X = np.mean(X, axis=1).reshape((X.shape[0],1)) + if projection == "median": # mean of row + X = np.median(X, axis=1).reshape((X.shape[0],1)) + if projection == "max": # max of row + X = np.max(X, axis=1).reshape((X.shape[0],1)) + if projection == "min": # min of row + X = np.min(X, axis=1).reshape((X.shape[0],1)) + if projection == "std": # std of row + X = np.std(X, axis=1).reshape((X.shape[0],1)) + + if projection == "dist_mean": # Distance of x to mean of X + X_mean = np.mean(X, axis=0) + X = np.sum(np.sqrt((X - X_mean)**2), axis=1).reshape((X.shape[0],1)) + + # Detect if projection is a list (with dimension indices) + if isinstance(projection, list): + if self.verbose > 0: + print("\n..Projecting data using: %s"%(str(projection))) + X = X[:,np.array(projection)] + + # Scaling + if scaler is not None: + if self.verbose > 0: + print("\n..Scaling with: %s\n"%str(scaler)) + X = scaler.fit_transform(X) + + return X + + def map(self, projected_X, inverse_X=None, clusterer=cluster.DBSCAN(eps=0.5,min_samples=3), nr_cubes=10, overlap_perc=0.1): + # This maps the data to a simplicial complex. Returns a dictionary with nodes and links. + # + # Input: projected_X. A Numpy array with the projection/lens. + # Output: complex. A dictionary with "nodes", "links" and "meta information" + # + # parameters + # ---------- + # projected_X projected_X. A Numpy array with the projection/lens. Required. + # inverse_X Numpy array or None. If None then the projection itself is used for clustering. + # clusterer Scikit-learn API compatible clustering algorithm. Default: DBSCAN + # nr_cubes Int. The number of intervals/hypercubes to create. + # overlap_perc Float. The percentage of overlap "between" the intervals/hypercubes. + + start = datetime.now() + + # Helper function + def cube_coordinates_all(nr_cubes, nr_dimensions): + # Helper function to get origin coordinates for our intervals/hypercubes + # Useful for looping no matter the number of cubes or dimensions + # Example: if there are 4 cubes per dimension and 3 dimensions + # return the bottom left (origin) coordinates of 64 hypercubes, + # as a sorted list of Numpy arrays + # TODO: elegance-ify... + l = [] + for x in range(nr_cubes): + l += [x] * nr_dimensions + return [np.array(list(f)) for f in sorted(set(itertools.permutations(l,nr_dimensions)))] + + nodes = defaultdict(list) + links = defaultdict(list) + complex = {} + self.nr_cubes = nr_cubes + self.clusterer = clusterer + self.overlap_perc = overlap_perc + + if self.verbose > 0: + print("Mapping on data shaped %s using dimensions\n"%(str(projected_X.shape))) + + # If inverse image is not provided, we use the projection as the inverse image (suffer projection loss) + if inverse_X is None: + inverse_X = projected_X + + # We chop up the min-max column ranges into 'nr_cubes' parts + self.chunk_dist = (np.max(projected_X, axis=0) - np.min(projected_X, axis=0))/nr_cubes + + # We calculate the overlapping windows distance + self.overlap_dist = self.overlap_perc * self.chunk_dist + + # We find our starting point + self.d = np.min(projected_X, axis=0) + + # Use a dimension index array on the projected X + # (For now this uses the entire dimensionality, but we keep for experimentation) + di = np.array([x for x in range(projected_X.shape[1])]) + + # Prefix'ing the data with ID's + ids = np.array([x for x in range(projected_X.shape[0])]) + projected_X = np.c_[ids,projected_X] + inverse_X = np.c_[ids,inverse_X] + + # Subdivide the projected data X in intervals/hypercubes with overlap + if self.verbose > 0: + total_cubes = len(cube_coordinates_all(nr_cubes,projected_X.shape[1])) + print("Creating %s hypercubes."%total_cubes) + + for i, coor in enumerate(cube_coordinates_all(nr_cubes,di.shape[0])): + # Slice the hypercube + hypercube = projected_X[ np.invert(np.any((projected_X[:,di+1] >= self.d[di] + (coor * self.chunk_dist[di])) & + (projected_X[:,di+1] < self.d[di] + (coor * self.chunk_dist[di]) + self.chunk_dist[di] + self.overlap_dist[di]) == False, axis=1 )) ] + + if self.verbose > 1: + print("There are %s points in cube_%s / %s with starting range %s"% + (hypercube.shape[0],i,total_cubes,self.d[di] + (coor * self.chunk_dist[di]))) + + # If at least one sample inside the hypercube + if hypercube.shape[0] > 0: + # Cluster the data point(s) in the cube, skipping the id-column + # Note that we apply clustering on the inverse image (original data samples) that fall inside the cube. + inverse_x = inverse_X[[int(nn) for nn in hypercube[:,0]]] + + clusterer.fit(inverse_x[:,1:]) + + if self.verbose > 1: + print("Found %s clusters in cube_%s\n"%(np.unique(clusterer.labels_[clusterer.labels_ > -1]).shape[0],i)) + + #Now for every (sample id in cube, predicted cluster label) + for a in np.c_[hypercube[:,0],clusterer.labels_]: + if a[1] != -1: #if not predicted as noise + cluster_id = str(coor[0])+"_"+str(i)+"_"+str(a[1])+"_"+str(coor)+"_"+str(self.d[di] + (coor * self.chunk_dist[di])) # TODO: de-rudimentary-ify + nodes[cluster_id].append( int(a[0]) ) # Append the member id's as integers + else: + if self.verbose > 1: + print("Cube_%s is empty.\n"%(i)) + + # Create links when clusters from different hypercubes have members with the same sample id. + candidates = itertools.combinations(nodes.keys(),2) + for candidate in candidates: + # if there are non-unique members in the union + if len(nodes[candidate[0]]+nodes[candidate[1]]) != len(set(nodes[candidate[0]]+nodes[candidate[1]])): + links[candidate[0]].append( candidate[1] ) + + # Reporting + if self.verbose > 0: + nr_links = 0 + for k in links: + nr_links += len(links[k]) + print("\ncreated %s edges and %s nodes in %s."%(nr_links,len(nodes),str(datetime.now()-start))) + + complex["nodes"] = nodes + complex["links"] = links + complex["meta"] = self.projection + + return complex + + def visualize(self, complex, color_function="", path_html="mapper_visualization_output.html", title="My Data", + graph_link_distance=30, graph_gravity=0.1, graph_charge=-120, custom_tooltips=None, width_html=0, + height_html=0, show_tooltips=True, show_title=True, show_meta=True, res=0,gain=0,minimum=0,maximum=0): + # Turns the dictionary 'complex' in a html file with d3.js + # + # Input: complex. Dictionary (output from calling .map()) + # Output: a HTML page saved as a file in 'path_html'. + # + # parameters + # ---------- + # color_function string. Not fully implemented. Default: "" (distance to origin) + # path_html file path as string. Where to save the HTML page. + # title string. HTML page document title and first heading. + # graph_link_distance int. Edge length. + # graph_gravity float. "Gravity" to center of layout. + # graph_charge int. charge between nodes. + # custom_tooltips None or Numpy Array. You could use "y"-label array for this. + # width_html int. Width of canvas. Default: 0 (full width) + # height_html int. Height of canvas. Default: 0 (full height) + # show_tooltips bool. default:True + # show_title bool. default:True + # show_meta bool. default:True + + # Format JSON for D3 graph + json_s = {} + json_s["nodes"] = [] + json_s["links"] = [] + k2e = {} # a key to incremental int dict, used for id's when linking + + for e, k in enumerate(complex["nodes"]): + # Tooltip and node color formatting, TODO: de-mess-ify + if custom_tooltips is not None: + tooltip_s = "

Cluster %s

"%k + " ".join(str(custom_tooltips[complex["nodes"][k][0]]).split(" ")) + if maximum == minimum: + tooltip_i = 0 + else: + tooltip_i = int(30*(custom_tooltips[complex["nodes"][k][0]]-minimum)/(maximum-minimum)) + json_s["nodes"].append({"name": str(k), "tooltip": tooltip_s, "group": 2 * int(np.log(complex["nodes"][k][2])), "color": tooltip_i}) + else: + tooltip_s = "

Cluster %s

Contains %s members."%(k,len(complex["nodes"][k])) + json_s["nodes"].append({"name": str(k), "tooltip": tooltip_s, "group": 2 * int(np.log(len(complex["nodes"][k]))), "color": str(k.split("_")[0])}) + k2e[k] = e + for k in complex["links"]: + for link in complex["links"][k]: + json_s["links"].append({"source": k2e[k], "target":k2e[link],"value":1}) + + # Width and height of graph in HTML output + if width_html == 0: + width_css = "100%" + width_js = 'document.getElementById("holder").offsetWidth-20' + else: + width_css = "%spx" % width_html + width_js = "%s" % width_html + if height_html == 0: + height_css = "100%" + height_js = 'document.getElementById("holder").offsetHeight-20' + else: + height_css = "%spx" % height_html + height_js = "%s" % height_html + + # Whether to show certain UI elements or not + if show_tooltips == False: + tooltips_display = "display: none;" + else: + tooltips_display = "" + + if show_meta == False: + meta_display = "display: none;" + else: + meta_display = "" + + if show_title == False: + title_display = "display: none;" + else: + title_display = "" + + with open(path_html,"wb") as outfile: + html = """ + + + %s | KeplerMapper + + + +
+

%s

+

+ Lens
%s

+ Length of intervals
%s

+ Overlap percentage
%s%%

+ Color Function
%s +

+
+ + """%(title,width_css, height_css, title_display, meta_display, tooltips_display, title,complex["meta"],res,gain*100,color_function,width_js,height_js,graph_charge,graph_link_distance,graph_gravity,json.dumps(json_s)) + outfile.write(html.encode("utf-8")) + if self.verbose > 0: + print("\nWrote d3.js graph to '%s'"%path_html) diff --git a/src/Nerve_GIC/utilities/km.py.COPYRIGHT b/src/Nerve_GIC/utilities/km.py.COPYRIGHT new file mode 100644 index 00000000..bef7b121 --- /dev/null +++ b/src/Nerve_GIC/utilities/km.py.COPYRIGHT @@ -0,0 +1,26 @@ +km.py is a fork of https://github.com/MLWave/kepler-mapper. +Only the visualization part has been kept (Mapper part has been removed). + +This file has te following Copyright : + +The MIT License (MIT) + +Copyright (c) 2015 Triskelion - HJ van Veen - info@mlwave.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/src/Persistence_representations/example/CMakeLists.txt b/src/Persistence_representations/example/CMakeLists.txt index b8ce8ea6..eb3258f8 100644 --- a/src/Persistence_representations/example/CMakeLists.txt +++ b/src/Persistence_representations/example/CMakeLists.txt @@ -2,28 +2,23 @@ cmake_minimum_required(VERSION 2.6) project(Persistence_representations_example) add_executable ( Persistence_representations_example_landscape_on_grid persistence_landscape_on_grid.cpp ) -target_link_libraries(Persistence_representations_example_landscape_on_grid ${Boost_SYSTEM_LIBRARY}) add_test(NAME Persistence_representations_example_landscape_on_grid COMMAND $) add_executable ( Persistence_representations_example_landscape persistence_landscape.cpp ) -target_link_libraries(Persistence_representations_example_landscape ${Boost_SYSTEM_LIBRARY}) add_test(NAME Persistence_representations_example_landscape COMMAND $) add_executable ( Persistence_representations_example_intervals persistence_intervals.cpp ) -target_link_libraries(Persistence_representations_example_intervals ${Boost_SYSTEM_LIBRARY}) add_test(NAME Persistence_representations_example_intervals COMMAND $ "${CMAKE_SOURCE_DIR}/data/persistence_diagram/first.pers") add_executable ( Persistence_representations_example_vectors persistence_vectors.cpp ) -target_link_libraries(Persistence_representations_example_vectors ${Boost_SYSTEM_LIBRARY}) add_test(NAME Persistence_representations_example_vectors COMMAND $) add_executable ( Persistence_representations_example_heat_maps persistence_heat_maps.cpp ) -target_link_libraries(Persistence_representations_example_heat_maps ${Boost_SYSTEM_LIBRARY}) add_test(NAME Persistence_representations_example_heat_maps COMMAND $) diff --git a/src/Persistence_representations/test/CMakeLists.txt b/src/Persistence_representations/test/CMakeLists.txt index 4483de07..335a71ef 100644 --- a/src/Persistence_representations/test/CMakeLists.txt +++ b/src/Persistence_representations/test/CMakeLists.txt @@ -6,38 +6,38 @@ include(GUDHI_test_coverage) # copy data directory for tests purpose. file(COPY data DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/) add_executable ( Persistence_intervals_test_unit persistence_intervals_test.cpp ) -target_link_libraries(Persistence_intervals_test_unit ${Boost_SYSTEM_LIBRARY} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) +target_link_libraries(Persistence_intervals_test_unit ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) gudhi_add_coverage_test(Persistence_intervals_test_unit) add_executable (Vector_representation_test_unit vector_representation_test.cpp ) -target_link_libraries(Vector_representation_test_unit ${Boost_SYSTEM_LIBRARY} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) +target_link_libraries(Vector_representation_test_unit ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) gudhi_add_coverage_test(Vector_representation_test_unit) add_executable (Persistence_lanscapes_test_unit persistence_lanscapes_test.cpp ) -target_link_libraries(Persistence_lanscapes_test_unit ${Boost_SYSTEM_LIBRARY} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) +target_link_libraries(Persistence_lanscapes_test_unit ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) gudhi_add_coverage_test(Persistence_lanscapes_test_unit) add_executable ( Persistence_lanscapes_on_grid_test_unit persistence_lanscapes_on_grid_test.cpp ) -target_link_libraries(Persistence_lanscapes_on_grid_test_unit ${Boost_SYSTEM_LIBRARY} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) +target_link_libraries(Persistence_lanscapes_on_grid_test_unit ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) gudhi_add_coverage_test(Persistence_lanscapes_on_grid_test_unit) add_executable (Persistence_heat_maps_test_unit persistence_heat_maps_test.cpp ) -target_link_libraries(Persistence_heat_maps_test_unit ${Boost_SYSTEM_LIBRARY} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) +target_link_libraries(Persistence_heat_maps_test_unit ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) gudhi_add_coverage_test(Persistence_heat_maps_test_unit) add_executable ( Read_persistence_from_file_test_unit read_persistence_from_file_test.cpp ) -target_link_libraries(Read_persistence_from_file_test_unit ${Boost_SYSTEM_LIBRARY} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) +target_link_libraries(Read_persistence_from_file_test_unit ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) gudhi_add_coverage_test(Read_persistence_from_file_test_unit) if (NOT CGAL_WITH_EIGEN3_VERSION VERSION_LESS 4.8.1) add_executable (Persistence_intervals_with_distances_test_unit persistence_intervals_with_distances_test.cpp ) - target_link_libraries(Persistence_intervals_with_distances_test_unit ${Boost_SYSTEM_LIBRARY} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) + target_link_libraries(Persistence_intervals_with_distances_test_unit ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) if (TBB_FOUND) target_link_libraries(Persistence_intervals_with_distances_test_unit ${TBB_LIBRARIES}) endif(TBB_FOUND) diff --git a/src/common/doc/examples.h b/src/common/doc/examples.h new file mode 100644 index 00000000..40f202c7 --- /dev/null +++ b/src/common/doc/examples.h @@ -0,0 +1,99 @@ +// List of GUDHI examples - Doxygen needs at least a file tag to analyse comments +// In user_version, `find . -name "*.cpp"` in example and utilities folders +/*! @file Examples + * @example Alpha_complex/Alpha_complex_from_off.cpp + * @example Alpha_complex/Alpha_complex_from_points.cpp + * @example Bottleneck_distance/bottleneck_basic_example.cpp + * @example Bottleneck_distance/alpha_rips_persistence_bottleneck_distance.cpp + * @example Witness_complex/example_nearest_landmark_table.cpp + * @example Witness_complex/example_witness_complex_off.cpp + * @example Witness_complex/example_witness_complex_sphere.cpp + * @example Witness_complex/example_strong_witness_complex_off.cpp + * @example Simplex_tree/mini_simplex_tree.cpp + * @example Simplex_tree/graph_expansion_with_blocker.cpp + * @example Simplex_tree/simple_simplex_tree.cpp + * @example Simplex_tree/simplex_tree_from_cliques_of_graph.cpp + * @example Simplex_tree/example_alpha_shapes_3_simplex_tree_from_off_file.cpp + * @example Simplex_tree/cech_complex_cgal_mini_sphere_3d.cpp + * @example Persistent_cohomology/plain_homology.cpp + * @example Persistent_cohomology/persistence_from_file.cpp + * @example Persistent_cohomology/rips_persistence_step_by_step.cpp + * @example Persistent_cohomology/rips_persistence_via_boundary_matrix.cpp + * @example Persistent_cohomology/custom_persistence_sort.cpp + * @example Persistent_cohomology/persistence_from_simple_simplex_tree.cpp + * @example Persistent_cohomology/rips_multifield_persistence.cpp + * @example Skeleton_blocker/Skeleton_blocker_from_simplices.cpp + * @example Skeleton_blocker/Skeleton_blocker_iteration.cpp + * @example Skeleton_blocker/Skeleton_blocker_link.cpp + * @example Contraction/Garland_heckbert.cpp + * @example Contraction/Rips_contraction.cpp + * @example Bitmap_cubical_complex/Random_bitmap_cubical_complex.cpp + * @example common/example_CGAL_3D_points_off_reader.cpp + * @example common/example_vector_double_points_off_reader.cpp + * @example common/example_CGAL_points_off_reader.cpp + * @example Rips_complex/example_one_skeleton_rips_from_distance_matrix.cpp + * @example Rips_complex/example_one_skeleton_rips_from_points.cpp + * @example Rips_complex/example_rips_complex_from_csv_distance_matrix_file.cpp + * @example Rips_complex/example_rips_complex_from_off_file.cpp + * @example Persistence_representations/persistence_intervals.cpp + * @example Persistence_representations/persistence_vectors.cpp + * @example Persistence_representations/persistence_heat_maps.cpp + * @example Persistence_representations/persistence_landscape_on_grid.cpp + * @example Persistence_representations/persistence_landscape.cpp + * @example Tangential_complex/example_basic.cpp + * @example Tangential_complex/example_with_perturb.cpp + * @example Subsampling/example_custom_kernel.cpp + * @example Subsampling/example_choose_n_farthest_points.cpp + * @example Subsampling/example_sparsify_point_set.cpp + * @example Subsampling/example_pick_n_random_points.cpp + * @example Nerve_GIC/CoordGIC.cpp + * @example Nerve_GIC/Nerve.cpp + * @example Nerve_GIC/FuncGIC.cpp + * @example Nerve_GIC/VoronoiGIC.cpp + * @example Spatial_searching/example_spatial_searching.cpp + * @example Alpha_complex/alpha_complex_3d_persistence.cpp + * @example Alpha_complex/alpha_complex_persistence.cpp + * @example Alpha_complex/weighted_periodic_alpha_complex_3d_persistence.cpp + * @example Alpha_complex/weighted_alpha_complex_3d_persistence.cpp + * @example Alpha_complex/periodic_alpha_complex_3d_persistence.cpp + * @example Alpha_complex/exact_alpha_complex_3d_persistence.cpp + * @example Bottleneck_distance/bottleneck_distance.cpp + * @example Witness_complex/weak_witness_persistence.cpp + * @example Witness_complex/strong_witness_persistence.cpp + * @example Bitmap_cubical_complex/cubical_complex_persistence.cpp + * @example Bitmap_cubical_complex/periodic_cubical_complex_persistence.cpp + * @example common/off_file_from_shape_generator.cpp + * @example Rips_complex/rips_distance_matrix_persistence.cpp + * @example Rips_complex/rips_persistence.cpp + * @example Persistence_representations/persistence_landscapes_on_grid/create_landscapes_on_grid.cpp + * @example Persistence_representations/persistence_landscapes_on_grid/plot_landscapes_on_grid.cpp + * @example Persistence_representations/persistence_landscapes_on_grid/compute_scalar_product_of_landscapes_on_grid.cpp + * @example Persistence_representations/persistence_landscapes_on_grid/compute_distance_of_landscapes_on_grid.cpp + * @example Persistence_representations/persistence_landscapes_on_grid/average_landscapes_on_grid.cpp + * @example Persistence_representations/persistence_intervals/compute_birth_death_range_in_persistence_diagram.cpp + * @example Persistence_representations/persistence_intervals/compute_number_of_dominant_intervals.cpp + * @example Persistence_representations/persistence_intervals/plot_persistence_Betti_numbers.cpp + * @example Persistence_representations/persistence_intervals/plot_persistence_intervals.cpp + * @example Persistence_representations/persistence_intervals/plot_histogram_of_intervals_lengths.cpp + * @example Persistence_representations/persistence_intervals/compute_bottleneck_distance.cpp + * @example Persistence_representations/persistence_heat_maps/create_pssk.cpp + * @example Persistence_representations/persistence_heat_maps/create_p_h_m_weighted_by_arctan_of_their_persistence.cpp + * @example Persistence_representations/persistence_heat_maps/create_p_h_m_weighted_by_squared_diag_distance.cpp + * @example Persistence_representations/persistence_heat_maps/compute_distance_of_persistence_heat_maps.cpp + * @example Persistence_representations/persistence_heat_maps/compute_scalar_product_of_persistence_heat_maps.cpp + * @example Persistence_representations/persistence_heat_maps/create_p_h_m_weighted_by_distance_from_diagonal.cpp + * @example Persistence_representations/persistence_heat_maps/average_persistence_heat_maps.cpp + * @example Persistence_representations/persistence_heat_maps/plot_persistence_heat_map.cpp + * @example Persistence_representations/persistence_heat_maps/create_persistence_heat_maps.cpp + * @example Persistence_representations/persistence_vectors/plot_persistence_vectors.cpp + * @example Persistence_representations/persistence_vectors/compute_distance_of_persistence_vectors.cpp + * @example Persistence_representations/persistence_vectors/average_persistence_vectors.cpp + * @example Persistence_representations/persistence_vectors/create_persistence_vectors.cpp + * @example Persistence_representations/persistence_vectors/compute_scalar_product_of_persistence_vectors.cpp + * @example Persistence_representations/persistence_landscapes/average_landscapes.cpp + * @example Persistence_representations/persistence_landscapes/compute_scalar_product_of_landscapes.cpp + * @example Persistence_representations/persistence_landscapes/create_landscapes.cpp + * @example Persistence_representations/persistence_landscapes/compute_distance_of_landscapes.cpp + * @example Persistence_representations/persistence_landscapes/plot_landscapes.cpp + */ + diff --git a/src/common/doc/installation.h b/src/common/doc/installation.h new file mode 100644 index 00000000..25675cc5 --- /dev/null +++ b/src/common/doc/installation.h @@ -0,0 +1,263 @@ +/*! \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 + * + * \subsection documentationgeneration Documentation + * To generate the documentation, Doxygen is required. + * Run the following command in a terminal: +\verbatim +make doxygen +# Documentation will be generated in the folder YYYY-MM-DD-hh-mm-ss_GUDHI_X.Y.Z/doc/html/ +# You can customize the directory name by calling `cmake -DUSER_VERSION_DIR=/my/custom/folder` +\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/rips_multifield_persistence.cpp + * + * Having GMP version 4.2 or higher installed is recommended. + * + * \subsection cgal CGAL + * The \ref alpha_complex data structure, \ref bottleneck_distance, and few examples requires CGAL, which is a C++ + * library which provides easy access to efficient and reliable geometric algorithms. + * + * \note There is no need to install CGAL, you can just cmake . && make CGAL (or even + * cmake -DCGAL_HEADER_ONLY=ON . for CGAL version ≥ 4.8.0), thereafter you will be able to compile + * GUDHI by calling cmake -DCGAL_DIR=/your/path/to/CGAL-X.Y .. && make + * + * Having CGAL version 4.4.0 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/utilities require the Computational Geometry Algorithms + * Library (CGAL \cite cgal:eb-15b) and will not be built if CGAL is not installed: + * \li + * Alpha_complex/alpha_complex_3d_persistence.cpp + * \li + * Alpha_complex/exact_alpha_complex_3d_persistence.cpp + * \li + * Alpha_complex/weighted_alpha_complex_3d_persistence.cpp + * \li + * Simplex_tree/example_alpha_shapes_3_simplex_tree_from_off_file.cpp + * + * The following examples/utilities require CGAL version ≥ 4.6.0: + * \li + * Witness_complex/strong_witness_persistence.cpp + * \li + * Witness_complex/weak_witness_persistence.cpp + * \li + * Witness_complex/example_strong_witness_complex_off.cpp + * \li + * Witness_complex/example_witness_complex_off.cpp + * \li + * Witness_complex/example_witness_complex_sphere.cpp + * + * The following example requires CGAL version ≥ 4.7.0: + * \li + * Alpha_complex/Alpha_complex_from_off.cpp + * \li + * Alpha_complex/Alpha_complex_from_points.cpp + * \li + * Alpha_complex/alpha_complex_persistence.cpp + * \li + * Alpha_complex/periodic_alpha_complex_3d_persistence.cpp + * \li + * Persistent_cohomology/custom_persistence_sort.cpp + * + * The following example requires CGAL version ≥ 4.8.1: + * \li + * Bottleneck_distance/alpha_rips_persistence_bottleneck_distance.cpp.cpp + * \li + * Bottleneck_distance/bottleneck_basic_example.cpp + * \li + * Bottleneck_distance/bottleneck_distance.cpp + * \li + * Nerve_GIC/CoordGIC.cpp + * \li + * Nerve_GIC/FuncGIC.cpp + * \li + * Nerve_GIC/Nerve.cpp + * \li + * Nerve_GIC/VoronoiGIC.cpp + * \li + * Spatial_searching/example_spatial_searching.cpp + * \li + * Subsampling/example_choose_n_farthest_points.cpp + * \li + * Subsampling/example_custom_kernel.cpp + * \li + * Subsampling/example_pick_n_random_points.cpp + * \li + * Subsampling/example_sparsify_point_set.cpp + * \li + * Tangential_complex/example_basic.cpp + * \li + * Tangential_complex/example_with_perturb.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 examples/utilities require the Eigen3 and will not be + * built if Eigen3 is not installed: + * \li + * Alpha_complex/Alpha_complex_from_off.cpp + * \li + * Alpha_complex/Alpha_complex_from_points.cpp + * \li + * Alpha_complex/alpha_complex_persistence.cpp + * \li + * Alpha_complex/periodic_alpha_complex_3d_persistence.cpp + * \li + * Bottleneck_distance/alpha_rips_persistence_bottleneck_distance.cpp.cpp + * \li + * Persistent_cohomology/custom_persistence_sort.cpp + * \li + * Spatial_searching/example_spatial_searching.cpp + * \li + * Subsampling/example_choose_n_farthest_points.cpp + * \li + * Subsampling/example_custom_kernel.cpp + * \li + * Subsampling/example_pick_n_random_points.cpp + * \li + * Subsampling/example_sparsify_point_set.cpp + * \li + * Tangential_complex/example_basic.cpp + * \li + * Tangential_complex/example_with_perturb.cpp + * \li + * Witness_complex/strong_witness_persistence.cpp + * \li + * Witness_complex/weak_witness_persistence.cpp + * \li + * Witness_complex/example_strong_witness_complex_off.cpp + * \li + * Witness_complex/example_witness_complex_off.cpp + * \li + * Witness_complex/example_witness_complex_sphere.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/utilities are using Intel® TBB if installed: + * \li + * Alpha_complex/Alpha_complex_from_off.cpp + * \li + * Alpha_complex/Alpha_complex_from_points.cpp + * \li + * Alpha_complex/alpha_complex_3d_persistence.cpp + * \li + * Alpha_complex/alpha_complex_persistence.cpp + * \li + * Alpha_complex/exact_alpha_complex_3d_persistence.cpp + * \li + * Alpha_complex/periodic_alpha_complex_3d_persistence.cpp + * \li + * Alpha_complex/weighted_alpha_complex_3d_persistence.cpp + * \li + * Bitmap_cubical_complex/cubical_complex_persistence.cpp + * \li + * Bitmap_cubical_complex/periodic_cubical_complex_persistence.cpp + * \li + * Bitmap_cubical_complex/Random_bitmap_cubical_complex.cpp + * \li + * Nerve_GIC/CoordGIC.cpp + * \li + * Nerve_GIC/FuncGIC.cpp + * \li + * Nerve_GIC/Nerve.cpp + * \li + * Nerve_GIC/VoronoiGIC.cpp + * \li + * Simplex_tree/simple_simplex_tree.cpp + * \li + * Simplex_tree/example_alpha_shapes_3_simplex_tree_from_off_file.cpp + * \li + * Simplex_tree/simplex_tree_from_cliques_of_graph.cpp + * \li + * Simplex_tree/graph_expansion_with_blocker.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/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_step_by_step.cpp + * \li + * Persistent_cohomology/exact_alpha_complex_3d_persistence.cpp + * \li + * Persistent_cohomology/weighted_alpha_complex_3d_persistence.cpp + * \li + * Persistent_cohomology/custom_persistence_sort.cpp + * \li + * Rips_complex/example_one_skeleton_rips_from_points.cpp + * \li + * Rips_complex/example_rips_complex_from_off_file.cpp + * \li + * Rips_complex/rips_distance_matrix_persistence.cpp + * \li + * Rips_complex/rips_persistence.cpp + * \li + * Witness_complex/strong_witness_persistence.cpp + * \li + * Witness_complex/weak_witness_persistence.cpp + * \li + * Witness_complex/example_nearest_landmark_table.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 +*/ diff --git a/src/common/doc/main_page.h b/src/common/doc/main_page.h index 148ee670..b3e9ea03 100644 --- a/src/common/doc/main_page.h +++ b/src/common/doc/main_page.h @@ -93,7 +93,7 @@ - \subsection CoverComplexDataStructure Cover Complexes: Nerves and Graph Induced Complexes + \subsection CoverComplexDataStructure Cover Complexes \image html "gicvisu.jpg" "Graph Induced Complex of a point cloud." @@ -101,6 +101,7 @@ Author: Mathieu Carrière
Introduced in: GUDHI 2.1.0
Copyright: GPL v3
+ Requires: \ref cgal ≥ 4.8.1
Nerves and Graph Induced Complexes are cover complexes, i.e. simplicial complexes that provably contain @@ -250,305 +251,3 @@
*/ - -/*! \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 - * - * \subsection documentationgeneration Documentation - * To generate the documentation, Doxygen is required. - * Run the following command in a terminal: -\verbatim -make doxygen -# Documentation will be generated in the folder YYYY-MM-DD-hh-mm-ss_GUDHI_X.Y.Z/doc/html/ -# You can customize the directory name by calling `cmake -DUSER_VERSION_DIR=/my/custom/folder` -\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/rips_multifield_persistence.cpp - * - * Having GMP version 4.2 or higher installed is recommended. - * - * \subsection cgal CGAL - * The \ref alpha_complex data structure, \ref bottleneck_distance, and few examples requires CGAL, which is a C++ - * library which provides easy access to efficient and reliable geometric algorithms. - * - * \note There is no need to install CGAL, you can just cmake . && make CGAL (or even - * cmake -DCGAL_HEADER_ONLY=ON . for CGAL version ≥ 4.8.0), thereafter you will be able to compile - * GUDHI by calling cmake -DCGAL_DIR=/your/path/to/CGAL-X.Y .. && make - * - * Having CGAL version 4.4.0 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/utilities require the Computational Geometry Algorithms - * Library (CGAL \cite cgal:eb-15b) and will not be built if CGAL is not installed: - * \li - * Alpha_complex/alpha_complex_3d_persistence.cpp - * \li - * Alpha_complex/exact_alpha_complex_3d_persistence.cpp - * \li - * Alpha_complex/weighted_alpha_complex_3d_persistence.cpp - * \li - * Simplex_tree/example_alpha_shapes_3_simplex_tree_from_off_file.cpp - * - * The following examples/utilities require CGAL version ≥ 4.6.0: - * \li - * Witness_complex/strong_witness_persistence.cpp - * \li - * Witness_complex/weak_witness_persistence.cpp - * \li - * Witness_complex/example_strong_witness_complex_off.cpp - * \li - * Witness_complex/example_witness_complex_off.cpp - * \li - * Witness_complex/example_witness_complex_sphere.cpp - * - * The following example requires CGAL version ≥ 4.7.0: - * \li - * Alpha_complex/Alpha_complex_from_off.cpp - * \li - * Alpha_complex/Alpha_complex_from_points.cpp - * \li - * Alpha_complex/alpha_complex_persistence.cpp - * \li - * Alpha_complex/periodic_alpha_complex_3d_persistence.cpp - * \li - * Persistent_cohomology/custom_persistence_sort.cpp - * - * The following example requires CGAL version ≥ 4.8.1: - * \li - * Bottleneck_distance/alpha_rips_persistence_bottleneck_distance.cpp.cpp - * \li - * Bottleneck_distance/bottleneck_basic_example.cpp - * \li - * Bottleneck_distance/bottleneck_distance.cpp - * \li - * Spatial_searching/example_spatial_searching.cpp - * \li - * Subsampling/example_choose_n_farthest_points.cpp - * \li - * Subsampling/example_custom_kernel.cpp - * \li - * Subsampling/example_pick_n_random_points.cpp - * \li - * Subsampling/example_sparsify_point_set.cpp - * \li - * Tangential_complex/example_basic.cpp - * \li - * Tangential_complex/example_with_perturb.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 examples/utilities require the Eigen3 and will not be - * built if Eigen3 is not installed: - * \li - * Alpha_complex/Alpha_complex_from_off.cpp - * \li - * Alpha_complex/Alpha_complex_from_points.cpp - * \li - * Alpha_complex/alpha_complex_persistence.cpp - * \li - * Alpha_complex/periodic_alpha_complex_3d_persistence.cpp - * \li - * Bottleneck_distance/alpha_rips_persistence_bottleneck_distance.cpp.cpp - * \li - * Persistent_cohomology/custom_persistence_sort.cpp - * \li - * Spatial_searching/example_spatial_searching.cpp - * \li - * Subsampling/example_choose_n_farthest_points.cpp - * \li - * Subsampling/example_custom_kernel.cpp - * \li - * Subsampling/example_pick_n_random_points.cpp - * \li - * Subsampling/example_sparsify_point_set.cpp - * \li - * Tangential_complex/example_basic.cpp - * \li - * Tangential_complex/example_with_perturb.cpp - * \li - * Witness_complex/strong_witness_persistence.cpp - * \li - * Witness_complex/weak_witness_persistence.cpp - * \li - * Witness_complex/example_strong_witness_complex_off.cpp - * \li - * Witness_complex/example_witness_complex_off.cpp - * \li - * Witness_complex/example_witness_complex_sphere.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/utilities are using Intel® TBB if installed: - * \li - * Alpha_complex/Alpha_complex_from_off.cpp - * \li - * Alpha_complex/Alpha_complex_from_points.cpp - * \li - * Alpha_complex/alpha_complex_3d_persistence.cpp - * \li - * Alpha_complex/alpha_complex_persistence.cpp - * \li - * Alpha_complex/exact_alpha_complex_3d_persistence.cpp - * \li - * Alpha_complex/periodic_alpha_complex_3d_persistence.cpp - * \li - * Alpha_complex/weighted_alpha_complex_3d_persistence.cpp - * \li - * Bitmap_cubical_complex/cubical_complex_persistence.cpp - * \li - * Bitmap_cubical_complex/periodic_cubical_complex_persistence.cpp - * \li - * Bitmap_cubical_complex/Random_bitmap_cubical_complex.cpp - * \li - * Simplex_tree/simple_simplex_tree.cpp - * \li - * Simplex_tree/example_alpha_shapes_3_simplex_tree_from_off_file.cpp - * \li - * Simplex_tree/simplex_tree_from_cliques_of_graph.cpp - * \li - * Simplex_tree/graph_expansion_with_blocker.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/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_step_by_step.cpp - * \li - * Persistent_cohomology/exact_alpha_complex_3d_persistence.cpp - * \li - * Persistent_cohomology/weighted_alpha_complex_3d_persistence.cpp - * \li - * Persistent_cohomology/custom_persistence_sort.cpp - * \li - * Rips_complex/example_one_skeleton_rips_from_points.cpp - * \li - * Rips_complex/example_rips_complex_from_off_file.cpp - * \li - * Rips_complex/rips_distance_matrix_persistence.cpp - * \li - * Rips_complex/rips_persistence.cpp - * \li - * Witness_complex/strong_witness_persistence.cpp - * \li - * Witness_complex/weak_witness_persistence.cpp - * \li - * Witness_complex/example_nearest_landmark_table.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 Alpha_complex/alpha_complex_3d_persistence.cpp - * @example Alpha_complex/alpha_complex_persistence.cpp - * @example Alpha_complex/exact_alpha_complex_3d_persistence.cpp - * @example Alpha_complex/periodic_alpha_complex_3d_persistence.cpp - * @example Alpha_complex/weighted_alpha_complex_3d_persistence.cpp - * @example Bottleneck_distance/alpha_rips_persistence_bottleneck_distance.cpp - * @example Bottleneck_distance/bottleneck_basic_example.cpp - * @example Bottleneck_distance/bottleneck_distance.cpp - * @example Bitmap_cubical_complex/cubical_complex_persistence.cpp - * @example Bitmap_cubical_complex/periodic_cubical_complex_persistence.cpp - * @example Bitmap_cubical_complex/Random_bitmap_cubical_complex.cpp - * @example common/example_CGAL_3D_points_off_reader.cpp - * @example common/example_CGAL_points_off_reader.cpp - * @example Contraction/Garland_heckbert.cpp - * @example Contraction/Rips_contraction.cpp - * @example Persistent_cohomology/rips_persistence_via_boundary_matrix.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/custom_persistence_sort.cpp - * @example Persistent_cohomology/rips_persistence_step_by_step.cpp - * @example Rips_complex/example_one_skeleton_rips_from_points.cpp - * @example Rips_complex/example_rips_complex_from_off_file.cpp - * @example Rips_complex/rips_persistence.cpp - * @example Rips_complex/rips_distance_matrix_persistence.cpp - * @example Simplex_tree/mini_simplex_tree.cpp - * @example Simplex_tree/simple_simplex_tree.cpp - * @example Simplex_tree/example_alpha_shapes_3_simplex_tree_from_off_file.cpp - * @example Simplex_tree/simplex_tree_from_cliques_of_graph.cpp - * @example Simplex_tree/graph_expansion_with_blocker.cpp - * @example Skeleton_blocker/Skeleton_blocker_from_simplices.cpp - * @example Skeleton_blocker/Skeleton_blocker_iteration.cpp - * @example Skeleton_blocker/Skeleton_blocker_link.cpp - * @example Spatial_searching/example_spatial_searching.cpp - * @example Subsampling/example_choose_n_farthest_points.cpp - * @example Subsampling/example_custom_kernel.cpp - * @example Subsampling/example_pick_n_random_points.cpp - * @example Subsampling/example_sparsify_point_set.cpp - * @example Tangential_complex/example_basic.cpp - * @example Tangential_complex/example_with_perturb.cpp - * @example Witness_complex/example_nearest_landmark_table.cpp - * @example Witness_complex/example_strong_witness_complex_off.cpp - * @example Witness_complex/example_witness_complex_off.cpp - * @example Witness_complex/example_witness_complex_sphere.cpp - * @example Witness_complex/weak_witness_persistence.cpp - * @example Witness_complex/strong_witness_persistence.cpp - */ - -- cgit v1.2.3 From b674e9a5fae8bdbb22eadb9a7c0013ce84451743 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Fri, 26 Jan 2018 14:55:28 +0000 Subject: Move documentation Copyright in footer Removed from each module git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@3167 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 7595f2d18cdc3773bbd96fa9fed414876ff9fdc7 --- src/Alpha_complex/doc/Intro_alpha_complex.h | 4 +--- src/Bitmap_cubical_complex/doc/Gudhi_Cubical_Complex_doc.h | 1 - src/Contraction/include/gudhi/Edge_contraction.h | 4 ---- src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 1 - .../doc/Persistence_representations_doc.h | 1 - src/Persistent_cohomology/doc/Intro_persistent_cohomology.h | 1 - src/Rips_complex/doc/Intro_rips_complex.h | 2 -- src/Simplex_tree/doc/Intro_simplex_tree.h | 1 - src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h | 3 --- src/Spatial_searching/doc/Intro_spatial_searching.h | 2 -- src/Subsampling/doc/Intro_subsampling.h | 2 -- src/Tangential_complex/doc/Intro_tangential_complex.h | 2 -- src/Witness_complex/doc/Witness_complex_doc.h | 3 --- src/common/doc/footer.html | 10 ++-------- 14 files changed, 3 insertions(+), 34 deletions(-) (limited to 'src/common/doc') diff --git a/src/Alpha_complex/doc/Intro_alpha_complex.h b/src/Alpha_complex/doc/Intro_alpha_complex.h index cf1a946a..a08663ca 100644 --- a/src/Alpha_complex/doc/Intro_alpha_complex.h +++ b/src/Alpha_complex/doc/Intro_alpha_complex.h @@ -31,7 +31,7 @@ namespace alpha_complex { /** \defgroup alpha_complex Alpha complex * * \author Vincent Rouvreau - * + * * @{ * * \section definition Definition @@ -195,8 +195,6 @@ namespace alpha_complex { * * \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 diff --git a/src/Bitmap_cubical_complex/doc/Gudhi_Cubical_Complex_doc.h b/src/Bitmap_cubical_complex/doc/Gudhi_Cubical_Complex_doc.h index ee84e201..a5d7b60f 100644 --- a/src/Bitmap_cubical_complex/doc/Gudhi_Cubical_Complex_doc.h +++ b/src/Bitmap_cubical_complex/doc/Gudhi_Cubical_Complex_doc.h @@ -105,7 +105,6 @@ namespace cubical_complex { * \section BitmapExamples Examples * End user programs are available in example/Bitmap_cubical_complex and utilities/Bitmap_cubical_complex folders. * - * \copyright GNU General Public License v3. */ /** @} */ // end defgroup cubical_complex diff --git a/src/Contraction/include/gudhi/Edge_contraction.h b/src/Contraction/include/gudhi/Edge_contraction.h index 61f2d945..cf9a2c27 100644 --- a/src/Contraction/include/gudhi/Edge_contraction.h +++ b/src/Contraction/include/gudhi/Edge_contraction.h @@ -210,7 +210,6 @@ int main (int argc, char *argv[]) } \endcode - \verbatim ./example/Contraction/RipsContraction ../../data/SO3_10000.off 0.3 [ 50%] [100%] Built target SkeletonBlockerIteration @@ -223,9 +222,6 @@ Time to simplify and enumerate simplices: 3.166621s wall, 3.150000s user + 0.010000s system = 3.160000s CPU (99.8%) \endverbatim - - -\copyright GNU General Public License v3. */ /** @} */ // end defgroup } // namespace contraction diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index 344cb031..f2409087 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -176,7 +176,6 @@ namespace cover_complex { * * \image html "funcGICvisu.jpg" "Visualization with neato" * - * \copyright GNU General Public License v3. */ /** @} */ // end defgroup cover_complex diff --git a/src/Persistence_representations/doc/Persistence_representations_doc.h b/src/Persistence_representations/doc/Persistence_representations_doc.h index 978fb5bd..d781211a 100644 --- a/src/Persistence_representations/doc/Persistence_representations_doc.h +++ b/src/Persistence_representations/doc/Persistence_representations_doc.h @@ -250,7 +250,6 @@ namespace Persistence_representations { absolute value of differences between coordinates. A scalar product is a sum of products of values at the corresponding positions of two vectors. - \copyright GNU General Public License v3. */ /** @} */ // end defgroup Persistence_representations diff --git a/src/Persistent_cohomology/doc/Intro_persistent_cohomology.h b/src/Persistent_cohomology/doc/Intro_persistent_cohomology.h index ceaea505..4dbe82c7 100644 --- a/src/Persistent_cohomology/doc/Intro_persistent_cohomology.h +++ b/src/Persistent_cohomology/doc/Intro_persistent_cohomology.h @@ -248,7 +248,6 @@ Simplex_tree dim: 3 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 diff --git a/src/Rips_complex/doc/Intro_rips_complex.h b/src/Rips_complex/doc/Intro_rips_complex.h index 124dfec9..8c517516 100644 --- a/src/Rips_complex/doc/Intro_rips_complex.h +++ b/src/Rips_complex/doc/Intro_rips_complex.h @@ -146,8 +146,6 @@ namespace rips_complex { * * \include Rips_complex/full_skeleton_rips_for_doc.txt * - * \copyright GNU General Public License v3. - * \verbatim Contact: gudhi-users@lists.gforge.inria.fr \endverbatim */ /** @} */ // end defgroup rips_complex diff --git a/src/Simplex_tree/doc/Intro_simplex_tree.h b/src/Simplex_tree/doc/Intro_simplex_tree.h index 769491d9..6b80d1c9 100644 --- a/src/Simplex_tree/doc/Intro_simplex_tree.h +++ b/src/Simplex_tree/doc/Intro_simplex_tree.h @@ -79,7 +79,6 @@ Number of vertices = 10 Number of simplices = 98 \endcode * 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. * @} */ diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h index 32fe411c..aca2aa57 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h @@ -239,9 +239,6 @@ their collaboration to write the two initial papers about this data-structure and also Dominique for leaving him use a prototype. - -\copyright GNU General Public License v3. - @} */ } // namespace skeleton_blocker diff --git a/src/Spatial_searching/doc/Intro_spatial_searching.h b/src/Spatial_searching/doc/Intro_spatial_searching.h index 1ee5e92e..52ed65e4 100644 --- a/src/Spatial_searching/doc/Intro_spatial_searching.h +++ b/src/Spatial_searching/doc/Intro_spatial_searching.h @@ -50,8 +50,6 @@ namespace spatial_searching { * * \include Spatial_searching/example_spatial_searching.cpp * - * \copyright GNU General Public License v3. - * \verbatim Contact: gudhi-users@lists.gforge.inria.fr \endverbatim */ /** @} */ // end defgroup spatial_searching diff --git a/src/Subsampling/doc/Intro_subsampling.h b/src/Subsampling/doc/Intro_subsampling.h index c84616dd..ab9cdc37 100644 --- a/src/Subsampling/doc/Intro_subsampling.h +++ b/src/Subsampling/doc/Intro_subsampling.h @@ -58,8 +58,6 @@ namespace subsampling { * This example outputs a subset of 100 points picked randomly. * * \include Subsampling/example_pick_n_random_points.cpp - * \copyright GNU General Public License v3. - * \verbatim Contact: gudhi-users@lists.gforge.inria.fr \endverbatim */ /** @} */ // end defgroup subsampling diff --git a/src/Tangential_complex/doc/Intro_tangential_complex.h b/src/Tangential_complex/doc/Intro_tangential_complex.h index 3d687c1d..00e00c52 100644 --- a/src/Tangential_complex/doc/Intro_tangential_complex.h +++ b/src/Tangential_complex/doc/Intro_tangential_complex.h @@ -107,8 +107,6 @@ dimensions are known at compile-time. \include Tangential_complex/example_with_perturb.cpp -\copyright GNU General Public License v3. -\verbatim Contact: gudhi-users@lists.gforge.inria.fr \endverbatim */ /** @} */ // end defgroup tangential_complex diff --git a/src/Witness_complex/doc/Witness_complex_doc.h b/src/Witness_complex/doc/Witness_complex_doc.h index 5d5c0735..62203054 100644 --- a/src/Witness_complex/doc/Witness_complex_doc.h +++ b/src/Witness_complex/doc/Witness_complex_doc.h @@ -117,9 +117,6 @@ int main(int argc, char * const argv[]) { \include Witness_complex/example_nearest_landmark_table.cpp - \copyright GNU General Public License v3. - - */ #endif // WITNESS_COMPLEX_DOC_H_ diff --git a/src/common/doc/footer.html b/src/common/doc/footer.html index 7b4cdc5c..a557922b 100644 --- a/src/common/doc/footer.html +++ b/src/common/doc/footer.html @@ -6,24 +6,18 @@ $projectname  Version $projectnumber  - $projectbrief + - Copyright : GPL v3 $generatedby - doxygen $doxygenversion + Doxygen $doxygenversion - - - -- cgit v1.2.3 From e15408b4af5cba8966aa8773f6ee6884942c1d95 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Wed, 31 Jan 2018 08:18:58 +0000 Subject: Modify header (cpp and python) to fit with the new website sections git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@3192 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 1dc2f0745020db4a27649c55dc1d01397b0a403c --- src/common/doc/header.html | 4 ++++ src/cython/doc/_templates/layout.html | 4 ++++ 2 files changed, 8 insertions(+) (limited to 'src/common/doc') diff --git a/src/common/doc/header.html b/src/common/doc/header.html index 53b5c0a2..9c514381 100644 --- a/src/common/doc/header.html +++ b/src/common/doc/header.html @@ -56,6 +56,8 @@ $extrastylesheet
  • @@ -66,6 +68,8 @@ $extrastylesheet
  • C++ installation manual
  • Python documentation
  • Python installation manual
  • +
  • Utilities
  • +
  • Tutorial
  • diff --git a/src/cython/doc/_templates/layout.html b/src/cython/doc/_templates/layout.html index fd3e1cfd..8e4eba40 100644 --- a/src/cython/doc/_templates/layout.html +++ b/src/cython/doc/_templates/layout.html @@ -198,6 +198,8 @@
  • @@ -208,6 +210,8 @@
  • C++ installation manual
  • Python documentation
  • Python installation manual
  • +
  • Utilities
  • +
  • Tutorial
  • -- cgit v1.2.3 From 265484997185f3bf900744406206a2d64ca0a20d Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Fri, 2 Feb 2018 14:15:49 +0000 Subject: Fix after version release of Cover complex and Persistence representation installations Fix utils download link git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@3211 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 9596df8b0d0cdc3d8df79aa367a26b34a96d7f5e --- src/Nerve_GIC/example/CMakeLists.txt | 3 +++ src/Nerve_GIC/utilities/CMakeLists.txt | 4 ++++ src/Persistence_representations/example/CMakeLists.txt | 8 +++++--- src/Persistence_representations/utilities/CMakeLists.txt | 6 ++++++ .../utilities/persistence_intervals/CMakeLists.txt | 6 ++++++ src/common/doc/header.html | 4 ++-- src/cython/doc/_templates/layout.html | 4 ++-- 7 files changed, 28 insertions(+), 7 deletions(-) (limited to 'src/common/doc') diff --git a/src/Nerve_GIC/example/CMakeLists.txt b/src/Nerve_GIC/example/CMakeLists.txt index f2626927..542c6af4 100644 --- a/src/Nerve_GIC/example/CMakeLists.txt +++ b/src/Nerve_GIC/example/CMakeLists.txt @@ -23,4 +23,7 @@ if (NOT CGAL_VERSION VERSION_LESS 4.8.1) "lucky_cat.off" "lucky_cat_PCA1") + install(TARGETS CoordGIC DESTINATION bin) + install(TARGETS FuncGIC DESTINATION bin) + endif (NOT CGAL_VERSION VERSION_LESS 4.8.1) diff --git a/src/Nerve_GIC/utilities/CMakeLists.txt b/src/Nerve_GIC/utilities/CMakeLists.txt index 7762c8a0..7a838a8c 100644 --- a/src/Nerve_GIC/utilities/CMakeLists.txt +++ b/src/Nerve_GIC/utilities/CMakeLists.txt @@ -21,4 +21,8 @@ if (NOT CGAL_VERSION VERSION_LESS 4.8.1) add_test(NAME Nerve_GIC_utilities_VoronoiGIC COMMAND $ "human.off" "100") + install(TARGETS Nerve DESTINATION bin) + install(TARGETS VoronoiGIC DESTINATION bin) + install(FILES KeplerMapperVisuFromTxtFile.py km.py km.py.COPYRIGHT DESTINATION bin) + endif (NOT CGAL_VERSION VERSION_LESS 4.8.1) diff --git a/src/Persistence_representations/example/CMakeLists.txt b/src/Persistence_representations/example/CMakeLists.txt index eb3258f8..54d719ac 100644 --- a/src/Persistence_representations/example/CMakeLists.txt +++ b/src/Persistence_representations/example/CMakeLists.txt @@ -4,24 +4,26 @@ project(Persistence_representations_example) add_executable ( Persistence_representations_example_landscape_on_grid persistence_landscape_on_grid.cpp ) add_test(NAME Persistence_representations_example_landscape_on_grid COMMAND $) +install(TARGETS Persistence_representations_example_landscape_on_grid DESTINATION bin) add_executable ( Persistence_representations_example_landscape persistence_landscape.cpp ) add_test(NAME Persistence_representations_example_landscape COMMAND $) +install(TARGETS Persistence_representations_example_landscape DESTINATION bin) add_executable ( Persistence_representations_example_intervals persistence_intervals.cpp ) add_test(NAME Persistence_representations_example_intervals COMMAND $ "${CMAKE_SOURCE_DIR}/data/persistence_diagram/first.pers") +install(TARGETS Persistence_representations_example_intervals DESTINATION bin) add_executable ( Persistence_representations_example_vectors persistence_vectors.cpp ) add_test(NAME Persistence_representations_example_vectors COMMAND $) +install(TARGETS Persistence_representations_example_vectors DESTINATION bin) add_executable ( Persistence_representations_example_heat_maps persistence_heat_maps.cpp ) add_test(NAME Persistence_representations_example_heat_maps COMMAND $) - - - +install(TARGETS Persistence_representations_example_heat_maps DESTINATION bin) diff --git a/src/Persistence_representations/utilities/CMakeLists.txt b/src/Persistence_representations/utilities/CMakeLists.txt index 137eb0c1..fc51b1d6 100644 --- a/src/Persistence_representations/utilities/CMakeLists.txt +++ b/src/Persistence_representations/utilities/CMakeLists.txt @@ -10,6 +10,8 @@ function(add_persistence_representation_creation_utility creation_utility) add_test(NAME Persistence_representation_utilities_${creation_utility} COMMAND $ ${ARGN} "${CMAKE_CURRENT_BINARY_DIR}/../first.pers" "${CMAKE_CURRENT_BINARY_DIR}/../second.pers") + + install(TARGETS ${creation_utility} DESTINATION bin) endfunction(add_persistence_representation_creation_utility) function(add_persistence_representation_plot_utility plot_utility tool_extension) @@ -26,6 +28,8 @@ function(add_persistence_representation_plot_utility plot_utility tool_extension #add_test(NAME Persistence_representation_utilities_${plot_utility}_second_gnuplot COMMAND ${GNUPLOT_PATH} # "-e" "load '${CMAKE_CURRENT_BINARY_DIR}/../second.pers${tool_extension}_GnuplotScript'") endif() + + install(TARGETS ${plot_utility} DESTINATION bin) endfunction(add_persistence_representation_plot_utility) function(add_persistence_representation_function_utility function_utility tool_extension) @@ -44,6 +48,8 @@ function(add_persistence_representation_function_utility function_utility tool_e "${CMAKE_CURRENT_BINARY_DIR}/../first.pers${tool_extension}" "${CMAKE_CURRENT_BINARY_DIR}/../second.pers${tool_extension}") endif() + + install(TARGETS ${function_utility} DESTINATION bin) endfunction(add_persistence_representation_function_utility) add_subdirectory(persistence_heat_maps) diff --git a/src/Persistence_representations/utilities/persistence_intervals/CMakeLists.txt b/src/Persistence_representations/utilities/persistence_intervals/CMakeLists.txt index 897e12a3..875ff45e 100644 --- a/src/Persistence_representations/utilities/persistence_intervals/CMakeLists.txt +++ b/src/Persistence_representations/utilities/persistence_intervals/CMakeLists.txt @@ -7,6 +7,8 @@ add_executable ( plot_histogram_of_intervals_lengths plot_histogram_of_intervals add_test(NAME plot_histogram_of_intervals_lengths COMMAND $ "${CMAKE_CURRENT_BINARY_DIR}/../first.pers" "-1") +install(TARGETS plot_histogram_of_intervals_lengths DESTINATION bin) + add_persistence_representation_plot_utility(plot_persistence_intervals "") add_persistence_representation_plot_utility(plot_persistence_Betti_numbers "") @@ -18,6 +20,8 @@ add_test(NAME Persistence_representation_utilities_compute_number_of_dominant_in COMMAND $ "${CMAKE_CURRENT_BINARY_DIR}/../first.pers" "-1" "2") +install(TARGETS compute_number_of_dominant_intervals DESTINATION bin) + if (NOT CGAL_WITH_EIGEN3_VERSION VERSION_LESS 4.8.1) add_executable ( compute_bottleneck_distance compute_bottleneck_distance.cpp ) @@ -29,4 +33,6 @@ if (NOT CGAL_WITH_EIGEN3_VERSION VERSION_LESS 4.8.1) "-1" "${CMAKE_CURRENT_BINARY_DIR}/../first.pers" "${CMAKE_CURRENT_BINARY_DIR}/../second.pers") + + install(TARGETS compute_bottleneck_distance DESTINATION bin) endif (NOT CGAL_WITH_EIGEN3_VERSION VERSION_LESS 4.8.1) diff --git a/src/common/doc/header.html b/src/common/doc/header.html index 9c514381..d69b28fa 100644 --- a/src/common/doc/header.html +++ b/src/common/doc/header.html @@ -56,8 +56,8 @@ $extrastylesheet
  • diff --git a/src/cython/doc/_templates/layout.html b/src/cython/doc/_templates/layout.html index 8e4eba40..c9356116 100644 --- a/src/cython/doc/_templates/layout.html +++ b/src/cython/doc/_templates/layout.html @@ -198,8 +198,8 @@
  • -- cgit v1.2.3 From 2a9f6eb628979a9634c647be93e575e3177c15da Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Mon, 5 Mar 2018 15:43:13 +0000 Subject: Fix documentation git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/cechcomplex_vincent@3264 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: af6241dfe42d988b542224b9dae7364f3f22b6fd --- src/Cech_complex/doc/Intro_cech_complex.h | 4 +- .../doc/cech_complex_representation.ipe | 4 +- .../doc/cech_complex_representation.png | Bin 54399 -> 39938 bytes src/Cech_complex/doc/cech_one_skeleton.ipe | 4 +- src/Cech_complex/doc/cech_one_skeleton.png | Bin 29354 -> 24662 bytes src/Cech_complex/test/test_cech_complex.cpp | 124 ++++++++++----------- src/common/doc/main_page.h | 18 ++- 7 files changed, 85 insertions(+), 69 deletions(-) (limited to 'src/common/doc') diff --git a/src/Cech_complex/doc/Intro_cech_complex.h b/src/Cech_complex/doc/Intro_cech_complex.h index 8b6c7851..ec0d35e2 100644 --- a/src/Cech_complex/doc/Intro_cech_complex.h +++ b/src/Cech_complex/doc/Intro_cech_complex.h @@ -67,11 +67,13 @@ namespace cech_complex { * The minimal ball radius computation is insured by * * the miniball software (V3.0) - Smallest Enclosing Balls of Points - and distributed with GUDHI. - * * Please refer to * * the miniball software design description for more information about this computation. * + * This radius computation is the reason why the Cech_complex is taking much more time to be computed than the + * \ref rips_complex but it offers more topological guarantees. + * * If the Cech_complex interfaces are not detailed enough for your need, please refer to * * cech_complex_step_by_step.cpp example, where the graph construction over the Simplex_tree is more detailed. diff --git a/src/Cech_complex/doc/cech_complex_representation.ipe b/src/Cech_complex/doc/cech_complex_representation.ipe index c64d7596..377745a3 100644 --- a/src/Cech_complex/doc/cech_complex_representation.ipe +++ b/src/Cech_complex/doc/cech_complex_representation.ipe @@ -1,7 +1,7 @@ - + @@ -267,7 +267,7 @@ h Maximal radius 7 -8 +8 9 112 576 m diff --git a/src/Cech_complex/doc/cech_complex_representation.png b/src/Cech_complex/doc/cech_complex_representation.png index 4d103a56..d0eb85a5 100644 Binary files a/src/Cech_complex/doc/cech_complex_representation.png and b/src/Cech_complex/doc/cech_complex_representation.png differ diff --git a/src/Cech_complex/doc/cech_one_skeleton.ipe b/src/Cech_complex/doc/cech_one_skeleton.ipe index 345e6d7b..ed66e132 100644 --- a/src/Cech_complex/doc/cech_one_skeleton.ipe +++ b/src/Cech_complex/doc/cech_one_skeleton.ipe @@ -1,7 +1,7 @@ - + @@ -259,7 +259,7 @@ h Maximal radius 7 -8 +8 9 112 576 m diff --git a/src/Cech_complex/doc/cech_one_skeleton.png b/src/Cech_complex/doc/cech_one_skeleton.png index 807e0936..cc636616 100644 Binary files a/src/Cech_complex/doc/cech_one_skeleton.png and b/src/Cech_complex/doc/cech_one_skeleton.png differ diff --git a/src/Cech_complex/test/test_cech_complex.cpp b/src/Cech_complex/test/test_cech_complex.cpp index eae8778c..8cbfe431 100644 --- a/src/Cech_complex/test/test_cech_complex.cpp +++ b/src/Cech_complex/test/test_cech_complex.cpp @@ -42,7 +42,7 @@ // Type definitions using Simplex_tree = Gudhi::Simplex_tree<>; using Filtration_value = Simplex_tree::Filtration_value; -using Point = std::vector; +using Point = std::vector; using Point_cloud = std::vector; using Points_off_reader = Gudhi::Points_off_reader; using Cech_complex = Gudhi::cech_complex::Cech_complex; @@ -51,42 +51,52 @@ using Point_iterator = Point_cloud::const_iterator; using Coordinate_iterator = Point::const_iterator; using Min_sphere = Miniball::Miniball>; -BOOST_AUTO_TEST_CASE(Cech_complex_from_file) { +BOOST_AUTO_TEST_CASE(Cech_complex_for_documentation) { // ---------------------------------------------------------------------------- // - // Init of a Cech complex from a OFF file + // Init of a Cech complex from a point cloud // // ---------------------------------------------------------------------------- - std::string off_file_name("alphacomplexdoc.off"); - double max_radius = 12.0; - std::cout << "========== OFF FILE NAME = " << off_file_name << " - Cech max_radius=" << + Point_cloud points; + points.push_back({1., 0.}); // 0 + points.push_back({0., 1.}); // 1 + points.push_back({2., 1.}); // 2 + points.push_back({3., 2.}); // 3 + points.push_back({0., 3.}); // 4 + points.push_back({3. + std::sqrt(3.), 3.}); // 5 + points.push_back({1., 4.}); // 6 + points.push_back({3., 4.}); // 7 + points.push_back({2., 4. + std::sqrt(3.)}); // 8 + points.push_back({0., 4.}); // 9 + points.push_back({-0.5, 2.}); // 10 + + Filtration_value max_radius = 1.0; + std::cout << "========== NUMBER OF POINTS = " << points.size() << " - Cech max_radius = " << max_radius << "==========" << std::endl; - Points_off_reader off_reader(off_file_name); - Point_cloud point_cloud = off_reader.get_point_cloud(); - Cech_complex cech_complex_from_file(point_cloud, max_radius); + Cech_complex cech_complex_for_doc(points, max_radius); - GUDHI_TEST_FLOAT_EQUALITY_CHECK(cech_complex_from_file.max_radius(), max_radius); + GUDHI_TEST_FLOAT_EQUALITY_CHECK(cech_complex_for_doc.max_radius(), max_radius); std::size_t i = 0; - for (; i < point_cloud.size(); i++) { - BOOST_CHECK(point_cloud[i] == *(cech_complex_from_file.point_iterator(i))); + for (; i < points.size(); i++) { + BOOST_CHECK(points[i] == *(cech_complex_for_doc.point_iterator(i))); } #ifdef GUDHI_DEBUG - BOOST_CHECK_THROW (cech_complex_from_file.point_iterator(i+1), std::out_of_range); + BOOST_CHECK_THROW (cech_complex_for_doc.point_iterator(i+1), std::out_of_range); #endif // GUDHI_DEBUG const int DIMENSION_1 = 1; Simplex_tree st; - cech_complex_from_file.create_complex(st, DIMENSION_1); + cech_complex_for_doc.create_complex(st, DIMENSION_1); std::cout << "st.dimension()=" << st.dimension() << std::endl; BOOST_CHECK(st.dimension() == DIMENSION_1); - const int NUMBER_OF_VERTICES = 7; + const int NUMBER_OF_VERTICES = 11; std::cout << "st.num_vertices()=" << st.num_vertices() << std::endl; BOOST_CHECK(st.num_vertices() == NUMBER_OF_VERTICES); std::cout << "st.num_simplices()=" << st.num_simplices() << std::endl; - BOOST_CHECK(st.num_simplices() == 28); + BOOST_CHECK(st.num_simplices() == 27); // Check filtration values of vertices is 0.0 for (auto f_simplex : st.skeleton_simplex_range(0)) { @@ -100,7 +110,7 @@ BOOST_AUTO_TEST_CASE(Cech_complex_from_file) { std::cout << "vertex = ("; for (auto vertex : st.simplex_vertex_range(f_simplex)) { std::cout << vertex << ","; - vp.push_back(off_reader.get_point_cloud().at(vertex)); + vp.push_back(points.at(vertex)); } std::cout << ") - distance =" << Gudhi::Radius_distance()(vp.at(0), vp.at(1)) << " - filtration =" << st.filtration(f_simplex) << std::endl; @@ -110,8 +120,13 @@ BOOST_AUTO_TEST_CASE(Cech_complex_from_file) { } const int DIMENSION_2 = 2; + +#ifdef GUDHI_DEBUG + BOOST_CHECK_THROW (cech_complex_for_doc.create_complex(st, DIMENSION_2), std::invalid_argument); +#endif + Simplex_tree st2; - cech_complex_from_file.create_complex(st2, DIMENSION_2); + cech_complex_for_doc.create_complex(st2, DIMENSION_2); std::cout << "st2.dimension()=" << st2.dimension() << std::endl; BOOST_CHECK(st2.dimension() == DIMENSION_2); @@ -119,14 +134,14 @@ BOOST_AUTO_TEST_CASE(Cech_complex_from_file) { BOOST_CHECK(st2.num_vertices() == NUMBER_OF_VERTICES); std::cout << "st2.num_simplices()=" << st2.num_simplices() << std::endl; - BOOST_CHECK(st2.num_simplices() == 63); + BOOST_CHECK(st2.num_simplices() == 30); Point_cloud points012; for (std::size_t vertex = 0; vertex <= 2; vertex++) { - points012.push_back(Point(cech_complex_from_file.point_iterator(vertex)->begin(), - cech_complex_from_file.point_iterator(vertex)->end())); + points012.push_back(Point(cech_complex_for_doc.point_iterator(vertex)->begin(), + cech_complex_for_doc.point_iterator(vertex)->end())); } - std::size_t dimension = point_cloud[0].end() - point_cloud[0].begin(); + std::size_t dimension = points[0].end() - points[0].begin(); Min_sphere ms012(dimension, points012.begin(),points012.end()); Simplex_tree::Filtration_value f012 = st2.filtration(st2.find({0, 1, 2})); @@ -134,53 +149,36 @@ BOOST_AUTO_TEST_CASE(Cech_complex_from_file) { GUDHI_TEST_FLOAT_EQUALITY_CHECK(f012, std::sqrt(ms012.squared_radius())); - Point_cloud points456; - for (std::size_t vertex = 4; vertex <= 6; vertex++) { - points456.push_back(Point(cech_complex_from_file.point_iterator(vertex)->begin(), - cech_complex_from_file.point_iterator(vertex)->end())); - } - Min_sphere ms456(dimension, points456.begin(),points456.end()); - - Simplex_tree::Filtration_value f456 = st2.filtration(st2.find({4, 5, 6})); - std::cout << "f456= " << f456 << " | ms456_radius= " << std::sqrt(ms456.squared_radius()) << std::endl; + Point_cloud points1410; + points1410.push_back(Point(cech_complex_for_doc.point_iterator(1)->begin(), + cech_complex_for_doc.point_iterator(1)->end())); + points1410.push_back(Point(cech_complex_for_doc.point_iterator(4)->begin(), + cech_complex_for_doc.point_iterator(4)->end())); + points1410.push_back(Point(cech_complex_for_doc.point_iterator(10)->begin(), + cech_complex_for_doc.point_iterator(10)->end())); + Min_sphere ms1410(dimension, points1410.begin(),points1410.end()); - GUDHI_TEST_FLOAT_EQUALITY_CHECK(f456, std::sqrt(ms456.squared_radius())); + Simplex_tree::Filtration_value f1410 = st2.filtration(st2.find({1, 4, 10})); + std::cout << "f1410= " << f1410 << " | ms1410_radius= " << std::sqrt(ms1410.squared_radius()) << std::endl; - const int DIMENSION_3 = 3; - Simplex_tree st3; - cech_complex_from_file.create_complex(st3, DIMENSION_3); - std::cout << "st3.dimension()=" << st3.dimension() << std::endl; - BOOST_CHECK(st3.dimension() == DIMENSION_3); - - std::cout << "st3.num_vertices()=" << st3.num_vertices() << std::endl; - BOOST_CHECK(st3.num_vertices() == NUMBER_OF_VERTICES); + GUDHI_TEST_FLOAT_EQUALITY_CHECK(f1410, std::sqrt(ms1410.squared_radius())); - std::cout << "st3.num_simplices()=" << st3.num_simplices() << std::endl; - BOOST_CHECK(st3.num_simplices() == 98); - - Point_cloud points0123; - for (std::size_t vertex = 0; vertex <= 3; vertex++) { - points0123.push_back(Point(cech_complex_from_file.point_iterator(vertex)->begin(), - cech_complex_from_file.point_iterator(vertex)->end())); - } - Min_sphere ms0123(dimension, points0123.begin(),points0123.end()); + Point_cloud points469; + points469.push_back(Point(cech_complex_for_doc.point_iterator(4)->begin(), + cech_complex_for_doc.point_iterator(4)->end())); + points469.push_back(Point(cech_complex_for_doc.point_iterator(6)->begin(), + cech_complex_for_doc.point_iterator(6)->end())); + points469.push_back(Point(cech_complex_for_doc.point_iterator(9)->begin(), + cech_complex_for_doc.point_iterator(9)->end())); + Min_sphere ms469(dimension, points469.begin(),points469.end()); - Simplex_tree::Filtration_value f0123 = st3.filtration(st3.find({0, 1, 2, 3})); - std::cout << "f0123= " << f0123 << " | ms0123_radius= " << std::sqrt(ms0123.squared_radius()) << std::endl; + Simplex_tree::Filtration_value f469 = st2.filtration(st2.find({4, 6, 9})); + std::cout << "f469= " << f469 << " | ms469_radius= " << std::sqrt(ms469.squared_radius()) << std::endl; - GUDHI_TEST_FLOAT_EQUALITY_CHECK(f0123, std::sqrt(ms0123.squared_radius())); - - - - Point_cloud points01; - for (std::size_t vertex = 0; vertex <= 1; vertex++) { - points01.push_back(Point(cech_complex_from_file.point_iterator(vertex)->begin(), - cech_complex_from_file.point_iterator(vertex)->end())); - } - Min_sphere ms01(dimension, points01.begin(),points01.end()); + GUDHI_TEST_FLOAT_EQUALITY_CHECK(f469, std::sqrt(ms469.squared_radius())); - Simplex_tree::Filtration_value f01 = st2.filtration(st2.find({0, 1})); - std::cout << "f01= " << f01 << " | ms01_radius= " << std::sqrt(ms01.squared_radius()) << std::endl; + BOOST_CHECK((st2.find({6, 7, 8}) == st2.null_simplex())); + BOOST_CHECK((st2.find({3, 5, 7}) == st2.null_simplex())); } diff --git a/src/common/doc/main_page.h b/src/common/doc/main_page.h index b3e9ea03..3851dde7 100644 --- a/src/common/doc/main_page.h +++ b/src/common/doc/main_page.h @@ -41,6 +41,22 @@ User manual: \ref alpha_complex - Reference manual: Gudhi::alpha_complex::Alpha_complex + + \subsection CechComplexDataStructure Cech complex + \image html "cech_complex_representation.png" "Cech complex representation" + + + + +
    + Author: Vincent Rouvreau
    + Introduced in: GUDHI 2.2.0
    + Copyright: GPL v3
    +
    + The Cech complex is a proximity graph that allows to construct a simplicial complex from it. + It guarantees the simplices inserted are inside a ball of a given radius.
    + User manual: \ref cech_complex - Reference manual: Gudhi::cech_complex::Cech_complex +
    \subsection CubicalComplexDataStructure Cubical complex \image html "Cubical_complex_representation.png" "Cubical complex representation" @@ -57,6 +73,7 @@ User manual: \ref cubical_complex - Reference manual: Gudhi::cubical_complex::Bitmap_cubical_complex + \subsection RipsComplexDataStructure Rips complex \image html "rips_complex_representation.png" "Rips complex representation" @@ -74,7 +91,6 @@ User manual: \ref rips_complex - Reference manual: Gudhi::rips_complex::Rips_complex -
    \subsection SimplexTreeDataStructure Simplex tree \image html "Simplex_tree_representation.png" "Simplex tree representation" -- cgit v1.2.3 From f95d9eb65491241f953a5dcaef57f1dbf077bd60 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Tue, 6 Mar 2018 15:56:04 +0000 Subject: Add offline_header.html for Debian package generation that requires self-contained documentation. Command for generation : ( cat Doxyfile ; echo "HTML_HEADER = doc/common/offline_header.html" ) | doxygen - git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@3266 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 7bd88e71f56b8c7929cfc8475dd49ff2b0901b53 --- src/common/doc/offline_header.html | 41 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/common/doc/offline_header.html (limited to 'src/common/doc') diff --git a/src/common/doc/offline_header.html b/src/common/doc/offline_header.html new file mode 100644 index 00000000..6a02a895 --- /dev/null +++ b/src/common/doc/offline_header.html @@ -0,0 +1,41 @@ + + + + + + + + +$projectname: $title +$title + + + + +$treeview +$search +$mathjax + +$extrastylesheet + + + + +
    + + +
    + + + + + + + + + + +
    $searchbox
    +
    + + -- cgit v1.2.3 From 564427b6cad42ad98e9633589b128c07674c1dd6 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Wed, 28 Mar 2018 09:58:12 +0000 Subject: Fix header that was not pointing on the correct web site. Cpp documentation header was not good git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@3310 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 520635bb2f09419b4b70f71c0838d45ae15354b3 --- src/common/doc/header.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/common/doc') diff --git a/src/common/doc/header.html b/src/common/doc/header.html index d69b28fa..2f54e68d 100644 --- a/src/common/doc/header.html +++ b/src/common/doc/header.html @@ -9,7 +9,7 @@ $projectname: $title $title - + -- cgit v1.2.3 From 1648030e27e828f92c6ae109c96190f986cdec8b Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Mon, 9 Apr 2018 08:53:50 +0000 Subject: Doc review: Fix main page cech complex explaination git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/cechcomplex_vincent@3354 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 0871ae5a851c40e880625a08f470277f93476864 --- src/common/doc/main_page.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/common/doc') diff --git a/src/common/doc/main_page.h b/src/common/doc/main_page.h index 3851dde7..30d4e71b 100644 --- a/src/common/doc/main_page.h +++ b/src/common/doc/main_page.h @@ -42,8 +42,8 @@ - \subsection CechComplexDataStructure Cech complex - \image html "cech_complex_representation.png" "Cech complex representation" + \subsection CechComplexDataStructure ÄŒech complex + \image html "cech_complex_representation.png" "ÄŒech complex representation" -- cgit v1.2.3 From 4869d669f029886586d6211b40c8c549da85207b Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Thu, 26 Apr 2018 15:54:12 +0000 Subject: Fix Copyrights git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/copyright_clarification_vincent@3400 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: ff348beedf92656c6913c2a1df983b5804b33988 --- .../concept/SimplicialComplexForAlpha.h | 2 +- src/Alpha_complex/doc/COPYRIGHT | 2 +- src/Alpha_complex/doc/Intro_alpha_complex.h | 2 +- src/Alpha_complex/include/gudhi/Alpha_complex.h | 2 +- src/Alpha_complex/test/Alpha_complex_unit_test.cpp | 2 +- .../utilities/alpha_complex_3d_helper.h | 2 +- .../utilities/alpha_complex_3d_persistence.cpp | 2 +- .../utilities/alpha_complex_persistence.cpp | 22 +++++++++++++++++++++ .../exact_alpha_complex_3d_persistence.cpp | 2 +- .../periodic_alpha_complex_3d_persistence.cpp | 2 +- .../weighted_alpha_complex_3d_persistence.cpp | 2 +- ...ghted_periodic_alpha_complex_3d_persistence.cpp | 2 +- src/Bitmap_cubical_complex/doc/COPYRIGHT | 2 +- .../doc/Gudhi_Cubical_Complex_doc.h | 2 +- .../example/Random_bitmap_cubical_complex.cpp | 2 +- .../include/gudhi/Bitmap_cubical_complex.h | 2 +- .../include/gudhi/Bitmap_cubical_complex/counter.h | 2 +- .../include/gudhi/Bitmap_cubical_complex_base.h | 2 +- ...cal_complex_periodic_boundary_conditions_base.h | 2 +- src/Bitmap_cubical_complex/test/Bitmap_test.cpp | 2 +- .../utilities/cubical_complex_persistence.cpp | 2 +- .../periodic_cubical_complex_persistence.cpp | 2 +- .../benchmark/bottleneck_chrono.cpp | 2 +- .../concept/Persistence_diagram.h | 2 +- src/Bottleneck_distance/doc/COPYRIGHT | 2 +- .../doc/Intro_bottleneck_distance.h | 2 +- .../alpha_rips_persistence_bottleneck_distance.cpp | 2 +- .../example/bottleneck_basic_example.cpp | 2 +- src/Bottleneck_distance/include/gudhi/Bottleneck.h | 2 +- .../include/gudhi/Graph_matching.h | 2 +- .../include/gudhi/Internal_point.h | 2 +- .../include/gudhi/Neighbors_finder.h | 2 +- .../include/gudhi/Persistence_graph.h | 2 +- .../test/bottleneck_unit_test.cpp | 2 +- .../utilities/bottleneck_distance.cpp | 2 +- src/Contraction/doc/COPYRIGHT | 2 +- src/Contraction/example/Garland_heckbert.cpp | 2 +- .../example/Garland_heckbert/Error_quadric.h | 2 +- src/Contraction/example/Rips_contraction.cpp | 2 +- .../include/gudhi/Contraction/Edge_profile.h | 2 +- .../Contraction/policies/Contraction_visitor.h | 2 +- .../gudhi/Contraction/policies/Cost_policy.h | 2 +- .../Contraction/policies/Dummy_valid_contraction.h | 2 +- .../gudhi/Contraction/policies/Edge_length_cost.h | 2 +- .../Contraction/policies/First_vertex_placement.h | 2 +- .../policies/Link_condition_valid_contraction.h | 2 +- .../gudhi/Contraction/policies/Middle_placement.h | 2 +- .../gudhi/Contraction/policies/Placement_policy.h | 2 +- .../policies/Valid_contraction_policy.h | 2 +- src/Contraction/include/gudhi/Edge_contraction.h | 2 +- .../include/gudhi/Skeleton_blocker_contractor.h | 2 +- src/GudhUI/gui/MainWindow.cpp | 2 +- src/GudhUI/gui/MainWindow.h | 2 +- src/GudhUI/gui/Menu_edge_contraction.cpp | 2 +- src/GudhUI/gui/Menu_edge_contraction.h | 2 +- src/GudhUI/gui/Menu_k_nearest_neighbors.cpp | 2 +- src/GudhUI/gui/Menu_k_nearest_neighbors.h | 2 +- src/GudhUI/gui/Menu_persistence.cpp | 2 +- src/GudhUI/gui/Menu_persistence.h | 2 +- src/GudhUI/gui/Menu_uniform_neighbors.cpp | 2 +- src/GudhUI/gui/Menu_uniform_neighbors.h | 2 +- src/GudhUI/gui/gudhui.cpp | 4 ++-- src/GudhUI/model/Complex_typedefs.h | 2 +- src/GudhUI/model/Model.h | 2 +- src/GudhUI/utils/Bar_code_persistence.h | 23 ++++++++++++++++++++++ src/GudhUI/utils/Critical_points.h | 2 +- src/GudhUI/utils/Edge_collapsor.h | 2 +- src/GudhUI/utils/Edge_contractor.h | 2 +- src/GudhUI/utils/Furthest_point_epsilon_net.h | 2 +- src/GudhUI/utils/Is_manifold.h | 2 +- src/GudhUI/utils/K_nearest_builder.h | 2 +- src/GudhUI/utils/Lloyd_builder.h | 2 +- src/GudhUI/utils/MClock.h | 2 +- src/GudhUI/utils/Persistence_compute.h | 2 +- src/GudhUI/utils/Rips_builder.h | 2 +- src/GudhUI/utils/UI_utils.h | 2 +- src/GudhUI/utils/Vertex_collapsor.h | 2 +- src/GudhUI/view/Color.h | 2 +- src/GudhUI/view/FirstCoordProjector.h | 2 +- src/GudhUI/view/Projector3D.h | 2 +- src/GudhUI/view/View_parameter.h | 2 +- src/GudhUI/view/Viewer.cpp | 2 +- src/GudhUI/view/Viewer.h | 2 +- src/GudhUI/view/Viewer_instructor.cpp | 2 +- src/GudhUI/view/Viewer_instructor.h | 2 +- src/Hasse_complex/include/gudhi/Hasse_complex.h | 2 +- src/Nerve_GIC/doc/COPYRIGHT | 2 +- src/Nerve_GIC/doc/Intro_graph_induced_complex.h | 2 +- src/Nerve_GIC/example/CoordGIC.cpp | 2 +- src/Nerve_GIC/example/FuncGIC.cpp | 2 +- src/Nerve_GIC/include/gudhi/GIC.h | 2 +- src/Nerve_GIC/test/test_GIC.cpp | 2 +- .../utilities/KeplerMapperVisuFromTxtFile.py | 4 ++-- src/Nerve_GIC/utilities/Nerve.cpp | 2 +- src/Nerve_GIC/utilities/VoronoiGIC.cpp | 2 +- .../concept/Real_valued_topological_data.h | 2 +- .../concept/Topological_data_with_averages.h | 2 +- .../concept/Topological_data_with_distances.h | 2 +- .../concept/Topological_data_with_scalar_product.h | 2 +- .../concept/Vectorized_topological_data.h | 2 +- .../doc/Persistence_representations_doc.h | 2 +- .../example/persistence_heat_maps.cpp | 2 +- .../example/persistence_intervals.cpp | 2 +- .../example/persistence_landscape.cpp | 2 +- .../example/persistence_landscape_on_grid.cpp | 2 +- .../example/persistence_vectors.cpp | 2 +- .../include/gudhi/PSSK.h | 2 +- .../include/gudhi/Persistence_heat_maps.h | 2 +- .../include/gudhi/Persistence_intervals.h | 2 +- .../gudhi/Persistence_intervals_with_distances.h | 2 +- .../include/gudhi/Persistence_landscape.h | 2 +- .../include/gudhi/Persistence_landscape_on_grid.h | 2 +- .../include/gudhi/Persistence_vectors.h | 2 +- .../gudhi/common_persistence_representations.h | 2 +- .../include/gudhi/read_persistence_from_file.h | 2 +- .../test/persistence_heat_maps_test.cpp | 2 +- .../test/persistence_intervals_test.cpp | 2 +- .../persistence_intervals_with_distances_test.cpp | 2 +- .../test/persistence_lanscapes_on_grid_test.cpp | 2 +- .../test/persistence_lanscapes_test.cpp | 2 +- .../test/read_persistence_from_file_test.cpp | 2 +- .../test/vector_representation_test.cpp | 2 +- .../average_persistence_heat_maps.cpp | 2 +- .../compute_distance_of_persistence_heat_maps.cpp | 2 +- ...ute_scalar_product_of_persistence_heat_maps.cpp | 2 +- ...h_m_weighted_by_arctan_of_their_persistence.cpp | 2 +- ...te_p_h_m_weighted_by_distance_from_diagonal.cpp | 2 +- ...ate_p_h_m_weighted_by_squared_diag_distance.cpp | 2 +- .../create_persistence_heat_maps.cpp | 2 +- .../persistence_heat_maps/create_pssk.cpp | 2 +- .../plot_persistence_heat_map.cpp | 2 +- ...te_birth_death_range_in_persistence_diagram.cpp | 2 +- .../compute_bottleneck_distance.cpp | 2 +- .../compute_number_of_dominant_intervals.cpp | 2 +- .../plot_histogram_of_intervals_lengths.cpp | 2 +- .../plot_persistence_Betti_numbers.cpp | 2 +- .../plot_persistence_intervals.cpp | 2 +- .../persistence_landscapes/average_landscapes.cpp | 2 +- .../compute_distance_of_landscapes.cpp | 2 +- .../compute_scalar_product_of_landscapes.cpp | 2 +- .../persistence_landscapes/create_landscapes.cpp | 2 +- .../persistence_landscapes/plot_landscapes.cpp | 2 +- .../average_landscapes_on_grid.cpp | 2 +- .../compute_distance_of_landscapes_on_grid.cpp | 2 +- ...ompute_scalar_product_of_landscapes_on_grid.cpp | 2 +- .../create_landscapes_on_grid.cpp | 2 +- .../plot_landscapes_on_grid.cpp | 2 +- .../average_persistence_vectors.cpp | 2 +- .../compute_distance_of_persistence_vectors.cpp | 2 +- ...mpute_scalar_product_of_persistence_vectors.cpp | 2 +- .../create_persistence_vectors.cpp | 2 +- .../plot_persistence_vectors.cpp | 2 +- .../benchmark/performance_rips_persistence.cpp | 2 +- .../concept/CoefficientField.h | 2 +- .../concept/FilteredComplex.h | 2 +- .../concept/PersistentHomology.h | 2 +- src/Persistent_cohomology/doc/COPYRIGHT | 2 +- .../doc/Intro_persistent_cohomology.h | 2 +- .../example/custom_persistence_sort.cpp | 2 +- .../example/persistence_from_file.cpp | 2 +- .../persistence_from_simple_simplex_tree.cpp | 2 +- .../example/plain_homology.cpp | 2 +- .../example/rips_multifield_persistence.cpp | 2 +- .../example/rips_persistence_step_by_step.cpp | 2 +- .../rips_persistence_via_boundary_matrix.cpp | 2 +- .../include/gudhi/Persistent_cohomology.h | 2 +- .../include/gudhi/Persistent_cohomology/Field_Zp.h | 2 +- .../gudhi/Persistent_cohomology/Multi_field.h | 2 +- .../Persistent_cohomology_column.h | 2 +- .../concept/SimplicialComplexForRips.h | 2 +- src/Rips_complex/doc/COPYRIGHT | 2 +- src/Rips_complex/doc/Intro_rips_complex.h | 2 +- src/Rips_complex/include/gudhi/Rips_complex.h | 2 +- .../include/gudhi/Sparse_rips_complex.h | 2 +- src/Rips_complex/test/test_rips_complex.cpp | 2 +- .../rips_correlation_matrix_persistence.cpp | 2 +- .../utilities/rips_distance_matrix_persistence.cpp | 2 +- src/Rips_complex/utilities/rips_persistence.cpp | 2 +- .../utilities/sparse_rips_persistence.cpp | 2 +- src/Simplex_tree/concept/FiltrationValue.h | 2 +- src/Simplex_tree/concept/IndexingTag.h | 2 +- src/Simplex_tree/concept/SimplexKey.h | 2 +- src/Simplex_tree/concept/SimplexTreeOptions.h | 2 +- src/Simplex_tree/concept/VertexHandle.h | 2 +- src/Simplex_tree/doc/COPYRIGHT | 2 +- src/Simplex_tree/doc/Intro_simplex_tree.h | 2 +- .../example/cech_complex_cgal_mini_sphere_3d.cpp | 4 ++-- ...e_alpha_shapes_3_simplex_tree_from_off_file.cpp | 2 +- .../example/graph_expansion_with_blocker.cpp | 2 +- src/Simplex_tree/example/mini_simplex_tree.cpp | 2 +- src/Simplex_tree/example/simple_simplex_tree.cpp | 2 +- .../example/simplex_tree_from_cliques_of_graph.cpp | 2 +- src/Simplex_tree/include/gudhi/Simplex_tree.h | 2 +- .../gudhi/Simplex_tree/Simplex_tree_iterators.h | 2 +- .../Simplex_tree_node_explicit_storage.h | 2 +- .../gudhi/Simplex_tree/Simplex_tree_siblings.h | 2 +- .../include/gudhi/Simplex_tree/indexing_tag.h | 2 +- src/Skeleton_blocker/concept/SkeletonBlockerDS.h | 2 +- .../concept/SkeletonBlockerGeometricDS.h | 2 +- src/Skeleton_blocker/doc/COPYRIGHT | 2 +- .../example/Skeleton_blocker_from_simplices.cpp | 2 +- .../example/Skeleton_blocker_iteration.cpp | 2 +- .../example/Skeleton_blocker_link.cpp | 2 +- .../include/gudhi/Skeleton_blocker.h | 2 +- .../Skeleton_blocker_complex_visitor.h | 2 +- .../Skeleton_blocker_link_superior.h | 2 +- .../Skeleton_blocker/Skeleton_blocker_off_io.h | 2 +- .../Skeleton_blocker_simple_geometric_traits.h | 2 +- .../Skeleton_blocker_simple_traits.h | 2 +- .../Skeleton_blocker/Skeleton_blocker_simplex.h | 2 +- .../Skeleton_blocker_sub_complex.h | 2 +- .../gudhi/Skeleton_blocker/internal/Top_faces.h | 2 +- .../include/gudhi/Skeleton_blocker/internal/Trie.h | 2 +- .../Skeleton_blockers_blockers_iterators.h | 2 +- .../iterators/Skeleton_blockers_edges_iterators.h | 2 +- .../iterators/Skeleton_blockers_iterators.h | 2 +- .../Skeleton_blockers_simplices_iterators.h | 2 +- .../Skeleton_blockers_triangles_iterators.h | 2 +- .../Skeleton_blockers_vertices_iterators.h | 2 +- .../include/gudhi/Skeleton_blocker_complex.h | 2 +- .../gudhi/Skeleton_blocker_geometric_complex.h | 2 +- .../include/gudhi/Skeleton_blocker_link_complex.h | 2 +- .../gudhi/Skeleton_blocker_simplifiable_complex.h | 2 +- .../test/test_skeleton_blocker_complex.cpp | 2 +- .../test_skeleton_blocker_geometric_complex.cpp | 2 +- .../test/test_skeleton_blocker_simplifiable.cpp | 2 +- .../doc/Intro_spatial_searching.h | 2 +- .../include/gudhi/Kd_tree_search.h | 2 +- src/Spatial_searching/test/test_Kd_tree_search.cpp | 2 +- src/Subsampling/doc/Intro_subsampling.h | 2 +- .../include/gudhi/choose_n_farthest_points.h | 2 +- .../include/gudhi/pick_n_random_points.h | 2 +- src/Subsampling/include/gudhi/sparsify_point_set.h | 2 +- .../test/test_choose_n_farthest_points.cpp | 2 +- src/Subsampling/test/test_pick_n_random_points.cpp | 2 +- src/Subsampling/test/test_sparsify_point_set.cpp | 2 +- src/Tangential_complex/benchmark/RIB_exporter.h | 2 +- src/Tangential_complex/benchmark/XML_exporter.h | 2 +- src/Tangential_complex/doc/COPYRIGHT | 2 +- .../doc/Intro_tangential_complex.h | 2 +- .../include/gudhi/Tangential_complex.h | 2 +- .../gudhi/Tangential_complex/Simplicial_complex.h | 2 +- .../include/gudhi/Tangential_complex/config.h | 2 +- .../include/gudhi/Tangential_complex/utilities.h | 2 +- .../test/test_tangential_complex.cpp | 2 +- .../concept/SimplicialComplexForWitness.h | 2 +- src/Witness_complex/doc/COPYRIGHT | 2 +- .../example/example_nearest_landmark_table.cpp | 22 --------------------- .../example/example_strong_witness_complex_off.cpp | 22 --------------------- .../example/example_witness_complex_sphere.cpp | 22 --------------------- src/Witness_complex/example/generators.h | 2 +- .../include/gudhi/Active_witness/Active_witness.h | 2 +- .../gudhi/Active_witness/Active_witness_iterator.h | 2 +- .../gudhi/Euclidean_strong_witness_complex.h | 2 +- .../include/gudhi/Euclidean_witness_complex.h | 2 +- .../include/gudhi/Strong_witness_complex.h | 2 +- .../include/gudhi/Witness_complex.h | 2 +- .../include/gudhi/Witness_complex/all_faces_in.h | 2 +- .../utilities/strong_witness_persistence.cpp | 2 +- .../utilities/weak_witness_persistence.cpp | 2 +- src/common/doc/file_formats.h | 2 +- src/common/include/gudhi/Clock.h | 2 +- src/common/include/gudhi/Debug_utils.h | 2 +- src/common/include/gudhi/Null_output_iterator.h | 2 +- src/common/include/gudhi/Off_reader.h | 2 +- src/common/include/gudhi/Point.h | 2 +- src/common/include/gudhi/Points_3D_off_io.h | 2 +- src/common/include/gudhi/Points_off_io.h | 2 +- src/common/include/gudhi/Simple_object_pool.h | 2 +- src/common/include/gudhi/Unitary_tests_utils.h | 2 +- src/common/include/gudhi/allocator.h | 2 +- src/common/include/gudhi/console_color.h | 2 +- src/common/include/gudhi/distance_functions.h | 2 +- .../include/gudhi/graph_simplicial_complex.h | 2 +- src/common/include/gudhi/random_point_generators.h | 2 +- src/common/include/gudhi/reader_utils.h | 2 +- src/common/test/test_distance_matrix_reader.cpp | 2 +- .../test/test_persistence_intervals_reader.cpp | 2 +- src/common/test/test_points_off_reader.cpp | 2 +- .../utilities/off_file_from_shape_generator.cpp | 2 +- src/cython/cython/alpha_complex.pyx | 4 ++-- src/cython/cython/bottleneck_distance.pyx | 4 ++-- src/cython/cython/cubical_complex.pyx | 4 ++-- .../cython/euclidean_strong_witness_complex.pyx | 4 ++-- src/cython/cython/euclidean_witness_complex.pyx | 4 ++-- src/cython/cython/off_reader.pyx | 4 ++-- src/cython/cython/periodic_cubical_complex.pyx | 4 ++-- src/cython/cython/persistence_graphical_tools.py | 4 ++-- src/cython/cython/reader_utils.pyx | 4 ++-- src/cython/cython/rips_complex.pyx | 4 ++-- src/cython/cython/simplex_tree.pyx | 4 ++-- src/cython/cython/strong_witness_complex.pyx | 4 ++-- src/cython/cython/subsampling.pyx | 4 ++-- src/cython/cython/tangential_complex.pyx | 4 ++-- src/cython/cython/witness_complex.pyx | 4 ++-- ...ex_diagram_persistence_from_off_file_example.py | 4 ++-- .../example/alpha_complex_from_points_example.py | 4 ++-- .../alpha_rips_persistence_bottleneck_distance.py | 4 ++-- src/cython/example/bottleneck_basic_example.py | 4 ++-- ...ex_diagram_persistence_from_off_file_example.py | 4 ++-- ...ex_diagram_persistence_from_off_file_example.py | 4 ++-- .../example/gudhi_graphical_tools_example.py | 4 ++-- ...arcode_persistence_from_perseus_file_example.py | 4 ++-- .../random_cubical_complex_persistence_example.py | 4 ++-- ...istence_from_correlation_matrix_file_example.py | 4 ++-- ...ersistence_from_distance_matrix_file_example.py | 4 ++-- ...ex_diagram_persistence_from_off_file_example.py | 4 ++-- .../example/rips_complex_from_points_example.py | 4 ++-- src/cython/example/rips_persistence_diagram.py | 4 ++-- src/cython/example/simplex_tree_example.py | 4 ++-- ...complex_plain_homology_from_off_file_example.py | 4 ++-- .../witness_complex_from_nearest_landmark_table.py | 4 ++-- src/cython/gudhi.pyx.in | 4 ++-- src/cython/include/Alpha_complex_interface.h | 2 +- src/cython/include/Bottleneck_distance_interface.h | 2 +- src/cython/include/Cubical_complex_interface.h | 2 +- .../Euclidean_strong_witness_complex_interface.h | 2 +- .../include/Euclidean_witness_complex_interface.h | 2 +- src/cython/include/Off_reader_interface.h | 2 +- .../include/Persistent_cohomology_interface.h | 2 +- src/cython/include/Reader_utils_interface.h | 2 +- src/cython/include/Rips_complex_interface.h | 2 +- src/cython/include/Simplex_tree_interface.h | 2 +- .../include/Strong_witness_complex_interface.h | 2 +- src/cython/include/Subsampling_interface.h | 2 +- src/cython/include/Tangential_complex_interface.h | 2 +- src/cython/include/Witness_complex_interface.h | 2 +- src/cython/setup.py.in | 4 ++-- src/cython/test/test_alpha_complex.py | 4 ++-- src/cython/test/test_bottleneck_distance.py | 4 ++-- src/cython/test/test_cubical_complex.py | 4 ++-- src/cython/test/test_euclidean_witness_complex.py | 4 ++-- src/cython/test/test_reader_utils.py | 4 ++-- src/cython/test/test_rips_complex.py | 4 ++-- src/cython/test/test_simplex_tree.py | 4 ++-- src/cython/test/test_subsampling.py | 4 ++-- src/cython/test/test_tangential_complex.py | 4 ++-- src/cython/test/test_witness_complex.py | 4 ++-- 338 files changed, 425 insertions(+), 446 deletions(-) (limited to 'src/common/doc') diff --git a/src/Alpha_complex/concept/SimplicialComplexForAlpha.h b/src/Alpha_complex/concept/SimplicialComplexForAlpha.h index 2b8bff94..a51df127 100644 --- a/src/Alpha_complex/concept/SimplicialComplexForAlpha.h +++ b/src/Alpha_complex/concept/SimplicialComplexForAlpha.h @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Alpha_complex/doc/COPYRIGHT b/src/Alpha_complex/doc/COPYRIGHT index dbad2380..5f1d97cc 100644 --- a/src/Alpha_complex/doc/COPYRIGHT +++ b/src/Alpha_complex/doc/COPYRIGHT @@ -4,7 +4,7 @@ computational topology. Author(s): Vincent Rouvreau -Copyright (C) 2015 INRIA +Copyright (C) 2015 Inria 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 diff --git a/src/Alpha_complex/doc/Intro_alpha_complex.h b/src/Alpha_complex/doc/Intro_alpha_complex.h index a08663ca..db298ea6 100644 --- a/src/Alpha_complex/doc/Intro_alpha_complex.h +++ b/src/Alpha_complex/doc/Intro_alpha_complex.h @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2015 INRIA + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Alpha_complex/include/gudhi/Alpha_complex.h b/src/Alpha_complex/include/gudhi/Alpha_complex.h index 91305032..4c07eddb 100644 --- a/src/Alpha_complex/include/gudhi/Alpha_complex.h +++ b/src/Alpha_complex/include/gudhi/Alpha_complex.h @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2015 INRIA + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Alpha_complex/test/Alpha_complex_unit_test.cpp b/src/Alpha_complex/test/Alpha_complex_unit_test.cpp index c3ad1a9c..622fcae8 100644 --- a/src/Alpha_complex/test/Alpha_complex_unit_test.cpp +++ b/src/Alpha_complex/test/Alpha_complex_unit_test.cpp @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2015 INRIA + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Alpha_complex/utilities/alpha_complex_3d_helper.h b/src/Alpha_complex/utilities/alpha_complex_3d_helper.h index a59f0654..a72fd96d 100644 --- a/src/Alpha_complex/utilities/alpha_complex_3d_helper.h +++ b/src/Alpha_complex/utilities/alpha_complex_3d_helper.h @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2014 INRIA Saclay (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Alpha_complex/utilities/alpha_complex_3d_persistence.cpp b/src/Alpha_complex/utilities/alpha_complex_3d_persistence.cpp index 8ef5ffb2..efa20db9 100644 --- a/src/Alpha_complex/utilities/alpha_complex_3d_persistence.cpp +++ b/src/Alpha_complex/utilities/alpha_complex_3d_persistence.cpp @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Alpha_complex/utilities/alpha_complex_persistence.cpp b/src/Alpha_complex/utilities/alpha_complex_persistence.cpp index 2105220a..42390b0e 100644 --- a/src/Alpha_complex/utilities/alpha_complex_persistence.cpp +++ b/src/Alpha_complex/utilities/alpha_complex_persistence.cpp @@ -1,3 +1,25 @@ +/* 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) 2016 Inria + * + * 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 . + */ + #include #include diff --git a/src/Alpha_complex/utilities/exact_alpha_complex_3d_persistence.cpp b/src/Alpha_complex/utilities/exact_alpha_complex_3d_persistence.cpp index cceac46e..54c074c4 100644 --- a/src/Alpha_complex/utilities/exact_alpha_complex_3d_persistence.cpp +++ b/src/Alpha_complex/utilities/exact_alpha_complex_3d_persistence.cpp @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Alpha_complex/utilities/periodic_alpha_complex_3d_persistence.cpp b/src/Alpha_complex/utilities/periodic_alpha_complex_3d_persistence.cpp index 188cf604..7c6e1583 100644 --- a/src/Alpha_complex/utilities/periodic_alpha_complex_3d_persistence.cpp +++ b/src/Alpha_complex/utilities/periodic_alpha_complex_3d_persistence.cpp @@ -5,7 +5,7 @@ * Author(s): Vincent Rouvreau * Pawel Dlotko - 2017 - Swansea University, UK * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Alpha_complex/utilities/weighted_alpha_complex_3d_persistence.cpp b/src/Alpha_complex/utilities/weighted_alpha_complex_3d_persistence.cpp index 93be8a05..54483819 100644 --- a/src/Alpha_complex/utilities/weighted_alpha_complex_3d_persistence.cpp +++ b/src/Alpha_complex/utilities/weighted_alpha_complex_3d_persistence.cpp @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Alpha_complex/utilities/weighted_periodic_alpha_complex_3d_persistence.cpp b/src/Alpha_complex/utilities/weighted_periodic_alpha_complex_3d_persistence.cpp index 5321bb0a..f03f29a7 100644 --- a/src/Alpha_complex/utilities/weighted_periodic_alpha_complex_3d_persistence.cpp +++ b/src/Alpha_complex/utilities/weighted_periodic_alpha_complex_3d_persistence.cpp @@ -5,7 +5,7 @@ * Author(s): Vincent Rouvreau * Pawel Dlotko - 2017 - Swansea University, UK * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Bitmap_cubical_complex/doc/COPYRIGHT b/src/Bitmap_cubical_complex/doc/COPYRIGHT index bcd46b23..2b14dcb9 100644 --- a/src/Bitmap_cubical_complex/doc/COPYRIGHT +++ b/src/Bitmap_cubical_complex/doc/COPYRIGHT @@ -4,7 +4,7 @@ computational topology. Author(s): Pawel Dlotko -Copyright (C) 2015 INRIA +Copyright (C) 2015 Inria 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 diff --git a/src/Bitmap_cubical_complex/doc/Gudhi_Cubical_Complex_doc.h b/src/Bitmap_cubical_complex/doc/Gudhi_Cubical_Complex_doc.h index a5d7b60f..d1836ef0 100644 --- a/src/Bitmap_cubical_complex/doc/Gudhi_Cubical_Complex_doc.h +++ b/src/Bitmap_cubical_complex/doc/Gudhi_Cubical_Complex_doc.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2015 INRIA Sophia-Saclay (France) + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Bitmap_cubical_complex/example/Random_bitmap_cubical_complex.cpp b/src/Bitmap_cubical_complex/example/Random_bitmap_cubical_complex.cpp index f70558f2..6eb24040 100644 --- a/src/Bitmap_cubical_complex/example/Random_bitmap_cubical_complex.cpp +++ b/src/Bitmap_cubical_complex/example/Random_bitmap_cubical_complex.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2015 INRIA Saclay (France) + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex.h b/src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex.h index 770eb55f..cc19b8b5 100644 --- a/src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex.h +++ b/src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2015 INRIA Sophia-Saclay (France) + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex/counter.h b/src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex/counter.h index 705b68a0..f82d4cc3 100644 --- a/src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex/counter.h +++ b/src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex/counter.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2015 INRIA Sophia-Saclay (France) + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex_base.h b/src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex_base.h index bf257be1..47e71f8a 100644 --- a/src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex_base.h +++ b/src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex_base.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2015 INRIA Sophia-Saclay (France) + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex_periodic_boundary_conditions_base.h b/src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex_periodic_boundary_conditions_base.h index 4a0d1c74..97070cda 100644 --- a/src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex_periodic_boundary_conditions_base.h +++ b/src/Bitmap_cubical_complex/include/gudhi/Bitmap_cubical_complex_periodic_boundary_conditions_base.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2015 INRIA Sophia-Saclay (France) + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Bitmap_cubical_complex/test/Bitmap_test.cpp b/src/Bitmap_cubical_complex/test/Bitmap_test.cpp index 4af699e9..ca7bd986 100644 --- a/src/Bitmap_cubical_complex/test/Bitmap_test.cpp +++ b/src/Bitmap_cubical_complex/test/Bitmap_test.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2015 INRIA Saclay (France) + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Bitmap_cubical_complex/utilities/cubical_complex_persistence.cpp b/src/Bitmap_cubical_complex/utilities/cubical_complex_persistence.cpp index 9d1bc08c..170aa684 100644 --- a/src/Bitmap_cubical_complex/utilities/cubical_complex_persistence.cpp +++ b/src/Bitmap_cubical_complex/utilities/cubical_complex_persistence.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2015 INRIA Saclay (France) + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Bitmap_cubical_complex/utilities/periodic_cubical_complex_persistence.cpp b/src/Bitmap_cubical_complex/utilities/periodic_cubical_complex_persistence.cpp index c812cb3a..e9ba5495 100644 --- a/src/Bitmap_cubical_complex/utilities/periodic_cubical_complex_persistence.cpp +++ b/src/Bitmap_cubical_complex/utilities/periodic_cubical_complex_persistence.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2015 INRIA Saclay (France) + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Bottleneck_distance/benchmark/bottleneck_chrono.cpp b/src/Bottleneck_distance/benchmark/bottleneck_chrono.cpp index 456c570b..acafb199 100644 --- a/src/Bottleneck_distance/benchmark/bottleneck_chrono.cpp +++ b/src/Bottleneck_distance/benchmark/bottleneck_chrono.cpp @@ -4,7 +4,7 @@ * * Author: Francois Godi * - * Copyright (C) 2015 INRIA + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Bottleneck_distance/concept/Persistence_diagram.h b/src/Bottleneck_distance/concept/Persistence_diagram.h index b157f22a..d016faf4 100644 --- a/src/Bottleneck_distance/concept/Persistence_diagram.h +++ b/src/Bottleneck_distance/concept/Persistence_diagram.h @@ -4,7 +4,7 @@ * * Author: François Godi * - * Copyright (C) 2015 INRIA + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Bottleneck_distance/doc/COPYRIGHT b/src/Bottleneck_distance/doc/COPYRIGHT index 179740a6..1c2016b1 100644 --- a/src/Bottleneck_distance/doc/COPYRIGHT +++ b/src/Bottleneck_distance/doc/COPYRIGHT @@ -4,7 +4,7 @@ computational topology. Author(s): François Godi -Copyright (C) 2015 INRIA +Copyright (C) 2015 Inria 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 diff --git a/src/Bottleneck_distance/doc/Intro_bottleneck_distance.h b/src/Bottleneck_distance/doc/Intro_bottleneck_distance.h index 3998fe8d..f8fce96c 100644 --- a/src/Bottleneck_distance/doc/Intro_bottleneck_distance.h +++ b/src/Bottleneck_distance/doc/Intro_bottleneck_distance.h @@ -4,7 +4,7 @@ * * Author: François Godi * - * Copyright (C) 2015 INRIA + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Bottleneck_distance/example/alpha_rips_persistence_bottleneck_distance.cpp b/src/Bottleneck_distance/example/alpha_rips_persistence_bottleneck_distance.cpp index fd164b22..1e27887c 100644 --- a/src/Bottleneck_distance/example/alpha_rips_persistence_bottleneck_distance.cpp +++ b/src/Bottleneck_distance/example/alpha_rips_persistence_bottleneck_distance.cpp @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2017 INRIA + * Copyright (C) 2017 Inria * * 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 diff --git a/src/Bottleneck_distance/example/bottleneck_basic_example.cpp b/src/Bottleneck_distance/example/bottleneck_basic_example.cpp index d0ca4e20..3df7d12d 100644 --- a/src/Bottleneck_distance/example/bottleneck_basic_example.cpp +++ b/src/Bottleneck_distance/example/bottleneck_basic_example.cpp @@ -4,7 +4,7 @@ * * Authors: Francois Godi, small modifications by Pawel Dlotko * - * Copyright (C) 2015 INRIA + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Bottleneck_distance/include/gudhi/Bottleneck.h b/src/Bottleneck_distance/include/gudhi/Bottleneck.h index 7aee07bb..41f8b16a 100644 --- a/src/Bottleneck_distance/include/gudhi/Bottleneck.h +++ b/src/Bottleneck_distance/include/gudhi/Bottleneck.h @@ -4,7 +4,7 @@ * * Author: Francois Godi * - * Copyright (C) 2015 INRIA + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Bottleneck_distance/include/gudhi/Graph_matching.h b/src/Bottleneck_distance/include/gudhi/Graph_matching.h index f51e22e9..313e7d9c 100644 --- a/src/Bottleneck_distance/include/gudhi/Graph_matching.h +++ b/src/Bottleneck_distance/include/gudhi/Graph_matching.h @@ -4,7 +4,7 @@ * * Author: Francois Godi * - * Copyright (C) 2015 INRIA + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Bottleneck_distance/include/gudhi/Internal_point.h b/src/Bottleneck_distance/include/gudhi/Internal_point.h index 0b2d26fe..7f350f64 100644 --- a/src/Bottleneck_distance/include/gudhi/Internal_point.h +++ b/src/Bottleneck_distance/include/gudhi/Internal_point.h @@ -4,7 +4,7 @@ * * Author: Francois Godi * - * Copyright (C) 2015 INRIA + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Bottleneck_distance/include/gudhi/Neighbors_finder.h b/src/Bottleneck_distance/include/gudhi/Neighbors_finder.h index 87c7cee5..36a63ea0 100644 --- a/src/Bottleneck_distance/include/gudhi/Neighbors_finder.h +++ b/src/Bottleneck_distance/include/gudhi/Neighbors_finder.h @@ -4,7 +4,7 @@ * * Author: Francois Godi * - * Copyright (C) 2015 INRIA + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Bottleneck_distance/include/gudhi/Persistence_graph.h b/src/Bottleneck_distance/include/gudhi/Persistence_graph.h index 622b0691..cb163623 100644 --- a/src/Bottleneck_distance/include/gudhi/Persistence_graph.h +++ b/src/Bottleneck_distance/include/gudhi/Persistence_graph.h @@ -4,7 +4,7 @@ * * Author: Francois Godi * - * Copyright (C) 2015 INRIA + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Bottleneck_distance/test/bottleneck_unit_test.cpp b/src/Bottleneck_distance/test/bottleneck_unit_test.cpp index e39613b3..bce88e13 100644 --- a/src/Bottleneck_distance/test/bottleneck_unit_test.cpp +++ b/src/Bottleneck_distance/test/bottleneck_unit_test.cpp @@ -4,7 +4,7 @@ * * Author: Francois Godi * - * Copyright (C) 2015 INRIA + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Bottleneck_distance/utilities/bottleneck_distance.cpp b/src/Bottleneck_distance/utilities/bottleneck_distance.cpp index 9dd52b31..8f724f95 100644 --- a/src/Bottleneck_distance/utilities/bottleneck_distance.cpp +++ b/src/Bottleneck_distance/utilities/bottleneck_distance.cpp @@ -4,7 +4,7 @@ * * Authors: Francois Godi, small modifications by Pawel Dlotko * - * Copyright (C) 2015 INRIA + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Contraction/doc/COPYRIGHT b/src/Contraction/doc/COPYRIGHT index 1de850d7..5b606ac2 100644 --- a/src/Contraction/doc/COPYRIGHT +++ b/src/Contraction/doc/COPYRIGHT @@ -3,7 +3,7 @@ The files of this directory are part of the Gudhi Library. The Gudhi library computational topology. Author(s): David Salinas -Copyright (C) 2015 INRIA +Copyright (C) 2015 Inria 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 diff --git a/src/Contraction/example/Garland_heckbert.cpp b/src/Contraction/example/Garland_heckbert.cpp index 2b0dc973..08dd932e 100644 --- a/src/Contraction/example/Garland_heckbert.cpp +++ b/src/Contraction/example/Garland_heckbert.cpp @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-M�diterran�e (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Contraction/example/Garland_heckbert/Error_quadric.h b/src/Contraction/example/Garland_heckbert/Error_quadric.h index e7dafaa0..8bd9b545 100644 --- a/src/Contraction/example/Garland_heckbert/Error_quadric.h +++ b/src/Contraction/example/Garland_heckbert/Error_quadric.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-M�diterran�e (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Contraction/example/Rips_contraction.cpp b/src/Contraction/example/Rips_contraction.cpp index 501b0e87..7f9b150a 100644 --- a/src/Contraction/example/Rips_contraction.cpp +++ b/src/Contraction/example/Rips_contraction.cpp @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Contraction/include/gudhi/Contraction/Edge_profile.h b/src/Contraction/include/gudhi/Contraction/Edge_profile.h index e4910b27..30b1b80a 100644 --- a/src/Contraction/include/gudhi/Contraction/Edge_profile.h +++ b/src/Contraction/include/gudhi/Contraction/Edge_profile.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Contraction/include/gudhi/Contraction/policies/Contraction_visitor.h b/src/Contraction/include/gudhi/Contraction/policies/Contraction_visitor.h index 7ee05aad..fa02308b 100644 --- a/src/Contraction/include/gudhi/Contraction/policies/Contraction_visitor.h +++ b/src/Contraction/include/gudhi/Contraction/policies/Contraction_visitor.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Contraction/include/gudhi/Contraction/policies/Cost_policy.h b/src/Contraction/include/gudhi/Contraction/policies/Cost_policy.h index f4d343ec..04ce36b6 100644 --- a/src/Contraction/include/gudhi/Contraction/policies/Cost_policy.h +++ b/src/Contraction/include/gudhi/Contraction/policies/Cost_policy.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Contraction/include/gudhi/Contraction/policies/Dummy_valid_contraction.h b/src/Contraction/include/gudhi/Contraction/policies/Dummy_valid_contraction.h index 5d329496..a5567454 100644 --- a/src/Contraction/include/gudhi/Contraction/policies/Dummy_valid_contraction.h +++ b/src/Contraction/include/gudhi/Contraction/policies/Dummy_valid_contraction.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Contraction/include/gudhi/Contraction/policies/Edge_length_cost.h b/src/Contraction/include/gudhi/Contraction/policies/Edge_length_cost.h index dac2d448..1b7a825b 100644 --- a/src/Contraction/include/gudhi/Contraction/policies/Edge_length_cost.h +++ b/src/Contraction/include/gudhi/Contraction/policies/Edge_length_cost.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Contraction/include/gudhi/Contraction/policies/First_vertex_placement.h b/src/Contraction/include/gudhi/Contraction/policies/First_vertex_placement.h index 1f68db0d..0b9f8775 100644 --- a/src/Contraction/include/gudhi/Contraction/policies/First_vertex_placement.h +++ b/src/Contraction/include/gudhi/Contraction/policies/First_vertex_placement.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Contraction/include/gudhi/Contraction/policies/Link_condition_valid_contraction.h b/src/Contraction/include/gudhi/Contraction/policies/Link_condition_valid_contraction.h index 250bba27..8c869830 100644 --- a/src/Contraction/include/gudhi/Contraction/policies/Link_condition_valid_contraction.h +++ b/src/Contraction/include/gudhi/Contraction/policies/Link_condition_valid_contraction.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Contraction/include/gudhi/Contraction/policies/Middle_placement.h b/src/Contraction/include/gudhi/Contraction/policies/Middle_placement.h index 4b59f1b5..0ba23a35 100644 --- a/src/Contraction/include/gudhi/Contraction/policies/Middle_placement.h +++ b/src/Contraction/include/gudhi/Contraction/policies/Middle_placement.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Contraction/include/gudhi/Contraction/policies/Placement_policy.h b/src/Contraction/include/gudhi/Contraction/policies/Placement_policy.h index 34ffa49f..19509fad 100644 --- a/src/Contraction/include/gudhi/Contraction/policies/Placement_policy.h +++ b/src/Contraction/include/gudhi/Contraction/policies/Placement_policy.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Contraction/include/gudhi/Contraction/policies/Valid_contraction_policy.h b/src/Contraction/include/gudhi/Contraction/policies/Valid_contraction_policy.h index 78d61173..8a91f0b5 100644 --- a/src/Contraction/include/gudhi/Contraction/policies/Valid_contraction_policy.h +++ b/src/Contraction/include/gudhi/Contraction/policies/Valid_contraction_policy.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Contraction/include/gudhi/Edge_contraction.h b/src/Contraction/include/gudhi/Edge_contraction.h index cf9a2c27..fcd06996 100644 --- a/src/Contraction/include/gudhi/Edge_contraction.h +++ b/src/Contraction/include/gudhi/Edge_contraction.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Contraction/include/gudhi/Skeleton_blocker_contractor.h b/src/Contraction/include/gudhi/Skeleton_blocker_contractor.h index df884c93..13086161 100644 --- a/src/Contraction/include/gudhi/Skeleton_blocker_contractor.h +++ b/src/Contraction/include/gudhi/Skeleton_blocker_contractor.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/gui/MainWindow.cpp b/src/GudhUI/gui/MainWindow.cpp index 779ccd33..b11b80e9 100644 --- a/src/GudhUI/gui/MainWindow.cpp +++ b/src/GudhUI/gui/MainWindow.cpp @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/gui/MainWindow.h b/src/GudhUI/gui/MainWindow.h index 15664dcb..6076c2ee 100644 --- a/src/GudhUI/gui/MainWindow.h +++ b/src/GudhUI/gui/MainWindow.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/gui/Menu_edge_contraction.cpp b/src/GudhUI/gui/Menu_edge_contraction.cpp index a679b0bf..041bdf9e 100644 --- a/src/GudhUI/gui/Menu_edge_contraction.cpp +++ b/src/GudhUI/gui/Menu_edge_contraction.cpp @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/gui/Menu_edge_contraction.h b/src/GudhUI/gui/Menu_edge_contraction.h index 2d5640e8..0ef7b267 100644 --- a/src/GudhUI/gui/Menu_edge_contraction.h +++ b/src/GudhUI/gui/Menu_edge_contraction.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/gui/Menu_k_nearest_neighbors.cpp b/src/GudhUI/gui/Menu_k_nearest_neighbors.cpp index e24865f2..b1ad15c8 100644 --- a/src/GudhUI/gui/Menu_k_nearest_neighbors.cpp +++ b/src/GudhUI/gui/Menu_k_nearest_neighbors.cpp @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/gui/Menu_k_nearest_neighbors.h b/src/GudhUI/gui/Menu_k_nearest_neighbors.h index 77303b67..56b5b63d 100644 --- a/src/GudhUI/gui/Menu_k_nearest_neighbors.h +++ b/src/GudhUI/gui/Menu_k_nearest_neighbors.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/gui/Menu_persistence.cpp b/src/GudhUI/gui/Menu_persistence.cpp index 016c076b..ec990559 100644 --- a/src/GudhUI/gui/Menu_persistence.cpp +++ b/src/GudhUI/gui/Menu_persistence.cpp @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/gui/Menu_persistence.h b/src/GudhUI/gui/Menu_persistence.h index 1a2a2408..32f0c5ca 100644 --- a/src/GudhUI/gui/Menu_persistence.h +++ b/src/GudhUI/gui/Menu_persistence.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/gui/Menu_uniform_neighbors.cpp b/src/GudhUI/gui/Menu_uniform_neighbors.cpp index 20e4f98f..7f392b6c 100644 --- a/src/GudhUI/gui/Menu_uniform_neighbors.cpp +++ b/src/GudhUI/gui/Menu_uniform_neighbors.cpp @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/gui/Menu_uniform_neighbors.h b/src/GudhUI/gui/Menu_uniform_neighbors.h index 61316966..88a3823b 100644 --- a/src/GudhUI/gui/Menu_uniform_neighbors.h +++ b/src/GudhUI/gui/Menu_uniform_neighbors.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/gui/gudhui.cpp b/src/GudhUI/gui/gudhui.cpp index 276c4a5f..2a100fd5 100644 --- a/src/GudhUI/gui/gudhui.cpp +++ b/src/GudhUI/gui/gudhui.cpp @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 @@ -28,7 +28,7 @@ int main(int argc, char** argv) { QApplication application(argc, argv); application.setOrganizationDomain("inria.fr"); - application.setOrganizationName("INRIA"); + application.setOrganizationName("Inria"); application.setApplicationName("GudhUI"); MainWindow mw; diff --git a/src/GudhUI/model/Complex_typedefs.h b/src/GudhUI/model/Complex_typedefs.h index a4df2c94..347db1e3 100644 --- a/src/GudhUI/model/Complex_typedefs.h +++ b/src/GudhUI/model/Complex_typedefs.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/model/Model.h b/src/GudhUI/model/Model.h index 072d1185..1d5cc087 100644 --- a/src/GudhUI/model/Model.h +++ b/src/GudhUI/model/Model.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/utils/Bar_code_persistence.h b/src/GudhUI/utils/Bar_code_persistence.h index b527d684..49c87b3c 100644 --- a/src/GudhUI/utils/Bar_code_persistence.h +++ b/src/GudhUI/utils/Bar_code_persistence.h @@ -1,3 +1,26 @@ +/* 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): David Salinas + * + * Copyright (C) 2014 Inria + * + * 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 . + * + */ + #include // isfinite #include diff --git a/src/GudhUI/utils/Critical_points.h b/src/GudhUI/utils/Critical_points.h index e7b9ef31..fbd690f8 100644 --- a/src/GudhUI/utils/Critical_points.h +++ b/src/GudhUI/utils/Critical_points.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/utils/Edge_collapsor.h b/src/GudhUI/utils/Edge_collapsor.h index 151e9b01..b3cc7df7 100644 --- a/src/GudhUI/utils/Edge_collapsor.h +++ b/src/GudhUI/utils/Edge_collapsor.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/utils/Edge_contractor.h b/src/GudhUI/utils/Edge_contractor.h index 8a29ff4b..090baabe 100644 --- a/src/GudhUI/utils/Edge_contractor.h +++ b/src/GudhUI/utils/Edge_contractor.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/utils/Furthest_point_epsilon_net.h b/src/GudhUI/utils/Furthest_point_epsilon_net.h index 98346daa..dbb6661c 100644 --- a/src/GudhUI/utils/Furthest_point_epsilon_net.h +++ b/src/GudhUI/utils/Furthest_point_epsilon_net.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/utils/Is_manifold.h b/src/GudhUI/utils/Is_manifold.h index d0974463..732df607 100644 --- a/src/GudhUI/utils/Is_manifold.h +++ b/src/GudhUI/utils/Is_manifold.h @@ -7,7 +7,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/utils/K_nearest_builder.h b/src/GudhUI/utils/K_nearest_builder.h index 4000a331..14851d96 100644 --- a/src/GudhUI/utils/K_nearest_builder.h +++ b/src/GudhUI/utils/K_nearest_builder.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/utils/Lloyd_builder.h b/src/GudhUI/utils/Lloyd_builder.h index 18ec9fac..67595d33 100644 --- a/src/GudhUI/utils/Lloyd_builder.h +++ b/src/GudhUI/utils/Lloyd_builder.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/utils/MClock.h b/src/GudhUI/utils/MClock.h index e8d8918a..992f6fa5 100644 --- a/src/GudhUI/utils/MClock.h +++ b/src/GudhUI/utils/MClock.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/utils/Persistence_compute.h b/src/GudhUI/utils/Persistence_compute.h index 2dc03c8e..c8afded9 100644 --- a/src/GudhUI/utils/Persistence_compute.h +++ b/src/GudhUI/utils/Persistence_compute.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/utils/Rips_builder.h b/src/GudhUI/utils/Rips_builder.h index 59b4bee2..ed62c1c0 100644 --- a/src/GudhUI/utils/Rips_builder.h +++ b/src/GudhUI/utils/Rips_builder.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/utils/UI_utils.h b/src/GudhUI/utils/UI_utils.h index 9cc209d3..67a02869 100644 --- a/src/GudhUI/utils/UI_utils.h +++ b/src/GudhUI/utils/UI_utils.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/utils/Vertex_collapsor.h b/src/GudhUI/utils/Vertex_collapsor.h index 568dab2f..fca57f7d 100644 --- a/src/GudhUI/utils/Vertex_collapsor.h +++ b/src/GudhUI/utils/Vertex_collapsor.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/view/Color.h b/src/GudhUI/view/Color.h index ba0592e1..808dc2d8 100644 --- a/src/GudhUI/view/Color.h +++ b/src/GudhUI/view/Color.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/view/FirstCoordProjector.h b/src/GudhUI/view/FirstCoordProjector.h index 1333f5d3..3f8a6fd9 100644 --- a/src/GudhUI/view/FirstCoordProjector.h +++ b/src/GudhUI/view/FirstCoordProjector.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/view/Projector3D.h b/src/GudhUI/view/Projector3D.h index 2a756541..a1421f51 100644 --- a/src/GudhUI/view/Projector3D.h +++ b/src/GudhUI/view/Projector3D.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/view/View_parameter.h b/src/GudhUI/view/View_parameter.h index 9805abc2..578a0268 100644 --- a/src/GudhUI/view/View_parameter.h +++ b/src/GudhUI/view/View_parameter.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/view/Viewer.cpp b/src/GudhUI/view/Viewer.cpp index c6c2b345..42e35d6c 100644 --- a/src/GudhUI/view/Viewer.cpp +++ b/src/GudhUI/view/Viewer.cpp @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/view/Viewer.h b/src/GudhUI/view/Viewer.h index 797ddc53..414044ef 100644 --- a/src/GudhUI/view/Viewer.h +++ b/src/GudhUI/view/Viewer.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/view/Viewer_instructor.cpp b/src/GudhUI/view/Viewer_instructor.cpp index 1ddd4d8b..a9dc4525 100644 --- a/src/GudhUI/view/Viewer_instructor.cpp +++ b/src/GudhUI/view/Viewer_instructor.cpp @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/GudhUI/view/Viewer_instructor.h b/src/GudhUI/view/Viewer_instructor.h index 05c5c1fc..4b06acb8 100644 --- a/src/GudhUI/view/Viewer_instructor.h +++ b/src/GudhUI/view/Viewer_instructor.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Hasse_complex/include/gudhi/Hasse_complex.h b/src/Hasse_complex/include/gudhi/Hasse_complex.h index e67f7609..efcaea55 100644 --- a/src/Hasse_complex/include/gudhi/Hasse_complex.h +++ b/src/Hasse_complex/include/gudhi/Hasse_complex.h @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Nerve_GIC/doc/COPYRIGHT b/src/Nerve_GIC/doc/COPYRIGHT index 0c36a526..6b33053e 100644 --- a/src/Nerve_GIC/doc/COPYRIGHT +++ b/src/Nerve_GIC/doc/COPYRIGHT @@ -4,7 +4,7 @@ computational topology. Author(s): Mathieu Carrière -Copyright (C) 2017 INRIA +Copyright (C) 2017 Inria 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 diff --git a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h index 2b648425..bc8aecc3 100644 --- a/src/Nerve_GIC/doc/Intro_graph_induced_complex.h +++ b/src/Nerve_GIC/doc/Intro_graph_induced_complex.h @@ -4,7 +4,7 @@ * * Author(s): Mathieu Carriere * - * Copyright (C) 2017 INRIA + * Copyright (C) 2017 Inria * * 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 diff --git a/src/Nerve_GIC/example/CoordGIC.cpp b/src/Nerve_GIC/example/CoordGIC.cpp index d544db94..73edae18 100644 --- a/src/Nerve_GIC/example/CoordGIC.cpp +++ b/src/Nerve_GIC/example/CoordGIC.cpp @@ -4,7 +4,7 @@ * * Author(s): Mathieu Carrière * - * Copyright (C) 2017 INRIA + * Copyright (C) 2017 Inria * * 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 diff --git a/src/Nerve_GIC/example/FuncGIC.cpp b/src/Nerve_GIC/example/FuncGIC.cpp index cb0f0d63..1f5de999 100644 --- a/src/Nerve_GIC/example/FuncGIC.cpp +++ b/src/Nerve_GIC/example/FuncGIC.cpp @@ -4,7 +4,7 @@ * * Author(s): Mathieu Carrière * - * Copyright (C) 2017 INRIA + * Copyright (C) 2017 Inria * * 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 diff --git a/src/Nerve_GIC/include/gudhi/GIC.h b/src/Nerve_GIC/include/gudhi/GIC.h index d6f3ded6..aa6478e5 100644 --- a/src/Nerve_GIC/include/gudhi/GIC.h +++ b/src/Nerve_GIC/include/gudhi/GIC.h @@ -4,7 +4,7 @@ * * Author: Mathieu Carriere * - * Copyright (C) 2017 INRIA + * Copyright (C) 2017 Inria * * 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 diff --git a/src/Nerve_GIC/test/test_GIC.cpp b/src/Nerve_GIC/test/test_GIC.cpp index e3067d35..0db2cce2 100644 --- a/src/Nerve_GIC/test/test_GIC.cpp +++ b/src/Nerve_GIC/test/test_GIC.cpp @@ -4,7 +4,7 @@ * * Author(s): Mathieu Carrière * - * Copyright (C) 2017 INRIA + * Copyright (C) 2017 Inria * * 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 diff --git a/src/Nerve_GIC/utilities/KeplerMapperVisuFromTxtFile.py b/src/Nerve_GIC/utilities/KeplerMapperVisuFromTxtFile.py index c811f610..701e7a52 100755 --- a/src/Nerve_GIC/utilities/KeplerMapperVisuFromTxtFile.py +++ b/src/Nerve_GIC/utilities/KeplerMapperVisuFromTxtFile.py @@ -11,7 +11,7 @@ import argparse Author(s): Mathieu Carriere - Copyright (C) 2017 INRIA + Copyright (C) 2017 Inria 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 @@ -28,7 +28,7 @@ import argparse """ __author__ = "Mathieu Carriere" -__copyright__ = "Copyright (C) 2017 INRIA" +__copyright__ = "Copyright (C) 2017 Inria" __license__ = "GPL v3" parser = argparse.ArgumentParser(description='Creates an html Keppler Mapper ' diff --git a/src/Nerve_GIC/utilities/Nerve.cpp b/src/Nerve_GIC/utilities/Nerve.cpp index aefc3874..667129e0 100644 --- a/src/Nerve_GIC/utilities/Nerve.cpp +++ b/src/Nerve_GIC/utilities/Nerve.cpp @@ -4,7 +4,7 @@ * * Author(s): Mathieu Carrière * - * Copyright (C) 2017 INRIA + * Copyright (C) 2017 Inria * * 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 diff --git a/src/Nerve_GIC/utilities/VoronoiGIC.cpp b/src/Nerve_GIC/utilities/VoronoiGIC.cpp index 54bb871e..33deca40 100644 --- a/src/Nerve_GIC/utilities/VoronoiGIC.cpp +++ b/src/Nerve_GIC/utilities/VoronoiGIC.cpp @@ -4,7 +4,7 @@ * * Author(s): Mathieu Carrière * - * Copyright (C) 2017 INRIA + * Copyright (C) 2017 Inria * * 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 diff --git a/src/Persistence_representations/concept/Real_valued_topological_data.h b/src/Persistence_representations/concept/Real_valued_topological_data.h index 1d3595ad..22ef6d72 100644 --- a/src/Persistence_representations/concept/Real_valued_topological_data.h +++ b/src/Persistence_representations/concept/Real_valued_topological_data.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/concept/Topological_data_with_averages.h b/src/Persistence_representations/concept/Topological_data_with_averages.h index 9ebd105f..aa64467f 100644 --- a/src/Persistence_representations/concept/Topological_data_with_averages.h +++ b/src/Persistence_representations/concept/Topological_data_with_averages.h @@ -5,7 +5,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/concept/Topological_data_with_distances.h b/src/Persistence_representations/concept/Topological_data_with_distances.h index a6a62307..c8eb2b34 100644 --- a/src/Persistence_representations/concept/Topological_data_with_distances.h +++ b/src/Persistence_representations/concept/Topological_data_with_distances.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/concept/Topological_data_with_scalar_product.h b/src/Persistence_representations/concept/Topological_data_with_scalar_product.h index 2e506ca9..0f08b8c6 100644 --- a/src/Persistence_representations/concept/Topological_data_with_scalar_product.h +++ b/src/Persistence_representations/concept/Topological_data_with_scalar_product.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/concept/Vectorized_topological_data.h b/src/Persistence_representations/concept/Vectorized_topological_data.h index b6b5b109..365105d6 100644 --- a/src/Persistence_representations/concept/Vectorized_topological_data.h +++ b/src/Persistence_representations/concept/Vectorized_topological_data.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/doc/Persistence_representations_doc.h b/src/Persistence_representations/doc/Persistence_representations_doc.h index 38bd3a21..4d850a02 100644 --- a/src/Persistence_representations/doc/Persistence_representations_doc.h +++ b/src/Persistence_representations/doc/Persistence_representations_doc.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA Sophia-Saclay (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/example/persistence_heat_maps.cpp b/src/Persistence_representations/example/persistence_heat_maps.cpp index 2a472ac6..323b57e9 100644 --- a/src/Persistence_representations/example/persistence_heat_maps.cpp +++ b/src/Persistence_representations/example/persistence_heat_maps.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/example/persistence_intervals.cpp b/src/Persistence_representations/example/persistence_intervals.cpp index c1ceb458..b5dcf25c 100644 --- a/src/Persistence_representations/example/persistence_intervals.cpp +++ b/src/Persistence_representations/example/persistence_intervals.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/example/persistence_landscape.cpp b/src/Persistence_representations/example/persistence_landscape.cpp index 400a9ae1..27542cf7 100644 --- a/src/Persistence_representations/example/persistence_landscape.cpp +++ b/src/Persistence_representations/example/persistence_landscape.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/example/persistence_landscape_on_grid.cpp b/src/Persistence_representations/example/persistence_landscape_on_grid.cpp index b201b397..0f471a67 100644 --- a/src/Persistence_representations/example/persistence_landscape_on_grid.cpp +++ b/src/Persistence_representations/example/persistence_landscape_on_grid.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/example/persistence_vectors.cpp b/src/Persistence_representations/example/persistence_vectors.cpp index 834ae644..072e530d 100644 --- a/src/Persistence_representations/example/persistence_vectors.cpp +++ b/src/Persistence_representations/example/persistence_vectors.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/include/gudhi/PSSK.h b/src/Persistence_representations/include/gudhi/PSSK.h index 630f5623..e1174455 100644 --- a/src/Persistence_representations/include/gudhi/PSSK.h +++ b/src/Persistence_representations/include/gudhi/PSSK.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/include/gudhi/Persistence_heat_maps.h b/src/Persistence_representations/include/gudhi/Persistence_heat_maps.h index a80c3c40..35e51e63 100644 --- a/src/Persistence_representations/include/gudhi/Persistence_heat_maps.h +++ b/src/Persistence_representations/include/gudhi/Persistence_heat_maps.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/include/gudhi/Persistence_intervals.h b/src/Persistence_representations/include/gudhi/Persistence_intervals.h index 3d04d8b7..76eac7d7 100644 --- a/src/Persistence_representations/include/gudhi/Persistence_intervals.h +++ b/src/Persistence_representations/include/gudhi/Persistence_intervals.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/include/gudhi/Persistence_intervals_with_distances.h b/src/Persistence_representations/include/gudhi/Persistence_intervals_with_distances.h index 79908883..f48d1a3b 100644 --- a/src/Persistence_representations/include/gudhi/Persistence_intervals_with_distances.h +++ b/src/Persistence_representations/include/gudhi/Persistence_intervals_with_distances.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/include/gudhi/Persistence_landscape.h b/src/Persistence_representations/include/gudhi/Persistence_landscape.h index c5aa7867..4381a55b 100644 --- a/src/Persistence_representations/include/gudhi/Persistence_landscape.h +++ b/src/Persistence_representations/include/gudhi/Persistence_landscape.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/include/gudhi/Persistence_landscape_on_grid.h b/src/Persistence_representations/include/gudhi/Persistence_landscape_on_grid.h index 84fd22ed..fd8a181c 100644 --- a/src/Persistence_representations/include/gudhi/Persistence_landscape_on_grid.h +++ b/src/Persistence_representations/include/gudhi/Persistence_landscape_on_grid.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/include/gudhi/Persistence_vectors.h b/src/Persistence_representations/include/gudhi/Persistence_vectors.h index 63577e46..9c04be1d 100644 --- a/src/Persistence_representations/include/gudhi/Persistence_vectors.h +++ b/src/Persistence_representations/include/gudhi/Persistence_vectors.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/include/gudhi/common_persistence_representations.h b/src/Persistence_representations/include/gudhi/common_persistence_representations.h index 44e125a7..3d03f1f6 100644 --- a/src/Persistence_representations/include/gudhi/common_persistence_representations.h +++ b/src/Persistence_representations/include/gudhi/common_persistence_representations.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/include/gudhi/read_persistence_from_file.h b/src/Persistence_representations/include/gudhi/read_persistence_from_file.h index 83b89d0e..e0fc7107 100644 --- a/src/Persistence_representations/include/gudhi/read_persistence_from_file.h +++ b/src/Persistence_representations/include/gudhi/read_persistence_from_file.h @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/test/persistence_heat_maps_test.cpp b/src/Persistence_representations/test/persistence_heat_maps_test.cpp index e36108b7..5fad8051 100644 --- a/src/Persistence_representations/test/persistence_heat_maps_test.cpp +++ b/src/Persistence_representations/test/persistence_heat_maps_test.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/test/persistence_intervals_test.cpp b/src/Persistence_representations/test/persistence_intervals_test.cpp index f555e243..a89db9e3 100644 --- a/src/Persistence_representations/test/persistence_intervals_test.cpp +++ b/src/Persistence_representations/test/persistence_intervals_test.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/test/persistence_intervals_with_distances_test.cpp b/src/Persistence_representations/test/persistence_intervals_with_distances_test.cpp index 631e4d70..6ba9a470 100644 --- a/src/Persistence_representations/test/persistence_intervals_with_distances_test.cpp +++ b/src/Persistence_representations/test/persistence_intervals_with_distances_test.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/test/persistence_lanscapes_on_grid_test.cpp b/src/Persistence_representations/test/persistence_lanscapes_on_grid_test.cpp index 130ac8cc..7eca413b 100644 --- a/src/Persistence_representations/test/persistence_lanscapes_on_grid_test.cpp +++ b/src/Persistence_representations/test/persistence_lanscapes_on_grid_test.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/test/persistence_lanscapes_test.cpp b/src/Persistence_representations/test/persistence_lanscapes_test.cpp index e98ef894..27ad0987 100644 --- a/src/Persistence_representations/test/persistence_lanscapes_test.cpp +++ b/src/Persistence_representations/test/persistence_lanscapes_test.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/test/read_persistence_from_file_test.cpp b/src/Persistence_representations/test/read_persistence_from_file_test.cpp index 276b92ab..c3e8cb4e 100644 --- a/src/Persistence_representations/test/read_persistence_from_file_test.cpp +++ b/src/Persistence_representations/test/read_persistence_from_file_test.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/test/vector_representation_test.cpp b/src/Persistence_representations/test/vector_representation_test.cpp index c545dce7..a6b9314e 100644 --- a/src/Persistence_representations/test/vector_representation_test.cpp +++ b/src/Persistence_representations/test/vector_representation_test.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_heat_maps/average_persistence_heat_maps.cpp b/src/Persistence_representations/utilities/persistence_heat_maps/average_persistence_heat_maps.cpp index 6739e0b6..2cbd812b 100644 --- a/src/Persistence_representations/utilities/persistence_heat_maps/average_persistence_heat_maps.cpp +++ b/src/Persistence_representations/utilities/persistence_heat_maps/average_persistence_heat_maps.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_heat_maps/compute_distance_of_persistence_heat_maps.cpp b/src/Persistence_representations/utilities/persistence_heat_maps/compute_distance_of_persistence_heat_maps.cpp index ed8278a2..14d0db8f 100644 --- a/src/Persistence_representations/utilities/persistence_heat_maps/compute_distance_of_persistence_heat_maps.cpp +++ b/src/Persistence_representations/utilities/persistence_heat_maps/compute_distance_of_persistence_heat_maps.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_heat_maps/compute_scalar_product_of_persistence_heat_maps.cpp b/src/Persistence_representations/utilities/persistence_heat_maps/compute_scalar_product_of_persistence_heat_maps.cpp index 63626853..12fceedc 100644 --- a/src/Persistence_representations/utilities/persistence_heat_maps/compute_scalar_product_of_persistence_heat_maps.cpp +++ b/src/Persistence_representations/utilities/persistence_heat_maps/compute_scalar_product_of_persistence_heat_maps.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_heat_maps/create_p_h_m_weighted_by_arctan_of_their_persistence.cpp b/src/Persistence_representations/utilities/persistence_heat_maps/create_p_h_m_weighted_by_arctan_of_their_persistence.cpp index b4a1daa5..21c553b9 100644 --- a/src/Persistence_representations/utilities/persistence_heat_maps/create_p_h_m_weighted_by_arctan_of_their_persistence.cpp +++ b/src/Persistence_representations/utilities/persistence_heat_maps/create_p_h_m_weighted_by_arctan_of_their_persistence.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * -* Copyright (C) 2016 INRIA (France) +* Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_heat_maps/create_p_h_m_weighted_by_distance_from_diagonal.cpp b/src/Persistence_representations/utilities/persistence_heat_maps/create_p_h_m_weighted_by_distance_from_diagonal.cpp index c50f9ddb..99b0bd17 100644 --- a/src/Persistence_representations/utilities/persistence_heat_maps/create_p_h_m_weighted_by_distance_from_diagonal.cpp +++ b/src/Persistence_representations/utilities/persistence_heat_maps/create_p_h_m_weighted_by_distance_from_diagonal.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_heat_maps/create_p_h_m_weighted_by_squared_diag_distance.cpp b/src/Persistence_representations/utilities/persistence_heat_maps/create_p_h_m_weighted_by_squared_diag_distance.cpp index 59ff3c24..a4b6e458 100644 --- a/src/Persistence_representations/utilities/persistence_heat_maps/create_p_h_m_weighted_by_squared_diag_distance.cpp +++ b/src/Persistence_representations/utilities/persistence_heat_maps/create_p_h_m_weighted_by_squared_diag_distance.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_heat_maps/create_persistence_heat_maps.cpp b/src/Persistence_representations/utilities/persistence_heat_maps/create_persistence_heat_maps.cpp index 25cd1067..5960a89f 100644 --- a/src/Persistence_representations/utilities/persistence_heat_maps/create_persistence_heat_maps.cpp +++ b/src/Persistence_representations/utilities/persistence_heat_maps/create_persistence_heat_maps.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_heat_maps/create_pssk.cpp b/src/Persistence_representations/utilities/persistence_heat_maps/create_pssk.cpp index 97ddb8f0..04f33915 100644 --- a/src/Persistence_representations/utilities/persistence_heat_maps/create_pssk.cpp +++ b/src/Persistence_representations/utilities/persistence_heat_maps/create_pssk.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_heat_maps/plot_persistence_heat_map.cpp b/src/Persistence_representations/utilities/persistence_heat_maps/plot_persistence_heat_map.cpp index 63711d83..e4402589 100644 --- a/src/Persistence_representations/utilities/persistence_heat_maps/plot_persistence_heat_map.cpp +++ b/src/Persistence_representations/utilities/persistence_heat_maps/plot_persistence_heat_map.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_intervals/compute_birth_death_range_in_persistence_diagram.cpp b/src/Persistence_representations/utilities/persistence_intervals/compute_birth_death_range_in_persistence_diagram.cpp index 9102da79..3be3de8f 100644 --- a/src/Persistence_representations/utilities/persistence_intervals/compute_birth_death_range_in_persistence_diagram.cpp +++ b/src/Persistence_representations/utilities/persistence_intervals/compute_birth_death_range_in_persistence_diagram.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_intervals/compute_bottleneck_distance.cpp b/src/Persistence_representations/utilities/persistence_intervals/compute_bottleneck_distance.cpp index c8290845..a6953b98 100644 --- a/src/Persistence_representations/utilities/persistence_intervals/compute_bottleneck_distance.cpp +++ b/src/Persistence_representations/utilities/persistence_intervals/compute_bottleneck_distance.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_intervals/compute_number_of_dominant_intervals.cpp b/src/Persistence_representations/utilities/persistence_intervals/compute_number_of_dominant_intervals.cpp index b3d126f0..4f052f42 100644 --- a/src/Persistence_representations/utilities/persistence_intervals/compute_number_of_dominant_intervals.cpp +++ b/src/Persistence_representations/utilities/persistence_intervals/compute_number_of_dominant_intervals.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_intervals/plot_histogram_of_intervals_lengths.cpp b/src/Persistence_representations/utilities/persistence_intervals/plot_histogram_of_intervals_lengths.cpp index ccb5b645..f283971b 100644 --- a/src/Persistence_representations/utilities/persistence_intervals/plot_histogram_of_intervals_lengths.cpp +++ b/src/Persistence_representations/utilities/persistence_intervals/plot_histogram_of_intervals_lengths.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_intervals/plot_persistence_Betti_numbers.cpp b/src/Persistence_representations/utilities/persistence_intervals/plot_persistence_Betti_numbers.cpp index b433c2b3..1cacbcd0 100644 --- a/src/Persistence_representations/utilities/persistence_intervals/plot_persistence_Betti_numbers.cpp +++ b/src/Persistence_representations/utilities/persistence_intervals/plot_persistence_Betti_numbers.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_intervals/plot_persistence_intervals.cpp b/src/Persistence_representations/utilities/persistence_intervals/plot_persistence_intervals.cpp index 33387802..f92d5782 100644 --- a/src/Persistence_representations/utilities/persistence_intervals/plot_persistence_intervals.cpp +++ b/src/Persistence_representations/utilities/persistence_intervals/plot_persistence_intervals.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_landscapes/average_landscapes.cpp b/src/Persistence_representations/utilities/persistence_landscapes/average_landscapes.cpp index 1a59be8c..4048f508 100644 --- a/src/Persistence_representations/utilities/persistence_landscapes/average_landscapes.cpp +++ b/src/Persistence_representations/utilities/persistence_landscapes/average_landscapes.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_landscapes/compute_distance_of_landscapes.cpp b/src/Persistence_representations/utilities/persistence_landscapes/compute_distance_of_landscapes.cpp index 5062f521..253fa273 100644 --- a/src/Persistence_representations/utilities/persistence_landscapes/compute_distance_of_landscapes.cpp +++ b/src/Persistence_representations/utilities/persistence_landscapes/compute_distance_of_landscapes.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_landscapes/compute_scalar_product_of_landscapes.cpp b/src/Persistence_representations/utilities/persistence_landscapes/compute_scalar_product_of_landscapes.cpp index 5b5e9fa3..11fe2886 100644 --- a/src/Persistence_representations/utilities/persistence_landscapes/compute_scalar_product_of_landscapes.cpp +++ b/src/Persistence_representations/utilities/persistence_landscapes/compute_scalar_product_of_landscapes.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_landscapes/create_landscapes.cpp b/src/Persistence_representations/utilities/persistence_landscapes/create_landscapes.cpp index 6030e994..59aad2f3 100644 --- a/src/Persistence_representations/utilities/persistence_landscapes/create_landscapes.cpp +++ b/src/Persistence_representations/utilities/persistence_landscapes/create_landscapes.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_landscapes/plot_landscapes.cpp b/src/Persistence_representations/utilities/persistence_landscapes/plot_landscapes.cpp index c797a7a8..f32a92a1 100644 --- a/src/Persistence_representations/utilities/persistence_landscapes/plot_landscapes.cpp +++ b/src/Persistence_representations/utilities/persistence_landscapes/plot_landscapes.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_landscapes_on_grid/average_landscapes_on_grid.cpp b/src/Persistence_representations/utilities/persistence_landscapes_on_grid/average_landscapes_on_grid.cpp index 0b098d1a..47102087 100644 --- a/src/Persistence_representations/utilities/persistence_landscapes_on_grid/average_landscapes_on_grid.cpp +++ b/src/Persistence_representations/utilities/persistence_landscapes_on_grid/average_landscapes_on_grid.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_landscapes_on_grid/compute_distance_of_landscapes_on_grid.cpp b/src/Persistence_representations/utilities/persistence_landscapes_on_grid/compute_distance_of_landscapes_on_grid.cpp index fd0fcd15..6cf2739d 100644 --- a/src/Persistence_representations/utilities/persistence_landscapes_on_grid/compute_distance_of_landscapes_on_grid.cpp +++ b/src/Persistence_representations/utilities/persistence_landscapes_on_grid/compute_distance_of_landscapes_on_grid.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_landscapes_on_grid/compute_scalar_product_of_landscapes_on_grid.cpp b/src/Persistence_representations/utilities/persistence_landscapes_on_grid/compute_scalar_product_of_landscapes_on_grid.cpp index 01de3dee..9417be6b 100644 --- a/src/Persistence_representations/utilities/persistence_landscapes_on_grid/compute_scalar_product_of_landscapes_on_grid.cpp +++ b/src/Persistence_representations/utilities/persistence_landscapes_on_grid/compute_scalar_product_of_landscapes_on_grid.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_landscapes_on_grid/create_landscapes_on_grid.cpp b/src/Persistence_representations/utilities/persistence_landscapes_on_grid/create_landscapes_on_grid.cpp index 78e8ef57..46e229bc 100644 --- a/src/Persistence_representations/utilities/persistence_landscapes_on_grid/create_landscapes_on_grid.cpp +++ b/src/Persistence_representations/utilities/persistence_landscapes_on_grid/create_landscapes_on_grid.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_landscapes_on_grid/plot_landscapes_on_grid.cpp b/src/Persistence_representations/utilities/persistence_landscapes_on_grid/plot_landscapes_on_grid.cpp index dddb3615..39e438d2 100644 --- a/src/Persistence_representations/utilities/persistence_landscapes_on_grid/plot_landscapes_on_grid.cpp +++ b/src/Persistence_representations/utilities/persistence_landscapes_on_grid/plot_landscapes_on_grid.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_vectors/average_persistence_vectors.cpp b/src/Persistence_representations/utilities/persistence_vectors/average_persistence_vectors.cpp index 0144e76f..45199838 100644 --- a/src/Persistence_representations/utilities/persistence_vectors/average_persistence_vectors.cpp +++ b/src/Persistence_representations/utilities/persistence_vectors/average_persistence_vectors.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_vectors/compute_distance_of_persistence_vectors.cpp b/src/Persistence_representations/utilities/persistence_vectors/compute_distance_of_persistence_vectors.cpp index 7e66d25e..0db7dbec 100644 --- a/src/Persistence_representations/utilities/persistence_vectors/compute_distance_of_persistence_vectors.cpp +++ b/src/Persistence_representations/utilities/persistence_vectors/compute_distance_of_persistence_vectors.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_vectors/compute_scalar_product_of_persistence_vectors.cpp b/src/Persistence_representations/utilities/persistence_vectors/compute_scalar_product_of_persistence_vectors.cpp index 303c6e3e..8e99251b 100644 --- a/src/Persistence_representations/utilities/persistence_vectors/compute_scalar_product_of_persistence_vectors.cpp +++ b/src/Persistence_representations/utilities/persistence_vectors/compute_scalar_product_of_persistence_vectors.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_vectors/create_persistence_vectors.cpp b/src/Persistence_representations/utilities/persistence_vectors/create_persistence_vectors.cpp index cc5e5393..364284e5 100644 --- a/src/Persistence_representations/utilities/persistence_vectors/create_persistence_vectors.cpp +++ b/src/Persistence_representations/utilities/persistence_vectors/create_persistence_vectors.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistence_representations/utilities/persistence_vectors/plot_persistence_vectors.cpp b/src/Persistence_representations/utilities/persistence_vectors/plot_persistence_vectors.cpp index aa33107d..550e47c5 100644 --- a/src/Persistence_representations/utilities/persistence_vectors/plot_persistence_vectors.cpp +++ b/src/Persistence_representations/utilities/persistence_vectors/plot_persistence_vectors.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Persistent_cohomology/benchmark/performance_rips_persistence.cpp b/src/Persistent_cohomology/benchmark/performance_rips_persistence.cpp index 252e8aef..3b00d7a9 100644 --- a/src/Persistent_cohomology/benchmark/performance_rips_persistence.cpp +++ b/src/Persistent_cohomology/benchmark/performance_rips_persistence.cpp @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Persistent_cohomology/concept/CoefficientField.h b/src/Persistent_cohomology/concept/CoefficientField.h index 953b06c2..9d066cca 100644 --- a/src/Persistent_cohomology/concept/CoefficientField.h +++ b/src/Persistent_cohomology/concept/CoefficientField.h @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Persistent_cohomology/concept/FilteredComplex.h b/src/Persistent_cohomology/concept/FilteredComplex.h index d6b662e9..178503c9 100644 --- a/src/Persistent_cohomology/concept/FilteredComplex.h +++ b/src/Persistent_cohomology/concept/FilteredComplex.h @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Persistent_cohomology/concept/PersistentHomology.h b/src/Persistent_cohomology/concept/PersistentHomology.h index 111723a5..f9a78763 100644 --- a/src/Persistent_cohomology/concept/PersistentHomology.h +++ b/src/Persistent_cohomology/concept/PersistentHomology.h @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Persistent_cohomology/doc/COPYRIGHT b/src/Persistent_cohomology/doc/COPYRIGHT index 34345bef..6cde9520 100644 --- a/src/Persistent_cohomology/doc/COPYRIGHT +++ b/src/Persistent_cohomology/doc/COPYRIGHT @@ -4,7 +4,7 @@ computational topology. Author(s): Clément Maria -Copyright (C) 2015 INRIA +Copyright (C) 2015 Inria 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 diff --git a/src/Persistent_cohomology/doc/Intro_persistent_cohomology.h b/src/Persistent_cohomology/doc/Intro_persistent_cohomology.h index 3113a22c..5fb9d4d2 100644 --- a/src/Persistent_cohomology/doc/Intro_persistent_cohomology.h +++ b/src/Persistent_cohomology/doc/Intro_persistent_cohomology.h @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Persistent_cohomology/example/custom_persistence_sort.cpp b/src/Persistent_cohomology/example/custom_persistence_sort.cpp index 64f2a4dc..35366144 100644 --- a/src/Persistent_cohomology/example/custom_persistence_sort.cpp +++ b/src/Persistent_cohomology/example/custom_persistence_sort.cpp @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2014 INRIA Saclay (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Persistent_cohomology/example/persistence_from_file.cpp b/src/Persistent_cohomology/example/persistence_from_file.cpp index eafa3fd5..c40434a4 100644 --- a/src/Persistent_cohomology/example/persistence_from_file.cpp +++ b/src/Persistent_cohomology/example/persistence_from_file.cpp @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2014 INRIA Saclay (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Persistent_cohomology/example/persistence_from_simple_simplex_tree.cpp b/src/Persistent_cohomology/example/persistence_from_simple_simplex_tree.cpp index 8ef479d4..ffccfd86 100644 --- a/src/Persistent_cohomology/example/persistence_from_simple_simplex_tree.cpp +++ b/src/Persistent_cohomology/example/persistence_from_simple_simplex_tree.cpp @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Persistent_cohomology/example/plain_homology.cpp b/src/Persistent_cohomology/example/plain_homology.cpp index a5ae09c8..a2256060 100644 --- a/src/Persistent_cohomology/example/plain_homology.cpp +++ b/src/Persistent_cohomology/example/plain_homology.cpp @@ -4,7 +4,7 @@ * * Author(s): Marc Glisse * - * Copyright (C) 2015 INRIA Saclay - Ile-de-France (France) + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Persistent_cohomology/example/rips_multifield_persistence.cpp b/src/Persistent_cohomology/example/rips_multifield_persistence.cpp index dae36ed2..626ec2ef 100644 --- a/src/Persistent_cohomology/example/rips_multifield_persistence.cpp +++ b/src/Persistent_cohomology/example/rips_multifield_persistence.cpp @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Persistent_cohomology/example/rips_persistence_step_by_step.cpp b/src/Persistent_cohomology/example/rips_persistence_step_by_step.cpp index c1de0ef8..7c81fcfb 100644 --- a/src/Persistent_cohomology/example/rips_persistence_step_by_step.cpp +++ b/src/Persistent_cohomology/example/rips_persistence_step_by_step.cpp @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Persistent_cohomology/example/rips_persistence_via_boundary_matrix.cpp b/src/Persistent_cohomology/example/rips_persistence_via_boundary_matrix.cpp index 9618f278..c7607dce 100644 --- a/src/Persistent_cohomology/example/rips_persistence_via_boundary_matrix.cpp +++ b/src/Persistent_cohomology/example/rips_persistence_via_boundary_matrix.cpp @@ -4,7 +4,7 @@ * * Author(s): Clément Maria, Marc Glisse * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h index a8c9afa3..c68b5c0b 100644 --- a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h +++ b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology/Field_Zp.h b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology/Field_Zp.h index 6db16e69..e98b4bb4 100644 --- a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology/Field_Zp.h +++ b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology/Field_Zp.h @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology/Multi_field.h b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology/Multi_field.h index 38bc08d1..2bae8654 100644 --- a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology/Multi_field.h +++ b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology/Multi_field.h @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology/Persistent_cohomology_column.h b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology/Persistent_cohomology_column.h index 5deb2d88..de6c0750 100644 --- a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology/Persistent_cohomology_column.h +++ b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology/Persistent_cohomology_column.h @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Rips_complex/concept/SimplicialComplexForRips.h b/src/Rips_complex/concept/SimplicialComplexForRips.h index 7dab0615..3c5acecf 100644 --- a/src/Rips_complex/concept/SimplicialComplexForRips.h +++ b/src/Rips_complex/concept/SimplicialComplexForRips.h @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Rips_complex/doc/COPYRIGHT b/src/Rips_complex/doc/COPYRIGHT index 594b7d03..2c31a0d6 100644 --- a/src/Rips_complex/doc/COPYRIGHT +++ b/src/Rips_complex/doc/COPYRIGHT @@ -4,7 +4,7 @@ computational topology. Author(s): Clément Maria, Pawel Dlotko, Vincent Rouvreau -Copyright (C) 2015 INRIA +Copyright (C) 2015 Inria 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 diff --git a/src/Rips_complex/doc/Intro_rips_complex.h b/src/Rips_complex/doc/Intro_rips_complex.h index 5a551e60..712d3b6e 100644 --- a/src/Rips_complex/doc/Intro_rips_complex.h +++ b/src/Rips_complex/doc/Intro_rips_complex.h @@ -4,7 +4,7 @@ * * Author(s): Clément Maria, Pawel Dlotko, Vincent Rouvreau * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Rips_complex/include/gudhi/Rips_complex.h b/src/Rips_complex/include/gudhi/Rips_complex.h index 1e4b76a7..f0fe57f4 100644 --- a/src/Rips_complex/include/gudhi/Rips_complex.h +++ b/src/Rips_complex/include/gudhi/Rips_complex.h @@ -4,7 +4,7 @@ * * Author(s): Clément Maria, Pawel Dlotko, Vincent Rouvreau * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Rips_complex/include/gudhi/Sparse_rips_complex.h b/src/Rips_complex/include/gudhi/Sparse_rips_complex.h index 1a9d6ebb..19a44b28 100644 --- a/src/Rips_complex/include/gudhi/Sparse_rips_complex.h +++ b/src/Rips_complex/include/gudhi/Sparse_rips_complex.h @@ -4,7 +4,7 @@ * * Author(s): Marc Glisse * - * Copyright (C) 2018 INRIA + * Copyright (C) 2018 Inria * * 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 diff --git a/src/Rips_complex/test/test_rips_complex.cpp b/src/Rips_complex/test/test_rips_complex.cpp index 4e7b79d2..b8b444c9 100644 --- a/src/Rips_complex/test/test_rips_complex.cpp +++ b/src/Rips_complex/test/test_rips_complex.cpp @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2016 INRIA Saclay (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Rips_complex/utilities/rips_correlation_matrix_persistence.cpp b/src/Rips_complex/utilities/rips_correlation_matrix_persistence.cpp index c2082fae..d4671b45 100644 --- a/src/Rips_complex/utilities/rips_correlation_matrix_persistence.cpp +++ b/src/Rips_complex/utilities/rips_correlation_matrix_persistence.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko, Vincent Rouvreau * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Rips_complex/utilities/rips_distance_matrix_persistence.cpp b/src/Rips_complex/utilities/rips_distance_matrix_persistence.cpp index ca3c0327..53191ca7 100644 --- a/src/Rips_complex/utilities/rips_distance_matrix_persistence.cpp +++ b/src/Rips_complex/utilities/rips_distance_matrix_persistence.cpp @@ -4,7 +4,7 @@ * * Author(s): Pawel Dlotko, Vincent Rouvreau * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Rips_complex/utilities/rips_persistence.cpp b/src/Rips_complex/utilities/rips_persistence.cpp index 8405c014..7cee927e 100644 --- a/src/Rips_complex/utilities/rips_persistence.cpp +++ b/src/Rips_complex/utilities/rips_persistence.cpp @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Rips_complex/utilities/sparse_rips_persistence.cpp b/src/Rips_complex/utilities/sparse_rips_persistence.cpp index d4bae3ba..bcd5c2c5 100644 --- a/src/Rips_complex/utilities/sparse_rips_persistence.cpp +++ b/src/Rips_complex/utilities/sparse_rips_persistence.cpp @@ -4,7 +4,7 @@ * * Author(s): Marc Glisse, Clément Maria * - * Copyright (C) 2018 INRIA + * Copyright (C) 2018 Inria * * 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 diff --git a/src/Simplex_tree/concept/FiltrationValue.h b/src/Simplex_tree/concept/FiltrationValue.h index 79ca06cc..f4dcf985 100644 --- a/src/Simplex_tree/concept/FiltrationValue.h +++ b/src/Simplex_tree/concept/FiltrationValue.h @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Simplex_tree/concept/IndexingTag.h b/src/Simplex_tree/concept/IndexingTag.h index 1dcdd756..37e7e294 100644 --- a/src/Simplex_tree/concept/IndexingTag.h +++ b/src/Simplex_tree/concept/IndexingTag.h @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Simplex_tree/concept/SimplexKey.h b/src/Simplex_tree/concept/SimplexKey.h index 9fbed401..c03f7da1 100644 --- a/src/Simplex_tree/concept/SimplexKey.h +++ b/src/Simplex_tree/concept/SimplexKey.h @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Simplex_tree/concept/SimplexTreeOptions.h b/src/Simplex_tree/concept/SimplexTreeOptions.h index 89acdc18..6638da26 100644 --- a/src/Simplex_tree/concept/SimplexTreeOptions.h +++ b/src/Simplex_tree/concept/SimplexTreeOptions.h @@ -4,7 +4,7 @@ * * Author(s): Marc Glisse * - * Copyright (C) 2015 INRIA Saclay - Ile-de-France (France) + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Simplex_tree/concept/VertexHandle.h b/src/Simplex_tree/concept/VertexHandle.h index 3efbba61..9d0642c3 100644 --- a/src/Simplex_tree/concept/VertexHandle.h +++ b/src/Simplex_tree/concept/VertexHandle.h @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Simplex_tree/doc/COPYRIGHT b/src/Simplex_tree/doc/COPYRIGHT index 34345bef..6cde9520 100644 --- a/src/Simplex_tree/doc/COPYRIGHT +++ b/src/Simplex_tree/doc/COPYRIGHT @@ -4,7 +4,7 @@ computational topology. Author(s): Clément Maria -Copyright (C) 2015 INRIA +Copyright (C) 2015 Inria 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 diff --git a/src/Simplex_tree/doc/Intro_simplex_tree.h b/src/Simplex_tree/doc/Intro_simplex_tree.h index 6b80d1c9..db399489 100644 --- a/src/Simplex_tree/doc/Intro_simplex_tree.h +++ b/src/Simplex_tree/doc/Intro_simplex_tree.h @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Simplex_tree/example/cech_complex_cgal_mini_sphere_3d.cpp b/src/Simplex_tree/example/cech_complex_cgal_mini_sphere_3d.cpp index 9bd51106..08ed74bb 100644 --- a/src/Simplex_tree/example/cech_complex_cgal_mini_sphere_3d.cpp +++ b/src/Simplex_tree/example/cech_complex_cgal_mini_sphere_3d.cpp @@ -2,9 +2,9 @@ * (Geometric Understanding in Higher Dimensions) is a generic C++ * library for computational topology. * - * Author(s): Clément Maria + * Author(s): Vincent Rouvreau * - * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2017 Inria * * 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 diff --git a/src/Simplex_tree/example/example_alpha_shapes_3_simplex_tree_from_off_file.cpp b/src/Simplex_tree/example/example_alpha_shapes_3_simplex_tree_from_off_file.cpp index d8289ba9..290a9d9b 100644 --- a/src/Simplex_tree/example/example_alpha_shapes_3_simplex_tree_from_off_file.cpp +++ b/src/Simplex_tree/example/example_alpha_shapes_3_simplex_tree_from_off_file.cpp @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2014 INRIA Saclay (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Simplex_tree/example/graph_expansion_with_blocker.cpp b/src/Simplex_tree/example/graph_expansion_with_blocker.cpp index 0d458cbd..f675e353 100644 --- a/src/Simplex_tree/example/graph_expansion_with_blocker.cpp +++ b/src/Simplex_tree/example/graph_expansion_with_blocker.cpp @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2014 + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Simplex_tree/example/mini_simplex_tree.cpp b/src/Simplex_tree/example/mini_simplex_tree.cpp index 19e45361..e7c7177f 100644 --- a/src/Simplex_tree/example/mini_simplex_tree.cpp +++ b/src/Simplex_tree/example/mini_simplex_tree.cpp @@ -4,7 +4,7 @@ * * Author(s): Marc Glisse * - * Copyright (C) 2015 INRIA Saclay - Ile-de-France (France) + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Simplex_tree/example/simple_simplex_tree.cpp b/src/Simplex_tree/example/simple_simplex_tree.cpp index 828977c2..d71b5608 100644 --- a/src/Simplex_tree/example/simple_simplex_tree.cpp +++ b/src/Simplex_tree/example/simple_simplex_tree.cpp @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2014 + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Simplex_tree/example/simplex_tree_from_cliques_of_graph.cpp b/src/Simplex_tree/example/simplex_tree_from_cliques_of_graph.cpp index d1b8b2de..6d70f3d1 100644 --- a/src/Simplex_tree/example/simplex_tree_from_cliques_of_graph.cpp +++ b/src/Simplex_tree/example/simplex_tree_from_cliques_of_graph.cpp @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Simplex_tree/include/gudhi/Simplex_tree.h b/src/Simplex_tree/include/gudhi/Simplex_tree.h index 7456cb1f..5d4ea30c 100644 --- a/src/Simplex_tree/include/gudhi/Simplex_tree.h +++ b/src/Simplex_tree/include/gudhi/Simplex_tree.h @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Simplex_tree/include/gudhi/Simplex_tree/Simplex_tree_iterators.h b/src/Simplex_tree/include/gudhi/Simplex_tree/Simplex_tree_iterators.h index ab7346d4..335bac1e 100644 --- a/src/Simplex_tree/include/gudhi/Simplex_tree/Simplex_tree_iterators.h +++ b/src/Simplex_tree/include/gudhi/Simplex_tree/Simplex_tree_iterators.h @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Simplex_tree/include/gudhi/Simplex_tree/Simplex_tree_node_explicit_storage.h b/src/Simplex_tree/include/gudhi/Simplex_tree/Simplex_tree_node_explicit_storage.h index 25d4888a..3a75ec72 100644 --- a/src/Simplex_tree/include/gudhi/Simplex_tree/Simplex_tree_node_explicit_storage.h +++ b/src/Simplex_tree/include/gudhi/Simplex_tree/Simplex_tree_node_explicit_storage.h @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Simplex_tree/include/gudhi/Simplex_tree/Simplex_tree_siblings.h b/src/Simplex_tree/include/gudhi/Simplex_tree/Simplex_tree_siblings.h index 1eca7f6f..ab2ca707 100644 --- a/src/Simplex_tree/include/gudhi/Simplex_tree/Simplex_tree_siblings.h +++ b/src/Simplex_tree/include/gudhi/Simplex_tree/Simplex_tree_siblings.h @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Simplex_tree/include/gudhi/Simplex_tree/indexing_tag.h b/src/Simplex_tree/include/gudhi/Simplex_tree/indexing_tag.h index 0adeb46d..ec4461f3 100644 --- a/src/Simplex_tree/include/gudhi/Simplex_tree/indexing_tag.h +++ b/src/Simplex_tree/include/gudhi/Simplex_tree/indexing_tag.h @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/concept/SkeletonBlockerDS.h b/src/Skeleton_blocker/concept/SkeletonBlockerDS.h index d82425a0..fd806ff1 100644 --- a/src/Skeleton_blocker/concept/SkeletonBlockerDS.h +++ b/src/Skeleton_blocker/concept/SkeletonBlockerDS.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/concept/SkeletonBlockerGeometricDS.h b/src/Skeleton_blocker/concept/SkeletonBlockerGeometricDS.h index 477464c4..d8521343 100644 --- a/src/Skeleton_blocker/concept/SkeletonBlockerGeometricDS.h +++ b/src/Skeleton_blocker/concept/SkeletonBlockerGeometricDS.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/doc/COPYRIGHT b/src/Skeleton_blocker/doc/COPYRIGHT index 1de850d7..5b606ac2 100644 --- a/src/Skeleton_blocker/doc/COPYRIGHT +++ b/src/Skeleton_blocker/doc/COPYRIGHT @@ -3,7 +3,7 @@ The files of this directory are part of the Gudhi Library. The Gudhi library computational topology. Author(s): David Salinas -Copyright (C) 2015 INRIA +Copyright (C) 2015 Inria 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 diff --git a/src/Skeleton_blocker/example/Skeleton_blocker_from_simplices.cpp b/src/Skeleton_blocker/example/Skeleton_blocker_from_simplices.cpp index 076c6a53..f288e39c 100644 --- a/src/Skeleton_blocker/example/Skeleton_blocker_from_simplices.cpp +++ b/src/Skeleton_blocker/example/Skeleton_blocker_from_simplices.cpp @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/example/Skeleton_blocker_iteration.cpp b/src/Skeleton_blocker/example/Skeleton_blocker_iteration.cpp index 08ff0264..4d008450 100644 --- a/src/Skeleton_blocker/example/Skeleton_blocker_iteration.cpp +++ b/src/Skeleton_blocker/example/Skeleton_blocker_iteration.cpp @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/example/Skeleton_blocker_link.cpp b/src/Skeleton_blocker/example/Skeleton_blocker_link.cpp index 58322038..2ec72128 100644 --- a/src/Skeleton_blocker/example/Skeleton_blocker_link.cpp +++ b/src/Skeleton_blocker/example/Skeleton_blocker_link.cpp @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h index aca2aa57..e8b6fde8 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_complex_visitor.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_complex_visitor.h index ba3636bc..6c6a8638 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_complex_visitor.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_complex_visitor.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_link_superior.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_link_superior.h index d4b60613..feab7b3f 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_link_superior.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_link_superior.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_off_io.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_off_io.h index 747e60f1..56009daf 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_off_io.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_off_io.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_simple_geometric_traits.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_simple_geometric_traits.h index 275376e6..22c1668e 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_simple_geometric_traits.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_simple_geometric_traits.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_simple_traits.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_simple_traits.h index 3835cf77..144f1fd0 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_simple_traits.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_simple_traits.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_simplex.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_simplex.h index aa6f2215..d7193157 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_simplex.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_simplex.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_sub_complex.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_sub_complex.h index fadf6619..dbfb4042 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_sub_complex.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/Skeleton_blocker_sub_complex.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/internal/Top_faces.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/internal/Top_faces.h index 2b681752..f80ca4fe 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/internal/Top_faces.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/internal/Top_faces.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/internal/Trie.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/internal/Trie.h index 2c9602fa..7a5d38eb 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/internal/Trie.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/internal/Trie.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/iterators/Skeleton_blockers_blockers_iterators.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/iterators/Skeleton_blockers_blockers_iterators.h index d2fff960..95c5f7ef 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/iterators/Skeleton_blockers_blockers_iterators.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/iterators/Skeleton_blockers_blockers_iterators.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/iterators/Skeleton_blockers_edges_iterators.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/iterators/Skeleton_blockers_edges_iterators.h index b90dcf34..5c725aae 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/iterators/Skeleton_blockers_edges_iterators.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/iterators/Skeleton_blockers_edges_iterators.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/iterators/Skeleton_blockers_iterators.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/iterators/Skeleton_blockers_iterators.h index 1351614f..8054e64f 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/iterators/Skeleton_blockers_iterators.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/iterators/Skeleton_blockers_iterators.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/iterators/Skeleton_blockers_simplices_iterators.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/iterators/Skeleton_blockers_simplices_iterators.h index 2acdb555..e2024652 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/iterators/Skeleton_blockers_simplices_iterators.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/iterators/Skeleton_blockers_simplices_iterators.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/iterators/Skeleton_blockers_triangles_iterators.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/iterators/Skeleton_blockers_triangles_iterators.h index 736941dd..a834fe1d 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/iterators/Skeleton_blockers_triangles_iterators.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/iterators/Skeleton_blockers_triangles_iterators.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/iterators/Skeleton_blockers_vertices_iterators.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/iterators/Skeleton_blockers_vertices_iterators.h index 9e9ae961..3a638ae6 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/iterators/Skeleton_blockers_vertices_iterators.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker/iterators/Skeleton_blockers_vertices_iterators.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_complex.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_complex.h index 4f052ba5..addd8104 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_complex.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_complex.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_geometric_complex.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_geometric_complex.h index 95331b7a..39b88ceb 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_geometric_complex.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_geometric_complex.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_link_complex.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_link_complex.h index 4db075b0..428d4e9b 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_link_complex.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_link_complex.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_simplifiable_complex.h b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_simplifiable_complex.h index 544e02e8..d5adb39d 100644 --- a/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_simplifiable_complex.h +++ b/src/Skeleton_blocker/include/gudhi/Skeleton_blocker_simplifiable_complex.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/test/test_skeleton_blocker_complex.cpp b/src/Skeleton_blocker/test/test_skeleton_blocker_complex.cpp index 4f9888ba..9760c74d 100644 --- a/src/Skeleton_blocker/test/test_skeleton_blocker_complex.cpp +++ b/src/Skeleton_blocker/test/test_skeleton_blocker_complex.cpp @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/test/test_skeleton_blocker_geometric_complex.cpp b/src/Skeleton_blocker/test/test_skeleton_blocker_geometric_complex.cpp index d035b2c3..f2d3bb27 100644 --- a/src/Skeleton_blocker/test/test_skeleton_blocker_geometric_complex.cpp +++ b/src/Skeleton_blocker/test/test_skeleton_blocker_geometric_complex.cpp @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Skeleton_blocker/test/test_skeleton_blocker_simplifiable.cpp b/src/Skeleton_blocker/test/test_skeleton_blocker_simplifiable.cpp index 360b91db..1f263c98 100644 --- a/src/Skeleton_blocker/test/test_skeleton_blocker_simplifiable.cpp +++ b/src/Skeleton_blocker/test/test_skeleton_blocker_simplifiable.cpp @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Spatial_searching/doc/Intro_spatial_searching.h b/src/Spatial_searching/doc/Intro_spatial_searching.h index 52ed65e4..f387ab2f 100644 --- a/src/Spatial_searching/doc/Intro_spatial_searching.h +++ b/src/Spatial_searching/doc/Intro_spatial_searching.h @@ -4,7 +4,7 @@ * * Author(s): Clement Jamin * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Spatial_searching/include/gudhi/Kd_tree_search.h b/src/Spatial_searching/include/gudhi/Kd_tree_search.h index 96bbeb36..ad1054e5 100644 --- a/src/Spatial_searching/include/gudhi/Kd_tree_search.h +++ b/src/Spatial_searching/include/gudhi/Kd_tree_search.h @@ -4,7 +4,7 @@ * * Author(s): Clement Jamin * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Spatial_searching/test/test_Kd_tree_search.cpp b/src/Spatial_searching/test/test_Kd_tree_search.cpp index 8a8334c3..981a5850 100644 --- a/src/Spatial_searching/test/test_Kd_tree_search.cpp +++ b/src/Spatial_searching/test/test_Kd_tree_search.cpp @@ -4,7 +4,7 @@ * * Author(s): Clement Jamin * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Subsampling/doc/Intro_subsampling.h b/src/Subsampling/doc/Intro_subsampling.h index ab9cdc37..d88f6bf6 100644 --- a/src/Subsampling/doc/Intro_subsampling.h +++ b/src/Subsampling/doc/Intro_subsampling.h @@ -4,7 +4,7 @@ * * Author(s): Clement Jamin * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Subsampling/include/gudhi/choose_n_farthest_points.h b/src/Subsampling/include/gudhi/choose_n_farthest_points.h index 8390b4c9..ab1c4c73 100644 --- a/src/Subsampling/include/gudhi/choose_n_farthest_points.h +++ b/src/Subsampling/include/gudhi/choose_n_farthest_points.h @@ -4,7 +4,7 @@ * * Author(s): Siargey Kachanovich * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Subsampling/include/gudhi/pick_n_random_points.h b/src/Subsampling/include/gudhi/pick_n_random_points.h index 8c90b6bf..64821e5d 100644 --- a/src/Subsampling/include/gudhi/pick_n_random_points.h +++ b/src/Subsampling/include/gudhi/pick_n_random_points.h @@ -4,7 +4,7 @@ * * Author(s): Siargey Kachanovich * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Subsampling/include/gudhi/sparsify_point_set.h b/src/Subsampling/include/gudhi/sparsify_point_set.h index 7d3b97fb..db10e0b1 100644 --- a/src/Subsampling/include/gudhi/sparsify_point_set.h +++ b/src/Subsampling/include/gudhi/sparsify_point_set.h @@ -4,7 +4,7 @@ * * Author(s): Clement Jamin * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Subsampling/test/test_choose_n_farthest_points.cpp b/src/Subsampling/test/test_choose_n_farthest_points.cpp index ee9d4c77..0e0eb29c 100644 --- a/src/Subsampling/test/test_choose_n_farthest_points.cpp +++ b/src/Subsampling/test/test_choose_n_farthest_points.cpp @@ -4,7 +4,7 @@ * * Author(s): Siargey Kachanovich * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Subsampling/test/test_pick_n_random_points.cpp b/src/Subsampling/test/test_pick_n_random_points.cpp index 6c8dbea2..4baf4a5d 100644 --- a/src/Subsampling/test/test_pick_n_random_points.cpp +++ b/src/Subsampling/test/test_pick_n_random_points.cpp @@ -4,7 +4,7 @@ * * Author(s): Siargey Kachanovich * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Subsampling/test/test_sparsify_point_set.cpp b/src/Subsampling/test/test_sparsify_point_set.cpp index f993d6d6..f414dda3 100644 --- a/src/Subsampling/test/test_sparsify_point_set.cpp +++ b/src/Subsampling/test/test_sparsify_point_set.cpp @@ -4,7 +4,7 @@ * * Author(s): Clement Jamin * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Tangential_complex/benchmark/RIB_exporter.h b/src/Tangential_complex/benchmark/RIB_exporter.h index 73c14041..59ca138a 100644 --- a/src/Tangential_complex/benchmark/RIB_exporter.h +++ b/src/Tangential_complex/benchmark/RIB_exporter.h @@ -4,7 +4,7 @@ * * Author(s): Clement Jamin * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Tangential_complex/benchmark/XML_exporter.h b/src/Tangential_complex/benchmark/XML_exporter.h index ed44f90a..4db5687f 100644 --- a/src/Tangential_complex/benchmark/XML_exporter.h +++ b/src/Tangential_complex/benchmark/XML_exporter.h @@ -4,7 +4,7 @@ * * Author(s): Clement Jamin * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Tangential_complex/doc/COPYRIGHT b/src/Tangential_complex/doc/COPYRIGHT index c4df0f64..f9f92471 100644 --- a/src/Tangential_complex/doc/COPYRIGHT +++ b/src/Tangential_complex/doc/COPYRIGHT @@ -4,7 +4,7 @@ computational topology. Author(s): Clement Jamin -Copyright (C) 2015 INRIA +Copyright (C) 2015 Inria 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 diff --git a/src/Tangential_complex/doc/Intro_tangential_complex.h b/src/Tangential_complex/doc/Intro_tangential_complex.h index 00e00c52..f4fc8ac7 100644 --- a/src/Tangential_complex/doc/Intro_tangential_complex.h +++ b/src/Tangential_complex/doc/Intro_tangential_complex.h @@ -4,7 +4,7 @@ * * Author(s): Clement Jamin * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Tangential_complex/include/gudhi/Tangential_complex.h b/src/Tangential_complex/include/gudhi/Tangential_complex.h index 6f061922..d8356520 100644 --- a/src/Tangential_complex/include/gudhi/Tangential_complex.h +++ b/src/Tangential_complex/include/gudhi/Tangential_complex.h @@ -4,7 +4,7 @@ * * Author(s): Clement Jamin * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Tangential_complex/include/gudhi/Tangential_complex/Simplicial_complex.h b/src/Tangential_complex/include/gudhi/Tangential_complex/Simplicial_complex.h index 65c74ca5..f79186b0 100644 --- a/src/Tangential_complex/include/gudhi/Tangential_complex/Simplicial_complex.h +++ b/src/Tangential_complex/include/gudhi/Tangential_complex/Simplicial_complex.h @@ -4,7 +4,7 @@ * * Author(s): Clement Jamin * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Tangential_complex/include/gudhi/Tangential_complex/config.h b/src/Tangential_complex/include/gudhi/Tangential_complex/config.h index ffefcd6b..e1af1ea6 100644 --- a/src/Tangential_complex/include/gudhi/Tangential_complex/config.h +++ b/src/Tangential_complex/include/gudhi/Tangential_complex/config.h @@ -4,7 +4,7 @@ * * Author(s): Clement Jamin * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Tangential_complex/include/gudhi/Tangential_complex/utilities.h b/src/Tangential_complex/include/gudhi/Tangential_complex/utilities.h index b2d6d674..2dd46118 100644 --- a/src/Tangential_complex/include/gudhi/Tangential_complex/utilities.h +++ b/src/Tangential_complex/include/gudhi/Tangential_complex/utilities.h @@ -4,7 +4,7 @@ * * Author(s): Clement Jamin * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Tangential_complex/test/test_tangential_complex.cpp b/src/Tangential_complex/test/test_tangential_complex.cpp index 48156440..4e2d4f65 100644 --- a/src/Tangential_complex/test/test_tangential_complex.cpp +++ b/src/Tangential_complex/test/test_tangential_complex.cpp @@ -4,7 +4,7 @@ * * Author(s): Clement Jamin * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Witness_complex/concept/SimplicialComplexForWitness.h b/src/Witness_complex/concept/SimplicialComplexForWitness.h index d78cc83f..8b85f4e4 100644 --- a/src/Witness_complex/concept/SimplicialComplexForWitness.h +++ b/src/Witness_complex/concept/SimplicialComplexForWitness.h @@ -4,7 +4,7 @@ * * Author(s): Siargey Kachanovich * - * Copyright (C) 2014 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/Witness_complex/doc/COPYRIGHT b/src/Witness_complex/doc/COPYRIGHT index 7d032c87..25a700cf 100644 --- a/src/Witness_complex/doc/COPYRIGHT +++ b/src/Witness_complex/doc/COPYRIGHT @@ -4,7 +4,7 @@ computational topology. Author(s): Siargey Kachanovich -Copyright (C) 2015 INRIA +Copyright (C) 2015 Inria 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 diff --git a/src/Witness_complex/example/example_nearest_landmark_table.cpp b/src/Witness_complex/example/example_nearest_landmark_table.cpp index b8594212..acaf7c54 100644 --- a/src/Witness_complex/example/example_nearest_landmark_table.cpp +++ b/src/Witness_complex/example/example_nearest_landmark_table.cpp @@ -1,25 +1,3 @@ -/* 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): Siargey Kachanovich - * - * Copyright (C) 2016 INRIA (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 . - */ - #define BOOST_PARAMETER_MAX_ARITY 12 #include diff --git a/src/Witness_complex/example/example_strong_witness_complex_off.cpp b/src/Witness_complex/example/example_strong_witness_complex_off.cpp index 346bef6d..19f73836 100644 --- a/src/Witness_complex/example/example_strong_witness_complex_off.cpp +++ b/src/Witness_complex/example/example_strong_witness_complex_off.cpp @@ -1,25 +1,3 @@ -/* 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): Siargey Kachanovich - * - * Copyright (C) 2016 INRIA (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 . - */ - #include #include #include diff --git a/src/Witness_complex/example/example_witness_complex_sphere.cpp b/src/Witness_complex/example/example_witness_complex_sphere.cpp index a6e9b11a..9e3c972d 100644 --- a/src/Witness_complex/example/example_witness_complex_sphere.cpp +++ b/src/Witness_complex/example/example_witness_complex_sphere.cpp @@ -1,25 +1,3 @@ -/* 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): Siargey Kachanovich - * - * Copyright (C) 2016 INRIA (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 . - */ - #define BOOST_PARAMETER_MAX_ARITY 12 #include diff --git a/src/Witness_complex/example/generators.h b/src/Witness_complex/example/generators.h index 7df43db5..81566824 100644 --- a/src/Witness_complex/example/generators.h +++ b/src/Witness_complex/example/generators.h @@ -4,7 +4,7 @@ * * Author(s): Siargey Kachanovich * - * Copyright (C) 2015 INRIA Sophia Antipolis-Méditerranée (France) + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h index d41a6811..8cb8662b 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness.h @@ -4,7 +4,7 @@ * * Author(s): Siargey Kachanovich * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h index 0a05173a..10d2ec52 100644 --- a/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h +++ b/src/Witness_complex/include/gudhi/Active_witness/Active_witness_iterator.h @@ -4,7 +4,7 @@ * * Author(s): Siargey Kachanovich * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Witness_complex/include/gudhi/Euclidean_strong_witness_complex.h b/src/Witness_complex/include/gudhi/Euclidean_strong_witness_complex.h index 4f3cef4f..ea97cd3f 100644 --- a/src/Witness_complex/include/gudhi/Euclidean_strong_witness_complex.h +++ b/src/Witness_complex/include/gudhi/Euclidean_strong_witness_complex.h @@ -4,7 +4,7 @@ * * Author(s): Siargey Kachanovich * - * Copyright (C) 2015 INRIA (France) + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Witness_complex/include/gudhi/Euclidean_witness_complex.h b/src/Witness_complex/include/gudhi/Euclidean_witness_complex.h index ff8bb139..1dacefa5 100644 --- a/src/Witness_complex/include/gudhi/Euclidean_witness_complex.h +++ b/src/Witness_complex/include/gudhi/Euclidean_witness_complex.h @@ -4,7 +4,7 @@ * * Author(s): Siargey Kachanovich * - * Copyright (C) 2015 INRIA (France) + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Witness_complex/include/gudhi/Strong_witness_complex.h b/src/Witness_complex/include/gudhi/Strong_witness_complex.h index b3d00b11..fd6b3f38 100644 --- a/src/Witness_complex/include/gudhi/Strong_witness_complex.h +++ b/src/Witness_complex/include/gudhi/Strong_witness_complex.h @@ -4,7 +4,7 @@ * * Author(s): Siargey Kachanovich * - * Copyright (C) 2015 INRIA (France) + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Witness_complex/include/gudhi/Witness_complex.h b/src/Witness_complex/include/gudhi/Witness_complex.h index 53c38520..67885258 100644 --- a/src/Witness_complex/include/gudhi/Witness_complex.h +++ b/src/Witness_complex/include/gudhi/Witness_complex.h @@ -4,7 +4,7 @@ * * Author(s): Siargey Kachanovich * - * Copyright (C) 2015 INRIA (France) + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Witness_complex/include/gudhi/Witness_complex/all_faces_in.h b/src/Witness_complex/include/gudhi/Witness_complex/all_faces_in.h index b68d75a1..c7b732b9 100644 --- a/src/Witness_complex/include/gudhi/Witness_complex/all_faces_in.h +++ b/src/Witness_complex/include/gudhi/Witness_complex/all_faces_in.h @@ -4,7 +4,7 @@ * * Author(s): Siargey Kachanovich * - * Copyright (C) 2015 INRIA (France) + * Copyright (C) 2015 Inria * * 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 diff --git a/src/Witness_complex/utilities/strong_witness_persistence.cpp b/src/Witness_complex/utilities/strong_witness_persistence.cpp index 2fba631b..9d23df74 100644 --- a/src/Witness_complex/utilities/strong_witness_persistence.cpp +++ b/src/Witness_complex/utilities/strong_witness_persistence.cpp @@ -4,7 +4,7 @@ * * Author(s): Siargey Kachanovich * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/Witness_complex/utilities/weak_witness_persistence.cpp b/src/Witness_complex/utilities/weak_witness_persistence.cpp index 23fa93aa..1315d2ba 100644 --- a/src/Witness_complex/utilities/weak_witness_persistence.cpp +++ b/src/Witness_complex/utilities/weak_witness_persistence.cpp @@ -4,7 +4,7 @@ * * Author(s): Siargey Kachanovich * - * Copyright (C) 2016 INRIA (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/common/doc/file_formats.h b/src/common/doc/file_formats.h index c60ed15a..523153b8 100644 --- a/src/common/doc/file_formats.h +++ b/src/common/doc/file_formats.h @@ -4,7 +4,7 @@ * * Author(s): Clément Jamin * -* Copyright (C) 2017 INRIA +* Copyright (C) 2017 Inria * * 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 diff --git a/src/common/include/gudhi/Clock.h b/src/common/include/gudhi/Clock.h index b83de2f5..cdf18cb2 100644 --- a/src/common/include/gudhi/Clock.h +++ b/src/common/include/gudhi/Clock.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/common/include/gudhi/Debug_utils.h b/src/common/include/gudhi/Debug_utils.h index 90d3cf47..3f5cb04f 100644 --- a/src/common/include/gudhi/Debug_utils.h +++ b/src/common/include/gudhi/Debug_utils.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/common/include/gudhi/Null_output_iterator.h b/src/common/include/gudhi/Null_output_iterator.h index 42e6e449..c700af5f 100644 --- a/src/common/include/gudhi/Null_output_iterator.h +++ b/src/common/include/gudhi/Null_output_iterator.h @@ -4,7 +4,7 @@ * * Author(s): Marc Glisse * - * Copyright (C) 2017 INRIA + * Copyright (C) 2017 Inria * * 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 diff --git a/src/common/include/gudhi/Off_reader.h b/src/common/include/gudhi/Off_reader.h index 32320e4d..024f0568 100644 --- a/src/common/include/gudhi/Off_reader.h +++ b/src/common/include/gudhi/Off_reader.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/common/include/gudhi/Point.h b/src/common/include/gudhi/Point.h index 0479e71e..345a8465 100644 --- a/src/common/include/gudhi/Point.h +++ b/src/common/include/gudhi/Point.h @@ -4,7 +4,7 @@ * * Author(s): David Salinas * - * Copyright (C) 2014 INRIA Sophia Antipolis-Mediterranee (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/common/include/gudhi/Points_3D_off_io.h b/src/common/include/gudhi/Points_3D_off_io.h index b0d24998..704f73a7 100644 --- a/src/common/include/gudhi/Points_3D_off_io.h +++ b/src/common/include/gudhi/Points_3D_off_io.h @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2015 INRIA Saclay (France) + * Copyright (C) 2015 Inria * * 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 diff --git a/src/common/include/gudhi/Points_off_io.h b/src/common/include/gudhi/Points_off_io.h index 08f324c6..38029658 100644 --- a/src/common/include/gudhi/Points_off_io.h +++ b/src/common/include/gudhi/Points_off_io.h @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2015 INRIA Saclay (France) + * Copyright (C) 2015 Inria * * 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 diff --git a/src/common/include/gudhi/Simple_object_pool.h b/src/common/include/gudhi/Simple_object_pool.h index fb9c8e23..47283521 100644 --- a/src/common/include/gudhi/Simple_object_pool.h +++ b/src/common/include/gudhi/Simple_object_pool.h @@ -4,7 +4,7 @@ * * Author(s): Marc Glisse * - * Copyright (C) 2015 INRIA Saclay - Ile de France + * Copyright (C) 2015 Inria * * 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 diff --git a/src/common/include/gudhi/Unitary_tests_utils.h b/src/common/include/gudhi/Unitary_tests_utils.h index 8394a062..e07c8d42 100644 --- a/src/common/include/gudhi/Unitary_tests_utils.h +++ b/src/common/include/gudhi/Unitary_tests_utils.h @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2017 INRIA + * Copyright (C) 2017 Inria * * 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 diff --git a/src/common/include/gudhi/allocator.h b/src/common/include/gudhi/allocator.h index 4ede14e4..3de16a49 100644 --- a/src/common/include/gudhi/allocator.h +++ b/src/common/include/gudhi/allocator.h @@ -4,7 +4,7 @@ * * Author(s): Marc Glisse * - * Copyright (C) 2015 INRIA Saclay - Ile de France + * Copyright (C) 2015 Inria * * 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 diff --git a/src/common/include/gudhi/console_color.h b/src/common/include/gudhi/console_color.h index c4671da3..a493e0d0 100644 --- a/src/common/include/gudhi/console_color.h +++ b/src/common/include/gudhi/console_color.h @@ -4,7 +4,7 @@ * * Author(s): Clement Jamin * - * Copyright (C) 2016 INRIA Sophia-Antipolis (France) + * Copyright (C) 2016 Inria * * 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 diff --git a/src/common/include/gudhi/distance_functions.h b/src/common/include/gudhi/distance_functions.h index 3a5d1fd5..f7baed6f 100644 --- a/src/common/include/gudhi/distance_functions.h +++ b/src/common/include/gudhi/distance_functions.h @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/common/include/gudhi/graph_simplicial_complex.h b/src/common/include/gudhi/graph_simplicial_complex.h index d84421b2..6ab7b0b4 100644 --- a/src/common/include/gudhi/graph_simplicial_complex.h +++ b/src/common/include/gudhi/graph_simplicial_complex.h @@ -4,7 +4,7 @@ * * Author(s): Clément Maria * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/common/include/gudhi/random_point_generators.h b/src/common/include/gudhi/random_point_generators.h index 9df77760..1f8f2cd8 100644 --- a/src/common/include/gudhi/random_point_generators.h +++ b/src/common/include/gudhi/random_point_generators.h @@ -4,7 +4,7 @@ * * Author(s): Clement Jamin * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/common/include/gudhi/reader_utils.h b/src/common/include/gudhi/reader_utils.h index 90be4fc7..26eeb76d 100644 --- a/src/common/include/gudhi/reader_utils.h +++ b/src/common/include/gudhi/reader_utils.h @@ -4,7 +4,7 @@ * * Author(s): Clement Maria, Pawel Dlotko, Clement Jamin * - * Copyright (C) 2014 INRIA + * Copyright (C) 2014 Inria * * 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 diff --git a/src/common/test/test_distance_matrix_reader.cpp b/src/common/test/test_distance_matrix_reader.cpp index 656e6f2e..6fee86e2 100644 --- a/src/common/test/test_distance_matrix_reader.cpp +++ b/src/common/test/test_distance_matrix_reader.cpp @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/common/test/test_persistence_intervals_reader.cpp b/src/common/test/test_persistence_intervals_reader.cpp index be299376..b7ece9bd 100644 --- a/src/common/test/test_persistence_intervals_reader.cpp +++ b/src/common/test/test_persistence_intervals_reader.cpp @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2017 INRIA + * Copyright (C) 2017 Inria * * 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 diff --git a/src/common/test/test_points_off_reader.cpp b/src/common/test/test_points_off_reader.cpp index 0a78d190..ba3bab71 100644 --- a/src/common/test/test_points_off_reader.cpp +++ b/src/common/test/test_points_off_reader.cpp @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2015 + * Copyright (C) 2015 Inria * * 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 diff --git a/src/common/utilities/off_file_from_shape_generator.cpp b/src/common/utilities/off_file_from_shape_generator.cpp index afcd558c..5e3da7f7 100644 --- a/src/common/utilities/off_file_from_shape_generator.cpp +++ b/src/common/utilities/off_file_from_shape_generator.cpp @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2014 INRIA Saclay (France) + * Copyright (C) 2014 Inria * * 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 diff --git a/src/cython/cython/alpha_complex.pyx b/src/cython/cython/alpha_complex.pyx index a0e8f9b7..4f772e31 100644 --- a/src/cython/cython/alpha_complex.pyx +++ b/src/cython/cython/alpha_complex.pyx @@ -11,7 +11,7 @@ import os Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -28,7 +28,7 @@ import os """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" cdef extern from "Alpha_complex_interface.h" namespace "Gudhi": diff --git a/src/cython/cython/bottleneck_distance.pyx b/src/cython/cython/bottleneck_distance.pyx index 9fb377ff..76ef81f4 100644 --- a/src/cython/cython/bottleneck_distance.pyx +++ b/src/cython/cython/bottleneck_distance.pyx @@ -9,7 +9,7 @@ import os Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -26,7 +26,7 @@ import os """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" cdef extern from "Bottleneck_distance_interface.h" namespace "Gudhi::persistence_diagram": diff --git a/src/cython/cython/cubical_complex.pyx b/src/cython/cython/cubical_complex.pyx index ffc85130..a98a3ec3 100644 --- a/src/cython/cython/cubical_complex.pyx +++ b/src/cython/cython/cubical_complex.pyx @@ -11,7 +11,7 @@ import os Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -28,7 +28,7 @@ import os """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" cdef extern from "Cubical_complex_interface.h" namespace "Gudhi": diff --git a/src/cython/cython/euclidean_strong_witness_complex.pyx b/src/cython/cython/euclidean_strong_witness_complex.pyx index c1523892..62b7cf71 100644 --- a/src/cython/cython/euclidean_strong_witness_complex.pyx +++ b/src/cython/cython/euclidean_strong_witness_complex.pyx @@ -8,7 +8,7 @@ from libcpp.utility cimport pair Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -25,7 +25,7 @@ from libcpp.utility cimport pair """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" cdef extern from "Euclidean_strong_witness_complex_interface.h" namespace "Gudhi": diff --git a/src/cython/cython/euclidean_witness_complex.pyx b/src/cython/cython/euclidean_witness_complex.pyx index 7c443b6b..c10ca73d 100644 --- a/src/cython/cython/euclidean_witness_complex.pyx +++ b/src/cython/cython/euclidean_witness_complex.pyx @@ -8,7 +8,7 @@ from libcpp.utility cimport pair Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -25,7 +25,7 @@ from libcpp.utility cimport pair """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" cdef extern from "Euclidean_witness_complex_interface.h" namespace "Gudhi": diff --git a/src/cython/cython/off_reader.pyx b/src/cython/cython/off_reader.pyx index 266dae2c..b939013f 100644 --- a/src/cython/cython/off_reader.pyx +++ b/src/cython/cython/off_reader.pyx @@ -9,7 +9,7 @@ import os Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -26,7 +26,7 @@ import os """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" cdef extern from "Off_reader_interface.h" namespace "Gudhi": diff --git a/src/cython/cython/periodic_cubical_complex.pyx b/src/cython/cython/periodic_cubical_complex.pyx index 3025f125..c25b83e9 100644 --- a/src/cython/cython/periodic_cubical_complex.pyx +++ b/src/cython/cython/periodic_cubical_complex.pyx @@ -11,7 +11,7 @@ import os Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -28,7 +28,7 @@ import os """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" cdef extern from "Cubical_complex_interface.h" namespace "Gudhi": diff --git a/src/cython/cython/persistence_graphical_tools.py b/src/cython/cython/persistence_graphical_tools.py index fb837e29..e2405e96 100755 --- a/src/cython/cython/persistence_graphical_tools.py +++ b/src/cython/cython/persistence_graphical_tools.py @@ -8,7 +8,7 @@ import os Author(s): Vincent Rouvreau, Bertrand Michel - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -25,7 +25,7 @@ import os """ __author__ = "Vincent Rouvreau, Bertrand Michel" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" def __min_birth_max_death(persistence, band_boot=0.): diff --git a/src/cython/cython/reader_utils.pyx b/src/cython/cython/reader_utils.pyx index 3a17c5a0..e4572db0 100644 --- a/src/cython/cython/reader_utils.pyx +++ b/src/cython/cython/reader_utils.pyx @@ -11,7 +11,7 @@ import os Author(s): Vincent Rouvreau - Copyright (C) 2017 INRIA + Copyright (C) 2017 Inria 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 @@ -28,7 +28,7 @@ import os """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2017 INRIA" +__copyright__ = "Copyright (C) 2017 Inria" __license__ = "GPL v3" cdef extern from "Reader_utils_interface.h" namespace "Gudhi": diff --git a/src/cython/cython/rips_complex.pyx b/src/cython/cython/rips_complex.pyx index 73b154b8..59c16bff 100644 --- a/src/cython/cython/rips_complex.pyx +++ b/src/cython/cython/rips_complex.pyx @@ -11,7 +11,7 @@ import os Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -28,7 +28,7 @@ import os """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" cdef extern from "Rips_complex_interface.h" namespace "Gudhi": diff --git a/src/cython/cython/simplex_tree.pyx b/src/cython/cython/simplex_tree.pyx index 0cb575d2..8abeb5f8 100644 --- a/src/cython/cython/simplex_tree.pyx +++ b/src/cython/cython/simplex_tree.pyx @@ -10,7 +10,7 @@ from libcpp.string cimport string Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -27,7 +27,7 @@ from libcpp.string cimport string """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" cdef extern from "Simplex_tree_interface.h" namespace "Gudhi": diff --git a/src/cython/cython/strong_witness_complex.pyx b/src/cython/cython/strong_witness_complex.pyx index 770b46f5..74c5cb05 100644 --- a/src/cython/cython/strong_witness_complex.pyx +++ b/src/cython/cython/strong_witness_complex.pyx @@ -8,7 +8,7 @@ from libcpp.utility cimport pair Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -25,7 +25,7 @@ from libcpp.utility cimport pair """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" cdef extern from "Strong_witness_complex_interface.h" namespace "Gudhi": diff --git a/src/cython/cython/subsampling.pyx b/src/cython/cython/subsampling.pyx index 894a4fbe..ac09b7a3 100644 --- a/src/cython/cython/subsampling.pyx +++ b/src/cython/cython/subsampling.pyx @@ -10,7 +10,7 @@ import os Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -27,7 +27,7 @@ import os """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" cdef extern from "Subsampling_interface.h" namespace "Gudhi::subsampling": diff --git a/src/cython/cython/tangential_complex.pyx b/src/cython/cython/tangential_complex.pyx index d55bb050..10fa1468 100644 --- a/src/cython/cython/tangential_complex.pyx +++ b/src/cython/cython/tangential_complex.pyx @@ -11,7 +11,7 @@ import os Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -28,7 +28,7 @@ import os """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" cdef extern from "Tangential_complex_interface.h" namespace "Gudhi": diff --git a/src/cython/cython/witness_complex.pyx b/src/cython/cython/witness_complex.pyx index 96d122bb..8591465a 100644 --- a/src/cython/cython/witness_complex.pyx +++ b/src/cython/cython/witness_complex.pyx @@ -8,7 +8,7 @@ from libcpp.utility cimport pair Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -25,7 +25,7 @@ from libcpp.utility cimport pair """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" cdef extern from "Witness_complex_interface.h" namespace "Gudhi": diff --git a/src/cython/example/alpha_complex_diagram_persistence_from_off_file_example.py b/src/cython/example/alpha_complex_diagram_persistence_from_off_file_example.py index b4487be4..27550025 100755 --- a/src/cython/example/alpha_complex_diagram_persistence_from_off_file_example.py +++ b/src/cython/example/alpha_complex_diagram_persistence_from_off_file_example.py @@ -9,7 +9,7 @@ import argparse Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -26,7 +26,7 @@ import argparse """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" parser = argparse.ArgumentParser(description='AlphaComplex creation from ' diff --git a/src/cython/example/alpha_complex_from_points_example.py b/src/cython/example/alpha_complex_from_points_example.py index 7d6278ce..ad73c744 100755 --- a/src/cython/example/alpha_complex_from_points_example.py +++ b/src/cython/example/alpha_complex_from_points_example.py @@ -8,7 +8,7 @@ from gudhi import AlphaComplex, SimplexTree Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -25,7 +25,7 @@ from gudhi import AlphaComplex, SimplexTree """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" print("#####################################################################") diff --git a/src/cython/example/alpha_rips_persistence_bottleneck_distance.py b/src/cython/example/alpha_rips_persistence_bottleneck_distance.py index 386f8457..b51fa7a8 100755 --- a/src/cython/example/alpha_rips_persistence_bottleneck_distance.py +++ b/src/cython/example/alpha_rips_persistence_bottleneck_distance.py @@ -10,7 +10,7 @@ import math Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -27,7 +27,7 @@ import math """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" parser = argparse.ArgumentParser(description='AlphaComplex and RipsComplex ' diff --git a/src/cython/example/bottleneck_basic_example.py b/src/cython/example/bottleneck_basic_example.py index a7fa01c1..287956e7 100755 --- a/src/cython/example/bottleneck_basic_example.py +++ b/src/cython/example/bottleneck_basic_example.py @@ -8,7 +8,7 @@ import gudhi Author(s): Francois Godi, Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -25,7 +25,7 @@ import gudhi """ __author__ = "Francois Godi, Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" diag1 = [[2.7, 3.7],[9.6, 14.],[34.2, 34.974], [3.,float('Inf')]] diff --git a/src/cython/example/euclidean_strong_witness_complex_diagram_persistence_from_off_file_example.py b/src/cython/example/euclidean_strong_witness_complex_diagram_persistence_from_off_file_example.py index e3f362dc..1c142d9a 100755 --- a/src/cython/example/euclidean_strong_witness_complex_diagram_persistence_from_off_file_example.py +++ b/src/cython/example/euclidean_strong_witness_complex_diagram_persistence_from_off_file_example.py @@ -9,7 +9,7 @@ import argparse Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -26,7 +26,7 @@ import argparse """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" parser = argparse.ArgumentParser(description='EuclideanStrongWitnessComplex creation from ' diff --git a/src/cython/example/euclidean_witness_complex_diagram_persistence_from_off_file_example.py b/src/cython/example/euclidean_witness_complex_diagram_persistence_from_off_file_example.py index c236d992..216fcff2 100755 --- a/src/cython/example/euclidean_witness_complex_diagram_persistence_from_off_file_example.py +++ b/src/cython/example/euclidean_witness_complex_diagram_persistence_from_off_file_example.py @@ -9,7 +9,7 @@ import argparse Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -26,7 +26,7 @@ import argparse """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" parser = argparse.ArgumentParser(description='EuclideanWitnessComplex creation from ' diff --git a/src/cython/example/gudhi_graphical_tools_example.py b/src/cython/example/gudhi_graphical_tools_example.py index ed87806b..9f37efc0 100755 --- a/src/cython/example/gudhi_graphical_tools_example.py +++ b/src/cython/example/gudhi_graphical_tools_example.py @@ -8,7 +8,7 @@ import gudhi Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -25,7 +25,7 @@ import gudhi """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" print("#####################################################################") diff --git a/src/cython/example/periodic_cubical_complex_barcode_persistence_from_perseus_file_example.py b/src/cython/example/periodic_cubical_complex_barcode_persistence_from_perseus_file_example.py index 00334121..5f968bf1 100755 --- a/src/cython/example/periodic_cubical_complex_barcode_persistence_from_perseus_file_example.py +++ b/src/cython/example/periodic_cubical_complex_barcode_persistence_from_perseus_file_example.py @@ -9,7 +9,7 @@ import argparse Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -26,7 +26,7 @@ import argparse """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" def is_file_perseus(file): diff --git a/src/cython/example/random_cubical_complex_persistence_example.py b/src/cython/example/random_cubical_complex_persistence_example.py index c832d6bf..80ff2452 100755 --- a/src/cython/example/random_cubical_complex_persistence_example.py +++ b/src/cython/example/random_cubical_complex_persistence_example.py @@ -13,7 +13,7 @@ import operator Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -30,7 +30,7 @@ import operator """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" parser = argparse.ArgumentParser(description='Random cubical complex.', diff --git a/src/cython/example/rips_complex_diagram_persistence_from_correlation_matrix_file_example.py b/src/cython/example/rips_complex_diagram_persistence_from_correlation_matrix_file_example.py index aa82ef71..4142fa99 100755 --- a/src/cython/example/rips_complex_diagram_persistence_from_correlation_matrix_file_example.py +++ b/src/cython/example/rips_complex_diagram_persistence_from_correlation_matrix_file_example.py @@ -10,7 +10,7 @@ import argparse Author(s): Vincent Rouvreau - Copyright (C) 2017 INRIA + Copyright (C) 2017 Inria 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 @@ -27,7 +27,7 @@ import argparse """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2017 INRIA" +__copyright__ = "Copyright (C) 2017 Inria" __license__ = "GPL v3" parser = argparse.ArgumentParser(description='RipsComplex creation from ' diff --git a/src/cython/example/rips_complex_diagram_persistence_from_distance_matrix_file_example.py b/src/cython/example/rips_complex_diagram_persistence_from_distance_matrix_file_example.py index c8aac240..01d1f38a 100755 --- a/src/cython/example/rips_complex_diagram_persistence_from_distance_matrix_file_example.py +++ b/src/cython/example/rips_complex_diagram_persistence_from_distance_matrix_file_example.py @@ -9,7 +9,7 @@ import argparse Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -26,7 +26,7 @@ import argparse """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" parser = argparse.ArgumentParser(description='RipsComplex creation from ' diff --git a/src/cython/example/rips_complex_diagram_persistence_from_off_file_example.py b/src/cython/example/rips_complex_diagram_persistence_from_off_file_example.py index 544b68c9..865c66b6 100755 --- a/src/cython/example/rips_complex_diagram_persistence_from_off_file_example.py +++ b/src/cython/example/rips_complex_diagram_persistence_from_off_file_example.py @@ -9,7 +9,7 @@ import argparse Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -26,7 +26,7 @@ import argparse """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" parser = argparse.ArgumentParser(description='RipsComplex creation from ' diff --git a/src/cython/example/rips_complex_from_points_example.py b/src/cython/example/rips_complex_from_points_example.py index 5d411b1a..ffa9d91f 100755 --- a/src/cython/example/rips_complex_from_points_example.py +++ b/src/cython/example/rips_complex_from_points_example.py @@ -8,7 +8,7 @@ import gudhi Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -25,7 +25,7 @@ import gudhi """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" print("#####################################################################") diff --git a/src/cython/example/rips_persistence_diagram.py b/src/cython/example/rips_persistence_diagram.py index 9bfea41c..7a6a9f46 100755 --- a/src/cython/example/rips_persistence_diagram.py +++ b/src/cython/example/rips_persistence_diagram.py @@ -8,7 +8,7 @@ import gudhi Author(s): Marc Glisse - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -25,7 +25,7 @@ import gudhi """ __author__ = "Marc Glisse" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" print("#####################################################################") diff --git a/src/cython/example/simplex_tree_example.py b/src/cython/example/simplex_tree_example.py index 51a60e73..28679015 100755 --- a/src/cython/example/simplex_tree_example.py +++ b/src/cython/example/simplex_tree_example.py @@ -8,7 +8,7 @@ import gudhi Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -25,7 +25,7 @@ import gudhi """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" print("#####################################################################") diff --git a/src/cython/example/tangential_complex_plain_homology_from_off_file_example.py b/src/cython/example/tangential_complex_plain_homology_from_off_file_example.py index 6145e7f2..680a8bf8 100755 --- a/src/cython/example/tangential_complex_plain_homology_from_off_file_example.py +++ b/src/cython/example/tangential_complex_plain_homology_from_off_file_example.py @@ -9,7 +9,7 @@ import argparse Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -26,7 +26,7 @@ import argparse """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" parser = argparse.ArgumentParser(description='TangentialComplex creation from ' diff --git a/src/cython/example/witness_complex_from_nearest_landmark_table.py b/src/cython/example/witness_complex_from_nearest_landmark_table.py index 92ed970b..e6b295ee 100755 --- a/src/cython/example/witness_complex_from_nearest_landmark_table.py +++ b/src/cython/example/witness_complex_from_nearest_landmark_table.py @@ -8,7 +8,7 @@ from gudhi import StrongWitnessComplex, SimplexTree Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -25,7 +25,7 @@ from gudhi import StrongWitnessComplex, SimplexTree """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" print("#####################################################################") diff --git a/src/cython/gudhi.pyx.in b/src/cython/gudhi.pyx.in index a8dd9f80..b94f2251 100644 --- a/src/cython/gudhi.pyx.in +++ b/src/cython/gudhi.pyx.in @@ -4,7 +4,7 @@ Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -21,7 +21,7 @@ """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" __version__ = "@GUDHI_VERSION@" # This variable is used by doctest to find files diff --git a/src/cython/include/Alpha_complex_interface.h b/src/cython/include/Alpha_complex_interface.h index d47db71f..8cf527fc 100644 --- a/src/cython/include/Alpha_complex_interface.h +++ b/src/cython/include/Alpha_complex_interface.h @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/cython/include/Bottleneck_distance_interface.h b/src/cython/include/Bottleneck_distance_interface.h index d5fbf6ea..5ad9d77d 100644 --- a/src/cython/include/Bottleneck_distance_interface.h +++ b/src/cython/include/Bottleneck_distance_interface.h @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/cython/include/Cubical_complex_interface.h b/src/cython/include/Cubical_complex_interface.h index fad92c2c..85b717b3 100644 --- a/src/cython/include/Cubical_complex_interface.h +++ b/src/cython/include/Cubical_complex_interface.h @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/cython/include/Euclidean_strong_witness_complex_interface.h b/src/cython/include/Euclidean_strong_witness_complex_interface.h index b9dd8177..d86355d6 100644 --- a/src/cython/include/Euclidean_strong_witness_complex_interface.h +++ b/src/cython/include/Euclidean_strong_witness_complex_interface.h @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/cython/include/Euclidean_witness_complex_interface.h b/src/cython/include/Euclidean_witness_complex_interface.h index 2a09b3b5..dc303533 100644 --- a/src/cython/include/Euclidean_witness_complex_interface.h +++ b/src/cython/include/Euclidean_witness_complex_interface.h @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/cython/include/Off_reader_interface.h b/src/cython/include/Off_reader_interface.h index 0ca55500..f6b14f38 100644 --- a/src/cython/include/Off_reader_interface.h +++ b/src/cython/include/Off_reader_interface.h @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/cython/include/Persistent_cohomology_interface.h b/src/cython/include/Persistent_cohomology_interface.h index 55028fd0..a86b1187 100644 --- a/src/cython/include/Persistent_cohomology_interface.h +++ b/src/cython/include/Persistent_cohomology_interface.h @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/cython/include/Reader_utils_interface.h b/src/cython/include/Reader_utils_interface.h index 8ec34f61..5f7527d9 100644 --- a/src/cython/include/Reader_utils_interface.h +++ b/src/cython/include/Reader_utils_interface.h @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2017 INRIA + * Copyright (C) 2017 Inria * * 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 diff --git a/src/cython/include/Rips_complex_interface.h b/src/cython/include/Rips_complex_interface.h index f26befbc..8b6c9c35 100644 --- a/src/cython/include/Rips_complex_interface.h +++ b/src/cython/include/Rips_complex_interface.h @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/cython/include/Simplex_tree_interface.h b/src/cython/include/Simplex_tree_interface.h index 54a4f824..3481eeff 100644 --- a/src/cython/include/Simplex_tree_interface.h +++ b/src/cython/include/Simplex_tree_interface.h @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/cython/include/Strong_witness_complex_interface.h b/src/cython/include/Strong_witness_complex_interface.h index d05eaac5..3c72c916 100644 --- a/src/cython/include/Strong_witness_complex_interface.h +++ b/src/cython/include/Strong_witness_complex_interface.h @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/cython/include/Subsampling_interface.h b/src/cython/include/Subsampling_interface.h index b0f4a50a..f990da0c 100644 --- a/src/cython/include/Subsampling_interface.h +++ b/src/cython/include/Subsampling_interface.h @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/cython/include/Tangential_complex_interface.h b/src/cython/include/Tangential_complex_interface.h index 0c3a510e..2772460a 100644 --- a/src/cython/include/Tangential_complex_interface.h +++ b/src/cython/include/Tangential_complex_interface.h @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/cython/include/Witness_complex_interface.h b/src/cython/include/Witness_complex_interface.h index 6501cc35..01b372e7 100644 --- a/src/cython/include/Witness_complex_interface.h +++ b/src/cython/include/Witness_complex_interface.h @@ -4,7 +4,7 @@ * * Author(s): Vincent Rouvreau * - * Copyright (C) 2016 INRIA + * Copyright (C) 2016 Inria * * 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 diff --git a/src/cython/setup.py.in b/src/cython/setup.py.in index c767e93d..b6ca4bcb 100644 --- a/src/cython/setup.py.in +++ b/src/cython/setup.py.in @@ -7,7 +7,7 @@ from Cython.Build import cythonize Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -24,7 +24,7 @@ from Cython.Build import cythonize """ __author__ = "GUDHI Editorial Board" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" gudhi = Extension( diff --git a/src/cython/test/test_alpha_complex.py b/src/cython/test/test_alpha_complex.py index 2c76d9d7..e97f2530 100755 --- a/src/cython/test/test_alpha_complex.py +++ b/src/cython/test/test_alpha_complex.py @@ -6,7 +6,7 @@ from gudhi import AlphaComplex, SimplexTree Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -23,7 +23,7 @@ from gudhi import AlphaComplex, SimplexTree """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" diff --git a/src/cython/test/test_bottleneck_distance.py b/src/cython/test/test_bottleneck_distance.py index 3d982d34..4eb5848f 100755 --- a/src/cython/test/test_bottleneck_distance.py +++ b/src/cython/test/test_bottleneck_distance.py @@ -6,7 +6,7 @@ import gudhi Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -23,7 +23,7 @@ import gudhi """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" diff --git a/src/cython/test/test_cubical_complex.py b/src/cython/test/test_cubical_complex.py index 0e81554d..79d39aa8 100755 --- a/src/cython/test/test_cubical_complex.py +++ b/src/cython/test/test_cubical_complex.py @@ -6,7 +6,7 @@ from gudhi import CubicalComplex Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -23,7 +23,7 @@ from gudhi import CubicalComplex """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" diff --git a/src/cython/test/test_euclidean_witness_complex.py b/src/cython/test/test_euclidean_witness_complex.py index 737f1ef4..2f77210a 100755 --- a/src/cython/test/test_euclidean_witness_complex.py +++ b/src/cython/test/test_euclidean_witness_complex.py @@ -6,7 +6,7 @@ import gudhi Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -23,7 +23,7 @@ import gudhi """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" diff --git a/src/cython/test/test_reader_utils.py b/src/cython/test/test_reader_utils.py index 25591fb3..b240c84f 100755 --- a/src/cython/test/test_reader_utils.py +++ b/src/cython/test/test_reader_utils.py @@ -6,7 +6,7 @@ import gudhi Author(s): Vincent Rouvreau - Copyright (C) 2017 INRIA + Copyright (C) 2017 Inria 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 @@ -23,7 +23,7 @@ import gudhi """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2017 INRIA" +__copyright__ = "Copyright (C) 2017 Inria" __license__ = "GPL v3" diff --git a/src/cython/test/test_rips_complex.py b/src/cython/test/test_rips_complex.py index c7d2ead4..c37b5400 100755 --- a/src/cython/test/test_rips_complex.py +++ b/src/cython/test/test_rips_complex.py @@ -7,7 +7,7 @@ from math import sqrt Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -24,7 +24,7 @@ from math import sqrt """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" diff --git a/src/cython/test/test_simplex_tree.py b/src/cython/test/test_simplex_tree.py index 6dec5d94..029e7729 100755 --- a/src/cython/test/test_simplex_tree.py +++ b/src/cython/test/test_simplex_tree.py @@ -6,7 +6,7 @@ from gudhi import SimplexTree Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -23,7 +23,7 @@ from gudhi import SimplexTree """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" diff --git a/src/cython/test/test_subsampling.py b/src/cython/test/test_subsampling.py index 2caf4ddb..96906a6f 100755 --- a/src/cython/test/test_subsampling.py +++ b/src/cython/test/test_subsampling.py @@ -6,7 +6,7 @@ import gudhi Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -23,7 +23,7 @@ import gudhi """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" diff --git a/src/cython/test/test_tangential_complex.py b/src/cython/test/test_tangential_complex.py index 8aa4023c..fe623c7b 100755 --- a/src/cython/test/test_tangential_complex.py +++ b/src/cython/test/test_tangential_complex.py @@ -6,7 +6,7 @@ from gudhi import TangentialComplex, SimplexTree Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -23,7 +23,7 @@ from gudhi import TangentialComplex, SimplexTree """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" diff --git a/src/cython/test/test_witness_complex.py b/src/cython/test/test_witness_complex.py index 7d1fb6be..bcbc521b 100755 --- a/src/cython/test/test_witness_complex.py +++ b/src/cython/test/test_witness_complex.py @@ -6,7 +6,7 @@ from gudhi import WitnessComplex, StrongWitnessComplex, SimplexTree Author(s): Vincent Rouvreau - Copyright (C) 2016 INRIA + Copyright (C) 2016 Inria 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 @@ -23,7 +23,7 @@ from gudhi import WitnessComplex, StrongWitnessComplex, SimplexTree """ __author__ = "Vincent Rouvreau" -__copyright__ = "Copyright (C) 2016 INRIA" +__copyright__ = "Copyright (C) 2016 Inria" __license__ = "GPL v3" -- cgit v1.2.3 From e996b0fd0a0aecfa3b77e0ff3780f31b1b8bab4a Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Tue, 22 May 2018 20:59:45 +0000 Subject: Add CMake 3.1 in installation requirements. git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@3450 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: bae61cf108841dae3ff1be5953eb9f87f1713e41 --- src/common/doc/installation.h | 5 +++-- src/cython/doc/installation.rst | 8 ++++---- 2 files changed, 7 insertions(+), 6 deletions(-) (limited to 'src/common/doc') diff --git a/src/common/doc/installation.h b/src/common/doc/installation.h index 25675cc5..12407c18 100644 --- a/src/common/doc/installation.h +++ b/src/common/doc/installation.h @@ -5,8 +5,9 @@ * 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. + * The library uses c++11 and requires Boost ≥ 1.48.0 + * and CMake ≥ 3.1. + * 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: diff --git a/src/cython/doc/installation.rst b/src/cython/doc/installation.rst index c182f176..52c5eb49 100644 --- a/src/cython/doc/installation.rst +++ b/src/cython/doc/installation.rst @@ -3,10 +3,10 @@ Installation 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. +The library uses c++11 and requires `Boost `_ ≥ 1.48.0 +and `CMake `_ ≥ 3.1. +It is a multi-platform library and compiles on Linux, Mac OSX and Visual +Studio 2015. It also requires cmake to generate makefiles, and cython to compile the library. -- cgit v1.2.3 From ef31bf2f968299589e9668e3b00ab90228ad08bf Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Tue, 5 Jun 2018 16:05:54 +0000 Subject: Add author name on main page git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@3536 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 7fc4d6de9bc65d51f4f0fb263b01a88adcab77d3 --- src/common/doc/main_page.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/common/doc') diff --git a/src/common/doc/main_page.h b/src/common/doc/main_page.h index 30d4e71b..db1e80ce 100644 --- a/src/common/doc/main_page.h +++ b/src/common/doc/main_page.h @@ -79,7 +79,7 @@
    @@ -52,8 +52,8 @@ Copyright: GPL v3
    - The Cech complex is a proximity graph that allows to construct a simplicial complex from it. - It guarantees the simplices inserted are inside a ball of a given radius.
    + The ÄŒech complex is a simplicial complex constructed from a proximity graph.
    + The set of all simplices is filtered by the radius of their minimal enclosing ball.
    User manual: \ref cech_complex - Reference manual: Gudhi::cech_complex::Cech_complex
    -- cgit v1.2.3 From dde12ef73a36913c06d33ff3f5c2df43dd209930 Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Tue, 5 Jun 2018 19:44:59 +0000 Subject: Add new layout for documentation website for Doxygen (C++) and sphinx (Python) git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@3539 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 2dc9edea317426fad7a7d99d849145845eb75bb9 --- src/common/doc/header.html | 109 +++++++++++++++++----------------- src/cython/doc/_templates/layout.html | 109 +++++++++++++++++----------------- 2 files changed, 110 insertions(+), 108 deletions(-) (limited to 'src/common/doc') diff --git a/src/common/doc/header.html b/src/common/doc/header.html index 2f54e68d..4661dbbe 100644 --- a/src/common/doc/header.html +++ b/src/common/doc/header.html @@ -24,60 +24,61 @@ $extrastylesheet diff --git a/src/cython/doc/_templates/layout.html b/src/cython/doc/_templates/layout.html index c9356116..613d7d06 100644 --- a/src/cython/doc/_templates/layout.html +++ b/src/cython/doc/_templates/layout.html @@ -166,60 +166,61 @@ -- cgit v1.2.3 From e7fa347f0d0e0160e90ee2f869c8039625aaed5f Mon Sep 17 00:00:00 2001 From: vrouvrea Date: Wed, 13 Jun 2018 07:32:36 +0000 Subject: Fix cppcheck issues git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/trunk@3601 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 44cc04b1609d3b3d40382fd02d4fe15e5ba0159f --- src/Cech_complex/include/gudhi/Cech_complex.h | 1 + .../include/gudhi/read_persistence_from_file.h | 6 ++-- .../include/gudhi/Sparse_rips_complex.h | 4 +-- .../rips_correlation_matrix_persistence.cpp | 1 + src/Witness_complex/example/generators.h | 6 ++-- src/common/doc/header.html | 34 ++++++++++----------- src/common/include/gudhi/Off_reader.h | 2 +- src/common/include/gudhi/distance_functions.h | 4 +-- src/common/include/gudhi/random_point_generators.h | 3 +- .../include/gudhi/writing_persistence_to_file.h | 8 ++--- src/cython/doc/_templates/layout.html | 35 +++++++++++----------- 11 files changed, 54 insertions(+), 50 deletions(-) (limited to 'src/common/doc') diff --git a/src/Cech_complex/include/gudhi/Cech_complex.h b/src/Cech_complex/include/gudhi/Cech_complex.h index f4fb4288..f9b8a269 100644 --- a/src/Cech_complex/include/gudhi/Cech_complex.h +++ b/src/Cech_complex/include/gudhi/Cech_complex.h @@ -30,6 +30,7 @@ #include #include // for exception management +#include namespace Gudhi { diff --git a/src/Persistence_representations/include/gudhi/read_persistence_from_file.h b/src/Persistence_representations/include/gudhi/read_persistence_from_file.h index e0fc7107..4a2b9d68 100644 --- a/src/Persistence_representations/include/gudhi/read_persistence_from_file.h +++ b/src/Persistence_representations/include/gudhi/read_persistence_from_file.h @@ -57,7 +57,7 @@ std::vector > read_persistence_intervals_in_one_dimens std::string line; std::vector > barcode_initial = - read_persistence_intervals_in_dimension(filename, (int)dimension); + read_persistence_intervals_in_dimension(filename, static_cast(dimension)); std::vector > final_barcode; final_barcode.reserve(barcode_initial.size()); @@ -92,8 +92,8 @@ std::vector > read_persistence_intervals_in_one_dimens if ((barcode_initial[i].second == std::numeric_limits::infinity()) && (what_to_substitute_for_infinite_bar != -1)) { - if (barcode_initial[i].first < what_to_substitute_for_infinite_bar) // if only birth < death. - { + if (barcode_initial[i].first < what_to_substitute_for_infinite_bar) { + // if only birth < death. final_barcode.push_back( std::pair(barcode_initial[i].first, what_to_substitute_for_infinite_bar)); } diff --git a/src/Rips_complex/include/gudhi/Sparse_rips_complex.h b/src/Rips_complex/include/gudhi/Sparse_rips_complex.h index 19a44b28..4dcc08ed 100644 --- a/src/Rips_complex/include/gudhi/Sparse_rips_complex.h +++ b/src/Rips_complex/include/gudhi/Sparse_rips_complex.h @@ -54,7 +54,7 @@ namespace rips_complex { template class Sparse_rips_complex { private: - // TODO: use a different graph where we know we can safely insert in parallel. + // TODO(MG): use a different graph where we know we can safely insert in parallel. typedef typename boost::adjacency_list, boost::property> @@ -140,7 +140,7 @@ class Sparse_rips_complex { put(vertex_filtration_t(), graph_, v, 0); } - // TODO: + // TODO(MG): // - make it parallel // - only test near-enough neighbors for (int i = 0; i < n; ++i) diff --git a/src/Rips_complex/utilities/rips_correlation_matrix_persistence.cpp b/src/Rips_complex/utilities/rips_correlation_matrix_persistence.cpp index d4671b45..c78677d2 100644 --- a/src/Rips_complex/utilities/rips_correlation_matrix_persistence.cpp +++ b/src/Rips_complex/utilities/rips_correlation_matrix_persistence.cpp @@ -31,6 +31,7 @@ #include #include #include // infinity +#include // for sort // Types definition using Simplex_tree = Gudhi::Simplex_tree; diff --git a/src/Witness_complex/example/generators.h b/src/Witness_complex/example/generators.h index 81566824..4b755daa 100644 --- a/src/Witness_complex/example/generators.h +++ b/src/Witness_complex/example/generators.h @@ -20,8 +20,8 @@ * along with this program. If not, see . */ -#ifndef EXAMPLE_WITNESS_COMPLEX_GENERATORS_H_ -#define EXAMPLE_WITNESS_COMPLEX_GENERATORS_H_ +#ifndef GENERATORS_H_ +#define GENERATORS_H_ #include #include @@ -163,4 +163,4 @@ void generate_points_torus(Point_Vector& W, int nbP, int dim) { } } -#endif // EXAMPLE_WITNESS_COMPLEX_GENERATORS_H_ +#endif // GENERATORS_H_ diff --git a/src/common/doc/header.html b/src/common/doc/header.html index 4661dbbe..56833d39 100644 --- a/src/common/doc/header.html +++ b/src/common/doc/header.html @@ -27,7 +27,7 @@ $extrastylesheet
    - Author: Clément Maria, Pawel Dlotko, Vincent Rouvreau
    + Author: Clément Maria, Pawel Dlotko, Vincent Rouvreau, Marc Glisse
    Introduced in: GUDHI 2.0.0
    Copyright: GPL v3