def get_snps(coordinates: List[Tuple[str, int]], genotyper: Genotyper, get_counts=Callable[[str, int], Dict[str, int]]) -> List[SNP]: result: List[SNP] = [] for chromosome, position in coordinates: counts = get_counts(chromosome, position) genotype = genotyper.genotype(counts=counts) result.append(SNP(chromosome=chromosome, position=position, counts=counts, genotype=genotype)) return result
def setUp(self): self.snps = [ SNP(chromosome='chr1', position=1000, genotype='AA', counts={ 'A': 46, 'C': 1, 'G': 3, 'T': 0 }), SNP(chromosome='chr2', position=5000, genotype='GT', counts={ 'A': 2, 'C': 0, 'G': 18, 'T': 30 }) ]
def test_count_unknown_base_raises_exception(self): snp = SNP(chromosome='chr1', position=1000, genotype='AA', counts={'A': 95, 'C': 1, 'G': 3, 'T': 1}) with self.assertRaises(UnknownBaseError): snp.count('N')
def test_count(self): snp = SNP(chromosome='chr19', position=230, genotype='AC', counts={'A': 30, 'C': 22, 'G': 7, 'T': 9}) self.assertEqual(snp.count('A'), 30) self.assertEqual(snp.count('C'), 22) self.assertEqual(snp.count('G'), 7) self.assertEqual(snp.count('T'), 9)
def test_off_genotype_frequency_at_non_genotyped_site_raises_exception(self): snp = SNP(chromosome='chr1', position=1000, genotype=None, counts={'A': 1, 'C': 2, 'G': 0, 'T': 1}) with self.assertRaises(MissingGenotypeError): snp.off_genotype_frequency()
def test_off_genotype_frequency_heterozygote_site(self): snp = SNP(chromosome='chr2', position=5000, genotype='GT', counts={'A': 3, 'C': 2, 'G': 25, 'T': 20}) self.assertEqual(snp.off_genotype_frequency(), 0.1)
def test_off_genotype_frequency_homozygote_site(self): snp = SNP(chromosome='chr1', position=1000, genotype='AA', counts={'A': 95, 'C': 1, 'G': 3, 'T': 1}) self.assertEqual(snp.off_genotype_frequency(), 0.05)
def test_major_allele_frequency_at_uncovered_position(self): snp = SNP(chromosome='chr1', position=1000, genotype=None, counts={'A': 0, 'C': 0, 'G': 0, 'T': 0}) self.assertEqual(snp.major_allele_frequency(), 0.0)
def test_is_heterozygote(self): self.assertFalse(SNP(chromosome='chr1', position=1000, genotype='AA', counts={'A': 95, 'C': 1, 'G': 3, 'T': 1}).is_heterozygote()) self.assertTrue(SNP(chromosome='chr2', position=5000, genotype='GT', counts={'A': 0, 'C': 0, 'G': 35, 'T': 25}).is_heterozygote()) self.assertFalse(SNP(chromosome='chr1', position=1000, genotype=None, counts={'A': 0, 'C': 0, 'G': 0, 'T': 0}).is_heterozygote())
def setUp(self): self.snp = SNP(chromosome='chr1', position=1000, genotype='AA', counts={'A': 95, 'C': 1, 'G': 3, 'T': 1})
class TestSNP(unittest.TestCase): def setUp(self): self.snp = SNP(chromosome='chr1', position=1000, genotype='AA', counts={'A': 95, 'C': 1, 'G': 3, 'T': 1}) def test_create_snp(self): self.assertEqual(self.snp._chromosome, 'chr1') self.assertEqual(self.snp._position, 1000) self.assertEqual(self.snp._genotype, 'AA') self.assertEqual(self.snp._counts, {'A': 95, 'C': 1, 'G': 3, 'T': 1}) def test_get_genotype(self): self.assertEqual(self.snp.genotype, 'AA') def test_get_depth(self): self.assertEqual(self.snp.depth, 100) def test_is_homozygote(self): self.assertTrue(SNP(chromosome='chr1', position=1000, genotype='AA', counts={'A': 95, 'C': 1, 'G': 3, 'T': 1}).is_homozygote()) self.assertFalse(SNP(chromosome='chr2', position=5000, genotype='GT', counts={'A': 0, 'C': 0, 'G': 35, 'T': 25}).is_homozygote()) self.assertFalse(SNP(chromosome='chr1', position=1000, genotype=None, counts={'A': 0, 'C': 0, 'G': 0, 'T': 0}).is_homozygote()) def test_is_heterozygote(self): self.assertFalse(SNP(chromosome='chr1', position=1000, genotype='AA', counts={'A': 95, 'C': 1, 'G': 3, 'T': 1}).is_heterozygote()) self.assertTrue(SNP(chromosome='chr2', position=5000, genotype='GT', counts={'A': 0, 'C': 0, 'G': 35, 'T': 25}).is_heterozygote()) self.assertFalse(SNP(chromosome='chr1', position=1000, genotype=None, counts={'A': 0, 'C': 0, 'G': 0, 'T': 0}).is_heterozygote()) def test_minor_allele(self): self.assertEqual(self.snp.minor_allele, 'G') def test_major_allele(self): self.assertEqual(self.snp.major_allele, 'A') def test_minor_allele_frequency(self): self.assertEqual(self.snp.minor_allele_frequency(), 0.03) def test_minor_allele_frequency_at_uncovered_position(self): snp = SNP(chromosome='chr1', position=1000, genotype=None, counts={'A': 0, 'C': 0, 'G': 0, 'T': 0}) self.assertEqual(snp.minor_allele_frequency(), 0.0) def test_major_allele_frequency(self): self.assertEqual(self.snp.major_allele_frequency(), 0.95) def test_major_allele_frequency_at_uncovered_position(self): snp = SNP(chromosome='chr1', position=1000, genotype=None, counts={'A': 0, 'C': 0, 'G': 0, 'T': 0}) self.assertEqual(snp.major_allele_frequency(), 0.0) def test_off_genotype_frequency_homozygote_site(self): snp = SNP(chromosome='chr1', position=1000, genotype='AA', counts={'A': 95, 'C': 1, 'G': 3, 'T': 1}) self.assertEqual(snp.off_genotype_frequency(), 0.05) def test_off_genotype_frequency_heterozygote_site(self): snp = SNP(chromosome='chr2', position=5000, genotype='GT', counts={'A': 3, 'C': 2, 'G': 25, 'T': 20}) self.assertEqual(snp.off_genotype_frequency(), 0.1) def test_off_genotype_frequency_at_non_genotyped_site_raises_exception(self): snp = SNP(chromosome='chr1', position=1000, genotype=None, counts={'A': 1, 'C': 2, 'G': 0, 'T': 1}) with self.assertRaises(MissingGenotypeError): snp.off_genotype_frequency() def test_count(self): snp = SNP(chromosome='chr19', position=230, genotype='AC', counts={'A': 30, 'C': 22, 'G': 7, 'T': 9}) self.assertEqual(snp.count('A'), 30) self.assertEqual(snp.count('C'), 22) self.assertEqual(snp.count('G'), 7) self.assertEqual(snp.count('T'), 9) def test_count_unknown_base_raises_exception(self): snp = SNP(chromosome='chr1', position=1000, genotype='AA', counts={'A': 95, 'C': 1, 'G': 3, 'T': 1}) with self.assertRaises(UnknownBaseError): snp.count('N') def test_snp_string_representation(self): self.assertEqual(self.snp.__str__(), 'chr1:1000')