pokerstats 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.1.0
1
+ 2.2.0
data/bin/checkps CHANGED
@@ -89,12 +89,12 @@ def dopsfile(file, players_shown)
89
89
  posfa = report[:t_postflop_passive].zero? ? 0.0 : [1.0 * report[:t_postflop_aggressive] / report[:t_postflop_passive],9.9].min
90
90
  batt_p = display_ratio report[:t_blind_attack_opportunity_taken], report[:t_blind_attack_opportunity]
91
91
  bdef_p = display_ratio report[:t_blind_defense_opportunity_taken], report[:t_blind_defense_opportunity]
92
- cbet_flop_p = display_ratio report[:t_cbet_flop_opportunity_taken], report[:t_cbet_flop_opportunity]
93
- call_cbet_flop_p = display_ratio report[:t_call_cbet_flop_opportunity_taken], report[:t_call_cbet_flop_opportunity]
94
- fold_to_cbet_flop_p = display_ratio report[:t_fold_to_cbet_flop_opportunity_taken], report[:t_fold_to_cbet_flop_opportunity]
95
- preflop_3bet_p = display_ratio report[:t_preflop_3bet_opportunity_taken], report[:t_preflop_3bet_opportunity]
96
- call_preflop_3bet_p = display_ratio report[:t_call_preflop_3bet_opportunity_taken], report[:t_call_preflop_3bet_opportunity]
97
- fold_to_preflop_3bet_p = display_ratio report[:t_fold_to_preflop_3bet_opportunity_taken], report[:t_fold_to_preflop_3bet_opportunity]
92
+ cbet_flop_p = display_ratio report[:t_f_cbet], report[:t_f_cbet_o]
93
+ call_cbet_flop_p = display_ratio report[:t_c_f_cbet], report[:t_c_f_cbet_o]
94
+ fold_to_cbet_flop_p = display_ratio report[:t_f2_f_cbet], report[:t_f2_f_cbet_o]
95
+ preflop_3bet_p = display_ratio report[:t_p_3bet], report[:t_p_3bet_o]
96
+ call_preflop_3bet_p = display_ratio report[:t_c_p_3bet], report[:t_p_4bet_o]
97
+ fold_to_preflop_3bet_p = display_ratio report[:t_f2_p_3bet], report[:t_p_4bet_o]
98
98
 
99
99
 
100
100
  description = players_shown[each][/\(.*\)/]
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'pluggable'
3
3
  require 'bigdecimal'
4
4
  require 'bigdecimal/util'
5
- require 'activesupport'
5
+ require 'active_support'
6
6
  require File.expand_path(File.dirname(__FILE__) + '/hand_constants')
7
7
  require File.expand_path(File.dirname(__FILE__) + '/hand_statistics_api')
8
8
  module Pokerstats
@@ -64,16 +64,17 @@ module Pokerstats
64
64
  aggregate_boolean_statistic each_player, reports, :t_blind_defense_opportunity_taken, :is_blind_defense_opportunity_taken
65
65
  aggregate_boolean_statistic each_player, reports, :t_pfr_opportunity, :is_pfr_opportunity
66
66
  aggregate_boolean_statistic each_player, reports, :t_pfr_opportunity_taken, :is_pfr_opportunity_taken
