예제 #1
0
파일: test-Hand.py 프로젝트: von/pyPoker
    def testBoardEightLow(self):
	for board in [ "AC 2C 3C 4C 5C",
		       "AC AH 3C 4C 9C",
		       "AC 2C 8C TC KC" ]:
	    self.assertEqual(Board.fromString(board).eightLowPossible(),
			     True, "%s not True" % board)
	for board in [ "AC AH 8C 9D TH",
		       "AC AH 2D TC JH",
		       "8C 9H TD JC QH",
		       "AC 2C 9C TC JD" ]:
	    self.assertEqual(Board.fromString(board).eightLowPossible(),
			     False, "%s not False" % board)
예제 #2
0
    def testOmahaNoLow(self):
	"""Test Omaha low hand ranking of hand without low with EightLowRanker."""
        ranker = EightLowRanker()
	hand = Omaha.Hand.fromString("QC AH TC 9C")
	board = Board.fromString("2H JH 4D 6H 3H")
	hand.setBoard(board)
	rank = ranker.rankHand(hand)
        self.assertIsNone(rank)
	hand = Omaha.Hand.fromString("QC AH TC 8C")
	board = Board.fromString("2H JH KD JS 3H")
	hand.setBoard(board)
	rank = ranker.rankHand(hand)
        self.assertIsNone(rank)
예제 #3
0
    def testHiLoGame(self):
	"""Test OmahaHiLoGame."""
	game = Omaha.HiLoGame()
	game.setBoard(Board.fromString("5C 2S 4D"))
	game.addHand(Omaha.Hand.fromString("AC 2C"))
	game.addHand(Omaha.Hand.fromString("AH KH"))
	game.simulateGames(numGames=10)
예제 #4
0
    def testGame(self):
	"""Test HoleEmGame."""
	game = HoldEm.Game()
	game.setBoard(Board.fromString("5C 2S 4D"))
	game.addHand(HoldEm.Hand.fromString("AC 2C"))
	game.addHand(HoldEm.Hand.fromString("AH KH"))
	game.simulateGames(numGames=10)
예제 #5
0
 def testBoardCombinations(self):
     """Test combinations with board."""
     hand = HoldEm.Hand.fromString("AD 2D")
     board = Board.fromString("3D 4D 5D")
     hand.setBoard(board)
     count = 0
     for combs in hand.combinations(2):
         count += 1
         self.assertEquals(len(combs), 2)
     self.assertEquals(count, 10)
     count = 0
     for combs in hand.combinations(5):
         count += 1
         self.assertEquals(len(combs), 5)
     self.assertEquals(count, 1)
     board.addCardFromString("6D")
     count = 0
     for combs in hand.combinations(5):
         count += 1
         self.assertEquals(len(combs), 5)
     self.assertEquals(count, 6)
     board.addCardFromString("7D")
     count = 0
     for combs in hand.combinations(5):
         count += 1
         self.assertEquals(len(combs), 5)
     self.assertEquals(count, 21)
예제 #6
0
파일: test-Omaha.py 프로젝트: von/pyPoker
    def testCombinations(self):
	"""Testing Omaha combinations."""
	hand = Omaha.Hand.fromString("AC 2C 3C 4C");
	board = Board.fromString("5C 6C 7C 8C 9C");
	hand.setBoard(board)
        self.assert_iterator(hand.combinations(2), count=6,
                             assert_item_function=lambda i: len(i) == 2)
        self.assert_iterator(hand.hands(), count=60,
                             assert_item_function=lambda i: len(i) == 5)
예제 #7
0
    def testOmaha(self):
	"""Test basic Omaha hand ranking."""
	hand = Omaha.Hand.fromString("7S QD 2D TD")
	board = Board.fromString("AS AD 4H TH 8D")
	hand.setBoard(board)
	rank = self.ranker.rankHand(hand)
	self.assertEqual(rank.getType(), PokerRank.TWO_PAIR, "rank = %s" % rank)
	self.assertEqual(rank.getPrimaryCardRank(), Rank.ACE,
			 "primaryCard = %s" % rank.getPrimaryCardRank())
	self.assertEqual(rank.getSecondaryCardRank(), Rank.TEN,
			 "secondaryCard = %s" % rank.getSecondaryCardRank())
