4
4
from pyparsing import ParseException
5
5
6
6
from pyvdrm .asi2 import ASI2 , AsiMutations , Score
7
+ from pyvdrm .drm import MissingPositionError
7
8
from pyvdrm .vcf import Mutation , MutationSet , VariantCalls
8
9
10
+ from pyvdrm .tests .test_vcf import add_mutations
11
+
9
12
10
13
# noinspection SqlNoDataSourceInspection,SqlDialectInspection
11
14
class TestRuleParser (unittest .TestCase ):
12
15
13
16
def test_stanford_ex1 (self ):
14
17
ASI2 ("151M OR 69i" )
15
18
16
- def test_stanford_ex2 (self ):
19
+ def test_atleast_true (self ):
20
+ rule = ASI2 ("SELECT ATLEAST 2 FROM (41L, 67N, 70R, 210W, 215F, 219Q)" )
21
+ self .assertTrue (rule (VariantCalls ('41L 67N 70d 210d 215d 219d' )))
22
+
23
+ def test_atleast_false (self ):
17
24
rule = ASI2 ("SELECT ATLEAST 2 FROM (41L, 67N, 70R, 210W, 215F, 219Q)" )
18
- m1 = MutationSet ('41L' )
19
- m2 = MutationSet ('67N' )
20
- m3 = MutationSet ('70N' )
21
- self .assertTrue (rule ([m1 , m2 ]))
22
- self .assertFalse (rule ([m1 , m3 ]))
25
+ self .assertFalse (rule (VariantCalls ('41L 67d 70d 210d 215d 219d' )))
26
+
27
+ def test_atleast_missing (self ):
28
+ rule = ASI2 ("SELECT ATLEAST 2 FROM (41L, 67N, 70R, 210W, 215F, 219Q)" )
29
+ with self .assertRaisesRegex (MissingPositionError ,
30
+ r'Missing position 70.' ):
31
+ rule (VariantCalls ('41L 67N' ))
23
32
24
33
def test_stanford_ex3 (self ):
25
34
ASI2 ("SELECT ATLEAST 2 AND NOTMORETHAN 2 FROM (41L, 67N, 70R, 210W, 215FY, 219QE)" )
@@ -53,50 +62,47 @@ def test_asi2_compat(self):
53
62
class TestRuleSemantics (unittest .TestCase ):
54
63
def test_score_from (self ):
55
64
rule = ASI2 ("SCORE FROM ( 100G => 10, 101D => 20 )" )
56
- self .assertEqual (rule (VariantCalls ("100G 102G " )), 10 )
65
+ self .assertEqual (rule (VariantCalls ("100G 101d " )), 10 )
57
66
58
67
def test_score_negate (self ):
59
68
rule = ASI2 ("SCORE FROM ( NOT 100G => 10, NOT 101SD => 20 )" )
60
- self .assertEqual (rule (VariantCalls ("100G 102G " )), 20 )
69
+ self .assertEqual (rule (VariantCalls ("100G 101d " )), 20 )
61
70
self .assertEqual (rule (VariantCalls ("100S 101S" )), 10 )
62
71
63
72
def test_score_residues (self ):
64
73
rule = ASI2 ("SCORE FROM ( 100G => 10, 101D => 20 )" )
65
74
expected_residue = repr ({Mutation ('S100G' )})
66
75
67
- result = rule .dtree (VariantCalls ("S100G R102G " ))
76
+ result = rule .dtree (VariantCalls ("S100G R101d " ))
68
77
69
78
self .assertEqual (expected_residue , repr (result .residues ))
70
79
71
80
def test_score_from_max (self ):
72
81
rule = ASI2 ("SCORE FROM (MAX (100G => 10, 101D => 20, 102D => 30))" )
73
- self .assertEqual (rule (VariantCalls ("100G 101D" )), 20 )
74
- self .assertEqual (rule (VariantCalls ("10G 11D " )), False )
82
+ self .assertEqual (rule (VariantCalls ("100G 101D 102d " )), 20 )
83
+ self .assertEqual (rule (VariantCalls ("100d 101d 102d " )), False )
75
84
76
85
def test_score_from_max_neg (self ):
77
86
rule = ASI2 ("SCORE FROM (MAX (100G => -10, 101D => -20, 102D => 30))" )
78
- self .assertEqual (rule (VariantCalls ("100G 101D" )), - 10 )
79
- self .assertEqual (rule (VariantCalls ("10G 11D" )), False )
87
+ self .assertEqual (rule (VariantCalls ("100G 101D 102d" )), - 10 )
80
88
81
89
def test_bool_and (self ):
82
90
rule = ASI2 ("1G AND (2T AND 7Y)" )
83
91
self .assertEqual (rule (VariantCalls ("2T 7Y 1G" )), True )
84
- self .assertEqual (rule (VariantCalls ("2T 3Y 1G" )), False )
92
+ self .assertEqual (rule (VariantCalls ("2T 7d 1G" )), False )
85
93
self .assertEqual (rule (VariantCalls ("7Y 1G 2T" )), True )
86
- self .assertEqual (rule ([]), False )
87
94
88
95
def test_bool_or (self ):
89
96
rule = ASI2 ("1G OR (2T OR 7Y)" )
90
- self .assertTrue (rule (VariantCalls ("2T" )))
91
- self .assertFalse (rule (VariantCalls ("3T" )))
92
- self .assertTrue (rule (VariantCalls ("1G" )))
93
- self .assertFalse (rule ([]))
97
+ self .assertTrue (rule (VariantCalls ("1d 2T 7d" )))
98
+ self .assertFalse (rule (VariantCalls ("1d 2d 7d" )))
99
+ self .assertTrue (rule (VariantCalls ("1G 2d 7d" )))
94
100
95
101
def test_select_from_atleast (self ):
96
102
rule = ASI2 ("SELECT ATLEAST 2 FROM (2T, 7Y, 3G)" )
97
- self .assertTrue (rule (VariantCalls ("2T 7Y 1G " )))
98
- self .assertFalse (rule (VariantCalls ("2T 4Y 5G " )))
99
- self .assertTrue (rule (VariantCalls ("3G 9Y 2T" )))
103
+ self .assertTrue (rule (VariantCalls ("2T 7Y 3d " )))
104
+ self .assertFalse (rule (VariantCalls ("2T 7d 3d " )))
105
+ self .assertTrue (rule (VariantCalls ("3G 7d 2T" )))
100
106
101
107
def test_score_from_exactly (self ):
102
108
rule = ASI2 ("SELECT EXACTLY 1 FROM (2T, 7Y)" )
@@ -155,10 +161,10 @@ def test_chained_and(self):
155
161
215FY) => 10), MAX ((41L AND 215ACDEILNSV) => 5, (41L AND 215FY) =>
156
162
15))
157
163
""" )
158
- self .assertEqual (rule (VariantCalls ("40F 41L 210W 215Y" )), 65 )
159
- self .assertEqual (rule (VariantCalls ("41L 210W 215F" )), 60 )
160
- self .assertEqual (rule (VariantCalls ("40F 210W 215Y" )), 25 )
161
- self .assertEqual (rule (VariantCalls ("40F 67G 215Y" )), 15 )
164
+ self .assertEqual (rule (add_mutations ("40F 41L 210W 215Y" )), 65 )
165
+ self .assertEqual (rule (add_mutations ("41L 210W 215F" )), 60 )
166
+ self .assertEqual (rule (add_mutations ("40F 210W 215Y" )), 25 )
167
+ self .assertEqual (rule (add_mutations ("40F 67G 215Y" )), 15 )
162
168
163
169
164
170
class TestAsiMutations (unittest .TestCase ):
@@ -169,11 +175,6 @@ def test_init_args(self):
169
175
self .assertEqual (expected_mutation_set , m .mutations )
170
176
self .assertEqual (expected_mutation_set .wildtype , m .mutations .wildtype )
171
177
172
- def test_init_none (self ):
173
- m = AsiMutations ()
174
-
175
- self .assertIsNone (m .mutations )
176
-
177
178
def test_repr (self ):
178
179
expected_repr = "AsiMutations(args='Q80KR')"
179
180
m = AsiMutations (args = 'Q80KR' )
@@ -182,14 +183,6 @@ def test_repr(self):
182
183
183
184
self .assertEqual (expected_repr , r )
184
185
185
- def test_repr_none (self ):
186
- expected_repr = "AsiMutations()"
187
- m = AsiMutations ()
188
-
189
- r = repr (m )
190
-
191
- self .assertEqual (expected_repr , r )
192
-
193
186
194
187
class TestScore (unittest .TestCase ):
195
188
def test_init (self ):
0 commit comments