from otree.api import * import random doc = """ Your app description """ class C(BaseConstants): NAME_IN_URL = 'CM_trial' PLAYERS_PER_GROUP = 2 # CHANGE TO 10 NUM_ROUNDS = 1 # Price levels (check how to put them in list and draw from it) level1 = 4 level2 = 4.5 level3 = 5 level4 = 5.5 level5 = 6 # Probabilities prob_l = 60 prob_m = 75 prob_h = 90 # Quadratic scoring rules quadratic_score_A = 2 quadratic_score_B = 2 prob_replace_l = 60 prob_replace_m = 75 prob_replace_h = 90 prob_not_replace_l = 100 - prob_replace_l prob_not_replace_m = 100 - prob_replace_m prob_not_replace_h = 100 - prob_replace_h # Number of task tasks = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'] num_CE = len(tasks) # payoff frequency method payoff_fr = 4 class Subsession(BaseSubsession): pass def creating_session(subsession: Subsession): if subsession.round_number == 1: # CHECK IF YOU NEED PLAYERS_PER_GROUP OR SUBSESSION.SESSION.NUM_PARTICIPANTS (as in the original) subsession.session.other_part = subsession.session.num_participants - 1 subsession.session.random_prediction_A = random.randint(0, subsession.session.num_participants - 1) # Are these used anywhere? if subsession.session.random_prediction_A < (subsession.session.num_participants - 1): subsession.session.random_prediction_B = \ random.randint(0, subsession.session.num_participants - 1 - subsession.session.random_prediction_A) else: subsession.session.random_prediction_B = 0 subsession.session.random_prediction_C = \ subsession.session.num_participants - 1 - subsession.session.random_prediction_A - \ subsession.session.random_prediction_B subsession.session.random_prediction_A_2 = \ random.randint(int(round((subsession.session.num_participants - 1) * 0.2, 0)), int(round((subsession.session.num_participants - 1) * 0.4, 0))) subsession.session.random_prediction_B_2 = \ random.randint(int(round((subsession.session.num_participants - 1) * 0.2, 0)), (int(round((subsession.session.num_participants - 1) * 0.4, 0)))) subsession.session.random_prediction_C_2 = \ subsession.session.num_participants - 1 - subsession.session.random_prediction_A_2 - \ subsession.session.random_prediction_B_2 if subsession.session.random_prediction_C_2 < 0: subsession.session.random_prediction_C_2 = 0 list_choices_A_temp = " ".join(['A'] * subsession.session.random_prediction_A_2) list_choices_B_temp = " ".join(['B'] * subsession.session.random_prediction_B_2) list_choices_C_temp = " ".join(['C'] * subsession.session.random_prediction_C_2) # DEBUG CHECK # print(subsession.session.random_prediction_A_2, list_choices_A_temp, # subsession.session.random_prediction_B_2, list_choices_B_temp, # subsession.session.random_prediction_C_2, list_choices_C_temp) choices_str = list_choices_A_temp + ' ' + list_choices_B_temp + ' ' + list_choices_C_temp list_choices = choices_str.split() # Random draw from list of randomly drawn choices subsession.session.chosen_letter_2 = random.choice(list_choices) listA_2 = [] # List of matches rnd = random.sample(list(range(1, subsession.session.num_participants)), subsession.session.num_participants - 1) example_prediction_selected_A = [] example_prediction_selected_B = [] example_prediction_selected_C = [] for i in range(0, subsession.session.num_participants - 1): n_t = int(rnd[i]) if i == subsession.session.random_prediction_A_2 - 1: n = str(n_t) + "." else: n = str(n_t) + "," listA_2.append(n) example_prediction_selected_A_temp = random.randint( int(round((subsession.session.num_participants - 1) * 0.2, 0)), int(round((subsession.session.num_participants - 1) * 0.7, 0))) example_prediction_selected_B_temp = random.randint( int(round((subsession.session.num_participants - 1) * 0.2, 0)), int(round((subsession.session.num_participants - 1) * 0.7, 0))) if example_prediction_selected_A_temp + \ example_prediction_selected_B_temp >= subsession.session.num_participants - 1: example_prediction_selected_B_temp = \ subsession.session.num_participants - 1 - example_prediction_selected_A_temp example_prediction_selected_C_temp = 0 else: example_prediction_selected_C_temp = \ subsession.session.num_participants - 1 - example_prediction_selected_A_temp - \ example_prediction_selected_B_temp example_prediction_selected_A.append(example_prediction_selected_A_temp) example_prediction_selected_B.append(example_prediction_selected_B_temp) example_prediction_selected_C.append(example_prediction_selected_C_temp) # indent changed from here subsession.session.example_prediction_selected_A = example_prediction_selected_A subsession.session.example_prediction_selected_B = example_prediction_selected_B subsession.session.example_prediction_selected_C = example_prediction_selected_C subsession.session.listA_2 = listA_2 example_prediction_selected_A_temp = random.randint( int(round((subsession.session.num_participants - 1) * 0.2, 0)), int(round((subsession.session.num_participants - 1) * 0.7, 0))) example_prediction_selected_B_temp = random.randint( int(round((subsession.session.num_participants - 1) * 0.2, 0)), (int(round((subsession.session.num_participants - 1) * 0.7, 0)))) if example_prediction_selected_B_temp + example_prediction_selected_A_temp >= \ subsession.session.num_participants - 1: example_prediction_selected_B_temp = subsession.session.num_participants - 1 - \ example_prediction_selected_A_temp example_prediction_selected_C_temp = 0 else: example_prediction_selected_C_temp = \ subsession.session.num_participants - 1 - example_prediction_selected_A_temp - \ example_prediction_selected_B_temp example_prediction_selected_A.append(example_prediction_selected_A_temp) example_prediction_selected_B.append(example_prediction_selected_B_temp) example_prediction_selected_C.append(example_prediction_selected_C_temp) subsession.session.example_prediction_A = random.randint( int(round((subsession.session.num_participants - 1) * 0.2, 0)), int(round((subsession.session.num_participants - 1) * 0.7, 0))) subsession.session.example_prediction_B = random.randint( int(round((subsession.session.num_participants - 1) * 0.2, 0)), (int(round((subsession.session.num_participants - 1) * 0.7, 0)))) if subsession.session.example_prediction_B + subsession.session.example_prediction_A >= \ subsession.session.num_participants - 1: subsession.session.example_prediction_B = subsession.session.num_participants - 1 - \ subsession.session.example_prediction_A subsession.session.example_prediction_C = 0 else: subsession.session.example_prediction_C = \ subsession.session.num_participants - 1 - subsession.session.example_prediction_A - \ subsession.session.example_prediction_B Pred_A_temp = subsession.session.example_prediction_A / (subsession.session.num_participants - 1) Pred_B_temp = subsession.session.example_prediction_B / (subsession.session.num_participants - 1) Pred_C_temp = subsession.session.example_prediction_C / (subsession.session.num_participants - 1) factor1_temp = Pred_A_temp * Pred_A_temp + Pred_B_temp * Pred_B_temp + Pred_C_temp * Pred_C_temp subsession.session.example_prediction_payoff_A = round( C.quadratic_score_A + C.quadratic_score_B * (2 * Pred_A_temp - factor1_temp), 1) subsession.session.example_prediction_payoff_B = round( C.quadratic_score_A + C.quadratic_score_B * (2 * Pred_B_temp - factor1_temp), 1) subsession.session.example_prediction_payoff_C = round( C.quadratic_score_A + C.quadratic_score_B * (2 * Pred_C_temp - factor1_temp), 1) subsession.session.player_temp_AB_ = [1] * (C.num_CE + 1) subsession.session.player_temp_AB_[0] = random.randint(1, 2) for i in range(0, (C.num_CE + 1)): subsession.session.player_temp_AB_[i] = random.randint(1, 2) for p in subsession.get_players(): # what is contador? p.participant.contador = 1 p.participant.player_temp_AB = subsession.session.player_temp_AB_ # CHANGED FROM ORIGINAL p.participant.num_players = C.PLAYERS_PER_GROUP p.participant.group_pre_A = 0 p.participant.group_pre_B = 0 p.participant.group_pre_C = 0 p.participant.group_elec = 0 p.participant.random_choice = 0 p.participant.Test_choices_A = \ random.randint(0, subsession.session.other_part) p.participant.Test_choices_B = \ random.randint(0, subsession.session.other_part - p.participant.Test_choices_A) p.participant.Test_choices_C = \ subsession.session.other_part - p.participant.Test_choices_B - p.participant.Test_choices_A p.participant.Test_choices_A_pred = \ round(random.random() * subsession.session.other_part, 1) p.participant.Test_choices_B_pred = \ round(random.random() * (subsession.session.other_part - p.participant.Test_choices_A_pred), 1) p.participant.Test_choices_C_pred = \ subsession.session.other_part - p.participant.Test_choices_A_pred - p.participant.Test_choices_B_pred Pred_A = p.participant.Test_choices_A_pred / subsession.session.other_part Pred_B = p.participant.Test_choices_B_pred / subsession.session.other_part Pred_C = p.participant.Test_choices_C_pred / subsession.session.other_part factor1 = Pred_A * Pred_A + Pred_B * Pred_B + Pred_C * Pred_C p.participant.Test_payoff_a_pred = round(C.quadratic_score_A + C.quadratic_score_B * (2 * Pred_A - factor1), 1) p.participant.Test_payoff_b_pred = round(C.quadratic_score_A + C.quadratic_score_B * (2 * Pred_B - factor1), 1) p.participant.Test_payoff_c_pred = round(C.quadratic_score_A + C.quadratic_score_B * (2 * Pred_C - factor1), 1) p.participant.num_prob_replace = 1 p.participant.num_prob_not_replace = 1 p.participant.num_Test_choices_A_prob = 1 p.participant.num_Test_choices_B_prob = 1 p.participant.num_Test_choices_C_prob = 1 p.participant.num_payoff_A_guess = 1 p.participant.num_payoff_B_guess = 1 p.participant.num_payoff_C_guess = 1 p.participant.num_Test_choices_A_pred = 1 p.participant.num_Test_choices_B_pred = 1 p.participant.num_Test_choices_C_pred = 1 p.participant.num_Test_payoff_a_pred = 1 p.participant.num_Test_payoff_b_pred = 1 p.participant.num_Test_payoff_c_pred = 1 random_num = random.random() if p.participant.treatment_p == 3 or p.participant.treatment_p == 6: if random_num <= (C.prob_replace_l * 0.01): replace_pred = 1 else: replace_pred = 0 else: if p.participant.treatment_p == 4 or p.participant.treatment_p == 7 or p.participant.treatment_p == 9: if random_num <= (C.prob_replace_m * 0.01): replace_pred = 1 else: replace_pred = 0 else: if random_num <= (C.prob_replace_h * 0.01): replace_pred = 1 else: replace_pred = 0 p.participant.replace_predictions_practice = replace_pred for w in subsession.get_groups(): w.binding_sit = random.randint(1, subsession.session.num_participants) class Group(BaseGroup): binding_sit = models.IntegerField(initial=0) sum_binding_sit_1_practice = models.IntegerField(initial=0) sum_binding_sit_2_practice = models.IntegerField(initial=0) sum_binding_sit_3_practice = models.IntegerField(initial=0) id_player_groupA_practice = models.StringField(initial='') id_player_groupB_practice = models.StringField(initial='') id_player_groupC_practice = models.StringField(initial='') list_pred_A_A_practice = models.StringField(initial='') list_pred_A_B_practice = models.StringField(initial='') list_pred_A_C_practice = models.StringField(initial='') list_pred_B_A_practice = models.StringField(initial='') list_pred_B_B_practice = models.StringField(initial='') list_pred_B_C_practice = models.StringField(initial='') list_pred_C_A_practice = models.StringField(initial='') list_pred_C_B_practice = models.StringField(initial='') list_pred_C_C_practice = models.StringField(initial='') list_aux_A_A_practice = models.StringField(initial='') list_aux_A_B_practice = models.StringField(initial='') list_aux_A_C_practice = models.StringField(initial='') list_aux_B_A_practice = models.StringField(initial='') list_aux_B_B_practice = models.StringField(initial='') list_aux_B_C_practice = models.StringField(initial='') list_aux_C_A_practice = models.StringField(initial='') list_aux_C_B_practice = models.StringField(initial='') list_aux_C_C_practice = models.StringField(initial='') class Player(BasePlayer): # Bottle choice CE_choice_practice_aux = models.IntegerField( choices=[[1, "A"], [2, "B"], [3, "Nessun"]], label="Practice Choice situation", widget=widgets.RadioSelect, blank=False, ) def make_field_prediction(label): return models.IntegerField( label=label, min=0, default=0, ) #For T9 this means auxilliary question answers CE_choice_practice_pred_A = models.IntegerField() CE_choice_practice_pred_B = models.IntegerField() CE_choice_practice_pred_C = models.IntegerField() payoff_practice_A = models.CurrencyField() payoff_practice_B = models.CurrencyField() payoff_practice_C = models.CurrencyField() list_choices_A_practice = models.StringField(initial='') list_choices_B_practice = models.StringField(initial='') list_choices_C_practice = models.StringField(initial='') frequency_prediction = models.BooleanField() Test_1a = models.IntegerField( choices=[[0, "60%"], [1, "40%"], [2, "50%"]], widget=widgets.RadioSelectHorizontal, label="Qual’è la probabilità con cui vengono sostituite le tue " "previsioni nella parte 2?", ) Test_1b = models.IntegerField( choices=[[0, "75%"], [1, "25%"], [2, "50%"]], widget=widgets.RadioSelectHorizontal, label="Qual’è la probabilità con cui vengono sostituite le tue " "previsioni nella parte 2?", ) Test_1c = models.IntegerField( choices=[[0, "90%"], [1, "10%"], [2, "50%"]], widget=widgets.RadioSelectHorizontal, label="Qual’è la probabilità con cui vengono sostituite le tue " "previsioni nella parte 2?", ) Test_2 = models.IntegerField( choices=[[0, "Vero"], [1, "Falso"], [2, "Non ricordo"]], widget=widgets.RadioSelectHorizontal, label="Nelle istruzioni appena fornite, vi informiamo che i partecipanti che scelgono la stessa alternativa nella parte 1, " "forniscono delle previsioni molto simili nella parte 2?" ) Test_3 = models.IntegerField( choices=[[0, "Vero"], [1, "Falso"], [2, "Non saprei"]], widget=widgets.RadioSelectHorizontal, label="Se esprimo le mie scelte sinceramente e facendo molta attenzione nella parte 1, il compenso " "aggiuntivo che posso ottenere nella parte 2 dipende solo dalle mie previsioni?", ) def Test_1a_error_message(player, value): if value > 0: return 'La risposta corretta è: La probabilità con cui le tue previsioni vengono sostituite è 60%' def Test_1b_error_message(player, value): if value > 0: return 'La risposta corretta è: La probabilità con cui le tue previsioni vengono sostituite è 75%' def Test_1c_error_message(player, value): if value > 0: return 'La risposta corretta è: La probabilità con cui le tue previsioni vengono sostituite è 90%' def Test_2_error_message(player, value): if value > 0: return 'La risposta corretta è: Vero vi informiamo che i partecipanti che compiono le stesse scelte nella ' \ 'parte 1, forniscono delle previsioni molto simili nella parte 2' def Test_3_error_message(player, value): if value > 0: return 'La risposta corretta è: Vero se esprimi le tue scelte sinceramente e facendo molta attenzione nella ' \ 'parte 1, il compenso aggiuntivo che posso ottenere nella parte 2 dipende solo dalle mie ' \ 'previsioni' ##################################################################################################################### ######################################## PAGES ###################################################################### ##################################################################################################################### class InstrWaitPage(WaitPage): group_by_arrival_time = True @staticmethod def is_displayed(player): return player.round_number == 1 title_text = "Ti chiediamo gentilmente di attenderre" body_text = "Attendi che tutti partecipanti abbiano completato la Fase 1" # Instructions for trial round structure # class Trial_1(Page): # def is_displayed(player: Player): # return player.participant.treatment_p > 2 # Trial task 1: mug choice # class Trial_2(Page): # def is_displayed(player: Player): # return player.participant.treatment_p == 3 or player.participant.treatment_p == 4 \ # or player.participant.treatment_p == 5 or player.participant.treatment_p == 6 \ # or player.participant.treatment_p == 7 or player.participant.treatment_p == 8 \ # or player.participant.treatment_p == 9 # # form_model = 'player' # form_fields = ['CE_choice_practice'] # Trial task 2: predictions (T3-T5) class Trial_3(Page): def is_displayed(player: Player): return player.participant.treatment_p == 3 or player.participant.treatment_p == 4 \ or player.participant.treatment_p == 5 form_model = 'player' form_fields = ['CE_choice_practice_pred_A', 'CE_choice_practice_pred_B', 'CE_choice_practice_pred_C'] @staticmethod def live_method(player: Player, data): if data['clicked_button'] == 1: a = float(data['fieldA']) / (C.PLAYERS_PER_GROUP - 1) b = float(data['fieldB']) / (C.PLAYERS_PER_GROUP - 1) c = float(data['fieldC']) / (C.PLAYERS_PER_GROUP - 1) factor1 = a * a + b * b + c * c payoff_a = round(C.quadratic_score_A + C.quadratic_score_B * (2 * a - factor1), 1) payoff_b = round(C.quadratic_score_A + C.quadratic_score_B * (2 * b - factor1), 1) payoff_c = round(C.quadratic_score_A + C.quadratic_score_B * (2 * c - factor1), 1) response = dict(payoff_a=payoff_a, payoff_b=payoff_b, payoff_c=payoff_c) player.payoff_practice_A = payoff_a player.payoff_practice_B = payoff_b player.payoff_practice_C = payoff_c return {player.id_in_group: response} # Passing data from Python to JavaScript (js_vars) @staticmethod def js_vars(player): return dict(number_players=C.PLAYERS_PER_GROUP, tempA=0, tempB=0, tempC=0) @staticmethod def error_message(player, values): if values['CE_choice_practice_pred_A'] + values['CE_choice_practice_pred_B'] + values[ 'CE_choice_practice_pred_C'] != ( C.PLAYERS_PER_GROUP - 1): return 'La somma delle predizioni deve essere uguale a ' + str(C.PLAYERS_PER_GROUP - 1) @staticmethod def vars_for_template(player): cost_2 = str(C.level2) cost_1 = str(C.level1) return dict(costs1=cost_1, costs2=cost_2, group_size=C.PLAYERS_PER_GROUP - 1) # Trial task 2: predictions (T3-T5) class Trial_3_fr(Page): def is_displayed(player: Player): return player.participant.treatment_p == 6 or player.participant.treatment_p == 7 \ or player.participant.treatment_p == 8 form_model = 'player' form_fields = ['CE_choice_practice_pred_A', 'CE_choice_practice_pred_B', 'CE_choice_practice_pred_C'] # Passing data from Python to JavaScript (js_vars) @staticmethod def js_vars(player): return dict(number_players=C.PLAYERS_PER_GROUP, tempA=0, tempB=0, tempC=0) @staticmethod def error_message(player, values): if values['CE_choice_practice_pred_A'] + values['CE_choice_practice_pred_B'] + values[ 'CE_choice_practice_pred_C'] != ( C.PLAYERS_PER_GROUP - 1): return 'La somma delle predizioni deve essere uguale a ' + str(C.PLAYERS_PER_GROUP - 1) @staticmethod def vars_for_template(player): cost_2 = str(C.level2) cost_1 = str(C.level1) return dict(costs1=cost_1, costs2=cost_2, group_size=C.PLAYERS_PER_GROUP - 1) # Trial task 2: auxilliary choice (T9) class Trial_3_aux(Page): def is_displayed(player: Player): return player.participant.treatment_p == 9 form_model = 'player' form_fields = ['CE_choice_practice_aux'] # Waiting page class Wait_practice_test(WaitPage): def is_displayed(player: Player): return player.participant.treatment_p == 3 or player.participant.treatment_p == 4 \ or player.participant.treatment_p == 5 or player.participant.treatment_p == 6 \ or player.participant.treatment_p == 7 or player.participant.treatment_p == 8 title_text = "Ti chiediamo gentilmente di attendere" body_text = "Attendi che tutti i partecipanti abbiano completato la parte 1" def after_all_players_arrive(group: Group): for p in group.in_round(1).get_players(): # Number of p choosing option X group.sum_binding_sit_1_practice = p.participant.CE_choice_practice * ( p.participant.CE_choice_practice == 1) + group.sum_binding_sit_1_practice group.sum_binding_sit_2_practice = int( p.participant.CE_choice_practice * (p.participant.CE_choice_practice == 2) / 2) + group.sum_binding_sit_2_practice group.sum_binding_sit_3_practice = int( p.participant.CE_choice_practice * (p.participant.CE_choice_practice == 3) / 3) + group.sum_binding_sit_3_practice # List of p ID's who chose option X group.id_player_groupA_practice = str(p.id_in_group) * ( p.participant.CE_choice_practice == 1) + ',' + group.id_player_groupA_practice group.id_player_groupB_practice = str(p.id_in_group) * ( p.participant.CE_choice_practice == 2) + ',' + group.id_player_groupB_practice group.id_player_groupC_practice = str(p.id_in_group) * ( p.participant.CE_choice_practice == 3) + ',' + group.id_player_groupC_practice # List of predictions for option X by those who chose A group.list_pred_A_A_practice = str(p.CE_choice_practice_pred_A) * ( p.participant.CE_choice_practice == 1) + ',' + group.list_pred_A_A_practice group.list_pred_A_B_practice = str(p.CE_choice_practice_pred_B) * ( p.participant.CE_choice_practice == 1) + ',' + group.list_pred_A_B_practice group.list_pred_A_C_practice = str(p.CE_choice_practice_pred_C) * ( p.participant.CE_choice_practice == 1) + ',' + group.list_pred_A_C_practice # List of predictions for option X by those who chose B group.list_pred_B_A_practice = str(p.CE_choice_practice_pred_A) * ( p.participant.CE_choice_practice == 2) + ',' + group.list_pred_B_A_practice group.list_pred_B_B_practice = str(p.CE_choice_practice_pred_B) * ( p.participant.CE_choice_practice == 2) + ',' + group.list_pred_B_B_practice group.list_pred_B_C_practice = str(p.CE_choice_practice_pred_C) * ( p.participant.CE_choice_practice == 2) + ',' + group.list_pred_B_C_practice # List of predictions for option X by those who chose C group.list_pred_C_A_practice = str(p.CE_choice_practice_pred_A) * ( p.participant.CE_choice_practice == 3) + ',' + group.list_pred_C_A_practice group.list_pred_C_B_practice = str(p.CE_choice_practice_pred_B) * ( p.participant.CE_choice_practice == 3) + ',' + group.list_pred_C_B_practice group.list_pred_C_C_practice = str(p.CE_choice_practice_pred_C) * ( p.participant.CE_choice_practice == 3) + ',' + group.list_pred_C_C_practice for p in group.in_round(1).get_players(): if p.participant.CE_choice_practice == 1: # participants who chose option A p.list_choices_A_practice = " ".join(['A'] * (group.sum_binding_sit_1_practice - 1)) p.list_choices_B_practice = " ".join(['B'] * group.sum_binding_sit_2_practice) p.list_choices_C_practice = " ".join(['C'] * group.sum_binding_sit_3_practice) list_pred_A_A_practice_temp = group.list_pred_A_A_practice list_pred_A_B_practice_temp = group.list_pred_A_B_practice list_pred_A_C_practice_temp = group.list_pred_A_C_practice list_pred_A_A_practice_temp2 = list_pred_A_A_practice_temp.split(",") list_pred_A_B_practice_temp2 = list_pred_A_B_practice_temp.split(",") list_pred_A_C_practice_temp2 = list_pred_A_C_practice_temp.split(",") list_pred_A_A_practice_temp3 = [i for i in list_pred_A_A_practice_temp2 if i] list_pred_A_B_practice_temp3 = [i for i in list_pred_A_B_practice_temp2 if i] list_pred_A_C_practice_temp3 = [i for i in list_pred_A_C_practice_temp2 if i] temp_id_resto_temp_ = group.id_player_groupA_practice.split(",") temp_id_resto_temp_2 = [i for i in temp_id_resto_temp_ if i] index_remove = temp_id_resto_temp_2.index(str(p.id_in_group)) del list_pred_A_A_practice_temp3[index_remove] del list_pred_A_B_practice_temp3[index_remove] del list_pred_A_C_practice_temp3[index_remove] p.participant.group_list_pred_A_practice = list_pred_A_A_practice_temp3 p.participant.group_list_pred_B_practice = list_pred_A_B_practice_temp3 p.participant.group_list_pred_C_practice = list_pred_A_C_practice_temp3 temp_id_resto = group.id_player_groupA_practice.replace(str(p.id_in_group), "") temp_id_resto2 = temp_id_resto.split(",") p.participant.id_resto = [i for i in temp_id_resto2 if i] else: if p.participant.CE_choice_practice == 2: # participants who chose option B p.list_choices_A_practice = " ".join(['A'] * group.sum_binding_sit_1_practice) p.list_choices_B_practice = " ".join(['B'] * (group.sum_binding_sit_2_practice - 1)) p.list_choices_C_practice = " ".join(['C'] * group.sum_binding_sit_3_practice) list_pred_B_A_practice_temp = group.list_pred_B_A_practice list_pred_B_B_practice_temp = group.list_pred_B_B_practice list_pred_B_C_practice_temp = group.list_pred_B_C_practice list_pred_B_A_practice_temp2 = list_pred_B_A_practice_temp.split(",") list_pred_B_B_practice_temp2 = list_pred_B_B_practice_temp.split(",") list_pred_B_C_practice_temp2 = list_pred_B_C_practice_temp.split(",") list_pred_B_A_practice_temp3 = [i for i in list_pred_B_A_practice_temp2 if i] list_pred_B_B_practice_temp3 = [i for i in list_pred_B_B_practice_temp2 if i] list_pred_B_C_practice_temp3 = [i for i in list_pred_B_C_practice_temp2 if i] temp_id_resto_temp_ = group.id_player_groupB_practice.split(",") temp_id_resto_temp_2 = [i for i in temp_id_resto_temp_ if i] index_remove = temp_id_resto_temp_2.index(str(p.id_in_group)) del list_pred_B_A_practice_temp3[index_remove] del list_pred_B_B_practice_temp3[index_remove] del list_pred_B_C_practice_temp3[index_remove] p.participant.group_list_pred_A_practice = list_pred_B_A_practice_temp3 p.participant.group_list_pred_B_practice = list_pred_B_B_practice_temp3 p.participant.group_list_pred_C_practice = list_pred_B_C_practice_temp3 temp_id_resto = group.id_player_groupB_practice.replace(str(p.id_in_group), "") temp_id_resto2 = temp_id_resto.split(",") p.participant.id_resto = [i for i in temp_id_resto2 if i] else: # participants who chose option C p.list_choices_A_practice = " ".join(['A'] * group.sum_binding_sit_1_practice) p.list_choices_B_practice = " ".join(['B'] * group.sum_binding_sit_2_practice) p.list_choices_C_practice = " ".join(['C'] * (group.sum_binding_sit_3_practice - 1)) list_pred_C_A_practice_temp = group.list_pred_C_A_practice list_pred_C_B_practice_temp = group.list_pred_C_B_practice list_pred_C_C_practice_temp = group.list_pred_C_C_practice list_pred_C_A_practice_temp2 = list_pred_C_A_practice_temp.split(",") list_pred_C_B_practice_temp2 = list_pred_C_B_practice_temp.split(",") list_pred_C_C_practice_temp2 = list_pred_C_C_practice_temp.split(",") list_pred_C_A_practice_temp3 = [i for i in list_pred_C_A_practice_temp2 if i] list_pred_C_B_practice_temp3 = [i for i in list_pred_C_B_practice_temp2 if i] list_pred_C_C_practice_temp3 = [i for i in list_pred_C_C_practice_temp2 if i] temp_id_resto_temp_ = group.id_player_groupC_practice.split(",") temp_id_resto_temp_2 = [i for i in temp_id_resto_temp_ if i] index_remove = temp_id_resto_temp_2.index(str(p.id_in_group)) del list_pred_C_A_practice_temp3[index_remove] del list_pred_C_B_practice_temp3[index_remove] del list_pred_C_C_practice_temp3[index_remove] p.participant.group_list_pred_A_practice = list_pred_C_A_practice_temp3 p.participant.group_list_pred_B_practice = list_pred_C_B_practice_temp3 p.participant.group_list_pred_C_practice = list_pred_C_C_practice_temp3 temp_id_resto = group.id_player_groupC_practice.replace(str(p.id_in_group), "") temp_id_resto2 = temp_id_resto.split(",") p.participant.id_resto = [i for i in temp_id_resto2 if i] if p.participant.treatment_p == 6 or p.participant.treatment_p == 7 or p.participant.treatment_p == 8: nr_other_choice_A = p.list_choices_A_practice.count('A') nr_other_choice_B = p.list_choices_B_practice.count('B') nr_other_choice_C = p.list_choices_C_practice.count('C') if p.CE_choice_practice_pred_A == nr_other_choice_A \ and p.CE_choice_practice_pred_B == nr_other_choice_B \ and p.CE_choice_practice_pred_C == nr_other_choice_C: p.frequency_prediction = 1 else: p.frequency_prediction = 0 else: p.frequency_prediction = 0 class Wait_practice_test_aux(WaitPage): def is_displayed(player: Player): return player.participant.treatment_p == 9 title_text = "Ti chiediamo gentilmente di attendere" body_text = "Attendi che tutti i partecipanti abbiano completato la parte 1" def after_all_players_arrive(group: Group): for p in group.in_round(1).get_players(): # Number of p choosing option X group.sum_binding_sit_1_practice = p.participant.CE_choice_practice * ( p.participant.CE_choice_practice == 1) + group.sum_binding_sit_1_practice group.sum_binding_sit_2_practice = int( p.participant.CE_choice_practice * (p.participant.CE_choice_practice == 2) / 2) + group.sum_binding_sit_2_practice group.sum_binding_sit_3_practice = int( p.participant.CE_choice_practice * (p.participant.CE_choice_practice == 3) / 3) + group.sum_binding_sit_3_practice # List of p ID's who chose option X group.id_player_groupA_practice = str(p.id_in_group) * ( p.participant.CE_choice_practice == 1) + ',' + group.id_player_groupA_practice group.id_player_groupB_practice = str(p.id_in_group) * ( p.participant.CE_choice_practice == 2) + ',' + group.id_player_groupB_practice group.id_player_groupC_practice = str(p.id_in_group) * ( p.participant.CE_choice_practice == 3) + ',' + group.id_player_groupC_practice if p.CE_choice_practice_aux == 1: p.CE_choice_practice_pred_A = 1 p.CE_choice_practice_pred_B = 0 p.CE_choice_practice_pred_C = 0 else: if p.CE_choice_practice_aux == 2: p.CE_choice_practice_pred_A = 0 p.CE_choice_practice_pred_B = 1 p.CE_choice_practice_pred_C = 0 else: p.CE_choice_practice_pred_A = 0 p.CE_choice_practice_pred_B = 0 p.CE_choice_practice_pred_C = 1 # # List of predictions for option X by those who chose A group.list_pred_A_A_practice = str(p.CE_choice_practice_pred_A) * ( p.participant.CE_choice_practice == 1) + ',' + group.list_pred_A_A_practice group.list_pred_A_B_practice = str(p.CE_choice_practice_pred_B) * ( p.participant.CE_choice_practice == 1) + ',' + group.list_pred_A_B_practice group.list_pred_A_C_practice = str(p.CE_choice_practice_pred_C) * ( p.participant.CE_choice_practice == 1) + ',' + group.list_pred_A_C_practice # # # List of predictions for option X by those who chose B group.list_pred_B_A_practice = str(p.CE_choice_practice_pred_A) * ( p.participant.CE_choice_practice == 2) + ',' + group.list_pred_B_A_practice group.list_pred_B_B_practice = str(p.CE_choice_practice_pred_B) * ( p.participant.CE_choice_practice == 2) + ',' + group.list_pred_B_B_practice group.list_pred_B_C_practice = str(p.CE_choice_practice_pred_C) * ( p.participant.CE_choice_practice == 2) + ',' + group.list_pred_B_C_practice # # List of predictions for option X by those who chose C group.list_pred_C_A_practice = str(p.CE_choice_practice_pred_A) * ( p.participant.CE_choice_practice == 3) + ',' + group.list_pred_C_A_practice group.list_pred_C_B_practice = str(p.CE_choice_practice_pred_B) * ( p.participant.CE_choice_practice == 3) + ',' + group.list_pred_C_B_practice group.list_pred_C_C_practice = str(p.CE_choice_practice_pred_C) * ( p.participant.CE_choice_practice == 3) + ',' + group.list_pred_C_C_practice # for p in group.in_round(1).get_players(): if p.participant.CE_choice_practice == 1: # participants who chose option A p.list_choices_A_practice = " ".join(['A'] * (group.sum_binding_sit_1_practice - 1)) p.list_choices_B_practice = " ".join(['B'] * group.sum_binding_sit_2_practice) p.list_choices_C_practice = " ".join(['C'] * group.sum_binding_sit_3_practice) list_pred_A_A_practice_temp = group.list_pred_A_A_practice list_pred_A_B_practice_temp = group.list_pred_A_B_practice list_pred_A_C_practice_temp = group.list_pred_A_C_practice list_pred_A_A_practice_temp2 = list_pred_A_A_practice_temp.split(",") list_pred_A_B_practice_temp2 = list_pred_A_B_practice_temp.split(",") list_pred_A_C_practice_temp2 = list_pred_A_C_practice_temp.split(",") list_pred_A_A_practice_temp3 = [i for i in list_pred_A_A_practice_temp2 if i] list_pred_A_B_practice_temp3 = [i for i in list_pred_A_B_practice_temp2 if i] list_pred_A_C_practice_temp3 = [i for i in list_pred_A_C_practice_temp2 if i] temp_id_resto_temp_ = group.id_player_groupA_practice.split(",") temp_id_resto_temp_2 = [i for i in temp_id_resto_temp_ if i] index_remove = temp_id_resto_temp_2.index(str(p.id_in_group)) del list_pred_A_A_practice_temp3[index_remove] del list_pred_A_B_practice_temp3[index_remove] del list_pred_A_C_practice_temp3[index_remove] p.participant.group_list_pred_A_practice = list_pred_A_A_practice_temp3 p.participant.group_list_pred_B_practice = list_pred_A_B_practice_temp3 p.participant.group_list_pred_C_practice = list_pred_A_C_practice_temp3 temp_id_resto = group.id_player_groupA_practice.replace(str(p.id_in_group), "") temp_id_resto2 = temp_id_resto.split(",") p.participant.id_resto = [i for i in temp_id_resto2 if i] else: if p.participant.CE_choice_practice == 2: # participants who chose option B p.list_choices_A_practice = " ".join(['A'] * group.sum_binding_sit_1_practice) p.list_choices_B_practice = " ".join(['B'] * (group.sum_binding_sit_2_practice - 1)) p.list_choices_C_practice = " ".join(['C'] * group.sum_binding_sit_3_practice) list_pred_B_A_practice_temp = group.list_pred_B_A_practice list_pred_B_B_practice_temp = group.list_pred_B_B_practice list_pred_B_C_practice_temp = group.list_pred_B_C_practice list_pred_B_A_practice_temp2 = list_pred_B_A_practice_temp.split(",") list_pred_B_B_practice_temp2 = list_pred_B_B_practice_temp.split(",") list_pred_B_C_practice_temp2 = list_pred_B_C_practice_temp.split(",") list_pred_B_A_practice_temp3 = [i for i in list_pred_B_A_practice_temp2 if i] list_pred_B_B_practice_temp3 = [i for i in list_pred_B_B_practice_temp2 if i] list_pred_B_C_practice_temp3 = [i for i in list_pred_B_C_practice_temp2 if i] temp_id_resto_temp_ = group.id_player_groupB_practice.split(",") temp_id_resto_temp_2 = [i for i in temp_id_resto_temp_ if i] index_remove = temp_id_resto_temp_2.index(str(p.id_in_group)) del list_pred_B_A_practice_temp3[index_remove] del list_pred_B_B_practice_temp3[index_remove] del list_pred_B_C_practice_temp3[index_remove] p.participant.group_list_pred_A_practice = list_pred_B_A_practice_temp3 p.participant.group_list_pred_B_practice = list_pred_B_B_practice_temp3 p.participant.group_list_pred_C_practice = list_pred_B_C_practice_temp3 temp_id_resto = group.id_player_groupB_practice.replace(str(p.id_in_group), "") temp_id_resto2 = temp_id_resto.split(",") p.participant.id_resto = [i for i in temp_id_resto2 if i] else: # participants who chose option C p.list_choices_A_practice = " ".join(['A'] * group.sum_binding_sit_1_practice) p.list_choices_B_practice = " ".join(['B'] * group.sum_binding_sit_2_practice) p.list_choices_C_practice = " ".join(['C'] * (group.sum_binding_sit_3_practice - 1)) list_pred_C_A_practice_temp = group.list_pred_C_A_practice list_pred_C_B_practice_temp = group.list_pred_C_B_practice list_pred_C_C_practice_temp = group.list_pred_C_C_practice list_pred_C_A_practice_temp2 = list_pred_C_A_practice_temp.split(",") list_pred_C_B_practice_temp2 = list_pred_C_B_practice_temp.split(",") list_pred_C_C_practice_temp2 = list_pred_C_C_practice_temp.split(",") list_pred_C_A_practice_temp3 = [i for i in list_pred_C_A_practice_temp2 if i] list_pred_C_B_practice_temp3 = [i for i in list_pred_C_B_practice_temp2 if i] list_pred_C_C_practice_temp3 = [i for i in list_pred_C_C_practice_temp2 if i] temp_id_resto_temp_ = group.id_player_groupC_practice.split(",") temp_id_resto_temp_2 = [i for i in temp_id_resto_temp_ if i] index_remove = temp_id_resto_temp_2.index(str(p.id_in_group)) del list_pred_C_A_practice_temp3[index_remove] del list_pred_C_B_practice_temp3[index_remove] del list_pred_C_C_practice_temp3[index_remove] p.participant.group_list_pred_A_practice = list_pred_C_A_practice_temp3 p.participant.group_list_pred_B_practice = list_pred_C_B_practice_temp3 p.participant.group_list_pred_C_practice = list_pred_C_C_practice_temp3 temp_id_resto = group.id_player_groupC_practice.replace(str(p.id_in_group), "") temp_id_resto2 = temp_id_resto.split(",") p.participant.id_resto = [i for i in temp_id_resto2 if i] class fortune_wheel(Page): def is_displayed(player: Player): return player.participant.treatment_p == 3 or player.participant.treatment_p == 4 \ or player.participant.treatment_p == 5 or player.participant.treatment_p == 6 \ or player.participant.treatment_p == 7 or player.participant.treatment_p == 8 \ or player.participant.treatment_p == 9 @staticmethod def js_vars(player): return dict(replace=player.participant.replace_predictions_practice) class Trial_results_no_replace(Page): def is_displayed(player: Player): return player.participant.replace_predictions_practice == 0 and player.participant.treatment_p == 3 \ or player.participant.replace_predictions_practice == 0 and player.participant.treatment_p == 4 \ or player.participant.replace_predictions_practice == 0 and player.participant.treatment_p == 5 @staticmethod def js_vars(player): return dict(replace=player.participant.replace_predictions_practice) @staticmethod def vars_for_template(player): cost_1 = str(C.level1) cost_2 = str(C.level2) return dict(costs1=cost_1, costs2=cost_2, num_participants=C.PLAYERS_PER_GROUP - 1, payoff_a=player.payoff_practice_A, payoff_b=player.payoff_practice_B, payoff_c=player.payoff_practice_C) @staticmethod def before_next_page(player, timeout_happened): listA = player.list_choices_A_practice.split() listB = player.list_choices_B_practice.split() listC = player.list_choices_C_practice.split() list_choices = listA + listC + listB player.participant.random_choice_practice = random.choice(list_choices) class Trial_results_no_replace_fr(Page): def is_displayed(player: Player): return player.participant.replace_predictions_practice == 0 and player.participant.treatment_p == 6 \ or player.participant.replace_predictions_practice == 0 and player.participant.treatment_p == 7 \ or player.participant.replace_predictions_practice == 0 and player.participant.treatment_p == 8 @staticmethod def js_vars(player): return dict(replace=player.participant.replace_predictions_practice) @staticmethod def vars_for_template(player): cost_1 = str(C.level1) cost_2 = str(C.level2) nr_pred_A = player.list_choices_A_practice.count('A') nr_pred_B = player.list_choices_B_practice.count('B') nr_pred_C = player.list_choices_A_practice.count('C') return dict(costs1=cost_1, costs2=cost_2, num_participants=C.PLAYERS_PER_GROUP - 1, frequency_prediction=player.frequency_prediction, nr_pred_A=nr_pred_A, nr_pred_B=nr_pred_B, nr_pred_C=nr_pred_C) @staticmethod def before_next_page(player, timeout_happened): listA = player.list_choices_A_practice.split() listB = player.list_choices_B_practice.split() listC = player.list_choices_C_practice.split() list_choices = listA + listC + listB player.participant.random_choice_practice = random.choice(list_choices) class Trial_results_no_replace_aux(Page): def is_displayed(player: Player): return player.participant.replace_predictions_practice == 0 and player.participant.treatment_p == 9 @staticmethod def js_vars(player): return dict(replace=player.participant.replace_predictions_practice) @staticmethod def vars_for_template(player): cost_1 = str(C.level1) cost_2 = str(C.level2) return dict(costs1=cost_1, costs2=cost_2, num_participants=C.PLAYERS_PER_GROUP - 1) @staticmethod def before_next_page(player, timeout_happened): listA = player.list_choices_A_practice.split() listB = player.list_choices_B_practice.split() listC = player.list_choices_C_practice.split() list_choices = listA + listC + listB player.participant.random_choice_practice = random.choice(list_choices) class Trial_results_replace(Page): def is_displayed(player: Player): return player.participant.replace_predictions_practice == 1 and player.participant.treatment_p == 3 \ or player.participant.replace_predictions_practice == 1 and player.participant.treatment_p == 4 \ or player.participant.replace_predictions_practice == 1 and player.participant.treatment_p == 5 \ or player.participant.replace_predictions_practice == 1 and player.participant.treatment_p == 6 \ or player.participant.replace_predictions_practice == 1 and player.participant.treatment_p == 7 \ or player.participant.replace_predictions_practice == 1 and player.participant.treatment_p == 8 \ or player.participant.replace_predictions_practice == 1 and player.participant.treatment_p == 9 @staticmethod def js_vars(player): return dict(replace=player.participant.replace_predictions_practice) @staticmethod def vars_for_template(player): cost_2 = str(C.level2) cost_1 = str(C.level1) leng = len(player.participant.group_list_pred_A_practice) if leng == 0: # sitation nobody else chose the individual choices # Replace with your own predictions # Replace random random_prediction_A = random.randint( int(round((player.participant.num_players - 1) * 0.2, 0)), int(round((player.participant.num_players - 1) * 0.4, 0))) random_prediction_B = random.randint( int(round((player.participant.num_players - 1) * 0.2, 0)), (int(round((player.participant.num_players - 1) * 0.4, 0)))) random_prediction_C = player.participant.num_players - 1 - random_prediction_A - random_prediction_B if player.participant.CE_choice_practice == 1: player.list_choices_A_practice = "A" lenb = len(player.list_choices_B_practice.split()) lenc = len(player.list_choices_C_practice.split()) if lenb > lenc: player.list_choices_B_practice = \ player.list_choices_B_practice.replace("B", "", 1) else: player.list_choices_C_practice = \ player.list_choices_C_practice.replace("C", "", 1) if player.participant.CE_choice_practice == 2: player.list_choices_B_practice = "B" lena = len(player.list_choices_A_practice.split()) lenc = len(player.list_choices_C_practice.split()) if lena > lenc: player.list_choices_A_practice = \ player.list_choices_A_practice.replace("A", "", 1) else: player.list_choices_C_practice = \ player.list_choices_C_practice.replace("C", "", 1) if player.participant.CE_choice_practice == 3: player.list_choices_C_practice = 'C' lena = len(player.list_choices_A_practice.split()) lenb = len(player.list_choices_B_practice.split()) if lena > lenb: player.list_choices_A_practice = \ player.list_choices_A_practice.replace('A', '', 1) else: player.list_choices_B_practice = \ player.list_choices_B_practice.replace('B', '', 1) player.participant.id_resto = [random.randint(1, player.participant.num_players)] id_resto = {0: player.participant.id_resto[0]} example_prediction_selected_A = {0: random_prediction_A} example_prediction_selected_B = {0: random_prediction_B} example_prediction_selected_C = {0: random_prediction_C} player.participant.group_list_pred_A_practice = [random_prediction_A] player.participant.group_list_pred_B_practice = [random_prediction_B] player.participant.group_list_pred_C_practice = [random_prediction_C] listA_2 = id_resto leng = 1 else: id_resto = {i: player.participant.id_resto[i] for i in range(0, leng)} # Corresponding predictions of other players example_prediction_selected_A = {i: player.participant.group_list_pred_A_practice[i] for i in range(0, leng)} example_prediction_selected_B = {i: player.participant.group_list_pred_B_practice[i] for i in range(0, leng)} example_prediction_selected_C = {i: player.participant.group_list_pred_C_practice[i] for i in range(0, leng)} listA_2 = {i: player.participant.id_resto[i] for i in range(0, leng)} integersA = [int(i) for i in player.participant.group_list_pred_A_practice] integersB = [int(i) for i in player.participant.group_list_pred_B_practice] integersC = [int(i) for i in player.participant.group_list_pred_C_practice] selected_id = random.randint(0, len(listA_2)-1) replaced_A = integersA[selected_id] replaced_B = integersB[selected_id] replaced_C = integersC[selected_id] Pred_A = replaced_A / (player.participant.num_players - 1) Pred_B = replaced_B / (player.participant.num_players - 1) Pred_C = replaced_C / (player.participant.num_players - 1) factor1 = Pred_A * Pred_A + Pred_B * Pred_B + Pred_C * Pred_C payoff_a = round(C.quadratic_score_A + C.quadratic_score_B * (2 * Pred_A - factor1), 1) payoff_b = round(C.quadratic_score_A + C.quadratic_score_B * (2 * Pred_B - factor1), 1) payoff_c = round(C.quadratic_score_A + C.quadratic_score_B * (2 * Pred_C - factor1), 1) if player.participant.treatment_p == 6 or player.participant.treatment_p == 7 \ or player.participant.treatment_p == 8: nr_other_choice_A = player.list_choices_A_practice.count('A') nr_other_choice_B = player.list_choices_B_practice.count('B') nr_other_choice_C = player.list_choices_C_practice.count('C') if replaced_A == nr_other_choice_A and replaced_B == nr_other_choice_B and replaced_C == nr_other_choice_C: player.frequency_prediction = 1 else: player.frequency_prediction = 0 else: player.frequency_prediction = 0 nr_pred_A = player.list_choices_A_practice.count('A') nr_pred_B = player.list_choices_B_practice.count('B') nr_pred_C = player.list_choices_A_practice.count('C') cont = list(range(0, leng)) return dict(id_resto=id_resto, example_prediction_selected_A=example_prediction_selected_A, example_prediction_selected_B=example_prediction_selected_B, example_prediction_selected_C=example_prediction_selected_C, listA=listA_2, cont=cont, replaced_A=replaced_A, replaced_B=replaced_B, replaced_C=replaced_C, costs1=cost_1, costs2=cost_2, num_participants=C.PLAYERS_PER_GROUP - 1, payoff_a=payoff_a, payoff_b=payoff_b, payoff_c=payoff_c, frequency_prediction=player.frequency_prediction, nr_pred_A=nr_pred_A, nr_pred_B=nr_pred_B, nr_pred_C=nr_pred_C, leng=len(player.participant.group_list_pred_A_practice)) @staticmethod def before_next_page(player, timeout_happened): listA = player.list_choices_A_practice.split() listB = player.list_choices_B_practice.split() listC = player.list_choices_C_practice.split() list_choices = listA + listC + listB player.participant.random_choice_practice = random.choice(list_choices) class Trial_binding_alt_payoff(Page): def is_displayed(player: Player): return player.participant.treatment_p == 3 or player.participant.treatment_p == 4 \ or player.participant.treatment_p == 5 @staticmethod def js_vars(player): return dict(random_choice=player.participant.random_choice_practice) @staticmethod def vars_for_template(player): cost_2 = str(C.level2) cost_1 = str(C.level1) listA = player.list_choices_A_practice.split() listB = player.list_choices_B_practice.split() listC = player.list_choices_C_practice.split() return dict(costs1=cost_1, costs2=cost_2, num_participants=C.PLAYERS_PER_GROUP - 1, listA=listA, listB=listB, listC=listC, random_prediction_A=len(listA), random_prediction_B=len(listB), random_prediction_C=len(listC), ) class Trial_payoff_no_replace(Page): def is_displayed(player: Player): return player.participant.replace_predictions_practice == 0 and player.participant.treatment_p == 3 \ or player.participant.replace_predictions_practice == 0 and player.participant.treatment_p == 4 \ or player.participant.replace_predictions_practice == 0 and player.participant.treatment_p == 5 @staticmethod def vars_for_template(player): cost_2 = str(C.level2) cost_1 = str(C.level1) return dict(costs1=cost_1, costs2=cost_2, num_participants=C.PLAYERS_PER_GROUP - 1, random_choice_practice=player.participant.random_choice_practice) class Trial_payoff_replace(Page): def is_displayed(player: Player): return player.participant.replace_predictions_practice == 1 and player.participant.treatment_p == 3 \ or player.participant.replace_predictions_practice == 1 and player.participant.treatment_p == 4 \ or player.participant.replace_predictions_practice == 1 and player.participant.treatment_p == 5 @staticmethod def vars_for_template(player): cost_2 = str(C.level2) cost_1 = str(C.level1) leng = len(player.participant.group_list_pred_A_practice) id_resto = {i: player.participant.id_resto[i] for i in range(0, leng)} example_prediction_selected_A = {i: player.participant.group_list_pred_A_practice[i] for i in range(0, leng)} example_prediction_selected_B = {i: player.participant.group_list_pred_B_practice[i] for i in range(0, leng)} example_prediction_selected_C = {i: player.participant.group_list_pred_C_practice[i] for i in range(0, leng)} listA_2 = {i: player.participant.id_resto[i] for i in range(0, leng)} integersA = [int(i) for i in player.participant.group_list_pred_A_practice] integersB = [int(i) for i in player.participant.group_list_pred_B_practice] integersC = [int(i) for i in player.participant.group_list_pred_C_practice] SelectedA = random.choice(integersA) SelectedB = random.choice(integersB) SelectedC = random.choice(integersC) Pred_A = SelectedA / (player.participant.num_players - 1) Pred_B = SelectedB / (player.participant.num_players - 1) Pred_C = SelectedC / (player.participant.num_players - 1) factor1 = Pred_A * Pred_A + Pred_B * Pred_B + Pred_C * Pred_C payoff_a = round(C.quadratic_score_A + C.quadratic_score_B * (2 * Pred_A - factor1), 1) payoff_b = round(C.quadratic_score_A + C.quadratic_score_B * (2 * Pred_B - factor1), 1) payoff_c = round(C.quadratic_score_A + C.quadratic_score_B * (2 * Pred_C - factor1), 1) cont = list(range(0, leng)) return dict(costs1=cost_1, costs2=cost_2, id_resto=id_resto, example_prediction_selected_A=example_prediction_selected_A, example_prediction_selected_B=example_prediction_selected_B, example_prediction_selected_C=example_prediction_selected_C, listA=listA_2, cont=cont, selectedA=SelectedA, selectedB=SelectedB, selectedC=SelectedC, num_participants=C.PLAYERS_PER_GROUP - 1, payoff_a=payoff_a, payoff_b=payoff_b, payoff_c=payoff_c, random_choice_practice=player.participant.random_choice_practice) class Trial_payoff_replace_aux(Page): def is_displayed(player: Player): return player.participant.replace_predictions_practice == 1 and player.participant.treatment_p == 9 @staticmethod def vars_for_template(player): cost_2 = str(C.level2) cost_1 = str(C.level1) leng = len(player.participant.group_list_pred_A_practice) id_resto = {i: player.participant.id_resto[i] for i in range(0, leng)} example_prediction_selected_A = {i: player.participant.group_list_pred_A_practice[i] for i in range(0, leng)} example_prediction_selected_B = {i: player.participant.group_list_pred_B_practice[i] for i in range(0, leng)} example_prediction_selected_C = {i: player.participant.group_list_pred_C_practice[i] for i in range(0, leng)} listA_2 = {i: player.participant.id_resto[i] for i in range(0, leng)} integersA = [int(i) for i in player.participant.group_list_pred_A_practice] integersB = [int(i) for i in player.participant.group_list_pred_B_practice] integersC = [int(i) for i in player.participant.group_list_pred_C_practice] SelectedA = random.choice(integersA) SelectedB = random.choice(integersB) SelectedC = random.choice(integersC) print(player.participant.random_choice_practice) cont = list(range(0, leng)) return dict(costs1=cost_1, costs2=cost_2, id_resto=id_resto, example_prediction_selected_A=example_prediction_selected_A, example_prediction_selected_B=example_prediction_selected_B, example_prediction_selected_C=example_prediction_selected_C, listA=listA_2, cont=cont, selectedA=SelectedA, selectedB=SelectedB, selectedC=SelectedC, num_participants=C.PLAYERS_PER_GROUP - 1, random_choice_practice=player.participant.random_choice_practice) class Comprehension_questions(Page): def is_displayed(player: Player): return player.participant.treatment_p == 3 or player.participant.treatment_p == 4 \ or player.participant.treatment_p == 5 or player.participant.treatment_p == 6 \ or player.participant.treatment_p == 7 or player.participant.treatment_p == 8 \ or player.participant.treatment_p == 9 form_model = 'player' @staticmethod def get_form_fields(player): if player.participant.treatment_p == 3 or player.participant.treatment_p == 6: return ['Test_1a', 'Test_2', 'Test_3'] else: if player.participant.treatment_p == 4 or player.participant.treatment_p == 7 or player.participant.treatment_p == 9: return ['Test_1b', 'Test_2', 'Test_3'] else: return ['Test_1c', 'Test_2', 'Test_3'] @staticmethod def app_after_this_page(player: Player, upcoming_apps): # print('upcoming app is', upcoming_apps) if player.participant.treatment_p > 2: return "CM_DCE_2" page_sequence = [ InstrWaitPage, Trial_3, Trial_3_fr, Trial_3_aux, Wait_practice_test, Wait_practice_test_aux, fortune_wheel, Trial_results_no_replace, Trial_results_no_replace_fr, Trial_results_no_replace_aux, Trial_results_replace, Trial_binding_alt_payoff, Trial_payoff_no_replace, Trial_payoff_replace, Trial_payoff_replace_aux, Comprehension_questions, ]