Beispiel #1
0
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
Beispiel #2
0
def test():
	"""display all EvalSeven tables, run getSevenRank_ evaluators on sample hands, compare getSevenRank_ with EvalFive.getSevenRank_"""
	global seven_cards, array_seven_cards, hr1, hr2, hr3, N, rank7, rank5, sparse_flush_rank, sparse_face_rank
	print '\n--------------- start EvalSeven.test'

	print '-------- EvalSeven tables'
	sparse_flush_rank = sparse.csc_matrix(flush_rank)
	print 'flush_rank = \n{}\n{}\nnb of nonzero elements = {}'.format(sparse_flush_rank.nonzero()[1], sparse_flush_rank.data, sparse_flush_rank.nonzero()[1].size)
	sparse_face_rank = sparse.csc_matrix(face_rank)
	print 'face_rank = \n{}\n{}\nnb of nonzero elements = {}'.format(sparse_face_rank.nonzero()[1], sparse_face_rank.data, sparse_face_rank.nonzero()[1].size)
	print 'flush_suit = \n{}'.format(flush_suit)
	print 'nb of elements different from -2 = {}'.format(np.array(flush_suit[flush_suit!=-2].size))

	print '-------- EvalSeven getSevenRank_ evaluators sample runs'
	np.random.seed(99)
	array_seven_cards = np.array([np.random.choice(keys.DECK_SIZE, 7, replace=False) for k in xrange(10)])
	print 'array_seven_cards=\n{}'.format(array_seven_cards)
	seven_cards = array_seven_cards[0]
	print 'seven_cards={}'.format(seven_cards)

	hr1 = get_seven_rank_simple(seven_cards)
	print '\nget_seven_rank_simple(seven_cards)={}'.format(hr1)

	hr2 = get_seven_rank_full(array_seven_cards, keys.CARD_FLUSH_KEY, keys.CARD_FACE_KEY, keys.CARD_SUIT, keys.SUIT_MASK, keys.SUIT_BIT_SHIFT, flush_rank, face_rank, flush_suit)
	print 'get_seven_rank_full(array_seven_cards)={}'.format(hr2)

	hr3 = get_seven_rank_fast(array_seven_cards, keys.CARD_FLUSH_KEY, keys.CARD_FACE_KEY, keys.CARD_SUIT, keys.SUIT_MASK, keys.SUIT_BIT_SHIFT, flush_rank, face_rank, flush_suit)
	print 'get_seven_rank_fast(array_seven_cards)={}'.format(hr3)

	print '-------- compare getSevenRank_ with EvalFive.get_seven_rank_ on all hands'
	t0 = timer()
	array_all_seven_cards = create_array_all_seven_fast()
	t1 = timer()
	print 'array_all_seven_cards time = {:8.4f} s'.format(t1-t0)

	t0 = timer()

	rank7 = get_seven_rank_fast(array_all_seven_cards[:], keys.CARD_FLUSH_KEY, keys.CARD_FACE_KEY, keys.CARD_SUIT, keys.SUIT_MASK, keys.SUIT_BIT_SHIFT, flush_rank, face_rank, flush_suit)
	t1 = timer()
	print 'EvalSeven.get_seven_rank_fast time = {:8.4f} s'.format(t1-t0)

	N = 1000000*140
	t0 = timer()
	rank5 = EvalFive.get_seven_rank_fast(array_all_seven_cards[:N], keys.FLUSH_KEY_FIVE, keys.FACE_KEY_FIVE, keys.CARD_SUIT, keys.CARD_FACE, EvalFive.flush_rank, EvalFive.face_rank)
	t1 = timer()
	print 'EvalFive.get_seven_rank_fast time = {:8.4f} s'.format(t1-t0)

	print 'result(EvalSeven.get_seven_rank_fast)==result(EvalFive.get_seven_rank_fast) ? {}'.format((rank5==rank7).all())

	print '--------------- end EvalSeven.test'