예제 #8
0
    def testOmahaLow2(self):
	"""Test Omaha low hand ranking."""
	hand = Omaha.Hand.fromString("QC AH TC 8C")
	board = Board.fromString("2H JH 4D 6H 3H")
	hand.setBoard(board)
	rank = self.ranker.rankHand(hand)
	self.assertEqual(rank.getType(), PokerRank.HIGH_CARD,
                         "rank = %s" % rank)
	self.assertEqual(rank.getPrimaryCardRank(), Rank.EIGHT,
			 "primaryCard = %s kickers = %s" % (rank.getPrimaryCardRank(),
							    rank.kickersAsString()))
예제 #9
0
    def testOmahaLow3(self):
	"""Test Omaha low hand ranking with EightLowRanker."""
        ranker = EightLowRanker()
	hand = Omaha.Hand.fromString("QC AH TC 5C")
	board = Board.fromString("2H JH 4D 6H KH")
	hand.setBoard(board)
	rank = ranker.rankHand(hand)
        self.assertIsNotNone(rank)
	self.assertEqual(rank.getType(), PokerRank.HIGH_CARD,
                         "rank = %s" % rank)
	self.assertEqual(rank.getPrimaryCardRank(), Rank.SIX,
			 "primaryCard = %s kickers = %s" % (rank.getPrimaryCardRank(),
							    rank.kickersAsString()))
예제 #10
0
파일: test-Omaha.py 프로젝트: von/pyPoker
    def test_combinations_of_eight_or_lower(self):
        """Test combinations_of_eight_or_lower() method on hand with board"""
        # Hand doesn't have two low cards, can't make low
        hand = Omaha.Hand.fromString("AD 9D JS QS")
	board = Board.fromString("3D 4D 5D")
	hand.setBoard(board)
        self.assert_iterator(hand.combinations_of_eight_or_lower(5),
                             count=0)
        # Board doesn't have three low cards, can't make low
        hand = Omaha.Hand.fromString("AD 9D 7D QS")
	board = Board.fromString("3D KD 5D")
	hand.setBoard(board)
        self.assert_iterator(hand.combinations_of_eight_or_lower(5),
                             count=0)
        # Three low cards in hand, 3 on board == 3 possible lows
        hand = Omaha.Hand.fromString("AD 9D 7D 8S")
	board = Board.fromString("3D 4D 5D")
	hand.setBoard(board)
        self.assert_iterator(hand.combinations_of_eight_or_lower(5),
                             count=3,
                             assert_item_function=lambda i: len(i)==5)
        # Two low cards in hand, 3 on board == 1 possible low
        hand = Omaha.Hand.fromString("AD 9D 7D QS")
	board = Board.fromString("3D 4D 5D")
	hand.setBoard(board)
        self.assert_iterator(hand.combinations_of_eight_or_lower(5),
                             count=1,
                             assert_item_function=lambda i: len(i)==5)
        # Add a low card to the board for 2 in hand, 4 on board == 4 combos
	board.addCardFromString("6D")
        self.assert_iterator(hand.combinations_of_eight_or_lower(5),
                             count=4,
                             assert_item_function=lambda i: len(i)==5)
        # Add a high card to board, should have no change
	board.addCardFromString("TD")
        self.assert_iterator(hand.combinations_of_eight_or_lower(5),
                             count=4,
                             assert_item_function=lambda i: len(i)==5)
예제 #11
0
    def testBoard(self):
	"""Verify ranking with board."""
	board = Board.fromString("5C 2S 4D")
	hand = HoldEm.Hand.fromString("AC 2C")
	hand.setBoard(board)
	rank = self.ranker.rankHand(hand)
	self.assertEqual(rank.getType(), PokerRank.PAIR,
                         "rankType = %d" % rank.getType())
	board.addCardFromString("AD")
	rank = self.ranker.rankHand(hand)
	self.assertEqual(rank.getType(), PokerRank.TWO_PAIR,
                         "rank = %d" % rank.getType())
	board.addCardFromString("3H")
	rank = self.ranker.rankHand(hand)
	self.assertEqual(rank.getType(), PokerRank.STRAIGHT,
                         "rank = %d" % rank.getType())
