Skip to main content

texasholdem

Pytest Status codecov License: MIT Documentation Status Pylint Status Code style: black

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.11 v0.11.0 Release Notes Patch Notes Documentation 30 March 2024

Current Roadmap
v1.0.0

Changelog v0.11.0

Other Changes

  • Upgraded to support python 3.12

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.

Metadata

Release files for texasholdem 0.11.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for texasholdem 0.11.0
File Size Uploaded Provenance Actions
texasholdem-0.11.0.tar.gz 40.7 kB Without provenance Details for texasholdem-0.11.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for texasholdem 0.11.0
File Interpreter ABI Platform Actions
texasholdem-0.11.0-py3-none-any.whl Python 3 none any Details for texasholdem-0.11.0-py3-none-any.whl

Total release size: 89.9 kB

Release files / texasholdem-0.11.0.tar.gz

Download URL texasholdem-0.11.0.tar.gz
Size 40.7 kB
Tags Source
SHA-256 checksum
How to use checksums
3795c2e24021e3a3cae22fa2ffa04f1da539d662005f02c5d72728dc92e55402
BLAKE2b-256 checksum
How to use checksums
489fa26464fd4fbd506eada17ec5b26556b4fec25d2143a67fad58af6762557f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.1.1 CPython/3.12.6

Release files / texasholdem-0.11.0-py3-none-any.whl

Download URL texasholdem-0.11.0-py3-none-any.whl
Size 49.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7ce5dfc2d52dbd38ef89fbf62c0a1122e1bef8c587d235b806e06c0a640458e4
BLAKE2b-256 checksum
How to use checksums
572856080504701745757aae444e6cf90f94816f445545b40ccdf14d0699ee70
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.1.1 CPython/3.12.6

Security for texasholdem 0.11.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.11.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page