def calc_candidates(sudoku, row, col):
    """Return a set of candidates of the sudoku at (row, col).

    Args:
        sudoku (Sudoku): The :class:`Sudoku` instance for which the
                         candidates are calculated.
        row (int): The row of the field
        col (int): The column of the field.

    Returns:
        set: A set of candidates for the field at (row, col)
    """
    if sudoku[row, col]:
        return {sudoku[row, col]}
    candidates = set(sudoku.numbers)

    for (i, j) in sudoku.surrounding_of(row, col, include=False):
        candidates.discard(sudoku[i, j])

    return candidates