@@ -1040,14 +1040,19 @@ def iter_genotypes(self, shape, start, stop):
1040
1040
yield sanitised_genotypes , sanitised_phased
1041
1041
1042
1042
def iter_alleles_and_genotypes (self , start , stop , shape , num_alleles ):
1043
+ variant_lengths = self .fields ["rlen" ].iter_values (start , stop )
1043
1044
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 )
1046
1049
else :
1047
- yield from zip (
1050
+ for variant_length , alleles , (gt , phased ) in zip (
1051
+ variant_lengths ,
1048
1052
self .iter_alleles (start , stop , num_alleles ),
1049
1053
self .iter_genotypes (shape , start , stop ),
1050
- )
1054
+ ):
1055
+ yield vcz .VariantData (variant_length , alleles , gt , phased )
1051
1056
1052
1057
def generate_schema (
1053
1058
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",)):
1121
1126
compressor = compressor ,
1122
1127
)
1123
1128
1129
+ name_map = {field .full_name : field for field in self .metadata .fields }
1124
1130
array_specs = [
1125
1131
fixed_field_spec (
1126
1132
name = "variant_contig" ,
@@ -1136,6 +1142,11 @@ def fixed_field_spec(name, dtype, source=None, dimensions=("variants",)):
1136
1142
dtype = "O" ,
1137
1143
dimensions = ["variants" , "alleles" ],
1138
1144
),
1145
+ fixed_field_spec (
1146
+ name = "variant_length" ,
1147
+ dtype = name_map ["rlen" ].smallest_dtype (),
1148
+ dimensions = ["variants" ],
1149
+ ),
1139
1150
fixed_field_spec (
1140
1151
name = "variant_id" ,
1141
1152
dtype = "O" ,
@@ -1145,14 +1156,12 @@ def fixed_field_spec(name, dtype, source=None, dimensions=("variants",)):
1145
1156
dtype = "bool" ,
1146
1157
),
1147
1158
]
1148
- name_map = {field .full_name : field for field in self .metadata .fields }
1149
1159
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.
1151
1161
array_specs .extend (
1152
1162
[
1153
1163
spec_from_field (name_map ["QUAL" ], array_name = "variant_quality" ),
1154
1164
spec_from_field (name_map ["POS" ], array_name = "variant_position" ),
1155
- spec_from_field (name_map ["rlen" ], array_name = "variant_length" ),
1156
1165
]
1157
1166
)
1158
1167
array_specs .extend (
0 commit comments