import gradio as gr import matplotlib import matplotlib.pyplot as plt from quantum_perceptron import Perceptron matplotlib.pyplot.switch_backend('Agg') def run_perceptron( num_qubits: int, input_value: int, weight_value: int, num_iters: int ): p = Perceptron(num_qubits, weight_value, input_value) counts = p.measure_circuit(num_iters) counts.setdefault('0', 0) counts.setdefault('1', 0) prob_1 = counts['1'] / num_iters freq_hist = plt.figure() plt.bar(counts.keys(), counts.values(), width=0.5) for i, v in enumerate(list(counts.values())): plt.text(i, v+10, v) plt.xlabel('Measured State') plt.ylabel('Frequency of Measured State') freq_hist.subplots_adjust(top=0.2) freq_hist.tight_layout() return prob_1, freq_hist app_inputs = [ gr.Slider(1, 9, value=2, step=1, label="Number of Qubits"), gr.Number(value=12, label="Input Value", precision=0), gr.Number(value=13, label="Weight Value", precision=0), gr.Number(value=1000, label="Number of Measurement Iterations", precision=0), ] app_outputs = [ gr.Number(precision=2, label="Probability of Firing Perceptron"), gr.Plot(label="Distribution of Measurement Frequencies") ] demo = gr.Interface( fn=run_perceptron, inputs=app_inputs, outputs=app_outputs, title="Simulate Quantum Perceptron", ) demo.launch()