code: def fuse(args):
      
      from jcvi.algorithms.graph import BiGraph
  
      p = OptionParser(fuse.__doc__)
      opts, args = p.parse_args(args)
  
      if len(args) < 1:
          sys.exit(not p.print_help())
  
      bedfiles = [x for x in args if x.endswith(".bed")]
      anchorfiles = [x for x in args if x.endswith(".anchors")]
  
      # TODO: Use Markov clustering to sparsify the edges
      families = Grouper()
      for anchorfile in anchorfiles:
          af = AnchorFile(anchorfile)
          for a, b, block_id in af.iter_pairs():
              families.join(a, b)
  
      allowed = set(families.keys())
      logging.debug("Total families: {}, Gene members: {}"
                    .format(len(families), len(allowed)))
  
      # TODO: Use C++ implementation of BiGraph() when available
      # For now just serialize this to the disk
      G = BiGraph()
      for bedfile in bedfiles:
          bed = Bed(bedfile, include=allowed)
          #add_bed_to_graph(G, bed, families)
          print_edges(G, bed, families)
docs: %prog fuse *.bed *.anchors
  
      Fuse gene orders based on anchors file.