Skip to content

Commit 7b76e22

Browse files
committed
Match Number="." properly
1 parent 051ebef commit 7b76e22

File tree

1 file changed

+32
-13
lines changed

1 file changed

+32
-13
lines changed

tests/utils.py

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def normalise_info_missingness(info_dict, key):
2929
return value
3030

3131

32-
def _get_headers(vcf, header_type):
32+
def _get_header_field_dicts(vcf, header_type):
3333
def to_dict(header_field):
3434
d = header_field.info(extra=True)
3535
del d[b"IDX"] # remove IDX since we don't care about ordering
@@ -47,25 +47,44 @@ def to_dict(header_field):
4747
}
4848

4949

50+
def _assert_header_field_dicts_equivalent(field_dicts1, field_dicts2):
51+
assert len(field_dicts1) == len(field_dicts2)
52+
53+
for id in field_dicts1.keys():
54+
assert id in field_dicts2
55+
field_dict1 = field_dicts1[id]
56+
field_dict2 = field_dicts2[id]
57+
58+
assert len(field_dict1) == len(field_dict2)
59+
# all fields should be the same, except Number="." which can match any value
60+
for k in field_dict1.keys():
61+
assert k in field_dict2
62+
v1 = field_dict1[k]
63+
v2 = field_dict2[k]
64+
if k == "Number" and (v1 == "." or v2 == "."):
65+
continue
66+
assert v1 == v2, f"Failed in field {id} with key {k}"
67+
68+
5069
def _assert_vcf_headers_equivalent(vcf1, vcf2):
5170
# Only compare INFO, FORMAT, FILTER, CONTIG fields, ignoring order
5271
# Other fields are ignored
5372

54-
info1 = _get_headers(vcf1, "INFO")
55-
info2 = _get_headers(vcf2, "INFO")
56-
assert info1 == info2
73+
info1 = _get_header_field_dicts(vcf1, "INFO")
74+
info2 = _get_header_field_dicts(vcf2, "INFO")
75+
_assert_header_field_dicts_equivalent(info1, info2)
5776

58-
format1 = _get_headers(vcf1, "FORMAT")
59-
format2 = _get_headers(vcf2, "FORMAT")
60-
assert format1 == format2
77+
format1 = _get_header_field_dicts(vcf1, "FORMAT")
78+
format2 = _get_header_field_dicts(vcf2, "FORMAT")
79+
_assert_header_field_dicts_equivalent(format1, format2)
6180

62-
filter1 = _get_headers(vcf1, "FILTER")
63-
filter2 = _get_headers(vcf2, "FILTER")
64-
assert filter1 == filter2
81+
filter1 = _get_header_field_dicts(vcf1, "FILTER")
82+
filter2 = _get_header_field_dicts(vcf2, "FILTER")
83+
_assert_header_field_dicts_equivalent(filter1, filter2)
6584

66-
contig1 = _get_headers(vcf1, "CONTIG")
67-
contig2 = _get_headers(vcf2, "CONTIG")
68-
assert contig1 == contig2
85+
contig1 = _get_header_field_dicts(vcf1, "CONTIG")
86+
contig2 = _get_header_field_dicts(vcf2, "CONTIG")
87+
_assert_header_field_dicts_equivalent(contig1, contig2)
6988

7089

7190
def assert_vcfs_close(f1, f2, *, rtol=1e-05, atol=1e-03):

0 commit comments

Comments
 (0)