Latest commit

History

60 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

PokerPy

A python module writen in C++ for caculating Texas Hold'em poker odds in under a second. The union between python and C++ is done with pybind11

Installation

To install this module use the following command.

pip install git+https://github.com/glpcc/PokerPy

Use Cases

In the test folder are some use cases of possibilities with this module

Documentation

Card Class

classCard:
def__init__(self, card:str) ->None: ...
@propertydefvalue(self) ->str: ...
@propertydefcolor(self) ->str: ...

The Card class is used to represent a poker card, for the creation of a class you must pass a string with the form KD In which the first letter/s represent the value of the card i.e from 2 to A.Then the second letter represents the color of the card it can be passed as D-H-C-S or using the unicode characters ♣,♦,♥,♠.

Internally Card are stored as a struct with two int values, not accesible from the python interface.

Warning

At the time no checks for valid values of color and value are done so it is left to the user responsability. With undefined behaviour if done incorrectly.

Hand Class

classHand:
def__init__(self, hand_type: str, Cards: list[Card]) ->None: ...
@propertydefhand_type(self) ->str: ...
@propertydefCards(self) ->list[Card]: ...

This is a class to represent a poker Hand with a list of 5 cards representing the 5 chosen cards of the Hand and the Hand_type property, a string representing the type of the Hand. The value of the hand_type can be one of the following,in order of value.

Royal Flush
Straight Flush
Poker
Full House
Flush
Straight
Triples
Double Pairs
Pairs
High Card

It is not recommended to create Hand Classes manually unless you want to calculate a specific Hand Heuristic. It should be mainly used as the return type of the get_best_hand function.

Warning

At the time no checks for valid values of hand_type or the number of hands are done so it is left to the user responsability. With undefined behaviour if done incorrectly.

Utility Functions

get_best_hand

defget_best_hand(cards: list[Card]) ->Hand: ...

It gets a list of 7 cards and returns the best possible Hand as a hand_type.

Internally it sorts the cards and perform different checks for different types of hands on a single for loop for performance. It is internally used in the calculate_hand_frequencies.

Warning

At the time it isn't checked if the correct number of cards is supplied or if there is any repeated cards. Any thing outside 7 valid,non repeated cards is undefined behaviour.

calculate_hand_frequency

defcalculate_hand_frequency(cards: list[list[Card]]) ->list[dict[str,int]]: ...

Function that gets a list of players cards, and returns a list with all the hands frequencies for each player, taking into account the other players hands. It also calculates the win and draw frequency of each player, this is shown as the keys "Win" and "Draw" in each players dictionaries.

It is done by iterating for all the possibe combinations of cards and calculating the best hand.

Warning

The number of cards per player supplied must be between 2 and 6.And all players should have the same cards. However different players can repeat cards, for example the fold should be shared upon all players. Anything outside these bounds is UNDEFINED BEHAVIOUR.

nice_print_frequencies

defnice_print_frequencies(frecs: list[dict[str,int]]) ->None: ...

Function that gets a the frequencies of the calculate_hand_frequency function and prints them in a nice table format.

calculate_hand_heuristic

defcalculate_hand_heuristic(hand: Hand) ->int: ...

Function that gets a hand and uses bitshifting to calculate a hand value efficienly. It ensures that if a hand is better than another in texas hold'em, this function returns a larger int for the better hand.

This is used internally in the calculate_hand_frequency function to calculate the win,draw chance of every possible combination of cards.

Limitations

Supports up to 10 players, and might run slower than a second in old hardware.

Contributing

Any performance increase or bugfix will be gladly welcomed.

About

Texas Hold'em Poker Probability Calculator in Python

Topics

Resources

Stars

55 stars

Watchers

1 watching

Forks

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

60 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

PokerPy

A python module writen in C++ for caculating Texas Hold'em poker odds in under a second. The union between python and C++ is done with pybind11

Installation

To install this module use the following command.

pip install git+https://github.com/glpcc/PokerPy

Use Cases

In the test folder are some use cases of possibilities with this module

Documentation

Card Class

classCard:
def__init__(self, card:str) ->None: ...
@propertydefvalue(self) ->str: ...
@propertydefcolor(self) ->str: ...

