예제 #1
0
    def test_in(self):
        ms = MutationSet('A10IL')

        self.assertIn(Mutation('A10I'), ms)
        self.assertIn(Mutation('A10L'), ms)
        self.assertIn(Mutation('10L'), ms)
        self.assertNotIn(Mutation('A10S'), ms)
예제 #2
0
    def test_init_wildtype_mismatch(self):
        wildtype = 'R'
        position = 1
        mutations = {Mutation('Q1A'), Mutation('Q1C')}

        with self.assertRaisesRegex(ValueError,
                                    r'Multiple wildtypes found: Q, R\.'):
            MutationSet(wildtype=wildtype, pos=position, mutations=mutations)
예제 #3
0
    def test_init_position_mismatch(self):
        wildtype = 'Q'
        position = 2
        mutations = {Mutation('Q1A'), Mutation('Q1C')}

        with self.assertRaisesRegex(ValueError,
                                    r'Multiple positions found: 1, 2\.'):
            MutationSet(wildtype=wildtype, pos=position, mutations=mutations)
예제 #4
0
    def test_equal_with_wildtype_mismatch(self):
        set1 = Mutation('Q1A')
        set2 = Mutation('R1A')

        expected_message = 'Wild type mismatch between Q1A and R1A'
        with self.assertRaisesRegex(ValueError, expected_message):
            if set1 == set2:
                pass
예제 #5
0
    def test_init_text(self):
        expected_wildtype = 'Q'
        expected_position = 1
        expected_mutations = {Mutation('Q1A'), Mutation('Q1C')}

        ms = MutationSet('Q1AC')

        self.assertEqual(expected_wildtype, ms.wildtype)
        self.assertEqual(expected_position, ms.pos)
        self.assertEqual(expected_mutations, ms.mutations)
예제 #6
0
    def test_init_mutations_some_without_wildtype(self):
        expected_wildtype = 'Q'
        expected_position = 1
        expected_mutations = {Mutation('Q1A'), Mutation('1C')}

        ms = MutationSet(mutations=expected_mutations)

        self.assertEqual(expected_wildtype, ms.wildtype)
        self.assertEqual(expected_position, ms.pos)
        self.assertEqual(expected_mutations, ms.mutations)
예제 #7
0
    def test_init_variants(self):
        expected_wildtype = 'Q'
        expected_position = 1
        expected_mutations = {Mutation('Q1A'), Mutation('Q1C')}

        ms = MutationSet(wildtype=expected_wildtype,
                         pos=expected_position,
                         variants='AC')

        self.assertEqual(expected_wildtype, ms.wildtype)
        self.assertEqual(expected_position, ms.pos)
        self.assertEqual(expected_mutations, ms.mutations)
예제 #8
0
파일: test_asi2.py 프로젝트: jeff-k/pyvdrm
    def test_repr(self):
        expected_repr = "Score(10, {Mutation('A23R')})"
        score = Score(10, {Mutation('A23R')})

        r = repr(score)

        self.assertEqual(expected_repr, r)
예제 #9
0
파일: test_asi2.py 프로젝트: jeff-k/pyvdrm
    def test_score_residues(self):
        rule = ASI2("SCORE FROM ( 100G => 10, 101D => 20 )")
        expected_residue = repr({Mutation('S100G')})

        result = rule.dtree(VariantCalls("S100G R101d"))

        self.assertEqual(expected_residue, repr(result.residues))
예제 #10
0
파일: test_asi2.py 프로젝트: jeff-k/pyvdrm
    def test_init(self):
        expected_value = 10
        expected_mutations = {Mutation('A23R')}

        score = Score(expected_value, expected_mutations)

        self.assertEqual(expected_value, score.score)
        self.assertEqual(expected_mutations, score.residues)
예제 #11
0
    def test_init_text(self):
        expected_wildtype = 'Q'
        expected_position = 20
        expected_variant = 'A'
        m = Mutation('Q20A')

        self.assertEqual(expected_wildtype, m.wildtype)
        self.assertEqual(expected_position, m.pos)
        self.assertEqual(expected_variant, m.variant)
예제 #12
0
    def test_no_wildtypes(self):
        expected_position = 10
        expected_mutations = {Mutation('10C')}

        ms = MutationSet(pos=expected_position, mutations=expected_mutations)

        self.assertIsNone(ms.wildtype)
        self.assertEqual(expected_position, ms.pos)
        self.assertEqual(expected_mutations, ms.mutations)
예제 #13
0
    def test_init_details(self):
        expected_wildtype = 'Q'
        expected_position = 20
        expected_variant = 'A'
        m = Mutation(wildtype=expected_wildtype,
                     pos=expected_position,
                     variant=expected_variant)

        self.assertEqual(expected_wildtype, m.wildtype)
        self.assertEqual(expected_position, m.pos)
        self.assertEqual(expected_variant, m.variant)
예제 #14
0
 def test_init_multiple_variants(self):
     expected_message = \
         r'Mutation text only allows one variant\.'
     with self.assertRaisesRegex(ValueError, expected_message):
         Mutation('Q20AE')
예제 #15
0
    def test_immutable(self):
        m = Mutation('Q1A')

        with self.assertRaises(AttributeError):
            m.pos = 2
