def split_MNP_variant(var, include_ref_calls=False): if var.type != variant.TYPE_MNP: yield var else: for index, (ref, alt) in enumerate(zip(var.ref, var.alt)): if ref != alt or include_ref_calls: yield variant.Variant(var.chrom, index + var.pos_from, ref, alt)
def test_variant_from_vcf(self): chrom = "blah" pos = 21 ref = "hell" alt = "heaven" self.assertEqual(variant_from_vcf(chrom, pos, ref, alt), variant.Variant(chrom, 20, ref, alt))
def variant_from_vcf(chrom_column, pos_column, ref_column, alt_column): return variant.Variant( chrom_column, from_vcf_str( pos_column, int) - 1, ref_column, alt_column)
def test_eq(self): reference = variant.Variant("1", 10, "ACGT", "ACC") self.assertEqual(reference, variant.Variant("1", 10, "ACGT", "ACC")) self.assertNotEqual(reference, variant.Variant("2", 10, "ACGT", "ACC")) self.assertNotEqual(reference, variant.Variant("1", 11, "ACGT", "ACC")) self.assertNotEqual(reference, variant.Variant("1", 10, "ACGC", "ACC")) self.assertNotEqual(reference, variant.Variant("1", 10, "ACGT", "ACT"))
def test_lt(self): reference = variant.Variant("1", 10, "ACGT", "ACC") self.assertFalse(reference < reference) self.assertGreaterEqual(reference, variant.Variant("1", 10, "ACGT", "ACC")) self.assertLess(reference, variant.Variant("2", 10, "ACGT", "ACC")) self.assertLess(reference, variant.Variant("1", 11, "ACGT", "ACC")) self.assertLess(reference, variant.Variant("1", 10, "CCGT", "ACC")) self.assertLess(reference, variant.Variant("1", 10, "ACGT", "ACT"))
def test_ne(self): """ Note: self.assert[Not]Equal() doesn't work in this case. """ reference = variant.Variant("1", 10, "ACGT", "ACC") self.assertFalse(reference != variant.Variant("1", 10, "ACGT", "ACC")) self.assertTrue(reference != variant.Variant("2", 10, "ACGT", "ACC")) self.assertTrue(reference != variant.Variant("1", 11, "ACGT", "ACC")) self.assertTrue(reference != variant.Variant("1", 10, "ACGC", "ACC")) self.assertTrue(reference != variant.Variant("1", 10, "ACGT", "ACT"))
def test_split_MNP_variant(self): chrom = "blah" pos = 21 ref = "hell" alt = "beli" var = variant.Variant(chrom, pos, ref, alt) self.assertEqual(list(split_MNP_variant(var)), [ variant.Variant(chrom, pos, ref[0], alt[0]), variant.Variant(chrom, pos + 3, ref[3], alt[3]), ]) self.assertEqual(list(split_MNP_variant(var, include_ref_calls=True)), [ variant.Variant(chrom, pos, ref[0], alt[0]), variant.Variant(chrom, pos + 1, ref[1], alt[1]), variant.Variant(chrom, pos + 2, ref[2], alt[2]), variant.Variant(chrom, pos + 3, ref[3], alt[3]), ])
def with_variant(self, chrom, pos_from, ref, alt): return self.with_record( self.generate_record_from_variant( variant.Variant(chrom, pos_from, ref, alt)))
def trim_variant(var): start_offset, ref, alt = trimmed_vcf_ref_alt(var.ref, var.alt) return variant.Variant(var.chrom, start_offset + var.pos_from, ref, alt)
def test_should_overlap_mnp_at_region_end(self): mnp = variant.Variant('1', 15, 'ACGT', 'GCGC') self.assertTrue(mnp.overlap(ChromInterval('1', 15, 16)))
def test_as_key(self): variant_obj = variant.Variant("1", 10, "ACGT", "ACC") expected_key = ("1", 10, 14, "ACGT", "ACC") self.assertEqual(hash(expected_key), hash(variant_obj), "Variant hash is broken.")
def test_should_not_overlap_mnp_after_region(self): mnp = variant.Variant('1', 15, 'ACGT', 'GCGC') self.assertFalse(mnp.overlap(ChromInterval('1', 19, 20)))
def test_should_overlap_deletion_at_region_end(self): deletion = variant.Variant('1', 15, 'AAAAA', 'A') self.assertTrue(deletion.overlap(ChromInterval('1', 15, 16)))
def test_should_not_overlap_insertion_before_region(self): ins = variant.Variant('1', 15, 'A', 'AAAAA') self.assertFalse(ins.overlap(ChromInterval('1', 16, 20)))
def test_should_overlap_insertion_at_region_end(self): ins = variant.Variant('1', 15, 'A', 'AAAAA') self.assertTrue(ins.overlap(ChromInterval('1', 15, 16)))
def test_should_not_overlap_deletion_after_region(self): deletion = variant.Variant('1', 15, 'AAAAA', 'A') self.assertFalse(deletion.overlap(ChromInterval('1', 20, 21)))
def test_variant_type(self): chrom = "1" pos_from = 100 self.assertEqual( variant.Variant(chrom, pos_from, 'T', '.').type, variant.TYPE_REF) self.assertEqual( variant.Variant(chrom, pos_from, 'C', 'C').type, variant.TYPE_REF) self.assertEqual( variant.Variant(chrom, pos_from, 'CTC', 'CTC').type, variant.TYPE_REF) self.assertEqual( variant.Variant(chrom, pos_from, 'T', 'TA').type, variant.TYPE_INS) self.assertEqual( variant.Variant(chrom, pos_from, 'CTG', 'CTAG').type, variant.TYPE_INS) self.assertEqual( variant.Variant(chrom, pos_from, 'TA', 'A').type, variant.TYPE_DEL) self.assertEqual( variant.Variant(chrom, pos_from, 'AT', 'A').type, variant.TYPE_DEL) self.assertEqual( variant.Variant(chrom, pos_from, 'T', 'A').type, variant.TYPE_SNP) self.assertEqual( variant.Variant(chrom, pos_from, 'TGT', 'AGT').type, variant.TYPE_SNP) self.assertEqual( variant.Variant(chrom, pos_from, 'TGTT', 'TGAT').type, variant.TYPE_SNP) self.assertEqual( variant.Variant(chrom, pos_from, 'AGTT', 'TGAT').type, variant.TYPE_MNP) self.assertEqual( variant.Variant(chrom, pos_from, 'AGTTATAT', 'TGATAAAT').type, variant.TYPE_MNP) self.assertEqual( variant.Variant(chrom, pos_from, 'A', '<INS:ME_ALU>').type, variant.TYPE_SYM)