Simple example of a filtered triangle is given in
examples/triangle/triangle.cpp
. Its equivalent in Python appears in
examples/triangle/triangle.py
, and we describe it next.
from dionysus import Simplex, Filtration, StaticPersistence, \
vertex_cmp, data_cmp, data_dim_cmp \
complex = [Simplex((0,), 0), # A
Simplex((1,), 1), # B
Simplex((2,), 2), # C
Simplex((0,1), 2.5), # AB
Simplex((1,2), 2.9), # BC
Simplex((0,2), 3.5), # CA
Simplex((0,1,2), 5)] # ABC
print "Complex:", complex
print "Vertex: ", sorted(complex, vertex_cmp)
print "Data: ", sorted(complex, data_cmp)
print "DataDim:", sorted(complex, data_dim_cmp)
f = Filtration(complex, data_cmp)
print "Complex in the filtration order:", ', '.join((str(s) for s in f))
p = StaticPersistence(f)
print "Persistence initialized"
p.pair_simplices(True)
print "Simplices paired"
smap = p.make_simplex_map(f)
for i in p:
print i.sign(), i.pair().sign()
print "%s (%d) - %s (%d)" % (smap[i], i.sign(), smap[i.pair()], i.pair().sign())
print "Cycle (%d):" % len(i.cycle), " + ".join((str(smap[ii]) for ii in i.cycle))
print "Number of unpaired simplices:", len([i for i in p if i.unpaired()])
After the necessary imports, the complex
is setup explicitly as a list of
simplices. Each Simplex
constructor takes an iterable sequence of
vertices, and optionally a data value.
A filtration f
is initialized using the Filtration
class, which
takes a list of simplices (or anything iterable) and a comparison that defines
in what order the simplices should come in the filtration. In this case we use
data_cmp()
, which simply compares simplices’ data
attributes.
StaticPersistence
is initialized with the filtration, and its method
pair_simplices()
pairs the simplices of the
filtration:
p = StaticPersistence(f)
p.pair_simplices()
Subsequently, we iterate over p
to access a representation of each simplex
in the filtration order. We output each simplex, its sign, and its pair. The auxilliary
smap = p.make_simplex_map(f)
remaps the indices of StaticPersistence
into
the simplices in the filtration.
Naturally, one could use this to access the
data
attribute of the simplices to output the actual
persistence diagram, as is done in the Alpha shape example and the
Rips complex example.