docs: def moves_from_games(self, start_game, end_game, moves, shuffle,
                           column_family, column):
          """Dataset of samples and/or shuffled moves from game range.
  
          Args:
            n:  an integer indicating how many past games should be sourced.
            moves:  an integer indicating how many moves should be sampled
              from those N games.
            column_family:  name of the column family containing move examples.
            column:  name of the column containing move examples.
            shuffle:  if True, shuffle the selected move examples.
  
          Returns:
            A dataset containing no more than `moves` examples, sampled
              randomly from the last `n` games in the table.
          """
          start_row = ROW_PREFIX.format(start_game)
          end_row = ROW_PREFIX.format(end_game)
          # NOTE:  Choose a probability high enough to guarantee at least the
          # required number of moves, by using a slightly lower estimate
          # of the total moves, then trimming the result.
          total_moves = self.count_moves_in_game_range(start_game, end_game)
          probability = moves / (total_moves * 0.99)
          utils.dbg('Row range: %s - %s; total moves: %d; probability %.3f; moves %d' % (
              start_row, end_row, total_moves, probability, moves))
          ds = self.tf_table.parallel_scan_range(start_row, end_row,
                                                 probability=probability,
                                                 columns=[(column_family, column)])
          if shuffle:
              utils.dbg('Doing a complete shuffle of %d moves' % moves)
              ds = ds.shuffle(moves)
          ds = ds.take(moves)
          return ds