From 66d938accccb5b20bd2e1aa96a69346148c84b54 Mon Sep 17 00:00:00 2001 From: steffen123 Date: Wed, 20 Aug 2008 20:29:08 +0100 Subject: [PATCH] p62 - major patch from ray with new stats in HUD added db todo file with the things that are left for the db --- docs/db-todo.txt | 22 ++ docs/known-bugs-and-planned-features.txt | 3 + docs/tabledesign.html | 4 +- pyfpdb/Configuration.py | 1 - pyfpdb/Database.py | 1 - pyfpdb/Hud.py | 11 +- pyfpdb/Mucked.py | 2 - pyfpdb/SQL.py | 95 ++---- pyfpdb/Stats.py | 418 ++++++++++++++++++++++- 9 files changed, 479 insertions(+), 78 deletions(-) create mode 100644 docs/db-todo.txt 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