code: def get_piles(allgenes):
      
      from jcvi.utils.range import Range, range_piles
  
      ranges = [Range(a.seqid, a.start, a.end, 0, i) \
                      for i, a in enumerate(allgenes)]
  
      for pile in range_piles(ranges):
          yield [allgenes[x] for x in pile]
docs: Before running uniq, we need to compute all the piles. The piles are a set
      of redundant features we want to get rid of. Input are a list of GffLines
      features. Output are list of list of features distinct "piles".