07-ls-filtration.py
author Dmitriy Morozov <dmitriy@mrzv.org>
Mon, 18 Jun 2012 10:04:58 -0700
changeset 5 9acb920a945c
parent 3 ef86268a3695
permissions -rw-r--r--
Added PDF of the talk

# Lower-star filtration
elephant_points, elephant_complex = read_off('data/cgal/elephant.off')
# show_complex(elephant_points, elephant_complex)
elephant_complex = closure(elephant_complex, 2)
show_complex(elephant_points, elephant_complex)

def projection(points, axis = 1):
    def value(v):
        return points[v][axis]

    return value

value = projection(elephant_points, 1)


def max_vertex_compare(values):
    def max_vertex(s):
        return max(values(v) for v in s.vertices)

    def compare(s1, s2):
        return cmp(s1.dimension(), s2.dimension()) or cmp(max_vertex(s1), max_vertex(s2))

    return compare

f = Filtration(elephant_complex, max_vertex_compare(value))

#persistence = StaticPersistence(f)
persistence = DynamicPersistenceChains(f)
persistence.pair_simplices()

dgms = init_diagrams(persistence, f, lambda s: max(value(v) for v in s.vertices), lambda i: i)
print "Betti numbers:"
for i,dgm in enumerate(dgms):
    print len([p for p in dgm if p[1] == float('inf')])
show_diagram(dgms)