Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| from qiskit import QuantumCircuit, transpile | |
| from qiskit_aer import AerSimulator | |
| import io | |
| import sys | |
| # Title for the Streamlit app | |
| st.title("Quantum Circuit Simulator with Examples") | |
| st.write("Select a quantum circuit example to load and simulate.") | |
| # Define 20 quantum circuit examples (easy to complicated) | |
| 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. QUBO": """ | |
| import numpy as np | |
| # Qiskit / Qiskit Optimization imports | |
| from qiskit import Aer | |
| from qiskit.utils import QuantumInstance | |
| from qiskit.algorithms import QAOA | |
| from qiskit.algorithms.optimizers import SPSA | |
| from qiskit_optimization import QuadraticProgram | |
| from qiskit_optimization.algorithms import MinimumEigenOptimizer | |
| # 1) Define a small QUBO with two binary variables | |
| problem = QuadraticProgram("my_qubo") | |
| problem.binary_var("x0") | |
| problem.binary_var("x1") | |
| # Objective: minimize: H = x0 + 2*x1 + x0*x1 | |
| problem.minimize( | |
| linear={"x0": 1, "x1": 2}, | |
| quadratic={("x0", "x1"): 1} | |
| ) | |
| # Print to confirm the problem is not empty | |
| print("--- Quadratic Program ---") | |
| print(problem.export_as_lp_string()) | |
| # 2) Set up QAOA solver on the qasm_simulator | |
| backend = Aer.get_backend('qasm_simulator') | |
| quantum_instance = QuantumInstance( | |
| backend=backend, | |
| shots=512, | |
| seed_simulator=42, | |
| seed_transpiler=42 | |
| ) | |
| qaoa = QAOA( | |
| optimizer=SPSA(maxiter=50), reps=2, quantum_instance=quantum_instance | |
| ) | |
| solver = MinimumEigenOptimizer(qaoa) | |
| # 3) Solve the QUBO | |
| result = solver.solve(problem) | |
| print("--- QAOA Results ---") | |
| print("Optimal solution:", result.x) | |
| print("Objective value:", result.fval) | |
| """, | |
| "9. DNA Sequence Matching with Grover's Algorithm": """ | |
| from qiskit import QuantumCircuit, transpile | |
| from qiskit_aer import AerSimulator | |
| from qiskit.circuit.library import GroverOperator | |
| # Define the oracle circuit to mark the solution state |01> | |
| def create_oracle(): | |
| oracle_circuit = QuantumCircuit(2) | |
| oracle_circuit.cz(0, 1) # Mark |01> as the solution | |
| return oracle_circuit | |
| # Define the full Grover search circuit | |
| def create_grover_circuit(): | |
| oracle = create_oracle() | |
| grover_circuit = QuantumCircuit(2, 2) | |
| # Apply Hadamard to all qubits | |
| grover_circuit.h([0, 1]) | |
| # Apply the oracle | |
| grover_circuit.append(oracle.to_gate(), [0, 1]) | |
| # Apply Grover diffusion operator | |
| grover_circuit.h([0, 1]) | |
| grover_circuit.x([0, 1]) | |
| grover_circuit.h(1) | |
| grover_circuit.cz(0, 1) | |
| grover_circuit.h(1) | |
| grover_circuit.x([0, 1]) | |
| grover_circuit.h([0, 1]) | |
| # Measure the qubits | |
| grover_circuit.measure([0, 1], [0, 1]) | |
| return grover_circuit | |
| # Create the Grover circuit | |
| grover_circuit = create_grover_circuit() | |
| # Use AerSimulator as the backend | |
| simulator = AerSimulator() | |
| # Transpile and execute the circuit | |
| compiled_circuit = transpile(grover_circuit, simulator) | |
| result = simulator.run(compiled_circuit, shots=1024).result() | |
| # Retrieve and print the counts | |
| counts = result.get_counts() | |
| print(counts) | |
| """ | |
| } | |
| # Selection menu for examples | |
| selected_example = st.selectbox("Select a Quantum Circuit Example", list(examples.keys())) | |
| # Display selected example code | |
| st.subheader("Selected Quantum Circuit Code") | |
| st.text_area("Code", examples[selected_example], height=300) | |
| # Run button | |
| if st.button("Run"): | |
| try: | |
| # Redirect stdout to capture print output | |
| old_stdout = sys.stdout | |
| redirected_output = io.StringIO() | |
| sys.stdout = redirected_output | |
| # Execute the selected example | |
| exec(examples[selected_example]) | |
| # Retrieve and display output | |
| 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: | |
| # Reset stdout | |
| sys.stdout = old_stdout | |