def create_df_preflop_hand_distrib(save=False): """returns df containing the hand rank distribution for all combinations of preflop hands""" global df_preflop_hand_distrib print "\n--------------- start create_df_preflop_hand_distrib" print 'all preflop hands = \nstart = {}\nend = {}\nnb of elements = {}'.format( all_preflop_hands[:10], all_preflop_hands[-10:], len(all_preflop_hands)) print "\nhand rank distribution for all preflop hands" t0 = timer() preflop_hand_rank_distrib = np.zeros([1 + len(all_preflop_hands), 7462], dtype=np.int32) sys.stdout.write('\rk=%3d / %3d' % (1, 1 + len(all_preflop_hands))) sys.stdout.flush() N = C(52, 7) h1_array_all_seven_cards = create_array_all_seven_fast() h1_rank7 = EvalSeven.get_seven_rank_fast( h1_array_all_seven_cards, keys.CARD_FLUSH_KEY, keys.CARD_FACE_KEY, keys.CARD_SUIT, keys.SUIT_MASK, keys.SUIT_BIT_SHIFT, EvalSeven.flush_rank, EvalSeven.face_rank, EvalSeven.flush_suit) preflop_hand_rank_distrib[0, :] = np.bincount(h1_rank7) for k, hand in enumerate(all_preflop_hands): sys.stdout.write('\rk = %3d / %3d' % (2 + k, 1 + len(all_preflop_hands))) sys.stdout.flush() hand_no = hand_str_to_no(hand) N = C(52 - 2, 5) array_five_cards = all_n_cards_given_m_cards_fast(5, hand_no, N) h1_cards = np.ones([N, 2], dtype=np.int32) * hand_no h1_array_all_seven_cards = np.concatenate((h1_cards, array_five_cards), axis=1) h1_array_all_seven_cards = np.array(h1_array_all_seven_cards, dtype=np.int32) h1_rank7 = EvalSeven.get_seven_rank_fast( h1_array_all_seven_cards, keys.CARD_FLUSH_KEY, keys.CARD_FACE_KEY, keys.CARD_SUIT, keys.SUIT_MASK, keys.SUIT_BIT_SHIFT, EvalSeven.flush_rank, EvalSeven.face_rank, EvalSeven.flush_suit) preflop_hand_rank_distrib[1 + k, :] = np.bincount(h1_rank7) df = pd.DataFrame(data=preflop_hand_rank_distrib.T, columns=['NoHand'] + all_preflop_hands, index=np.arange(7462)) t1 = timer() print '\ndf_preflop_hand_distrib time = {:8.4f} s'.format(t1 - t0) if (save): df.to_pickle(os.path.join('Tables', 'df_preflop_hand_distrib.pd')) print '{} saved to disk as {}'.format( 'df_preflop_hand_distrib', os.path.join('Tables', 'df_preflop_hand_distrib.pd')) df.to_csv(os.path.join('Tables', 'df_preflop_hand_distrib.csv'), index=False) print '{} saved to disk as {}'.format( 'df_preflop_hand_distrib', os.path.join('Tables', 'df_preflop_hand_distrib.csv')) print "--------------- end create_df_preflop_hand_distrib" return df
def create_df_preflop_hand_distrib(save=False): """returns df containing the hand rank distribution for all combinations of preflop hands""" global df_preflop_hand_distrib print "\n--------------- start create_df_preflop_hand_distrib" print 'all preflop hands = \nstart = {}\nend = {}\nnb of elements = {}'.format(all_preflop_hands[:10], all_preflop_hands[-10:], len(all_preflop_hands)) print "\nhand rank distribution for all preflop hands" t0 = timer() preflop_hand_rank_distrib = np.zeros([1+len(all_preflop_hands), 7462], dtype=np.int32) sys.stdout.write('\rk=%3d / %3d' % (1, 1+len(all_preflop_hands))) sys.stdout.flush() N = C(52, 7) h1_array_all_seven_cards = create_array_all_seven_fast() h1_rank7 = EvalSeven.get_seven_rank_fast(h1_array_all_seven_cards, keys.CARD_FLUSH_KEY, keys.CARD_FACE_KEY, keys.CARD_SUIT, keys.SUIT_MASK, keys.SUIT_BIT_SHIFT, EvalSeven.flush_rank, EvalSeven.face_rank, EvalSeven.flush_suit) preflop_hand_rank_distrib[0, :] = np.bincount(h1_rank7) for k, hand in enumerate(all_preflop_hands): sys.stdout.write('\rk = %3d / %3d' % (2+k, 1+len(all_preflop_hands))) sys.stdout.flush() hand_no = hand_str_to_no(hand) N = C(52-2, 5) array_five_cards = all_n_cards_given_m_cards_fast(5, hand_no, N) h1_cards = np.ones([N, 2], dtype=np.int32)*hand_no h1_array_all_seven_cards = np.concatenate((h1_cards, array_five_cards), axis=1) h1_array_all_seven_cards = np.array(h1_array_all_seven_cards, dtype=np.int32) h1_rank7 = EvalSeven.get_seven_rank_fast(h1_array_all_seven_cards, keys.CARD_FLUSH_KEY, keys.CARD_FACE_KEY, keys.CARD_SUIT, keys.SUIT_MASK, keys.SUIT_BIT_SHIFT, EvalSeven.flush_rank, EvalSeven.face_rank, EvalSeven.flush_suit) preflop_hand_rank_distrib[1+k, :] = np.bincount(h1_rank7) df = pd.DataFrame(data=preflop_hand_rank_distrib.T, columns=['NoHand']+all_preflop_hands, index=np.arange(7462)) t1 = timer() print '\ndf_preflop_hand_distrib time = {:8.4f} s'.format(t1-t0) if (save): df.to_pickle(os.path.join('Tables', 'df_preflop_hand_distrib.pd')) print '{} saved to disk as {}'.format('df_preflop_hand_distrib', os.path.join('Tables', 'df_preflop_hand_distrib.pd')) df.to_csv(os.path.join('Tables', 'df_preflop_hand_distrib.csv'), index=False) print '{} saved to disk as {}'.format('df_preflop_hand_distrib', os.path.join('Tables', 'df_preflop_hand_distrib.csv')) print "--------------- end create_df_preflop_hand_distrib" return df
card, freq = card_combin(idx, h1f1, h1f2, h2f1, h2f2) return [card, freq] def preflop_two_hand_equity((h1, h2), verbose=False): """returns [h1 nb win, nb ties, h2 nb wins] for all suit combinations for 2 preflop hands h1, h2 input as 'Q6o', '52o'""" if (verbose): print 'preflop hands : {}'.format((h1, h2)) t0 = timer() two_hand_no, freq = two_hand_to_no(h1, h2) equity = np.zeros([two_hand_no.shape[0], 4], dtype=np.int32) for k, p in enumerate(two_hand_no): N = C(52-4, 5) array_five_cards = all_n_cards_given_m_cards_fast(5, p, N) h1_cards = np.ones([N, 2], dtype=np.int32)*[p[0], p[1]] h1_array_all_seven_cards = np.concatenate((h1_cards, array_five_cards), axis=1) h1_rank7 = EvalSeven.get_seven_rank_fast(h1_array_all_seven_cards, keys.CARD_FLUSH_KEY, keys.CARD_FACE_KEY, keys.CARD_SUIT, keys.SUIT_MASK, keys.SUIT_BIT_SHIFT, EvalSeven.flush_rank, EvalSeven.face_rank, EvalSeven.flush_suit) h2_cards = np.ones([N, 2], dtype=np.int32)*[p[2], p[3]] h2_array_all_seven_cards = np.concatenate((h2_cards, array_five_cards), axis=1) h2_rank7 = EvalSeven.get_seven_rank_fast(h2_array_all_seven_cards, keys.CARD_FLUSH_KEY, keys.CARD_FACE_KEY, keys.CARD_SUIT, keys.SUIT_MASK, keys.SUIT_BIT_SHIFT, EvalSeven.flush_rank, EvalSeven.face_rank, EvalSeven.flush_suit) diff_rank7 = h1_rank7-h2_rank7 h1_win, tie, h2_win = (diff_rank7>0).sum(), (diff_rank7==0).sum(), (diff_rank7<0).sum() equity[k, :] = np.array([h1_win, tie, h2_win, freq[k]]) if (verbose): print 'suit combination #{}'.format(k) print '\t', two_hand_no_to_char(p) print '\tfrequency = {}'.format(freq[k]) print '\t{}\t{}\t{}'.format('h1#wins', '#ties', 'h2#wins')
idx = 8 card, freq = card_combin(idx, h1f1, h1f2, h2f1, h2f2) return [card, freq] def preflop_two_hand_equity((h1, h2), verbose=False): """returns [h1 nb win, nb ties, h2 nb wins] for all suit combinations for 2 preflop hands h1, h2 input as 'Q6o', '52o'""" if (verbose): print 'preflop hands : {}'.format((h1, h2)) t0 = timer() two_hand_no, freq = two_hand_to_no(h1, h2) equity = np.zeros([two_hand_no.shape[0], 4], dtype=np.int32) for k, p in enumerate(two_hand_no): N = C(52 - 4, 5) array_five_cards = all_n_cards_given_m_cards_fast(5, p, N) h1_cards = np.ones([N, 2], dtype=np.int32) * [p[0], p[1]] h1_array_all_seven_cards = np.concatenate((h1_cards, array_five_cards), axis=1) h1_rank7 = EvalSeven.get_seven_rank_fast( h1_array_all_seven_cards, keys.CARD_FLUSH_KEY, keys.CARD_FACE_KEY, keys.CARD_SUIT, keys.SUIT_MASK, keys.SUIT_BIT_SHIFT, EvalSeven.flush_rank, EvalSeven.face_rank, EvalSeven.flush_suit) h2_cards = np.ones([N, 2], dtype=np.int32) * [p[2], p[3]] h2_array_all_seven_cards = np.concatenate((h2_cards, array_five_cards), axis=1) h2_rank7 = EvalSeven.get_seven_rank_fast( h2_array_all_seven_cards, keys.CARD_FLUSH_KEY, keys.CARD_FACE_KEY, keys.CARD_SUIT, keys.SUIT_MASK, keys.SUIT_BIT_SHIFT, EvalSeven.flush_rank, EvalSeven.face_rank, EvalSeven.flush_suit)