コード例 #1
0
def test_variant_equal_throws_below_reference():
    ref_id = chrom_ref['13'].keys()[0]
    v1 = ('13', chrom_ref['13'][ref_id]['start'], 'A', 'C')
    v2 = ('13', chrom_ref['13'][ref_id]['start'] + 10, 'A', 'C')
    with pytest.raises(AssertionError):
        variant_equal(v1, v2, ref_id)
    with pytest.raises(AssertionError):
        variant_equal(v2, v1, ref_id)
コード例 #2
0
def test_variant_equal_throws_below_reference():
    ref_id = chrom_ref['13'].keys()[0]
    v1 = ('13', chrom_ref['13'][ref_id]['start'], 'A', 'C')
    v2 = ('13', chrom_ref['13'][ref_id]['start'] + 10, 'A', 'C')
    with pytest.raises(AssertionError):
        variant_equal(v1, v2, ref_id)
    with pytest.raises(AssertionError):
        variant_equal(v2, v1, ref_id)
コード例 #3
0
def test_variant_equal_throws_above_reference():
    ref_id = chrom_ref['13'].keys()[0]
    start = chrom_ref['13'][ref_id]['start']
    v1 = ('13', start + reference_length + 2, 'A', 'C')
    v2 = ('13', start + 10, 'A', 'C')
    with pytest.raises(AssertionError):
        variant_equal(v1, v2, ref_id)
    with pytest.raises(AssertionError):
        variant_equal(v2, v1, ref_id)
コード例 #4
0
def test_variant_equal_throws_above_reference():
    ref_id = chrom_ref['13'].keys()[0]
    start = chrom_ref['13'][ref_id]['start']
    v1 = ('13', start + reference_length + 2, 'A', 'C')
    v2 = ('13', start + 10, 'A', 'C')
    with pytest.raises(AssertionError):
        variant_equal(v1, v2, ref_id)
    with pytest.raises(AssertionError):
        variant_equal(v2, v1, ref_id)
コード例 #5
0
def test_variant_equal_commutative(v1, v2, ref_id):
    "Comparing x, y should be the same as comparing y, x"
    (_, pos1, ref1, _) = v1
    (_, pos2, ref2, _) = v2
    assume(pos1 + len(ref1) <= reference_length)
    assume(pos2 + len(ref2) <= reference_length)

    v1 = add_start(v1, ref_id)
    v2 = add_start(v2, ref_id)
    assert variant_equal(v1, v2, ref_id) == variant_equal(v2, v1, ref_id)
コード例 #6
0
def test_variant_equal_commutative(v1, v2, ref_id):
    "Comparing x, y should be the same as comparing y, x"
    (_, pos1, ref1, _) = v1
    (_, pos2, ref2, _) = v2
    assume(pos1 + len(ref1) <= reference_length)
    assume(pos2 + len(ref2) <= reference_length)

    v1 = add_start(v1, ref_id)
    v2 = add_start(v2, ref_id)
    assert variant_equal(v1, v2, ref_id) == variant_equal(v2, v1, ref_id)
コード例 #7
0
def test_variant_equal_not_equiv(v1, v2, ref_id):
    (chrom1, pos1, reflen1, alt1) = v1
    (chrom2, pos2, reflen2, alt2) = v2
    assume(pos1 + reflen1 <= reference_length)
    assume(pos2 + reflen2 <= reference_length)
    assume(not alt1 == '' and reflen1 == 0)
    assume(not alt2 == '' and reflen2 == 0)

    refsequence1 = chrom_ref[chrom1][ref_id]["sequence"]
    refsequence2 = chrom_ref[chrom2][ref_id]["sequence"]
    v1 = inject_ref(refsequence1, v1)
    v2 = inject_ref(refsequence2, v2)

    eq1 = equiv_set(refsequence1, v1)
    eq2 = equiv_set(refsequence2, v2)

    if len(eq1.intersection(eq2)) == 0: # should test not-equal
        assert not variant_equal(add_start(v1, ref_id), add_start(v2, ref_id), ref_id)
    else:
        assert variant_equal(add_start(v1, ref_id), add_start(v2, ref_id), ref_id)
コード例 #8
0
def test_variant_equal_equiv(v, ref_id):
    (chrom, pos, reflen, alt) = v
    refsequence = chrom_ref[chrom][ref_id]["sequence"]
    assume(pos + reflen <= len(refsequence))
    v = inject_ref(refsequence, v)

    equivs = all_norm_equiv(refsequence, v)

    for veq in equivs:
        if is_in_bounds(veq):
            assert variant_equal(add_start(v, ref_id), add_start(veq, ref_id), ref_id)
コード例 #9
0
def test_variant_equal_equiv(v, ref_id):
    (chrom, pos, reflen, alt) = v
    refsequence = chrom_ref[chrom][ref_id]["sequence"]
    assume(pos + reflen <= len(refsequence))
    v = inject_ref(refsequence, v)

    equivs = all_norm_equiv(refsequence, v)

    for veq in equivs:
        if is_in_bounds(veq):
            assert variant_equal(add_start(v, ref_id), add_start(veq, ref_id),
                                 ref_id)