예제 #12
0
    def testCombinations(self):
	"""Testing Omaha combinations."""
	hand = Omaha.Hand.fromString("AC 2C 3C 4C");
	board = Board.fromString("5C 6C 7C 8C 9C");
	hand.setBoard(board)
	count = 0
	for combs in hand.combinations(2):
	    count += 1
	    self.assertEquals(len(combs), 2,
                              "combs = %s (len = %d)" % (combs, len(combs)))
	self.assertEquals(count, 6)
	count = 0
	for combs in hand.hands():
	    count += 1
	    self.assertEquals(len(combs), 5,
                              "combs = %s (len = %d)" % (combs, len(combs)))
	self.assertEquals(count, 60)
예제 #13
0
파일: test-Hand.py 프로젝트: von/pyPoker
    def testBoardCombinations(self):
	"""Test combinations with board."""
	hand = HoldEm.Hand.fromString("AD 2D")
	board = Board.fromString("3D 4D 5D")
	hand.setBoard(board)
        self.assert_iterator(hand.combinations(2),
                             count=10,
                             assert_item_function=lambda i: len(i) == 2)
        self.assert_iterator(hand.combinations(5),
                             count=1,
                             assert_item_function=lambda i: len(i) == 5)
	board.addCardFromString("6D")
        self.assert_iterator(hand.combinations(5),
                             count=6,
                             assert_item_function=lambda i: len(i) == 5)
	board.addCardFromString("7D")
        self.assert_iterator(hand.combinations(5),
                             count=21,
                             assert_item_function=lambda i: len(i) == 5)
예제 #14
0
파일: test-Hand.py 프로젝트: von/pyPoker
    def test_combinations_of_eight_or_lower_with_board(self):
        """Test combinations_of_eight_or_lower() method on hand with board"""
        hand = HoldEm.Hand.fromString("AD 2D")
	board = Board.fromString("3D 4D 5D")
	hand.setBoard(board)
        self.assert_iterator(hand.combinations_of_eight_or_lower(2),
                             count=10,
                             assert_item_function=lambda i: len(i)==2)
        self.assert_iterator(hand.combinations_of_eight_or_lower(5),
                             count=1,
                             assert_item_function=lambda i: len(i)==5)
	board.addCardFromString("6D")
        self.assert_iterator(hand.combinations_of_eight_or_lower(5),
                             count=6,
                             assert_item_function=lambda i: len(i)==5)
        # Now add a card that should have no effect on results
	board.addCardFromString("TD")
        self.assert_iterator(hand.combinations_of_eight_or_lower(5),
                             count=6,
                             assert_item_function=lambda i: len(i)==5)
예제 #15
0
def main(argv=None):
    if argv is None:
        argv = sys.argv

    usage = "usage: %prog [<options>]"
    version = "%prog version 1.0"
    parser = OptionParser(usage=usage, version=version)
    parser.add_option("-n", "--numDeals", type="int", dest="numDeals",
                      default=1000,
                      help="number of deals to simulate (Default is 100)")
    parser.add_option("-p", "--showProgress", action="store_true",
                      dest="showProgress", default=False, help="show progress")
    parser.add_option("-s", "--suitedCards", type="int", dest="suitedCards",
                      default=2,
                      help="number of suited cards in hand (default is 2)")
    (options, args) = parser.parse_args()


    print "Testing for %d deals, %d suited cards in hand" % (options.numDeals,
                                                             options.suitedCards)

    # Two-dimensional array. First dimension is number of cards of given suit
    # on flop, second dimension is number of cards of given suit on full board
    count = []
    for index in range(4):
        count.append([0] * 6)

    # The suit we care about
    suit = Suit(Suit.CLUBS)

    # Build starting deck
    startingDeck = Deck()
    for index in range(options.suitedCards):
        startingDeck.removeCards(Card((Rank(Rank.ranks[index]), suit)))

    madeFlushes = [0] * 4

    for deal in range(options.numDeals):
        deck = startingDeck.copy()
        deck.shuffle()
        board = Board()
        # Deal out and save flop
        deck.deal(board, 3)
        flop = board.copy()
        # Deal turn and river
        deck.deal(board, 2)
        # Find highest number of cards of same suit
        flushCount = 0
        flopCount = flop.suitCount(suit)
        boardCount = board.suitCount(suit)
        count[flopCount][boardCount] += 1
        if (options.suitedCards + boardCount) > 4:
            madeFlushes[flopCount] += 1
        # Update progress if so requested
        if options.showProgress and (deal % 20 == 0):
            sys.stdout.write(".")
            sys.stdout.flush()

    if options.showProgress:
        print

    colwidth = 6

    for col in ["Flopped", "Occur", "Final", "0", "1", "2", "3", "4", "5", "Flushes"]:
        print col.center(colwidth),
    print

    for index in range(len(count)):
        array = count[index]
        total = reduce(lambda a,b: a + b, array)
        print str(index).rjust(colwidth),
        print str(total).rjust(colwidth),
        print " ".ljust(colwidth),
        if total > 0:
            for subindex in range(len(array)):
                if ((subindex < index) or
                    (subindex > index + 3)):
                    print " ".ljust(colwidth),
                else:
                    s = "%3.0f%%" % (100.0 * array[subindex]/total)
                    print s.rjust(colwidth),
            s = "%3.0f%%" % (100.0 * madeFlushes[index]/total)
            print s,
        print

    totalFlushes = reduce(lambda a,b: a + b, madeFlushes)
    print "Total made flushes: %d (%3.0f%%)" % (totalFlushes,
                                                100.0 * totalFlushes / options.numDeals)
