@@ -174,19 +174,29 @@ def from_field(
174
174
array_name = prefix + vcf_field .name
175
175
176
176
max_number = vcf_field .max_number
177
- if (max_number > 0 and vcf_field .vcf_number in ("R" , "A" , "G" )) or (
178
- max_number > 1 or vcf_field .full_name == "FORMAT/LAA"
179
- ):
180
- # TODO we should really be checking this to see if the named dimensions
181
- # are actually correct.
182
- if vcf_field .vcf_number == "R" :
177
+ if vcf_field .vcf_number == "R" :
178
+ max_alleles = schema .dimensions ["alleles" ].size
179
+ if max_number > max_alleles :
180
+ raise ValueError (
181
+ f"Max number of values { max_number } exceeds max alleles "
182
+ f"{ max_alleles } for { vcf_field .full_name } "
183
+ )
184
+ if max_alleles > 0 :
183
185
dimensions .append ("alleles" )
184
- elif vcf_field .vcf_number == "A" :
186
+ elif vcf_field .vcf_number == "A" :
187
+ max_alt_alleles = schema .dimensions ["alt_alleles" ].size
188
+ if max_number > max_alt_alleles :
189
+ raise ValueError (
190
+ f"Max number of values { max_number } exceeds max alt alleles "
191
+ f"{ max_alt_alleles } for { vcf_field .full_name } "
192
+ )
193
+ if max_alt_alleles > 0 :
185
194
dimensions .append ("alt_alleles" )
186
- elif vcf_field .vcf_number == "G" :
187
- dimensions .append ("genotypes" )
188
- else :
189
- dimensions .append (f"{ vcf_field .category } _{ vcf_field .name } _dim" )
195
+ elif max_number > 0 and vcf_field .vcf_number == "G" :
196
+ # TODO: need max_genotypes
197
+ dimensions .append ("genotypes" )
198
+ elif max_number > 1 or vcf_field .full_name == "FORMAT/LAA" :
199
+ dimensions .append (f"{ vcf_field .category } _{ vcf_field .name } _dim" )
190
200
if dimensions [- 1 ] not in schema .dimensions :
191
201
schema .dimensions [dimensions [- 1 ]] = VcfZarrDimension (
192
202
size = vcf_field .max_number
0 commit comments