diff --git a/docs/db-todo.txt b/docs/db-todo.txt
new file mode 100644
index 00000000..9d8c0042
--- /dev/null
+++ b/docs/db-todo.txt
@@ -0,0 +1,22 @@
+stats to add
+============
+*CC,TotalColdCalls,TimesFacingRaisePreflop
+**Folded to 3-Bet,FoldedToThreeBetPreflop,FacedThreeBetPreflop
+Called 3-Bet,CalledThreeBetPreflop,FacedThreeBetPreflop
+*Winning %,wonhand,TotalHands
+**Flop Aggression Factor,timesaggressiveflop,timescalledflop
+**Turn Aggression Factor,timesaggressiveturn,timescalledturn
+**River Aggression Factor,timesaggressiveriver,timescalledriver
+scoopedPot (useful for hi/lo split games)
+
+couldSqueeze, didSqueeze, facedSqueeze, calledSqueeze -> if (player raises from EP) and (someone after him calls) and (someone after that goes all in)
+Donk Bet Turn,DidDonkBetTurn,CouldDonkBetTurn -> EP raises, LP reraises, EP calls. If EP bets out after the flop, it is considered a donk bet
+Float Turn,DidFloatTurn,CouldFloatTurn ->
+
+other
+=====
+look at PT3 and HM tables see if i forgot anything
+store all-in somewhere
+add somewhere: mixed flag to denote that the game is part of a mixed game rotation
+
+add tables for single draw (5card draw, 2-7 single draw, badugi) and tripple draw (2-7 tripple draw)
diff --git a/docs/known-bugs-and-planned-features.txt b/docs/known-bugs-and-planned-features.txt
index 06ae9033..612da0dc 100644
--- a/docs/known-bugs-and-planned-features.txt
+++ b/docs/known-bugs-and-planned-features.txt
@@ -1,8 +1,10 @@
todolist (db=database, imp=importer, tv=tableviewer)
Everything is subject to change and especially the order will often change. Patches for any of these or other features are very welcome, see readme-overview.txt for contacts.
+Please also see db-todo.txt
alpha2 (release by 17Aug)
======
+auto import only runs on one file per start
set hud stats row1: hands, VPIP, PFR, PF3B/4B, ST row2: Aggr% (postflop), Fold% (postflop), W$sF, WtSD, W$@SD
make windows use correct language version of Appdata, e.g. Anwendungdaten
stop bulk importer from executing HUD hook
@@ -11,6 +13,7 @@ update status or make a support matrix table for website
add instructions for mailing list to contacts
ebuild: symlink doesnt work, USE gtk, more automation, update install-in-gentoo.txt, set permissions in it, copy docs to correct place, use games eclass or whatever to get games group notice, print notice about install-in-gentoo.txt and mysql --config
re-run existing regression tests
+move conf file out of profiles folder
alpha3
======
diff --git a/docs/tabledesign.html b/docs/tabledesign.html
index 3a89ef9b..5411d230 100644
--- a/docs/tabledesign.html
+++ b/docs/tabledesign.html
@@ -434,7 +434,9 @@ The program itself is licensed under AGPLv3, see agpl-3.0.txt
street0VPI |
int |
- number of hands where player paid to see flop |
+ number of hands where player paid to see flop
+ Please note that this already includes street0Aggr!
+ To calculate limp just deduct street0Aggr from this number |
street0Aggr |
diff --git a/pyfpdb/Configuration.py b/pyfpdb/Configuration.py
index 2ade6bee..849d595a 100644
--- a/pyfpdb/Configuration.py
+++ b/pyfpdb/Configuration.py
@@ -140,7 +140,6 @@ class Mucked:
self.rows = node.getAttribute("rows")
self.cols = node.getAttribute("cols")
self.format = node.getAttribute("stud")
- print "mw name = " + self.name
def __str__(self):
temp = 'Mucked = ' + self.name + "\n"
diff --git a/pyfpdb/Database.py b/pyfpdb/Database.py
index 0d6db697..8d10e8a1 100644
--- a/pyfpdb/Database.py
+++ b/pyfpdb/Database.py
@@ -40,7 +40,6 @@ import MySQLdb
class Database:
def __init__(self, c, db_name, game):
- print "db_name = " + db_name
if c.supported_databases[db_name].db_server == 'postgresql':
self.connection = pgdb.connect(dsn = c.supported_databases[db_name].db_ip,
user = c.supported_databases[db_name].db_user,
diff --git a/pyfpdb/Hud.py b/pyfpdb/Hud.py
index 9b35f283..6ac1c763 100644
--- a/pyfpdb/Hud.py
+++ b/pyfpdb/Hud.py
@@ -65,7 +65,10 @@ class Hud:
player_id = 'fake',
font = self.font)
- self.stats = [['', '', ''], ['', '', '']]
+ self.stats = []
+ for i in range(0, config.supported_games[self.poker_game].rows + 1):
+ row_list = [''] * config.supported_games[self.poker_game].cols
+ self.stats.append(row_list)
for stat in config.supported_games[self.poker_game].stats.keys():
self.stats[config.supported_games[self.poker_game].stats[stat].row] \
[config.supported_games[self.poker_game].stats[stat].col] = \
@@ -78,8 +81,10 @@ class Hud:
def update(self, hand, db, config):
stat_dict = db.get_stats_from_hand(hand, 3)
for s in stat_dict.keys():
- for r in range(0, 2):
- for c in range(0, 3):
+# for r in range(0, 2):
+# for c in range(0, 3):
+ for r in range(0, config.supported_games[self.poker_game].rows):
+ for c in range(0, config.supported_games[self.poker_game].cols):
number = Stats.do_stat(stat_dict, player = stat_dict[s]['player_id'], stat = self.stats[r][c])
self.stat_windows[stat_dict[s]['seat']].label[r][c].set_text(number[1])
tip = stat_dict[s]['screen_name'] + "\n" + number[5] + "\n" + \
diff --git a/pyfpdb/Mucked.py b/pyfpdb/Mucked.py
index a1f76f87..292fd58d 100644
--- a/pyfpdb/Mucked.py
+++ b/pyfpdb/Mucked.py
@@ -223,8 +223,6 @@ if __name__== "__main__":
m.update(new_hand_id)
return(True)
- print "system = %s" % (os.name)
-
config = Configuration.Config()
db_connection = Database.Database(config, 'PTrackSv2', 'razz')
diff --git a/pyfpdb/SQL.py b/pyfpdb/SQL.py
index ffd02ea6..4e22f270 100644
--- a/pyfpdb/SQL.py
+++ b/pyfpdb/SQL.py
@@ -152,67 +152,7 @@ class Sql:
WHERE game_id = %s
"""
- if game == 'holdem' and type == 'PT3':
-
- self.query['get_last_hand'] = "select max(id_hand) from holdem_hand_summary"
-
- self.query['get_player_id'] = """
- select id_player from player, lookup_sites
- where player_name = %(player)s
- and site_name = %(site)s
- and player.id_site = lookup_sites.id_site
- """
-
- self.query['get_stats_from_hand'] = """
- select id_player AS player_id,
- count(*) AS n,
- sum(CAST (flg_vpip AS integer)) as vpip,
- sum(CAST (flg_p_first_raise AS integer)) as p_first_raise,
- sum(CAST (flg_f_saw AS integer)) as f_saw,
- sum(CAST (flg_p_open AS integer)) as p_open,
- sum(CAST (flg_p_limp AS integer)) as p_limp,
- sum(CAST (flg_p_fold AS integer)) as p_fold,
- sum(CAST (flg_p_ccall AS integer)) as p_ccall,
- sum(CAST (flg_f_bet AS integer)) as f_bet,
- sum(CAST (flg_f_first_raise AS integer)) as f_first_raise,
- sum(CAST (flg_f_check AS integer)) as f_check,
- sum(CAST (flg_f_check_raise AS integer)) as f_check_raise,
- sum(CAST (flg_f_fold AS integer)) as f_fold,
- sum(CAST (flg_f_saw AS integer)) as f_saw,
- sum(CAST (flg_t_bet AS integer)) as t_bet,
- sum(CAST (flg_t_first_raise AS integer)) as t_first_raise,
- sum(CAST (flg_t_check AS integer)) as t_check,
- sum(CAST (flg_t_check_raise AS integer)) as t_check_raise,
- sum(CAST (flg_t_fold AS integer)) as t_fold,
- sum(CAST (flg_t_saw AS integer)) as t_saw,
- sum(CAST (flg_r_bet AS integer)) as r_bet,
- sum(CAST (flg_r_first_raise AS integer)) as r_first_raise,
- sum(CAST (flg_r_check AS integer)) as r_check,
- sum(CAST (flg_r_check_raise AS integer)) as r_check_raise,
- sum(CAST (flg_r_fold AS integer)) as r_fold,
- sum(CAST (flg_r_saw AS integer)) as r_saw,
- sum(CAST (flg_sb_steal_fold AS integer)) as sb_steal_fold,
- sum(CAST (flg_bb_steal_fold AS integer)) as bb_steal_fold,
- sum(CAST (flg_blind_def_opp AS integer)) as blind_def_opp,
- sum(CAST (flg_steal_att AS integer)) as steal_att,
- sum(CAST (flg_steal_opp AS integer)) as steal_opp,
- sum(CAST (flg_blind_k AS integer)) as blind_k,
- sum(CAST (flg_showdown AS integer)) as showdown,
-
- sum(CAST (flg_p_squeeze AS integer)) as p_squeeze,
- sum(CAST (flg_p_squeeze_opp AS integer)) as p_squeeze_opp,
- sum(CAST (flg_p_squeeze_def_opp AS integer)) as p_squeeze_def_opp,
-
- sum(CAST (flg_f_cbet AS integer)) as f_cbet,
- sum(CAST (flg_f_cbet_opp AS integer)) as f_cbet_opp,
- sum(CAST (flg_f_cbet_def_opp AS integer)) as f_cbet_def_opp
-
- from holdem_hand_player_statistics
- where id_hand = %(hand)d and not id_player = %(hero)d
- group by id_player
- """
-
- if game == 'holdem' and type == 'fpdb':
+ if type == 'fpdb':
self.query['get_last_hand'] = "select max(id) from Hands"
@@ -231,6 +171,39 @@ class Sql:
sum(sawShowdown) AS sd,
sum(wonAtSD) AS wmsd,
sum(street1Seen) AS saw_f,
+ sum(stealAttemptChance) AS steal_opp,
+ sum(stealAttempted) AS steal,
+ sum(foldedSbToSteal) AS SBnotDef,
+ sum(foldedBbToSteal) AS BBnotDef,
+ sum(foldBbToStealChance) AS SBstolen,
+ sum(foldBbToStealChance) AS BBstolen,
+ sum(street0_3B4BChance) AS TB_opp_0,
+ sum(street0_3B4BDone) AS TB_0,
+ sum(street1Seen) AS saw_1,
+ sum(street2Seen) AS saw_2,
+ sum(street3Seen) AS saw_3,
+ sum(street4Seen) AS saw_4,
+ sum(street1Aggr) AS aggr_1,
+ sum(street2Aggr) AS aggr_2,
+ sum(street3Aggr) AS aggr_3,
+ sum(street4Aggr) AS aggr_4,
+ sum(otherRaisedStreet1) AS was_raised_1,
+ sum(otherRaisedStreet2) AS was_raised_2,
+ sum(otherRaisedStreet3) AS was_raised_3,
+ sum(otherRaisedStreet4) AS was_raised_4,
+ sum(foldToOtherRaisedStreet1) AS f_freq_1,
+ sum(foldToOtherRaisedStreet1) AS f_freq_2,
+ sum(foldToOtherRaisedStreet1) AS f_freq_3,
+ sum(foldToOtherRaisedStreet1) AS f_freq_4,
+ sum(wonWhenSeenStreet1) AS w_w_s_1,
+ sum(street1CBChance) AS CB_opp_1,
+ sum(street2CBChance) AS CB_opp_2,
+ sum(street3CBChance) AS CB_opp_3,
+ sum(street4CBChance) AS CB_opp_4,
+ sum(street1CBDone) AS CB_1,
+ sum(street2CBDone) AS CB_2,
+ sum(street3CBDone) AS CB_3,
+ sum(street4CBDone) AS CB_4,
sum(totalProfit) AS net
FROM HudCache, Hands
WHERE HudCache.PlayerId in
diff --git a/pyfpdb/Stats.py b/pyfpdb/Stats.py
index edde911d..4f989898 100644
--- a/pyfpdb/Stats.py
+++ b/pyfpdb/Stats.py
@@ -20,6 +20,28 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
########################################################################
+
+# How to write a new stat:
+# 1 You can see a listing of all the raw stats (e.g., from the HudCache table)
+# by running Database.py as a stand along program. You need to combine
+# those raw stats to get stats to present to the HUD. If you need more
+# information than is in the HudCache table, then you have to write SQL.
+# 2 The raw stats seen when you run Database.py are available in the Stats.py
+# in the stat_dict dict. For example the number of vpips would be
+# stat_dict[player]['vpip']. So the % vpip is
+# float(stat_dict[player]['vpip'])/float(stat_dict[player]['n']). You can see how the
+# keys of stat_dict relate to the column names in HudCache by inspecting
+# the proper section of the SQL.py module.
+# 3 You have to write a small function for each stat you want to add. See
+# the vpip() function for example. This function has to be protected from
+# exceptions, using something like the try:/except: paragraphs in vpip.
+# 4 The name of the function has to be the same as the of the stat used
+# in the config file.
+# 5 The stat functions have a peculiar return value, which is outlined in
+# the do_stat function. This format is useful for tool tips and maybe
+# other stuff.
+# 6 For each stat you make add a line to the __main__ function to test it.
+
# Standard Library modules
# pyGTK modules
@@ -78,10 +100,10 @@ def pfr(stat_dict, player):
except:
return (stat,
'%3.1f' % (0) + '%',
- 'w=%3.1f' % (0) + '%',
- 'wtsd=%3.1f' % (0) + '%',
+ 'p=%3.1f' % (0) + '%',
+ 'pfr=%3.1f' % (0) + '%',
'(%d/%d)' % (0, 0),
- 'wtsd'
+ 'pfr'
)
def wtsd(stat_dict, player):
@@ -93,7 +115,7 @@ def wtsd(stat_dict, player):
'w=%3.1f' % (100*stat) + '%',
'wtsd=%3.1f' % (100*stat) + '%',
'(%d/%d)' % (stat_dict[player]['sd'], stat_dict[player]['saw_f']),
- 'wtsd'
+ '% went to showdown'
)
except:
return (stat,
@@ -101,9 +123,30 @@ def wtsd(stat_dict, player):
'w=%3.1f' % (0) + '%',
'wtsd=%3.1f' % (0) + '%',
'(%d/%d)' % (0, 0),
- 'wtsd'
+ '% went to showdown'
)
+def wmsd(stat_dict, player):
+ stat = 0.0
+ try:
+ stat = float(stat_dict[player]['wmsd'])/float(stat_dict[player]['sd'])
+ return (stat,
+ '%3.1f' % (100*stat) + '%',
+ 'w=%3.1f' % (100*stat) + '%',
+ 'wmsd=%3.1f' % (100*stat) + '%',
+ '(%d/%d)' % (stat_dict[player]['wmsd'], stat_dict[player]['sd']),
+ '% won money at showdown'
+ )
+ except:
+ return (stat,
+ '%3.1f' % (0) + '%',
+ 'w=%3.1f' % (0) + '%',
+ 'wmsd=%3.1f' % (0) + '%',
+ '(%d/%d)' % (0, 0),
+ '% won money at showdown'
+ )
+
+
def saw_f(stat_dict, player):
try:
@@ -156,7 +199,7 @@ def fold_f(stat_dict, player):
'ff=%3.1f' % (100*stat) + '%',
'fold_f=%3.1f' % (100*stat) + '%',
'(%d/%d)' % (stat_dict[player]['fold_2'], stat_dict[player]['saw_f']),
- 'folded fourth'
+ 'folded flop/4th'
)
except:
return (stat,
@@ -164,11 +207,350 @@ def fold_f(stat_dict, player):
'ff=%3.1f' % (0) + '%',
'fold_f=%3.1f' % (0) + '%',
'(%d/%d)' % (0, 0),
- 'folded fourth'
+ 'folded flop/4th'
)
+def steal(stat_dict, player):
+ stat = 0.0
+ try:
+ stat = stat_dict[player]['steal']/stat_dict[player]['steal_opp']
+ return (stat,
+ '%3.1f' % (100*stat) + '%',
+ 'st=%3.1f' % (100*stat) + '%',
+ 'steal=%3.1f' % (100*stat) + '%',
+ '(%d/%d)' % (stat_dict[player]['steal'], stat_dict[player]['steal_opp']),
+ '% steal attempted'
+ )
+ except:
+ return (stat,
+ '%3.1f' % (0) + '%',
+ 'st=%3.1f' % (0) + '%',
+ 'steal=%3.1f' % (0) + '%',
+ '(%d/%d)' % (0, 0),
+ '% steal attempted'
+ )
-if __name__=="__main__":
+def f_SB_steal(stat_dict, player):
+ stat = 0.0
+ try:
+ stat = stat_dict[player]['SBnotDef']/stat_dict[player]['SBstolen']
+ return (stat,
+ '%3.1f' % (100*stat) + '%',
+ 'fSB=%3.1f' % (100*stat) + '%',
+ 'fSB_s=%3.1f' % (100*stat) + '%',
+ '(%d/%d)' % (stat_dict[player]['SBnotDef'], stat_dict[player]['SBstolen']),
+ '% folded SB to steal'
+ )
+ except:
+ return (stat,
+ '%3.1f' % (0) + '%',
+ 'fSB=%3.1f' % (0) + '%',
+ 'fSB_s=%3.1f' % (0) + '%',
+ '(%d/%d)' % (0, 0),
+ '% folded SB to steal'
+ )
+
+def f_BB_steal(stat_dict, player):
+ stat = 0.0
+ try:
+ stat = stat_dict[player]['BBnotDef']/stat_dict[player]['BBstolen']
+ return (stat,
+ '%3.1f' % (100*stat) + '%',
+ 'fBB=%3.1f' % (100*stat) + '%',
+ 'fBB_s=%3.1f' % (100*stat) + '%',
+ '(%d/%d)' % (stat_dict[player]['BBnotDef'], stat_dict[player]['BBstolen']),
+ '% folded BB to steal'
+ )
+ except:
+ return (stat,
+ '%3.1f' % (0) + '%',
+ 'fBB=%3.1f' % (0) + '%',
+ 'fBB_s=%3.1f' % (0) + '%',
+ '(%d/%d)' % (0, 0),
+ '% folded BB to steal'
+ )
+
+def three_B_0(stat_dict, player):
+ stat = 0.0
+ try:
+ stat = stat_dict[player]['TB_0']/stat_dict[player]['TB_opp_0']
+ return (stat,
+ '%3.1f' % (100*stat) + '%',
+ '3B=%3.1f' % (100*stat) + '%',
+ '3B_pf=%3.1f' % (100*stat) + '%',
+ '(%d/%d)' % (stat_dict[player]['TB_0'], stat_dict[player]['TB_opp_0']),
+ '% 3/4 Bet preflop/3rd'
+ )
+ except:
+ return (stat,
+ '%3.1f' % (0) + '%',
+ '3B=%3.1f' % (0) + '%',
+ '3B_pf=%3.1f' % (0) + '%',
+ '(%d/%d)' % (0, 0),
+ '% 3/4 Bet preflop/3rd'
+ )
+
+def WMsF(stat_dict, player):
+ stat = 0.0
+ try:
+ stat = stat_dict[player]['w_w_s_1']/stat_dict[player]['saw_f']
+ return (stat,
+ '%3.1f' % (100*stat) + '%',
+ 'wf=%3.1f' % (100*stat) + '%',
+ 'w_w_f=%3.1f' % (100*stat) + '%',
+ '(%d/%d)' % (stat_dict[player]['w_w_s_1'], stat_dict[player]['saw_f']),
+ '% won$/saw flop/4th'
+ )
+ except:
+ return (stat,
+ '%3.1f' % (0) + '%',
+ 'wf=%3.1f' % (0) + '%',
+ 'w_w_f=%3.1f' % (0) + '%',
+ '(%d/%d)' % (0, 0),
+ '% won$/saw flop/4th'
+ )
+
+def a_freq_1(stat_dict, player):
+ stat = 0.0
+ try:
+ stat = stat_dict[player]['aggr_1']/stat_dict[player]['saw_f']
+ return (stat,
+ '%3.1f' % (100*stat) + '%',
+ 'a1=%3.1f' % (100*stat) + '%',
+ 'a_fq_1=%3.1f' % (100*stat) + '%',
+ '(%d/%d)' % (stat_dict[player]['aggr_1'], stat_dict[player]['saw_f']),
+ 'Aggression Freq flop/4th'
+ )
+ except:
+ return (stat,
+ '%3.1f' % (0) + '%',
+ 'a1=%3.1f' % (0) + '%',
+ 'a_fq_1=%3.1f' % (0) + '%',
+ '(%d/%d)' % (0, 0),
+ 'Aggression Freq flop/4th'
+ )
+
+def a_freq_2(stat_dict, player):
+ stat = 0.0
+ try:
+ stat = stat_dict[player]['aggr_2']/stat_dict[player]['saw_2']
+ return (stat,
+ '%3.1f' % (100*stat) + '%',
+ 'a2=%3.1f' % (100*stat) + '%',
+ 'a_fq_2=%3.1f' % (100*stat) + '%',
+ '(%d/%d)' % (stat_dict[player]['aggr_2'], stat_dict[player]['saw_2']),
+ 'Aggression Freq turn/5th'
+ )
+ except:
+ return (stat,
+ '%3.1f' % (0) + '%',
+ 'a2=%3.1f' % (0) + '%',
+ 'a_fq_2=%3.1f' % (0) + '%',
+ '(%d/%d)' % (0, 0),
+ 'Aggression Freq turn/5th'
+ )
+
+def a_freq_3(stat_dict, player):
+ stat = 0.0
+ try:
+ stat = stat_dict[player]['aggr_3']/stat_dict[player]['saw_3']
+ return (stat,
+ '%3.1f' % (100*stat) + '%',
+ 'a3=%3.1f' % (100*stat) + '%',
+ 'a_fq_3=%3.1f' % (100*stat) + '%',
+ '(%d/%d)' % (stat_dict[player]['aggr_1'], stat_dict[player]['saw_1']),
+ 'Aggression Freq river/6th'
+ )
+ except:
+ return (stat,
+ '%3.1f' % (0) + '%',
+ 'a3=%3.1f' % (0) + '%',
+ 'a_fq_3=%3.1f' % (0) + '%',
+ '(%d/%d)' % (0, 0),
+ 'Aggression Freq river/6th'
+ )
+
+def a_freq_4(stat_dict, player):
+ stat = 0.0
+ try:
+ stat = stat_dict[player]['aggr_4']/stat_dict[player]['saw_4']
+ return (stat,
+ '%3.1f' % (100*stat) + '%',
+ 'a4=%3.1f' % (100*stat) + '%',
+ 'a_fq_4=%3.1f' % (100*stat) + '%',
+ '(%d/%d)' % (stat_dict[player]['aggr_4'], stat_dict[player]['saw_4']),
+ 'Aggression Freq 7th'
+ )
+ except:
+ return (stat,
+ '%3.1f' % (0) + '%',
+ 'a1=%3.1f' % (0) + '%',
+ 'a_fq_1=%3.1f' % (0) + '%',
+ '(%d/%d)' % (0, 0),
+ 'Aggression Freq flop/4th'
+ )
+
+def cb_1(stat_dict, player):
+ stat = 0.0
+ try:
+ stat = stat_dict[player]['CB_1']/stat_dict[player]['CB_opp_1']
+ return (stat,
+ '%3.1f' % (100*stat) + '%',
+ 'cb1=%3.1f' % (100*stat) + '%',
+ 'cb_1=%3.1f' % (100*stat) + '%',
+ '(%d/%d)' % (stat_dict[player]['CB_1'], stat_dict[player]['CB_opp_1']),
+ '% continuation bet flop/4th'
+ )
+ except:
+ return (stat,
+ '%3.1f' % (0) + '%',
+ 'cb1=%3.1f' % (0) + '%',
+ 'cb_1=%3.1f' % (0) + '%',
+ '(%d/%d)' % (0, 0),
+ '% continuation bet flop/4th'
+ )
+
+def cb_2(stat_dict, player):
+ stat = 0.0
+ try:
+ stat = stat_dict[player]['CB_2']/stat_dict[player]['CB_opp_2']
+ return (stat,
+ '%3.1f' % (100*stat) + '%',
+ 'cb2=%3.1f' % (100*stat) + '%',
+ 'cb_2=%3.1f' % (100*stat) + '%',
+ '(%d/%d)' % (stat_dict[player]['CB_2'], stat_dict[player]['CB_opp_2']),
+ '% continuation bet turn/5th'
+ )
+ except:
+ return (stat,
+ '%3.1f' % (0) + '%',
+ 'cb2=%3.1f' % (0) + '%',
+ 'cb_2=%3.1f' % (0) + '%',
+ '(%d/%d)' % (0, 0),
+ '% continuation bet turn/5th'
+ )
+
+def cb_3(stat_dict, player):
+ stat = 0.0
+ try:
+ stat = stat_dict[player]['CB_3']/stat_dict[player]['CB_opp_3']
+ return (stat,
+ '%3.1f' % (100*stat) + '%',
+ 'cb3=%3.1f' % (100*stat) + '%',
+ 'cb_3=%3.1f' % (100*stat) + '%',
+ '(%d/%d)' % (stat_dict[player]['CB_3'], stat_dict[player]['CB_opp_3']),
+ '% continuation bet river/6th'
+ )
+ except:
+ return (stat,
+ '%3.1f' % (0) + '%',
+ 'cb3=%3.1f' % (0) + '%',
+ 'cb_3=%3.1f' % (0) + '%',
+ '(%d/%d)' % (0, 0),
+ '% continuation bet river/6th'
+ )
+
+def cb_4(stat_dict, player):
+ stat = 0.0
+ try:
+ stat = stat_dict[player]['CB_4']/stat_dict[player]['CB_opp_4']
+ return (stat,
+ '%3.1f' % (100*stat) + '%',
+ 'cb4=%3.1f' % (100*stat) + '%',
+ 'cb_4=%3.1f' % (100*stat) + '%',
+ '(%d/%d)' % (stat_dict[player]['CB_4'], stat_dict[player]['CB_opp_4']),
+ '% continuation bet 7th'
+ )
+ except:
+ return (stat,
+ '%3.1f' % (0) + '%',
+ 'cb4=%3.1f' % (0) + '%',
+ 'cb_4=%3.1f' % (0) + '%',
+ '(%d/%d)' % (0, 0),
+ '% continuation bet 7th'
+ )
+
+def ffreq_1(stat_dict, player):
+ stat = 0.0
+ try:
+ stat = stat_dict[player]['f_freq_1']/stat_dict[player]['was_raised_1']
+ return (stat,
+ '%3.1f' % (100*stat) + '%',
+ 'ff1=%3.1f' % (100*stat) + '%',
+ 'ff_1=%3.1f' % (100*stat) + '%',
+ '(%d/%d)' % (stat_dict[player]['f_freq_1'], stat_dict[player]['was_raised_1']),
+ '% fold frequency flop/4th'
+ )
+ except:
+ return (stat,
+ '%3.1f' % (0) + '%',
+ 'ff1=%3.1f' % (0) + '%',
+ 'ff_1=%3.1f' % (0) + '%',
+ '(%d/%d)' % (0, 0),
+ '% fold frequency flop/4th'
+ )
+
+def ffreq_2(stat_dict, player):
+ stat = 0.0
+ try:
+ stat = stat_dict[player]['f_freq_2']/stat_dict[player]['was_raised_2']
+ return (stat,
+ '%3.1f' % (100*stat) + '%',
+ 'ff2=%3.1f' % (100*stat) + '%',
+ 'ff_2=%3.1f' % (100*stat) + '%',
+ '(%d/%d)' % (stat_dict[player]['f_freq_2'], stat_dict[player]['was_raised_2']),
+ '% fold frequency turn/5th'
+ )
+ except:
+ return (stat,
+ '%3.1f' % (0) + '%',
+ 'ff2=%3.1f' % (0) + '%',
+ 'ff_2=%3.1f' % (0) + '%',
+ '(%d/%d)' % (0, 0),
+ '% fold frequency turn/5th'
+ )
+
+def ffreq_3(stat_dict, player):
+ stat = 0.0
+ try:
+ stat = stat_dict[player]['f_freq_3']/stat_dict[player]['was_raised_3']
+ return (stat,
+ '%3.1f' % (100*stat) + '%',
+ 'ff3=%3.1f' % (100*stat) + '%',
+ 'ff_3=%3.1f' % (100*stat) + '%',
+ '(%d/%d)' % (stat_dict[player]['f_freq_3'], stat_dict[player]['was_raised_3']),
+ '% fold frequency river/6th'
+ )
+ except:
+ return (stat,
+ '%3.1f' % (0) + '%',
+ 'ff3=%3.1f' % (0) + '%',
+ 'ff_3=%3.1f' % (0) + '%',
+ '(%d/%d)' % (0, 0),
+ '% fold frequency river/6th'
+ )
+
+def ffreq_4(stat_dict, player):
+ stat = 0.0
+ try:
+ stat = stat_dict[player]['f_freq_4']/stat_dict[player]['was_raised_4']
+ return (stat,
+ '%3.1f' % (100*stat) + '%',
+ 'ff4=%3.1f' % (100*stat) + '%',
+ 'ff_4=%3.1f' % (100*stat) + '%',
+ '(%d/%d)' % (stat_dict[player]['f_freq_4'], stat_dict[player]['was_raised_4']),
+ '% fold frequency 7th'
+ )
+ except:
+ return (stat,
+ '%3.1f' % (0) + '%',
+ 'ff4=%3.1f' % (0) + '%',
+ 'ff_4=%3.1f' % (0) + '%',
+ '(%d/%d)' % (0, 0),
+ '% fold frequency 7th'
+ )
+
+if __name__== "__main__":
c = Configuration.Config()
db_connection = Database.Database(c, 'fpdb', 'holdem')
h = db_connection.get_last_hand()
@@ -181,6 +563,24 @@ if __name__=="__main__":
print "player = ", player, do_stat(stat_dict, player = player, stat = 'saw_f')
print "player = ", player, do_stat(stat_dict, player = player, stat = 'n')
print "player = ", player, do_stat(stat_dict, player = player, stat = 'fold_f')
-
+ print "player = ", player, do_stat(stat_dict, player = player, stat = 'wmsd')
+ print "player = ", player, do_stat(stat_dict, player = player, stat = 'steal')
+ print "player = ", player, do_stat(stat_dict, player = player, stat = 'f_SB_steal')
+ print "player = ", player, do_stat(stat_dict, player = player, stat = 'f_BB_steal')
+ print "player = ", player, do_stat(stat_dict, player = player, stat = 'three_B_0')
+ print "player = ", player, do_stat(stat_dict, player = player, stat = 'WMsF')
+ print "player = ", player, do_stat(stat_dict, player = player, stat = 'a_freq_1')
+ print "player = ", player, do_stat(stat_dict, player = player, stat = 'a_freq_2')
+ print "player = ", player, do_stat(stat_dict, player = player, stat = 'a_freq_3')
+ print "player = ", player, do_stat(stat_dict, player = player, stat = 'a_freq_4')
+ print "player = ", player, do_stat(stat_dict, player = player, stat = 'cb_1')
+ print "player = ", player, do_stat(stat_dict, player = player, stat = 'cb_2')
+ print "player = ", player, do_stat(stat_dict, player = player, stat = 'cb_3')
+ print "player = ", player, do_stat(stat_dict, player = player, stat = 'cb_4')
+ print "player = ", player, do_stat(stat_dict, player = player, stat = 'ffreq_1')
+ print "player = ", player, do_stat(stat_dict, player = player, stat = 'ffreq_2')
+ print "player = ", player, do_stat(stat_dict, player = player, stat = 'ffreq_3')
+ print "player = ", player, do_stat(stat_dict, player = player, stat = 'ffreq_4')
+
db_connection.close