예제 #16
0
 def testBoardToString(self):
     board = Board.fromString("7C 8C 9C")
     self.assertEqual("%s" % board, "7C 8C 9C xx xx")
예제 #17
0
파일: sha.py 프로젝트: von/pyPoker
    predefined_hands.append(hg)

if len(predefined_hands) == 0:
	print "No hands read from %s. Quitting." % configFileName
	sys.exit(0)

if options.verbose:
    print "Read %d hands" % len(predefined_hands)

predefined_board = None
try:
    boardStr = config.get("board", "cards")
except:
    pass
else:
    predefined_boardboard = Board.fromString(boardStr)
    if options.verbose:
	print "Setting board: %s" % board
    game.setBoard(board)

if options.verbose:
    callback=showHandCallback
else:
    callback=None

if options.verbose:
    print "Running..."

simulator = HoldEm.Simulator(predefined_hands=predefined_hands,
			     predefined_board=predefined_board)
예제 #18
0
def main(argv=None):
    if argv is None:
        argv = sys.argv

    usage = "usage: %prog [<options>]"
    version = "%prog version 1.0"
    parser = OptionParser(usage=usage, version=version)
    parser.add_option("-n", "--numDeals", type="int", dest="numDeals",
                      default=1000,
                      help="number of deals to simulate (Default is 100)")
    parser.add_option("-p", "--showProgress", action="store_true",
                      dest="showProgress", default=False, help="show progress")
    (options, args) = parser.parse_args()

    print "Testing for %d deals" % options.numDeals

    lowDraw = 0
    lowDrawCompleted = 0
    floppedLow = 0
    lowPossible = 0
    backdoorLow = 0

    for deal in range(options.numDeals):
        deck = Deck()
        deck.shuffle()
        board = Board()
        # Deal out flop and count low cards
        deck.deal(board, 3)
        flopLowCount = board.countEightOrLower()
        if flopLowCount == 2:
            lowDraw += 1
        # Finish dealing turn and river
        deck.deal(board, 2)
        # Analyze
        lowCount = board.countEightOrLower()
        if lowCount > 2:
            lowPossible += 1
            if flopLowCount == 3:
                # Flopped a low
                floppedLow += 1
            elif flopLowCount == 2:
                # Completed a draw
                lowDrawCompleted += 1
            else:
                # Backdoor low
                backdoorLow += 1
        # Update progress if so requested
        if options.showProgress and (deal % 20 == 0):
            sys.stdout.write(".")
            sys.stdout.flush()

    if options.showProgress:
        print

    statStr = lambda name, value: "%-30s %5d (%5.2f%%)" % (name.capitalize() + ":", value, 100.0 * value / options.numDeals)

    print statStr("eight-low possible", lowPossible)
    print statStr("flopped low", floppedLow)
    print statStr("flopped low draw", lowDraw)
    print statStr("completed draw", lowDrawCompleted)
    print statStr("backdoor low", backdoorLow)
