docs: def read_games(glob, existing_paths):
      """Read all SGFs that match glob
  
      Parse each game and extract relevant metadata for eval games table.
      """
  
      globbed = sorted(gfile.Glob(glob))
  
      skipped = 0
      to_parse = []
      for sgf_name in tqdm(globbed):
          assert sgf_name.lower().endswith('.sgf'), sgf_name
          sgf_path = canonical_name(sgf_name)
          sgf_filename = os.path.basename(sgf_path)
  
          if sgf_path in existing_paths or sgf_filename in existing_paths:
              skipped += 1
              continue
  
          to_parse.append(sgf_name)
  
      game_data = []
      with multiprocessing.Pool() as pool:
          game_data = pool.map(process_game, tqdm(to_parse), 100)
  
      print("Read {} SGFs, {} new, {} existing".format(
          len(globbed), len(game_data), skipped))
      return game_data