The Card class is used to represent a poker card, for the creation of a class you must pass a string with the form KD In which the first letter/s represent the value of the card i.e from 2 to A.Then the second letter represents the color of the card it can be passed as D-H-C-S or using the unicode characters ♣,♦,♥,♠.

Internally Card are stored as a struct with two int values, not accesible from the python interface.

Warning

At the time no checks for valid values of color and value are done so it is left to the user responsability. With undefined behaviour if done incorrectly.

Hand Class

classHand:
def__init__(self, hand_type: str, Cards: list[Card]) ->None: ...
@propertydefhand_type(self) ->str: ...
@propertydefCards(self) ->list[Card]: ...

This is a class to represent a poker Hand with a list of 5 cards representing the 5 chosen cards of the Hand and the Hand_type property, a string representing the type of the Hand. The value of the hand_type can be one of the following,in order of value.

Royal Flush
Straight Flush
Poker
Full House
Flush
Straight
Triples
Double Pairs
Pairs
High Card

It is not recommended to create Hand Classes manually unless you want to calculate a specific Hand Heuristic. It should be mainly used as the return type of the get_best_hand function.

Warning

At the time no checks for valid values of hand_type or the number of hands are done so it is left to the user responsability. With undefined behaviour if done incorrectly.

Utility Functions

get_best_hand

defget_best_hand(cards: list[Card]) ->Hand: ...

It gets a list of 7 cards and returns the best possible Hand as a hand_type.

Internally it sorts the cards and perform different checks for different types of hands on a single for loop for performance. It is internally used in the calculate_hand_frequencies.

Warning

At the time it isn't checked if the correct number of cards is supplied or if there is any repeated cards. Any thing outside 7 valid,non repeated cards is undefined behaviour.

calculate_hand_frequency

defcalculate_hand_frequency(cards: list[list[Card]]) ->list[dict[str,int]]: ...

Function that gets a list of players cards, and returns a list with all the hands frequencies for each player, taking into account the other players hands. It also calculates the win and draw frequency of each player, this is shown as the keys "Win" and "Draw" in each players dictionaries.

It is done by iterating for all the possibe combinations of cards and calculating the best hand.

Warning

The number of cards per player supplied must be between 2 and 6.And all players should have the same cards. However different players can repeat cards, for example the fold should be shared upon all players. Anything outside these bounds is UNDEFINED BEHAVIOUR.

nice_print_frequencies

defnice_print_frequencies(frecs: list[dict[str,int]]) ->None: ...

Function that gets a the frequencies of the calculate_hand_frequency function and prints them in a nice table format.

calculate_hand_heuristic

defcalculate_hand_heuristic(hand: Hand) ->int: ...

Function that gets a hand and uses bitshifting to calculate a hand value efficienly. It ensures that if a hand is better than another in texas hold'em, this function returns a larger int for the better hand.

This is used internally in the calculate_hand_frequency function to calculate the win,draw chance of every possible combination of cards.

Limitations

Supports up to 10 players, and might run slower than a second in old hardware.

Contributing

Any performance increase or bugfix will be gladly welcomed.

About

Texas Hold'em Poker Probability Calculator in Python

Topics

Resources

Stars

55 stars

Watchers

1 watching

Forks

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

60 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

PokerPy

A python module writen in C++ for caculating Texas Hold'em poker odds in under a second. The union between python and C++ is done with pybind11

Installation

To install this module use the following command.

pip install git+https://github.com/glpcc/PokerPy

Use Cases

In the test folder are some use cases of possibilities with this module

Documentation

Card Class

classCard:
def__init__(self, card:str) ->None: ...
@propertydefvalue(self) ->str: ...
@propertydefcolor(self) ->str: ...

The Card class is used to represent a poker card, for the creation of a class you must pass a string with the form KD In which the first letter/s represent the value of the card i.e from 2 to A.Then the second letter represents the color of the card it can be passed as D-H-C-S or using the unicode characters ♣,♦,♥,♠.

Internally Card are stored as a struct with two int values, not accesible from the python interface.

Warning

At the time no checks for valid values of color and value are done so it is left to the user responsability. With undefined behaviour if done incorrectly.

Hand Class

classHand:
def__init__(self, hand_type: str, Cards: list[Card]) ->None: ...
@propertydefhand_type(self) ->str: ...
@propertydefCards(self) ->list[Card]: ...

