diff --git a/pyfpdb/AbsoluteToFpdb.py b/pyfpdb/AbsoluteToFpdb.py index e0ceed48..d55f4710 100755 --- a/pyfpdb/AbsoluteToFpdb.py +++ b/pyfpdb/AbsoluteToFpdb.py @@ -54,7 +54,7 @@ class Absolute(HandHistoryConverter): (?P\(1\son\s1\)|Single\ Tournament|Multi\ Normal\ Tournament|)\s* (?PNo\ Limit|Pot\ Limit|Normal|)\s? (?P\$|\s€|) - (?P[.0-9]+)/?(?:\$|\s€|)(?P[.0-9]+)? + (?P[.,0-9]+)/?(?:\$|\s€|)(?P[.,0-9]+)? \s+-\s+ (?P\d\d\d\d-\d\d-\d\d\ \d\d:\d\d:\d\d)\s+ (?: \( (?P[A-Z]+) \)\s+ )? @@ -95,14 +95,14 @@ class Absolute(HandHistoryConverter): player_re = "(?P" + "|".join(map(re.escape, players)) + ")" logging.debug("player_re: "+ player_re) #(?P\$| €|)(?P[0-9]*[.0-9]+) - self.re_PostSB = re.compile(ur"^%s - Posts small blind (?:\$| €|)(?P[0-9]*[.0-9]+)" % player_re, re.MULTILINE) - self.re_PostBB = re.compile(ur"^%s - Posts big blind (?:\$| €|)(?P[0-9]*[.0-9]+)" % player_re, re.MULTILINE) + self.re_PostSB = re.compile(ur"^%s - Posts small blind (?:\$| €|)(?P[,.0-9]+)" % player_re, re.MULTILINE) + self.re_PostBB = re.compile(ur"^%s - Posts big blind (?:\$| €|)(?P[.,0-9]+)" % player_re, re.MULTILINE) # TODO: Absolute posting when coming in new: %s - Posts $0.02 .. should that be a new Post line? where do we need to add support for that? *confused* - self.re_PostBoth = re.compile(ur"^%s - Posts dead (?:\$| €|)(?P[0-9]*[.0-9]+)" % player_re, re.MULTILINE) - self.re_Action = re.compile(ur"^%s - (?PBets |Raises |All-In |All-In\(Raise\) |Calls |Folds|Checks)?\$?(?P[0-9]*[.0-9]+)?" % player_re, re.MULTILINE) + self.re_PostBoth = re.compile(ur"^%s - Posts dead (?:\$| €|)(?P[,.0-9]+)" % player_re, re.MULTILINE) + self.re_Action = re.compile(ur"^%s - (?PBets |Raises |All-In |All-In\(Raise\) |Calls |Folds|Checks)?\$?(?P[,.0-9]+)?" % player_re, re.MULTILINE) self.re_ShowdownAction = re.compile(ur"^%s - Shows \[(?P.*)\]" % player_re, re.MULTILINE) - self.re_CollectPot = re.compile(ur"^Seat [0-9]: %s(?: \(dealer\)|)(?: \(big blind\)| \(small blind\)|) (?:won|collected) Total \((?:\$| €|)(?P[0-9]*[.0-9]+)\)" % player_re, re.MULTILINE) - self.re_Antes = re.compile(ur"^%s - Ante \[(?:\$| €|)(?P[.0-9]+)" % player_re, re.MULTILINE) + self.re_CollectPot = re.compile(ur"^Seat [0-9]: %s(?: \(dealer\)|)(?: \(big blind\)| \(small blind\)|) (?:won|collected) Total \((?:\$| €|)(?P[,.0-9]+)\)" % player_re, re.MULTILINE) + self.re_Antes = re.compile(ur"^%s - Ante \[(?:\$| €|)(?P[,.0-9]+)" % player_re, re.MULTILINE) #self.re_BringIn = re.compile(ur"^%s posts bring-in (?:\$| €|)(?P[.0-9]+)\." % player_re, re.MULTILINE) self.re_HeroCards = re.compile(ur"^Dealt to %s \[(?P.*)\]" % player_re, re.MULTILINE) @@ -175,11 +175,13 @@ class Absolute(HandHistoryConverter): if info['currency'] == 'T$': info['type'] = 'tour' if 'SB' in mg: + mg['SB'] = mg['SB'].replace(',', '') info['sb'] = mg['SB'] if 'BB' in mg: info['bb'] = mg['BB'] # NB: SB, BB must be interpreted as blinds or bets depending on limit type. if info['bb'] is None: + mg['SB'] = mg['SB'].replace(',', '') info['bb'] = mg['SB'] info['sb'] = str(float(mg['SB']) * 0.5) # TODO: AP does provide Small BET for Limit .. I think? at least 1-on-1 limit they do.. sigh @@ -330,17 +332,21 @@ class Absolute(HandHistoryConverter): for action in m: logging.debug("%s %s" % (action.group('ATYPE'), action.groupdict())) if action.group('ATYPE') == 'Raises ' or action.group('ATYPE') == 'All-In(Raise) ': - hand.addCallandRaise( street, action.group('PNAME'), action.group('BET') ) + bet = action.group('BET').replace(',', '') + hand.addCallandRaise( street, action.group('PNAME'), bet) elif action.group('ATYPE') == 'Calls ': - hand.addCall( street, action.group('PNAME'), action.group('BET') ) + bet = action.group('BET').replace(',', '') + hand.addCall( street, action.group('PNAME'), bet) elif action.group('ATYPE') == 'Bets ' or action.group('ATYPE') == 'All-In ': - hand.addBet( street, action.group('PNAME'), action.group('BET') ) + bet = action.group('BET').replace(',', '') + hand.addBet( street, action.group('PNAME'), bet) elif action.group('ATYPE') == 'Folds': hand.addFold( street, action.group('PNAME')) elif action.group('ATYPE') == 'Checks': hand.addCheck( street, action.group('PNAME')) elif action.group('ATYPE') == ' complete to': # TODO: not supported yet ? - hand.addComplete( street, action.group('PNAME'), action.group('BET')) + bet = action.group('BET').replace(',', '') + hand.addComplete( street, action.group('PNAME'), bet) else: logging.debug(_("Unimplemented readAction: %s %s" %(action.group('PNAME'),action.group('ATYPE'),))) @@ -357,7 +363,8 @@ class Absolute(HandHistoryConverter): def readCollectPot(self,hand): for m in self.re_CollectPot.finditer(hand.handText): - hand.addCollectPot(player=m.group('PNAME'),pot=m.group('POT')) + pot = m.group('POT').replace(',','') + hand.addCollectPot(player=m.group('PNAME'),pot=pot) def readShownCards(self,hand): """Reads lines where hole & board cards are mixed to form a hand (summary lines)""" diff --git a/pyfpdb/CarbonToFpdb.py b/pyfpdb/CarbonToFpdb.py index cf8794da..1a1541ee 100644 --- a/pyfpdb/CarbonToFpdb.py +++ b/pyfpdb/CarbonToFpdb.py @@ -66,7 +66,7 @@ class Carbon(HandHistoryConverter): # Static regexes re_SplitHands = re.compile(r'\n+(?=)') - re_GameInfo = re.compile(r'', re.MULTILINE) + re_GameInfo = re.compile(r'', re.MULTILINE) re_HandInfo = re.compile(r'[0-9]+)">') re_PlayerInfo = re.compile(r'', re.MULTILINE) diff --git a/pyfpdb/GuiTourneyImport.py b/pyfpdb/GuiTourneyImport.py index d8fe6ec5..3f24996b 100755 --- a/pyfpdb/GuiTourneyImport.py +++ b/pyfpdb/GuiTourneyImport.py @@ -238,7 +238,7 @@ class SummaryImporter: self.filelist = {} def readFile(self, tsc, filename): - codepage = ["utf8"] + codepage = ["utf8", "utf16"] whole_file = None tsc.codepage @@ -248,7 +248,8 @@ class SummaryImporter: whole_file = in_fh.read() in_fh.close() break - except: + except UnicodeDecodeError, e: + log.warn(_("GTI.readFile: '%s'") % e) pass return whole_file diff --git a/pyfpdb/HUD_config.test.xml b/pyfpdb/HUD_config.test.xml index 11fa1be8..556bbede 100644 --- a/pyfpdb/HUD_config.test.xml +++ b/pyfpdb/HUD_config.test.xml @@ -567,7 +567,7 @@ Left-Drag to Move" - + diff --git a/pyfpdb/HUD_config.xml.example b/pyfpdb/HUD_config.xml.example index 8c43397f..9ac66289 100644 --- a/pyfpdb/HUD_config.xml.example +++ b/pyfpdb/HUD_config.xml.example @@ -778,7 +778,7 @@ Left-Drag to Move" - + diff --git a/pyfpdb/PokerStarsToFpdb.py b/pyfpdb/PokerStarsToFpdb.py index c86fc157..16c4091e 100644 --- a/pyfpdb/PokerStarsToFpdb.py +++ b/pyfpdb/PokerStarsToFpdb.py @@ -99,7 +99,9 @@ class PokerStars(HandHistoryConverter): (?P[.0-9]+) (?P\s-\s[%(LS)s\d\.]+\sCap\s-\s)? # Optional Cap part \s?(?P%(LEGAL_ISO)s)? - \)\s-\s # close paren of the stakes + \) # close paren of the stakes + (?P\s\[AAMS\sID:\s[A-Z0-9]+\])? # AAMS ID: in .it HH's + \s-\s (?P.*$) """ % substitutions, re.MULTILINE|re.VERBOSE) diff --git a/pyfpdb/Stove.py b/pyfpdb/Stove.py new file mode 100755 index 00000000..eb939c0f --- /dev/null +++ b/pyfpdb/Stove.py @@ -0,0 +1,309 @@ +#!/usr/bin/python +# -*- coding: iso-8859-15 +# +# stove.py +# Simple Hold'em equity calculator +# Copyright (C) 2007-2008 Mika Boström +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, version 3 of the License. +# +#TODO: gettextify + +import sys, random +import pokereval + +SUITS = ['h', 'd', 's', 'c'] + +ANY = 0 +SUITED = 1 +OFFSUIT = 2 + +ev = pokereval.PokerEval() + +holder = None + +class Holder: + def __init__(self): + self.hand = None + self.board = None + self.range = None + + +class Cards: + def __init__(self, c1, c2): + self.c1 = c1 + self.c2 = c2 + + def get(self): + return [c1, c2] + +class Board: + def __init__(self, b1=None, b2=None, b3=None, b4=None, b5=None): + self.b1 = b1 + self.b2 = b2 + self.b3 = b3 + self.b4 = b4 + self.b5 = b5 + + def get(self): + b = [] + if self.b3 is not None: + b.append(self.b1) + b.append(self.b2) + b.append(self.b3) + else: + b.extend(["__", "__", "__"]) + + if self.b4 is not None: + b.append(self.b4) + else: + b.append("__") + + if self.b5 is not None: + b.append(self.b5) + else: + b.append("__") + + return b + +class Range: + def __init__(self): + self.__hands = set() + + def add(self, hand): + self.__hands.add(hand) + + def expand(self, hands): + self.__hands.update(set(hands)) + + def get(self): + return sorted(self.__hands) + + + +class EV: + def __init__(self, plays, win, tie, lose): + self.n_hands = plays + self.n_wins = win + self.n_ties = tie + self.n_losses = lose + + +class SumEV: + def __init__(self): + self.n_hands = 0 + self.n_wins = 0 + self.n_ties = 0 + self.n_losses = 0 + + def add(self, ev): + self.n_hands += ev.n_hands + self.n_wins += ev.n_wins + self.n_ties += ev.n_ties + self.n_losses += ev.n_losses + + def show(self, hand, range): + win_pct = 100 * (float(self.n_wins) / float(self.n_hands)) + lose_pct = 100 * (float(self.n_losses) / float(self.n_hands)) + tie_pct = 100 * (float(self.n_ties) / float(self.n_hands)) + print 'Enumerated %d possible plays.' % self.n_hands + print 'Your hand: (%s %s)' % (hand.c1, hand.c2) + print 'Against the range: %s\n' % cards_from_range(range) + print ' Win Lose Tie' + print ' %5.2f%% %5.2f%% %5.2f%%' % (win_pct, lose_pct, tie_pct) + + +def usage(me): + print """Texas Hold'Em odds calculator +Calculates odds against a range of hands. + +To use: %s '' '' '' [...] + +Separate cards with space. +Separate hands in range with commas. +""" % me + +def cards_from_range(range): + s = '{' + for h in range: + if h.c1 == '__' and h.c2 == '__': + s += 'random, ' + else: + s += '%s%s, ' % (h.c1, h.c2) + s = s.rstrip(', ') + s += '}' + return s + + +# Expands hand abbreviations such as JJ and AK to full hand ranges. +# Takes into account cards already known to be in player's hand and/or +# board. +def expand_hands(abbrev, hand, board): + selection = -1 + known_cards = set() + known_cards.update(set([hand.c2, hand.c2])) + known_cards.update(set([board.b1, board.b2, board.b3, board.b4, board.b5])) + + # Card ranks may be different + r1 = abbrev[0] + r2 = abbrev[1] + # There may be a specifier: 's' for 'suited'; 'o' for 'off-suit' + if len(abbrev) == 3: + ltr = abbrev[2] + if ltr == 'o': + selection = OFFSUIT + elif ltr == 's': + selection = SUITED + else: + selection = ANY + + range = [] + considered = set() + for s1 in SUITS: + c1 = r1 + s1 + if c1 in known_cards: + continue + considered.add(c1) + for s2 in SUITS: + c2 = r2 + s2 + if selection == SUITED and s1 != s2: + continue + elif selection == OFFSUIT and s1 == s2: + continue + if c2 not in considered and c2 not in known_cards: + range.append(Cards(c1, c2)) + return range + + + + + +def parse_args(args, container): + # args[0] is the path being executed; need 3 more args + if len(args) < 4: + return False + + board = Board() + + # Board + b = args[1].strip().split() + if len(b) > 4: + board.b5 = b[4] + if len(b) > 3: + board.b4 = b[3] + if len(b) > 2: + board.b1 = b[0] + board.b2 = b[1] + board.b3 = b[2] + + # Our pocket cards + cc = args[2].strip().split() + c1 = cc[0] + c2 = cc[1] + pocket_cards = Cards(c1, c2) + + # Villain's range + range = Range() + hands_in_range = args[3].strip().split(',') + for h in hands_in_range: + _h = h.strip() + if len(_h) > 3: + cc = _h.split() + r1 = cc[0] + r2 = cc[1] + vp = Cards(r1, r2) + range.add(vp) + else: + range.expand(expand_hands(_h, pocket_cards, board)) + + holder.hand = pocket_cards + holder.range = range + holder.board = board + + return True + + +def odds_for_hand(hand1, hand2, board, iterations): + res = ev.poker_eval(game='holdem', + pockets = [ + hand1, + hand2 + ], + dead = [], + board = board, + iterations = iterations + ) + + plays = int(res['info'][0]) + eval = res['eval'][0] + + win = int(eval['winhi']) + lose = int(eval['losehi']) + tie = int(eval['tiehi']) + + _ev = EV(plays, win, tie, lose) + return _ev + + +def odds_for_range(holder): + sev = SumEV() + monte_carlo = False + + # Construct board list + b = [] + board = holder.board + if board.b3 is not None: + b.extend([board.b1, board.b2, board.b3]) + else: + b.extend(['__', '__', '__']) + monte_carlo = True + if board.b4 is not None: + b.append(board.b4) + else: + b.append("__") + if board.b5 is not None: + b.append(board.b5) + else: + b.append("__") + + if monte_carlo: + print 'No board given. Using Monte-Carlo simulation...' + iters = random.randint(25000, 125000) + else: + iters = -1 + for h in holder.range.get(): + e = odds_for_hand( + [holder.hand.c1, holder.hand.c2], + [h.c1, h.c2], + b, + iterations=iters + ) + sev.add(e) + + sev.show(holder.hand, holder.range.get()) + + + +holder = Holder() +if not parse_args(sys.argv, holder): + usage(sys.argv[0]) + sys.exit(2) +odds_for_range(holder) + +# debugs +#print '%s, %s' % ( holder.hand.c1, holder.hand.c2) +#print '%s %s %s %s %s' % (holder.board.b1, holder.board.b2, +# holder.board.b3, holder.board.b4, holder.board.b5) +#while True: +# try: +# vl = holder.range.get() +# v = vl.pop() +# print '\t%s %s' % (v.c1, v.c2) +# except IndexError: +# break + + + + diff --git a/pyfpdb/TestSummaryImport.py b/pyfpdb/TestSummaryImport.py index 88a2cd7e..2aa2a81b 100755 --- a/pyfpdb/TestSummaryImport.py +++ b/pyfpdb/TestSummaryImport.py @@ -128,7 +128,7 @@ def main(argv=None): importer = SummaryImporter(config, sql, None) PokerStarsErrors = FpdbError('PokerStars') - #FTPErrors = FpdbError('Full Tilt Poker') + FTPErrors = FpdbError('Full Tilt Poker') #PartyPokerErrors = FpdbError('Party Poker') #BetfairErrors = FpdbError('Betfair') #OnGameErrors = FpdbError('OnGame') @@ -142,7 +142,7 @@ def main(argv=None): ErrorsList = [ PokerStarsErrors, - #FTPErrors, PartyPokerErrors, + FTPErrors, #PartyPokerErrors, #BetfairErrors, OnGameErrors, AbsoluteErrors, #EverleafErrors, CarbonErrors, PKRErrors, #iPokerErrors, WinamaxErrors, UltimateBetErrors, @@ -150,7 +150,7 @@ def main(argv=None): sites = { 'PokerStars' : True, - #'Full Tilt Poker' : True, + 'Full Tilt Poker' : True, #'PartyPoker' : True, #'Betfair' : True, #'OnGame' : True, @@ -165,8 +165,8 @@ def main(argv=None): if sites['PokerStars'] == True: walk_testfiles("regression-test-files/summaries/Stars/", compare, importer, PokerStarsErrors, "PokerStars") - #if sites['Full Tilt Poker'] == True: - # walk_testfiles("regression-test-files/cash/FTP/", compare, importer, FTPErrors, "Full Tilt Poker") + if sites['Full Tilt Poker'] == True: + walk_testfiles("regression-test-files/summaries/FTP/", compare, importer, FTPErrors, "Full Tilt Poker") # walk_testfiles("regression-test-files/tour/FTP/", compare, importer, FTPErrors, "Full Tilt Poker") #if sites['PartyPoker'] == True: # walk_testfiles("regression-test-files/cash/PartyPoker/", compare, importer, PartyPokerErrors, "PartyPoker") diff --git a/pyfpdb/TourneySummary.py b/pyfpdb/TourneySummary.py index 9ca4c27b..4ed91b65 100644 --- a/pyfpdb/TourneySummary.py +++ b/pyfpdb/TourneySummary.py @@ -49,7 +49,7 @@ class TourneySummary(object): LCS = {'H':'h', 'D':'d', 'C':'c', 'S':'s'} # SAL- TO KEEP ?? SYMBOL = {'USD': '$', 'EUR': u'$', 'T$': '', 'play': ''} MS = {'horse' : 'HORSE', '8game' : '8-Game', 'hose' : 'HOSE', 'ha': 'HA'} - SITEIDS = {'Fulltilt':1, 'PokerStars':2, 'Everleaf':3, 'Win2day':4, 'OnGame':5, 'UltimateBet':6, 'Betfair':7, 'Absolute':8, 'PartyPoker':9 } + SITEIDS = {'Fulltilt':1, 'Full Tilt Poker':1, 'PokerStars':2, 'Everleaf':3, 'Win2day':4, 'OnGame':5, 'UltimateBet':6, 'Betfair':7, 'Absolute':8, 'PartyPoker':9 } def __init__(self, db, config, siteName, summaryText, builtFrom = "HHC"): diff --git a/pyfpdb/regression-test-files/cash/PartyPoker/Flop/NLHE-USD-0.01-0.02-201008.Sample.txt b/pyfpdb/regression-test-files/cash/PartyPoker/Flop/NLHE-USD-0.01-0.02-201008.Sample.txt new file mode 100644 index 00000000..b55ca772 Binary files /dev/null and b/pyfpdb/regression-test-files/cash/PartyPoker/Flop/NLHE-USD-0.01-0.02-201008.Sample.txt differ diff --git a/pyfpdb/regression-test-files/cash/PartyPoker/Flop/NLHE-USD-0.01-0.02-201008.Sample.txt.hp b/pyfpdb/regression-test-files/cash/PartyPoker/Flop/NLHE-USD-0.01-0.02-201008.Sample.txt.hp new file mode 100644 index 00000000..c67b6c5f --- /dev/null +++ b/pyfpdb/regression-test-files/cash/PartyPoker/Flop/NLHE-USD-0.01-0.02-201008.Sample.txt.hp @@ -0,0 +1,565 @@ +{ u'Lisypoker': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 2, + 'raiseFirstInChance': True, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 9, + 'sitout': False, + 'startCards': 0, + 'startCash': 357, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': False, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': False, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': 0, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'Tortozendo': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': True, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': True, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 0, + 'raiseFirstInChance': True, + 'raisedFirstIn': True, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 6, + 'sitout': False, + 'startCards': 0, + 'startCash': 214, + 'street0Aggr': True, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': True, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': True, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': False, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': -8, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'heulot': { 'card1': 49, + 'card2': 9, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 'B', + 'raiseFirstInChance': False, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': True, + 'seatNo': 8, + 'sitout': False, + 'startCards': 114, + 'startCash': 206, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 1, + 'street0Raises': 0, + 'street0VPI': True, + 'street0_3BChance': True, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': True, + 'street1Bets': 1, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': True, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': True, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': True, + 'street3Aggr': True, + 'street3Bets': 1, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': True, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': -30, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'potikuus': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 1, + 'raiseFirstInChance': True, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 1, + 'sitout': False, + 'startCards': 0, + 'startCash': 44, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': False, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': False, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': 0, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'romkarnb': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 2, + 'raiseFirstInChance': False, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 4, + 'sitout': False, + 'startCards': 0, + 'startCash': 80, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': False, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': False, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': 0, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'suicini03': { 'card1': 11, + 'card2': 23, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': True, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': True, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': True, + 'otherRaisedStreet4': False, + 'position': 'S', + 'raiseFirstInChance': False, + 'raisedFirstIn': False, + 'rake': 3, + 'sawShowdown': True, + 'seatNo': 7, + 'sitout': False, + 'startCards': 128, + 'startCash': 144, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 1, + 'street0Raises': 0, + 'street0VPI': True, + 'street0_3BChance': True, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 1, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': True, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': True, + 'street2CheckCallRaiseDone': True, + 'street2Raises': 0, + 'street2Seen': True, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 1, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': True, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': 35, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 65, + 'wonAtSD': 1.0, + 'wonWhenSeenStreet1': 1.0, + 'wonWhenSeenStreet2': 1.0, + 'wonWhenSeenStreet3': 1.0, + 'wonWhenSeenStreet4': 0.0}} + diff --git a/pyfpdb/regression-test-files/cash/Win2day/Flop/NLHE-USD-0.05-0.10-Date-unknown.Sample.txt b/pyfpdb/regression-test-files/cash/Win2day/Flop/NLHE-USD-0.05-0.10-Date-unknown.Sample.txt new file mode 100644 index 00000000..fc40c75b --- /dev/null +++ b/pyfpdb/regression-test-files/cash/Win2day/Flop/NLHE-USD-0.05-0.10-Date-unknown.Sample.txt @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pyfpdb/regression-test-files/cash/Win2day/Flop/NLHE-USD-0.05-0.10-Date-unknown.Sample.txt.hp b/pyfpdb/regression-test-files/cash/Win2day/Flop/NLHE-USD-0.05-0.10-Date-unknown.Sample.txt.hp new file mode 100644 index 00000000..0ee07b2d --- /dev/null +++ b/pyfpdb/regression-test-files/cash/Win2day/Flop/NLHE-USD-0.05-0.10-Date-unknown.Sample.txt.hp @@ -0,0 +1,282 @@ +{ u'Hero': { 'card1': 8, + 'card2': 19, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': True, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': True, + 'otherRaisedStreet2': True, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 'B', + 'raiseFirstInChance': False, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 4, + 'sitout': False, + 'startCards': 73, + 'startCash': 795, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 1, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': True, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': True, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': -30, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'Player2': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 0, + 'raiseFirstInChance': True, + 'raisedFirstIn': False, + 'rake': 0, + 'sawShowdown': False, + 'seatNo': 1, + 'sitout': False, + 'startCards': 0, + 'startCash': 1960, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 0, + 'street0Raises': 0, + 'street0VPI': False, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': False, + 'street1Bets': 0, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': False, + 'street2Aggr': False, + 'street2Bets': 0, + 'street2CBChance': False, + 'street2CBDone': False, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': False, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': 0, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 0, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 0.0, + 'wonWhenSeenStreet2': 0.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}, + u'Villain': { 'card1': 0, + 'card2': 0, + 'card3': 0, + 'card4': 0, + 'card5': 0, + 'card6': 0, + 'card7': 0, + 'foldBbToStealChance': False, + 'foldSbToStealChance': False, + 'foldToOtherRaisedStreet0': False, + 'foldToOtherRaisedStreet1': False, + 'foldToOtherRaisedStreet2': False, + 'foldToOtherRaisedStreet3': False, + 'foldToOtherRaisedStreet4': False, + 'foldToStreet1CBChance': False, + 'foldToStreet1CBDone': False, + 'foldToStreet2CBChance': False, + 'foldToStreet2CBDone': False, + 'foldToStreet3CBChance': False, + 'foldToStreet3CBDone': False, + 'foldToStreet4CBChance': False, + 'foldToStreet4CBDone': False, + 'foldedBbToSteal': False, + 'foldedSbToSteal': False, + 'other3BStreet0': False, + 'other4BStreet0': False, + 'otherRaisedStreet0': False, + 'otherRaisedStreet1': False, + 'otherRaisedStreet2': False, + 'otherRaisedStreet3': False, + 'otherRaisedStreet4': False, + 'position': 'S', + 'raiseFirstInChance': True, + 'raisedFirstIn': False, + 'rake': 3, + 'sawShowdown': False, + 'seatNo': 2, + 'sitout': False, + 'startCards': 0, + 'startCash': 993, + 'street0Aggr': False, + 'street0Bets': 0, + 'street0Calls': 1, + 'street0Raises': 0, + 'street0VPI': True, + 'street0_3BChance': False, + 'street0_3BDone': False, + 'street0_4BChance': False, + 'street0_4BDone': False, + 'street1Aggr': True, + 'street1Bets': 1, + 'street1CBChance': False, + 'street1CBDone': False, + 'street1Calls': 0, + 'street1CheckCallRaiseChance': False, + 'street1CheckCallRaiseDone': False, + 'street1Raises': 0, + 'street1Seen': True, + 'street2Aggr': True, + 'street2Bets': 1, + 'street2CBChance': True, + 'street2CBDone': True, + 'street2Calls': 0, + 'street2CheckCallRaiseChance': False, + 'street2CheckCallRaiseDone': False, + 'street2Raises': 0, + 'street2Seen': True, + 'street3Aggr': False, + 'street3Bets': 0, + 'street3CBChance': False, + 'street3CBDone': False, + 'street3Calls': 0, + 'street3CheckCallRaiseChance': False, + 'street3CheckCallRaiseDone': False, + 'street3Raises': 0, + 'street3Seen': False, + 'street4Aggr': False, + 'street4Bets': 0, + 'street4CBChance': False, + 'street4CBDone': False, + 'street4Calls': 0, + 'street4CheckCallRaiseChance': False, + 'street4CheckCallRaiseDone': False, + 'street4Raises': 0, + 'street4Seen': False, + 'totalProfit': 27, + 'tourneyTypeId': None, + 'tourneysPlayersIds': None, + 'winnings': 57, + 'wonAtSD': 0.0, + 'wonWhenSeenStreet1': 1.0, + 'wonWhenSeenStreet2': 1.0, + 'wonWhenSeenStreet3': 0.0, + 'wonWhenSeenStreet4': 0.0}} diff --git a/pyfpdb/regression-test-files/summaries/FTP/LHE-USD-SnG-9man-2-200910.Hero.lost.Sample.txt b/pyfpdb/regression-test-files/summaries/FTP/LHE-USD-SnG-9man-2-200910.Hero.lost.Sample.txt new file mode 100644 index 00000000..97f8321e Binary files /dev/null and b/pyfpdb/regression-test-files/summaries/FTP/LHE-USD-SnG-9man-2-200910.Hero.lost.Sample.txt differ