# Flat torus
from random import uniform
from math import sqrt
class TorusDistances:
def __init__(self, count):
self.points = []
for i in xrange(count):
self.points.append((uniform(0,1), uniform(0,1)))
def __len__(self):
return len(self.points)
def __call__(self, i, j):
x1,y1 = self.points[i]
x2,y2 = self.points[j]
sq_dist = ((x1 - x2) % 1)**2 + ((y1 - y2) % 1)**2
return sqrt(sq_dist)
distances = TorusDistances(250)
rips = Rips(distances)
f = Filtration()
rips.generate(2, .75, f.append)
print "Number of simplices:", len(f)
f.sort(rips.cmp)
p = StaticPersistence(f)
p.pair_simplices()
dgm = init_diagrams(p, f, rips.eval)
show_diagram(dgm[:2])