from otree.api import Currency as c, currency_range from ._builtin import Page, WaitPage from .models import Constants import numpy as np import random import os def convert_model_index_to_model(index): if index == 0: return "progressive" if index == 1: return "stylegan" if index == 2: return "stylegan2" raise ValueError("Panic!!") AWS_ORIGINAL_FOLDER = "https://identifiability.s3.us-east-2.amazonaws.com/original_2000_jpeg_2/" AWS_RECONSTRUCTION_FOLDER = "https://identifiability.s3.us-east-2.amazonaws.com/user_study_jpeg/" def get_image_url(model, image, index, sub_index, is_placebo, label_match, image_path_original): if is_placebo and label_match: return image_path_original else: return os.path.join(AWS_RECONSTRUCTION_FOLDER, "model_{}".format(model), "image_{}".format(image), "t-{}".format(str(index)), 'reconstruction_{}.png'.format(str(sub_index))) class Demographics(Page): form_model = 'player' form_fields = ['choice'] def vars_for_template(self): # rr = self.player.participant.vars['img_order'] image_order = self.player.participant.vars['img_order'][self.round_number - 1] model, index, is_placebo, label, display_order_tem = image_order model_name = convert_model_index_to_model(model) image_path_original = os.path.join( AWS_ORIGINAL_FOLDER, str(model), "{}-target.jpg".format(str(image_order[1]))) # display_order = ['progressive', "stylegan", "stylegan2"] # random.shuffle(display_order) # while(display_order[label] != model_name): # random.shuffle(display_order) display_order = [convert_model_index_to_model( x) for x in display_order_tem] group_order = [0, 1, 2] random.shuffle(group_order) image_path_1_1 = get_image_url( display_order[0], model_name, index, group_order[0], is_placebo, label == 0, image_path_original) image_path_1_2 = get_image_url( display_order[0], model_name, index, group_order[1], is_placebo, label == 0, image_path_original) image_path_1_3 = get_image_url( display_order[0], model_name, index, group_order[2], is_placebo, label == 0, image_path_original) random.shuffle(group_order) image_path_2_1 = get_image_url( display_order[1], model_name, index, group_order[0], is_placebo, label == 1, image_path_original) image_path_2_2 = get_image_url( display_order[1], model_name, index, group_order[1], is_placebo, label == 1, image_path_original) image_path_2_3 = get_image_url( display_order[1], model_name, index, group_order[2], is_placebo, label == 1, image_path_original) random.shuffle(group_order) image_path_3_1 = get_image_url( display_order[2], model_name, index, group_order[0], is_placebo, label == 2, image_path_original) image_path_3_2 = get_image_url( display_order[2], model_name, index, group_order[1], is_placebo, label == 2, image_path_original) image_path_3_3 = get_image_url( display_order[2], model_name, index, group_order[2], is_placebo, label == 2, image_path_original) self.player.label = label self.player.image_index = index self.player.model_index = image_order[label] # self.player.participant.vars['code'] return dict(n_rounds=Constants.num_rounds, c_rounds=self.round_number, image_path_original=image_path_original, image_path_1_1=image_path_1_1, image_path_1_2=image_path_1_2, image_path_1_3=image_path_1_3, image_path_2_1=image_path_2_1, image_path_2_2=image_path_2_2, image_path_2_3=image_path_2_3, image_path_3_1=image_path_3_1, image_path_3_2=image_path_3_2, image_path_3_3=image_path_3_3) # return dict(body_text=f"{rr}") # def get_img(num): # return img class Payment(Page): def is_displayed(self): return self.player.round_number == Constants.num_rounds def vars_for_template(self): self.player.code = self.player.participant.vars['code'] fee = self.session.config['participation_fee'] return { 'code': self.player.code, 'fee': fee, } class Intro(Page): def is_displayed(self): return self.player.round_number == 1 # TODO: add timeout on the next buttons page_sequence = [Intro, Demographics, Payment]