def bettiNumbers(self, *args, **kwargs):
        from gudhi import RipsComplex, plot_persistence_diagram, plot_persistence_barcode, sparsify_point_set
        import random as r
        import numpy as np
        import matplotlib.pyplot as plt
        targetCluster = kwargs.get('targetCluster', [1])
        threshold = kwargs.get('threshold', 0.05)
        sparsifyThreshold = kwargs.get('sparsifyThreshold', threshold/8)
        plot = kwargs.get('plot', False)
        pointList = []
        for point in self.points:
            if point.cluster in targetCluster:
                pointList.append(np.array(point.coordinates))

        pointList = sparsify_point_set(
            points=pointList, min_squared_dist=sparsifyThreshold**2)
        point_complex = RipsComplex(
            max_edge_length=threshold/2, points=pointList)
        simplex_tree = point_complex.create_simplex_tree(
            max_dimension=self.dimension)
        persistence = simplex_tree.persistence()
        if plot:
            plot_persistence_barcode(persistence)
            plt.plot()
            plot_persistence_diagram(persistence)
            plt.plot()
        return simplex_tree.betti_numbers()
예제 #2
0
    def bettiNumbers(self, *args, **kwargs):
        from gudhi import RipsComplex
        import random as r
        import numpy as np
        nPoints = kwargs.get('nPoints', self.nPoints)
        targetCluster = kwargs.get('targetCluster', [1])
        maxEdge = kwargs.get('maxEdge', 10)
        maxDim = kwargs.get('maxDim', self.dimension)
        fromValue = kwargs.get('fromValue', 0.05)
        toValue = kwargs.get('toValue', 0.05)
        pointListTemp = []
        for point in self.points:
            if point.cluster in targetCluster:
                pointListTemp.append(np.array(point.coordinates))

        pointList = []
        for point in pointListTemp:
            random = r.random()
            if random <= nPoints / len(pointListTemp):
                pointList.append(point)
        point_complex = RipsComplex(max_edge_length=maxEdge, points=pointList)
        simplex_tree = point_complex.create_simplex_tree(max_dimension=maxDim)
        persistence = simplex_tree.persistence()
        return simplex_tree.persistent_betti_numbers(from_value=fromValue,
                                                     to_value=toValue)
예제 #3
0
def test_rips_from_points():
    point_list = [[0, 0], [1, 0], [0, 1], [1, 1]]
    rips_complex = RipsComplex(points=point_list, max_edge_length=42)

    simplex_tree = rips_complex.create_simplex_tree(max_dimension=1)

    assert simplex_tree.__is_defined() == True
    assert simplex_tree.__is_persistence_defined() == False

    assert simplex_tree.num_simplices() == 10
    assert simplex_tree.num_vertices() == 4

    assert simplex_tree.get_filtration() == [
        ([0], 0.0),
        ([1], 0.0),
        ([2], 0.0),
        ([3], 0.0),
        ([0, 1], 1.0),
        ([0, 2], 1.0),
        ([1, 3], 1.0),
        ([2, 3], 1.0),
        ([1, 2], 1.4142135623730951),
        ([0, 3], 1.4142135623730951),
    ]
    assert simplex_tree.get_star([0]) == [
        ([0], 0.0),
        ([0, 1], 1.0),
        ([0, 2], 1.0),
        ([0, 3], 1.4142135623730951),
    ]
    assert simplex_tree.get_cofaces([0], 1) == [
        ([0, 1], 1.0),
        ([0, 2], 1.0),
        ([0, 3], 1.4142135623730951),
    ]
예제 #4
0
def test_compatibility_with_rips():
    distance_matrix = np.array([[0, 1, 1, sqrt(2)], [1, 0, sqrt(2), 1], [1, sqrt(2), 0, 1], [sqrt(2), 1, 1, 0]])
    dtm_rips = DTMRipsComplex(distance_matrix=distance_matrix, max_filtration=42)
    st = dtm_rips.create_simplex_tree(max_dimension=1)
    rips_complex = RipsComplex(distance_matrix=distance_matrix, max_edge_length=42)
    st_from_rips = rips_complex.create_simplex_tree(max_dimension=1)
    assert list(st.get_filtration()) == list(st_from_rips.get_filtration())