예제 #19
0
파일: sha.py 프로젝트: thecowboy/pyPoker
    game.addHandGenerator(hg)
    handNum += 1

if handNum == 0:
    print "No hands read from %s. Quitting." % configFileName
    sys.exit(0)

if options.verbose:
    print "Read %d hands" % handNum

try:
    boardStr = config.get("board", "cards")
except:
    pass
else:
    board = Board.fromString(boardStr)
    if options.verbose:
	print "Setting board: %s" % board
    game.setBoard(board)

if options.verbose:
    callback=showHandCallback
else:
    callback=None

if options.verbose:
    print "Running..."

game.simulateGames(options.numGames, callback=callback)

print game.statsToString()
예제 #20
0
def main(argv=None):
    if argv is None:
        argv = sys.argv

    usage = "usage: %prog [<options>]"
    version = "%prog version 1.0"
    parser = OptionParser(usage)
    parser.add_option("-B", "--board", type="string", dest="board",
                      metavar="cards", help="specify the flop")
    parser.add_option("-g", "--game", type="string", dest="game",
                      default="holdem", help="game to simulate")
    parser.add_option("-H", "--hand", type="string", dest="hands",
                      metavar="cards", action="append", help="add a hand")
    parser.add_option("-n", "--numGames", type="int", dest="numGames",
                      default=100, help="number of games to simulate")
    parser.add_option("-N", "--numHands", type="int", dest="numHands",
                      default=10, help="number of hands in play")
    parser.add_option("-p", "--showProgress", action="store_true",
                      dest="showProgress", default=False, help="show progress")
    parser.add_option("-P", "--profile", type="string", dest="profile",
                      default=None, help="enable profiling")
    parser.add_option("-q", "--quiet", action="store_true",
                      dest="quiet", default=False, help="run quietly")
    parser.add_option("-v", "--verbose", action="store_true", dest="verbose",
                      default=False, help="show results of each hand")

    (options, args) = parser.parse_args()

    game = {
        "holdem" : HoldEm.Game,
        "5cardstud" : FiveCardStud.Game,
        "fivecardstud" : FiveCardStud.Game,
        "5cardstudhilo" : FiveCardStud.HiLoGame,
        "fivecardstudhilo" : FiveCardStud.HiLoGame,
        "7cardstud" : SevenCardStud.Game,
        "sevencardstud" : SevenCardStud.Game,
        "7cardstudhilo" : SevenCardStud.HiLoGame,
        "sevencardstudhilo" : SevenCardStud.HiLoGame,
        "omaha" : Omaha.Game,
        "omahahilo" : Omaha.HiLoGame,
        }

    if game.has_key(options.game):
        GameClass = game[options.game]
    else:
        print "Unknown game type \"%s\"" % options.game
        print "Known games are:"
        for name in game.keys():
            print "\t%s" % name
        sys.exit(1)

    maxHands = GameClass.getMaxHands()
    if options.numHands > maxHands:
        options.numHands = maxHands
        if options.verbose:
            print "Reducing number of hands to %d" % maxHands

    game = GameClass(numHands = options.numHands)
    HandClass = GameClass.getHandClass()

    if options.hands is not None:
        hands = Hands()
        for hand in options.hands:
            hands.addHand(HandClass.fromString(hand))
        game.addHands(hands)

    if options.board:
        game.setBoard(Board.fromString(options.board))

    if options.verbose:
        callback=showHandCallback

        print "Simulating %d games of %s" % (options.numGames,
					 GameClass.gameName)
        print "%d Hands" % game.getNumHands(),
        if game.hands:
            print ": %s" % game.hands
        else:
            print
        if game.board:
            print "Board: %s" % game.board
    elif options.showProgress:
        callback=showProgressCallback
    else:
        callback=None

    cmd="game.simulateGames(options.numGames, callback=callback)"

    if options.profile:
        import cProfile
        if options.verbose:
            print "Profiling to file %s" % options.profile
        # Need to supply context here as run() will just use __main__
        cProfile.runctx(cmd, globals(), locals(), filename=options.profile)
    else:
        eval(cmd)

    if options.showProgress:
        print

    if not options.quiet:
        print game.statsToString()