Compute voting results to decide the winner(s) from the
        :attr:`votes`.

        The votes should have been made for the current
        :attr:`~creamas.vote.VoteOrganizer.candidates`.

        :param voting_method:
            A function which computes the results from the votes. Should
            accept at least three parameters: candidates, votes and number of
            vote winners. The function should return at least a list of vote
            winners. See, e.g. :func:`~creamas.vote.vote_mean` or
            :func:`~creamas.vote.vote_best`. Additional ``**kwargs`` are passed
            down to the voting method.

        :param list votes:
            A list of votes by which the voting is performed. Each vote should
            have the same set of artifacts in them. If ``None`` the results
            are computed for the current list of
            :attr:`~creamas.vote.VoteOrganizer.votes`.

        :param int winners:
            The number of vote winners

        :returns:
            list of :py:class:`~creamas.core.artifact.Artifact` objects,
            the winning artifacts. Some voting methods may also return a score
            associated with each winning artifact.

        :rtype: list

def compute_results(self, voting_method, votes=None, winners=1, **kwargs):
        """Compute voting results to decide the winner(s) from the
        :attr:`votes`.

        The votes should have been made for the current
        :attr:`~creamas.vote.VoteOrganizer.candidates`.

        :param voting_method:
            A function which computes the results from the votes. Should
            accept at least three parameters: candidates, votes and number of
            vote winners. The function should return at least a list of vote
            winners. See, e.g. :func:`~creamas.vote.vote_mean` or
            :func:`~creamas.vote.vote_best`. Additional ``**kwargs`` are passed
            down to the voting method.

        :param list votes:
            A list of votes by which the voting is performed. Each vote should
            have the same set of artifacts in them. If ``None`` the results
            are computed for the current list of
            :attr:`~creamas.vote.VoteOrganizer.votes`.

        :param int winners:
            The number of vote winners

        :returns:
            list of :py:class:`~creamas.core.artifact.Artifact` objects,
            the winning artifacts. Some voting methods may also return a score
            associated with each winning artifact.

        :rtype: list
        """
        if votes is None:
            votes = self.votes

        if len(votes) == 0:
            self._log(logging.DEBUG, "Could not compute results as there are "
                      "no votes!")
            return []

        self._log(logging.DEBUG, "Computing results from {} votes."
                  .format(len(votes)))
        return voting_method(self.candidates, votes, winners, **kwargs)