from otree.api import Currency as c, currency_range from . import pages from ._builtin import Bot from .models import Constants import random from otree.api import Submission class PlayerBot(Bot): def play_round(self): # define page as round_number page = self.subsession.round_number # get bot's switching point switching_point = self.player.participant.vars['mplr_switching_point'] # yield (pages.StartPage) if Constants.one_choice_per_page: if page == 1: # yield (pages.Start) yield (pages.ResponsibilityChoice, {'first_resp_choice': random.randint(0, 2)}) if self.player.first_resp_choice == 2: yield (pages.ResponsibilityChoice2, {'second_resp_choice': random.randint(0, 1)}) else: pass if self.participant.vars['choice_negr'] == 0: # yield (pages.Instructions_p) indices = [list(t) for t in zip(*self.player.participant.vars['mplr_choices_p'])][0] form_fields = [list(t) for t in zip(*self.player.participant.vars['mplr_choices_p'])][1] if Constants.one_choice_per_page: if indices[page - 1] <= switching_point: # yield (pages.MplRespPos, { # form_fields[page - 1]: 'A' # }) yield Submission(pages.MplRespPos, { form_fields[page - 1]: 'A' }, check_html=False) else: # yield (pages.MplRespPos, { # form_fields[page - 1]: 'B' # }) yield Submission(pages.MplRespPos, { form_fields[page - 1]: 'B' }, check_html=False) else: decisions = [] for i in indices: if i <= switching_point: decisions.append('A') else: decisions.append('B') choices = zip(form_fields, decisions) # yield (pages.MplRespPos, { # i: j for i, j in choices # }) yield Submission(pages.MplRespPos, { i: j for i, j in choices }, check_html=False) elif self.participant.vars['choice_negr'] == 1: # yield (pages.Instructions_n) indices = [list(t) for t in zip(*self.player.participant.vars['mplr_choices_n'])][0] form_fields = [list(t) for t in zip(*self.player.participant.vars['mplr_choices_n'])][1] if Constants.one_choice_per_page: if indices[page - 1] <= switching_point: # yield (pages.MplRespNeg, { # form_fields[page - 1]: 'A' # }) yield Submission(pages.MplRespNeg, { form_fields[page - 1]: 'A' }, check_html=False) else: # yield (pages.MplRespNeg, { # form_fields[page - 1]: 'B' # }) yield Submission(pages.MplRespNeg, { form_fields[page - 1]: 'B' }, check_html=False) else: decisions = [] for i in indices: if i <= switching_point: decisions.append('A') else: decisions.append('B') choices = zip(form_fields, decisions) # yield (pages.MplRespNeg, { # i: j for i, j in choices # }) yield Submission(pages.MplRespPos, { i: j for i, j in choices }, check_html=False) else: if self.participant.vars['choice_negr'] == 0: # yield (pages.Instructions_p) indices = [list(t) for t in zip(*self.player.participant.vars['mplr_choices_p'])][0] form_fields = [list(t) for t in zip(*self.player.participant.vars['mplr_choices_p'])][1] if Constants.one_choice_per_page: if indices[page - 1] <= switching_point: # yield (pages.MplRespPos, { # form_fields[page - 1]: 'A' # }) yield Submission(pages.MplRespPos, { form_fields[page - 1]: 'A' }, check_html=False) else: # yield (pages.MplRespPos, { # form_fields[page - 1]: 'B' # }) yield Submission(pages.MplRespPos, { form_fields[page - 1]: 'B' }, check_html=False) else: decisions = [] for i in indices: if i <= switching_point: decisions.append('A') else: decisions.append('B') choices = zip(form_fields, decisions) # yield (pages.MplRespPos, { # i: j for i, j in choices # }) yield Submission(pages.MplRespPos, { i: j for i, j in choices }, check_html=False) elif self.participant.vars['choice_negr'] == 1: # yield (pages.Instructions_n) indices = [list(t) for t in zip(*self.player.participant.vars['mplr_choices_n'])][0] form_fields = [list(t) for t in zip(*self.player.participant.vars['mplr_choices_n'])][1] if Constants.one_choice_per_page: if indices[page - 1] <= switching_point: # yield (pages.MplRespNeg, { # form_fields[page - 1]: 'A' # }) yield Submission(pages.MplRespNeg, { form_fields[page - 1]: 'A' }, check_html=False) else: # yield (pages.MplRespNeg, { # form_fields[page - 1]: 'B' # }) yield Submission(pages.MplRespNeg, { form_fields[page - 1]: 'B' }, check_html=False) else: decisions = [] for i in indices: if i <= switching_point: decisions.append('A') else: decisions.append('B') choices = zip(form_fields, decisions) # yield (pages.MplRespNeg, { # i: j for i, j in choices # }) yield Submission(pages.MplRespPos, { i: j for i, j in choices }, check_html=False) if self.subsession.round_number == Constants.num_rounds: yield(pages.End) # if Constants.results: # if Constants.one_choice_per_page: # if page == Constants.num_choices: # yield (pages.End) # else: # yield (pages.End) # #