示例#1
0
    def p_output(self, regions, vie, inputinfo):
        '''Output correction terms'''
        if regions: # non-empty (i.e. not unknot with no crossings)
            quad = regions_to_quad(regions)
            print quad
            quadform = NDQF(quad)
            struct = quadform.group.struct()
            print struct            
            corr = quadform.correction_terms(self.use_multi.get())
        else: # unknot with no crossings
            quad = 'N/A (unknot with no crossings)'
            corr = '0' # only 1 spin structure
            struct = '1'
            self.show_graph.set(0) # no graph to show
    
        if self.condense.get():
            OutputWindow(self.master, corr, struct, quad, inputinfo, 
                         showhom=self.show_hom.get(), condense=True)
        else:
            OutputWindow(self.master, corr, struct, quad, inputinfo, \
                         showhom=self.show_hom.get(),
                         showquad=self.show_quad.get(), \
                         showgraph=self.show_graph.get(), regions=regions) 

        if self.show_shaded.get():
            ShadedLinkWindow(self.master, regions, vie[0], vie[1], vie[2],
                             inputinfo) # open window to show shaded link
        if self.show_link.get():
            if inputinfo != 'PLink data not saved': # can only do if saved
                editor = plink.LinkEditor()
                editor.load(inputinfo)   
示例#2
0
 def k_output(self, regions, vie, inputinfo):
     quad = regions_to_quad(regions)
     print quad
     quadform = NDQF(quad)
     corr = quadform.correction_terms(self.use_multi.get())
     struct = quadform.group.struct()
     
     if self.condense.get():
         self.output = OutputWindow(self.master, corr, struct, quad,
                                    inputinfo, showhom=self.show_hom.get(),
                                    condense=True)
     else:
         self.output = OutputWindow(self.master, corr, struct, quad, inputinfo,
                                    showhom=self.show_hom.get(),
                                    showquad=self.show_quad.get(), 
                                    showgraph=self.show_graph.get(), 
                                    regions=regions)
     if self.show_shaded.get():
         ShadedLinkWindow(self.master, regions, vie[0], vie[1], vie[2],
                          inputinfo, flip=True) 
         # opens window to show shaded link
         # flips coordinates so drawn right side up (Tkinter y-axis reversed)
     
     if self.show_link.get():
         if not self.archive_num: # loaded file
             # attempt to use filename to load original link
             # e.g. '6x-1-1.txt' or '6x-1-1' will work
             # parsing on '/' will probably not work on Windows
             archive_num = self.filename.split('/')[-1].split('.txt')[0]
             if valid_archive_form(archive_num):
                 browser_link(archive_num)
             # else ignore and do nothing
         else:
             browser_link(self.archive_num) # open browser to original link
示例#3
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
示例#4
0
def main(loading_type, loading_data=None, use_multi=False):
    '''
    Return Heegaard Floer correction terms.
    
    loading_type - 'k' for Knotilus, 'p' for PLink, 's' for Seifert
    loading_data - Knotilus archive number, filename, Seifert data
    multi - use multiprocessing or not
    '''
    print '\n%s' %loading_data
    if loading_type == 'p': # PLink
        if loading_data:
            print 'Loading PLink'
            data = load_plink(loading_data)
        else:
            print 'Loading new PLink'
            data = load_plink()
        all_data = make_objects(data[0],data[1],data[2],data[3],data[4],data[5])            
        regions = all_data[3]
    elif loading_type == '': # Knotilus download
        print 'Downloading from Knotilus'
        regions = load(loading_data, False, False)[3]
    elif loading_type == 'k': # Knotilus download and save
        print 'Downloading and saving from Knotilus'
        regions = load(loading_data, False, True)[3]
    elif loading_type == 'kf': # Knotilus load file
        print 'Loading Knotilus file'
        regions = load(loading_data, True, False)[3]
    elif loading_type == 's':
        print 'Seifert data'
    else:
        usage()
    # compute correction terms
    if loading_type != 's':
        if regions: # non-empty (i.e. not unknot with no crossings)         
            nodes = [NodeClass(i) for i in range(len(regions))]
            tree = edges_regions(nodes,regions)
            max_subtree = maximal_subtree(tree, nodes)
            minus = minus_maximal_subtree(tree, max_subtree)
            quad = quad_form(tree, minus, nodes)
            print quad
            quadform = NDQF(quad)
            corr = quadform.correction_terms(use_multi)
        else: # unknot with no crossings
            print 'quadratic form N/A (unknot with no crossings)'
            print 'H_1(Y) ~ 1'
            print '0' # corrterms - only 1 spin structure
    else: # Seifert
        corr = seifert_corr(loading_data, use_multi)
        print corr
    return
示例#5
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)
示例#6
0
 def close(self):
     '''Close and output correction terms.'''
     if not self.gui:
         print 'Nothing to close'
         return
     if self.num_nodes == 0:
         tkMessageBox.showerror('No nodes', 
                                'No graph drawn. Closing editor.')
         self.top.destroy()
         return
     self.save()        
     quad = g_quad(self.graph, self.nodes)
     quadform = NDQF(quad)
     corr = quadform.correction_terms(self.use_multi.get())
     struct = quadform.group.struct()
     
     self.top.destroy()
     #self.master.quit()
     if not self.show_weighted.get():
         plt.close('all')            
     OutputWindow(self.master, corr, struct, quad, self.info,
                  condense=self.condense.get(),
                  showquad=self.show_quad.get(),
                  showhom=self.show_hom.get())