-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtest_generate_mutant_protein_sequences.py
101 lines (86 loc) · 4.9 KB
/
test_generate_mutant_protein_sequences.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import unittest
from generate_mutant_protein_sequences import transvar_variant_to_substitution_dict, variant_sequence_from_subsitution_dicts
class GenerateMutantProteinTest(unittest.TestCase):
def test_generate_mutant_sequence(self):
sequence = 'MAVLQQQQ*'
# Test single substitution
variant = 'p.A2B'
expected = {'range': slice(1, 2), 'replace_by': 'B'}
self.assertEqual(transvar_variant_to_substitution_dict(variant, len(sequence)), expected)
expected_sequence = 'MBVLQQQQ*'
self.assertEqual(variant_sequence_from_subsitution_dicts(sequence, [expected]), expected_sequence)
# Test partial deletion
variant = 'p.A2_Q5delAVLQ'
expected = {'range': slice(1, 5), 'replace_by': ''}
self.assertEqual(transvar_variant_to_substitution_dict(variant, len(sequence)), expected)
expected_sequence = 'MQQQ*'
self.assertEqual(variant_sequence_from_subsitution_dicts(sequence, [expected]), expected_sequence)
# Test single deletion
variant = 'p.A2delA'
expected = {'range': slice(1, 2), 'replace_by': ''}
self.assertEqual(transvar_variant_to_substitution_dict(variant, len(sequence)), expected)
expected_sequence = 'MVLQQQQ*'
self.assertEqual(variant_sequence_from_subsitution_dicts(sequence, [expected]), expected_sequence)
# Test insertion
variant = 'p.A2_V3insCCCCC'
expected = {'range': slice(2, 2), 'replace_by': 'CCCCC'}
self.assertEqual(transvar_variant_to_substitution_dict(variant, len(sequence)), expected)
expected_sequence = 'MACCCCCVLQQQQ*'
self.assertEqual(variant_sequence_from_subsitution_dicts(sequence, [expected]), expected_sequence)
# Should give an error if the start and stop are not adjacent
variant = 'p.A2_L4insCCCCC'
try:
transvar_variant_to_substitution_dict(variant, len(sequence))
except ValueError:
pass
else:
raise AssertionError('Should have raised an error')
# Test duplication
variant = 'p.A2_L4dupAVL'
expected = {'range': slice(1, 1), 'replace_by': 'AVL'}
self.assertEqual(transvar_variant_to_substitution_dict(variant, len(sequence)), expected)
expected_sequence = 'MAVLAVLQQQQ*'
self.assertEqual(variant_sequence_from_subsitution_dicts(sequence, [expected]), expected_sequence)
# Should give an error if the duplicated sequence does not match the length
variant = 'p.A2_Q5dupAVL'
try:
transvar_variant_to_substitution_dict(variant, len(sequence))
except ValueError:
pass
else:
raise AssertionError('Should have raised an error')
# Test delins
variant = 'p.A2_Q5delinsCCC'
expected = {'range': slice(1, 5), 'replace_by': 'CCC'}
self.assertEqual(transvar_variant_to_substitution_dict(variant, len(sequence)), expected)
expected_sequence = 'MCCCQQQ*'
self.assertEqual(variant_sequence_from_subsitution_dicts(sequence, [expected]), expected_sequence)
# Test multiple substitutions
variants = ['p.A2B', 'p.V3C', 'p.V3_L4insCCCCC', 'p.Q5_Q6delinsTTTT', 'p.Q7_Q8delQQ']
variant_list = [transvar_variant_to_substitution_dict(variant, len(sequence)) for variant in variants]
expected = [{'range': slice(1, 2), 'replace_by': 'B'},
{'range': slice(2, 3), 'replace_by': 'C'},
{'range': slice(3, 3), 'replace_by': 'CCCCC'},
{'range': slice(4, 6), 'replace_by': 'TTTT'},
{'range': slice(6, 8), 'replace_by': ''}]
self.assertEqual(variant_list, expected)
sequence = 'MAVLQQQQ*'
expected_sequence = 'MBCCCCCCLTTTT*'
self.assertEqual(variant_sequence_from_subsitution_dicts(sequence, variant_list), expected_sequence)
# Test multiple insertions passed in either order
variants = ['p.A2_V3insCC', 'p.V3_L4insTT']
variant_list = [transvar_variant_to_substitution_dict(variant, len(sequence)) for variant in variants]
expected = [{'range': slice(2, 2), 'replace_by': 'CC'},
{'range': slice(3, 3), 'replace_by': 'TT'}]
self.assertEqual(variant_list, expected)
sequence = 'MAVLQQQQ*'
expected_sequence = 'MACCVTTLQQQQ*'
self.assertEqual(variant_sequence_from_subsitution_dicts(sequence, variant_list), expected_sequence)
self.assertEqual(variant_sequence_from_subsitution_dicts(sequence, variant_list[::-1]), expected_sequence)
# Test stop codon
variant = 'p.L4*'
sequence = 'MAVLQQQQ*'
expected = {'range': slice(3, 9), 'replace_by': '*'}
self.assertEqual(transvar_variant_to_substitution_dict(variant, len(sequence)), expected)
expected_sequence = 'MAV*'
self.assertEqual(variant_sequence_from_subsitution_dicts(sequence, [expected]), expected_sequence)