This is a class to represent a poker Hand with a list of 5 cards representing the 5 chosen cards of the Hand and the Hand_type property, a string representing the type of the Hand. The value of the hand_type can be one of the following,in order of value.

Royal Flush
Straight Flush
Poker
Full House
Flush
Straight
Triples
Double Pairs
Pairs
High Card

It is not recommended to create Hand Classes manually unless you want to calculate a specific Hand Heuristic. It should be mainly used as the return type of the get_best_hand function.

Warning

At the time no checks for valid values of hand_type or the number of hands are done so it is left to the user responsability. With undefined behaviour if done incorrectly.

Utility Functions

get_best_hand

defget_best_hand(cards: list[Card]) ->Hand: ...

It gets a list of 7 cards and returns the best possible Hand as a hand_type.

Internally it sorts the cards and perform different checks for different types of hands on a single for loop for performance. It is internally used in the calculate_hand_frequencies.

Warning

At the time it isn't checked if the correct number of cards is supplied or if there is any repeated cards. Any thing outside 7 valid,non repeated cards is undefined behaviour.

calculate_hand_frequency

defcalculate_hand_frequency(cards: list[list[Card]]) ->list[dict[str,int]]: ...

Function that gets a list of players cards, and returns a list with all the hands frequencies for each player, taking into account the other players hands. It also calculates the win and draw frequency of each player, this is shown as the keys "Win" and "Draw" in each players dictionaries.

It is done by iterating for all the possibe combinations of cards and calculating the best hand.

Warning

The number of cards per player supplied must be between 2 and 6.And all players should have the same cards. However different players can repeat cards, for example the fold should be shared upon all players. Anything outside these bounds is UNDEFINED BEHAVIOUR.

nice_print_frequencies

defnice_print_frequencies(frecs: list[dict[str,int]]) ->None: ...

Function that gets a the frequencies of the calculate_hand_frequency function and prints them in a nice table format.

calculate_hand_heuristic

defcalculate_hand_heuristic(hand: Hand) ->int: ...

Function that gets a hand and uses bitshifting to calculate a hand value efficienly. It ensures that if a hand is better than another in texas hold'em, this function returns a larger int for the better hand.

This is used internally in the calculate_hand_frequency function to calculate the win,draw chance of every possible combination of cards.

Limitations

Supports up to 10 players, and might run slower than a second in old hardware.

Contributing

Any performance increase or bugfix will be gladly welcomed.

About

Texas Hold'em Poker Probability Calculator in Python

Topics

Resources

Stars

55 stars

Watchers

1 watching

Forks

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

60 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

PokerPy

A python module writen in C++ for caculating Texas Hold'em poker odds in under a second. The union between python and C++ is done with pybind11

Installation

To install this module use the following command.

pip install git+https://github.com/glpcc/PokerPy

Use Cases

In the test folder are some use cases of possibilities with this module

Documentation

Card Class

classCard:
def__init__(self, card:str) ->None: ...
@propertydefvalue(self) ->str: ...
@propertydefcolor(self) ->str: ...

The Card class is used to represent a poker card, for the creation of a class you must pass a string with the form KD In which the first letter/s represent the value of the card i.e from 2 to A.Then the second letter represents the color of the card it can be passed as D-H-C-S or using the unicode characters ♣,♦,♥,♠.

Internally Card are stored as a struct with two int values, not accesible from the python interface.

Warning

At the time no checks for valid values of color and value are done so it is left to the user responsability. With undefined behaviour if done incorrectly.

Hand Class

classHand:
def__init__(self, hand_type: str, Cards: list[Card]) ->None: ...
@propertydefhand_type(self) ->str: ...
@propertydefCards(self) ->list[Card]: ...

This is a class to represent a poker Hand with a list of 5 cards representing the 5 chosen cards of the Hand and the Hand_type property, a string representing the type of the Hand. The value of the hand_type can be one of the following,in order of value.

Royal Flush
Straight Flush
Poker
Full House
Flush
Straight
Triples
Double Pairs
Pairs
High Card

It is not recommended to create Hand Classes manually unless you want to calculate a specific Hand Heuristic. It should be mainly used as the return type of the get_best_hand function.

