@@ -1040,14 +1040,19 @@ def iter_genotypes(self, shape, start, stop):
10401040 yield sanitised_genotypes , sanitised_phased
10411041
10421042 def iter_alleles_and_genotypes (self , start , stop , shape , num_alleles ):
1043+ variant_lengths = self .fields ["rlen" ].iter_values (start , stop )
10431044 if self .gt_field is None or shape is None :
1044- for alleles in self .iter_alleles (start , stop , num_alleles ):
1045- yield alleles , (None , None )
1045+ for variant_length , alleles in zip (
1046+ variant_lengths , self .iter_alleles (start , stop , num_alleles )
1047+ ):
1048+ yield vcz .VariantData (variant_length , alleles , None , None )
10461049 else :
1047- yield from zip (
1050+ for variant_length , alleles , (gt , phased ) in zip (
1051+ variant_lengths ,
10481052 self .iter_alleles (start , stop , num_alleles ),
10491053 self .iter_genotypes (shape , start , stop ),
1050- )
1054+ ):
1055+ yield vcz .VariantData (variant_length , alleles , gt , phased )
10511056
10521057 def generate_schema (
10531058 self , variants_chunk_size = None , samples_chunk_size = None , local_alleles = None
@@ -1121,6 +1126,7 @@ def fixed_field_spec(name, dtype, source=None, dimensions=("variants",)):
11211126 compressor = compressor ,
11221127 )
11231128
1129+ name_map = {field .full_name : field for field in self .metadata .fields }
11241130 array_specs = [
11251131 fixed_field_spec (
11261132 name = "variant_contig" ,
@@ -1136,6 +1142,11 @@ def fixed_field_spec(name, dtype, source=None, dimensions=("variants",)):
11361142 dtype = "O" ,
11371143 dimensions = ["variants" , "alleles" ],
11381144 ),
1145+ fixed_field_spec (
1146+ name = "variant_length" ,
1147+ dtype = name_map ["rlen" ].smallest_dtype (),
1148+ dimensions = ["variants" ],
1149+ ),
11391150 fixed_field_spec (
11401151 name = "variant_id" ,
11411152 dtype = "O" ,
@@ -1145,14 +1156,12 @@ def fixed_field_spec(name, dtype, source=None, dimensions=("variants",)):
11451156 dtype = "bool" ,
11461157 ),
11471158 ]
1148- name_map = {field .full_name : field for field in self .metadata .fields }
11491159
1150- # Only three of the fixed fields have a direct one-to-one mapping.
1160+ # Only two of the fixed fields have a direct one-to-one mapping.
11511161 array_specs .extend (
11521162 [
11531163 spec_from_field (name_map ["QUAL" ], array_name = "variant_quality" ),
11541164 spec_from_field (name_map ["POS" ], array_name = "variant_position" ),
1155- spec_from_field (name_map ["rlen" ], array_name = "variant_length" ),
11561165 ]
11571166 )
11581167 array_specs .extend (
0 commit comments