Example #1
0
def seifert_corr(stringdata, use_multi=False):
    '''Parse Seifert data, output correction terms.'''
    try:
        if stringdata == '':
            raise ValueError('empty string')
        data = parse_seifert(stringdata) # parse data
    except:
        print traceback.print_exc()            
        return
    if not correct_form(data, gui=False):
        print traceback.print_exc()
        return
    else:
        # compute quadratic form and correction terms
        quad = s_quad_form(data)
        print quad
        quadform = NDQF(quad[0])
        print 'H_1(Y) ~ %s' % quadform.group.struct()        
        if use_multi:
            corr = quadform.correction_terms_threaded()
        else:
            corr = quadform.correction_terms_ugly()
        if quad[1]: # reversed orientation
            corr = map(lambda n: -n, corr)
        corr = quadform.pretty_print(corr) # make Fractions pretty
    return corr
def test_g_quad():
    # check agrees with Seifert
    for i in range(200): # do this on 200 random Seifert datas
        listdata = []
        num_pairs = random.randint(0, 10)
        e = random.randint(-100, 100)
        listdata.append(e)
        for j in range(num_pairs):
            q = random.choice(range(-100,0) + range(1,101)) # exclude 0
            while 1: # change p until gcd(p, q) = 1
                p = random.randint(2, 100)
                if abs(gcd(p, q)) == 1:
                    break
            listdata.append((p,q))
        if seifert.invariants(listdata)[1] == 0:
            assert_raises(ValueError, seifert.s_quad_form, listdata, False)
            continue
        startree = seifert.make_graph(listdata)            
        assert numpy.array_equal(seifert.s_quad_form(listdata, gui=False)[0], 
                                 g_quad(startree,
            ['N%i'%index for index in range(len(startree.nodes(data=False)))]))
    # load some files
    graph1 = GraphPopup(None, gui=False)
    graph1.load('testing/forest_ex1.txt')
    nodes1 = ['N%i'%index for index in \
              range(len(graph1.graph.nodes(data=False)))]
    assert num_bad_vertices(graph1.graph, nodes1) == 1
    assert_raises(ValueError, g_quad, graph1.graph, nodes1, False) # not negdef
    graph1.load('testing/forest_ex2.txt')
    nodes2 = ['N%i'%index for index in \
              range(len(graph1.graph.nodes(data=False)))]
    assert num_bad_vertices(graph1.graph, nodes2) == 1
    assert numpy.array_equal(g_quad(graph1.graph, nodes2, gui=False), 
                             numpy.array(\
        [[-5,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0],
         [1,-3,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
         [1,0,-3,0,0,0,0,0,0,0,0,0,0,0,0,0],
         [1,0,0,-3,0,0,0,0,0,0,0,0,0,0,0,0],
         [0,0,0,0,-1,0,0,0,0,0,1,0,0,1,0,0],
         [1,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0],
         [0,0,0,0,0,0,-4,1,0,0,0,0,0,0,0,0],
         [0,0,0,0,0,0,1,-4,1,1,0,0,0,0,0,0],
         [0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0],
         [0,0,0,0,0,0,0,1,0,-3,1,1,0,0,0,0],
         [0,0,0,0,1,0,0,0,0,1,-4,0,0,0,1,0],
         [0,0,0,0,0,0,0,0,0,1,0,-3,1,0,0,1],
         [0,0,0,0,0,0,0,0,0,0,0,1,-3,0,0,0],
         [0,0,0,0,1,0,0,0,0,0,0,0,0,-5,0,0],
         [0,0,0,0,0,0,0,0,0,0,1,0,0,0,-2,0],
         [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,-2]]))
    graph1.cancel()
Example #3
0
 def get_seifert(self):
     '''Parse Seifert data, output correction terms.'''
     stringdata = self.entry.get()
     try:
         if stringdata == '':
             raise ValueError('empty string')
         data = parse_seifert(stringdata) # parse data
     except:
         tkMessageBox.showwarning('Failed to parse data.',
                 'Data should be [e, (p1,q1), (p2,q2), ... , (pr,qr)],' +\
                 'where e and the pi,qi are ints, pi > 1, and gcd(pi,qi) ' +\
                 '= 1.')
         print traceback.print_exc()            
         return
     if not correct_form(data, gui=True):
         tkMessageBox.showwarning('Invalid data form.',
                 'Data should be [e, (p1,q1), (p2,q2), ... , (pr,qr)],' +\
                 'where e and the pi,qi are ints, pi > 1, and gcd(pi,qi) ' +\
                 '= 1.')
         print traceback.print_exc()
         return
     else:
         print '\n%s' %data
         # compute quadratic form and correction terms
         quad = s_quad_form(data)
         print quad
         quadform = NDQF(quad[0])
         struct = quadform.group.struct()
         print struct
         if self.use_multi.get():
             corr = quadform.correction_terms_threaded()
         else:
             corr = quadform.correction_terms_ugly()
         if quad[1]: # reversed orientation
             corr = map(lambda n: -n, corr)
         corr = quadform.pretty_print(corr) # make Fractions pretty
         print corr
         if self.save_file.get():
             self.save(data)
         OutputWindow(self.master, corr, struct, quad[0], data,\
                          showhom=self.show_hom.get(),
                          showquad=self.show_quad.get(), 
                          condense=self.condense.get(),
                          showseifert=self.show_seifert.get(),
                          seifertdata=alter_data(data))
         if self.show_weighted.get():
             s_draw(data)