def _check_fp():
        _graph = graph.shallow_clone()
        funcs = check_fp_collector()
        sequences = consume_collector()

        for sequence in sequences.values():
            for kmer in kmers(sequence, ksize):
                if _graph.get(kmer):
                    print(sequences.items)
                    check_fp_xfail('k-mer from a sequence is false-positive',
                                   request)

        for src_fixture, sequence_bundle in sequences.items.items():
            for sequence in sequence_bundle:
                _graph.add(sequence)

            fp_funcs = funcs.items[src_fixture]
            for func, result in fp_funcs:
                if func(_graph) != result:
                    print(sequences.items)
                    check_fp_xfail(
                        'neighbor is false-positive from {}'.format(
                            src_fixture), request)

        check_fp_pass(list(funcs.items.keys()))
def test_random_sequence(random_sequence, ksize, length):
    seq1 = random_sequence()
    seq2 = random_sequence(exclude=seq1)

    assert len(seq1) == 20
    assert len(seq2) == 20

    for kmer in kmers(seq1, ksize):
        assert kmer not in seq2
def test_snp_bubble(snp_bubble, ksize, length):
    (wildtype, snp), L, R = snp_bubble()

    assert wildtype[:L + ksize] == snp[:L + ksize]
    assert wildtype[R:] == snp[R:]
    assert wildtype[R - 1] != snp[R - 1]

    for kmer in kmers(wildtype[L + 1:R], ksize):
        assert kmer not in snp
def count_decision_nodes(sequence, graph, ksize):
    '''Get the degree distribution of nodes with degree more than 2.
    '''

    dnodes = {}
    for i, kmer in enumerate(kmers(sequence, ksize)):
        d = (graph.left_degree(kmer), graph.right_degree(kmer))
        ld, rd = d
        if ld > 1 or rd > 1:
            dnodes[d] = dnodes.get(d, 0) + 1
            print(i, d)

    return dnodes
Esempio n. 5
0
    def get(exclude=None, length=length):

        try:
            sequence = get_random_sequence(length,
                                           ksize,
                                           exclude=exclude,
                                           seen=global_seen)
        except ValueError:
            pytest.xfail(
                'Failed to generate sequence of given length and k-size')

        for kmer in kmers(sequence, ksize - 1):
            global_seen.add(kmer)

        return sequence
    def _circular_key():
        loop = linear_path()
        loop = loop + loop[:ksize - 1]
        if pivot in (length - ksize, length - ksize - 1):
            _pivot = pivot + ksize - 1
        else:
            _pivot = pivot

        loop_kmers = list(kmers(loop, ksize))
        tail_kmers = [
            loop_kmers[i % len(loop_kmers)]
            for i in range(_pivot + 1, _pivot + 1 + ksize)
        ]
        tail = ''.join((kmer[0] for kmer in tail_kmers))
        tail = mutate_position(tail, -1)

        consume_collector(loop, tail)
        check_fp_collector((lambda G: count_decision_nodes(loop, G, ksize), {
            (1, 2): 1
        }))

        return (loop, tail), _pivot
def test_kmers(ksize):
    S = 'A' * ksize + 'T'
    res = list(kmers(S, ksize))
    assert res[0] == 'A' * ksize
    assert res[-1] == ('A' * (ksize - 1)) + 'T'