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