from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import random import statistics import time class c____Intro(Page): timeout_seconds = 10 def is_displayed(self): return self.player.round_number == 1 #def get_timeout_seconds(self): # if self.participant.vars.get('is_dropout'): # return 1 # else: # return 30 def before_next_page(self): if self.round_number == 1: self.group.selectedRound = self.participant.vars['selectedRound'] self.group.selectedRound2 = self.participant.vars['selectedRound2'] self.group.selectedRound3 = self.participant.vars['selectedRound3'] self.participant.vars['absDev1'] = 0 self.participant.vars['absDev2'] = 0 self.participant.vars['absDev3'] = 0 self.participant.vars['absDev4'] = 0 self.participant.vars['absDev5'] = 0 self.participant.vars['absDev6'] = 0 self.participant.vars['absDev7'] = 0 self.participant.vars['absDev8'] = 0 self.participant.vars['absDev9'] = 0 self.participant.vars['absDev10'] = 0 self.participant.vars['absDev11'] = 0 self.participant.vars['absDev12'] = 0 self.participant.vars['absDev13'] = 0 self.participant.vars['absDev14'] = 0 self.participant.vars['absDev15'] = 0 self.participant.vars['absDev16'] = 0 self.participant.vars['prize_awarded1'] = 0 self.participant.vars['prize_awarded2'] = 0 self.participant.vars['prize_awarded3'] = 0 self.participant.vars['prize_awarded4'] = 0 self.participant.vars['prize_awarded5'] = 0 self.participant.vars['prize_awarded6'] = 0 self.participant.vars['prize_awarded7'] = 0 self.participant.vars['prize_awarded8'] = 0 self.participant.vars['prize_awarded9'] = 0 self.participant.vars['prize_awarded10'] = 0 self.participant.vars['prize_awarded11'] = 0 self.participant.vars['prize_awarded12'] = 0 self.participant.vars['prize_awarded13'] = 0 self.participant.vars['prize_awarded14'] = 0 self.participant.vars['prize_awarded15'] = 0 self.participant.vars['prize_awarded16'] = 0 self.participant.vars['prize_deserved1'] = 0 self.participant.vars['prize_deserved2'] = 0 self.participant.vars['prize_deserved3'] = 0 self.participant.vars['prize_deserved4'] = 0 self.participant.vars['prize_deserved5'] = 0 self.participant.vars['prize_deserved6'] = 0 self.participant.vars['prize_deserved7'] = 0 self.participant.vars['prize_deserved8'] = 0 self.participant.vars['prize_deserved9'] = 0 self.participant.vars['prize_deserved10'] = 0 self.participant.vars['prize_deserved11'] = 0 self.participant.vars['prize_deserved12'] = 0 self.participant.vars['prize_deserved13'] = 0 self.participant.vars['prize_deserved14'] = 0 self.participant.vars['prize_deserved15'] = 0 self.participant.vars['prize_deserved16'] = 0 self.player.treatment = self.participant.vars['treatment'] self.session.vars['absDev'] = [] self.session.vars['deserve_list'] = [] self.session.vars['award_list'] = [] #print(self.group.selectedRound) #print(self.group.selectedRound2) #print(self.group.selectedRound3) #print(self.player.session.config['participation_fee']) class c___Rematching(Page): timeout_seconds = 5 def is_displayed(self): return self.player.round_number > 1 def before_next_page(self): self.player.treatment = self.participant.vars['treatment'] class c___Role_Assignment(Page): def is_displayed(self): return self.player.round_number == 1 class c_Estimator_Decides(Page): form_model = 'group' form_fields = ['sent_amount'] def is_displayed(self): return self.player.id_in_group == 1 #def get_timeout_seconds(self): # if self.participant.vars.get('is_dropout'): # return 1 # instant timeout, 1 second # else: # return 2*60 #def before_next_page(self): #player = self.player #timeout_happened = self.timeout_happened #if timeout_happened: # self.group.sent_amount = 9 # self.participant.vars['is_dropout'] = True #self.session.vars['sent amount'] = [] #copy elsewhere. #def before_next_page(self): # print(self.group.sent_amount) class c_MyWaitPage1(WaitPage): template_name = 'DFG_experiment/c_MyWaitPage1.html' form_model = 'group' def is_displayed(self): return self.player.id_in_group == 2 class d_Auditor_Reacts(Page): form_model = 'group' form_fields = ['transfer_accepted'] def is_displayed(self): return self.player.id_in_group == 2 #wait_for_all_groups = True class d_MyWaitPage2(WaitPage): template_name = 'DFG_experiment/d_MyWaitPage2.html' form_model = 'group' def is_displayed(self): return self.player.id_in_group == 1 class e_Guessing_Intro(Page): #timeout_seconds = 10 def before_next_page(self): image = Constants.images[self.round_number - 1] self.group.image = image corr_num = Constants.solution[self.round_number - 1] self.group.corr_num = corr_num #print(self.group.image) class f_Pic1_Est(Page): timeout_seconds = 8 # Note: the real 6s timer is programmed client-side. This is just to avoid exploitation. def is_displayed(self): return self.player.id_in_group == 1 def vars_for_template(self): image = self.group.image return dict( image_path = 'Bilder/{}.jpg'.format(image), ) class f_Pic1_Est_Ans(Page): form_model = 'group' form_fields = ['Guess_6s_Pic1'] timeout_seconds = 24 timer_text = 'Remaining time for your guess:' def is_displayed(self): return self.player.id_in_group == 1 class g_Pic1_Aud(Page): timeout_seconds = 32 # Note: the real 30s timer is programmed client-side. This is just to avoid exploitation. def is_displayed(self): return self.player.id_in_group == 2 def vars_for_template(self): image = self.group.image return dict( image_path = 'Bilder/{}.jpg'.format(image), ) class g_Pic1_Aud__Waits(WaitPage): template_name = 'DFG_experiment/g_Pic1_Aud__Waits.html' form_model = 'group' def is_displayed(self): return self.player.id_in_group == 2 class g_Pic1_Aud_Ans(Page): form_model = 'group' form_fields = ['prize_awarded'] #timeout_seconds = 240 timer_text = 'Remaining time for your decision:' def is_displayed(self): return self.player.id_in_group == 2 class gg_MyWaitPage3(WaitPage): template_name = 'DFG_experiment/gg_MyWaitPage3.html' form_model = 'group' def is_displayed(self): return self.player.id_in_group == 1 class h_Request_Review_Est(Page): form_model = 'group' form_fields = ['review_requested_est'] def is_displayed(self): return self.player.id_in_group == 1 def before_next_page(self): self.group.chance_move = random.random() self.group.secAuditor_guess = random.sample(eval("Constants.{}_secAud".format(self.group.image)), 1)[0] #print(self.group.secAuditor_guess) class i_Request_Review_Aud(Page): form_model = 'group' form_fields = ['review_requested_aud'] def is_displayed(self): return self.player.id_in_group == 2 class j__ReviewWaitPage(WaitPage): template_name = 'DFG_experiment/j__ReviewWaitPage.html' form_model = 'group' class j_Review_Process(Page): def vars_for_template(self): chance_move = self.group.chance_move secAuditor_guess = self.group.secAuditor_guess if self.group.review_requested_est == 0 and self.group.review_requested_aud == 0: if chance_move <= 0.25: self.group.review_requested_comp = 1 else: self.group.review_requested_comp = 0 else: self.group.review_requested_comp = 0 #print(self.group.review_requested_comp) if self.group.review_requested_est == 1 or self.group.review_requested_aud == 1 or self.group.review_requested_comp == 1: self.group.review_happened = 1 if self.group.review_happened == 1: if abs(secAuditor_guess - self.group.Guess_6s_Pic1) <= 5: self.group.secAuditor_awarded = 1 else: self.group.secAuditor_awarded = 0 return dict( chance_move=chance_move, ) #def before_next_page(self): # secAuditor_guess = self.group.secAuditor_guess #print(secAuditor_guess) # if self.group.review_requested_est == 1 or self.group.review_requested_aud == 1 or self.group.review_requested_comp == 1: # self.group.review_happened = 1 # if self.group.review_happened == 1: # if abs(secAuditor_guess - self.group.Guess_6s_Pic1) <= 5: # self.group.secAuditor_awarded = 1 # else: # self.group.secAuditor_awarded = 0 #print(self.group.secAuditor_awarded) class k_Results_Est(Page): def is_displayed(self): return self.player.id_in_group == 1 def vars_for_template(self): if self.group.transfer_accepted == 1: payoff_est = 20 - self.group.sent_amount + self.group.prize_awarded*20 - self.group.review_requested_est*1 else: payoff_est = 12 + self.group.prize_awarded*20 - self.group.review_requested_est*1 # Estimator Punishments: if self.participant.vars['treatment'] == 2 and self.group.review_happened == 1: if self.group.sent_amount > 8: payoff_est = payoff_est - 8 if self.participant.vars['treatment'] == 5 and self.group.review_happened == 1: if self.group.prize_awarded == 1 and self.group.secAuditor_awarded == 0: payoff_est = payoff_est - 20 self.player.earnings_in_round = payoff_est # Copy results variables into participant.vars to retrieve later. self.participant.vars['sent_amount{}'.format(self.round_number)] = self.group.sent_amount self.participant.vars['transfer_accepted{}'.format(self.round_number)] = self.group.transfer_accepted self.participant.vars['solution{}'.format(self.round_number)] = Constants.solution[self.round_number-1] #print(self.participant.vars['solution{}'.format(self.round_number)]) self.participant.vars['Guess_6s_Pic1{}'.format(self.round_number)] = self.group.Guess_6s_Pic1 self.participant.vars['absDev{}'.format(self.round_number)] = abs(self.participant.vars['solution{}'.format(self.round_number)] - self.participant.vars['Guess_6s_Pic1{}'.format(self.round_number)]) #print(self.participant.vars['absDev{}'.format(self.round_number)]) self.participant.vars['prize_awarded{}'.format(self.round_number)] = self.group.prize_awarded if self.participant.vars['absDev{}'.format(self.round_number)] <= 5: self.participant.vars['prize_deserved{}'.format(self.round_number)] = 1 else: self.participant.vars['prize_deserved{}'.format(self.round_number)] = 0 #print(self.participant.vars['prize_deserved{}'.format(self.round_number)]) self.participant.vars['review_requested_est{}'.format(self.round_number)] = self.group.review_requested_est self.participant.vars['review_requested_aud{}'.format(self.round_number)] = self.group.review_requested_aud self.participant.vars['review_happened{}'.format(self.round_number)] = self.group.review_happened self.participant.vars['secAuditor_awarded{}'.format(self.round_number)] = self.group.secAuditor_awarded self.participant.vars['earnings_in_round{}'.format(self.round_number)] = payoff_est #print(self.participant.vars['earnings_in_round{}'.format(self.round_number)]) #print(self.participant.vars['earnings_in_round1']) est_keeps = 20 - self.group.sent_amount return dict( payoff_est = payoff_est, est_keeps = est_keeps, ) def before_next_page(self): if self.round_number == Constants.num_rounds: absDevSum = self.participant.vars['absDev1'] + self.participant.vars['absDev2'] + self.participant.vars['absDev3'] + self.participant.vars['absDev4'] + self.participant.vars['absDev5'] + self.participant.vars['absDev6'] + self.participant.vars['absDev7'] + self.participant.vars['absDev8'] + self.participant.vars['absDev9'] + self.participant.vars['absDev10'] + self.participant.vars['absDev11'] + self.participant.vars['absDev12'] + self.participant.vars['absDev13'] + self.participant.vars['absDev14'] + self.participant.vars['absDev15'] + self.participant.vars['absDev16'] self.participant.vars['ownDev'] = absDevSum self.session.vars['absDev'].append(self.participant.vars['ownDev']) N_ownDeserve = self.participant.vars['prize_deserved1'] + self.participant.vars['prize_deserved2'] + self.participant.vars['prize_deserved3'] + self.participant.vars['prize_deserved4'] + self.participant.vars['prize_deserved5'] + self.participant.vars['prize_deserved6'] + self.participant.vars['prize_deserved7'] + self.participant.vars['prize_deserved8'] + self.participant.vars['prize_deserved9'] + self.participant.vars['prize_deserved10'] + self.participant.vars['prize_deserved11'] + self.participant.vars['prize_deserved12'] + self.participant.vars['prize_deserved13'] + self.participant.vars['prize_deserved14'] + self.participant.vars['prize_deserved15'] + self.participant.vars['prize_deserved16'] self.session.vars['deserve_list'].append(N_ownDeserve) class l_Results_Aud(Page): def is_displayed(self): return self.player.id_in_group == 2 def vars_for_template(self): if self.group.transfer_accepted == 1: payoff_aud = self.group.sent_amount - self.group.review_requested_aud*1 else: payoff_aud = 8 - self.group.review_requested_aud * 1 # Auditor Punishments: if self.participant.vars['treatment'] == 3: if self.group.prize_awarded != self.group.secAuditor_awarded and self.group.review_happened == 1: payoff_aud = payoff_aud - 8 if self.participant.vars['treatment'] == 4 and self.group.review_happened == 1: if self.group.sent_amount > 8 and self.group.transfer_accepted == 1: payoff_aud = payoff_aud - 8 self.player.earnings_in_round = payoff_aud # Copy results variables into participant.vars to retrieve later. self.participant.vars['sent_amount{}'.format(self.round_number)] = self.group.sent_amount self.participant.vars['transfer_accepted{}'.format(self.round_number)] = self.group.transfer_accepted self.participant.vars['solution{}'.format(self.round_number)] = Constants.solution[self.round_number-1] #print(self.participant.vars['solution{}'.format(self.round_number)]) self.participant.vars['Guess_6s_Pic1{}'.format(self.round_number)] = self.group.Guess_6s_Pic1 self.participant.vars['absDev{}'.format(self.round_number)] = abs(self.participant.vars['solution{}'.format(self.round_number)] - self.participant.vars['Guess_6s_Pic1{}'.format(self.round_number)]) #print(self.participant.vars['absDev{}'.format(self.round_number)]) self.participant.vars['prize_awarded{}'.format(self.round_number)] = self.group.prize_awarded if self.participant.vars['absDev{}'.format(self.round_number)] <= 5: self.participant.vars['prize_deserved{}'.format(self.round_number)] = 1 else: self.participant.vars['prize_deserved{}'.format(self.round_number)] = 0 #print(self.participant.vars['prize_deserved{}'.format(self.round_number)]) self.participant.vars['review_requested_est{}'.format(self.round_number)] = self.group.review_requested_est self.participant.vars['review_requested_aud{}'.format(self.round_number)] = self.group.review_requested_aud self.participant.vars['review_happened{}'.format(self.round_number)] = self.group.review_happened self.participant.vars['secAuditor_awarded{}'.format(self.round_number)] = self.group.secAuditor_awarded self.participant.vars['earnings_in_round{}'.format(self.round_number)] = payoff_aud est_keeps = 20 - self.group.sent_amount return dict( payoff_aud = payoff_aud, est_keeps=est_keeps, ) def before_next_page(self): if self.round_number == Constants.num_rounds: N_ownAwarded = self.participant.vars['prize_awarded1'] + self.participant.vars['prize_awarded2'] + self.participant.vars['prize_awarded3'] + self.participant.vars['prize_awarded4'] + self.participant.vars['prize_awarded5'] + self.participant.vars['prize_awarded6'] + self.participant.vars['prize_awarded7'] + self.participant.vars['prize_awarded8'] + self.participant.vars['prize_awarded9'] + self.participant.vars['prize_awarded10'] + self.participant.vars['prize_awarded11'] + self.participant.vars['prize_awarded12'] + self.participant.vars['prize_awarded13'] + self.participant.vars['prize_awarded14'] + self.participant.vars['prize_awarded15'] + self.participant.vars['prize_awarded16'] self.session.vars['award_list'].append(N_ownAwarded) class RoundWaitPage(WaitPage): template_name = 'DFG_experiment/l_RoundWaitPage.html' form_model = 'group' wait_for_all_groups = True #def before_next_page(self): # if self.round_number == Constants.num_rounds: # absDevSum = self.participant.vars['absDev1'] + self.participant.vars['absDev2'] + self.participant.vars['absDev3'] + self.participant.vars['absDev4'] + self.participant.vars['absDev5'] + self.participant.vars['absDev6'] + self.participant.vars['absDev7'] + self.participant.vars['absDev8'] + self.participant.vars['absDev9'] + self.participant.vars['absDev10'] + self.participant.vars['absDev11'] + self.participant.vars['absDev12'] + self.participant.vars['absDev13'] + self.participant.vars['absDev14'] + self.participant.vars['absDev15'] + self.participant.vars['absDev16'] # self.participant.vars['ownDev'] = absDevSum # self.session.vars['absDev'].append(self.participant.vars['ownDev']) class m__Questionnaire_Est(Page): form_model = 'player' form_fields = ['est2_confidence_guess'] def is_displayed(self): return self.player.round_number == Constants.num_rounds and self.player.id_in_group == 1 def vars_for_template(self): #print(self.session.vars['deserve_list']) #absDevSum = self.participant.vars['absDev1'] + self.participant.vars['absDev2'] + self.participant.vars['absDev3'] + self.participant.vars['absDev4'] + self.participant.vars['absDev5'] + self.participant.vars['absDev6'] + self.participant.vars['absDev7'] + self.participant.vars['absDev8'] + self.participant.vars['absDev9'] + self.participant.vars['absDev10'] + self.participant.vars['absDev11'] + self.participant.vars['absDev12'] + self.participant.vars['absDev13'] + self.participant.vars['absDev14'] + self.participant.vars['absDev15'] + self.participant.vars['absDev16'] #self.participant.vars['ownDev'] = absDevSum # Create an empty list in settings which appends all players' absDevSum. Then compare it with this value. #self.session.vars['absDev'].append(self.participant.vars['ownDev']) #print(self.session.vars['absDev']) #absDevList = self.session.vars['absDev'] #print(statistics.median(absDevList)) # print(absDevList) ####n_prizes_received = self.participant.vars['prize_awarded1'] + self.participant.vars['prize_awarded2'] + self.participant.vars['prize_awarded3'] + self.participant.vars['prize_awarded4'] + self.participant.vars['prize_awarded5'] + self.participant.vars['prize_awarded6'] + self.participant.vars['prize_awarded7'] + self.participant.vars['prize_awarded8'] + self.participant.vars['prize_awarded9'] + self.participant.vars['prize_awarded10'] + self.participant.vars['prize_awarded11'] + self.participant.vars['prize_awarded12'] + self.participant.vars['prize_awarded13'] + self.participant.vars['prize_awarded14'] + self.participant.vars['prize_awarded15'] + self.participant.vars['prize_awarded16'] ####self.participant.vars['n_prizes_received'] = n_prizes_received n_prizes_deserved = self.participant.vars['prize_deserved1'] + self.participant.vars['prize_deserved2'] + self.participant.vars['prize_deserved3'] + self.participant.vars['prize_deserved4'] + self.participant.vars['prize_deserved5'] + self.participant.vars['prize_deserved6'] + self.participant.vars['prize_deserved7'] + self.participant.vars['prize_deserved8'] + self.participant.vars['prize_deserved9'] + self.participant.vars['prize_deserved10'] + self.participant.vars['prize_deserved11'] + self.participant.vars['prize_deserved12'] + self.participant.vars['prize_deserved13'] + self.participant.vars['prize_deserved14'] + self.participant.vars['prize_deserved15'] + self.participant.vars['prize_deserved16'] self.participant.vars['n_prizes_deserved'] = n_prizes_deserved deserve_list = self.session.vars['deserve_list'] #print(statistics.mean(deserve_list)) # Perhaps, we want to put some interval around the median for which people are considered equally as good. # Otherwise, the middle category will almost never give reward. Missing: Condition that compares response and # true value to award bonus. if self.participant.vars['n_prizes_deserved'] < statistics.median(deserve_list) - 1: guess_relative = 1 #worse than average else: if self.participant.vars['n_prizes_deserved'] > statistics.median(deserve_list) + 1: guess_relative = 3 #better than average else: guess_relative = 2 self.participant.vars['guess_relative'] = guess_relative return dict( ####n_prizes_received = n_prizes_received, ####n_prizes_deserved = n_prizes_deserved, deserve_list = deserve_list, guess_relative = guess_relative, #absDevSum = absDevSum, ) def before_next_page(self): ####self.player.n_prizes_received = self.participant.vars['n_prizes_received'] est1_transfer = self.request.POST.get('est1_transfer') self.player.est1_transfer = est1_transfer self.participant.vars['est1_transfer'] = est1_transfer #est2_confidence_guess = int(self.request.POST.get('est2_confidence_guess')) #self.player.est2_confidence_guess = est2_confidence_guess #self.participant.vars['est2_confidence_guess'] = est2_confidence_guess class m__Questionnaire_Est_2(Page): form_model = 'player' form_fields = ['age', 'gender', 'faculty', 'est3_deserved'] def is_displayed(self): return self.player.round_number == Constants.num_rounds and self.player.id_in_group == 1 def vars_for_template(self): #print(self.session.vars['deserve_list']) #absDevSum = self.participant.vars['absDev1'] + self.participant.vars['absDev2'] + self.participant.vars['absDev3'] + self.participant.vars['absDev4'] + self.participant.vars['absDev5'] + self.participant.vars['absDev6'] + self.participant.vars['absDev7'] + self.participant.vars['absDev8'] + self.participant.vars['absDev9'] + self.participant.vars['absDev10'] + self.participant.vars['absDev11'] + self.participant.vars['absDev12'] + self.participant.vars['absDev13'] + self.participant.vars['absDev14'] + self.participant.vars['absDev15'] + self.participant.vars['absDev16'] #self.participant.vars['ownDev'] = absDevSum # Create an empty list in settings which appends all players' absDevSum. Then compare it with this value. #self.session.vars['absDev'].append(self.participant.vars['ownDev']) #print(self.session.vars['absDev']) #absDevList = self.session.vars['absDev'] #print(statistics.median(absDevList)) # print(absDevList) n_prizes_received = self.participant.vars['prize_awarded1'] + self.participant.vars['prize_awarded2'] + self.participant.vars['prize_awarded3'] + self.participant.vars['prize_awarded4'] + self.participant.vars['prize_awarded5'] + self.participant.vars['prize_awarded6'] + self.participant.vars['prize_awarded7'] + self.participant.vars['prize_awarded8'] + self.participant.vars['prize_awarded9'] + self.participant.vars['prize_awarded10'] + self.participant.vars['prize_awarded11'] + self.participant.vars['prize_awarded12'] + self.participant.vars['prize_awarded13'] + self.participant.vars['prize_awarded14'] + self.participant.vars['prize_awarded15'] + self.participant.vars['prize_awarded16'] self.participant.vars['n_prizes_received'] = n_prizes_received n_prizes_deserved = self.participant.vars['prize_deserved1'] + self.participant.vars['prize_deserved2'] + self.participant.vars['prize_deserved3'] + self.participant.vars['prize_deserved4'] + self.participant.vars['prize_deserved5'] + self.participant.vars['prize_deserved6'] + self.participant.vars['prize_deserved7'] + self.participant.vars['prize_deserved8'] + self.participant.vars['prize_deserved9'] + self.participant.vars['prize_deserved10'] + self.participant.vars['prize_deserved11'] + self.participant.vars['prize_deserved12'] + self.participant.vars['prize_deserved13'] + self.participant.vars['prize_deserved14'] + self.participant.vars['prize_deserved15'] + self.participant.vars['prize_deserved16'] ####self.participant.vars['n_prizes_deserved'] = n_prizes_deserved return dict( n_prizes_received = n_prizes_received, n_prizes_deserved = n_prizes_deserved, #absDevSum = absDevSum, ) def before_next_page(self): self.player.duration = round((int(time.time()) - self.session.vars['start_time'])/60, 2) #print(self.player.duration) self.player.n_prizes_received = self.participant.vars['n_prizes_received'] ####est1_transfer = self.request.POST.get('est1_transfer') ####self.player.est1_transfer = est1_transfer ####self.participant.vars['est1_transfer'] = est1_transfer #est2_confidence_guess = int(self.request.POST.get('est2_confidence_guess')) #self.player.est2_confidence_guess = est2_confidence_guess #self.participant.vars['est2_confidence_guess'] = est2_confidence_guess est4_review = self.request.POST.get('est4_review') self.player.est4_review = est4_review self.participant.vars['est4_review'] = est4_review feedback = self.request.POST.get('feedback') self.player.feedback = feedback self.participant.vars['feedback'] = feedback self.player.Q1_first_attempt = int(self.participant.vars['Q1_first_attempt']) self.player.Q2_first_attempt = int(self.participant.vars['Q2_first_attempt']) self.player.Q3_first_attempt = int(self.participant.vars['Q3_first_attempt']) self.player.Q4_first_attempt = int(self.participant.vars['Q4_first_attempt']) self.player.Q5_first_attempt = int(self.participant.vars['Q5_first_attempt']) self.player.Q6_first_attempt = int(self.participant.vars['Q6_first_attempt']) self.player.Q7_first_attempt = int(self.participant.vars['Q7_first_attempt']) class m_Questionnaire_Aud(Page): form_model = 'player' form_fields = ['aud2_confidence_guess'] def is_displayed(self): return self.player.round_number == Constants.num_rounds and self.player.id_in_group == 2 def vars_for_template(self): #print(self.session.vars['award_list']) n_prizes_awarded = self.participant.vars['prize_awarded1'] + self.participant.vars['prize_awarded2'] + self.participant.vars['prize_awarded3'] + self.participant.vars['prize_awarded4'] + self.participant.vars['prize_awarded5'] + self.participant.vars['prize_awarded6'] + self.participant.vars['prize_awarded7'] + self.participant.vars['prize_awarded8'] + self.participant.vars['prize_awarded9'] + self.participant.vars['prize_awarded10'] + self.participant.vars['prize_awarded11'] + self.participant.vars['prize_awarded12'] + self.participant.vars['prize_awarded13'] + self.participant.vars['prize_awarded14'] + self.participant.vars['prize_awarded15'] + self.participant.vars['prize_awarded16'] self.participant.vars['n_prizes_awarded'] = n_prizes_awarded ####n_prizes_deserved = self.participant.vars['prize_deserved1'] + self.participant.vars['prize_deserved2'] + self.participant.vars['prize_deserved3'] + self.participant.vars['prize_deserved4'] + self.participant.vars['prize_deserved5'] + self.participant.vars['prize_deserved6'] + self.participant.vars['prize_deserved7'] + self.participant.vars['prize_deserved8'] + self.participant.vars['prize_deserved9'] + self.participant.vars['prize_deserved10'] + self.participant.vars['prize_deserved11'] + self.participant.vars['prize_deserved12'] + self.participant.vars['prize_deserved13'] + self.participant.vars['prize_deserved14'] + self.participant.vars['prize_deserved15'] + self.participant.vars['prize_deserved16'] ####self.participant.vars['n_prizes_deserved'] = n_prizes_deserved award_list = self.session.vars['award_list'] #print(statistics.mean(award_list)) # Perhaps, we want to put some interval around the median for which people are considered equally as good. # Otherwise, the middle category will almost never give reward. Missing: Condition that compares response and # true value to award bonus. if self.participant.vars['n_prizes_awarded'] < statistics.median(award_list) - 1: award_relative = 1 #awarded less than average else: if self.participant.vars['n_prizes_awarded'] > statistics.median(award_list) + 1: award_relative = 3 #awarded more than average else: award_relative = 2 self.participant.vars['award_relative'] = award_relative return dict( award_list=award_list, award_relative=award_relative, n_prizes_awarded = n_prizes_awarded, ####n_prizes_deserved = n_prizes_deserved, ) def before_next_page(self): self.player.n_prizes_awarded = self.participant.vars['n_prizes_awarded'] aud1_transfer = self.request.POST.get('aud1_transfer') self.player.aud1_transfer = aud1_transfer self.participant.vars['aud1_transfer'] = aud1_transfer aud2_award_expl = self.request.POST.get('aud2_award_expl') self.player.aud2_award_expl = aud2_award_expl self.participant.vars['aud2_award_expl'] = aud2_award_expl #aud2_confidence_guess = self.request.POST.get('aud2_confidence_guess') #self.player.aud2_confidence_guess = aud2_confidence_guess #self.participant.vars['aud2_confidence_guess'] = aud2_confidence_guess #aud3_award_tolerance = int(self.request.POST.get('aud3_award_tolerance')) #self.player.aud3_award_tolerance = aud3_award_tolerance #self.participant.vars['aud3_award_tolerance'] = aud3_award_tolerance ####aud4_review = self.request.POST.get('aud4_review') ####self.player.aud4_review = aud4_review ####self.participant.vars['aud4_review'] = aud4_review ####feedback = self.request.POST.get('feedback') ####self.player.feedback = feedback ####self.participant.vars['feedback'] = feedback ####self.player.Q1_first_attempt = int(self.participant.vars['Q1_first_attempt']) ####self.player.Q2_first_attempt = int(self.participant.vars['Q2_first_attempt']) ####self.player.Q3_first_attempt = int(self.participant.vars['Q3_first_attempt']) ####self.player.Q4_first_attempt = int(self.participant.vars['Q4_first_attempt']) ####self.player.Q5_first_attempt = int(self.participant.vars['Q5_first_attempt']) ####self.player.Q6_first_attempt = int(self.participant.vars['Q6_first_attempt']) ####self.player.Q7_first_attempt = int(self.participant.vars['Q7_first_attempt']) class m_Questionnaire_Aud_2(Page): form_model = 'player' form_fields = ['age', 'gender', 'faculty', 'aud3_deserved'] def is_displayed(self): return self.player.round_number == Constants.num_rounds and self.player.id_in_group == 2 def vars_for_template(self): #print(self.session.vars['award_list']) n_prizes_awarded = self.participant.vars['prize_awarded1'] + self.participant.vars['prize_awarded2'] + self.participant.vars['prize_awarded3'] + self.participant.vars['prize_awarded4'] + self.participant.vars['prize_awarded5'] + self.participant.vars['prize_awarded6'] + self.participant.vars['prize_awarded7'] + self.participant.vars['prize_awarded8'] + self.participant.vars['prize_awarded9'] + self.participant.vars['prize_awarded10'] + self.participant.vars['prize_awarded11'] + self.participant.vars['prize_awarded12'] + self.participant.vars['prize_awarded13'] + self.participant.vars['prize_awarded14'] + self.participant.vars['prize_awarded15'] + self.participant.vars['prize_awarded16'] self.participant.vars['n_prizes_awarded'] = n_prizes_awarded n_prizes_deserved = self.participant.vars['prize_deserved1'] + self.participant.vars['prize_deserved2'] + self.participant.vars['prize_deserved3'] + self.participant.vars['prize_deserved4'] + self.participant.vars['prize_deserved5'] + self.participant.vars['prize_deserved6'] + self.participant.vars['prize_deserved7'] + self.participant.vars['prize_deserved8'] + self.participant.vars['prize_deserved9'] + self.participant.vars['prize_deserved10'] + self.participant.vars['prize_deserved11'] + self.participant.vars['prize_deserved12'] + self.participant.vars['prize_deserved13'] + self.participant.vars['prize_deserved14'] + self.participant.vars['prize_deserved15'] + self.participant.vars['prize_deserved16'] self.participant.vars['n_prizes_deserved'] = n_prizes_deserved ####award_list = self.session.vars['award_list'] #print(statistics.mean(award_list)) # Perhaps, we want to put some interval around the median for which people are considered equally as good. # Otherwise, the middle category will almost never give reward. Missing: Condition that compares response and # true value to award bonus. ####if self.participant.vars['n_prizes_awarded'] < statistics.median(award_list) - 1: ####award_relative = 1 #awarded less than average ####else: ####if self.participant.vars['n_prizes_awarded'] > statistics.median(award_list) + 1: ####award_relative = 3 #awarded more than average ####else: ####award_relative = 2 ####self.participant.vars['award_relative'] = award_relative return dict( ####award_list=award_list, ####award_relative=award_relative, n_prizes_awarded = n_prizes_awarded, n_prizes_deserved = n_prizes_deserved, ) def before_next_page(self): self.player.duration = round((int(time.time()) - self.session.vars['start_time']) / 60, 2) #print(self.player.duration) ####self.player.n_prizes_awarded = self.participant.vars['n_prizes_awarded'] ####aud1_transfer = self.request.POST.get('aud1_transfer') ####self.player.aud1_transfer = aud1_transfer ####self.participant.vars['aud1_transfer'] = aud1_transfer ####aud2_award_expl = self.request.POST.get('aud2_award_expl') ####self.player.aud2_award_expl = aud2_award_expl ####self.participant.vars['aud2_award_expl'] = aud2_award_expl #aud2_confidence_guess = self.request.POST.get('aud2_confidence_guess') #self.player.aud2_confidence_guess = aud2_confidence_guess #self.participant.vars['aud2_confidence_guess'] = aud2_confidence_guess #aud3_award_tolerance = int(self.request.POST.get('aud3_award_tolerance')) #self.player.aud3_award_tolerance = aud3_award_tolerance #self.participant.vars['aud3_award_tolerance'] = aud3_award_tolerance aud4_review = self.request.POST.get('aud4_review') self.player.aud4_review = aud4_review self.participant.vars['aud4_review'] = aud4_review feedback = self.request.POST.get('feedback') self.player.feedback = feedback self.participant.vars['feedback'] = feedback self.player.Q1_first_attempt = int(self.participant.vars['Q1_first_attempt']) self.player.Q2_first_attempt = int(self.participant.vars['Q2_first_attempt']) self.player.Q3_first_attempt = int(self.participant.vars['Q3_first_attempt']) self.player.Q4_first_attempt = int(self.participant.vars['Q4_first_attempt']) self.player.Q5_first_attempt = int(self.participant.vars['Q5_first_attempt']) self.player.Q6_first_attempt = int(self.participant.vars['Q6_first_attempt']) self.player.Q7_first_attempt = int(self.participant.vars['Q7_first_attempt']) class n_End_Est(Page): def is_displayed(self): return self.player.id_in_group == 1 and self.player.round_number == Constants.num_rounds def vars_for_template(self): #prev_player = self.group.in_round(2) #print(prev_player) #payoff_est = prev_player.sent_amount #print(payoff_est) if self.player.est2_confidence_guess == self.participant.vars['guess_relative']: overconfidence = 0 else: if self.player.est2_confidence_guess > self.participant.vars['guess_relative']: overconfidence = 1 else: overconfidence = -1 self.participant.vars['overconfidence'] = overconfidence self.player.overconfidence = overconfidence if overconfidence == 0: assessment_bonus_1 = 1 else: assessment_bonus_1 = 0 # Note: Deservingness is with reference to the shown awards, but bonus depends on objective awards. if self.player.est3_deserved == self.participant.vars['n_prizes_received']: est_opinion_deserved_more = 0 else: if self.player.est3_deserved > self.participant.vars['n_prizes_received']: est_opinion_deserved_more = 1 else: est_opinion_deserved_more = -1 self.participant.vars['est_opinion_deserved_more'] = est_opinion_deserved_more self.player.est_opinion_deserved_more = est_opinion_deserved_more if self.player.est3_deserved == self.participant.vars['n_prizes_deserved']: assessment_bonus_2 = 2 else: assessment_bonus_2 = 0 #print(self.player.overconfidence) sent_amount_s1 = self.participant.vars['sent_amount{}'.format(self.participant.vars['selectedRound'])] transfer_accepted_s1 = self.participant.vars['transfer_accepted{}'.format(self.participant.vars['selectedRound'])] Guess_6s_Pic1_s1 = self.participant.vars['Guess_6s_Pic1{}'.format(self.participant.vars['selectedRound'])] prize_awarded_s1 = self.participant.vars['prize_awarded{}'.format(self.participant.vars['selectedRound'])] review_requested_est_s1 = self.participant.vars['review_requested_est{}'.format(self.participant.vars['selectedRound'])] review_requested_aud_s1 = self.participant.vars['review_requested_aud{}'.format(self.participant.vars['selectedRound'])] review_happened_s1 = self.participant.vars['review_happened{}'.format(self.participant.vars['selectedRound'])] secAuditor_awarded_s1 = self.participant.vars['secAuditor_awarded{}'.format(self.participant.vars['selectedRound'])] earnings_in_round_s1 = self.participant.vars['earnings_in_round{}'.format(self.participant.vars['selectedRound'])] est_keeps_s1 = 20 - self.participant.vars['sent_amount{}'.format(self.participant.vars['selectedRound'])] sent_amount_s2 = self.participant.vars['sent_amount{}'.format(self.participant.vars['selectedRound2'])] transfer_accepted_s2 = self.participant.vars['transfer_accepted{}'.format(self.participant.vars['selectedRound2'])] Guess_6s_Pic1_s2 = self.participant.vars['Guess_6s_Pic1{}'.format(self.participant.vars['selectedRound2'])] prize_awarded_s2 = self.participant.vars['prize_awarded{}'.format(self.participant.vars['selectedRound2'])] review_requested_est_s2 = self.participant.vars['review_requested_est{}'.format(self.participant.vars['selectedRound2'])] review_requested_aud_s2 = self.participant.vars['review_requested_aud{}'.format(self.participant.vars['selectedRound2'])] review_happened_s2 = self.participant.vars['review_happened{}'.format(self.participant.vars['selectedRound2'])] secAuditor_awarded_s2 = self.participant.vars['secAuditor_awarded{}'.format(self.participant.vars['selectedRound2'])] earnings_in_round_s2 = self.participant.vars['earnings_in_round{}'.format(self.participant.vars['selectedRound2'])] est_keeps_s2 = 20 - self.participant.vars['sent_amount{}'.format(self.participant.vars['selectedRound2'])] sent_amount_s3 = self.participant.vars['sent_amount{}'.format(self.participant.vars['selectedRound3'])] transfer_accepted_s3 = self.participant.vars['transfer_accepted{}'.format(self.participant.vars['selectedRound3'])] Guess_6s_Pic1_s3 = self.participant.vars['Guess_6s_Pic1{}'.format(self.participant.vars['selectedRound3'])] prize_awarded_s3 = self.participant.vars['prize_awarded{}'.format(self.participant.vars['selectedRound3'])] review_requested_est_s3 = self.participant.vars['review_requested_est{}'.format(self.participant.vars['selectedRound3'])] review_requested_aud_s3 = self.participant.vars['review_requested_aud{}'.format(self.participant.vars['selectedRound3'])] review_happened_s3 = self.participant.vars['review_happened{}'.format(self.participant.vars['selectedRound3'])] secAuditor_awarded_s3 = self.participant.vars['secAuditor_awarded{}'.format(self.participant.vars['selectedRound3'])] earnings_in_round_s3 = self.participant.vars['earnings_in_round{}'.format(self.participant.vars['selectedRound3'])] est_keeps_s3 = 20 - self.participant.vars['sent_amount{}'.format(self.participant.vars['selectedRound3'])] comprehension_bonus = int(self.participant.vars['Q1_first_attempt']) + int(self.participant.vars['Q2_first_attempt']) + int(self.participant.vars['Q3_first_attempt']) + int(self.participant.vars['Q4_first_attempt']) + int(self.participant.vars['Q5_first_attempt']) + int(self.participant.vars['Q6_first_attempt']) + int(self.participant.vars['Q7_first_attempt']) assessment_bonus = assessment_bonus_1 + assessment_bonus_2 bonus = comprehension_bonus + assessment_bonus taler_in_all_rounds = earnings_in_round_s1 + earnings_in_round_s2 + earnings_in_round_s3 taler_final = earnings_in_round_s1 + earnings_in_round_s2 + earnings_in_round_s3 + comprehension_bonus + assessment_bonus payoff_final = c(taler_final).to_real_world_currency(self.session) self.player.final_tokens = int(taler_final) payoff_final_showup = payoff_final + self.player.session.config['participation_fee'] self.player.final_payoff = int(taler_final) * self.session.config.get('real_world_currency_per_point', None) self.participant.payoff = int(taler_final) return dict ( sent_amount_s=sent_amount_s1, transfer_accepted_s=transfer_accepted_s1, Guess_6s_Pic1_s=Guess_6s_Pic1_s1, prize_awarded_s=prize_awarded_s1, review_requested_est_s=review_requested_est_s1, review_requested_aud_s=review_requested_aud_s1, review_happened_s=review_happened_s1, secAuditor_awarded_s=secAuditor_awarded_s1, earnings_in_round_s=earnings_in_round_s1, est_keeps_s=est_keeps_s1, sent_amount_s2=sent_amount_s2, transfer_accepted_s2=transfer_accepted_s2, Guess_6s_Pic1_s2=Guess_6s_Pic1_s2, prize_awarded_s2=prize_awarded_s2, review_requested_est_s2=review_requested_est_s2, review_requested_aud_s2=review_requested_aud_s2, review_happened_s2=review_happened_s2, secAuditor_awarded_s2=secAuditor_awarded_s2, earnings_in_round_s2=earnings_in_round_s2, est_keeps_s2=est_keeps_s2, sent_amount_s3=sent_amount_s3, transfer_accepted_s3=transfer_accepted_s3, Guess_6s_Pic1_s3=Guess_6s_Pic1_s3, prize_awarded_s3=prize_awarded_s3, review_requested_est_s3=review_requested_est_s3, review_requested_aud_s3=review_requested_aud_s3, review_happened_s3=review_happened_s3, secAuditor_awarded_s3=secAuditor_awarded_s3, earnings_in_round_s3=earnings_in_round_s3, est_keeps_s3=est_keeps_s3, comprehension_bonus=comprehension_bonus, assessment_bonus=assessment_bonus, bonus=bonus, taler_in_all_rounds=taler_in_all_rounds, taler_final=taler_final, payoff_final=payoff_final, payoff_final_showup=payoff_final_showup, ) class o_End_Aud(Page): def is_displayed(self): return self.player.id_in_group == 2 and self.player.round_number == Constants.num_rounds def vars_for_template(self): #prev_player = self.group.in_round(2) #print(prev_player) #payoff_est = prev_player.sent_amount #print(payoff_est) if self.player.aud2_confidence_guess == self.participant.vars['award_relative']: overlenience = 0 else: if self.player.aud2_confidence_guess > self.participant.vars['award_relative']: overlenience = 1 else: overlenience = -1 self.participant.vars['overlenience'] = overlenience self.player.overlenience = overlenience #print(self.player.overlenience) if overlenience == 0: assessment_bonus_1 = 1 else: assessment_bonus_1 = 0 # Note: Deservingness is with reference to the shown awards, but bonus depends on objective awards. if self.player.aud3_deserved == self.participant.vars['n_prizes_awarded']: aud_opinion_deserved_more = 0 else: if self.player.aud3_deserved > self.participant.vars['n_prizes_awarded']: aud_opinion_deserved_more = 1 else: aud_opinion_deserved_more = -1 self.participant.vars['aud_opinion_deserved_more'] = aud_opinion_deserved_more self.player.aud_opinion_deserved_more = aud_opinion_deserved_more if self.player.aud3_deserved == self.participant.vars['n_prizes_deserved']: assessment_bonus_2 = 2 else: assessment_bonus_2 = 0 sent_amount_s1 = self.participant.vars['sent_amount{}'.format(self.participant.vars['selectedRound'])] transfer_accepted_s1 = self.participant.vars['transfer_accepted{}'.format(self.participant.vars['selectedRound'])] Guess_6s_Pic1_s1 = self.participant.vars['Guess_6s_Pic1{}'.format(self.participant.vars['selectedRound'])] prize_awarded_s1 = self.participant.vars['prize_awarded{}'.format(self.participant.vars['selectedRound'])] review_requested_est_s1 = self.participant.vars['review_requested_est{}'.format(self.participant.vars['selectedRound'])] review_requested_aud_s1 = self.participant.vars['review_requested_aud{}'.format(self.participant.vars['selectedRound'])] review_happened_s1 = self.participant.vars['review_happened{}'.format(self.participant.vars['selectedRound'])] secAuditor_awarded_s1 = self.participant.vars['secAuditor_awarded{}'.format(self.participant.vars['selectedRound'])] earnings_in_round_s1 = self.participant.vars['earnings_in_round{}'.format(self.participant.vars['selectedRound'])] est_keeps_s1 = 20 - self.participant.vars['sent_amount{}'.format(self.participant.vars['selectedRound'])] sent_amount_s2 = self.participant.vars['sent_amount{}'.format(self.participant.vars['selectedRound2'])] transfer_accepted_s2 = self.participant.vars['transfer_accepted{}'.format(self.participant.vars['selectedRound2'])] Guess_6s_Pic1_s2 = self.participant.vars['Guess_6s_Pic1{}'.format(self.participant.vars['selectedRound2'])] prize_awarded_s2 = self.participant.vars['prize_awarded{}'.format(self.participant.vars['selectedRound2'])] review_requested_est_s2 = self.participant.vars['review_requested_est{}'.format(self.participant.vars['selectedRound2'])] review_requested_aud_s2 = self.participant.vars['review_requested_aud{}'.format(self.participant.vars['selectedRound2'])] review_happened_s2 = self.participant.vars['review_happened{}'.format(self.participant.vars['selectedRound2'])] secAuditor_awarded_s2 = self.participant.vars['secAuditor_awarded{}'.format(self.participant.vars['selectedRound2'])] earnings_in_round_s2 = self.participant.vars['earnings_in_round{}'.format(self.participant.vars['selectedRound2'])] est_keeps_s2 = 20 - self.participant.vars['sent_amount{}'.format(self.participant.vars['selectedRound2'])] sent_amount_s3 = self.participant.vars['sent_amount{}'.format(self.participant.vars['selectedRound3'])] transfer_accepted_s3 = self.participant.vars['transfer_accepted{}'.format(self.participant.vars['selectedRound3'])] Guess_6s_Pic1_s3 = self.participant.vars['Guess_6s_Pic1{}'.format(self.participant.vars['selectedRound3'])] prize_awarded_s3 = self.participant.vars['prize_awarded{}'.format(self.participant.vars['selectedRound3'])] review_requested_est_s3 = self.participant.vars['review_requested_est{}'.format(self.participant.vars['selectedRound3'])] review_requested_aud_s3 = self.participant.vars['review_requested_aud{}'.format(self.participant.vars['selectedRound3'])] review_happened_s3 = self.participant.vars['review_happened{}'.format(self.participant.vars['selectedRound3'])] secAuditor_awarded_s3 = self.participant.vars['secAuditor_awarded{}'.format(self.participant.vars['selectedRound3'])] earnings_in_round_s3 = self.participant.vars['earnings_in_round{}'.format(self.participant.vars['selectedRound3'])] est_keeps_s3 = 20 - self.participant.vars['sent_amount{}'.format(self.participant.vars['selectedRound3'])] comprehension_bonus = int(self.participant.vars['Q1_first_attempt']) + int(self.participant.vars['Q2_first_attempt']) + int(self.participant.vars['Q3_first_attempt']) + int(self.participant.vars['Q4_first_attempt']) + int(self.participant.vars['Q5_first_attempt']) + int(self.participant.vars['Q6_first_attempt']) + int(self.participant.vars['Q7_first_attempt']) assessment_bonus = assessment_bonus_1 + assessment_bonus_2 bonus = comprehension_bonus + assessment_bonus taler_in_all_rounds = earnings_in_round_s1 + earnings_in_round_s2 + earnings_in_round_s3 taler_final = earnings_in_round_s1 + earnings_in_round_s2 + earnings_in_round_s3 + comprehension_bonus + assessment_bonus payoff_final = c(taler_final).to_real_world_currency(self.session) self.player.final_tokens = int(taler_final) self.player.final_payoff = int(taler_final) * self.session.config.get('real_world_currency_per_point', None) payoff_final_showup = payoff_final + self.player.session.config['participation_fee'] self.participant.payoff = int(taler_final) return dict ( sent_amount_s=sent_amount_s1, transfer_accepted_s=transfer_accepted_s1, Guess_6s_Pic1_s=Guess_6s_Pic1_s1, prize_awarded_s=prize_awarded_s1, review_requested_est_s=review_requested_est_s1, review_requested_aud_s=review_requested_aud_s1, review_happened_s=review_happened_s1, secAuditor_awarded_s=secAuditor_awarded_s1, earnings_in_round_s=earnings_in_round_s1, est_keeps_s=est_keeps_s1, sent_amount_s2=sent_amount_s2, transfer_accepted_s2=transfer_accepted_s2, Guess_6s_Pic1_s2=Guess_6s_Pic1_s2, prize_awarded_s2=prize_awarded_s2, review_requested_est_s2=review_requested_est_s2, review_requested_aud_s2=review_requested_aud_s2, review_happened_s2=review_happened_s2, secAuditor_awarded_s2=secAuditor_awarded_s2, earnings_in_round_s2=earnings_in_round_s2, est_keeps_s2=est_keeps_s2, sent_amount_s3=sent_amount_s3, transfer_accepted_s3=transfer_accepted_s3, Guess_6s_Pic1_s3=Guess_6s_Pic1_s3, prize_awarded_s3=prize_awarded_s3, review_requested_est_s3=review_requested_est_s3, review_requested_aud_s3=review_requested_aud_s3, review_happened_s3=review_happened_s3, secAuditor_awarded_s3=secAuditor_awarded_s3, earnings_in_round_s3=earnings_in_round_s3, est_keeps_s3=est_keeps_s3, comprehension_bonus=comprehension_bonus, assessment_bonus=assessment_bonus, bonus=bonus, taler_in_all_rounds=taler_in_all_rounds, taler_final=taler_final, payoff_final=payoff_final, payoff_final_showup=payoff_final_showup, ) class p_Finished(Page): def is_displayed(self): return self.player.round_number == Constants.num_rounds page_sequence = [c____Intro, c___Rematching, c___Role_Assignment, c_Estimator_Decides, c_MyWaitPage1, d_Auditor_Reacts, d_MyWaitPage2, e_Guessing_Intro, f_Pic1_Est, f_Pic1_Est_Ans, g_Pic1_Aud, g_Pic1_Aud__Waits, g_Pic1_Aud_Ans, gg_MyWaitPage3, h_Request_Review_Est, i_Request_Review_Aud, j__ReviewWaitPage, j_Review_Process, k_Results_Est, l_Results_Aud, RoundWaitPage, m__Questionnaire_Est, m__Questionnaire_Est_2, m_Questionnaire_Aud, m_Questionnaire_Aud_2, n_End_Est, o_End_Aud, p_Finished]