Warning

At the time no checks for valid values of hand_type or the number of hands are done so it is left to the user responsability. With undefined behaviour if done incorrectly.

Utility Functions

get_best_hand

defget_best_hand(cards: list[Card]) ->Hand: ...

It gets a list of 7 cards and returns the best possible Hand as a hand_type.

Internally it sorts the cards and perform different checks for different types of hands on a single for loop for performance. It is internally used in the calculate_hand_frequencies.

Warning

At the time it isn't checked if the correct number of cards is supplied or if there is any repeated cards. Any thing outside 7 valid,non repeated cards is undefined behaviour.

calculate_hand_frequency

defcalculate_hand_frequency(cards: list[list[Card]]) ->list[dict[str,int]]: ...

Function that gets a list of players cards, and returns a list with all the hands frequencies for each player, taking into account the other players hands. It also calculates the win and draw frequency of each player, this is shown as the keys "Win" and "Draw" in each players dictionaries.

It is done by iterating for all the possibe combinations of cards and calculating the best hand.

Warning

The number of cards per player supplied must be between 2 and 6.And all players should have the same cards. However different players can repeat cards, for example the fold should be shared upon all players. Anything outside these bounds is UNDEFINED BEHAVIOUR.

nice_print_frequencies

defnice_print_frequencies(frecs: list[dict[str,int]]) ->None: ...

Function that gets a the frequencies of the calculate_hand_frequency function and prints them in a nice table format.

calculate_hand_heuristic

defcalculate_hand_heuristic(hand: Hand) ->int: ...

Function that gets a hand and uses bitshifting to calculate a hand value efficienly. It ensures that if a hand is better than another in texas hold'em, this function returns a larger int for the better hand.

This is used internally in the calculate_hand_frequency function to calculate the win,draw chance of every possible combination of cards.

Limitations

Supports up to 10 players, and might run slower than a second in old hardware.

Contributing

Any performance increase or bugfix will be gladly welcomed.

About

Texas Hold'em Poker Probability Calculator in Python

Topics

Resources

Stars

55 stars

Watchers

1 watching

Forks

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

60 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

PokerPy

A python module writen in C++ for caculating Texas Hold'em poker odds in under a second. The union between python and C++ is done with pybind11

Installation

To install this module use the following command.

pip install git+https://github.com/glpcc/PokerPy

Use Cases

In the test folder are some use cases of possibilities with this module

Documentation

Card Class

classCard:
def__init__(self, card:str) ->None: ...
@propertydefvalue(self) ->str: ...
@propertydefcolor(self) ->str: ...

The Card class is used to represent a poker card, for the creation of a class you must pass a string with the form KD In which the first letter/s represent the value of the card i.e from 2 to A.Then the second letter represents the color of the card it can be passed as D-H-C-S or using the unicode characters ♣,♦,♥,♠.

Internally Card are stored as a struct with two int values, not accesible from the python interface.

Warning

At the time no checks for valid values of color and value are done so it is left to the user responsability. With undefined behaviour if done incorrectly.

Hand Class

classHand:
def__init__(self, hand_type: str, Cards: list[Card]) ->None: ...
@propertydefhand_type(self) ->str: ...
@propertydefCards(self) ->list[Card]: ...

This is a class to represent a poker Hand with a list of 5 cards representing the 5 chosen cards of the Hand and the Hand_type property, a string representing the type of the Hand. The value of the hand_type can be one of the following,in order of value.

Royal Flush
Straight Flush
Poker
Full House
Flush
Straight
Triples
Double Pairs
Pairs
High Card

It is not recommended to create Hand Classes manually unless you want to calculate a specific Hand Heuristic. It should be mainly used as the return type of the get_best_hand function.

Warning

At the time no checks for valid values of hand_type or the number of hands are done so it is left to the user responsability. With undefined behaviour if done incorrectly.

Utility Functions

get_best_hand

defget_best_hand(cards: list[Card]) ->Hand: ...

It gets a list of 7 cards and returns the best possible Hand as a hand_type.

Internally it sorts the cards and perform different checks for different types of hands on a single for loop for performance. It is internally used in the calculate_hand_frequencies.

Warning

