Returns a list of all winning candidates when we use MCMC approximation to compute Bayesian
        utilities for an election profile.
        
        :ivar Profile profile: A Profile object that represents an election profile.
        :ivar str sampleFileName: An optional argument for the name of the input file containing 
            sample data. If a file name is given, this method will use the samples in the file 
            instead of generating samples itself.

def getWinners(self, profile, sampleFileName = None):
        """
        Returns a list of all winning candidates when we use MCMC approximation to compute Bayesian
        utilities for an election profile.
        
        :ivar Profile profile: A Profile object that represents an election profile.
        :ivar str sampleFileName: An optional argument for the name of the input file containing 
            sample data. If a file name is given, this method will use the samples in the file 
            instead of generating samples itself.
        """

        if sampleFileName != None:
            candScores = self.getCandScoresMapFromSamplesFile(profile, sampleFileName)
        else:
            candScores = self.getCandScoresMap(profile)

        # Check whether the winning candidate is the candidate that maximizes the score or 
        # minimizes it.
        if self.maximizeCandScore == True:
            bestScore = max(candScores.values())
        else:
            bestScore = min(candScores.values())
        
        # Create a list of all candidates with the winning score and return it.
        winners = []
        for cand in candScores.keys():
            if candScores[cand] == bestScore:
                winners.append(cand)
        return winners