docs: def array2tabledef(data, table_type='binary', write_bitcols=False):
      """
      Similar to descr2tabledef but if there are object columns a type
      and max length will be extracted and used for the tabledef
      """
      is_ascii = (table_type == 'ascii')
  
      if data.dtype.fields is None:
          raise ValueError("data must have fields")
      names = []
      names_nocase = {}
      formats = []
      dims = []
  
      descr = data.dtype.descr
      for d in descr:
          # these have the form '<f4' or '|S25', etc.  Extract the pure type
          npy_dtype = d[1][1:]
          if is_ascii:
              if npy_dtype in ['u1', 'i1']:
                  raise ValueError(
                      "1-byte integers are not supported for "
                      "ascii tables: '%s'" % npy_dtype)
              if npy_dtype in ['u2']:
                  raise ValueError(
                      "unsigned 2-byte integers are not supported for "
                      "ascii tables: '%s'" % npy_dtype)
  
          if npy_dtype[0] == 'O':
              # this will be a variable length column 1Pt(len) where t is the
              # type and len is max length.  Each element must be convertible to
              # the same type as the first
              name = d[0]
              form, dim = npy_obj2fits(data, name)
          elif npy_dtype[0] == "V":
              continue
          else:
              name, form, dim = _npy2fits(
                  d, table_type=table_type, write_bitcols=write_bitcols)
  
          if name == '':
              raise ValueError("field name is an empty string")
  
          """
          if is_ascii:
              if dim is not None:
                  raise ValueError("array columns are not supported for "
                                   "ascii tables")
          """
          name_nocase = name.upper()
          if name_nocase in names_nocase:
              raise ValueError(
                  "duplicate column name found: '%s'.  Note "
                  "FITS column names are not case sensitive" % name_nocase)
  
          names.append(name)
          names_nocase[name_nocase] = name_nocase
  
          formats.append(form)
          dims.append(dim)
  
      return names, formats, dims