From 57cd9bfb46729b923d91119993348e28bc033347 Mon Sep 17 00:00:00 2001 From: Chris Tralie Date: Mon, 5 Feb 2024 08:11:06 -0500 Subject: [PATCH 1/4] Adding test that exposes #153 --- test/test_lower_star.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/test/test_lower_star.py b/test/test_lower_star.py index 8f7f1bf..3a11eb7 100644 --- a/test/test_lower_star.py +++ b/test/test_lower_star.py @@ -19,4 +19,10 @@ def test_single_point(self): assert dgm.shape[0] == 1 assert tuple(dgm[0]) == (0,np.inf) - \ No newline at end of file + def test_zero_edge_bug(self): + img = np.ones((5, 5)) + img[1:-1, 1:-1] = 0 + img[2, 2] = 1 + r1 = lower_star_img(-img) + r2 = 1-lower_star_img(1-img) + assert(np.allclose(r1, r2)) \ No newline at end of file From 71b27ebf2335157c476e63482ee87739a984bab3 Mon Sep 17 00:00:00 2001 From: Chris Tralie Date: Mon, 5 Feb 2024 08:16:38 -0500 Subject: [PATCH 2/4] Made a mistake with the test --- test/test_lower_star.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_lower_star.py b/test/test_lower_star.py index 3a11eb7..ac2d7a6 100644 --- a/test/test_lower_star.py +++ b/test/test_lower_star.py @@ -23,6 +23,6 @@ def test_zero_edge_bug(self): img = np.ones((5, 5)) img[1:-1, 1:-1] = 0 img[2, 2] = 1 - r1 = lower_star_img(-img) + r1 = -lower_star_img(-img) r2 = 1-lower_star_img(1-img) assert(np.allclose(r1, r2)) \ No newline at end of file From 32a1baa7118210977d194bd8b2ecbedb3d262b38 Mon Sep 17 00:00:00 2001 From: Chris Tralie Date: Mon, 5 Feb 2024 08:17:43 -0500 Subject: [PATCH 3/4] Fixes #153 --- ripser/ripser.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/ripser/ripser.cpp b/ripser/ripser.cpp index 1d01270..7800daf 100644 --- a/ripser/ripser.cpp +++ b/ripser/ripser.cpp @@ -687,16 +687,14 @@ class ripser v = dset.find(vertices_of_edge[1]); if (u != v) { - if (get_diameter(e) != 0) { - // Elder rule; youngest class (max birth time of u and v) - // dies first - value_t birth = - std::max(dset.get_birth(u), dset.get_birth(v)); - value_t death = get_diameter(e); - if (death > birth) { - births_and_deaths_by_dim[0].push_back(birth); - births_and_deaths_by_dim[0].push_back(death); - } + // Elder rule; youngest class (max birth time of u and v) + // dies first + value_t birth = + std::max(dset.get_birth(u), dset.get_birth(v)); + value_t death = get_diameter(e); + if (death > birth) { + births_and_deaths_by_dim[0].push_back(birth); + births_and_deaths_by_dim[0].push_back(death); } dset.link(u, v); } else From cec490b9e3be7e704940b0e6d3e018712a889b2a Mon Sep 17 00:00:00 2001 From: Chris Tralie Date: Mon, 5 Feb 2024 08:20:35 -0500 Subject: [PATCH 4/4] Version bump --- CHANGELOG.md | 3 +++ ripser/_version.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1cbbb1c..1804146 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 0.6.5 + - Bugfix for lower star filtrations with edges that come in at exactly 0 (courtesy of Riccardo Ceccaroni) + # 0.6.4 - Add some includes to ripser.cpp for newer Ubuntu/C++ environments diff --git a/ripser/_version.py b/ripser/_version.py index 364e7ba..7bbb2ef 100644 --- a/ripser/_version.py +++ b/ripser/_version.py @@ -1 +1 @@ -__version__ = "0.6.4" +__version__ = "0.6.5"