code: def gff3_to_recarray(path, attributes=None, region=None, score_fill=-1,
                       phase_fill=-1, attributes_fill='.', tabix='tabix', dtype=None):
      
  
      # read records
      recs = list(iter_gff3(path, attributes=attributes, region=region,
                            score_fill=score_fill, phase_fill=phase_fill,
                            attributes_fill=attributes_fill, tabix=tabix))
  
      if not recs:
          return None
  
      # determine dtype
      if dtype is None:
          dtype = [('seqid', object),
                   ('source', object),
                   ('type', object),
                   ('start', int),
                   ('end', int),
                   ('score', float),
                   ('strand', object),
                   ('phase', int)]
          if attributes:
              for n in attributes:
                  dtype.append((n, object))
  
      a = np.rec.fromrecords(recs, dtype=dtype)
      return a
docs: Load data from a GFF3 into a NumPy recarray.
  
      Parameters
      ----------
      path : string
          Path to input file.
      attributes : list of strings, optional
          List of columns to extract from the "attributes" field.
      region : string, optional
          Genome region to extract. If given, file must be position
          sorted, bgzipped and tabix indexed. Tabix must also be installed
          and on the system path.
      score_fill : int, optional
          Value to use where score field has a missing value.
      phase_fill : int, optional
          Value to use where phase field has a missing value.
      attributes_fill : object or list of objects, optional
          Value(s) to use where attribute field(s) have a missing value.
      tabix : string, optional
          Tabix command.
      dtype : dtype, optional
          Override dtype.
  
      Returns
      -------
      np.recarray