67
- aggregate_boolean_statistic each_player, reports, :t_cbet_opportunity, :is_cbet_opportunity
68
- aggregate_boolean_statistic each_player, reports, :t_cbet_opportunity_taken, :is_cbet_opportunity_taken
69
- aggregate_three_part_statistic each_player, reports, :t_cbet_flop, :cbet_flop
70
- aggregate_three_part_statistic each_player, reports, :t_fold_to_cbet_flop, :fold_to_cbet_flop
71
- aggregate_three_part_statistic each_player, reports, :t_call_cbet_flop, :call_cbet_flop
72
- aggregate_three_part_statistic each_player, reports, :t_preflop_3bet, :preflop_3bet
73
- aggregate_three_part_statistic each_player, reports, :t_fold_to_preflop_3bet, :fold_to_preflop_3bet
74
- aggregate_three_part_statistic each_player, reports, :t_call_preflop_3bet, :call_preflop_3bet
75
- raise "messed up cbet_flop for #{each_player}" unless @aggregate_statistics[each_player][:t_call_cbet_flop_opportunity] == @aggregate_statistics[each_player][:t_fold_to_cbet_flop_opportunity]
76
- raise "messed up preflop_3bet for #{each_player}" unless @aggregate_statistics[each_player][:t_call_preflop_3bet_opportunity] == @aggregate_statistics[each_player][:t_fold_to_preflop_3bet_opportunity]
67
+ aggregate_boolean_statistic each_player, reports, :t_f_cbet, :f_cbet
68
+ aggregate_boolean_statistic each_player, reports, :t_f_cbet_o, :f_cbet_o
69
+ aggregate_boolean_statistic each_player, reports, :t_c_f_cbet, :c_f_cbet
70
+ aggregate_boolean_statistic each_player, reports, :t_c_f_cbet_o, :c_f_cbet_o
71
+ aggregate_boolean_statistic each_player, reports, :t_f2_f_cbet, :f2_f_cbet
72
+ aggregate_boolean_statistic each_player, reports, :t_f2_f_cbet_o, :f2_f_cbet_o
73
+ aggregate_boolean_statistic each_player, reports, :t_p_3bet, :p_3bet
74
+ aggregate_boolean_statistic each_player, reports, :t_p_3bet_o, :p_3bet_o
75
+ aggregate_boolean_statistic each_player, reports, :t_c_p_3bet, :c_p_3bet
76
+ aggregate_boolean_statistic each_player, reports, :t_f2_p_3bet, :f2_p_3bet
77
+ aggregate_boolean_statistic each_player, reports, :t_p_4bet_o, :p_4bet_o
77
78
  end
78
79
  end
79
80
  end
@@ -2,106 +2,131 @@ module Pokerstats
2
2
  class StreetBetStatistics < HandStatistics::Plugin
3
3
  def self.report_specification
