summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHind-M <hind.montassif@gmail.com>2021-07-12 11:25:57 +0200
committerHind-M <hind.montassif@gmail.com>2021-07-12 11:25:57 +0200
commitaa1a040f6338ec938b9360de35196ad0518be502 (patch)
treeaa4028509ed3263af7f7997dafce2782ef2e0483
parent62b63fd55442b152b934dc0c9ed662970ddb32dc (diff)
Limit homology_coeff_field value to max allowed
Add test with first prime outside the allowed range
-rw-r--r--src/Persistent_cohomology/include/gudhi/Persistent_cohomology/Field_Zp.h7
-rw-r--r--src/Persistent_cohomology/test/persistent_cohomology_unit_test.cpp8
-rw-r--r--src/python/gudhi/simplex_tree.pyx6
3 files changed, 12 insertions, 9 deletions
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 4bfd95c0..7ecc9a80 100644
--- a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology/Field_Zp.h
+++ b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology/Field_Zp.h
@@ -14,7 +14,6 @@
#include <utility>
#include <vector>
#include <stdexcept>
-#include <cmath>
namespace Gudhi {
@@ -39,6 +38,10 @@ class Field_Zp {
Prime = charac;
+ // Check that the provided prime is less than the maximum allowed as int and calculation below : 46337 ; i.e (max_prime-1)**2 <= INT_MAX
+ if(Prime > 46337)
+ throw std::invalid_argument("Maximum homology_coeff_field allowed value is 46337");
+
// Check for primality
if ((Prime == 0) || (Prime == 1) || ((Prime > 3) && ((Prime % 2 == 0) || (Prime % 3 == 0))))
throw std::invalid_argument("homology_coeff_field must be a prime number");
@@ -56,7 +59,7 @@ class Field_Zp {
mult = inv * i;
}
inverse_.push_back(inv);
- if ( (i <= std::sqrt(Prime)) && (((i-5)%6) == 0) ) {
+ if ( (i*i <= Prime) && (((i-5)%6) == 0) ) {
if ((Prime % i == 0) || (Prime % (i + 2) == 0))
throw std::invalid_argument("homology_coeff_field must be a prime number");
}
diff --git a/src/Persistent_cohomology/test/persistent_cohomology_unit_test.cpp b/src/Persistent_cohomology/test/persistent_cohomology_unit_test.cpp
index 9559b842..35bb5988 100644
--- a/src/Persistent_cohomology/test/persistent_cohomology_unit_test.cpp
+++ b/src/Persistent_cohomology/test/persistent_cohomology_unit_test.cpp
@@ -186,10 +186,10 @@ BOOST_AUTO_TEST_CASE( rips_persistent_cohomology_single_field_dim_13 )
test_rips_persistence_in_dimension(13);
}
-// TODO(VR): not working from 6
-// std::string str_rips_persistence = test_rips_persistence(6, 0);
-// TODO(VR): division by zero
-// std::string str_rips_persistence = test_rips_persistence(0, 0);
+BOOST_AUTO_TEST_CASE( rips_persistent_cohomology_single_field_dim_46349 )
+{
+ BOOST_CHECK_THROW(test_rips_persistence_in_dimension(46349), std::invalid_argument);
+}
/** SimplexTree minimal options to test the limits.
*
diff --git a/src/python/gudhi/simplex_tree.pyx b/src/python/gudhi/simplex_tree.pyx
index be08a3a1..9c51cb46 100644
--- a/src/python/gudhi/simplex_tree.pyx
+++ b/src/python/gudhi/simplex_tree.pyx
@@ -412,7 +412,7 @@ cdef class SimplexTree:
"""This function retrieves good values for extended persistence, and separate the diagrams into the Ordinary,
Relative, Extended+ and Extended- subdiagrams.
- :param homology_coeff_field: The homology coefficient field. Must be a prime number. Default value is 11.
+ :param homology_coeff_field: The homology coefficient field. Must be a prime number. Default value is 11. Max is 46337.
:type homology_coeff_field: int
:param min_persistence: The minimum persistence value (i.e., the absolute value of the difference between the
persistence diagram point coordinates) to take into account (strictly greater than min_persistence).
@@ -449,7 +449,7 @@ cdef class SimplexTree:
"""This function computes and returns the persistence of the simplicial complex.
:param homology_coeff_field: The homology coefficient field. Must be a
- prime number. Default value is 11.
+ prime number. Default value is 11. Max is 46337.
:type homology_coeff_field: int
:param min_persistence: The minimum persistence value to take into
account (strictly greater than min_persistence). Default value is
@@ -472,7 +472,7 @@ cdef class SimplexTree:
when you do not want the list :func:`persistence` returns.
:param homology_coeff_field: The homology coefficient field. Must be a
- prime number. Default value is 11.
+ prime number. Default value is 11. Max is 46337.
:type homology_coeff_field: int
:param min_persistence: The minimum persistence value to take into
account (strictly greater than min_persistence). Default value is