circular.py
author Dmitriy Morozov <dmitriy@mrzv.org>
Mon, 18 Jun 2012 10:04:58 -0700
changeset 5 9acb920a945c
parent 0 337c84a13184
permissions -rw-r--r--
Added PDF of the talk

from    dionysus    import *
from    dionysus    import viewer as v

import  sys
from    math        import sqrt


if len(sys.argv) < 2:
    print "Usage: %s POINTS" % sys.argv[0]

points = read_points(sys.argv[1])
f = Filtration()
fill_alpha_complex(points, f)
#f = Filtration((s for s in f if s.data[0] < 1))
f.sort(dim_data_cmp)

p = StaticCohomologyPersistence(f, prime = 11)
p.pair_simplices()

dgms = init_diagrams(p,f, lambda s: sqrt(s.data[0]), lambda n: n.cocycle)

#v.show_diagram(dgms[0])
#pt = v.show_diagram(dgms[1])
pt = v.show_diagram(dgms)
#pt1 = v.show_diagram(dgms[1])
#pt2 = v.show_diagram(dgms[1])
#pt3 = v.show_diagram(dgms[1])
#print pt

if pt:
#if pt1 and pt2 and pt3:
    #rf = Filtration((s for s in f if sqrt(s.data[0]) <= pt[0]))
    #rf = Filtration((s for s in f if sqrt(s.data[0]) < pt[1]))
    rf = Filtration((s for s in f if sqrt(s.data[0]) <= (pt[0] + pt[1])/2))
    #rf = Filtration((s for s in f if sqrt(s.data[0]) < min(pt1[1], pt2[1], pt3[1])))
    values = circular.smooth(rf, pt[2])
    #values1 = circular.smooth(rf, pt1[2])
    #values2 = circular.smooth(rf, pt2[2])
    #values3 = circular.smooth(rf, pt3[2])
    #print pt[2]
    cocycle = [rf[i] for (c,i) in pt[2] if i < len(rf)]
    #print cocycle
    v.show_complex(points, values = values)
    v.show_complex(points, subcomplex = cocycle)
    v.show_complex(points, rf, values = values, subcomplex = cocycle)
    #vals = [values1[i] + values2[i] + values3[i] for i in xrange(len(values1))]
    #v.show_complex(points, values = vals)
    #v.show_complex(points, rf, values)
    #v.show_complex(points, rf, values, point_size = 6.)
    #v.show_complex(points, rf, vals, point_size = 6.)