4
4
  [
5
- [:preflop_2bet, "boolean", :preflop_2bet],
6
- [:preflop_3bet, "boolean", :preflop_3bet],
7
- [:preflop_4bet, "boolean", :preflop_4bet],
8
- [:flop_1bet, "boolean", :flop_1bet],
9
- [:flop_2bet, "boolean", :flop_2bet],
10
- [:flop_3bet, "boolean", :flop_3bet],
11
- [:flop_4bet, "boolean", :flop_4bet],
12
- [:turn_1bet, "boolean", :turn_1bet],
13
- [:turn_2bet, "boolean", :turn_2bet],
14
- [:turn_3bet, "boolean", :turn_3bet],
15
- [:turn_4bet, "boolean", :turn_4bet],
16
- [:river_1bet, "boolean", :river_1bet],
17
- [:river_2bet, "boolean", :river_2bet],
18
- [:river_3bet, "boolean", :river_3bet],
19
- [:river_4bet, "boolean", :river_4bet],
5
+ [:p_2bet, "boolean", :p_2bet?],
6
+ [:p_2bet_o, "boolean", :p_2bet_o?],
7
+ [:p_3bet, "boolean", :p_3bet?],
8
+ [:p_3bet_o, "boolean", :p_3bet_o?],
9
+ [:p_4bet, "boolean", :p_4bet?],
10
+ [:p_4bet_o, "boolean", :p_4bet_o?],
11
+ [:p_5bet_o, "boolean", :p_5bet_o?],
12
+ [:f_1bet, "boolean", :f_1bet?],
13
+ [:f_1bet_o, "boolean", :f_1bet_o?],
14
+ [:f_2bet, "boolean", :f_2bet?],
15
+ [:f_2bet_o, "boolean", :f_2bet_o?],
16
+ [:f_3bet, "boolean", :f_3bet?],
17
+ [:f_3bet_o, "boolean", :f_3bet_o?],
18
+ [:f_4bet, "boolean", :f_4bet?],
19
+ [:f_4bet_o, "boolean", :f_4bet_o?],
20
+ [:f_5bet_o, "boolean", :f_5bet_o?],
21
+ [:t_1bet, "boolean", :t_1bet?],
22
+ [:t_1bet_o, "boolean", :t_1bet_o?],
23
+ [:t_2bet, "boolean", :t_2bet?],
24
+ [:t_2bet_o, "boolean", :t_2bet_o?],
25
+ [:t_3bet, "boolean", :t_3bet?],
26
+ [:t_3bet_o, "boolean", :t_3bet_o?],
27
+ [:t_4bet, "boolean", :t_4bet?],
28
+ [:t_4bet_o, "boolean", :t_4bet_o?],
29
+ [:t_5bet_o, "boolean", :t_5bet_o?],
30
+ [:r_1bet, "boolean", :r_1bet?],
31
+ [:r_1bet_o, "boolean", :r_1bet_o?],
32
+ [:r_2bet, "boolean", :r_2bet?],
33
+ [:r_2bet_o, "boolean", :r_2bet_o?],
34
+ [:r_3bet, "boolean", :r_3bet?],
35
+ [:r_3bet_o, "boolean", :r_3bet_o?],
36
+ [:r_4bet, "boolean", :r_4bet?],
37
+ [:r_4bet_o, "boolean", :r_4bet_o?],
38
+ [:r_5bet_o, "boolean", :r_5bet_o?],
20
39
 
21
- [:fold_to_preflop_1bet, "boolean", :fold_to_preflop_1bet],
22
- [:fold_to_preflop_2bet, "boolean", :fold_to_preflop_2bet],
23
- [:fold_to_preflop_3bet, "boolean", :fold_to_preflop_3bet],
24
- [:fold_to_preflop_4bet, "boolean", :fold_to_preflop_4bet],
25
- [:fold_to_flop_1bet, "boolean", :fold_to_flop_1bet],
26
- [:fold_to_flop_2bet, "boolean", :fold_to_flop_2bet],
27
- [:fold_to_flop_3bet, "boolean", :fold_to_flop_3bet],
28
- [:fold_to_flop_4bet, "boolean", :fold_to_flop_4bet],
29
- [:fold_to_turn_1bet, "boolean", :fold_to_turn_1bet],
30
- [:fold_to_turn_2bet, "boolean", :fold_to_turn_2bet],
31
- [:fold_to_turn_3bet, "boolean", :fold_to_turn_3bet],
32
- [:fold_to_turn_4bet, "boolean", :fold_to_turn_4bet],
33
- [:fold_to_river_1bet, "boolean", :fold_to_river_1bet],
34
- [:fold_to_river_2bet, "boolean", :fold_to_river_2bet],
35
- [:fold_to_river_3bet, "boolean", :fold_to_river_3bet],
36
- [:fold_to_river_4bet, "boolean", :fold_to_river_4bet],
40
+ [:f2_p_1bet, "boolean", :f2_p_1bet?],
41
+ [:f2_p_2bet, "boolean", :f2_p_2bet?],
42
+ [:f2_p_3bet, "boolean", :f2_p_3bet?],
43
+ [:f2_p_4bet, "boolean", :f2_p_4bet?],
44
+ [:f2_f_1bet, "boolean", :f2_f_1bet?],
45
+ [:f2_f_2bet, "boolean", :f2_f_2bet?],
46
+ [:f2_f_3bet, "boolean", :f2_f_3bet?],
47
+ [:f2_f_4bet, "boolean", :f2_f_4bet?],
48
+ [:f2_t_1bet, "boolean", :f2_t_1bet?],
49
+ [:f2_t_2bet, "boolean", :f2_t_2bet?],
50
+ [:f2_t_3bet, "boolean", :f2_t_3bet?],
51
+ [:f2_t_4bet, "boolean", :f2_t_4bet?],
52
+ [:f2_r_1bet, "boolean", :f2_r_1bet?],
53
+ [:f2_r_2bet, "boolean", :f2_r_2bet?],
54
+ [:f2_r_3bet, "boolean", :f2_r_3bet?],
55
+ [:f2_r_4bet, "boolean", :f2_r_4bet?],
56
+
57
+ [:c_p_1bet, "boolean", :c_p_1bet?],
58
+ [:c_p_2bet, "boolean", :c_p_2bet?],
59
+ [:c_p_3bet, "boolean", :c_p_3bet?],
60
+ [:c_p_4bet, "boolean", :c_p_4bet?],
61
+ [:c_f_1bet, "boolean", :c_f_1bet?],
62
+ [:c_f_2bet, "boolean", :c_f_2bet?],
63
+ [:c_f_3bet, "boolean", :c_f_3bet?],
64
+ [:c_f_4bet, "boolean", :c_f_4bet?],
65
+ [:c_t_1bet, "boolean", :c_t_1bet?],
66
+ [:c_t_2bet, "boolean", :c_t_2bet?],
67
+ [:c_t_3bet, "boolean", :c_t_3bet?],
68
+ [:c_t_4bet, "boolean", :c_t_4bet?],
69
+ [:c_r_1bet, "boolean", :c_r_1bet?],
70
+ [:c_r_2bet, "boolean", :c_r_2bet?],
71
+ [:c_r_3bet, "boolean", :c_r_3bet?],
72
+ [:c_r_4bet, "boolean", :c_r_4bet?],
37
73
 
38
- [:call_preflop_1bet, "boolean", :call_preflop_1bet],
39
- [:call_preflop_2bet, "boolean", :call_preflop_2bet],
40
- [:call_preflop_3bet, "boolean", :call_preflop_3bet],
41
- [:call_preflop_4bet, "boolean", :call_preflop_4bet],
42
- [:call_flop_1bet, "boolean", :call_flop_1bet],
43
- [:call_flop_2bet, "boolean", :call_flop_2bet],
44
- [:call_flop_3bet, "boolean", :call_flop_3bet],
45
- [:call_flop_4bet, "boolean", :call_flop_4bet],
46
- [:call_turn_1bet, "boolean", :call_turn_1bet],
47
- [:call_turn_2bet, "boolean", :call_turn_2bet],
48
- [:call_turn_3bet, "boolean", :call_turn_3bet],
49
- [:call_turn_4bet, "boolean", :call_turn_4bet],
50
- [:call_river_1bet, "boolean", :call_river_1bet],
51
- [:call_river_2bet, "boolean", :call_river_2bet],
52
- [:call_river_3bet, "boolean", :call_river_3bet],
53
- [:call_river_4bet, "boolean", :call_river_4bet],
54
-
55
74
  [:last_aggr_preflop, 'boolean', :last_aggr_preflop],
56
- [:last_aggr_flop, 'boolean', :last_aggr_flop],
57
- [:last_aggr_turn, 'boolean', :last_aggr_turn],
58
- [:last_aggr_river, 'boolean', :last_aggr_river],
75
+ [:last_aggr_flop, 'boolean', :last_aggr_flop],
76
+ [:last_aggr_turn, 'boolean', :last_aggr_turn],
77
+ [:last_aggr_river, 'boolean', :last_aggr_river],
59
78
 
60
- [:cbet_flop, 'boolean', :cbet_flop],
61
- [:cbet_turn, 'boolean', :cbet_turn],
62
- [:cbet_river, 'boolean', :cbet_river],
63
- [:call_cbet_flop, 'boolean', :call_cbet_flop],
64
- [:call_cbet_turn, 'boolean', :call_cbet_turn],
65
- [:call_cbet_river, 'boolean', :call_cbet_river],
66
- [:fold_to_cbet_flop, 'boolean', :fold_to_cbet_flop],
67
- [:fold_to_cbet_turn, 'boolean', :fold_to_cbet_turn],
68
- [:fold_to_cbet_river, 'boolean', :fold_to_cbet_river],
79
+ [:f_cbet, 'boolean', :f_cbet?],
80
+ [:f_cbet_o, "boolean", :f_cbet_o?],
81
+ [:t_cbet, 'boolean', :t_cbet?],
82
+ [:t_cbet_o, "boolean", :t_cbet_o?],
83
+ [:r_cbet, 'boolean', :r_cbet?],
84
+ [:r_cbet_o, "boolean", :r_cbet_o?],
85
+ [:c_f_cbet, 'boolean', :c_f_cbet?],
86
+ [:c_f_cbet_o, "boolean", :c_f_cbet_o?],
87
+ [:c_t_cbet, 'boolean', :c_t_cbet?],
88
+ [:c_t_cbet_o, "boolean", :c_t_cbet_o?],
89
+ [:c_r_cbet, 'boolean', :c_r_cbet?],
90
+ [:c_r_cbet_o, "boolean", :c_r_cbet_o?],
91
+ [:f2_f_cbet, 'boolean', :f2_f_cbet?],
92
+ [:f2_f_cbet_o, "boolean", :f2_f_cbet_o?],
93
+ [:f2_t_cbet, 'boolean', :f2_t_cbet?],
94
+ [:f2_t_cbet_o, "boolean", :f2_t_cbet_o?],
95
+ [:f2_r_cbet, 'boolean', :f2_r_cbet?],
96
+ [:f2_r_cbet_o, "boolean", :f2_r_cbet_o?],
69
97
 
70
- [:dbet_flop, 'boolean', :dbet_flop],
71
- [:dbet_turn, 'boolean', :dbet_turn],
72
- [:dbet_river, 'boolean', :dbet_river],
73
- [:call_dbet_flop, 'boolean', :call_dbet_flop],
74
- [:call_dbet_turn, 'boolean', :call_dbet_turn],
75
- [:call_dbet_river, 'boolean', :call_dbet_river],
76
- [:fold_to_dbet_flop, 'boolean', :fold_to_dbet_flop],
77
- [:fold_to_dbet_turn, 'boolean', :fold_to_dbet_turn],
78
- [:fold_to_dbet_river, 'boolean', :fold_to_dbet_river]
98
+ [:f_dbet, 'boolean', :f_dbet?],
99
+ [:f_dbet_o, "boolean", :f_dbet_o?],
100
+ [:t_dbet, 'boolean', :t_dbet?],
101
+ [:t_dbet_o, "boolean", :t_dbet_o?],
102
+ [:r_dbet, 'boolean', :r_dbet?],
103
+ [:r_dbet_o, "boolean", :r_dbet_o?],
104
+ [:c_f_dbet, 'boolean', :c_f_dbet?],
105
+ [:c_f_dbet_o, "boolean", :c_f_dbet_o?],
106
+ [:c_t_dbet, 'boolean', :c_t_dbet?],
107
+ [:c_t_dbet_o, "boolean", :c_t_dbet_o?],
108
+ [:c_r_dbet, 'boolean', :c_r_dbet?],
109
+ [:c_r_dbet_o, "boolean", :c_r_dbet_o?],
110
+ [:f2_f_dbet, 'boolean', :f2_f_dbet?],
111
+ [:f2_f_dbet_o, "boolean", :f2_f_dbet_o?],
112
+ [:f2_t_dbet, 'boolean', :f2_t_dbet?],
113
+ [:f2_t_dbet_o, "boolean", :f2_t_dbet_o?],
114
+ [:f2_r_dbet, 'boolean', :f2_r_dbet?],
115
+ [:f2_r_dbet_o, 'boolean', :f2_r_dbet_o?]
79
116
  ]
