from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from . import models from .models import Constants import itertools import numpy as np from sklearn.utils import shuffle class Introduction(Page): # timeout_seconds = 600 def is_displayed(self): return self.round_number == 1 and self.session.config['introduction'] == 'nonsoc' and self.session.config['explicit'] == 'implicit' form_model = models.Player tmp = ['test_question_{}'.format(ii) for ii in range(1, 9)] ff = ['age', 'gender'] form_fields = tmp+ff # # def test_question_1_error_message(self, value): # if not (value == 'FALSE'): # return 'Incorrect Answer' # # def test_question_2_error_message(self, value): # if not (value == 'TRUE'): # return 'Incorrect Answer' # # def test_question_3_error_message(self, value): # if not (value == 'FALSE'): # return 'Incorrect Answer' # # def test_question_4_error_message(self, value): # if not (value == 'TRUE'): # return 'Incorrect Answer' # # def test_question_5_error_message(self, value): # if not (value == 'FALSE'): # return 'Incorrect Answer' # # def test_question_6_error_message(self, value): # if not (value == 'TRUE'): # return 'Incorrect Answer' # # def test_question_7_error_message(self, value): # if not (value == 'SOCIAL'): # return 'Incorrect Answer' # # def test_question_8_error_message(self, value): # if not (value == 'NON-SOCIAL'): # return 'Incorrect Answer' def error_message(self, values): if values['test_question_1'] == 'TRUE' or values['test_question_2'] == 'FALSE' or values[ 'test_question_3'] == 'TRUE' or values['test_question_4'] == 'FALSE' or values[ 'test_question_5'] == 'TRUE' or values['test_question_6'] == 'FALSE' or values[ 'test_question_7'] == 'NON-SOCIAL' or values['test_question_8'] == 'SOCIAL': return 'One or more test questions is incorrect, please either re-read instructions or alert researcher for explanation of rules' class Explicit_Introduction(Page): # timeout_seconds = 600 def is_displayed(self): return self.round_number == 1 and self.session.config['introduction'] == 'nonsoc' and self.session.config['explicit'] == 'explicit' form_model = models.Player tmp = ['test_question_{}'.format(ii) for ii in range(1, 11)] ff = ['age', 'gender'] form_fields = tmp+ff def error_message(self, values): if values['test_question_1'] == 'TRUE' or values['test_question_2'] == 'FALSE' or values[ 'test_question_3'] == 'TRUE' or values['test_question_4'] == 'FALSE' or values[ 'test_question_5'] == 'TRUE' or values['test_question_6'] == 'FALSE' or values[ 'test_question_7'] == 'NON-SOCIAL' or values['test_question_8'] == 'SOCIAL'\ or not values['test_question_9'] == 'Groups of responders who received different starting endowments'\ or not values['test_question_10'] == 'Computer responses programmed to mimic responders who received different starting endowments': return 'One or more test questions is incorrect, please either re-read instructions or alert researcher for explanation of rules' class Priors_instructions(Page): def is_displayed(self): return self.round_number == 1 class Final(Page): def is_displayed(self): return self.round_number == Constants.num_rounds def vars_for_template(self): self.player.round_to_pay() def after_all_players_arrive(self): self.player.round_to_pay() def before_session_starts(self): self.round_list = range(1, self.round_number + 1) self.payout_chosen_trial = shuffle(self.round_list) self.participant.vars['payout_chosen_trial'] = self.payout_chosen_trial[0] class Offer(Page): form_model = models.Group form_fields = ['option_chosen'] def is_displayed(self): return self.player.id_in_group == 1 # timeout_seconds = 600 def vars_for_template(self): self.group.set_responder_identity() self.group.soc_or_no = 'Non-social' # self.session.config['treatment'] == 'strategy' # if self.session.config['order'] == 'soc_first': # # # if self.round_number <= (Constants.num_rounds/2): # # self.group.soc_or_no = 'Social' # # if self.group.current_opponent == 'triangle': # return {'image_path': 'my_ultimatum_3cond_block/TRIANGLE_SOC.png'} # elif self.group.current_opponent == 'circle': # return {'image_path': 'my_ultimatum_3cond_block/CIRCLE_SOC.png'} # elif self.group.current_opponent == 'square': # return {'image_path': 'my_ultimatum_3cond_block/SQUARE_SOC.png'} # # elif self.round_number > (Constants.num_rounds/2): # # self.group.soc_or_no = 'Non-social' # # if self.group.current_opponent == 'triangle': # return {'image_path': 'my_ultimatum_3cond_block/TRIANGLE_COMP.png'} # elif self.group.current_opponent == 'circle': # return {'image_path': 'my_ultimatum_3cond_block/CIRCLE_COMP.png'} # elif self.group.current_opponent == 'square': # return {'image_path': 'my_ultimatum_3cond_block/SQUARE_COMP.png'} # # elif self.session.config['order'] == 'comp_first': # if self.round_number > (Constants.num_rounds / 2): # # self.group.soc_or_no = 'Social' # # if self.group.current_opponent == 'triangle': # return {'image_path': 'my_ultimatum_3cond_block/TRIANGLE_SOC.png'} # elif self.group.current_opponent == 'circle': # return {'image_path': 'my_ultimatum_3cond_block/CIRCLE_SOC.png'} # elif self.group.current_opponent == 'square': # return {'image_path': 'my_ultimatum_3cond_block/SQUARE_SOC.png'} # # elif self.round_number <= (Constants.num_rounds / 2): # # self.group.soc_or_no = 'Non-social' # # if self.group.current_opponent == 'triangle': # return {'image_path': 'my_ultimatum_3cond_block/TRIANGLE_COMP.png'} # elif self.group.current_opponent == 'circle': # return {'image_path': 'my_ultimatum_3cond_block/CIRCLE_COMP.png'} # elif self.group.current_opponent == 'square': # return {'image_path': 'my_ultimatum_3cond_block/SQUARE_COMP.png'} class ResultsWaitPage(WaitPage): timeout_seconds = 1 def after_all_players_arrive(self): self.group.set_payoffs() class Results(Page): def vars_for_template(self): self.group.set_payoffs() def after_all_players_arrive(self): self.group.set_payoffs() page_sequence = [Introduction, Explicit_Introduction, Priors_instructions, Offer, ResultsWaitPage, Final]