from otree.api import * c = cu doc = '\n' class C(BaseConstants): NAME_IN_URL = 'intro_and_ind' PLAYERS_PER_GROUP = 3 NUM_ROUNDS = 1 INSTRUCTIONS_TEMPLATE = 'intro_and_ind/instructions.html' class Subsession(BaseSubsession): pass def regroup(subsession: Subsession): session = subsession.session subsession.group_randomly() class Group(BaseGroup): group_1_choice_leader_player_3 = models.StringField() group_1_choice_player_2 = models.StringField() group_1_choice_player_1 = models.StringField() group_2_choice_leader_player_1 = models.StringField() group_2_choice_player_2 = models.StringField() group_2_choice_player_3 = models.StringField() group_3_choice_leader_player_3 = models.StringField() group_3_choice_player_1 = models.StringField() group_3_choice_player_2 = models.StringField() def get_leader_info_choice_1(group: Group): players = group.get_players() member_wagers = [p.group_member_choice_1 for p in players] group.group_1_choice_leader_player_3 = member_wagers[2] group.group_1_choice_player_1 = member_wagers[0] group.group_1_choice_player_2 = member_wagers[1] def get_leader_info_choice_2(group: Group): players = group.get_players() member_wagers2 = [p.group_member_choice_2 for p in players] group.group_2_choice_leader_player_1 = member_wagers2[0] group.group_2_choice_player_3 = member_wagers2[2] group.group_2_choice_player_2 = member_wagers2[1] def get_leader_info_choice_3(group: Group): players = group.get_players() member_wagers3 = [p.group_member_choice_3 for p in players] group.group_3_choice_leader_player_3 = member_wagers3[2] group.group_3_choice_player_1 = member_wagers3[0] group.group_3_choice_player_2 = member_wagers3[1] class Player(BasePlayer): practice_choice_1 = models.StringField(choices=[['a_black', 'Wager 1'], ['a_white', 'Wager 2']], widget=widgets.RadioSelect) practice_choice_2 = models.StringField(choices=[['a_white', 'Wager 1'], ['b_red', 'Wager 2']], widget=widgets.RadioSelect) ind_setting = models.IntegerField() ind_choice_1 = models.StringField(choices=[['w1', 'Wager 1'], ['w2', 'Wager 2']], label='Choice 1', widget=widgets.RadioSelect) ind_choice_2 = models.StringField(choices=[['w1', 'Wager 1'], ['w2', 'Wager 2']], label='Choice 2', widget=widgets.RadioSelect) ind_choice_3 = models.StringField(choices=[['w1', 'Wager 1'], ['w2', 'Wager 2']], label='Choice 3', widget=widgets.RadioSelect) group_member_choice_1 = models.StringField(choices=[['a_black', 'Wager 1'], ['b_red', 'Wager 2']], label='Choice 1', widget=widgets.RadioSelect) group_leader_choice_1 = models.StringField() group_member_choice_2 = models.StringField(choices=[['a_white', 'Wager 1'], ['b_red', 'Wager 2']], label='Choice 2', widget=widgets.RadioSelect) group_leader_choice_2 = models.StringField() group_member_choice_3 = models.StringField(choices=[['b_red', 'Wager 1'], ['b_blue', 'Wager 2']], label='Choice 3', widget=widgets.RadioSelect) group_leader_choice_3 = models.StringField() name = models.StringField() ind_payoff_wager = models.StringField() group_payoff_wager = models.StringField() ind_wager_1 = models.StringField() ind_wager_2 = models.StringField() ind_wager_3 = models.StringField() ind_wager_1_long = models.LongStringField() ind_wager_2_long = models.LongStringField() ind_wager_3_long = models.LongStringField() group_1_id_in_group = models.IntegerField() group_2_id_in_group = models.IntegerField() group_3_id_in_group = models.IntegerField() group_1_group_number = models.IntegerField() group_2_group_number = models.IntegerField() group_3_group_number = models.IntegerField() payoff_dollars = models.IntegerField(initial=0) class GetName(Page): form_model = 'player' form_fields = ['name'] class Instructions_1(Page): form_model = 'player' @staticmethod def before_next_page(player: Player, timeout_happened): session = player.session participant = player.participant player.ind_setting = participant.id_in_session % 3 + 2 class Instructions_2(Page): form_model = 'player' class Practice_Intro(Page): form_model = 'player' class Practice_1(Page): form_model = 'player' form_fields = ['practice_choice_1'] class Practice_1_results(Page): form_model = 'player' class Practice_2(Page): form_model = 'player' form_fields = ['practice_choice_2'] class Practice_2_results(Page): form_model = 'player' class Ind_Intro(Page): form_model = 'player' @staticmethod def before_next_page(player: Player, timeout_happened): pass class Ind_1(Page): form_model = 'player' form_fields = ['ind_choice_1'] @staticmethod def before_next_page(player: Player, timeout_happened): if player.ind_setting == 2: if player.ind_choice_1 == "w1": player.ind_wager_1 = "a_white" else: player.ind_wager_1 = "b_red" elif player.ind_setting == 3: if player.ind_choice_1 == "w1": player.ind_wager_1 = "a_black" else: player.ind_wager_1 = "b_blue" else: if player.ind_choice_1 == "w1": player.ind_wager_1 = "a_white" else: player.ind_wager_1 = "b_blue" class Ind_2(Page): form_model = 'player' form_fields = ['ind_choice_2'] @staticmethod def before_next_page(player: Player, timeout_happened): if player.ind_setting == 2: if player.ind_choice_2 == "w1": player.ind_wager_2 = "a_black" else: player.ind_wager_2 = "b_red" elif player.ind_setting == 3: if player.ind_choice_2 == "w1": player.ind_wager_2 = "a_white" else: player.ind_wager_2 = "b_blue" else: if player.ind_choice_2 == "w1": player.ind_wager_2 = "a_black" else: player.ind_wager_2 = "b_blue" class Ind_3(Page): form_model = 'player' form_fields = ['ind_choice_3'] @staticmethod def before_next_page(player: Player, timeout_happened): if player.ind_setting == 2: if player.ind_choice_3 == "w1": player.ind_wager_3 = "b_red" else: player.ind_wager_3 = "b_blue" else: if player.ind_choice_3 == "w1": player.ind_wager_3 = "b_blue" else: player.ind_wager_3 = "b_red" class WaitBeforeStartingGroupTreatment(WaitPage): wait_for_all_groups = True body_text = 'This is the end of the first part of the experiment. The next part will begin once all players have finished the first part.' class Group_Intro(Page): form_model = 'player' class Group_1(Page): form_model = 'player' form_fields = ['group_member_choice_1'] @staticmethod def before_next_page(player: Player, timeout_happened): session = player.session subsession = player.subsession group = player.group player.group_1_id_in_group = player.id_in_group player.group_1_group_number = group.id_in_subsession class Group_1_wait(WaitPage): after_all_players_arrive = get_leader_info_choice_1 class Group_1_results(Page): form_model = 'player' @staticmethod def before_next_page(player: Player, timeout_happened): group = player.group player.group_leader_choice_1 = group.group_1_choice_leader_player_3 class ReshuffleTeams(WaitPage): wait_for_all_groups = True after_all_players_arrive = regroup body_text = 'Once all of the groups reach this step, new groups will be selected.' class Group_2(Page): form_model = 'player' form_fields = ['group_member_choice_2'] @staticmethod def before_next_page(player: Player, timeout_happened): session = player.session subsession = player.subsession group = player.group player.group_2_id_in_group = player.id_in_group player.group_2_group_number = group.id_in_subsession class Group_2_wait(WaitPage): after_all_players_arrive = get_leader_info_choice_2 class Group_2_results(Page): form_model = 'player' @staticmethod def before_next_page(player: Player, timeout_happened): group = player.group player.group_leader_choice_2 = group.group_2_choice_leader_player_1 class ReshuffleTeams2(WaitPage): wait_for_all_groups = True after_all_players_arrive = regroup body_text = 'Once all of the groups reach this step, new groups will be selected.' class Group_3(Page): form_model = 'player' form_fields = ['group_member_choice_3'] @staticmethod def before_next_page(player: Player, timeout_happened): session = player.session subsession = player.subsession group = player.group player.group_3_id_in_group = player.id_in_group player.group_3_group_number = group.id_in_subsession class Group_3_wait(WaitPage): after_all_players_arrive = get_leader_info_choice_3 class Group_3_results(Page): form_model = 'player' @staticmethod def before_next_page(player: Player, timeout_happened): group = player.group player.group_leader_choice_3 = group.group_3_choice_leader_player_3 class Payoff_Intro(Page): form_model = 'player' class Ind_Reminder(Page): form_model = 'player' class IndDrawWait(Page): form_model = 'player' class Ind_Draw_results(Page): form_model = 'player' @staticmethod def before_next_page(player: Player, timeout_happened): session = player.session if(session.ind_incentive_index == 1): player.ind_payoff_wager = player.ind_wager_1 elif(session.ind_incentive_index == 2): player.ind_payoff_wager = player.ind_wager_2 else: player.ind_payoff_wager = player.ind_wager_3 class Ind_Draw_results2(Page): form_model = 'player' @staticmethod def before_next_page(player: Player, timeout_happened): session = player.session if(player.ind_payoff_wager == session.ind_draw_A or player.ind_payoff_wager == session.ind_draw_B): player.payoff_dollars += 10 class Group_Reminder(Page): form_model = 'player' class GroupDrawWait(Page): form_model = 'player' class Group_Draw_results(Page): form_model = 'player' @staticmethod def before_next_page(player: Player, timeout_happened): session = player.session group = player.group if(session.group_incentive_index == 1): player.group_payoff_wager = player.group_leader_choice_1 elif(session.ind_incentive_index == 2): player.group_payoff_wager = player.group_leader_choice_2 else: player.group_payoff_wager = player.group_leader_choice_3 class Group_Draw_results2(Page): form_model = 'player' @staticmethod def before_next_page(player: Player, timeout_happened): session = player.session group = player.group if(player.group_payoff_wager == session.group_draw_A or player.group_payoff_wager == session.group_draw_B): player.payoff_dollars += 10 class End(Page): form_model = 'player' page_sequence = [GetName, Instructions_1, Instructions_2, Practice_Intro, Practice_1, Practice_1_results, Practice_2, Practice_2_results, Ind_Intro, Ind_1, Ind_2, Ind_3, WaitBeforeStartingGroupTreatment, Group_Intro, Group_1, Group_1_wait, Group_1_results, ReshuffleTeams, Group_2, Group_2_wait, Group_2_results, ReshuffleTeams2, Group_3, Group_3_wait, Group_3_results, Payoff_Intro, Ind_Reminder, IndDrawWait, Ind_Draw_results, Ind_Draw_results2, Group_Reminder, GroupDrawWait, Group_Draw_results, Group_Draw_results2, End]