80
117
  end
81
118
 
82
119
  attr_accessor :street_bets, :fold_to_street_bets, :last_aggr_player
83
-
84
- #
85
- # These functions return one of three, not two values, and hence do not end with a "?".
86
- # A nil value indicates that the player had no opportunity to make the described bet.
87
- # For example:
88
- # cbet_flop(player)
89
- # nil -- player did not have an opportunity to make a cbet on the flop
90
- # true -- player made a cbet on the flop
91
- # false -- player had an opportunity to make a cbet on the flop, but did not
92
- #
93
- # fold_to_flop_2bet(player)
94
- # nil -- player did not have an opportunity to fold to a 2bet on the flop
95
- # true -- player folded to a 2bet on the flop
96
- # false -- player had an opportunity to fold to a 2bet on the flop, but did not
97
- #
98
- # Some care must be taken in the code and testing to assure the consistency of the nil/false dichotomy
99
- #
100
- # They are defined dynamically due to their number and similarities
101
- #
102
-
120
+
103
121
  for street in [:preflop, :flop, :turn, :river]
104
-
122
+
123
+ street_first = case street
124
+ when :preflop then :p
125
+ when :flop then :f
126
+ when :turn then :t
127
+ when :river then :r
128
+ end
129
+
105
130
  #
106
131
  # last agresssion functions
