git19 (REIMPORT needed) - updated everything to use new action counting method -> it half works, but fails to store (or print) a substantial proportion of the action_nos

removed bunch of commented prints from fpdb_parse
This commit is contained in:
steffen123 2008-08-08 22:03:43 +01:00
parent bf691fe9e7
commit 0e84dceb1f
16 changed files with 147 additions and 212 deletions

View File

@ -9,14 +9,14 @@ add instructions how to reimport
split python requirements, get deep links for windows DL for everything split python requirements, get deep links for windows DL for everything
GUI license info GUI license info
change action_no to be total for this street rather than just for one player. change .expected.txt files accordingly. calculate 3B/4B percentage
calculate 3B/4B percentage (depends on above, currently its useless) add fpdb version string into db to detect outdated db format and importer bugs
update regression testing to take into account everything new update regression testing to take into account everything new, make sure it passes all tests
add fpdb version string into db to detect outdated db format.
before beta before beta
=========== ===========
optionally show single postflop agg/fold rate optionally show single postflop agg/fold rate
change definition of bet to exclude bring in?
auto-import auto-import
implement error file in importer implement error file in importer
change to use different colours according to classification. change to use different colours according to classification.
@ -30,7 +30,7 @@ fix load profile
HUD HUD
config wizard config wizard
file permission script, use games group file permission script, use games group
change stud street storage from 3-7 to 0-4 throughout change stud street storage from 3-7 to 0-4 throughout (possibly best way is to just shrink the holding array in fpdb_simple.createArrays
make bulk importer display a grand total in the GUI make bulk importer display a grand total in the GUI
change save_to_db into one method and probably move into parse_logic change save_to_db into one method and probably move into parse_logic
Any comment or print with "todo" in it in the sourcecode except what is marked todo in the menu Any comment or print with "todo" in it in the sourcecode except what is marked todo in the menu
@ -47,6 +47,7 @@ verify at least 2 or 3 sng hands
no rush but before 1.0RC no rush but before 1.0RC
======================== ========================
In many places there are unnecessary database accesses or it regenerates information it already had before or just generally does things in obscenely inefficient ways. It's great to have a total of 3 CPUs with a combined 5.6GHz working for you isn't it... ;) In any case, these should be optimised to leave more power for other things, such as dropping to lower power states
move version into seperate file move version into seperate file
make option to use "traditional" labels, e.g. WtSD instead of SD/F make option to use "traditional" labels, e.g. WtSD instead of SD/F
HTMLify docs and validate them HTMLify docs and validate them

View File

