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