Beispiel #3
0
def create_df_hand_seven():
	"""create summary dataframe for all seven card hands"""
	hand_type = EvalFive.hand_type

	uniq, idx = np.unique(hand_type, return_index=True)
	sorted_idx = np.sort(idx)[::-1]
	uniq_hand_type = hand_type[sorted_idx]
	min_rank_5 = sorted_idx
	max_rank_5 = np.r_[hand_type.size, sorted_idx[:-1]]-1
	nb_rank_5 = max_rank_5-min_rank_5+1

	array_all_seven_cards = create_array_all_seven_fast()
	all_hand_rank = EvalSeven.get_seven_rank_fast(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)

	bins = np.r_[sorted_idx[::-1], max_rank_5[0]]
	nb_occurence = np.histogram(all_hand_rank, bins)[0][::-1]
	proba = 1.0*nb_occurence/np.sum(nb_occurence)
	odd = 1.0/proba
	cum_proba = np.cumsum(proba)

	bins = np.r_[sorted_idx[::-1], max_rank_5[0]+1][::-1]
	digitized = np.digitize(all_hand_rank, bins)
	min_rank_7 = np.zeros(uniq.size, dtype=np.int32)
	max_rank_7 = np.zeros(uniq.size, dtype=np.int32)
	nb_rank_7 = np.zeros(uniq.size, dtype=np.int32)
	for k in range(1, uniq.size+1):
		subset = all_hand_rank[digitized==k]
		min_rank_7[k-1] = subset.min()
		max_rank_7[k-1] = subset.max()
		nb_rank_7[k-1] = np.unique(subset).size

	proba_exact = map(lambda x : Rational(x, array_all_seven_cards.shape[0]), nb_occurence)

	df = pd.DataFrame(data=np.array([uniq_hand_type, nb_rank_5, nb_rank_7, min_rank_5, min_rank_7, max_rank_5, max_rank_7, nb_occurence, proba_exact, odd, proba, cum_proba]).T,
			columns=['HandType', 'NbHands_5', 'NbHands_7', 'MinRank_5', 'MinRank_7', 'MaxRank_5', 'MaxRank_7', 'NbOccurence', 'ProbaExact', 'Odd', 'ProbaApprox', 'CumulativeProba'])
	# df.loc[uniq.size] = ['All', nb_rank_5.sum(), nb_rank_7.sum(), min_rank_5.min(), min_rank_7.min(), max_rank_5.max(), max_rank_7.max(), array_all_seven_cards.shape[0], 1.0, 1.0, 1.0, np.nan]

	s = pd.Series(data=['All', nb_rank_5.sum(), nb_rank_7.sum(), min_rank_5.min(), min_rank_7.min(), max_rank_5.max(), max_rank_7.max(), array_all_seven_cards.shape[0], 1.0, 1.0, 1.0, np.nan],
			index=['HandType', 'NbHands_5', 'NbHands_7', 'MinRank_5', 'MinRank_7', 'MaxRank_5', 'MaxRank_7', 'NbOccurence', 'ProbaExact', 'Odd', 'ProbaApprox', 'CumulativeProba'], name=uniq.size)
	df = df.append(s)

	df.to_pickle(os.path.join('Tables', 'df_hand_seven.pd'))
	return df
Beispiel #4
0
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
Beispiel #5
0
def test():
    """display all EvalSeven tables, run getSevenRank_ evaluators on sample hands, compare getSevenRank_ with EvalFive.getSevenRank_"""
    global seven_cards, array_seven_cards, hr1, hr2, hr3, N, rank7, rank5, sparse_flush_rank, sparse_face_rank
    print '\n--------------- start EvalSeven.test'

    print '-------- EvalSeven tables'
    sparse_flush_rank = sparse.csc_matrix(flush_rank)
    print 'flush_rank = \n{}\n{}\nnb of nonzero elements = {}'.format(
        sparse_flush_rank.nonzero()[1], sparse_flush_rank.data,
        sparse_flush_rank.nonzero()[1].size)
    sparse_face_rank = sparse.csc_matrix(face_rank)
    print 'face_rank = \n{}\n{}\nnb of nonzero elements = {}'.format(
        sparse_face_rank.nonzero()[1], sparse_face_rank.data,
        sparse_face_rank.nonzero()[1].size)
    print 'flush_suit = \n{}'.format(flush_suit)
    print 'nb of elements different from -2 = {}'.format(
        np.array(flush_suit[flush_suit != -2].size))

    print '-------- EvalSeven getSevenRank_ evaluators sample runs'
    np.random.seed(99)
    array_seven_cards = np.array([
        np.random.choice(keys.DECK_SIZE, 7, replace=False) for k in xrange(10)
    ],
                                 dtype=np.int32)
    print 'array_seven_cards=\n{}'.format(array_seven_cards)
    seven_cards = array_seven_cards[0]
    print 'seven_cards={}'.format(seven_cards)

    hr1 = get_seven_rank_simple(seven_cards)
    print '\nget_seven_rank_simple(seven_cards)={}'.format(hr1)

    hr2 = get_seven_rank_full(array_seven_cards, keys.CARD_FLUSH_KEY,
                              keys.CARD_FACE_KEY, keys.CARD_SUIT,
                              keys.SUIT_MASK, keys.SUIT_BIT_SHIFT, flush_rank,
                              face_rank, flush_suit)
    print 'get_seven_rank_full(array_seven_cards)={}'.format(hr2)

    hr3 = get_seven_rank_fast(array_seven_cards, keys.CARD_FLUSH_KEY,
                              keys.CARD_FACE_KEY, keys.CARD_SUIT,
                              keys.SUIT_MASK, keys.SUIT_BIT_SHIFT, flush_rank,
                              face_rank, flush_suit)
    print 'get_seven_rank_fast(array_seven_cards)={}'.format(hr3)

    print '-------- compare getSevenRank_ with EvalFive.get_seven_rank_ on all hands'
    t0 = timer()
    array_all_seven_cards = create_array_all_seven_fast()
    t1 = timer()
    print 'array_all_seven_cards time = {:8.4f} s'.format(t1 - t0)

    t0 = timer()

    rank7 = get_seven_rank_fast(array_all_seven_cards[:], keys.CARD_FLUSH_KEY,
                                keys.CARD_FACE_KEY, keys.CARD_SUIT,
                                keys.SUIT_MASK, keys.SUIT_BIT_SHIFT,
                                flush_rank, face_rank, flush_suit)
    t1 = timer()
    print 'EvalSeven.get_seven_rank_fast time = {:8.4f} s'.format(t1 - t0)

    N = 1000000 * 140
    t0 = timer()
    rank5 = EvalFive.get_seven_rank_fast(array_all_seven_cards[:N],
                                         keys.FLUSH_KEY_FIVE,
                                         keys.FACE_KEY_FIVE, keys.CARD_SUIT,
                                         keys.CARD_FACE, EvalFive.flush_rank,
                                         EvalFive.face_rank)
    t1 = timer()
    print 'EvalFive.get_seven_rank_fast time = {:8.4f} s'.format(t1 - t0)

    print 'result(EvalSeven.get_seven_rank_fast)==result(EvalFive.get_seven_rank_fast) ? {}'.format(
        (rank5 == rank7).all())

    print '--------------- end EvalSeven.test'