예제 #5
0
def test_filtered_rips_from_points():
    point_list = [[0, 0], [1, 0], [0, 1], [1, 1]]
    filtered_rips = RipsComplex(points=point_list, max_edge_length=1.0)

    simplex_tree = filtered_rips.create_simplex_tree(max_dimension=1)

    assert simplex_tree.__is_defined() == True
    assert simplex_tree.__is_persistence_defined() == False

    assert simplex_tree.num_simplices() == 8
    assert simplex_tree.num_vertices() == 4
예제 #6
0
def test_filtered_rips_from_distance_matrix():
    distance_matrix = [[0], [1, 0], [1, sqrt(2), 0], [sqrt(2), 1, 1, 0]]
    filtered_rips = RipsComplex(distance_matrix=distance_matrix,
                                max_edge_length=1.0)

    simplex_tree = filtered_rips.create_simplex_tree(max_dimension=1)

    assert simplex_tree.__is_defined() == True
    assert simplex_tree.__is_persistence_defined() == False

    assert simplex_tree.num_simplices() == 8
    assert simplex_tree.num_vertices() == 4
예제 #7
0
def test_sparse_with_multiplicity():
    points = [
        [3, 4],
        [0.1, 2],
        [0.1, 2],
        [0.1, 2],
        [0.1, 2],
        [0.1, 2],
        [0.1, 2],
        [0.1, 2],
        [0.1, 2],
        [0.1, 2],
        [0.1, 2],
        [3, 4.1],
    ]
    rips = RipsComplex(points=points, sparse=0.01)
    simplex_tree = rips.create_simplex_tree(max_dimension=2)
    assert simplex_tree.num_simplices() == 7
    diag = simplex_tree.persistence()
예제 #8
0
def test_rips_from_distance_matrix():
    distance_matrix = [[0], [1, 0], [1, sqrt(2), 0], [sqrt(2), 1, 1, 0]]
    rips_complex = RipsComplex(distance_matrix=distance_matrix,
                               max_edge_length=42)

    simplex_tree = rips_complex.create_simplex_tree(max_dimension=1)

    assert simplex_tree.__is_defined() == True
    assert simplex_tree.__is_persistence_defined() == False

    assert simplex_tree.num_simplices() == 10
    assert simplex_tree.num_vertices() == 4

    assert list(simplex_tree.get_filtration()) == [
        ([0], 0.0),
        ([1], 0.0),
        ([2], 0.0),
        ([3], 0.0),
        ([0, 1], 1.0),
        ([0, 2], 1.0),
        ([1, 3], 1.0),
        ([2, 3], 1.0),
        ([1, 2], 1.4142135623730951),
        ([0, 3], 1.4142135623730951),
    ]

    assert simplex_tree.get_star([0]) == [
        ([0], 0.0),
        ([0, 1], 1.0),
        ([0, 2], 1.0),
        ([0, 3], 1.4142135623730951),
    ]
    assert simplex_tree.get_cofaces([0], 1) == [
        ([0, 1], 1.0),
        ([0, 2], 1.0),
        ([0, 3], 1.4142135623730951),
    ]
예제 #9
0
from gudhi import RipsComplex, SimplexTree
import gudhi
from src.datasets import mnist
from pprint import pprint
import sys

print('Making Rips complex')
if len(sys.argv) > 1:
    rc = RipsComplex(off_file=sys.argv[1])
else:
    rc = RipsComplex(points=mnist(7))
print('And simplex tree')
simplex_tree = rc.create_simplex_tree(max_dimension=10)

diag = simplex_tree.persistence()

print("betti_numbers()=")
print(simplex_tree.betti_numbers())

pprint(diag)
예제 #10
0
def test_empty_rips():
    rips_complex = RipsComplex()