Exemplo n.º 1
0
 def analyse_showdown(self, ranges, order, is_passive, userids):
     """
     Create a showdown with given userids. Pre-river if pre-river.
     """
     showdowns = self.session.query(GameHistoryShowdown)  \
         .filter(GameHistoryShowdown.gameid == self.game.gameid)  \
         .filter(GameHistoryShowdown.order == order)  \
         .filter(GameHistoryShowdown.is_passive == is_passive).all()
     assert len(showdowns) == 1
     logging.debug("gameid %d, order %d, confirmed existing showdown",
                   self.game.gameid, order)
     showdown = showdowns[0]
     # TODO: REVISIT: this ignores ranges of folded players
     # It might make a difference in situations where a player has (for
     # example) limited their range to Ax and later folded, hence surely
     # removing an ace from the deck for the other players (significantly
     # changing their equities)
     # Actually, where it makes a difference, it would be really neat to see
     # it. Imagine someone saying "hey, this stupid site says I made a bad
     # call here with 23% equity when really I had 32% equity and it was a
     # great call!" Well no actually, the card removal effects of the folded
     # players change your equity, and you suck at poker.
     range_map = {k: v for k, v in ranges.iteritems() if k in userids}
     equity_map, iterations = showdown_equity(range_map, self.game.board)
     logging.debug('gameid %d, order %d, is_passive %r, factor %0.8f, '
                   'showdown with userids: %r, equity: %r '
                   '(iterations %d)',
                   self.game.gameid, order, is_passive, showdown.factor,
                   userids, equity_map, iterations)
     existing_equities = {p.showdown_order: p
         for p in showdown.participants}  #pylint:disable=no-member
     for showdown_order, userid in enumerate(userids):
         # create if not exist, otherwise update
         if showdown_order in existing_equities:
             participant = existing_equities[showdown_order]
         else:
             # TODO: REVISIT: this is ordered by situation player order,
             # not showdown order
             participant = GameHistoryShowdownEquity()
             self.session.add(participant)
             existing_equities[showdown_order] = participant
             participant.gameid = self.game.gameid
             participant.order = order
             participant.is_passive = is_passive
             participant.showdown_order = showdown_order
             participant.userid = userid
         participant.equity = equity_map[userid]
     self.showdown_payments(showdown=showdown,
                            equities=existing_equities.values())