from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import pandas as pd bookkeeper_odds_df = pd.read_excel('prescreening_UK/bookkeeper_odds.xlsx') # class Part1Intro(Page): # form_model = 'player' # form_fields = ['Part1Intro_time'] # class MatchBeliefs_a(Page): # form_model = 'player' # form_fields = ['match_1_win', 'match_1_draw', 'match_1_lose', 'match_1_sum', 'MatchBeliefs_a_time'] # def vars_for_template(self): # return dict( # # match_num=self.player.participant.vars['task_rounds']['A'], # match_num = 1, # home_team1=bookkeeper_odds_df['match1_home_team'].iloc[0], # away_team1=bookkeeper_odds_df['match1_away_team'].iloc[0], # home_team1_abbv=bookkeeper_odds_df['match1_home_team_abbv'].iloc[0], # away_team1_abbv=bookkeeper_odds_df['match1_away_team_abbv'].iloc[0], # ) # def error_message(self, values): # for field_name in ['match_1_win', 'match_1_draw', 'match_1_lose']: # if values[field_name] > 98 or values[field_name] == 0: # return 'Please do not select 100 or 0 as options' # # def is_displayed(self): # # return self.player.round_number == self.player.participant.vars['task_rounds']['A'] # def before_next_page(self): # self.player.participant.vars['match_1_win'] = self.player.match_1_win # self.player.participant.vars['match_1_draw'] = self.player.match_1_draw # self.player.participant.vars['match_1_lose'] = self.player.match_1_lose # class MatchBeliefs_b(Page): # form_model = 'player' # form_fields = ['match_2_win', 'match_2_draw', 'match_2_lose', 'match_2_sum', 'MatchBeliefs_b_time'] # def vars_for_template(self): # return dict( # # match_num=self.player.participant.vars['task_rounds']['B'], # match_num = 2, # home_team2=bookkeeper_odds_df['match2_home_team'].iloc[0], # away_team2=bookkeeper_odds_df['match2_away_team'].iloc[0], # home_team2_abbv=bookkeeper_odds_df['match2_home_team_abbv'].iloc[0], # away_team2_abbv=bookkeeper_odds_df['match2_away_team_abbv'].iloc[0], # ) # def error_message(self, values): # for field_name in ['match_2_win', 'match_2_draw', 'match_2_lose']: # if values[field_name] > 98 or values[field_name] == 0: # return 'Please do not select 100 or 0 as options' # # def is_displayed(self): # # return self.player.round_number == self.player.participant.vars['task_rounds']['B'] # def before_next_page(self): # self.player.participant.vars['match_2_win'] = self.player.match_2_win # self.player.participant.vars['match_2_draw'] = self.player.match_2_draw # self.player.participant.vars['match_2_lose'] = self.player.match_2_lose class MatchBeliefs_b(Page): form_model = 'player' form_fields = ['match_2_win', 'match_2_draw', 'match_2_lose', 'match_2_sum', 'MatchBeliefs_b_time'] def vars_for_template(self): return dict( match_num=self.player.participant.vars['task_rounds']['B'] + 1, # match_num = 3, home_team2=bookkeeper_odds_df['match2_home_team'].iloc[0], away_team2=bookkeeper_odds_df['match2_away_team'].iloc[0], home_team2_abbv=bookkeeper_odds_df['match2_home_team_abbv'].iloc[0], away_team2_abbv=bookkeeper_odds_df['match2_away_team_abbv'].iloc[0] ) def error_message(self, values): for field_name in ['match_2_win', 'match_2_draw', 'match_2_lose']: if values[field_name] > 98 or values[field_name] == 0: return 'Please do not select 100 or 0 as options' def is_displayed(self): # return self.player.round_number == self.player.participant.vars['task_rounds']['C'] return self.player.round_number == self.player.participant.vars['task_rounds']['B'] & self.player.participant.vars['task_rounds']['B'] < 3 def before_next_page(self): self.player.participant.vars['match_2_win'] = self.player.match_2_win self.player.participant.vars['match_2_draw'] = self.player.match_2_draw self.player.participant.vars['match_2_lose'] = self.player.match_2_lose class MatchBeliefs_b_3(Page): form_model = 'player' form_fields = ['match_2_win', 'match_2_draw', 'match_2_lose', 'match_2_sum', 'MatchBeliefs_b_time'] def vars_for_template(self): bm_probhome = 1 / bookkeeper_odds_df['match2_home_team_odds'].iloc[0] bm_probdraw = 1 / bookkeeper_odds_df['match2_draw_odds'].iloc[0] bm_probaway = 1 / bookkeeper_odds_df['match2_away_team_odds'].iloc[0] scaling_factor = bm_probhome + bm_probdraw + bm_probaway return dict( # match_num=self.player.participant.vars['task_rounds']['C'] + 2, match_num = 4, home_team2=bookkeeper_odds_df['match2_home_team'].iloc[0], away_team2=bookkeeper_odds_df['match2_away_team'].iloc[0], home_team2_abbv=bookkeeper_odds_df['match2_home_team_abbv'].iloc[0], away_team2_abbv=bookkeeper_odds_df['match2_away_team_abbv'].iloc[0], win_prob_bm2 = round(100 * bm_probhome / scaling_factor), lose_prob_bm2 = round(100 * bm_probaway / scaling_factor), draw_prob_bm2 = round(100 * bm_probdraw / scaling_factor) ) def error_message(self, values): for field_name in ['match_2_win', 'match_2_draw', 'match_2_lose']: if values[field_name] > 98 or values[field_name] == 0: return 'Please do not select 100 or 0 as options' def is_displayed(self): # return self.player.round_number == self.player.participant.vars['task_rounds']['C'] return self.player.round_number == self.player.participant.vars['task_rounds']['B'] & self.player.participant.vars['task_rounds']['B'] == 3 def before_next_page(self): self.player.participant.vars['match_2_win'] = self.player.match_2_win self.player.participant.vars['match_2_draw'] = self.player.match_2_draw self.player.participant.vars['match_2_lose'] = self.player.match_2_lose class MatchBeliefs_c(Page): form_model = 'player' form_fields = ['match_3_win', 'match_3_draw', 'match_3_lose', 'match_3_sum', 'MatchBeliefs_c_time'] def vars_for_template(self): return dict( match_num=self.player.participant.vars['task_rounds']['C'] + 1, # match_num = 3, home_team3=bookkeeper_odds_df['match3_home_team'].iloc[0], away_team3=bookkeeper_odds_df['match3_away_team'].iloc[0], home_team3_abbv=bookkeeper_odds_df['match3_home_team_abbv'].iloc[0], away_team3_abbv=bookkeeper_odds_df['match3_away_team_abbv'].iloc[0] ) def error_message(self, values): for field_name in ['match_3_win', 'match_3_draw', 'match_3_lose']: if values[field_name] > 98 or values[field_name] == 0: return 'Please do not select 100 or 0 as options' def is_displayed(self): # return self.player.round_number == self.player.participant.vars['task_rounds']['C'] return self.player.round_number == self.player.participant.vars['task_rounds']['C'] & self.player.participant.vars['task_rounds']['C'] < 3 def before_next_page(self): self.player.participant.vars['match_3_win'] = self.player.match_3_win self.player.participant.vars['match_3_draw'] = self.player.match_3_draw self.player.participant.vars['match_3_lose'] = self.player.match_3_lose class MatchBeliefs_c_3(Page): form_model = 'player' form_fields = ['match_3_win', 'match_3_draw', 'match_3_lose', 'match_3_sum', 'MatchBeliefs_c_time'] def vars_for_template(self): bm_probhome = 1 / bookkeeper_odds_df['match3_home_team_odds'].iloc[0] bm_probdraw = 1 / bookkeeper_odds_df['match3_draw_odds'].iloc[0] bm_probaway = 1 / bookkeeper_odds_df['match3_away_team_odds'].iloc[0] scaling_factor = bm_probhome + bm_probdraw + bm_probaway return dict( # match_num=self.player.participant.vars['task_rounds']['C'] + 2, match_num = 4, home_team3=bookkeeper_odds_df['match3_home_team'].iloc[0], away_team3=bookkeeper_odds_df['match3_away_team'].iloc[0], home_team3_abbv=bookkeeper_odds_df['match3_home_team_abbv'].iloc[0], away_team3_abbv=bookkeeper_odds_df['match3_away_team_abbv'].iloc[0], win_prob_bm3 = round(100 * bm_probhome / scaling_factor), lose_prob_bm3 = round(100 * bm_probaway / scaling_factor), draw_prob_bm3 = round(100 * bm_probdraw / scaling_factor) ) def error_message(self, values): for field_name in ['match_3_win', 'match_3_draw', 'match_3_lose']: if values[field_name] > 98 or values[field_name] == 0: return 'Please do not select 100 or 0 as options' def is_displayed(self): # return self.player.round_number == self.player.participant.vars['task_rounds']['C'] return self.player.round_number == self.player.participant.vars['task_rounds']['C'] & self.player.participant.vars['task_rounds']['C'] == 3 def before_next_page(self): self.player.participant.vars['match_3_win'] = self.player.match_3_win self.player.participant.vars['match_3_draw'] = self.player.match_3_draw self.player.participant.vars['match_3_lose'] = self.player.match_3_lose class MatchBeliefs_d(Page): form_model = 'player' form_fields = ['match_4_win', 'match_4_draw', 'match_4_lose', 'match_4_sum', 'MatchBeliefs_d_time'] def vars_for_template(self): return dict( match_num=self.player.participant.vars['task_rounds']['D'] + 1, # match_num = 3, home_team4=bookkeeper_odds_df['match4_home_team'].iloc[0], away_team4=bookkeeper_odds_df['match4_away_team'].iloc[0], home_team4_abbv=bookkeeper_odds_df['match4_home_team_abbv'].iloc[0], away_team4_abbv=bookkeeper_odds_df['match4_away_team_abbv'].iloc[0] ) def error_message(self, values): for field_name in ['match_4_win', 'match_4_draw', 'match_4_lose']: if values[field_name] > 98 or values[field_name] == 0: return 'Please do not select 100 or 0 as options' def is_displayed(self): # return self.player.round_number == self.player.participant.vars['task_rounds']['D'] return self.player.round_number == self.player.participant.vars['task_rounds']['D'] & self.player.participant.vars['task_rounds']['D'] < 3 def before_next_page(self): self.player.participant.vars['match_4_win'] = self.player.match_4_win self.player.participant.vars['match_4_draw'] = self.player.match_4_draw self.player.participant.vars['match_4_lose'] = self.player.match_4_lose class MatchBeliefs_d_3(Page): form_model = 'player' form_fields = ['match_4_win', 'match_4_draw', 'match_4_lose', 'match_4_sum', 'MatchBeliefs_d_time'] def vars_for_template(self): bm_probhome = 1 / bookkeeper_odds_df['match4_home_team_odds'].iloc[0] bm_probdraw = 1 / bookkeeper_odds_df['match4_draw_odds'].iloc[0] bm_probaway = 1 / bookkeeper_odds_df['match4_away_team_odds'].iloc[0] scaling_factor = bm_probhome + bm_probdraw + bm_probaway return dict( # match_num=self.player.participant.vars['task_rounds']['D'] + 2, match_num = 4, home_team4=bookkeeper_odds_df['match4_home_team'].iloc[0], away_team4=bookkeeper_odds_df['match4_away_team'].iloc[0], home_team4_abbv=bookkeeper_odds_df['match4_home_team_abbv'].iloc[0], away_team4_abbv=bookkeeper_odds_df['match4_away_team_abbv'].iloc[0], win_prob_bm4 = round(100 * bm_probhome / scaling_factor), lose_prob_bm4 = round(100 * bm_probaway / scaling_factor), draw_prob_bm4 = round(100 * bm_probdraw / scaling_factor) ) def error_message(self, values): for field_name in ['match_4_win', 'match_4_draw', 'match_4_lose']: if values[field_name] > 98 or values[field_name] == 0: return 'Please do not select 100 or 0 as options' def is_displayed(self): # return self.player.round_number == self.player.participant.vars['task_rounds']['D'] return self.player.round_number == self.player.participant.vars['task_rounds']['D'] & self.player.participant.vars['task_rounds']['D'] == 3 def before_next_page(self): self.player.participant.vars['match_4_win'] = self.player.match_4_win self.player.participant.vars['match_4_draw'] = self.player.match_4_draw self.player.participant.vars['match_4_lose'] = self.player.match_4_lose page_sequence = [ # Part1Intro, # MatchBeliefs_a, MatchBeliefs_b, MatchBeliefs_c, MatchBeliefs_d, MatchBeliefs_b_3, MatchBeliefs_c_3, MatchBeliefs_d_3 # MatchBeliefs_e, # MatchBeliefs_f ]