in evals/registry/data/poker_analysis/poker_analysis_sample_generator.py [0:0]
def calculate_probabilities(hole_cards_list: list, community_cards: list) -> list:
"""Calculate the winning and tie probabilities for each player.
Args:
hole_cards_list (list): A list of hole cards for each player.
community_cards (list): A list of community cards.
Returns:
list: A list of tuples with winning and tie probabilities for each player.
"""
deck = Deck()
evaluator = Evaluator()
# Remove cards already on the board and in the player's hand
for hole_cards in hole_cards_list:
for card in hole_cards + community_cards:
if card in deck.cards:
deck.cards.remove(card)
# Generate all possible combinations of the remaining community cards
remaining_community_cards = list(itertools.combinations(deck.cards, 5 - len(community_cards)))
num_combinations = len(remaining_community_cards)
num_wins = [0] * len(hole_cards_list)
num_ties = [0] * len(hole_cards_list)
for remaining_cards in remaining_community_cards:
full_community_cards = community_cards + list(remaining_cards)
scores = [
evaluator.evaluate(hole_cards + full_community_cards, [])
for hole_cards in hole_cards_list
]
best_score = min(scores)
winners = [i for i, score in enumerate(scores) if score == best_score]
if len(winners) == 1:
num_wins[winners[0]] += 1
else:
for winner in winners:
num_ties[winner] += 1
win_probabilities = [win / num_combinations for win in num_wins]
tie_probabilities = [tie / num_combinations for tie in num_ties]
return list(zip(win_probabilities, tie_probabilities))