#!/usr/bin/python #Copyright 2008 Carl Gherardi #This program is free software: you can redistribute it and/or modify #it under the terms of the GNU Affero General Public License as published by #the Free Software Foundation, version 3 of the License. # #This program is distributed in the hope that it will be useful, #but WITHOUT ANY WARRANTY; without even the implied warranty of #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #GNU General Public License for more details. # #You should have received a copy of the GNU Affero General Public License #along with this program. If not, see . #In the "official" distribution you can find the license in #agpl-3.0.txt in the docs folder of the package. #fpdb modules import Card class DerivedStats(): def __init__(self, hand): self.hand = hand self.hands = {} self.handsplayers = {} def getStats(self, hand): for player in hand.players: self.handsplayers[player[1]] = {} #Init vars that may not be used, but still need to be inserted. self.handsplayers[player[1]]['street4Aggr'] = False self.assembleHands(self.hand) self.assembleHandsPlayers(self.hand) print "hands =", self.hands print "handsplayers =", self.handsplayers def getHands(self): return self.hands def getHandsPlayers(self): return self.handsplayers def assembleHands(self, hand): self.hands['tableName'] = hand.tablename self.hands['siteHandNo'] = hand.handid self.hands['gametypeId'] = None # Leave None, handled later after checking db self.hands['handStart'] = hand.starttime # format this! self.hands['importTime'] = None self.hands['seats'] = self.countPlayers(hand) self.hands['maxSeats'] = hand.maxseats self.hands['texture'] = None # No calculation done for this yet. # This (i think...) is correct for both stud and flop games, as hand.board['street'] disappears, and # those values remain default in stud. boardcards = hand.board['FLOP'] + hand.board['TURN'] + hand.board['RIVER'] + [u'0x', u'0x', u'0x', u'0x', u'0x'] cards = [Card.encodeCard(c) for c in boardcards[0:5]] self.hands['boardcard1'] = cards[0] self.hands['boardcard2'] = cards[1] self.hands['boardcard3'] = cards[2] self.hands['boardcard4'] = cards[3] self.hands['boardcard5'] = cards[4] #print "DEBUG: self.getStreetTotals = (%s, %s, %s, %s, %s)" % hand.getStreetTotals() #FIXME: Pot size still in decimal, needs to be converted to cents (self.hands['street1Pot'], self.hands['street2Pot'], self.hands['street3Pot'], self.hands['street4Pot'], self.hands['showdownPot']) = hand.getStreetTotals() self.vpip(hand) # Gives playersVpi (num of players vpip) #print "DEBUG: vpip: %s" %(self.hands['playersVpi']) self.playersAtStreetX(hand) # Gives playersAtStreet1..4 and Showdown #print "DEBUG: playersAtStreet 1:'%s' 2:'%s' 3:'%s' 4:'%s'" %(self.hands['playersAtStreet1'],self.hands['playersAtStreet2'],self.hands['playersAtStreet3'],self.hands['playersAtStreet4']) self.streetXRaises(hand) # Empty function currently # comment TEXT, # commentTs DATETIME def assembleHandsPlayers(self, hand): #hand.players = [[seat, name, chips],[seat, name, chips]] for player in hand.players: self.handsplayers[player[1]]['seatNo'] = player[0] self.handsplayers[player[1]]['startCash'] = player[2] for i, street in enumerate(hand.actionStreets[1:]): self.aggr(self.hand, i) def assembleHudCache(self, hand): # # def generateHudCacheData(player_ids, base, category, action_types, allIns, actionTypeByNo # # ,winnings, totalWinnings, positions, actionTypes, actionAmounts, antes): # #"""calculates data for the HUD during import. IMPORTANT: if you change this method make # # sure to also change the following storage method and table_viewer.prepare_data if necessary # #""" # #print "generateHudCacheData, len(player_ids)=", len(player_ids) # #setup subarrays of the result dictionary. # street0VPI=[] # street0Aggr=[] # street0_3BChance=[] # street0_3BDone=[] # street1Seen=[] # street2Seen=[] # street3Seen=[] # street4Seen=[] # sawShowdown=[] # street1Aggr=[] # street2Aggr=[] # street3Aggr=[] # street4Aggr=[] # otherRaisedStreet1=[] # otherRaisedStreet2=[] # otherRaisedStreet3=[] # otherRaisedStreet4=[] # foldToOtherRaisedStreet1=[] # foldToOtherRaisedStreet2=[] # foldToOtherRaisedStreet3=[] # foldToOtherRaisedStreet4=[] # wonWhenSeenStreet1=[] # # wonAtSD=[] # stealAttemptChance=[] # stealAttempted=[] # hudDataPositions=[] # # street0Calls=[] # street1Calls=[] # street2Calls=[] # street3Calls=[] # street4Calls=[] # street0Bets=[] # street1Bets=[] # street2Bets=[] # street3Bets=[] # street4Bets=[] # #street0Raises=[] # #street1Raises=[] # #street2Raises=[] # #street3Raises=[] # #street4Raises=[] # # # Summary figures for hand table: # result={} # result['playersVpi']=0 # result['playersAtStreet1']=0 # result['playersAtStreet2']=0 # result['playersAtStreet3']=0 # result['playersAtStreet4']=0 # result['playersAtShowdown']=0 # result['street0Raises']=0 # result['street1Raises']=0 # result['street2Raises']=0 # result['street3Raises']=0 # result['street4Raises']=0 # result['street1Pot']=0 # result['street2Pot']=0 # result['street3Pot']=0 # result['street4Pot']=0 # result['showdownPot']=0 # # firstPfRaiseByNo=-1 # firstPfRaiserId=-1 # firstPfRaiserNo=-1 # firstPfCallByNo=-1 # firstPfCallerId=-1 # # for i, action in enumerate(actionTypeByNo[0]): # if action[1] == "bet": # firstPfRaiseByNo = i # firstPfRaiserId = action[0] # for j, pid in enumerate(player_ids): # if pid == firstPfRaiserId: # firstPfRaiserNo = j # break # break # for i, action in enumerate(actionTypeByNo[0]): # if action[1] == "call": # firstPfCallByNo = i # firstPfCallerId = action[0] # break # firstPlayId = firstPfCallerId # if firstPfRaiseByNo <> -1: # if firstPfRaiseByNo < firstPfCallByNo or firstPfCallByNo == -1: # firstPlayId = firstPfRaiserId # # # cutoffId=-1 # buttonId=-1 # sbId=-1 # bbId=-1 # if base=="hold": # for player, pos in enumerate(positions): # if pos == 1: # cutoffId = player_ids[player] # if pos == 0: # buttonId = player_ids[player] # if pos == 'S': # sbId = player_ids[player] # if pos == 'B': # bbId = player_ids[player] # # someoneStole=False # # #run a loop for each player preparing the actual values that will be commited to SQL # for player in xrange(len(player_ids)): # #set default values # myStreet0VPI=False # myStreet0Aggr=False # myStreet0_3BChance=False # myStreet0_3BDone=False # myStreet1Seen=False # myStreet2Seen=False # myStreet3Seen=False # myStreet4Seen=False # mySawShowdown=False # myStreet1Aggr=False # myStreet2Aggr=False # myStreet3Aggr=False # myStreet4Aggr=False # myOtherRaisedStreet1=False # myOtherRaisedStreet2=False # myOtherRaisedStreet3=False # myOtherRaisedStreet4=False # myFoldToOtherRaisedStreet1=False # myFoldToOtherRaisedStreet2=False # myFoldToOtherRaisedStreet3=False # myFoldToOtherRaisedStreet4=False # myWonWhenSeenStreet1=0.0 # myWonAtSD=0.0 # myStealAttemptChance=False # myStealAttempted=False # myStreet0Calls=0 # myStreet1Calls=0 # myStreet2Calls=0 # myStreet3Calls=0 # myStreet4Calls=0 # myStreet0Bets=0 # myStreet1Bets=0 # myStreet2Bets=0 # myStreet3Bets=0 # myStreet4Bets=0 # #myStreet0Raises=0 # #myStreet1Raises=0 # #myStreet2Raises=0 # #myStreet3Raises=0 # #myStreet4Raises=0 # # #calculate VPIP and PFR # street=0 # heroPfRaiseCount=0 # for currentAction in action_types[street][player]: # finally individual actions # if currentAction == "bet": # myStreet0Aggr = True # if currentAction == "bet" or currentAction == "call": # myStreet0VPI = True # # if myStreet0VPI: # result['playersVpi'] += 1 # myStreet0Calls = action_types[street][player].count('call') # myStreet0Bets = action_types[street][player].count('bet') # # street0Raises = action_types[street][player].count('raise') bet count includes raises for now # result['street0Raises'] += myStreet0Bets # # #PF3BChance and PF3B # pfFold=-1 # pfRaise=-1 # if firstPfRaiseByNo != -1: # for i, actionType in enumerate(actionTypeByNo[0]): # if actionType[0] == player_ids[player]: # if actionType[1] == "bet" and pfRaise == -1 and i > firstPfRaiseByNo: # pfRaise = i # if actionType[1] == "fold" and pfFold == -1: # pfFold = i # if pfFold == -1 or pfFold > firstPfRaiseByNo: # myStreet0_3BChance = True # if pfRaise > firstPfRaiseByNo: # myStreet0_3BDone = True # # #steal calculations # if base=="hold": # if len(player_ids)>=3: # no point otherwise # was 5, use 3 to match pokertracker definition # if positions[player]==1: # if firstPfRaiserId==player_ids[player] \ # and (firstPfCallByNo==-1 or firstPfCallByNo>firstPfRaiseByNo): # myStealAttempted=True # myStealAttemptChance=True # if firstPlayId==cutoffId or firstPlayId==buttonId or firstPlayId==sbId or firstPlayId==bbId or firstPlayId==-1: # myStealAttemptChance=True # if positions[player]==0: # if firstPfRaiserId==player_ids[player] \ # and (firstPfCallByNo==-1 or firstPfCallByNo>firstPfRaiseByNo): # myStealAttempted=True # myStealAttemptChance=True # if firstPlayId==buttonId or firstPlayId==sbId or firstPlayId==bbId or firstPlayId==-1: # myStealAttemptChance=True # if positions[player]=='S': # if firstPfRaiserId==player_ids[player] \ # and (firstPfCallByNo==-1 or firstPfCallByNo>firstPfRaiseByNo): # myStealAttempted=True # myStealAttemptChance=True # if firstPlayId==sbId or firstPlayId==bbId or firstPlayId==-1: # myStealAttemptChance=True # if positions[player]=='B': # pass # # if myStealAttempted: # someoneStole=True # # # #calculate saw* values # isAllIn = False # if any(i for i in allIns[0][player]): # isAllIn = True # if (len(action_types[1][player])>0 or isAllIn): # myStreet1Seen = True # # if any(i for i in allIns[1][player]): # isAllIn = True # if (len(action_types[2][player])>0 or isAllIn): # myStreet2Seen = True # # if any(i for i in allIns[2][player]): # isAllIn = True # if (len(action_types[3][player])>0 or isAllIn): # myStreet3Seen = True # # #print "base:", base # if base=="hold": # mySawShowdown = True # if any(actiontype == "fold" for actiontype in action_types[3][player]): # mySawShowdown = False # else: # #print "in else" # if any(i for i in allIns[3][player]): # isAllIn = True # if (len(action_types[4][player])>0 or isAllIn): # #print "in if" # myStreet4Seen = True # # mySawShowdown = True # if any(actiontype == "fold" for actiontype in action_types[4][player]): # mySawShowdown = False # # if myStreet1Seen: # result['playersAtStreet1'] += 1 # if myStreet2Seen: # result['playersAtStreet2'] += 1 # if myStreet3Seen: # result['playersAtStreet3'] += 1 # if myStreet4Seen: # result['playersAtStreet4'] += 1 # if mySawShowdown: # result['playersAtShowdown'] += 1 # # #flop stuff # street=1 # if myStreet1Seen: # if any(actiontype == "bet" for actiontype in action_types[street][player]): # myStreet1Aggr = True # # myStreet1Calls = action_types[street][player].count('call') # myStreet1Bets = action_types[street][player].count('bet') # # street1Raises = action_types[street][player].count('raise') bet count includes raises for now # result['street1Raises'] += myStreet1Bets # # for otherPlayer in xrange(len(player_ids)): # if player==otherPlayer: # pass # else: # for countOther in xrange(len(action_types[street][otherPlayer])): # if action_types[street][otherPlayer][countOther]=="bet": # myOtherRaisedStreet1=True # for countOtherFold in xrange(len(action_types[street][player])): # if action_types[street][player][countOtherFold]=="fold": # myFoldToOtherRaisedStreet1=True # # #turn stuff - copy of flop with different vars # street=2 # if myStreet2Seen: # if any(actiontype == "bet" for actiontype in action_types[street][player]): # myStreet2Aggr = True # # myStreet2Calls = action_types[street][player].count('call') # myStreet2Bets = action_types[street][player].count('bet') # # street2Raises = action_types[street][player].count('raise') bet count includes raises for now # result['street2Raises'] += myStreet2Bets # # for otherPlayer in xrange(len(player_ids)): # if player==otherPlayer: # pass # else: # for countOther in xrange(len(action_types[street][otherPlayer])): # if action_types[street][otherPlayer][countOther]=="bet": # myOtherRaisedStreet2=True # for countOtherFold in xrange(len(action_types[street][player])): # if action_types[street][player][countOtherFold]=="fold": # myFoldToOtherRaisedStreet2=True # # #river stuff - copy of flop with different vars # street=3 # if myStreet3Seen: # if any(actiontype == "bet" for actiontype in action_types[street][player]): # myStreet3Aggr = True # # myStreet3Calls = action_types[street][player].count('call') # myStreet3Bets = action_types[street][player].count('bet') # # street3Raises = action_types[street][player].count('raise') bet count includes raises for now # result['street3Raises'] += myStreet3Bets # # for otherPlayer in xrange(len(player_ids)): # if player==otherPlayer: # pass # else: # for countOther in xrange(len(action_types[street][otherPlayer])): # if action_types[street][otherPlayer][countOther]=="bet": # myOtherRaisedStreet3=True # for countOtherFold in xrange(len(action_types[street][player])): # if action_types[street][player][countOtherFold]=="fold": # myFoldToOtherRaisedStreet3=True # # #stud river stuff - copy of flop with different vars # street=4 # if myStreet4Seen: # if any(actiontype == "bet" for actiontype in action_types[street][player]): # myStreet4Aggr=True # # myStreet4Calls = action_types[street][player].count('call') # myStreet4Bets = action_types[street][player].count('bet') # # street4Raises = action_types[street][player].count('raise') bet count includes raises for now # result['street4Raises'] += myStreet4Bets # # for otherPlayer in xrange(len(player_ids)): # if player==otherPlayer: # pass # else: # for countOther in xrange(len(action_types[street][otherPlayer])): # if action_types[street][otherPlayer][countOther]=="bet": # myOtherRaisedStreet4=True # for countOtherFold in xrange(len(action_types[street][player])): # if action_types[street][player][countOtherFold]=="fold": # myFoldToOtherRaisedStreet4=True # # if winnings[player] != 0: # if myStreet1Seen: # myWonWhenSeenStreet1 = winnings[player] / float(totalWinnings) # if mySawShowdown: # myWonAtSD=myWonWhenSeenStreet1 # # #add each value to the appropriate array # street0VPI.append(myStreet0VPI) # street0Aggr.append(myStreet0Aggr) # street0_3BChance.append(myStreet0_3BChance) # street0_3BDone.append(myStreet0_3BDone) # street1Seen.append(myStreet1Seen) # street2Seen.append(myStreet2Seen) # street3Seen.append(myStreet3Seen) # street4Seen.append(myStreet4Seen) # sawShowdown.append(mySawShowdown) # street1Aggr.append(myStreet1Aggr) # street2Aggr.append(myStreet2Aggr) # street3Aggr.append(myStreet3Aggr) # street4Aggr.append(myStreet4Aggr) # otherRaisedStreet1.append(myOtherRaisedStreet1) # otherRaisedStreet2.append(myOtherRaisedStreet2) # otherRaisedStreet3.append(myOtherRaisedStreet3) # otherRaisedStreet4.append(myOtherRaisedStreet4) # foldToOtherRaisedStreet1.append(myFoldToOtherRaisedStreet1) # foldToOtherRaisedStreet2.append(myFoldToOtherRaisedStreet2) # foldToOtherRaisedStreet3.append(myFoldToOtherRaisedStreet3) # foldToOtherRaisedStreet4.append(myFoldToOtherRaisedStreet4) # wonWhenSeenStreet1.append(myWonWhenSeenStreet1) # wonAtSD.append(myWonAtSD) # stealAttemptChance.append(myStealAttemptChance) # stealAttempted.append(myStealAttempted) # if base=="hold": # pos=positions[player] # if pos=='B': # hudDataPositions.append('B') # elif pos=='S': # hudDataPositions.append('S') # elif pos==0: # hudDataPositions.append('D') # elif pos==1: # hudDataPositions.append('C') # elif pos>=2 and pos<=4: # hudDataPositions.append('M') # elif pos>=5 and pos<=8: # hudDataPositions.append('E') # ### RHH Added this elif to handle being a dead hand before the BB (pos==9) # elif pos==9: # hudDataPositions.append('X') # else: # raise FpdbError("invalid position") # elif base=="stud": # #todo: stud positions and steals # pass # # street0Calls.append(myStreet0Calls) # street1Calls.append(myStreet1Calls) # street2Calls.append(myStreet2Calls) # street3Calls.append(myStreet3Calls) # street4Calls.append(myStreet4Calls) # street0Bets.append(myStreet0Bets) # street1Bets.append(myStreet1Bets) # street2Bets.append(myStreet2Bets) # street3Bets.append(myStreet3Bets) # street4Bets.append(myStreet4Bets) # #street0Raises.append(myStreet0Raises) # #street1Raises.append(myStreet1Raises) # #street2Raises.append(myStreet2Raises) # #street3Raises.append(myStreet3Raises) # #street4Raises.append(myStreet4Raises) # # #add each array to the to-be-returned dictionary # result['street0VPI']=street0VPI # result['street0Aggr']=street0Aggr # result['street0_3BChance']=street0_3BChance # result['street0_3BDone']=street0_3BDone # result['street1Seen']=street1Seen # result['street2Seen']=street2Seen # result['street3Seen']=street3Seen # result['street4Seen']=street4Seen # result['sawShowdown']=sawShowdown # # result['street1Aggr']=street1Aggr # result['otherRaisedStreet1']=otherRaisedStreet1 # result['foldToOtherRaisedStreet1']=foldToOtherRaisedStreet1 # result['street2Aggr']=street2Aggr # result['otherRaisedStreet2']=otherRaisedStreet2 # result['foldToOtherRaisedStreet2']=foldToOtherRaisedStreet2 # result['street3Aggr']=street3Aggr # result['otherRaisedStreet3']=otherRaisedStreet3 # result['foldToOtherRaisedStreet3']=foldToOtherRaisedStreet3 # result['street4Aggr']=street4Aggr # result['otherRaisedStreet4']=otherRaisedStreet4 # result['foldToOtherRaisedStreet4']=foldToOtherRaisedStreet4 # result['wonWhenSeenStreet1']=wonWhenSeenStreet1 # result['wonAtSD']=wonAtSD # result['stealAttemptChance']=stealAttemptChance # result['stealAttempted']=stealAttempted # result['street0Calls']=street0Calls # result['street1Calls']=street1Calls # result['street2Calls']=street2Calls # result['street3Calls']=street3Calls # result['street4Calls']=street4Calls # result['street0Bets']=street0Bets # result['street1Bets']=street1Bets # result['street2Bets']=street2Bets # result['street3Bets']=street3Bets # result['street4Bets']=street4Bets # #result['street0Raises']=street0Raises # #result['street1Raises']=street1Raises # #result['street2Raises']=street2Raises # #result['street3Raises']=street3Raises # #result['street4Raises']=street4Raises # # #now the various steal values # foldBbToStealChance=[] # foldedBbToSteal=[] # foldSbToStealChance=[] # foldedSbToSteal=[] # for player in xrange(len(player_ids)): # myFoldBbToStealChance=False # myFoldedBbToSteal=False # myFoldSbToStealChance=False # myFoldedSbToSteal=False # # if base=="hold": # if someoneStole and (positions[player]=='B' or positions[player]=='S') and firstPfRaiserId!=player_ids[player]: # street=0 # for count in xrange(len(action_types[street][player])):#individual actions # if positions[player]=='B': # myFoldBbToStealChance=True # if action_types[street][player][count]=="fold": # myFoldedBbToSteal=True # if positions[player]=='S': # myFoldSbToStealChance=True # if action_types[street][player][count]=="fold": # myFoldedSbToSteal=True # # # foldBbToStealChance.append(myFoldBbToStealChance) # foldedBbToSteal.append(myFoldedBbToSteal) # foldSbToStealChance.append(myFoldSbToStealChance) # foldedSbToSteal.append(myFoldedSbToSteal) # result['foldBbToStealChance']=foldBbToStealChance # result['foldedBbToSteal']=foldedBbToSteal # result['foldSbToStealChance']=foldSbToStealChance # result['foldedSbToSteal']=foldedSbToSteal # # #now CB # street1CBChance=[] # street1CBDone=[] # didStreet1CB=[] # for player in xrange(len(player_ids)): # myStreet1CBChance=False # myStreet1CBDone=False # # if street0VPI[player]: # myStreet1CBChance=True # if street1Aggr[player]: # myStreet1CBDone=True # didStreet1CB.append(player_ids[player]) # # street1CBChance.append(myStreet1CBChance) # street1CBDone.append(myStreet1CBDone) # result['street1CBChance']=street1CBChance # result['street1CBDone']=street1CBDone # # #now 2B # street2CBChance=[] # street2CBDone=[] # didStreet2CB=[] # for player in xrange(len(player_ids)): # myStreet2CBChance=False # myStreet2CBDone=False # # if street1CBDone[player]: # myStreet2CBChance=True # if street2Aggr[player]: # myStreet2CBDone=True # didStreet2CB.append(player_ids[player]) # # street2CBChance.append(myStreet2CBChance) # street2CBDone.append(myStreet2CBDone) # result['street2CBChance']=street2CBChance # result['street2CBDone']=street2CBDone # # #now 3B # street3CBChance=[] # street3CBDone=[] # didStreet3CB=[] # for player in xrange(len(player_ids)): # myStreet3CBChance=False # myStreet3CBDone=False # # if street2CBDone[player]: # myStreet3CBChance=True # if street3Aggr[player]: # myStreet3CBDone=True # didStreet3CB.append(player_ids[player]) # # street3CBChance.append(myStreet3CBChance) # street3CBDone.append(myStreet3CBDone) # result['street3CBChance']=street3CBChance # result['street3CBDone']=street3CBDone # # #and 4B # street4CBChance=[] # street4CBDone=[] # didStreet4CB=[] # for player in xrange(len(player_ids)): # myStreet4CBChance=False # myStreet4CBDone=False # # if street3CBDone[player]: # myStreet4CBChance=True # if street4Aggr[player]: # myStreet4CBDone=True # didStreet4CB.append(player_ids[player]) # # street4CBChance.append(myStreet4CBChance) # street4CBDone.append(myStreet4CBDone) # result['street4CBChance']=street4CBChance # result['street4CBDone']=street4CBDone # # # result['position']=hudDataPositions # # foldToStreet1CBChance=[] # foldToStreet1CBDone=[] # foldToStreet2CBChance=[] # foldToStreet2CBDone=[] # foldToStreet3CBChance=[] # foldToStreet3CBDone=[] # foldToStreet4CBChance=[] # foldToStreet4CBDone=[] # # for player in xrange(len(player_ids)): # myFoldToStreet1CBChance=False # myFoldToStreet1CBDone=False # foldToStreet1CBChance.append(myFoldToStreet1CBChance) # foldToStreet1CBDone.append(myFoldToStreet1CBDone) # # myFoldToStreet2CBChance=False # myFoldToStreet2CBDone=False # foldToStreet2CBChance.append(myFoldToStreet2CBChance) # foldToStreet2CBDone.append(myFoldToStreet2CBDone) # # myFoldToStreet3CBChance=False # myFoldToStreet3CBDone=False # foldToStreet3CBChance.append(myFoldToStreet3CBChance) # foldToStreet3CBDone.append(myFoldToStreet3CBDone) # # myFoldToStreet4CBChance=False # myFoldToStreet4CBDone=False # foldToStreet4CBChance.append(myFoldToStreet4CBChance) # foldToStreet4CBDone.append(myFoldToStreet4CBDone) # # if len(didStreet1CB)>=1: # generateFoldToCB(1, player_ids, didStreet1CB, street1CBDone, foldToStreet1CBChance, foldToStreet1CBDone, actionTypeByNo) # # if len(didStreet2CB)>=1: # generateFoldToCB(2, player_ids, didStreet2CB, street2CBDone, foldToStreet2CBChance, foldToStreet2CBDone, actionTypeByNo) # # if len(didStreet3CB)>=1: # generateFoldToCB(3, player_ids, didStreet3CB, street3CBDone, foldToStreet3CBChance, foldToStreet3CBDone, actionTypeByNo) # # if len(didStreet4CB)>=1: # generateFoldToCB(4, player_ids, didStreet4CB, street4CBDone, foldToStreet4CBChance, foldToStreet4CBDone, actionTypeByNo) # # result['foldToStreet1CBChance']=foldToStreet1CBChance # result['foldToStreet1CBDone']=foldToStreet1CBDone # result['foldToStreet2CBChance']=foldToStreet2CBChance # result['foldToStreet2CBDone']=foldToStreet2CBDone # result['foldToStreet3CBChance']=foldToStreet3CBChance # result['foldToStreet3CBDone']=foldToStreet3CBDone # result['foldToStreet4CBChance']=foldToStreet4CBChance # result['foldToStreet4CBDone']=foldToStreet4CBDone # # # totalProfit=[] # # street1CheckCallRaiseChance=[] # street1CheckCallRaiseDone=[] # street2CheckCallRaiseChance=[] # street2CheckCallRaiseDone=[] # street3CheckCallRaiseChance=[] # street3CheckCallRaiseDone=[] # street4CheckCallRaiseChance=[] # street4CheckCallRaiseDone=[] # #print "b4 totprof calc, len(playerIds)=", len(player_ids) # for pl in xrange(len(player_ids)): # #print "pl=", pl # myTotalProfit=winnings[pl] # still need to deduct other costs # if antes: # myTotalProfit=winnings[pl] - antes[pl] # for i in xrange(len(actionTypes)): #iterate through streets # #for j in xrange(len(actionTypes[i])): #iterate through names (using pl loop above) # for k in xrange(len(actionTypes[i][pl])): #iterate through individual actions of that player on that street # myTotalProfit -= actionAmounts[i][pl][k] # # myStreet1CheckCallRaiseChance=False # myStreet1CheckCallRaiseDone=False # myStreet2CheckCallRaiseChance=False # myStreet2CheckCallRaiseDone=False # myStreet3CheckCallRaiseChance=False # myStreet3CheckCallRaiseDone=False # myStreet4CheckCallRaiseChance=False # myStreet4CheckCallRaiseDone=False # # #print "myTotalProfit=", myTotalProfit # totalProfit.append(myTotalProfit) # #print "totalProfit[]=", totalProfit # # street1CheckCallRaiseChance.append(myStreet1CheckCallRaiseChance) # street1CheckCallRaiseDone.append(myStreet1CheckCallRaiseDone) # street2CheckCallRaiseChance.append(myStreet2CheckCallRaiseChance) # street2CheckCallRaiseDone.append(myStreet2CheckCallRaiseDone) # street3CheckCallRaiseChance.append(myStreet3CheckCallRaiseChance) # street3CheckCallRaiseDone.append(myStreet3CheckCallRaiseDone) # street4CheckCallRaiseChance.append(myStreet4CheckCallRaiseChance) # street4CheckCallRaiseDone.append(myStreet4CheckCallRaiseDone) # # result['totalProfit']=totalProfit # #print "res[totalProfit]=", result['totalProfit'] # # result['street1CheckCallRaiseChance']=street1CheckCallRaiseChance # result['street1CheckCallRaiseDone']=street1CheckCallRaiseDone # result['street2CheckCallRaiseChance']=street2CheckCallRaiseChance # result['street2CheckCallRaiseDone']=street2CheckCallRaiseDone # result['street3CheckCallRaiseChance']=street3CheckCallRaiseChance # result['street3CheckCallRaiseDone']=street3CheckCallRaiseDone # result['street4CheckCallRaiseChance']=street4CheckCallRaiseChance # result['street4CheckCallRaiseDone']=street4CheckCallRaiseDone # return result # #end def generateHudCacheData pass def vpip(self, hand): vpipers = set() for act in hand.actions[hand.actionStreets[1]]: if act[1] in ('calls','bets', 'raises'): vpipers.add(act[0]) self.hands['playersVpi'] = len(vpipers) for player in hand.players: if player[1] in vpipers: self.handsplayers[player[1]]['vpip'] = True else: self.handsplayers[player[1]]['vpip'] = False def playersAtStreetX(self, hand): """ playersAtStreet1 SMALLINT NOT NULL, /* num of players seeing flop/street4/draw1 */""" # self.actions[street] is a list of all actions in a tuple, contining the player name first # [ (player, action, ....), (player2, action, ...) ] # The number of unique players in the list per street gives the value for playersAtStreetXXX # FIXME?? - This isn't couting people that are all in - at least showdown needs to reflect this self.hands['playersAtStreet1'] = 0 self.hands['playersAtStreet2'] = 0 self.hands['playersAtStreet3'] = 0 self.hands['playersAtStreet4'] = 0 self.hands['playersAtShowdown'] = 0 for street in hand.actionStreets: actors = {} for act in hand.actions[street]: actors[act[0]] = 1 #print "len(actors.keys(%s)): %s" % ( street, len(actors.keys())) if hand.gametype['base'] in ("hold"): if street in "FLOP": self.hands['playersAtStreet1'] = len(actors.keys()) elif street in "TURN": self.hands['playersAtStreet2'] = len(actors.keys()) elif street in "RIVER": self.hands['playersAtStreet3'] = len(actors.keys()) elif hand.gametype['base'] in ("stud"): if street in "FOURTH": self.hands['playersAtStreet1'] = len(actors.keys()) elif street in "FIFTH": self.hands['playersAtStreet2'] = len(actors.keys()) elif street in "SIXTH": self.hands['playersAtStreet3'] = len(actors.keys()) elif street in "SEVENTH": self.hands['playersAtStreet4'] = len(actors.keys()) elif hand.gametype['base'] in ("draw"): if street in "DRAWONE": self.hands['playersAtStreet1'] = len(actors.keys()) elif street in "DRAWTWO": self.hands['playersAtStreet2'] = len(actors.keys()) elif street in "DRAWTHREE": self.hands['playersAtStreet3'] = len(actors.keys()) #Need playersAtShowdown def streetXRaises(self, hand): # self.actions[street] is a list of all actions in a tuple, contining the action as the second element # [ (player, action, ....), (player2, action, ...) ] # No idea what this value is actually supposed to be # In theory its "num small bets paid to see flop/street4, including blind" which makes sense for limit. Not so useful for nl # Leaving empty for the moment, self.hands['street0Raises'] = 0 # /* num small bets paid to see flop/street4, including blind */ self.hands['street1Raises'] = 0 # /* num small bets paid to see turn/street5 */ self.hands['street2Raises'] = 0 # /* num big bets paid to see river/street6 */ self.hands['street3Raises'] = 0 # /* num big bets paid to see sd/street7 */ self.hands['street4Raises'] = 0 # /* num big bets paid to see showdown */ def aggr(self, hand, i): aggrers = set() for act in hand.actions[hand.actionStreets[i]]: if act[1] in ('completes', 'raises'): aggrers.add(act[0]) for player in hand.players: if player[1] in aggrers: self.handsplayers[player[1]]['street%sAggr' % i] = True else: self.handsplayers[player[1]]['street%sAggr' % i] = False def countPlayers(self, hand): pass