def main(): print "testing hash functions..." kmer1 = dna("ATCGATCGATCGATCG") kmer2 = dna("ATCGATCGATCGATCG") K = 16 assert hash_forward(kmer1) == hash_forward(kmer2) h1, r1 = hash_forward(kmer1) h2, r2 = hash_forward(kmer2) assert kmer1 == hash_reverse(h1, K) assert hash_reverse(r1, K) == "CGATCGATCGATCGAT" assert hash_reverse(r1, K) == hash_reverse(r2, K) assert hash_reverse(h1, K) == hash_reverse(h2, K)
def hash_reverse(hashval, K): val = long(hashval) & 3L bases = [""] * K bases[-1] = bits_to_base(val) hashval = long(hashval) for i in xrange(1, K): hashval = hashval >> 2L val = hashval & 3L bases[-i - 1] = bits_to_base(val) return dna("".join(bases))
def rand_dna(L): s = bases * (L // 4) random.shuffle(s) return dna(''.join(s))