def mem_test(num):
        for _n in xrange(num):
            t0 = time()
            c = WorkCounter()
            searcher = SearchEngine(abort_event)
            results = searcher.find(c, template, primer, 6)
            t1 = (time()-t0)
#            print 'results use: %fMb' % (asizeof(results)/1024.0/1024.0)
            print results
#            print_out(results, '')
            print '[%6.2f%%] elapsed %f seconds\n' % (c.percent(), t1)
 def mem_test(num):
     for _n in xrange(num):
         t0 = time()
         c = WorkCounter()
         searcher = SearchEngine(abort_event)
         results = searcher.find(c, template, primer, 6)
         t1 = (time() - t0)
         #            print 'results use: %fMb' % (asizeof(results)/1024.0/1024.0)
         print results
         #            print_out(results, '')
         print '[%6.2f%%] elapsed %f seconds\n' % (c.percent(), t1)
    def find_vs_regexp(primer, template):
        find_times = []
        re_times = []
        for _i in xrange(10): 
            #find
            t0 = time()
            searcher = SearchEngine(abort_event)
            p_len,t_len = len(primer),len(template)
            res = searcher._find(WorkCounter(), template, primer, t_len, p_len, 10)
            find_times.append(time()-t0)
            #regexp
            t0 = time()
            fwd_seq = str(template.seq)
            rev_seq = str(template.seq.reverse_complement())
            primer_re = primer2re(primer)
            fwd_res = primer_re.findall(fwd_seq)
            rev_res = primer_re.findall(rev_seq)
            re_times.append(time()-t0)
        print 'find results: f %d, r %d' % (len(res[5]), len(res[6]))
        print 're results:   f %d, r %d' % (len(fwd_res), len(rev_res))
#        print template.seq[res[5][0]:res[5][0]+p_len]
#        print fwd_res[0]
        return find_times, re_times
 def find_vs_regexp(primer, template):
     find_times = []
     re_times = []
     for _i in xrange(10):
         #find
         t0 = time()
         searcher = SearchEngine(abort_event)
         p_len, t_len = len(primer), len(template)
         res = searcher._find(WorkCounter(), template, primer, t_len, p_len,
                              10)
         find_times.append(time() - t0)
         #regexp
         t0 = time()
         fwd_seq = str(template.seq)
         rev_seq = str(template.seq.reverse_complement())
         primer_re = primer2re(primer)
         fwd_res = primer_re.findall(fwd_seq)
         rev_res = primer_re.findall(rev_seq)
         re_times.append(time() - t0)
     print 'find results: f %d, r %d' % (len(res[5]), len(res[6]))
     print 're results:   f %d, r %d' % (len(fwd_res), len(rev_res))
     #        print template.seq[res[5][0]:res[5][0]+p_len]
     #        print fwd_res[0]
     return find_times, re_times
                    print res[0]
                    for dup, _id in res[1]:
                        print _id
                        print dup
                        #print 'mismatches:', dup.mismatches
                    print '\n'
                print '\n'
    #end def

    ppid = os.getpid()
    import DegenPrimer.TD_Functions as tdf
    from DegenPrimer.SearchEngine import SearchEngine
    from DegenPrimer.WorkCounter import WorkCounter
    tdf.PCR_P.PCR_T = 60
    
    searcher = SearchEngine(abort_event)
    
    cProfile.runctx('for x in xrange(10): searcher._find(WorkCounter(), template, primer, len(template), len(primer), 6)', 
                    globals(), locals(), 'SearchEngine._find.profile')
    
    matches = searcher._find_mp(WorkCounter(), template[:2000], primer, len(template), len(primer), 6)
    cProfile.runctx('for x in xrange(10): searcher.compile_duplexes(WorkCounter(), *matches)', 
                    globals(), locals(), 'SearchEngine.compile_duplexes.profile')
    
    f = 'test_search_results.txt'
    dups = searcher.compile_duplexes(WorkCounter(), *matches)
    if not os.path.isfile(f):
        with open(f, 'w') as out:
            out.write(str(dups))
        sys.exit()
    else:
                    for dup, _id in res[1]:
                        print _id
                        print dup
                        #print 'mismatches:', dup.mismatches
                    print '\n'
                print '\n'

    #end def

    ppid = os.getpid()
    import DegenPrimer.TD_Functions as tdf
    from DegenPrimer.SearchEngine import SearchEngine
    from DegenPrimer.WorkCounter import WorkCounter
    tdf.PCR_P.PCR_T = 60

    searcher = SearchEngine(abort_event)

    cProfile.runctx(
        'for x in xrange(10): searcher._find(WorkCounter(), template, primer, len(template), len(primer), 6)',
        globals(), locals(), 'SearchEngine._find.profile')

    matches = searcher._find_mp(WorkCounter(), template[:2000], primer,
                                len(template), len(primer), 6)
    cProfile.runctx(
        'for x in xrange(10): searcher.compile_duplexes(WorkCounter(), *matches)',
        globals(), locals(), 'SearchEngine.compile_duplexes.profile')

    f = 'test_search_results.txt'
    dups = searcher.compile_duplexes(WorkCounter(), *matches)
    if not os.path.isfile(f):
        with open(f, 'w') as out: