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