A texasholdem python package
Project description
texasholdem
A python package for Texas Hold 'Em Poker providing:
- Fast evaluation of hand strengths
- Export & import human-readable game history
- GUIs to view games and game history
- Simple & complex agents
- Compliance with World Series of Poker Official Rules
- And more
Version Name | Latest Tag | Release Notes | Patch Notes | Documentation | Release Date | End Support Date |
---|---|---|---|---|---|---|
0.10 | v0.10.0-alpha.1 | Release Notes | Patch Notes | Documentation | 19 June 2023 | |
0.9 | v0.9.0 | Release Notes | Patch Notes | Documentation | 14 March 2023 | |
0.8 | v0.8.1 | Release Notes | Patch Notes | Documentation | 6 November 2022 | 30 June 2023 |
0.7 | v0.7.3 | Release Notes | Patch Notes | Documentation | 16 April 2022 | 30 June 2023 |
Current Roadmap
v1.0.0
Changelog v0.9
Features
- New class
texasholdem.game.move.MoveIterator
which is a special collection of moves which includes attributes such asaction_types
andraise_range
. Also supports iteration and checking for membership with thein
operator. Use thesample()
method to sample from the collection. - New method
texasholdem.game.game.TexasHoldEm.get_available_moves()
which returns aMoveIterator
of the available moves for the current player.
Contributing
Want a new feature, found a bug, or have questions? Feel free to add to our issue board on Github! Open Issues.
We welcome any developer who enjoys the package enough to contribute! Please message me at evyn.machi@gmail.com if you want to be added as a contributor and check out the Developer's Guide.
Install
The package is available on pypi and can be installed with
pip install texasholdem
For the latest experimental version
pip install texasholdem --pre
Quickstart
Play a game from the command line and take turns for every player out of the box.
from texasholdem.game.game import TexasHoldEm
from texasholdem.gui.text_gui import TextGUI
game = TexasHoldEm(buyin=500, big_blind=5, small_blind=2, max_players=6)
gui = TextGUI(game=game)
while game.is_game_running():
game.start_hand()
while game.is_hand_running():
gui.run_step()
path = game.export_history('./pgns') # save history
gui.replay_history(path) # replay history
Overview
The following is a quick summary of what's in the package. Please see the docs for all the details.
Game Information
Get game information and take actions through intuitive attributes.
from texasholdem import TexasHoldEm, HandPhase, ActionType
game = TexasHoldEm(buyin=500,
big_blind=5,
small_blind=2,
max_players=9)
game.start_hand()
assert game.hand_phase == HandPhase.PREFLOP
assert HandPhase.PREFLOP.next_phase() == HandPhase.FLOP
assert game.chips_to_call(game.current_player) == game.big_blind
assert len(game.get_hand(game.current_player)) == 2
game.take_action(ActionType.CALL)
player_id = game.current_player
game.take_action(ActionType.RAISE, total=10)
assert game.player_bet_amount(player_id) == 10
assert game.chips_at_stake(player_id) == 20 # total amount in all pots the player is in
assert game.chips_to_call(game.current_player) == 10 - game.big_blind
Cards
The card module represents cards as 32-bit integers for simple and fast hand evaluations.
from texasholdem import Card
card = Card("Kd") # King of Diamonds
assert isinstance(card, int) # True
assert card.rank == 11 # 2nd highest rank (0-12)
assert card.pretty_string == "[ K ♦ ]"
Agents
The package also comes with basic agents including call_agent
and random_agent
from texasholdem import TexasHoldEm
from texasholdem.agents import random_agent, call_agent
game = TexasHoldEm(buyin=500, big_blind=5, small_blind=2)
game.start_hand()
while game.is_hand_running():
if game.current_player % 2 == 0:
game.take_action(*random_agent(game))
else:
game.take_action(*call_agent(game))
Game History
Export and import the history of hands to files.
from texasholdem import TexasHoldEm
from texasholdem.gui import TextGUI
game = TexasHoldEm(buyin=500, big_blind=5, small_blind=2)
game.start_hand()
while game.is_hand_running():
game.take_action(*some_strategy(game))
# export to file
game.export_history("./pgns/my_game.pgn")
# import and replay
gui = TextGUI()
gui.replay_history("./pgns/my_game.pgn")
PGN files also support single line and end of line comments starting with "#".
Poker Evaluator
The evaluator module returns the rank of the best 5-card hand from a list of 5 to 7 cards. The rank is a number from 1 (strongest) to 7462 (weakest).
from texasholdem import Card
from texasholdem.evaluator import evaluate, rank_to_string
assert evaluate(cards=[Card("Kd"), Card("5d")],
board=[Card("Qd"),
Card("6d"),
Card("5s"),
Card("2d"),
Card("5h")]) == 927
assert rank_to_string(927) == "Flush, King High"
GUIs
The GUI package currently comes with a text-based GUI to play games from the command line. Coming later will be web-app based GUIs.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file texasholdem-0.10a1.tar.gz
.
File metadata
- Download URL: texasholdem-0.10a1.tar.gz
- Upload date:
- Size: 41.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.17
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 41036bdc99de323cdc858e4167edb3e1ebe52ada451142ca11e278042b880d7e |
|
MD5 | 042e3101e409f9e9719c58c634d70ef5 |
|
BLAKE2b-256 | 738cf38bb764965f5dea28433e4fb605b3d15c019284f334448badd967da4802 |
Provenance
File details
Details for the file texasholdem-0.10a1-py3-none-any.whl
.
File metadata
- Download URL: texasholdem-0.10a1-py3-none-any.whl
- Upload date:
- Size: 49.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.17
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6a62bcbcd8c23f9a64e717fbd3869ef1215f307e5eab8658b344959c791af3ff |
|
MD5 | 8ef471c6d16554d0f2c8c102cb37126b |
|
BLAKE2b-256 | c8b2a29317bcf6acf3bab64040c1264ca72c27ad512219a635826c6c37dfc6a6 |