pokers/lib.rs
1//! # Pokers
2//! A texas holdem poker library
3//!
4//! Currently supports
5//! - monte carlo range vs. range equity calculations
6//! - full enumeration for exact equities
7//! - fast hand evaluation
8//! - individual hand and combo results
9//!
10//! ## Equity Calculator
11//!
12//! ```
13//! use std::{io, io::Write};
14//! use std::sync::{atomic::AtomicBool, Arc};
15//! use pokers::{HandRange, get_card_mask};
16//! use pokers::approx_equity;
17//! let ranges = HandRange::from_strings(["AK,22+".to_string(), "AA,KK,QQ@50".to_string()].to_vec());
18//! let board_mask = get_card_mask("2h3d4c5h6s");
19//! let dead_mask = get_card_mask("");
20//! let cancel_token = Arc::new(AtomicBool::new(false));
21//! let callback = |x: u8| {
22//! print!("\rProgress: {x}%");
23//! io::stdout().flush().unwrap();
24//! };
25//! let std_dev_target = 0.01;
26//! let n_threads = 4;
27//! let result = approx_equity(&ranges, board_mask, dead_mask, n_threads, std_dev_target, cancel_token, callback).unwrap();
28//! let equities = result.equities;
29//! ```
30//!
31//! ## Hand Evaluator
32//!
33//! ```
34//! use pokers::*;
35//! // cards are indexed 0->51 where index is 4 * rank + suit
36//! let hand = Hand::default() + CARDS[0] + CARDS[1];
37//! let score = hand.evaluate();
38//! let board = get_card_mask("AhTd9d");
39//! let board = Hand::from_bit_mask(board);
40//! let hole_cards = Hand::from_hole_cards(44, 45);
41//! let final_hand = board + hole_cards;
42//! let final_score = final_hand.evaluate();
43//! let rank = final_score / 4096; // or final_score >> 12
44//! ```
45
46pub mod constants;
47pub mod hand_evaluator;
48pub mod hand_range;
49pub mod fastdivide;
50pub mod equity_calculator;
51pub mod string_lookup;
52
53pub mod lookup;
54pub mod flush_lookup;
55pub mod hash_offsets;
56pub mod map;
57
58pub use hand_range::{HandRange, get_card_mask};
59pub use equity_calculator::{exact_equity, approx_equity, SimulationResults, UnitResults, SimulatorError};
60pub use hand_evaluator::*;
61pub use string_lookup::*;