Spaces:
Sleeping
Sleeping
| from __future__ import annotations | |
| from typing import Any | |
| from persistentpoker_bench.betting import LegalActionSet | |
| from persistentpoker_bench.cards import cards_to_notation | |
| from persistentpoker_bench.game_state import HandState | |
| from persistentpoker_bench.pool import PersistentPool | |
| def serialize_legal_actions(legal_actions: LegalActionSet) -> dict[str, Any]: | |
| return { | |
| "can_fold": legal_actions.can_fold, | |
| "can_check": legal_actions.can_check, | |
| "can_call": legal_actions.can_call, | |
| "can_bet": legal_actions.can_bet, | |
| "can_raise": legal_actions.can_raise, | |
| "can_all_in": legal_actions.can_all_in, | |
| "call_amount": legal_actions.call_amount, | |
| "min_bet_to": legal_actions.min_bet_to, | |
| "min_raise_to": legal_actions.min_raise_to, | |
| "max_to": legal_actions.max_to, | |
| } | |
| def serialize_hand_state( | |
| hand_state: HandState, | |
| persistent_pool: PersistentPool, | |
| *, | |
| hand_id: str, | |
| acting_player_index: int, | |
| ) -> dict[str, Any]: | |
| return { | |
| "hand_id": hand_id, | |
| "street": hand_state.street.value, | |
| "button_index": hand_state.button_index, | |
| "actor_index": hand_state.actor_index, | |
| "pot_total": hand_state.pot_total, | |
| "current_bet": hand_state.current_bet, | |
| "last_full_raise_size": hand_state.last_full_raise_size, | |
| "community_cards": list(cards_to_notation(hand_state.community_cards)), | |
| "persistent_pool": list(persistent_pool.notation_snapshot()), | |
| "players": [ | |
| _serialize_player(hand_state, player_index, acting_player_index) | |
| for player_index in range(len(hand_state.players)) | |
| ], | |
| } | |
| def _serialize_player( | |
| hand_state: HandState, | |
| player_index: int, | |
| acting_player_index: int, | |
| ) -> dict[str, Any]: | |
| player = hand_state.players[player_index] | |
| payload = { | |
| "seat": player.seat, | |
| "name": player.name, | |
| "stack": player.stack, | |
| "eliminated": player.eliminated, | |
| "committed_street": player.committed_street, | |
| "committed_total": player.committed_total, | |
| "folded": player.folded, | |
| "all_in": player.all_in, | |
| "is_self": player_index == acting_player_index, | |
| } | |
| if player_index == acting_player_index and len(player.hole_cards) == 2: | |
| payload["hole_cards"] = list(cards_to_notation(player.hole_cards)) | |
| return payload | |