docs: def _variants_dtype(fields, dtypes, arities, filter_ids, flatten_filter,
                      info_types):
      """Utility function to build a numpy dtype for a variants array,
      given user arguments and information available from VCF header."""
      dtype = list()
      for f, n, vcf_type in zip(fields, arities, info_types):
          if f == 'FILTER' and flatten_filter:
              # split FILTER into multiple boolean fields
              for flt in filter_ids:
                  nm = 'FILTER_' + flt
                  dtype.append((nm, 'b1'))
          elif f == 'FILTER' and not flatten_filter:
              # represent FILTER as a structured field
              t = [(flt, 'b1') for flt in filter_ids]
              dtype.append((f, t))
          else:
              if dtypes is not None and f in dtypes:
                  # user overrides default dtype
                  t = dtypes[f]
              elif f in config.STANDARD_VARIANT_FIELDS:
                  t = config.DEFAULT_VARIANT_DTYPE[f]
              elif f in config.DEFAULT_INFO_DTYPE:
                  # known INFO field
                  t = config.DEFAULT_INFO_DTYPE[f]
              else:
                  t = config.DEFAULT_TYPE_MAP[vcf_type]
              # deal with arity
              if n == 1:
                  dtype.append((f, t))
              else:
                  dtype.append((f, t, (n,)))
      return dtype