At the time it isn't checked if the correct number of cards is supplied or if there is any repeated cards. Any thing outside 7 valid,non repeated cards is undefined behaviour.

calculate_hand_frequency

defcalculate_hand_frequency(cards: list[list[Card]]) ->list[dict[str,int]]: ...

Function that gets a list of players cards, and returns a list with all the hands frequencies for each player, taking into account the other players hands. It also calculates the win and draw frequency of each player, this is shown as the keys "Win" and "Draw" in each players dictionaries.

It is done by iterating for all the possibe combinations of cards and calculating the best hand.

Warning

The number of cards per player supplied must be between 2 and 6.And all players should have the same cards. However different players can repeat cards, for example the fold should be shared upon all players. Anything outside these bounds is UNDEFINED BEHAVIOUR.

nice_print_frequencies

defnice_print_frequencies(frecs: list[dict[str,int]]) ->None: ...

Function that gets a the frequencies of the calculate_hand_frequency function and prints them in a nice table format.

calculate_hand_heuristic

defcalculate_hand_heuristic(hand: Hand) ->int: ...

Function that gets a hand and uses bitshifting to calculate a hand value efficienly. It ensures that if a hand is better than another in texas hold'em, this function returns a larger int for the better hand.

This is used internally in the calculate_hand_frequency function to calculate the win,draw chance of every possible combination of cards.

Limitations

Supports up to 10 players, and might run slower than a second in old hardware.

Contributing

Any performance increase or bugfix will be gladly welcomed.

About

Texas Hold'em Poker Probability Calculator in Python

Topics

Resources

Stars

55 stars

Watchers

1 watching

Forks

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

60 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

PokerPy

A python module writen in C++ for caculating Texas Hold'em poker odds in under a second. The union between python and C++ is done with pybind11

Installation

To install this module use the following command.

pip install git+https://github.com/glpcc/PokerPy

Use Cases

In the test folder are some use cases of possibilities with this module

Documentation

Card Class

classCard:
def__init__(self, card:str) ->None: ...
@propertydefvalue(self) ->str: ...
@propertydefcolor(self) ->str: ...

The Card class is used to represent a poker card, for the creation of a class you must pass a string with the form KD In which the first letter/s represent the value of the card i.e from 2 to A.Then the second letter represents the color of the card it can be passed as D-H-C-S or using the unicode characters ♣,♦,♥,♠.

Internally Card are stored as a struct with two int values, not accesible from the python interface.

Warning

At the time no checks for valid values of color and value are done so it is left to the user responsability. With undefined behaviour if done incorrectly.

Hand Class

classHand:
def__init__(self, hand_type: str, Cards: list[Card]) ->None: ...
@propertydefhand_type(self) ->str: ...
@propertydefCards(self) ->list[Card]: ...

This is a class to represent a poker Hand with a list of 5 cards representing the 5 chosen cards of the Hand and the Hand_type property, a string representing the type of the Hand. The value of the hand_type can be one of the following,in order of value.

Royal Flush
Straight Flush
Poker
Full House
Flush
Straight
Triples
Double Pairs
Pairs
High Card

It is not recommended to create Hand Classes manually unless you want to calculate a specific Hand Heuristic. It should be mainly used as the return type of the get_best_hand function.

Warning

At the time no checks for valid values of hand_type or the number of hands are done so it is left to the user responsability. With undefined behaviour if done incorrectly.

Utility Functions

get_best_hand

defget_best_hand(cards: list[Card]) ->Hand: ...

It gets a list of 7 cards and returns the best possible Hand as a hand_type.

Internally it sorts the cards and perform different checks for different types of hands on a single for loop for performance. It is internally used in the calculate_hand_frequencies.

Warning

At the time it isn't checked if the correct number of cards is supplied or if there is any repeated cards. Any thing outside 7 valid,non repeated cards is undefined behaviour.

calculate_hand_frequency

defcalculate_hand_frequency(cards: list[list[Card]]) ->list[dict[str,int]]: ...

Function that gets a list of players cards, and returns a list with all the hands frequencies for each player, taking into account the other players hands. It also calculates the win and draw frequency of each player, this is shown as the keys "Win" and "Draw" in each players dictionaries.

It is done by iterating for all the possibe combinations of cards and calculating the best hand.

Warning