107
132
  # true only if player made the last aggressive move on the street
@@ -115,32 +140,62 @@ module Pokerstats
115
140
  LAST_AGGR_FUNCTIONS
116
141
 
117
142
  #
118
- # make_, call_, and fold_to_ functions, by bet and street street
143
+ # make_, c_, and f2_ functions, by bet and street street
119
144
  #
120
- for bet in 1..4
145
+ for bet in 1..5
121
146
  class_eval <<-STREET_AND_BET_FUNCTIONS
122
- def #{street}_#{bet}bet(player)
123
- @street_bets[#{street.inspect}] && @street_bets[#{street.inspect}][#{bet}][player]
147
+ def #{street_first}_#{bet}bet(player)
148
+ @street_bets[#{street.inspect}] && @street_bets[#{street.inspect}][#{bet}][player]
149
+ end
150
+ def #{street_first}_#{bet}bet?(player)
151
+ #{street_first}_#{bet}bet(player) || false
124
152
  end
125
- def call_#{street}_#{bet}bet(player)
153
+ def #{street_first}_#{bet}bet_o?(player)
154
+ !#{street_first}_#{bet}bet(player).nil?
155
+ end
156
+ STREET_AND_BET_FUNCTIONS
157
+ end
158
+
159
+ for bet in 1..4
160
+ class_eval <<-RESPOND_TO_STREET_AND_BET_FUNCTIONS
161
+ def c_#{street_first}_#{bet}bet(player)
126
162
  @call_street_bets[#{street.inspect}] && @call_street_bets[#{street.inspect}][#{bet}][player]
127
163
  end
128
- def fold_to_#{street}_#{bet}bet(player)
164
+ def c_#{street_first}_#{bet}bet?(player)
165
+ c_#{street_first}_#{bet}bet(player) || false
166
+ end
167
+ # def c_#{street_first}_#{bet}bet_o?(player)
168
+ # !c_#{street_first}_#{bet}bet(player).nil?
169
+ # end
170
+ def f2_#{street_first}_#{bet}bet(player)
129
171
  @fold_to_street_bets[#{street.inspect}] && @fold_to_street_bets[#{street.inspect}][#{bet}][player]
130
172
  end
131
- STREET_AND_BET_FUNCTIONS
173
+ def f2_#{street_first}_#{bet}bet?(player)
174
+ f2_#{street_first}_#{bet}bet(player) || false
175
+ end
176
+ # def f2_#{street_first}_#{bet}bet_o?(player)
177
+ # !f2_#{street_first}_#{bet}bet(player).nil?
178
+ # end
179
+ RESPOND_TO_STREET_AND_BET_FUNCTIONS
132
180
  end
133
181
  end
134
182
 
135
183
  for street in [:flop, :turn, :river]
136
184
  last_street = case street
137
- when :flop then :preflop
138
- when :turn then :flop
139
- when :river then :turn
185
+ when :flop then :preflop
186
+ when :turn then :flop
187
+ when :river then :turn
188
+ end
189
+
190
+ street_first = case street
191
+ when :preflop then :p
192
+ when :flop then :f
193
+ when :turn then :t
194
+ when :river then :r
140
195
  end
141
196
 
142
197
  #
143
- # make, call_ and fold_to_ cbet and dbet functions, by street
198
+ # make, c_ and f2_ cbet and dbet functions, by street
144
199
  #
145
200
  # cbets (continuation bets) are first-in bets after making last agression on the previous street
146
201
  #
@@ -148,26 +203,62 @@ module Pokerstats
148
203
  #
149
204
 
150
205
  class_eval <<-FTR_FUNCTIONS
151
- def cbet_#{street}(player)
152
- last_aggr_#{last_street}(player) && #{street}_1bet(player)
206
+ def #{street_first}_cbet(player)
207
+ last_aggr_#{last_street}(player) && #{street_first}_1bet(player)
208
+ end
209
+ def #{street_first}_cbet?(player)
210
+ #{street_first}_cbet(player) || false
211
+ end
212
+ def #{street_first}_cbet_o?(player)
213
+ !#{street_first}_cbet(player).nil?
214
+ end
215
+ def f2_#{street_first}_cbet(player)
216
+ @first_aggr_player[:#{street}] && #{street_first}_cbet(@first_aggr_player[:#{street}]) && f2_#{street_first}_1bet(player)
217
+ end
218
+ def f2_#{street_first}_cbet?(player)
219
+ f2_#{street_first}_cbet(player) || false
220
+ end
221
+ def f2_#{street_first}_cbet_o?(player)
222
+ !f2_#{street_first}_cbet(player).nil?
153
223
  end
154
- def fold_to_cbet_#{street}(player)
155
- @first_aggr_player[:#{street}] && cbet_#{street}(@first_aggr_player[:#{street}]) && fold_to_#{street}_1bet(player)
224
+ def c_#{street_first}_cbet(player)
225
+ @first_aggr_player[:#{street}] && #{street_first}_cbet(@first_aggr_player[:#{street}]) && c_#{street_first}_1bet(player)
156
226
  end
157
- def call_cbet_#{street}(player)
158
- @first_aggr_player[:#{street}] && cbet_#{street}(@first_aggr_player[:#{street}]) && call_#{street}_1bet(player)
227
+ def c_#{street_first}_cbet?(player)
228
+ c_#{street_first}_cbet(player) || false
159
229
  end
160
- def dbet_#{street}(player)
230
+ def c_#{street_first}_cbet_o?(player)
231
+ !c_#{street_first}_cbet(player).nil?
232
+ end
233
+ def #{street_first}_dbet(player)
161
234
  return nil unless @last_aggr_player[:#{last_street}] && @hand_statistics.betting_order?(player, @last_aggr_player[:#{last_street}])
162
- #{street}_1bet(player)
235
+ #{street_first}_1bet(player)
236
+ end
237
+ def #{street_first}_dbet?(player)
238
+ #{street_first}_dbet(player) || false
239
+ end
240
+ def #{street_first}_dbet_o?(player)
241
+ !#{street_first}_dbet(player).nil?
242
+ end
243
+ def f2_#{street_first}_dbet(player)
244
+ return nil unless @first_aggr_player[:#{street}] && #{street_first}_dbet(@first_aggr_player[:#{street}])
245
+ f2_#{street_first}_1bet(player)
163
246
  end
164
- def fold_to_dbet_#{street}(player)
165
- return nil unless @first_aggr_player[:#{street}] && dbet_#{street}(@first_aggr_player[:#{street}])
166
- fold_to_#{street}_1bet(player)
247
+ def f2_#{street_first}_dbet?(player)
248
+ f2_#{street_first}_dbet(player) || false
167
249
  end
168
- def call_dbet_#{street}(player)
169
- return nil unless @first_aggr_player[:#{street}] && dbet_#{street}(@first_aggr_player[:#{street}])
170
- call_#{street}_1bet(player)
250
+ def f2_#{street_first}_dbet_o?(player)
251
+ !f2_#{street_first}_dbet(player).nil?
252
+ end
253
+ def c_#{street_first}_dbet(player)
254
+ return nil unless @first_aggr_player[:#{street}] && #{street_first}_dbet(@first_aggr_player[:#{street}])
255
+ c_#{street_first}_1bet(player)
256
+ end
257
+ def c_#{street_first}_dbet?(player)
258
+ c_#{street_first}_dbet(player) || false
259
+ end
260
+ def c_#{street_first}_dbet_o?(player)
261
+ !c_#{street_first}_dbet(player).nil?
171
262
  end
172
263
  FTR_FUNCTIONS
173
264
  end
@@ -179,7 +270,7 @@ module Pokerstats
179
270
  @first_aggr_player = {}
180
271
  @last_aggr_player = {}
181
272
  [:preflop, :flop, :turn, :river].each do|each|
182
- @street_bets[each] = [{}, {}, {}, {}, {}]
273
+ @street_bets[each] = [{}, {}, {}, {}, {}, {}]
183
274
  @call_street_bets[each] = [{}, {}, {}, {}, {}]
184
275
  @fold_to_street_bets[each] = [{}, {}, {}, {}, {}]
185
276
  end
@@ -210,7 +301,7 @@ module Pokerstats
210
301
  @fold_to_street_bets[street][@last_bet][action[:screen_name]] = action[:description] == "folds"
211
302
  @call_street_bets[street][@last_bet][action[:screen_name]] = action[:description] == "calls"
212
303
  end
213
- if @last_bet.between?(0,3)
304
+ if @last_bet.between?(0,4)
214
305
  @street_bets[street][@last_bet+1][action[:screen_name]] = action[:aggression] == :aggressive
215
306
  end
216
307
  if action[:aggression] == :aggressive