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)
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)
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)
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)
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)
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)
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
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