The number of cards per player supplied must be between 2 and 6.And all players should have the same cards. However different players can repeat cards, for example the fold should be shared upon all players. Anything outside these bounds is UNDEFINED BEHAVIOUR.

nice_print_frequencies

defnice_print_frequencies(frecs: list[dict[str,int]]) ->None: ...

Function that gets a the frequencies of the calculate_hand_frequency function and prints them in a nice table format.

calculate_hand_heuristic

defcalculate_hand_heuristic(hand: Hand) ->int: ...

Function that gets a hand and uses bitshifting to calculate a hand value efficienly. It ensures that if a hand is better than another in texas hold'em, this function returns a larger int for the better hand.

This is used internally in the calculate_hand_frequency function to calculate the win,draw chance of every possible combination of cards.

Limitations

Supports up to 10 players, and might run slower than a second in old hardware.

Contributing

Any performance increase or bugfix will be gladly welcomed.

About

Texas Hold'em Poker Probability Calculator in Python

Topics

Resources

Stars

55 stars

Watchers

1 watching

Forks

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

60 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

PokerPy

A python module writen in C++ for caculating Texas Hold'em poker odds in under a second. The union between python and C++ is done with pybind11

Installation

To install this module use the following command.

pip install git+https://github.com/glpcc/PokerPy

Use Cases

In the test folder are some use cases of possibilities with this module

Documentation

Card Class

classCard:
def__init__(self, card:str) ->None: ...
@propertydefvalue(self) ->str: ...
@propertydefcolor(self) ->str: ...

The Card class is used to represent a poker card, for the creation of a class you must pass a string with the form KD In which the first letter/s represent the value of the card i.e from 2 to A.Then the second letter represents the color of the card it can be passed as D-H-C-S or using the unicode characters ♣,♦,♥,♠.

Internally Card are stored as a struct with two int values, not accesible from the python interface.

Warning

At the time no checks for valid values of color and value are done so it is left to the user responsability. With undefined behaviour if done incorrectly.

Hand Class

classHand:
def__init__(self, hand_type: str, Cards: list[Card]) ->None: ...
@propertydefhand_type(self) ->str: ...
@propertydefCards(self) ->list[Card]: ...

This is a class to represent a poker Hand with a list of 5 cards representing the 5 chosen cards of the Hand and the Hand_type property, a string representing the type of the Hand. The value of the hand_type can be one of the following,in order of value.

Royal Flush
Straight Flush
Poker
Full House
Flush
Straight
Triples
Double Pairs
Pairs
High Card

It is not recommended to create Hand Classes manually unless you want to calculate a specific Hand Heuristic. It should be mainly used as the return type of the get_best_hand function.

Warning

At the time no checks for valid values of hand_type or the number of hands are done so it is left to the user responsability. With undefined behaviour if done incorrectly.

Utility Functions

get_best_hand

defget_best_hand(cards: list[Card]) ->Hand: ...

It gets a list of 7 cards and returns the best possible Hand as a hand_type.

Internally it sorts the cards and perform different checks for different types of hands on a single for loop for performance. It is internally used in the calculate_hand_frequencies.

Warning

At the time it isn't checked if the correct number of cards is supplied or if there is any repeated cards. Any thing outside 7 valid,non repeated cards is undefined behaviour.

calculate_hand_frequency

defcalculate_hand_frequency(cards: list[list[Card]]) ->list[dict[str,int]]: ...

Function that gets a list of players cards, and returns a list with all the hands frequencies for each player, taking into account the other players hands. It also calculates the win and draw frequency of each player, this is shown as the keys "Win" and "Draw" in each players dictionaries.

It is done by iterating for all the possibe combinations of cards and calculating the best hand.

Warning

The number of cards per player supplied must be between 2 and 6.And all players should have the same cards. However different players can repeat cards, for example the fold should be shared upon all players. Anything outside these bounds is UNDEFINED BEHAVIOUR.

nice_print_frequencies

defnice_print_frequencies(frecs: list[dict[str,int]]) ->None: ...

Function that gets a the frequencies of the calculate_hand_frequency function and prints them in a nice table format.

calculate_hand_heuristic

defcalculate_hand_heuristic(hand: Hand) ->int: ...

