def calculate_probabilities()

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))