# 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)