from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import numpy as np class Introduction(Page): def is_displayed(self): return self.player.round_in_interaction == 1 def vars_for_template(self): v = { 'num_rounds': Constants.interaction_length[self.player.interaction_number-1], } return v class Decision(Page): form_model = 'player' form_fields = ['x', 'y'] def get_timeout_seconds(self): if self.player.round_number <=2: return 60 else: return 30 def before_next_page(self): values = self.participant.vars['values'][self.player.interaction_number - 1] print('now this represents the random value',values[0][0]) if self.timeout_happened: self.player.x = 0 self.player.y = 0 self.player.value = 0 else: self.player.value = values[self.player.x-1][self.player.y-1] self.player.cum_value = sum([p.value for p in self.player.in_all_rounds() if p.interaction_number == self.player.interaction_number]) self.player.payoff = self.player.value if (Constants.rand_pay)and(self.player.interaction_number != self.participant.vars['paying_part']): self.player.payoff = 0 def vars_for_template(self): v = { 'xs': [p.x for p in self.player.in_previous_rounds() if p.interaction_number == self.player.interaction_number], 'ys': [p.y for p in self.player.in_previous_rounds() if p.interaction_number == self.player.interaction_number], 'values': [p.value for p in self.player.in_previous_rounds() if p.interaction_number == self.player.interaction_number], } return v class DecisionWaitPage(WaitPage): template_name = 'wildcat/DecisionWaitPage.html' wait_for_all_groups = True def is_displayed(self): return self.player.treatment != 'non' def vars_for_template(self): v = { 'xs': [p.x for p in self.player.in_all_rounds() if p.interaction_number == self.player.interaction_number], 'ys': [p.y for p in self.player.in_all_rounds() if p.interaction_number == self.player.interaction_number], 'values': [p.value for p in self.player.in_all_rounds() if p.interaction_number == self.player.interaction_number], } return v def after_all_players_arrive(self): values = np.array([p.value for p in self.subsession.get_players()]) for p in self.subsession.get_players(): if p.treatment=="avg": p.info = values.mean() elif p.treatment=="min": p.info = values.min() elif p.treatment=="max": p.info = values.max() class Results(Page): timeout_seconds = 3 def is_displayed(self): return self.player.round_in_interaction == Constants.interaction_length[self.player.interaction_number-1] def vars_for_template(self): v = { 'xs': [p.x for p in self.player.in_all_rounds() if p.interaction_number == self.player.interaction_number], 'ys': [p.y for p in self.player.in_all_rounds() if p.interaction_number == self.player.interaction_number], 'values': [p.value for p in self.player.in_all_rounds() if p.interaction_number == self.player.interaction_number], } return v class ResultsWaitingPage(WaitPage): template_name = 'wildcat/ResultsWaitPage.html' wait_for_all_groups = True def is_displayed(self): return self.player.round_in_interaction == Constants.interaction_length[self.player.interaction_number-1] def vars_for_template(self): v = { 'xs': [p.x for p in self.player.in_all_rounds() if p.interaction_number == self.player.interaction_number], 'ys': [p.y for p in self.player.in_all_rounds() if p.interaction_number == self.player.interaction_number], 'values': [p.value for p in self.player.in_all_rounds() if p.interaction_number == self.player.interaction_number], } return v class FinalResults(Page): timeout_seconds = 60 def is_displayed(self): print( self.player.round_in_interaction, Constants.interaction_length[self.player.interaction_number-1] ) return self.player.round_in_interaction == Constants.interaction_length[self.player.interaction_number-1] def vars_for_template(self): v = { 'paying_part': self.participant.vars['paying_part'], 'payment': self.participant.payoff, } return v class FinalResultsWaitingPage(WaitPage): template_name = 'wildcat/FinalResultsWaitPage.html' wait_for_all_groups = True def is_displayed(self): return self.player.round_number == Constants.num_rounds def vars_for_template(self): v = { 'paying_part': self.participant.vars['paying_part'], 'payment': self.participant.payoff, } return v page_sequence = [ Introduction, Decision, DecisionWaitPage, # Results, # ResultsWaitingPage, FinalResults, # FinalResultsWaitingPage, ]