예제 #16
0
 def test_ineq_aa(self):
     r1 = Mutation("20A")
     r2 = Mutation("20C")
     self.assertNotEqual(r2, r1)
예제 #17
0
 def test_eq(self):
     r1 = Mutation("20A")
     r2 = Mutation("20A")
     self.assertEqual(r2, r1)
예제 #18
0
 def test_no_wildtype(self):
     m = Mutation('20A')
     r = repr(m)
     self.assertEqual("Mutation('20A')", r)
     self.assertIsNone(m.wildtype)
예제 #19
0
 def test_str(self):
     m = Mutation('Q20A')
     s = str(m)
     self.assertEqual("Q20A", s)
예제 #20
0
    def test_init_multiple_positions(self):
        mutations = {Mutation('Q3A'), Mutation('Q2C')}

        with self.assertRaisesRegex(ValueError,
                                    r'Multiple positions found: 2, 3\.'):
            MutationSet(mutations=mutations)
예제 #21
0
    def test_init_multiple_wildtypes(self):
        mutations = {Mutation('R1A'), Mutation('Q1C')}

        with self.assertRaisesRegex(ValueError,
                                    r'Multiple wildtypes found: Q, R\.'):
            MutationSet(mutations=mutations)
예제 #22
0
 def test_init_bad_text(self):
     expected_message = \
         r'Mutation text expects wild type \(optional\), position, and one variant\.'
     with self.assertRaisesRegex(ValueError, expected_message):
         Mutation('!20A')
예제 #23
0
 def test_repr(self):
     m = Mutation('Q20A')
     r = repr(m)
     self.assertEqual("Mutation('Q20A')", r)
예제 #24
0
def write_resistance(aminos,
                     resistance_csv,
                     mutations_csv,
                     algorithms=None,
                     resistance_consensus_csv=None):
    """ Calculate resistance scores and write them to files.

    :param list[AminoList] aminos: region is the coordinate
        reference name that this gene region was mapped to, and prevalance is a
        float between 0.0 and 1.0
    :param resistance_csv: open file to write resistance calls to, grouped by
        genotype, region, drug_class
    :param mutations_csv: open file to write mutations to, grouped by genotype,
        drug_class
    :param dict algorithms: {region: AsiAlgorithm}
    :param resistance_consensus_csv: open file to write resistance consensus to
    """
    resistance_writer = DictWriter(
        resistance_csv,
        ['region',
         'drug_class',
         'drug',
         'drug_name',
         'level',
         'level_name',
         'score',
         'genotype',
         'seed',
         'coord_region',
         'version'],
        lineterminator=os.linesep)
    resistance_writer.writeheader()
    mutations_writer = DictWriter(mutations_csv,
                                  ['drug_class',
                                   'mutation',
                                   'prevalence',
                                   'genotype',
                                   'region',
                                   'seed',
                                   'coord_region',
                                   'version'],
                                  lineterminator=os.linesep)
    mutations_writer.writeheader()
    if resistance_consensus_csv is None:
        resistance_consensus_writer = None
    else:
        resistance_consensus_writer = create_consensus_writer(
            resistance_consensus_csv)
    if algorithms is None:
        algorithms = load_asi()
    for genotype, genotype_aminos in groupby(aminos, attrgetter('genotype')):
        region_results = []
        for amino_list in genotype_aminos:
            asi = algorithms.get(genotype)
            write_consensus(resistance_consensus_writer,
                            amino_list,
                            asi.alg_version)
            if asi is None:
                continue
            region = amino_list.region
            if region == 'INT':
                region = 'IN'
            result = interpret(asi, amino_list.aminos, region)
            region_results.append((region, amino_list, asi.alg_version, result))
        if all(drug_result.level == HcvResistanceLevels.FAIL.level
               for region, amino_seq, alg_version, result in region_results
               for drug_result in result.drugs):
            continue
        for region, amino_list, alg_version, result in region_results:
            amino_seq = amino_list.aminos
            reported_region = get_reported_region(region)
            for drug_result in result.drugs:
                resistance_writer.writerow(dict(region=reported_region,
                                                drug_class=drug_result.drug_class,
                                                drug=drug_result.code,
                                                drug_name=drug_result.name,
                                                level_name=drug_result.level_name,
                                                level=drug_result.level,
                                                score=drug_result.score,
                                                genotype=genotype,
                                                seed=amino_list.seed,
                                                coord_region=amino_list.region,
                                                version=alg_version))
            for drug_class, class_mutations in result.mutations.items():
                mutations = [Mutation(m) for m in class_mutations]
                mutations.sort()
                for mutation in mutations:
                    amino = mutation.variant
                    pos = mutation.pos
                    pos_aminos = amino_seq[pos-1]
                    prevalence = pos_aminos.get(amino, 0)
                    mutations_writer.writerow(dict(drug_class=drug_class,
                                                   mutation=mutation,
                                                   prevalence=prevalence,
                                                   genotype=genotype,
                                                   region=reported_region,
                                                   seed=amino_list.seed,
                                                   coord_region=amino_list.region,
                                                   version=alg_version))