from ._builtin import Page, WaitPage from .models import Constants import math import random class StartWaitPage(WaitPage): def is_displayed(self): return self.subsession.round_number == 1 group_by_arrival_time = True title_text = "The computer program is looking for other participants." body_text = "Pay attention to this screen: The timer for the next page could start any second. " \ "The group matching procedure can take up to 10 minutes. " \ class MatchingFailWaitPage(WaitPage): def is_displayed(self): return self.subsession.round_number == 1 and self.participant.vars['time'] == 1 def after_all_players_arrive(self): for p in self.group.get_players(): # code = random.randint(10000000, 99999999) # p.code = code p.failed_matching = 1 class MatchingFail(Page): def is_displayed(self): return self.subsession.round_number == 1 and self.participant.vars['time'] == 1 def vars_for_template(self): return { 'show_up': Constants.show_up_fail, } class intro(Page): timeout_seconds = 120 timer_text = 'Time remaining on this page:' def before_next_page(self): if self.group.id_in_subsession % 2 == 0: self.group.treatment = 0 ##No Bonus else: self.group.treatment = 1 ##Bonus class intro_task(Page): timeout_seconds = 180 timer_text = 'Time remaining on this page:' def vars_for_template(self): return { 'wage': Constants.w1, 'time': round(Constants.time_task/60), } class scenario(Page): timeout_seconds = 180 timer_text = 'Time remaining on this page:' class task_cam(Page): timeout_seconds = Constants.time_task timer_text = 'Time remaining on this page:' form_model = 'player' form_fields = ['c_flare', 'c_dinghy', 'c_lighter', 'c_vest', 'c_fuel', 'c_rope', 'c_cover', 'c_knife', 'c_paddle', 'c_whisky', 'TimeSpentTask'] def vars_for_template(self): return { 'wage': Constants.w1, } def before_next_page(self): if self.timeout_happened: self.player.timeout_task = 1 if self.timeout_happened and self.player.c_cover == 0 and self.player.c_fuel == 0 and\ self.player.c_lighter == 0 and self.player.c_knife == 0 and self.player.c_flare == 0 and\ self.player.c_dinghy == 0 and self.player.c_rope == 0 and self.player.c_vest == 0 and\ self.player.c_paddle == 0 and self.player.c_whisky == 0: self.player.participant.vars['is_dropout'] = True self.player.is_dropout = True self.player.score = 0 self.participant.vars['sum_score'] = 0 ## correct items cover = 1 - (1 - (self.player.c_cover / 100) ** 2) fuel = 1 - (1 - (self.player.c_fuel / 100) ** 2) lighter = 1 - (1 - (self.player.c_lighter / 100) ** 2) knife = 1 - (1 - (self.player.c_knife / 100) ** 2) rope = 1 - (1 - (self.player.c_rope / 100) ** 2) ## other items flare = 1 - (self.player.c_flare / 100) ** 2 dinghy = 1 - (self.player.c_dinghy / 100) ** 2 vest = 1 - (self.player.c_vest / 100) ** 2 paddle = 1 - (self.player.c_paddle / 100) ** 2 whisky = 1 - (self.player.c_whisky / 100) ** 2 score = round((flare + dinghy + lighter + vest + fuel + rope + cover + knife + paddle + whisky) * 10, 2) self.player.score = score self.participant.vars['sum_score'] = score self.participant.vars['sum_time'] = self.player.TimeSpentTask class belief1(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 120 timer_text = 'Time remaining on this page:' form_model = 'player' form_fields = ['prior'] def before_next_page(self): if self.timeout_happened: self.player.prior = 50 self.player.timeout_belief1 = 1 self.player.is_dropout = True self.player.participant.vars['is_dropout'] = True class RankingWaitPage(WaitPage): wait_for_all_groups = False def after_all_players_arrive(self): players = self.group.get_players() sorted_players = sorted(players, key=lambda p: (-1 * p.participant.vars['sum_score'], p.participant.vars['sum_time'])) for i, p in enumerate(sorted_players): p.rank = i + 1 class InfoAcq(Page): timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 180 class InfoAcq2_seq(Page): timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 180 class InfoAcqDraws_seq(Page): timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 300 form_model = 'player' form_fields = ['sad_flare', 'happy_flare', 'sad_dinghy', 'happy_dinghy', 'happy_lighter', 'sad_lighter', 'sad_vest', 'happy_vest', 'sad_fuel', 'happy_fuel', 'sad_rope', 'happy_rope', 'sad_knife', 'happy_knife', 'sad_cover', 'happy_cover', 'sad_paddle', 'happy_paddle', 'sad_whisky', 'happy_whisky', 'TimeSpentInfo', 'nb_balls', 'history_flare', 'history_dinghy', 'history_lighter', 'history_vest', 'history_fuel', 'history_rope', 'history_knife', 'history_cover', 'history_paddle', 'history_whisky'] def vars_for_template(self): return { 'c_flare': self.player.c_flare, 'c_dinghy': self.player.c_dinghy, 'c_lighter': self.player.c_lighter, 'c_vest': self.player.c_vest, 'c_fuel': self.player.c_fuel, 'c_rope': self.player.c_rope, 'c_cover': self.player.c_cover, 'c_knife': self.player.c_knife, 'c_paddle': self.player.c_paddle, 'c_whisky': self.player.c_whisky, } def before_next_page(self): if self.timeout_happened and self.player.nb_balls == 0: self.player.timeout_task2 = 1 # self.player.is_dropout = True # self.player.participant.vars['is_dropout'] = True class update_cam(Page): timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 300 form_model = 'player' form_fields = ['c_flare2', 'c_dinghy2', 'c_lighter2', 'c_vest2', 'c_fuel2', 'c_rope2', 'c_cover2', 'c_knife2', 'c_paddle2', 'c_whisky2', 'TimeSpentUpdate', 'top5'] def vars_for_template(self): return { 'c_flare': self.player.c_flare, 'c_dinghy': self.player.c_dinghy, 'c_lighter': self.player.c_lighter, 'c_vest': self.player.c_vest, 'c_fuel': self.player.c_fuel, 'c_rope': self.player.c_rope, 'c_cover': self.player.c_cover, 'c_knife': self.player.c_knife, 'c_paddle': self.player.c_paddle, 'c_whisky': self.player.c_whisky, 'wage': Constants.w1, } def before_next_page(self): if self.timeout_happened: self.player.timeout_task2 = 1 if self.timeout_happened and self.player.c_cover2 == 0 and self.player.c_fuel2 == 0 and \ self.player.c_lighter2 == 0 and self.player.c_knife2 == 0 and\ self.player.c_flare2 == 0 and self.player.c_dinghy2 == 0 and\ self.player.c_rope2 == 0 and self.player.c_vest2 == 0 and\ self.player.c_paddle2 == 0 and self.player.c_whisky2 == 0: # if self.timeout_happened and self.player.c_cover2 == self.player.c_cover and self.player.c_fuel2 == self.player.c_fuel and\ # self.player.c_lighter2 == self.player.c_lighter and self.player.c_knife2 == self.player.c_knife and\ # self.player.c_flare2 == self.player.c_flare and self.player.c_dinghy2 == self.player.c_dinghy and\ # self.player.c_rope2 == self.player.c_rope and self.player.c_vest2 == self.player.c_vest and\ # self.player.c_paddle2 == self.player.c_paddle and self.player.c_whisky2 == self.player.c_whisky: self.player.timeout_task2 = 1 self.player.participant.vars['is_dropout'] = True self.player.is_dropout = True self.player.score2 = 0 ## correct items cover = 1 - (1 - (self.player.c_cover2/100) ** 2) fuel = 1 - (1 - (self.player.c_fuel2/100) ** 2) lighter = 1 - (1 - (self.player.c_lighter2/100) ** 2) knife = 1 - (1 - (self.player.c_knife2/100) ** 2) rope = 1 - (1 - (self.player.c_rope2/100) ** 2) ## other items flare = 1 - (self.player.c_flare2/100) ** 2 dinghy = 1 - (self.player.c_dinghy2/100) ** 2 vest = 1 - (self.player.c_vest2/100) ** 2 paddle = 1 - (self.player.c_paddle2/100) ** 2 whisky = 1 - (self.player.c_whisky2/100) ** 2 score2 = round((flare + dinghy + lighter + vest + fuel + rope + cover + knife + paddle + whisky)*10, 2) self.player.score2 = score2 class belief2(Page): timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 120 form_model = 'player' form_fields = ['posterior'] def vars_for_template(self): return { 'prior': self.player.prior, } def before_next_page(self): if self.timeout_happened: self.player.participant.vars['is_dropout'] = True self.player.is_dropout = True #slides class slides_part2_1(Page): timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 120 class slides_part2_3(Page): timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 120 def vars_for_template(self): return {'treatment': self.group.treatment, 'bonus': Constants.bonus, 'time': round(Constants.time_chat/60),} class slides_part2_5(Page): timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 120 class slides_part2_6(Page): timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 120 def vars_for_template(self): return {'treatment': self.group.treatment, 'bonus': Constants.bonus, 'wage': Constants.w2,} class slides_part2_7(Page): timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 120 def vars_for_template(self): return {'treatment': self.group.treatment, 'bonus': Constants.bonus, 'time': round(Constants.time_chat/60),} #Comprehension Questionnaire class Q1(Page): timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 120 class Q2(Page): timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 120 class Q4(Page): timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 120 def is_displayed(self): return self.group.treatment == 1 def vars_for_template(self): return { 'bonus': Constants.bonus } class WaitGroupPage(WaitPage): wait_for_all_groups = False ####################### CHAT AND VOTES #################### class instruction_chat(Page): timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 180 def vars_for_template(self): return {'time': round(Constants.time_chat/60)} class ChatWait(WaitPage): wait_for_all_groups = False class Chat(Page): timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return Constants.time_chat form_model = 'player' form_fields = ['vote'] def vars_for_template(self): return {'id': self.player.id_in_group} class Vote(Page): timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 120 form_model = 'player' form_fields = ['vote'] def is_displayed(self): return self.player.vote == 0 def vars_for_template(self): return {'id': self.player.id_in_group} def before_next_page(self): if self.timeout_happened: self.player.vote = random.randint(1, 4) self.player.timeout_vote = 1 self.player.is_dropout = True self.player.participant.vars['is_dropout'] = True class LeaderWaitPage(WaitPage): timer_text = 'Time remaining on this page:' wait_for_all_groups = False def after_all_players_arrive(self): for p in self.group.get_players(): p.sum_vote = 0 if p.id_in_group == p.group.get_player_by_id(1).vote: p.sum_vote += 1 if p.id_in_group == p.group.get_player_by_id(2).vote: p.sum_vote += 1 if p.id_in_group == p.group.get_player_by_id(3).vote: p.sum_vote += 1 if p.id_in_group == p.group.get_player_by_id(4).vote: p.sum_vote += 1 for p in self.group.get_players(): if p.sum_vote == max([p.sum_vote for p in self.group.get_players()]): p.lead = 1 if sum([p.lead for p in self.group.get_players()]) > 1: for p in self.group.get_players(): p.votefail = 1 else: for p in self.group.get_players(): p.votefail = 0 p.leader = p.lead #### SECOND ROUND class VoteFail(Page): timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.votefail == 1 class ChatRepeat(Page): timer_text = 'Time remaining on this page:' def is_displayed(self): return self.player.votefail == 1 form_model = 'player' form_fields = ['vote2'] def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 120 def vars_for_template(self): return {'id': self.player.id_in_group} class VoteRepeat(Page): timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 120 form_model = 'player' form_fields = ['vote2'] def is_displayed(self): return self.player.vote2 == 0 and self.player.votefail == 1 def vars_for_template(self): return {'id': self.player.id_in_group} def before_next_page(self): if self.timeout_happened: self.player.vote2 = random.randint(1, 4) self.player.timeout_vote2 = 1 self.player.is_dropout = True self.player.participant.vars['is_dropout'] = True class LeaderWaitPage2(WaitPage): wait_for_all_groups = False def after_all_players_arrive(self): for p in self.group.get_players(): if p.votefail == 1: if p.id_in_group == p.group.get_player_by_id(1).vote2: p.sum_vote2 += 1 if p.id_in_group == p.group.get_player_by_id(2).vote2: p.sum_vote2 += 1 if p.id_in_group == p.group.get_player_by_id(3).vote2: p.sum_vote2 += 1 if p.id_in_group == p.group.get_player_by_id(4).vote2: p.sum_vote2 += 1 for p in self.group.get_players(): if p.votefail == 1: if p.sum_vote2 == max([p.sum_vote2 for p in self.group.get_players()]): p.lead2 = 1 if sum([p.lead2 for p in self.group.get_players()]) > 1: potential_leader = [] for p in self.group.get_players(): if p.votefail == 1: if p.lead2 == 1: potential_leader.append(p.id_in_group) leader = random.choice(potential_leader) for p in self.group.get_players(): if p.votefail == 1: if p.id_in_group == leader: p.leader = 1 else: p.leader = 0 else: for p in self.group.get_players(): if p.votefail == 1: p.leader = p.lead2 class LeaderAssignement(Page): timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def vars_for_template(self): return {'leader': self.player.leader} ############################## LEADER DECISIONS ############################# class instruction_leader(Page): timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 300 def vars_for_template(self): return {'leader': self.player.leader} class Decision(Page): timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 300 form_model = 'group' form_fields = ['D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10'] def is_displayed(self): return self.player.role() == 'leader' def before_next_page(self): if self.timeout_happened: self.player.timeout_leader = 1 self.player.is_dropout = True self.player.participant.vars['is_dropout'] = True if self.group.D0 == "": self.group.D0 = 1 if self.group.D1 == "": self.group.D1 = 1 if self.group.D2 == "": self.group.D2 = 1 if self.group.D3 == "": self.group.D3 = 1 if self.group.D4 == "": self.group.D4 = 1 if self.group.D5 == "": self.group.D5 = 1 if self.group.D6 == "": self.group.D6 = 1 if self.group.D7 == "": self.group.D7 = 1 if self.group.D8 == "": self.group.D8 = 1 if self.group.D9 == "": self.group.D9 = 1 if self.group.D10 == "": self.group.D10 = 1 class EndPart2(Page): timer_text = 'Time remaining on this page:' def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 form_model = 'player' def before_next_page(self): self.player.D0 = self.group.D0 self.player.D1 = self.group.D1 self.player.D2 = self.group.D2 self.player.D3 = self.group.D3 self.player.D4 = self.group.D4 self.player.D5 = self.group.D5 self.player.D6 = self.group.D6 self.player.D7 = self.group.D7 self.player.D8 = self.group.D8 self.player.D9 = self.group.D9 self.player.D10 = self.group.D10 self.player.leader_score = self.group.get_player_by_role('leader').score self.player.leader_rank = self.group.get_player_by_role('leader').rank #self.player.rand = self.group.rand ######################## PAYOFFS ########################## class ResultsWaitPage(WaitPage): wait_for_all_groups = False def after_all_players_arrive(self): for p in self.group.get_players(): # players = p.get_others_in_group() # scores = [p.score for p in players] # sum_score = sum(scores) # print(sum_score) p.pay_leader_part1 = 0 p.pay_leader_part2 = 0 ##randomly select either part 1 or part 2 for payment rand_part = random.randint(1, 2) p.rand_part = rand_part if rand_part == 1: rand_acc = random.randint(0, 100) p.rand_acc = rand_acc if rand_acc <= p.prior: if p.rank == 1: p.pay_acc = 0.5 else: p.pay_acc = 0 else: p_lottery = random.randint(0, 100) # print(p_lottery) p.p_lottery = p_lottery if p_lottery <= rand_acc: p.pay_acc = 0.5 else: p.pay_acc = 0 p.pay_task = Constants.w1 * p.score else: rand_acc = random.randint(0, 100) p.rand_acc = rand_acc if rand_acc <= p.posterior: if p.rank == 1: p.pay_acc = 0.5 else: p.pay_acc = 0 else: p_lottery = random.randint(0, 100) # print(p_lottery) p.p_lottery = p_lottery if p_lottery <= rand_acc: p.pay_acc = 0.5 else: p.pay_acc = 0 p.pay_task = Constants.w1 * p.score2 p.pay_leader_part1 = Constants.w2 * p.leader_score #Leader decision #num_players = Constants.players_per_group p.rand = random.randint(0, 10) p.p3 = "D" + str(p.rand) if getattr(p, p.p3) == 1: p.pay_leader_part2 = p.rand/10 if getattr(p, p.p3) == 0: #if p.leader_rank <= num_players/3: if p.leader_rank == 1: p.pay_leader_part2 = 1 else: p.pay_leader_part2 = 0 # Final Payoffs if p.leader == 1 and self.group.treatment == 1: p.payoff = p.pay_acc + p.pay_task + p.pay_leader_part1 + p.pay_leader_part2 + Constants.bonus p.total_pay = p.pay_acc + p.pay_task + p.pay_leader_part1 + p.pay_leader_part2 + Constants.bonus + Constants.show_up else: p.payoff = (p.pay_acc + p.pay_task + p.pay_leader_part1 + p.pay_leader_part2) p.total_pay = p.pay_acc + p.pay_task + p.pay_leader_part1 + p.pay_leader_part2 + Constants.show_up class Demographics(Page): def is_displayed(self): return self.player.is_dropout is False form_model = 'player' form_fields = ['q_gender', 'q_age', 'q_english', 'q_risk', 'q_task_diff', 'q_clarity', 'q_other'] class Post_exp_Q(Page): def is_displayed(self): return self.player.is_dropout is False form_model = 'player' form_fields = ['q_voteleader'] def vars_for_template(self): if self.player.id_in_group == self.player.vote: x = 1 else: x = 0 return {'leader_id': self.player.vote, 'leader_id2': self.player.vote2, 'x': x, 'votefail': self.player.votefail, } class payoff(Page): def is_displayed(self): return self.player.role() == 'follower' and self.player.is_dropout is False def vars_for_template(self): return { 'payoff': round(self.player.payoff, 2), 'total_payoff': round(self.player.total_pay, 2), 'show_up': Constants.show_up, 'score': self.player.score, 'score2': self.player.score2, 'part': self.player.rand_part, 'pay_task': round(self.player.pay_task, 2), 'pay_acc': self.player.pay_acc, 'pay_leader_part1': self.player.pay_leader_part1, 'pay_leader_part2': self.player.pay_leader_part2, } class payoffLeader(Page): def is_displayed(self): return self.player.role() == 'leader' and self.player.is_dropout is False def vars_for_template(self): return { 'payoff': round(self.player.payoff, 2), 'total_payoff': round(self.player.total_pay, 2), 'show_up': Constants.show_up, 'score': self.player.score, 'score2': self.player.score2, 'pay_task': round(self.player.pay_task, 2), 'pay_acc': self.player.pay_acc, 'part': self.player.rand_part, 'pay_leader_part1': self.player.pay_leader_part1, 'pay_leader_part2': self.player.pay_leader_part2, 'bonus': Constants.bonus, 'treatment': self.group.treatment, } ####################### QUESTIONNAIRES ################ class AMS_lead(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 120 def is_displayed(self): return self.player.role() == 'leader' class AMS1_lead(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.role() == 'leader' form_model = 'player' form_fields = ['AMS1'] class AMS2_lead(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.role() == 'leader' form_model = 'player' form_fields = ['AMS2'] class AMS3_lead(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.role() == 'leader' form_model = 'player' form_fields = ['AMS3'] class AMS4_lead(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.role() == 'leader' form_model = 'player' form_fields = ['AMS4'] class AMS5_lead(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.role() == 'leader' form_model = 'player' form_fields = ['AMS5'] class AMS6_lead(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.role() == 'leader' form_model = 'player' form_fields = ['AMS6'] class AMS7_lead(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.role() == 'leader' form_model = 'player' form_fields = ['AMS7'] class AMS8_lead(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.role() == 'leader' form_model = 'player' form_fields = ['AMS8'] class AMS9_lead(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.role() == 'leader' form_model = 'player' form_fields = ['AMS9'] class AMS10_lead(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.role() == 'leader' form_model = 'player' form_fields = ['AMS10'] class AMS11_lead(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.role() == 'leader' form_model = 'player' form_fields = ['AMS11'] class AMS12_lead(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.role() == 'leader' form_model = 'player' form_fields = ['AMS12'] class AMS(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.role() == 'follower' class AMS1(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.role() == 'follower' form_model = 'player' form_fields = ['AMS1'] class AMS2(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.role() == 'follower' form_model = 'player' form_fields = ['AMS2'] class AMS3(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.role() == 'follower' form_model = 'player' form_fields = ['AMS3'] class AMS4(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.role() == 'follower' form_model = 'player' form_fields = ['AMS4'] class AMS5(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.role() == 'follower' form_model = 'player' form_fields = ['AMS5'] class AMS6(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.role() == 'follower' form_model = 'player' form_fields = ['AMS6'] class AMS7(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.role() == 'follower' form_model = 'player' form_fields = ['AMS7'] class AMS8(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.role() == 'follower' form_model = 'player' form_fields = ['AMS8'] class AMS9(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.role() == 'follower' form_model = 'player' form_fields = ['AMS9'] class AMS10(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.role() == 'follower' form_model = 'player' form_fields = ['AMS10'] class AMS11(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.role() == 'follower' form_model = 'player' form_fields = ['AMS11'] class AMS12(Page): def get_timeout_seconds(self): if self.player.is_dropout: return 1 # instant timeout, 1 second else: return 60 def is_displayed(self): return self.player.role() == 'follower' form_model = 'player' form_fields = ['AMS12'] page_sequence = [ StartWaitPage, MatchingFailWaitPage, MatchingFail, intro, intro_task, scenario, task_cam, RankingWaitPage, slides_part2_1, slides_part2_3, slides_part2_5, slides_part2_6, slides_part2_7, Q1, Q2, Q4, belief1, WaitGroupPage, InfoAcq, InfoAcq2_seq, InfoAcqDraws_seq, update_cam, belief2, WaitGroupPage, instruction_chat, ChatWait, Chat, Vote, LeaderWaitPage, VoteFail, WaitGroupPage, ChatRepeat, VoteRepeat, WaitGroupPage, LeaderWaitPage2, LeaderAssignement, instruction_leader, Decision, AMS, AMS1, AMS2, AMS3, AMS4, AMS5, AMS6, AMS7, AMS8, AMS9, AMS10, AMS11, AMS12, WaitGroupPage, EndPart2, ResultsWaitPage, AMS_lead, AMS1_lead, AMS2_lead, AMS3_lead, AMS4_lead, AMS5_lead, AMS6_lead, AMS7_lead, AMS8_lead, AMS9_lead, AMS10_lead, AMS11_lead, AMS12_lead, Post_exp_Q, Demographics, payoff, payoffLeader, ]