From 2e21431d3f6776361ac0c2d1e4801dab8c11fccf Mon Sep 17 00:00:00 2001 From: Tom White Date: Tue, 22 Apr 2025 11:29:11 +0100 Subject: [PATCH 1/4] Fix named VCF Number dimensions of size 1 --- bio2zarr/vcz.py | 4 +++- tests/test_vcf_examples.py | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/bio2zarr/vcz.py b/bio2zarr/vcz.py index 94022327..f82e231c 100644 --- a/bio2zarr/vcz.py +++ b/bio2zarr/vcz.py @@ -137,7 +137,9 @@ def from_field( if array_name is None: array_name = prefix + vcf_field.name # TODO make an option to add in the empty extra dimension - if vcf_field.summary.max_number > 1 or vcf_field.full_name == "FORMAT/LAA": + if ( + vcf_field.summary.max_number > 0 and vcf_field.vcf_number in ("R", "A", "G") + ) or (vcf_field.summary.max_number > 1 or vcf_field.full_name == "FORMAT/LAA"): shape.append(vcf_field.summary.max_number) chunks.append(vcf_field.summary.max_number) # TODO we should really be checking this to see if the named dimensions diff --git a/tests/test_vcf_examples.py b/tests/test_vcf_examples.py index fa333f36..eedf2f1a 100644 --- a/tests/test_vcf_examples.py +++ b/tests/test_vcf_examples.py @@ -997,6 +997,11 @@ def test_variant_ANN(self, ds): ] nt.assert_array_equal(ds.variant_ANN.values, variant_ANN) + def test_variant_MLEAF(self, ds): + # fixes https://github.com/sgkit-dev/bio2zarr/issues/353 + assert ds.variant_MLEAF.dims == ("variants", "alt_alleles") + assert ds.variant_MLEAF.shape == (21, 1) + class TestGeneratedFieldsExample: data_path = "tests/data/vcf/field_type_combos.vcf.gz" From 4edbecc94b501b36b1ce1f669a4c6990175ab113 Mon Sep 17 00:00:00 2001 From: Tom White Date: Tue, 22 Apr 2025 12:04:36 +0100 Subject: [PATCH 2/4] Preserve VCF fields defined in header that don't appear otherwise --- bio2zarr/icf.py | 8 ++++++++ bio2zarr/vcz.py | 12 +++++++----- tests/data/vcf/chr22.vcf.gz | Bin 0 -> 47617 bytes tests/data/vcf/chr22.vcf.gz.csi | Bin 0 -> 116 bytes tests/test_vcf_examples.py | 15 +++++++++++++++ 5 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 tests/data/vcf/chr22.vcf.gz create mode 100644 tests/data/vcf/chr22.vcf.gz.csi diff --git a/bio2zarr/icf.py b/bio2zarr/icf.py index 887b8533..9b7a2c1d 100644 --- a/bio2zarr/icf.py +++ b/bio2zarr/icf.py @@ -79,6 +79,14 @@ def full_name(self): return self.name return f"{self.category}/{self.name}" + @property + def max_number(self): + if self.vcf_number in ("R", "A", "G", "."): + return self.summary.max_number + else: + # use declared number if larger than max found + return max(self.summary.max_number, int(self.vcf_number)) + def smallest_dtype(self): """ Returns the smallest dtype suitable for this field based diff --git a/bio2zarr/vcz.py b/bio2zarr/vcz.py index f82e231c..42e8ff87 100644 --- a/bio2zarr/vcz.py +++ b/bio2zarr/vcz.py @@ -136,12 +136,14 @@ def from_field( dimensions.append("samples") if array_name is None: array_name = prefix + vcf_field.name + # TODO make an option to add in the empty extra dimension - if ( - vcf_field.summary.max_number > 0 and vcf_field.vcf_number in ("R", "A", "G") - ) or (vcf_field.summary.max_number > 1 or vcf_field.full_name == "FORMAT/LAA"): - shape.append(vcf_field.summary.max_number) - chunks.append(vcf_field.summary.max_number) + max_number = vcf_field.summary.max_number + if (max_number > 0 and vcf_field.vcf_number in ("R", "A", "G")) or ( + max_number > 1 or vcf_field.full_name == "FORMAT/LAA" + ): + shape.append(max_number) + chunks.append(max_number) # TODO we should really be checking this to see if the named dimensions # are actually correct. if vcf_field.vcf_number == "R": diff --git a/tests/data/vcf/chr22.vcf.gz b/tests/data/vcf/chr22.vcf.gz new file mode 100644 index 0000000000000000000000000000000000000000..0bd64cba274a33610b0f9f1c0860fbcea73dd58d GIT binary patch literal 47617 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 Date: Tue, 22 Apr 2025 16:46:40 +0100 Subject: [PATCH 3/4] Use correct max_number field --- bio2zarr/vcz.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bio2zarr/vcz.py b/bio2zarr/vcz.py index 42e8ff87..8d262c0c 100644 --- a/bio2zarr/vcz.py +++ b/bio2zarr/vcz.py @@ -138,7 +138,7 @@ def from_field( array_name = prefix + vcf_field.name # TODO make an option to add in the empty extra dimension - max_number = vcf_field.summary.max_number + max_number = vcf_field.max_number if (max_number > 0 and vcf_field.vcf_number in ("R", "A", "G")) or ( max_number > 1 or vcf_field.full_name == "FORMAT/LAA" ): From 0b0d8e524f2f729b9fa84cf29d55422503e3576b Mon Sep 17 00:00:00 2001 From: Tom White Date: Tue, 22 Apr 2025 17:28:17 +0100 Subject: [PATCH 4/4] Update du sizes in tests due to new test files --- tests/test_core.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_core.py b/tests/test_core.py index 2f4aa838..03f380f5 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -237,8 +237,8 @@ def test_examples(self, chunk_size, size, start, stop): # It works in CI on Linux, but it'll probably break at some point. # It's also necessary to update these numbers each time a new data # file gets added - ("tests/data", 4983044), - ("tests/data/vcf", 4970907), + ("tests/data", 5030777), + ("tests/data/vcf", 5018640), ("tests/data/vcf/sample.vcf.gz", 1089), ], )