Beispiel #6
0
def create_df_hand_seven():
    """create summary dataframe for all seven card hands"""
    hand_type = EvalFive.hand_type

    uniq, idx = np.unique(hand_type, return_index=True)
    sorted_idx = np.sort(idx)[::-1]
    uniq_hand_type = hand_type[sorted_idx]
    min_rank_5 = sorted_idx
    max_rank_5 = np.r_[hand_type.size, sorted_idx[:-1]] - 1
    nb_rank_5 = max_rank_5 - min_rank_5 + 1

    array_all_seven_cards = create_array_all_seven_fast()
    all_hand_rank = EvalSeven.get_seven_rank_fast(
        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)

    bins = np.r_[sorted_idx[::-1], max_rank_5[0]]
    nb_occurence = np.histogram(all_hand_rank, bins)[0][::-1]
    proba = 1.0 * nb_occurence / np.sum(nb_occurence)
    odd = 1.0 / proba
    cum_proba = np.cumsum(proba)

    bins = np.r_[sorted_idx[::-1], max_rank_5[0] + 1][::-1]
    digitized = np.digitize(all_hand_rank, bins)
    min_rank_7 = np.zeros(uniq.size, dtype=np.int32)
    max_rank_7 = np.zeros(uniq.size, dtype=np.int32)
    nb_rank_7 = np.zeros(uniq.size, dtype=np.int32)
    for k in range(1, uniq.size + 1):
        subset = all_hand_rank[digitized == k]
        min_rank_7[k - 1] = subset.min()
        max_rank_7[k - 1] = subset.max()
        nb_rank_7[k - 1] = np.unique(subset).size

    proba_exact = map(lambda x: Rational(x, array_all_seven_cards.shape[0]),
                      nb_occurence)

    df = pd.DataFrame(data=np.array([
        uniq_hand_type, nb_rank_5, nb_rank_7, min_rank_5, min_rank_7,
        max_rank_5, max_rank_7, nb_occurence, proba_exact, odd, proba,
        cum_proba
    ]).T,
                      columns=[
                          'HandType', 'NbHands_5', 'NbHands_7', 'MinRank_5',
                          'MinRank_7', 'MaxRank_5', 'MaxRank_7', 'NbOccurence',
                          'ProbaExact', 'Odd', 'ProbaApprox', 'CumulativeProba'
                      ])
    # df.loc[uniq.size] = ['All', nb_rank_5.sum(), nb_rank_7.sum(), min_rank_5.min(), min_rank_7.min(), max_rank_5.max(), max_rank_7.max(), array_all_seven_cards.shape[0], 1.0, 1.0, 1.0, np.nan]

    s = pd.Series(data=[
        'All',
        nb_rank_5.sum(),
        nb_rank_7.sum(),
        min_rank_5.min(),
        min_rank_7.min(),
        max_rank_5.max(),
        max_rank_7.max(), array_all_seven_cards.shape[0], 1.0, 1.0, 1.0, np.nan
    ],
                  index=[
                      'HandType', 'NbHands_5', 'NbHands_7', 'MinRank_5',
                      'MinRank_7', 'MaxRank_5', 'MaxRank_7', 'NbOccurence',
                      'ProbaExact', 'Odd', 'ProbaApprox', 'CumulativeProba'
                  ],
                  name=uniq.size)
    df = df.append(s)

    df.to_pickle(os.path.join('Tables', 'df_hand_seven.pd'))
    return df