Set a cell's value, with a series of safety checks

        :param i: The row number
        :type i: int
        :param j: The column number
        :type j: int
        :param value: The value to set
        :type value: int
        :raises: :py:class:`dlxsudoku.exceptions.SudokuHasNoSolutionError`

def set_cell(self, i, j, value):
        """Set a cell's value, with a series of safety checks

        :param i: The row number
        :type i: int
        :param j: The column number
        :type j: int
        :param value: The value to set
        :type value: int
        :raises: :py:class:`dlxsudoku.exceptions.SudokuHasNoSolutionError`

        """
        bool_tests = [
            value in self._possibles[i][j],
            value in self._poss_rows[i],
            value in self._poss_cols[j],
            value in self._poss_box[(i // self.order) * self.order + (j // self.order)],
            value not in self.row(i),
            value not in self.col(j),
            value not in self.box(i, j)
        ]

        if all(bool_tests):
            self[i][j] = value
        else:
            raise SudokuHasNoSolutionError("This value cannot be set here!")