@ -840,131 +840,61 @@ far less relevant.</P>
</TABLE> </TABLE>
<P></P> <P></P>
<P><B>Table hands_actions</B></P> <P><B>Table hands_actions</B></P>
<p>Did <p>Did separate this into an extra table because it makes SELECTing across different streets so much easier. Also the space saving will be very large.</P>
separate this into an extra table because it makes SELECTing across
different streets so much easier. Also the space saving will be very
large.</P>
<TABLE BORDER=1 CELLPADDING=2 CELLSPACING=0> <TABLE BORDER=1 CELLPADDING=2 CELLSPACING=0>
<TR VALIGN=TOP> <TR VALIGN=TOP>
<TD><P>Field Name</P></TD> <TD><P>Field Name</P></TD>
<TD> <TD><P>Type</P></TD>
<P>Type</P> <TD><P>Comment</P></TD>
</TD>
<TD>
<P>Comment</P>
</TD>
</TR> </TR>
<TR VALIGN=TOP> <TR VALIGN=TOP>
<TD> <TD><P>id</P></TD>
<P>id</P> <TD><P>bigint</P></TD>
</TD> <TD><P><BR></P></TD>
<TD>
<P>bigint</P>
</TD>
<TD>
<P><BR>
</P>
</TD>
</TR> </TR>
<TR VALIGN=TOP> <TR VALIGN=TOP>
<TD> <TD><P>hand_player_id</P></TD>
<P>hand_player_id</P> <TD><P>bigint</P></TD>
</TD> <TD><P>references hands_players.id</P></TD>
<TD>
<P>bigint</P>
</TD>
<TD>
<P>references
hands_players.id</P>
</TD>
</TR> </TR>
<TR VALIGN=TOP> <TR VALIGN=TOP>
<TD> <TD><P>street</P></TD>
<P>street</P> <TD><P>smallint</P></TD>
</TD> <TD><p>street number, 0-3 (preflop, flop, turn, river) for holdem/omaha or 0-4 for razz/stud</P><P>-1 for seen showdown</P></TD>
<TD>
<P>smallint</P>
</TD>
<TD>
<p>street
number, 0-3 (preflop, flop, turn, river) for holdem/omaha or 0-4
for razz/stud</P>
<P>-1 for seen showdown</P>
</TD>
</TR> </TR>
<TR VALIGN=TOP> <TR VALIGN=TOP>
<TD> <TD><P>action_no</P></TD>
<P>action_no</P> <TD><P>smallint</P></TD>
</TD> <TD><P>action number, this is counted from zero for each street but across all players (e.g. in a heads up where the SB calls and the BB raises and the SB calls again would have numbers 0 and 1 for blinds, 2 and 4 for call and 3 for bet)<br>
<TD> Note that the blinds are counted as an action, so if the SB stays in the hand it'll always be action #0</P></TD>
<P>smallint</P>
</TD>
<TD>
<P>action number, 1-4</P>
</TD>
</TR> </TR>
<TR VALIGN=TOP> <TR VALIGN=TOP>
<TD> <TD><P>action</P></TD>
<P>action</P> <TD><P>char(5)</P></TD>
</TD> <TD><P>Bet stands for bring in, complete, bet, double bet, raise and double raise, since they all - technically - do the same thing. Unbet is used for when an uncalled bet is returned.</P>
<TD> <P>Other valid values: blind call check fold</P></TD>
<P>char(5)</P>
</TD>
<TD>
<p>bet
stands for bring in, complete, bet, double bet, raise and double
raise, since they all - technically - do the same thing. unbet is
used for when an uncalled bet is returned.</P>
<P>Other valid values: blind
call check fold</P>
</TD>
</TR> </TR>
<TR VALIGN=TOP> <TR VALIGN=TOP>
<TD> <TD><P>amount</P></TD>
<P>amount</P> <TD><P>int</P></TD>
</TD> <TD><P>amount put into the middle for this action</P></TD>
<TD>
<P>int</P>
</TD>
<TD>
<P>amount put into the middle
for this action</P>
</TD>
</TR> </TR>
<TR VALIGN=TOP> <TR VALIGN=TOP>
<TD> <TD><P>comment</P></TD>
<P>comment</P> <TD><P>text</P></TD>
</TD> <TD><P><BR></P></TD>
<TD>
<P>text</P>
</TD>
<TD>
<P><BR>
</P>
</TD>
</TR> </TR>
<TR VALIGN=TOP> <TR VALIGN=TOP>
<TD> <TD><P>comment_ts</P></TD>
<P>comment_ts</P> <TD><P>datetime (in UTC)</P></TD>
</TD> <TD><P><BR></P></TD>
<TD>
<P>datetime (in UTC)</P>
</TD>
<TD>
<P><BR>
</P>
</TD>
</TR> </TR>
</TABLE> </TABLE>
<p><BR> <p><BR></P>
</P>
<p><B>Tournament Tables</B></P> <p><B>Tournament Tables</B></P>
<p><BR></P> <p><BR></P>
<p><B>Table tourneys</B></P> <p><B>Table tourneys</B></P>
<TABLE BORDER=1 CELLPADDING=2 CELLSPACING=0> <TABLE BORDER=1 CELLPADDING=2 CELLSPACING=0>
<TR VALIGN=TOP> <TR VALIGN=TOP>
<TD> <TD>
<P>Field name</P> <P>Field name</P>

View File

