@@ -170,19 +170,29 @@ def from_field(
170170 array_name = prefix + vcf_field .name
171171
172172 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 :
179181 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 :
181190 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" )
186196 if dimensions [- 1 ] not in schema .dimensions :
187197 schema .dimensions [dimensions [- 1 ]] = VcfZarrDimension (
188198 size = vcf_field .max_number
0 commit comments