|
import streamlit as st |
|
from qiskit import QuantumCircuit, transpile |
|
from qiskit_aer import AerSimulator |
|
import io |
|
import sys |
|
|
|
|
|
st.title("Quantum Circuit Simulator with Examples") |
|
st.write("Select a quantum circuit example to load and simulate.") |
|
|
|
|
|
examples = { |
|
"1. Empty Circuit": """ |
|
from qiskit import QuantumCircuit |
|
qc = QuantumCircuit(1) |
|
print("Empty circuit created.") |
|
""", |
|
"2. Single Qubit Hadamard": """ |
|
from qiskit import QuantumCircuit |
|
from qiskit_aer import AerSimulator |
|
|
|
qc = QuantumCircuit(1, 1) |
|
qc.h(0) |
|
qc.measure(0, 0) |
|
|
|
simulator = AerSimulator() |
|
compiled_circuit = transpile(qc, simulator) |
|
result = simulator.run(compiled_circuit, shots=1024).result() |
|
counts = result.get_counts() |
|
print(counts) |
|
""", |
|
"3. Bell State": """ |
|
from qiskit import QuantumCircuit |
|
from qiskit_aer import AerSimulator |
|
|
|
qc = QuantumCircuit(2, 2) |
|
qc.h(0) |
|
qc.cx(0, 1) |
|
qc.measure([0, 1], [0, 1]) |
|
|
|
simulator = AerSimulator() |
|
compiled_circuit = transpile(qc, simulator) |
|
result = simulator.run(compiled_circuit, shots=1024).result() |
|
counts = result.get_counts() |
|
print(counts) |
|
""", |
|
"4. GHZ State": """ |
|
from qiskit import QuantumCircuit |
|
from qiskit_aer import AerSimulator |
|
|
|
qc = QuantumCircuit(3, 3) |
|
qc.h(0) |
|
qc.cx(0, 1) |
|
qc.cx(1, 2) |
|
qc.measure([0, 1, 2], [0, 1, 2]) |
|
|
|
simulator = AerSimulator() |
|
compiled_circuit = transpile(qc, simulator) |
|
result = simulator.run(compiled_circuit, shots=1024).result() |
|
counts = result.get_counts() |
|
print(counts) |
|
""", |
|
"5. Deutsch Algorithm": """ |
|
from qiskit import QuantumCircuit |
|
from qiskit_aer import AerSimulator |
|
|
|
qc = QuantumCircuit(2, 1) |
|
qc.h([0, 1]) |
|
qc.cx(0, 1) |
|
qc.h(0) |
|
qc.measure(0, 0) |
|
|
|
simulator = AerSimulator() |
|
compiled_circuit = transpile(qc, simulator) |
|
result = simulator.run(compiled_circuit, shots=1024).result() |
|
counts = result.get_counts() |
|
print(counts) |
|
""", |
|
"6. Quantum Teleportation": """ |
|
from qiskit import QuantumCircuit |
|
from qiskit_aer import AerSimulator |
|
|
|
qc = QuantumCircuit(3, 3) |
|
qc.h(1) |
|
qc.cx(1, 2) |
|
qc.cx(0, 1) |
|
qc.h(0) |
|
qc.measure([0, 1], [0, 1]) |
|
qc.cx(1, 2) |
|
qc.cz(0, 2) |
|
qc.measure(2, 2) |
|
|
|
simulator = AerSimulator() |
|
compiled_circuit = transpile(qc, simulator) |
|
result = simulator.run(compiled_circuit, shots=1024).result() |
|
counts = result.get_counts() |
|
print(counts) |
|
""", |
|
"7. DNA Base Pair Encoding": """ |
|
from qiskit import QuantumCircuit |
|
qc = QuantumCircuit(2, 2) |
|
|
|
# DNA Base Pair Encoding: A -> 00, T -> 01, G -> 10, C -> 11 |
|
qc.x(0) # Example encoding for T (01) |
|
qc.measure([0, 1], [0, 1]) |
|
|
|
simulator = AerSimulator() |
|
compiled_circuit = transpile(qc, simulator) |
|
result = simulator.run(compiled_circuit, shots=1024).result() |
|
counts = result.get_counts() |
|
print(counts) |
|
""", |
|
"8. DNA Sequence Matching with Grover's Algorithm": """ |
|
from qiskit import QuantumCircuit, Aer |
|
from qiskit_aer import AerSimulator |
|
from qiskit.circuit.library import GroverOperator |
|
from qiskit.algorithms import AmplificationProblem |
|
|
|
# Oracle marks the target sequence |
|
def oracle(circuit): |
|
circuit.cz(0, 1) # Mark sequence 01 as a solution |
|
|
|
qc = QuantumCircuit(2) |
|
oracle(qc) |
|
|
|
# Grover search for the sequence |
|
problem = AmplificationProblem(qc) |
|
grover_circuit = GroverOperator(problem) |
|
simulator = AerSimulator() |
|
|
|
compiled_circuit = transpile(grover_circuit, simulator) |
|
result = simulator.run(compiled_circuit, shots=1024).result() |
|
counts = result.get_counts() |
|
print(counts) |
|
""", |
|
"9. Genetic Variant Interaction": """ |
|
from qiskit import QuantumCircuit, Aer |
|
from qiskit_aer import AerSimulator |
|
|
|
# Genetic variants as entangled qubits |
|
qc = QuantumCircuit(2, 2) |
|
qc.h(0) # Variant 1 in superposition |
|
qc.cx(0, 1) # Entangle with Variant 2 |
|
qc.measure([0, 1], [0, 1]) |
|
|
|
simulator = AerSimulator() |
|
compiled_circuit = transpile(qc, simulator) |
|
result = simulator.run(compiled_circuit, shots=1024).result() |
|
counts = result.get_counts() |
|
print(counts) |
|
""", |
|
"10. DNA Alignment Scoring": """ |
|
from qiskit import QuantumCircuit, Aer |
|
from qiskit_aer import AerSimulator |
|
|
|
# Create a Quantum Circuit for DNA alignment |
|
qc = QuantumCircuit(3, 3) |
|
|
|
# Simulate possible alignments with superposition |
|
qc.h([0, 1, 2]) # 3 alignments in parallel |
|
qc.measure([0, 1, 2], [0, 1, 2]) |
|
|
|
simulator = AerSimulator() |
|
compiled_circuit = transpile(qc, simulator) |
|
result = simulator.run(compiled_circuit, shots=1024).result() |
|
counts = result.get_counts() |
|
print(counts) |
|
""", |
|
"11. Protein Folding Simulation with QAOA": """ |
|
from qiskit import Aer, QuantumCircuit |
|
from qiskit.algorithms.optimizers import COBYLA |
|
from qiskit_aer import AerSimulator |
|
from qiskit.algorithms.minimum_eigensolvers import QAOA |
|
from qiskit.circuit.library import TwoLocal |
|
|
|
# Build a QAOA circuit for protein folding |
|
p = 1 |
|
ansatz = TwoLocal(2, "ry", "cz", reps=p) |
|
qaoa = QAOA(ansatz=ansatz, optimizer=COBYLA()) |
|
|
|
# Simulate energy minimization |
|
simulator = AerSimulator() |
|
qaoa_result = qaoa.compute_minimum_eigenvalue(operator=None) |
|
print(qaoa_result) |
|
""" |
|
} |
|
|
|
|
|
selected_example = st.selectbox("Select a Quantum Circuit Example", list(examples.keys())) |
|
|
|
|
|
st.subheader("Selected Quantum Circuit Code") |
|
st.text_area("Code", examples[selected_example], height=300) |
|
|
|
|
|
if st.button("Run"): |
|
try: |
|
|
|
old_stdout = sys.stdout |
|
redirected_output = io.StringIO() |
|
sys.stdout = redirected_output |
|
|
|
|
|
exec(examples[selected_example]) |
|
|
|
|
|
output = redirected_output.getvalue() |
|
st.success("Execution successful!") |
|
st.text_area("Output", output, height=200) |
|
except Exception as e: |
|
st.error(f"An error occurred: {e}") |
|
finally: |
|
|
|
sys.stdout = old_stdout |
|
|