@ -18,4 +18,5 @@
rm regression-test/*.found.txt rm regression-test/*.found.txt
rm regression-test/*.pyc rm regression-test/*.pyc
rm pyfpdb/*.pyc rm pyfpdb/*.pyc
git-add--interactive git-add--interactive

View File

@ -343,7 +343,7 @@ blabla""")
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.connect("delete_event", self.delete_event) self.window.connect("delete_event", self.delete_event)
self.window.connect("destroy", self.destroy) self.window.connect("destroy", self.destroy)
self.window.set_title("Free Poker DB - version: pre-alpha, git18") self.window.set_title("Free Poker DB - version: pre-alpha, git19")
self.window.set_border_width(1) self.window.set_border_width(1)
self.window.set_size_request(950,400) self.window.set_size_request(950,400)
self.window.set_resizable(True) self.window.set_resizable(True)

View File

@ -28,7 +28,7 @@ def mainParser(db, cursor, site, category, hand):
lineStreets=[] #char, valid values: (predeal, preflop, flop, turn, river) lineStreets=[] #char, valid values: (predeal, preflop, flop, turn, river)
cardValues, cardSuits, boardValues, boardSuits=[],[],[],[] cardValues, cardSuits, boardValues, boardSuits=[],[],[],[]
antes, actionTypes, actionAmounts, seatLines, winnings, rakes=[],[],[],[],[],[] antes, actionTypes, actionAmounts, actionNos, seatLines, winnings, rakes=[], [],[],[],[],[],[]
#part 1: read hand no and check for duplicate #part 1: read hand no and check for duplicate
siteHandNo=fpdb_simple.parseSiteHandNo(hand[0]) siteHandNo=fpdb_simple.parseSiteHandNo(hand[0])
@ -42,49 +42,36 @@ def mainParser(db, cursor, site, category, hand):
raise fpdb_simple.FpdbError("tourneys are only supported on PS right now") raise fpdb_simple.FpdbError("tourneys are only supported on PS right now")
siteTourneyNo=fpdb_simple.parseTourneyNo(hand[0]) siteTourneyNo=fpdb_simple.parseTourneyNo(hand[0])
buyin=fpdb_simple.parseBuyin(hand[0]) buyin=fpdb_simple.parseBuyin(hand[0])
#print "Buyin:", buyin
fee=fpdb_simple.parseFee(hand[0]) fee=fpdb_simple.parseFee(hand[0])
#print "Fee:", fee
entries=-1 #todo: parse this entries=-1 #todo: parse this
prizepool=-1 #todo: parse this prizepool=-1 #todo: parse this
tourneyStartTime=handStartTime #todo: read tourney start time tourneyStartTime=handStartTime #todo: read tourney start time
#print "gametypeID:",gametypeID
fpdb_simple.isAlreadyInDB(cursor, gametypeID, siteHandNo) fpdb_simple.isAlreadyInDB(cursor, gametypeID, siteHandNo)
#part 2: classify lines by type (e.g. cards, action, win, sectionchange) and street #part 2: classify lines by type (e.g. cards, action, win, sectionchange) and street
fpdb_simple.classifyLines(hand, category, lineTypes, lineStreets) fpdb_simple.classifyLines(hand, category, lineTypes, lineStreets)
#for i in range (len(hand)):
# print "i:",i,"lineTypes[i]:",lineTypes[i],"hand[i]:",hand[i]
#part 3: read basic player info #part 3: read basic player info
#3a read player names, startcashes #3a read player names, startcashes
for i in range (len(hand)): #todo: use maxseats+1 here. for i in range (len(hand)): #todo: use maxseats+1 here.
if (lineTypes[i]=="name"): if (lineTypes[i]=="name"):
seatLines.append(hand[i]) seatLines.append(hand[i])
#print "seatLines:",seatLines
#print "hand:",hand
names=fpdb_simple.parseNames(seatLines) names=fpdb_simple.parseNames(seatLines)
#print "names:",names
playerIDs = fpdb_simple.recognisePlayerIDs(cursor, names, siteID) playerIDs = fpdb_simple.recognisePlayerIDs(cursor, names, siteID)
startCashes=fpdb_simple.parseCashes(seatLines, site) startCashes=fpdb_simple.parseCashes(seatLines, site)
fpdb_simple.createArrays(category, len(names), cardValues, cardSuits, antes, winnings, rakes, actionTypes, actionAmounts) fpdb_simple.createArrays(category, len(names), cardValues, cardSuits, antes, winnings, rakes, actionTypes, actionAmounts, actionNos)
#3b remove people who sitout before cards are dealt (e.g. sitout instead of paying blinds) #3b read positions
#PS doesnt have a nameline for sitouts so for PS this can be skipped. havent tried FTP yet
#3c read positions
if (category=="holdem" or category=="omahahi" or category=="omahahilo"): if (category=="holdem" or category=="omahahi" or category=="omahahilo"):
positions = fpdb_simple.parsePositions (hand, names) positions = fpdb_simple.parsePositions (hand, names)
#part 4: take appropriate action for each line based on linetype #part 4: take appropriate action for each line based on linetype
for i in range(len(hand)): for i in range(len(hand)):
if (lineTypes[i]=="cards"): if (lineTypes[i]=="cards"):
#print "hand[i]:",hand[i]
fpdb_simple.parseCardLine (site, category, lineStreets[i], hand[i], names, cardValues, cardSuits, boardValues, boardSuits) fpdb_simple.parseCardLine (site, category, lineStreets[i], hand[i], names, cardValues, cardSuits, boardValues, boardSuits)
#print "cardValues:",cardValues
elif (lineTypes[i]=="action"): elif (lineTypes[i]=="action"):
fpdb_simple.parseActionLine (hand[i], lineStreets[i], names, actionTypes, actionAmounts, site) fpdb_simple.parseActionLine (site, hand[i], lineStreets[i], names, actionTypes, actionAmounts, actionNos)
elif (lineTypes[i]=="win"): elif (lineTypes[i]=="win"):
fpdb_simple.parseWinLine (hand[i], site, names, winnings, isTourney) fpdb_simple.parseWinLine (hand[i], site, names, winnings, isTourney)
elif (lineTypes[i]=="rake"): elif (lineTypes[i]=="rake"):
@ -99,7 +86,6 @@ def mainParser(db, cursor, site, category, hand):
fpdb_simple.parseAnteLine(hand[i], site, names, antes) fpdb_simple.parseAnteLine(hand[i], site, names, antes)
else: else:
raise fpdb_simple.FpdbError("unrecognised lineType:"+lineTypes[i]) raise fpdb_simple.FpdbError("unrecognised lineType:"+lineTypes[i])
#print "end of part4 cardValues:",cardValues,"cardSuits:",cardSuits
#part 5: final preparations, then call fpdb_save_to_db.saveHoldem with #part 5: final preparations, then call fpdb_save_to_db.saveHoldem with
# the arrays as they are - that file will fill them. # the arrays as they are - that file will fill them.
@ -110,7 +96,7 @@ def mainParser(db, cursor, site, category, hand):
fpdb_simple.checkPositions(positions) fpdb_simple.checkPositions(positions)
cursor.execute("SELECT limit_type FROM gametypes WHERE id=%s",(gametypeID, )) cursor.execute("SELECT limit_type FROM gametypes WHERE id=%s",(gametypeID, ))
limit_type=cursor.fetchone()[0] #todo: remove this unnecessary database access limit_type=cursor.fetchone()[0]
fpdb_simple.convert3B4B(site, category, limit_type, actionTypes, actionAmounts) fpdb_simple.convert3B4B(site, category, limit_type, actionTypes, actionAmounts)
totalWinnings=0 totalWinnings=0
@ -119,6 +105,7 @@ def mainParser(db, cursor, site, category, hand):
hudImportData=fpdb_simple.calculateHudImport(playerIDs, category, actionTypes, winnings, totalWinnings) hudImportData=fpdb_simple.calculateHudImport(playerIDs, category, actionTypes, winnings, totalWinnings)
if isTourney: if isTourney:
raise fpdb_simple.FpdbError ("tourneys are currently broken")
payin_amounts=fpdb_simple.calcPayin(len(names), buyin, fee) payin_amounts=fpdb_simple.calcPayin(len(names), buyin, fee)
ranks=[] ranks=[]
for i in range (len(names)): for i in range (len(names)):
@ -142,8 +129,9 @@ def mainParser(db, cursor, site, category, hand):
if (category=="holdem" or category=="omahahi" or category=="omahahilo"): if (category=="holdem" or category=="omahahi" or category=="omahahilo"):
result = fpdb_save_to_db.ring_holdem_omaha(cursor, category, siteHandNo, gametypeID, result = fpdb_save_to_db.ring_holdem_omaha(cursor, category, siteHandNo, gametypeID,
handStartTime, names, playerIDs, startCashes, positions, cardValues, handStartTime, names, playerIDs, startCashes, positions, cardValues,
cardSuits, boardValues, boardSuits, winnings, rakes, actionTypes, actionAmounts, hudImportData) cardSuits, boardValues, boardSuits, winnings, rakes, actionTypes, actionAmounts, actionNos, hudImportData)
elif (category=="razz" or category=="studhi" or category=="studhilo"): elif (category=="razz" or category=="studhi" or category=="studhilo"):
raise fpdb_simple.FpdbError ("stud/razz are currently broken")
result = fpdb_save_to_db.ring_stud(cursor, category, siteHandNo, gametypeID, result = fpdb_save_to_db.ring_stud(cursor, category, siteHandNo, gametypeID,
handStartTime, names, playerIDs, startCashes, antes, cardValues, handStartTime, names, playerIDs, startCashes, antes, cardValues,
cardSuits, winnings, rakes, actionTypes, actionAmounts, hudImportData) cardSuits, winnings, rakes, actionTypes, actionAmounts, hudImportData)

View File

@ -40,7 +40,7 @@ def ring_stud(cursor, category, site_hand_no, gametype_id, hand_start_time,
#stores a holdem/omaha hand into the database #stores a holdem/omaha hand into the database
def ring_holdem_omaha(cursor, category, site_hand_no, gametype_id, hand_start_time, def ring_holdem_omaha(cursor, category, site_hand_no, gametype_id, hand_start_time,
names, player_ids, start_cashes, positions, card_values, card_suits, names, player_ids, start_cashes, positions, card_values, card_suits,
board_values, board_suits, winnings, rakes, action_types, action_amounts, hudImportData): board_values, board_suits, winnings, rakes, action_types, action_amounts, actionNos, hudImportData):
#fill up the two player card arrays #fill up the two player card arrays
if (category=="holdem"): if (category=="holdem"):
fpdb_simple.fillCardArrays(len(names), 2, card_values, card_suits) fpdb_simple.fillCardArrays(len(names), 2, card_values, card_suits)
@ -60,7 +60,7 @@ def ring_holdem_omaha(cursor, category, site_hand_no, gametype_id, hand_start_ti
fpdb_simple.store_board_cards(cursor, hands_id, board_values, board_suits) fpdb_simple.store_board_cards(cursor, hands_id, board_values, board_suits)
fpdb_simple.storeActions(cursor, hands_players_ids, action_types, action_amounts) fpdb_simple.storeActions(cursor, hands_players_ids, action_types, action_amounts, actionNos)
return site_hand_no return site_hand_no
#end def ring_holdem_omaha #end def ring_holdem_omaha

View File

@ -199,7 +199,7 @@ def convertCardValuesBoard(arr):
#end def convertCardValuesBoard #end def convertCardValuesBoard
#this creates the 2D/3D arrays. manipulates the passed arrays instead of returning. #this creates the 2D/3D arrays. manipulates the passed arrays instead of returning.
def createArrays(category, seats, card_values, card_suits, antes, winnings, rakes, action_types, action_amounts): def createArrays(category, seats, card_values, card_suits, antes, winnings, rakes, action_types, action_amounts, actionNos):
for i in range(seats):#create second dimension arrays for i in range(seats):#create second dimension arrays
tmp=[] tmp=[]
card_values.append(tmp) card_values.append(tmp)
@ -209,18 +209,25 @@ def createArrays(category, seats, card_values, card_suits, antes, winnings, rake
winnings.append(0) winnings.append(0)
rakes.append(0) rakes.append(0)
for i in range (8): if (category=="holdem" or category=="omahahi" or category=="omahahilo"):
#build the first dimension array, for streets streetCount=4
#todo: 0-2 will of course be left empty, get rid of this nicely using consts else:
streetCount=8
for i in range(streetCount): #build the first dimension array, for streets
tmp=[] tmp=[]
action_types.append(tmp) action_types.append(tmp)
tmp=[] tmp=[]
action_amounts.append(tmp) action_amounts.append(tmp)
tmp=[]
actionNos.append(tmp)
for j in range (seats): #second dimension arrays: players for j in range (seats): #second dimension arrays: players
tmp=[] tmp=[]
action_types[i].append(tmp) action_types[i].append(tmp)
tmp=[] tmp=[]
action_amounts[i].append(tmp) action_amounts[i].append(tmp)
tmp=[]
actionNos[i].append(tmp)
if (category=="holdem" or category=="omahahi" or category=="omahahilo"): if (category=="holdem" or category=="omahahi" or category=="omahahilo"):
pass pass
elif (category=="razz" or category=="studhi" or category=="studhilo"):#need to fill card arrays. elif (category=="razz" or category=="studhi" or category=="studhilo"):#need to fill card arrays.
@ -555,8 +562,7 @@ def parseActionAmount(line, atype, site):
#doesnt return anything, simply changes the passed arrays action_types and #doesnt return anything, simply changes the passed arrays action_types and
# action_amounts. For stud this expects numeric streets (3-7), for # action_amounts. For stud this expects numeric streets (3-7), for
# holdem/omaha it expects predeal, preflop, flop, turn or river # holdem/omaha it expects predeal, preflop, flop, turn or river
def parseActionLine(line, street, names, action_types, action_amounts, site): def parseActionLine(site, line, street, names, action_types, action_amounts, actionNos):
#print "parseActionLine, line:",line
#this only applies to stud #this only applies to stud
if (street<3): if (street<3):
text="invalid street ("+str(street)+") for line: "+line text="invalid street ("+str(street)+") for line: "+line
@ -571,12 +577,19 @@ def parseActionLine(line, street, names, action_types, action_amounts, site):
elif (street=="river"): elif (street=="river"):
street=3 street=3
nextActionNo=0
for player in range(len(actionNos[street])):
for count in range(len(actionNos[street][player])):
if actionNos[street][player][count]>=nextActionNo:
nextActionNo=actionNos[street][player][count]+1
atype=parseActionType(line) atype=parseActionType(line)
playerno=recognisePlayerNo(line, names, atype) playerno=recognisePlayerNo(line, names, atype)
amount=parseActionAmount(line, atype, site) amount=parseActionAmount(line, atype, site)
action_types[street][playerno].append(atype) action_types[street][playerno].append(atype)
action_amounts[street][playerno].append(amount) action_amounts[street][playerno].append(amount)
actionNos[street][playerno].append(nextActionNo)
#end def parseActionLine #end def parseActionLine
#returns the action type code (see table design) of the given action line #returns the action type code (see table design) of the given action line
@ -1066,12 +1079,14 @@ def splitRake(winnings, rakes, totalRake):
rakes[i]=totalRake*winPortion rakes[i]=totalRake*winPortion
#end def splitRake #end def splitRake
def storeActions(cursor, hands_players_ids, action_types, action_amounts): def storeActions(cursor, hands_players_ids, action_types, action_amounts, actionNos):
#stores into table hands_actions #stores into table hands_actions
#print "start of storeActions, actionNos:",actionNos
#print " action_amounts:",action_amounts
for i in range (len(action_types)): #iterate through streets for i in range (len(action_types)): #iterate through streets
for j in range (len(action_types[i])): #iterate through names for j in range (len(action_types[i])): #iterate through names
for k in range (len(action_types[i][j])): #iterate through individual actions of that player on that street for k in range (len(action_types[i][j])): #iterate through individual actions of that player on that street
cursor.execute ("INSERT INTO hands_actions (hand_player_id, street, action_no, action, amount) VALUES (%s, %s, %s, %s, %s)", (hands_players_ids[j], i, k, action_types[i][j][k], action_amounts[i][j][k])) cursor.execute ("INSERT INTO hands_actions (hand_player_id, street, action_no, action, amount) VALUES (%s, %s, %s, %s, %s)", (hands_players_ids[j], i, actionNos[i][j][k], action_types[i][j][k], action_amounts[i][j][k]))
#end def storeActions #end def storeActions
def store_board_cards(cursor, hands_id, board_values, board_suits): def store_board_cards(cursor, hands_id, board_values, board_suits):

View File

@ -23,24 +23,24 @@ player_name:Player_7 player_startcash:139 position:1 off Btn cards:Ts Jh winning
From Table hands_actions From Table hands_actions
======================== ========================
player_name:Player_1 actionCount:0 street:Preflop streetActionNo:0 action:call amount:4 player_name:Player_1 street:Preflop streetActionNo:6 action:call amount:4
player_name:Player_1 actionCount:1 street:Flop streetActionNo:0 action:call amount:2 player_name:Player_1 street:Flop streetActionNo:2 action:call amount:2
player_name:Player_1 actionCount:2 street:Turn streetActionNo:0 action:call amount:4 player_name:Player_1 street:Turn streetActionNo:2 action:call amount:4
player_name:Player_1 actionCount:3 street:River streetActionNo:0 action:fold amount:0 player_name:Player_1 street:River streetActionNo:2 action:fold amount:0
player_name:Player_2 actionCount:0 street:Preflop streetActionNo:0 action:blind amount:1 player_name:Player_2 street:Preflop streetActionNo:0 action:blind amount:1
player_name:Player_2 actionCount:1 street:Preflop streetActionNo:1 action:call amount:3 player_name:Player_2 street:Preflop streetActionNo:7 action:call amount:3
player_name:Player_2 actionCount:2 street:Flop streetActionNo:0 action:check amount:0 player_name:Player_2 street:Flop streetActionNo:0 action:check amount:0
player_name:Player_2 actionCount:3 street:Flop streetActionNo:1 action:call amount:2 player_name:Player_2 street:Flop streetActionNo:3 action:call amount:2
player_name:Player_2 actionCount:4 street:Turn streetActionNo:0 action:check amount:0 player_name:Player_2 street:Turn streetActionNo:0 action:check amount:0
player_name:Player_2 actionCount:5 street:Turn streetActionNo:1 action:call amount:4 player_name:Player_2 street:Turn streetActionNo:3 action:call amount:4
player_name:Player_2 actionCount:6 street:River streetActionNo:0 action:check amount:0 player_name:Player_2 street:River streetActionNo:0 action:check amount:0
player_name:Player_2 actionCount:7 street:River streetActionNo:1 action:fold amount:0 player_name:Player_2 street:River streetActionNo:3 action:fold amount:0
player_name:Player_3 actionCount:0 street:Preflop streetActionNo:0 action:blind amount:2 player_name:Player_3 street:Preflop streetActionNo:1 action:blind amount:2
player_name:Player_3 actionCount:1 street:Preflop streetActionNo:1 action:fold amount:0 player_name:Player_3 street:Preflop streetActionNo:8 action:fold amount:0
player_name:Player_4 actionCount:0 street:Preflop streetActionNo:0 action:bet amount:4 player_name:Player_4 street:Preflop streetActionNo:2 action:bet amount:4
player_name:Player_4 actionCount:1 street:Flop streetActionNo:0 action:bet amount:2 player_name:Player_4 street:Flop streetActionNo:1 action:bet amount:2
player_name:Player_4 actionCount:2 street:Turn streetActionNo:0 action:bet amount:4 player_name:Player_4 street:Turn streetActionNo:1 action:bet amount:4
player_name:Player_4 actionCount:3 street:River streetActionNo:0 action:bet amount:4 player_name:Player_4 street:River streetActionNo:1 action:bet amount:4
player_name:Player_5 actionCount:0 street:Preflop streetActionNo:0 action:fold amount:0 player_name:Player_5 street:Preflop streetActionNo:3 action:fold amount:0
player_name:Player_6 actionCount:0 street:Preflop streetActionNo:0 action:fold amount:0 player_name:Player_6 street:Preflop streetActionNo:4 action:fold amount:0
player_name:Player_7 actionCount:0 street:Preflop streetActionNo:0 action:fold amount:0 player_name:Player_7 street:Preflop streetActionNo:5 action:fold amount:0

View File

@ -23,24 +23,24 @@ player_name:Player_7 player_startcash:135 position:3 off Btn cards:8d 5d winning
From Table hands_actions From Table hands_actions
======================== ========================
player_name:Player_1 actionCount:0 street:Preflop streetActionNo:0 action:fold amount:0 player_name:Player_1 street:Preflop streetActionNo:4 action:fold amount:0
player_name:Player_2 actionCount:0 street:Preflop streetActionNo:0 action:call amount:2 player_name:Player_2 street:Preflop streetActionNo:5 action:call amount:2
player_name:Player_2 actionCount:1 street:Flop streetActionNo:0 action:call amount:2 player_name:Player_2 street:Flop streetActionNo:2 action:call amount:2
player_name:Player_2 actionCount:2 street:Turn streetActionNo:0 action:bet amount:8 player_name:Player_2 street:Turn streetActionNo:2 action:bet amount:8
player_name:Player_2 actionCount:3 street:River streetActionNo:0 action:bet amount:4 player_name:Player_2 street:River streetActionNo:1 action:bet amount:4
player_name:Player_3 actionCount:0 street:Preflop streetActionNo:0 action:fold amount:0 player_name:Player_3 street:Preflop streetActionNo:6 action:fold amount:0
player_name:Player_4 actionCount:0 street:Preflop streetActionNo:0 action:blind amount:1 player_name:Player_4 street:Preflop streetActionNo:0 action:blind amount:1
player_name:Player_4 actionCount:1 street:Preflop streetActionNo:1 action:call amount:1 player_name:Player_4 street:Preflop streetActionNo:7 action:call amount:1
player_name:Player_4 actionCount:2 street:Flop streetActionNo:0 action:check amount:0 player_name:Player_4 street:Flop streetActionNo:0 action:check amount:0
player_name:Player_4 actionCount:3 street:Flop streetActionNo:1 action:call amount:2 player_name:Player_4 street:Flop streetActionNo:3 action:call amount:2
player_name:Player_4 actionCount:4 street:Turn streetActionNo:0 action:check amount:0 player_name:Player_4 street:Turn streetActionNo:0 action:check amount:0
player_name:Player_4 actionCount:5 street:Turn streetActionNo:1 action:fold amount:0 player_name:Player_4 street:Turn streetActionNo:3 action:fold amount:0
player_name:Player_5 actionCount:0 street:Preflop streetActionNo:0 action:blind amount:2 player_name:Player_5 street:Preflop streetActionNo:1 action:blind amount:2
player_name:Player_5 actionCount:1 street:Preflop streetActionNo:1 action:check amount:0 player_name:Player_5 street:Preflop streetActionNo:8 action:check amount:0
player_name:Player_5 actionCount:2 street:Flop streetActionNo:0 action:bet amount:2 player_name:Player_5 street:Flop streetActionNo:1 action:bet amount:2
player_name:Player_5 actionCount:3 street:Turn streetActionNo:0 action:bet amount:4 player_name:Player_5 street:Turn streetActionNo:1 action:bet amount:4
player_name:Player_5 actionCount:4 street:Turn streetActionNo:1 action:call amount:4 player_name:Player_5 street:Turn streetActionNo:4 action:call amount:4
player_name:Player_5 actionCount:5 street:River streetActionNo:0 action:check amount:0 player_name:Player_5 street:River streetActionNo:0 action:check amount:0
player_name:Player_5 actionCount:6 street:River streetActionNo:1 action:call amount:4 player_name:Player_5 street:River streetActionNo:2 action:call amount:4
player_name:Player_6 actionCount:0 street:Preflop streetActionNo:0 action:fold amount:0 player_name:Player_6 street:Preflop streetActionNo:2 action:fold amount:0
player_name:Player_7 actionCount:0 street:Preflop streetActionNo:0 action:fold amount:0 player_name:Player_7 street:Preflop streetActionNo:3 action:fold amount:0

View File

@ -23,33 +23,33 @@ player_name:Player_7 player_startcash:135 position:4 off Btn cards:7c Jh winning
From Table hands_actions From Table hands_actions
======================== ========================
player_name:Player_1 actionCount:0 street:Preflop streetActionNo:0 action:fold amount:0 player_name:Player_1 street:Preflop streetActionNo:3 action:fold amount:0
player_name:Player_2 actionCount:0 street:Preflop streetActionNo:0 action:fold amount:0 player_name:Player_2 street:Preflop streetActionNo:4 action:fold amount:0
player_name:Player_3 actionCount:0 street:Preflop streetActionNo:0 action:call amount:2 player_name:Player_3 street:Preflop streetActionNo:5 action:call amount:2
player_name:Player_3 actionCount:1 street:Preflop streetActionNo:1 action:call amount:2 player_name:Player_3 street:Preflop streetActionNo:9 action:call amount:2
player_name:Player_3 actionCount:2 street:Flop streetActionNo:0 action:bet amount:2 player_name:Player_3 street:Flop streetActionNo:2 action:bet amount:2
player_name:Player_3 actionCount:3 street:Flop streetActionNo:1 action:bet amount:4 player_name:Player_3 street:Flop streetActionNo:6 action:bet amount:4
player_name:Player_3 actionCount:4 street:Flop streetActionNo:2 action:call amount:2 player_name:Player_3 street:Flop streetActionNo:8 action:call amount:2
player_name:Player_3 actionCount:5 street:Turn streetActionNo:0 action:bet amount:4 player_name:Player_3 street:Turn streetActionNo:0 action:bet amount:4
player_name:Player_3 actionCount:6 street:Turn streetActionNo:1 action:bet amount:8 player_name:Player_3 street:Turn streetActionNo:2 action:bet amount:8
player_name:Player_3 actionCount:7 street:Turn streetActionNo:2 action:call amount:4 player_name:Player_3 street:Turn streetActionNo:4 action:call amount:4
player_name:Player_3 actionCount:8 street:River streetActionNo:0 action:bet amount:4 player_name:Player_3 street:River streetActionNo:0 action:bet amount:4
player_name:Player_3 actionCount:9 street:River streetActionNo:1 action:bet amount:8 player_name:Player_3 street:River streetActionNo:2 action:bet amount:8
player_name:Player_3 actionCount:10 street:River streetActionNo:2 action:call amount:4 player_name:Player_3 street:River streetActionNo:4 action:call amount:4
player_name:Player_4 actionCount:0 street:Preflop streetActionNo:0 action:call amount:2 player_name:Player_4 street:Preflop streetActionNo:6 action:call amount:2
player_name:Player_4 actionCount:1 street:Preflop streetActionNo:1 action:call amount:2 player_name:Player_4 street:Preflop streetActionNo:10 action:call amount:2
player_name:Player_4 actionCount:2 street:Flop streetActionNo:0 action:bet amount:4 player_name:Player_4 street:Flop streetActionNo:3 action:bet amount:4
player_name:Player_4 actionCount:3 street:Flop streetActionNo:1 action:bet amount:4 player_name:Player_4 street:Flop streetActionNo:7 action:bet amount:4
player_name:Player_4 actionCount:4 street:Turn streetActionNo:0 action:bet amount:8 player_name:Player_4 street:Turn streetActionNo:1 action:bet amount:8
player_name:Player_4 actionCount:5 street:Turn streetActionNo:1 action:bet amount:8 player_name:Player_4 street:Turn streetActionNo:3 action:bet amount:8
player_name:Player_4 actionCount:6 street:River streetActionNo:0 action:bet amount:8 player_name:Player_4 street:River streetActionNo:1 action:bet amount:8
player_name:Player_4 actionCount:7 street:River streetActionNo:1 action:bet amount:8 player_name:Player_4 street:River streetActionNo:3 action:bet amount:8
player_name:Player_5 actionCount:0 street:Preflop streetActionNo:0 action:blind amount:1 player_name:Player_5 street:Preflop streetActionNo:0 action:blind amount:1
player_name:Player_5 actionCount:1 street:Preflop streetActionNo:1 action:bet amount:3 player_name:Player_5 street:Preflop streetActionNo:7 action:bet amount:3
player_name:Player_5 actionCount:2 street:Flop streetActionNo:0 action:check amount:0 player_name:Player_5 street:Flop streetActionNo:0 action:check amount:0
player_name:Player_5 actionCount:3 street:Flop streetActionNo:1 action:fold amount:0 player_name:Player_5 street:Flop streetActionNo:4 action:fold amount:0
player_name:Player_6 actionCount:0 street:Preflop streetActionNo:0 action:blind amount:2 player_name:Player_6 street:Preflop streetActionNo:1 action:blind amount:2
player_name:Player_6 actionCount:1 street:Preflop streetActionNo:1 action:call amount:2 player_name:Player_6 street:Preflop streetActionNo:8 action:call amount:2
player_name:Player_6 actionCount:2 street:Flop streetActionNo:0 action:check amount:0 player_name:Player_6 street:Flop streetActionNo:1 action:check amount:0
player_name:Player_6 actionCount:3 street:Flop streetActionNo:1 action:fold amount:0 player_name:Player_6 street:Flop streetActionNo:5 action:fold amount:0
player_name:Player_7 actionCount:0 street:Preflop streetActionNo:0 action:fold amount:0 player_name:Player_7 street:Preflop streetActionNo:2 action:fold amount:0