Skip to content

Commit e48d410

Browse files
committed
update tests inline
1 parent 1307910 commit e48d410

File tree

2 files changed

+23
-21
lines changed

2 files changed

+23
-21
lines changed

scorpio/scripts/type_constellations.py

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ def parse_json_in(refseq, features_dict, variants_file, constellation_names=None
295295
variant_list.append(record)
296296

297297
if "rules" in json_dict:
298-
if type(json_dict["rules"]) == dict:
298+
if type(json_dict["rules"]) == dict and "default" in json_dict["rules"]:
299299
rules = json_dict["rules"]
300300
else:
301301
rules = {"default": json_dict["rules"]}
@@ -573,24 +573,24 @@ def var_follows_rules(call, rule):
573573
else:
574574
return call == rule_call
575575

576-
def counts_follow_rules(counts, rules):
576+
def counts_follow_rules(counts, rules, key):
577577
# rules allowed include "max_ref", "min_alt", "min_snp_alt"
578578
is_rule_follower = True
579579
notes = []
580-
for rule in rules:
580+
for rule in rules[key]:
581581
if ":" in rule:
582582
continue
583583
elif str(rule).startswith("min") or str(rule).startswith("max"):
584584
rule_parts = rule.split("_")
585585
if len(rule_parts) <= 1:
586586
continue
587587
elif len(rule_parts) == 2:
588-
if rule_parts[0] == "min" and counts[rule_parts[1]] < rules[rule]:
588+
if rule_parts[0] == "min" and counts[rule_parts[1]] < rules[key][rule]:
589589
is_rule_follower = False
590-
elif rule_parts[0] == "max" and counts[rule_parts[1]] > rules[rule]:
590+
elif rule_parts[0] == "max" and counts[rule_parts[1]] > rules[key][rule]:
591591
is_rule_follower = False
592592
else:
593-
counts["rules"] += 1
593+
counts["rules"][key] += 1
594594
elif len(rule_parts) == 3:
595595
part = None
596596
if rule_parts[1] in ["substitution", "snp"]:
@@ -599,16 +599,16 @@ def counts_follow_rules(counts, rules):
599599
part = "indel"
600600
if not part:
601601
is_rule_follower = False
602-
elif rule_parts[0] == "min" and counts[part][rule_parts[2]] < rules[rule]:
602+
elif rule_parts[0] == "min" and counts[part][rule_parts[2]] < rules[key][rule]:
603603
is_rule_follower = False
604-
notes.append("%s_%s_count=%i is less than %i" % (part, rule_parts[2], counts[part][rule_parts[2]], rules[rule]))
605-
elif rule_parts[0] == "max" and counts[part][rule_parts[2]] > rules[rule]:
604+
notes.append("%s_%s_count=%i is less than %i" % (part, rule_parts[2], counts[part][rule_parts[2]], rules[key][rule]))
605+
elif rule_parts[0] == "max" and counts[part][rule_parts[2]] > rules[key][rule]:
606606
is_rule_follower = False
607-
notes.append("%s_%s_count=%i is more than %i" % (part, rule_parts[2], counts[part][rule_parts[2]], rules[rule]))
607+
notes.append("%s_%s_count=%i is more than %i" % (part, rule_parts[2], counts[part][rule_parts[2]], rules[key][rule]))
608608
else:
609-
counts["rules"] += 1
609+
counts["rules"][key] += 1
610610
else:
611-
logging.warning("Warning: Ignoring rule %s:%s" % (rule, str(rules[rule])))
611+
logging.warning("Warning: Ignoring rule %s:%s" % (rule, str(rules[key][rule])))
612612
return is_rule_follower, ";".join(notes)
613613

614614
def count_and_classify(record_seq, variant_list, rules):
@@ -643,11 +643,13 @@ def count_and_classify(record_seq, variant_list, rules):
643643
if not is_rule_follower_dict[key]:
644644
continue
645645
else:
646-
call, note = counts_follow_rules(counts, rules[key])
646+
call, note = counts_follow_rules(counts, rules, key)
647647
if call:
648648
counts["rules"] = counts["rules"][key]
649649
call = key
650650
return counts, call, note
651+
counts["rules"] = counts["rules"]["default"]
652+
return counts, False, ""
651653

652654

653655
def generate_barcode(record_seq, variant_list, ref_char=None, ins_char="?", oth_char="X",constellation_count_dict=None):

scorpio/tests/type_constellations_test.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,9 @@ def test_parse_json_in():
147147
assert len([v for v in variant_list if v["type"] == "del"]) == 3
148148
assert len([v for v in variant_list if v["type"] == "aa"]) == 15
149149
assert name == "Lineage_X"
150-
assert rules["min_alt"] == 4
151-
assert rules["max_ref"] == 6
152-
assert rules["s:E484K"] == "alt"
150+
assert rules["default"]["min_alt"] == 4
151+
assert rules["default"]["max_ref"] == 6
152+
assert rules["default"]["s:E484K"] == "alt"
153153
assert mrca_lineage == "B.1.1.7"
154154
assert incompatible_lineages == "A|B.1.351"
155155

@@ -162,7 +162,7 @@ def test_parse_csv_in():
162162
assert len([v for v in variant_list if v["type"] == "del"]) == 3
163163
assert len([v for v in variant_list if v["type"] == "aa"]) == 15
164164
assert name == "lineage_X"
165-
assert rules["s:E484K"] == "alt"
165+
assert rules["default"]["s:E484K"] == "alt"
166166

167167

168168
def test_parse_textfile_in():
@@ -178,8 +178,8 @@ def test_parse_textfile_in():
178178
def test_parse_variants_in():
179179
in_files = ["%s/lineage_X.json" % data_dir, "%s/lineage_X.csv" % data_dir, "%s/lineage_X.txt" % data_dir]
180180
expect_names = ["Lineage_X", "lineage_X", "lineage_X"]
181-
rule_dict_json = {"min_alt": 4, "max_ref": 6, "s:E484K": "alt"}
182-
rule_dict_csv = {"s:E484K": "alt"}
181+
rule_dict_json = {"default": {"min_alt": 4, "max_ref": 6, "s:E484K": "alt"}}
182+
rule_dict_csv = {"default": {"s:E484K": "alt"}}
183183
rule_dict_txt = None
184184
expect_rules = [rule_dict_json, rule_dict_csv, rule_dict_txt]
185185

@@ -248,8 +248,8 @@ def test_count_and_classify():
248248
oth_string = "gaaattcgcccgta-gctcgcaatag"
249249
seqs = [Seq(ref_string), Seq(alt_string), Seq(alt_plus_string), Seq(oth_string)]
250250

251-
rules = {"min_alt": 1, "max_ref": 1, "snp2": "alt"}
252-
expect_classify = [False, False, True, False]
251+
rules = {"default": {"min_alt": 1, "max_ref": 1, "snp2": "alt"}}
252+
expect_classify = [False, False, "default", False]
253253
expect_counts = [{"ref": 5, "alt": 0, "ambig": 0, "oth": 1, "rules": 0, 'substitution': {'ref': 4, 'alt': 0, 'ambig': 0, 'oth': 0}, 'indel': {'ref': 1, 'alt': 0, 'ambig': 0, 'oth': 1}, "support": 0.0, "conflict": 0.8333},
254254
{"ref": 1, "alt": 4, "ambig": 0, "oth": 1, "rules": 0, 'substitution': {'ref': 1, 'alt': 3, 'ambig': 0, 'oth': 0}, 'indel': {'ref': 0, 'alt': 1, 'ambig': 0, 'oth': 1}, "support": 0.6667, "conflict": 0.1667},
255255
{"ref": 0, "alt": 5, "ambig": 0, "oth": 1, "rules": 3, 'substitution': {'ref': 0, 'alt': 4, 'ambig': 0, 'oth': 0}, 'indel': {'ref': 0, 'alt': 1, 'ambig': 0, 'oth': 1}, "support": 0.8333, "conflict": 0.0},

0 commit comments

Comments
 (0)