Skip to content

Commit fc2b074

Browse files
committed
Add iter_filters
1 parent 6ba2443 commit fc2b074

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

bio2zarr/vcf2zarr/icf.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -927,6 +927,22 @@ def iter_id(self, start, stop):
927927
else:
928928
yield None
929929

930+
def iter_filters(self, start, stop):
931+
source_field = self.fields["FILTERS"]
932+
lookup = {filt.id: index for index, filt in enumerate(self.metadata.filters)}
933+
934+
for filter_values in source_field.iter_values(start, stop):
935+
filters = np.zeros(len(self.metadata.filters), dtype=bool)
936+
if filter_values is not None:
937+
for filter_id in filter_values:
938+
try:
939+
filters[lookup[filter_id]] = True
940+
except KeyError:
941+
raise ValueError(
942+
f"Filter '{filter_id}' was not defined in the header."
943+
) from None
944+
yield filters
945+
930946
def iter_field(self, field_name, shape, start, stop):
931947
source_field = self.fields[field_name]
932948
sanitiser = source_field.sanitiser_factory(shape)

bio2zarr/writer.py

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -547,21 +547,12 @@ def encode_id_partition(self, partition_index):
547547
self.finalise_partition_array(partition_index, vid_mask)
548548

549549
def encode_filters_partition(self, partition_index):
550-
lookup = {filt.id: index for index, filt in enumerate(self.schema.filters)}
551550
var_filter = self.init_partition_array(partition_index, "variant_filter")
552551
partition = self.metadata.partitions[partition_index]
553552

554-
field = self.source.fields["FILTERS"]
555-
for value in field.iter_values(partition.start, partition.stop):
553+
for filter_values in self.source.iter_filters(partition.start, partition.stop):
556554
j = var_filter.next_buffer_row()
557-
var_filter.buff[j] = False
558-
for f in value:
559-
try:
560-
var_filter.buff[j, lookup[f]] = True
561-
except KeyError:
562-
raise ValueError(
563-
f"Filter '{f}' was not defined in the header."
564-
) from None
555+
var_filter.buff[j] = filter_values
565556

566557
self.finalise_partition_array(partition_index, var_filter)
567558

0 commit comments

Comments
 (0)