コード例 #10
0
def test_variant_equal_not_equiv(v1, v2, ref_id):
    (chrom1, pos1, reflen1, alt1) = v1
    (chrom2, pos2, reflen2, alt2) = v2
    assume(pos1 + reflen1 <= reference_length)
    assume(pos2 + reflen2 <= reference_length)
    assume(not alt1 == '' and reflen1 == 0)
    assume(not alt2 == '' and reflen2 == 0)

    refsequence1 = chrom_ref[chrom1][ref_id]["sequence"]
    refsequence2 = chrom_ref[chrom2][ref_id]["sequence"]
    v1 = inject_ref(refsequence1, v1)
    v2 = inject_ref(refsequence2, v2)

    eq1 = equiv_set(refsequence1, v1)
    eq2 = equiv_set(refsequence2, v2)

    if len(eq1.intersection(eq2)) == 0:  # should test not-equal
        assert not variant_equal(add_start(v1, ref_id), add_start(v2, ref_id),
                                 ref_id)
    else:
        assert variant_equal(add_start(v1, ref_id), add_start(v2, ref_id),
                             ref_id)
コード例 #11
0
def test_variant_equal_identity(v, ref_id):
    "A variant should be equal to itself"
    (_, pos, ref, _) = v
    assume(pos + len(ref) <= reference_length)
    v = add_start(v, ref_id)
    assert variant_equal(v, v, ref_id)
コード例 #12
0
    assume(not alt1 == '' and reflen1 == 0)
    assume(not alt2 == '' and reflen2 == 0)

    refsequence1 = chrom_ref[chrom1][ref_id]["sequence"]
    refsequence2 = chrom_ref[chrom2][ref_id]["sequence"]
    v1 = inject_ref(refsequence1, v1)
    v2 = inject_ref(refsequence2, v2)

    eq1 = equiv_set(refsequence1, v1)
    eq2 = equiv_set(refsequence2, v2)

    if len(eq1.intersection(eq2)) == 0:  # should test not-equal
        assert not variant_equal(add_start(v1, ref_id), add_start(v2, ref_id),
                                 ref_id)
    else:
        assert variant_equal(add_start(v1, ref_id), add_start(v2, ref_id),
                             ref_id)


# Do we need to explicitly test variations in surrounding reference length?
# The tests above only test random variants against normalized (minimum reference)
# variants.

if __name__ == "__main__":
    # To reproduce failure conditions, paste them in here and run as
    # python ./test_variant_merging.py
    #print variant_equal(v1 = ('17', 41100001, 'gcttccca', ''), v2 = ('17', 41100002, 'cttcccag', ''), version = 'hg38')
    print variant_equal(('13', 32800003, '', 'A'), ('13', 32800005, '', 'A'),
                        'hg19')
    pass
コード例 #13
0
def test_variant_equal_identity(v, ref_id):
    "A variant should be equal to itself"
    (_, pos, ref, _) = v
    assume(pos + len(ref) <= reference_length)
    v = add_start(v, ref_id)
    assert variant_equal(v, v, ref_id)
コード例 #14
0
    def test_add_variant_to_dict_merge_ignores_trailing_spaces(self):
        variant_dict = add_variant_to_dict(self.variant_dict, self.genomic_coordinate, self.values_to_add)
        merged = variant_dict[self.genomic_coordinate]
        self.assertEqual('c.4876_4877delAA', merged[8])

    def test_add_variant_to_dict_merge_adds_new_data_to_empty_fields(self):
        variant_dict = add_variant_to_dict(self.variant_dict, self.genomic_coordinate, self.values_to_add)
        merged = variant_dict[self.genomic_coordinate]
        self.assertEqual('5104delAA', merged[9])

    def test_append_exac_allele_frequencies_rounds_to_three_sig_figs(self):
        EXAC_VCF_FILENAME = os.path.join(os.path.dirname(__file__), 'test_files/ExAC_AF.vcf')
        for record in vcf.Reader(open(EXAC_VCF_FILENAME, 'r')):
            record = append_exac_allele_frequencies(record, new_record=None, i=None)
            for subpopulation in EXAC_SUBPOPULATIONS:
                val = record.INFO["AF_" + subpopulation]
                try:
                    float_val = float(val)
                    self.assertEqual(float_val, round_sigfigs(float(val), 3))
                except ValueError:
                    self.assertEqual(val, '-')


if __name__ == "__main__":
    # To reproduce failure conditions, paste them in here and run as
    # python ./test_variant_merging.py
    # print variant_equal(v1 = ('17', 41100001, 'gcttccca', ''), v2 = ('17', 41100002, 'cttcccag', ''), version = 'hg38')
    print variant_equal(('13', 32800003, '', 'A'), ('13', 32800005, '', 'A'), 'hg19')
    pass