yachty66's picture
Initial commit
0b89e83
import gradio as gr
from random import shuffle
import matplotlib.pyplot as plt
import pickle
DISCLAIMER = "**Caution! The questions from the test are AI generated and have not been validated by qualified persons. Therefore, interpret the test at your own risk.**"
def validate_form(*inputs):
score_map = {
"Strongly Agree": 2,
"Agree": 1,
"Neutral": 0,
"Disagree": -1,
"Strongly Disagree": -2
}
x_right = 0
x_left = 0
number_questions = len(inputs)
for input_index in range(number_questions):
checkbox = inputs[input_index]
if checkbox is None:
raise gr.Error("You forgot a checkbox!")
tag = INPUT_INFO[input_index]["tag"]
key = [k for k, v in LABELLING.items() if v == tag][0]
if key == "x_right":
x_right += score_map[checkbox]
else:
x_left += score_map[checkbox]
final = x_right + (-x_left)
fig, ax = plt.subplots()
ax.hlines(1, 2*(-number_questions), 2*number_questions, linestyles='solid')
ax.plot(final, 1, 'ro')
ax.set_xticks([2*(-number_questions), 0, 2*number_questions])
ax.set_xticklabels([LABELLING["x_left"], 'Neutral', LABELLING["x_right"]])
ax.get_yaxis().set_visible(False)
return plt
with open('data.pkl', 'rb') as f:
data = pickle.load(f)
title = data["title"]
description = data["description"]
questions_x_right_formatted = data["questions_x_right_formatted"]
questions_x_left_formatted = data["questions_x_left_formatted"]
LABELLING = data["LABELLING"]
INPUT_INFO = data["INPUT_INFO"]
combined_questions = questions_x_left_formatted + questions_x_right_formatted
shuffle(combined_questions)
with gr.Blocks() as demo:
title = gr.Markdown(f"# {title}")
description = gr.Markdown(description)
disclaimer = gr.Markdown(DISCLAIMER)
inputs = []
for question_dict in combined_questions:
question = list(question_dict.keys())[0]
tag = list(question_dict.values())[0]
checkbox = gr.inputs.Radio(choices=["Strongly Agree", "Agree", "Neutral", "Disagree", "Strongly Disagree"], label=question)
inputs.append(checkbox)
input_dict = {"question": question, "tag": tag}
INPUT_INFO.append(input_dict)
submit_button = gr.Button("Submit")
plot = gr.Plot(label="Plot")
submit_button.click(fn=validate_form, inputs=inputs, outputs=[plot], api_name="Submit")
demo.launch()