from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import random ############################################################ # WELCOME ############################################################ class Intro(Page): def before_next_page(self): self.player.def_labels() class Instructions(Page): pass ############################################################ # SEQUENTIAL PD ############################################################ class Question(Page): form_model = 'player' form_fields = ['comp_score', 'open_score1', 'consc_score1', 'agree_score1', 'neuro_score1', 'extra_score1', 'open_score2', 'consc_score2', 'agree_score2', 'neuro_score2', 'extra_score2', 'open_score3', 'consc_score3', 'agree_score3', 'neuro_score3', 'extra_score3', 'risk_score', 'gender', 'impatience', 'home_language', 'state_birth','age', 'reci_', 'reci_2', 'academic_degree', 'rosen_1'] random.shuffle(form_fields) #PASSING ON PREDICTION TO THE PAGE def before_next_page(self): self.player.prediction_maker() ############################################################ # BELIEF FIRST MOVER DECISIONS ############################################################ class BeliefFM(Page): form_model = 'player' # TREATMENT DEPENDENT FORMFIELDS def get_form_fields(self): if self.player.treat == 1: return ['belief_fm_rec'] elif (self.player.treat == 1) & (self.participant.vars['rand_order'] == 1): return ['belief_fm_rec', 'belief_fm_non_rec'] else: return ['belief_fm_non_rec', 'belief_fm_rec'] # DYNAMIC LABELLING def vars_for_template(self): if self.player.treat == 1: return dict(label_base=self.participant.vars['belief_pos']) elif (self.player.treat == 1) & (self.participant.vars['rand_order'] == 1): return dict(label_1=self.participant.vars['belief_pos'], label_2=self.participant.vars['belief_neg']) else: return dict(label_2=self.participant.vars['belief_pos'], label_1=self.participant.vars['belief_neg']) # REPAYMENT COMPUTATION def before_next_page(self): if self.player.treat == 1: self.player.payoff_() ############################################################ # REPAYMENT DECISIONS ############################################################ class Repayment(Page): form_model = 'player' # TREATMENT DEPENDENT FORMFIELDS def get_form_fields(self): if self.player.treat == 1: return ['repayment_rec'] elif (self.player.treat != 1) & (self.participant.vars['rand_order'] == 1): return ['repayment_rec', 'repayment_non_rec'] else: return ['repayment_non_rec', 'repayment_rec'] # DYNAMIC LABELLING def vars_for_template(self): if self.player.treat == 1: return dict(label_base=self.participant.vars['repay_pos']) elif (self.player.treat != 1) & (self.participant.vars['rand_order'] == 1): return dict(label_1=self.participant.vars['repay_pos'], label_2=self.participant.vars['repay_neg']) else: return dict(label_2=self.participant.vars['repay_pos'], label_1=self.participant.vars['repay_neg']) ############################################################ # BELIEF PREDICTION ACC ############################################################ class BeliefAccSo(Page): # ONLY SHOW TO TREATMENT WITH ADVICE def is_displayed(self): return (self.player.treat in [2,4]) form_model = 'player' form_fields = ['belief_about_pred_so'] # DYNAMIC LABELLING def vars_for_template(self): if self.player.treat in [2,3]: return dict(pred_maker='des Machine Learning Systems', label_='Auf einer Skala von 0% bis 100%: für wie akkurat (wie häufig die Vorhersage korrekt ist) hält die andere Person die Vorhersage des Machine Learning Systems?') else: return dict(pred_maker='der menschlichen Experten', label_='Auf einer Skala von 0% bis 100%: für wie akkurat (wie häufig die Vorhersage korrekt ist) hält die andere Person die Vorhersage der menschlichen Experten?') class BeliefAcc(Page): # ONLY SHOW TO TREATMENT WITH ADVICE def is_displayed(self): return (self.player.treat != 1) form_model = 'player' form_fields = ['belief_about_pred'] # DYNAMIC LABELLING def vars_for_template(self): if self.player.treat in [2,3]: return dict(pred_maker='des Machine Learning Systems', label_='Auf einer Skala von 0% bis 100%, wie häufig ist die Vorhersage des Machine Learning Systems über die Vertrauenswürdigkeit der Teilnehmer dieser Studie korrekt?') else: return dict(pred_maker='der menschlichen Experten', label_='Auf einer Skala von 0% bis 100%, wie häufig ist die Vorhersage der menschlichen Experten über die Vertrauenswürdigkeit der Teilnehmer dieser Studie korrekt?') def before_next_page(self): self.player.payoff_() ############################################################ # POST QUEST ############################################################ class QuestionPost(Page): def is_displayed(self): return (self.player.treat != 1) form_model = 'player' form_fields = ['cog_trust1', 'cog_trust2', 'cog_trust3', 'emo_trust1', 'emo_trust2', 'emo_trust3', 'man_check', 'social_credit5', 'social_credit4', 'social_credit3', 'social_credit2', 'social_credit1'] random.shuffle(form_fields) def vars_for_template(self): if self.player.treat in [2,3]: temp_ = 'des Machine Learning Systems' else: temp_ = 'der menschlichen Experten' return dict( cog_trust1_label='{} kompetent und effektiv bei der Vorhersage der Vertrauenswürdigkeit.'.format(self.player.participant.vars['cog13_emo23']), cog_trust2_label='{} die Aufgabe, die Vertrauenswürdigkeit einer Person vorherzusagen, sehr gut.'.format(self.player.participant.vars['cog2']), cog_trust3_label='{} eine kompetente Hilfe wenn es um die Einschätzung der Vertrauenswürdigkeit einer Person geht.'.format(self.player.participant.vars['cog13_emo23']), emo_trust1_label='{} unvoreingenommene Vorhersagen.'.format(self.player.participant.vars['emo1']), emo_trust2_label='{} ehrlich.'.format(self.player.participant.vars['cog13_emo23']), emo_trust3_label='{} integer.'.format(self.player.participant.vars['cog13_emo23']), predictor=temp_, prediction=self.player.pred, ) ############################################################ # RESULTS PAGE ############################################################ class Results(Page): def vars_for_template(self): if self.player.treat in [2,3]: temp_ = 'des Machine Learning Systems' else: temp_ = 'der menschlichen Experten' repay_income = 30 - self.participant.vars['repay'] if self.player.treat == 1: predictor_acc = Constants.mean_acc_human else: predictor_acc = Constants.mean_acc_ml overall_ = (self.player.income - Constants.fixed_fee)/Constants.payoff_factor return dict(income=self.player.income, mu_overall=overall_, prediction=self.player.pred, fm_decision=self.participant.vars['relevant_fm_decision'], fm_belief=self.participant.vars['relevant_fm_belief'], repay=self.participant.vars['repay'], belief=self.participant.vars['fm_belief'], repay_inc=repay_income, corr_fm_belief=self.participant.vars['fm_belief_corr'], corr_acc_belief=self.participant.vars['corr_acc_guess'], pred_acc=predictor_acc, predictor=temp_, Acc=self.player.belief_about_pred, AccSo=self.player.belief_about_pred_so, CorrAcc=self.participant.vars['corr_acc_guess'], CorrAccSo=self.participant.vars['corr_fm_acc']) ############################################################ # SEQUENCE OF PAGES ############################################################ # Question, page_sequence = [ Intro, Question, Instructions, Repayment, BeliefFM, BeliefAccSo, BeliefAcc, QuestionPost, Results]