Function that gets a hand and uses bitshifting to calculate a hand value efficienly. It ensures that if a hand is better than another in texas hold'em, this function returns a larger int for the better hand.

This is used internally in the calculate_hand_frequency function to calculate the win,draw chance of every possible combination of cards.

Limitations

Supports up to 10 players, and might run slower than a second in old hardware.

Contributing

Any performance increase or bugfix will be gladly welcomed.

About

Texas Hold'em Poker Probability Calculator in Python

Topics

Resources

Stars

55 stars

Watchers

1 watching

Forks

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

60 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

PokerPy

A python module writen in C++ for caculating Texas Hold'em poker odds in under a second. The union between python and C++ is done with pybind11

Installation

To install this module use the following command.

pip install git+https://github.com/glpcc/PokerPy

Use Cases

In the test folder are some use cases of possibilities with this module

Documentation

Card Class

classCard:
def__init__(self, card:str) ->None: ...
@propertydefvalue(self) ->str: ...
@propertydefcolor(self) ->str: ...

The Card class is used to represent a poker card, for the creation of a class you must pass a string with the form KD In which the first letter/s represent the value of the card i.e from 2 to A.Then the second letter represents the color of the card it can be passed as D-H-C-S or using the unicode characters ♣,♦,♥,♠.

Internally Card are stored as a struct with two int values, not accesible from the python interface.

Warning

At the time no checks for valid values of color and value are done so it is left to the user responsability. With undefined behaviour if done incorrectly.

Hand Class

classHand:
def__init__(self, hand_type: str, Cards: list[Card]) ->None: ...
@propertydefhand_type(self) ->str: ...
@propertydefCards(self) ->list[Card]: ...

This is a class to represent a poker Hand with a list of 5 cards representing the 5 chosen cards of the Hand and the Hand_type property, a string representing the type of the Hand. The value of the hand_type can be one of the following,in order of value.

Royal Flush
Straight Flush
Poker
Full House
Flush
Straight
Triples
Double Pairs
Pairs
High Card

It is not recommended to create Hand Classes manually unless you want to calculate a specific Hand Heuristic. It should be mainly used as the return type of the get_best_hand function.

Warning

At the time no checks for valid values of hand_type or the number of hands are done so it is left to the user responsability. With undefined behaviour if done incorrectly.

Utility Functions

get_best_hand

defget_best_hand(cards: list[Card]) ->Hand: ...

It gets a list of 7 cards and returns the best possible Hand as a hand_type.

Internally it sorts the cards and perform different checks for different types of hands on a single for loop for performance. It is internally used in the calculate_hand_frequencies.

Warning

At the time it isn't checked if the correct number of cards is supplied or if there is any repeated cards. Any thing outside 7 valid,non repeated cards is undefined behaviour.

calculate_hand_frequency

defcalculate_hand_frequency(cards: list[list[Card]]) ->list[dict[str,int]]: ...

Function that gets a list of players cards, and returns a list with all the hands frequencies for each player, taking into account the other players hands. It also calculates the win and draw frequency of each player, this is shown as the keys "Win" and "Draw" in each players dictionaries.

It is done by iterating for all the possibe combinations of cards and calculating the best hand.

Warning

The number of cards per player supplied must be between 2 and 6.And all players should have the same cards. However different players can repeat cards, for example the fold should be shared upon all players. Anything outside these bounds is UNDEFINED BEHAVIOUR.

nice_print_frequencies

defnice_print_frequencies(frecs: list[dict[str,int]]) ->None: ...

Function that gets a the frequencies of the calculate_hand_frequency function and prints them in a nice table format.

calculate_hand_heuristic

defcalculate_hand_heuristic(hand: Hand) ->int: ...

Function that gets a hand and uses bitshifting to calculate a hand value efficienly. It ensures that if a hand is better than another in texas hold'em, this function returns a larger int for the better hand.

This is used internally in the calculate_hand_frequency function to calculate the win,draw chance of every possible combination of cards.

Limitations

Supports up to 10 players, and might run slower than a second in old hardware.

Contributing

Any performance increase or bugfix will be gladly welcomed.

About

Texas Hold'em Poker Probability Calculator in Python

Topics

Resources

Stars

55 stars

Watchers

1 watching

Forks

Packages

Used by

Contributors

Languages