| """ |
| QASM circuit library and MPS-engine gate dispatch. |
| |
| Split out of the former monolithic dashboard_core.py (Phase 1 of the |
| dashboard refactor) -- pure move, no behavior change. |
| """ |
|
|
| import numpy as np |
|
|
| import dense_evolution.gates as _mps_gates_module |
| from dense_evolution.mps import MPSSimulator |
|
|
|
|
| def _run_on_mps(comandi_beast_mode, n_qubits, max_bond=64, jsd_budget=1e-5): |
| """Executes comandi_beast_mode (the same [name, *args] list the dense |
| beast-mode path consumes) through MPSSimulator, gate by gate, via |
| dense_evolution.gates' GATES/PARAMETRIC_GATES tables (converted from |
| JAX to numpy -- MPSSimulator's einsum core is plain numpy). |
| |
| u2/u3 are skipped with a warning: comandi_beast_mode only carries a |
| single parameter slot per gate (see the parsing loop in |
| _run_simulation_body), which can't represent u2's 2 or u3's 3 |
| independent parameters -- the same pre-existing limitation the dense |
| beast-mode path already has for these two gates, not something new |
| introduced here.""" |
| mps = MPSSimulator(n_qubits=n_qubits, max_bond=max_bond, jsd_budget=jsd_budget) |
| for cmd in comandi_beast_mode: |
| nome_porta = cmd[0] |
| if nome_porta in ('h', 'x', 'y', 'z', 's', 'sdg', 't', 'tdg'): |
| gate = np.array(_mps_gates_module.GATES[nome_porta]) |
| mps.apply_gate_1q(gate, cmd[1]) |
| elif nome_porta in ('rx', 'ry', 'rz', 'u1', 'p'): |
| gate = np.array(_mps_gates_module.PARAMETRIC_GATES[nome_porta](cmd[2])) |
| mps.apply_gate_1q(gate, cmd[1]) |
| elif nome_porta in ('u2', 'u3'): |
| print(f"Warning: motore MPS salta la porta '{nome_porta}' (richiede piu' " |
| "di un parametro, non rappresentabile nel formato beast-mode corrente).") |
| elif nome_porta == 'cx': |
| mps.apply_cx(cmd[1], cmd[2]) |
| elif nome_porta == 'cz': |
| mps.apply_cz(cmd[1], cmd[2]) |
| elif nome_porta == 'swap': |
| mps.apply_swap(cmd[1], cmd[2]) |
| elif nome_porta == 'cy': |
| gate = np.array(_mps_gates_module.GATES['cy']).reshape(2, 2, 2, 2) |
| mps.apply_gate_2q(gate, cmd[1], cmd[2]) |
| elif nome_porta in ('cp', 'crz'): |
| gate = np.array(_mps_gates_module.PARAMETRIC_GATES[nome_porta](cmd[3])).reshape(2, 2, 2, 2) |
| mps.apply_gate_2q(gate, cmd[1], cmd[2]) |
| elif nome_porta in ('ccx', 'toffoli'): |
| mps.apply_ccx(cmd[1], cmd[2], cmd[3]) |
| else: |
| print(f"Warning: motore MPS salta la porta non gestita: {nome_porta}") |
| return mps |
|
|
|
|
| QASM_LIBRARY = { |
| 'Bell |Φ+⟩': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[2]; creg c[2]; h q[0]; cx q[0],q[1]; measure q -> c;', |
| 'QFT 4 qubit': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[4]; creg c[4]; ry(pi/4) q[0]; ry(pi/4) q[2]; h q[3]; cp(pi/2) q[2],q[3]; cp(pi/4) q[1],q[3]; cp(pi/8) q[0],q[3]; h q[2]; cp(pi/2) q[1],q[2]; cp(pi/4) q[0],q[2]; h q[1]; cp(pi/2) q[0],q[1]; h q[0]; swap q[0],q[3]; swap q[1],q[2]; barrier q; measure q -> c;', |
| 'Simon_Algorithm_4q_s11': |
| 'OPENQASM 2.0; include "qelib1.inc"; qreg q[4]; creg c[4]; ' |
| '// Simon: f(x)=f(x+11), q[0:1]=input, q[2:3]=output\n' |
| 'h q[0]; h q[1]; barrier q; ' |
| 'cx q[0],q[2]; cx q[1],q[3]; cx q[0],q[3]; barrier q; ' |
| 'h q[0]; h q[1]; ' |
| 'measure q[0] -> c[0]; measure q[1] -> c[1]; ' |
| 'measure q[2] -> c[2]; measure q[3] -> c[3];', |
| 'Grover_3q_Oracle_111': |
| 'OPENQASM 2.0; include "qelib1.inc"; qreg q[3]; creg c[3]; ' |
| '// Init\n' |
| 'h q[0]; h q[1]; h q[2]; barrier q; ' |
| '// Oracle CCZ on |111>\n' |
| 'h q[2]; ccx q[0],q[1],q[2]; h q[2]; barrier q; ' |
| '// Diffuser\n' |
| 'h q[0]; h q[1]; h q[2]; ' |
| 'x q[0]; x q[1]; x q[2]; ' |
| 'h q[2]; ccx q[0],q[1],q[2]; h q[2]; ' |
| 'x q[0]; x q[1]; x q[2]; ' |
| 'h q[0]; h q[1]; h q[2]; ' |
| 'barrier q; measure q -> c;', |
| 'Dicke_State_D42': |
| 'OPENQASM 2.0; include "qelib1.inc"; qreg q[4]; creg c[4]; ' |
| '// Dicke |D(4,2)> approx via SCS\n' |
| 'h q[0]; h q[1]; h q[2]; h q[3]; ' |
| 'cx q[0],q[1]; cx q[2],q[3]; ' |
| 'rz(1.5708) q[1]; rz(1.5708) q[3]; ' |
| 'cx q[0],q[1]; cx q[2],q[3]; ' |
| 'ry(0.9553) q[0]; ry(0.9553) q[2]; ' |
| 'cx q[0],q[2]; ' |
| 'barrier q; measure q -> c;', |
| 'MultiControlled_Z_5q': |
| 'OPENQASM 2.0; include "qelib1.inc"; qreg q[5]; creg c[5]; ' |
| '// 4-controlled Z via T-gate decomposition\n' |
| 'h q[0]; h q[1]; h q[2]; h q[3]; h q[4]; ' |
| 'ccx q[0],q[1],q[3]; ' |
| 'ccx q[2],q[3],q[4]; ' |
| 't q[0]; t q[1]; t q[2]; tdg q[3]; tdg q[4]; ' |
| 'cx q[0],q[1]; cx q[2],q[3]; ' |
| 'tdg q[1]; t q[3]; ' |
| 'cx q[0],q[1]; cx q[2],q[3]; ' |
| 'ccx q[1],q[2],q[4]; ' |
| 'h q[0]; h q[1]; h q[2]; h q[3]; h q[4]; ' |
| 'barrier q; measure q -> c;', |
| 'Anyonic_Braiding_Fibonacci_6q': |
| 'OPENQASM 2.0; include "qelib1.inc"; qreg q[6]; creg c[6]; ' |
| '// Fibonacci anyon braiding: sigma_1 sigma_2 sequence\n' |
| 'h q[0]; h q[1]; h q[2]; h q[3]; h q[4]; h q[5]; ' |
| 'cz q[0],q[1]; ry(1.2566) q[1]; ' |
| 'cz q[1],q[2]; ry(1.2566) q[2]; ' |
| 'cz q[0],q[2]; ry(0.9425) q[0]; ' |
| 'cz q[2],q[3]; ry(1.2566) q[3]; ' |
| 'cz q[3],q[4]; ry(1.2566) q[4]; ' |
| 'cz q[2],q[4]; ' |
| 'rz(3.0718) q[1]; rz(3.0718) q[3]; ' |
| 'cx q[0],q[5]; cx q[2],q[5]; cx q[4],q[5]; ' |
| 'rz(0.7) q[0]; rz(0.7) q[2]; rz(0.7) q[4]; ' |
| 'barrier q; measure q -> c;', |
| 'Peptide_Furin_RRAR_8q': |
| 'OPENQASM 2.0; include "qelib1.inc"; qreg q[8]; creg c[8]; ' |
| '// SARS-CoV-2 furin site: RRAR|S PDF-encoded\n' |
| 'ry(0.8727) q[0]; ry(0.5236) q[1]; ry(0.8727) q[2]; ry(0.8727) q[3]; ' |
| 'ry(0.3927) q[4]; ry(0.2094) q[5]; ry(0.7854) q[6]; ry(0.4712) q[7]; ' |
| 'rz(1.9106) q[0]; rz(1.9106) q[1]; rz(1.9106) q[2]; rz(1.9106) q[3]; ' |
| 'rz(1.9106) q[4]; rz(1.9106) q[5]; rz(1.9106) q[6]; rz(1.9106) q[7]; ' |
| 'cx q[0],q[1]; cx q[2],q[3]; cx q[4],q[5]; cx q[6],q[7]; ' |
| 'cx q[1],q[2]; cx q[3],q[4]; cx q[5],q[6]; ' |
| 'rz(0.7) q[0]; rz(0.7) q[1]; rz(0.7) q[2]; rz(0.7) q[3]; ' |
| 'rz(0.7) q[4]; rz(0.7) q[5]; rz(0.7) q[6]; rz(0.7) q[7]; ' |
| 'barrier q; measure q -> c;', |
| 'Grover Motif Search (0011)': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[4]; creg c[4]; h q[0]; h q[1]; h q[2]; h q[3]; x q[2]; x q[3]; h q[3]; ccx q[0],q[2],q[3]; cx q[1],q[3]; h q[3]; x q[2]; x q[3]; h q[0]; h q[1]; h q[2]; h q[3]; x q[0]; x q[1]; x q[2]; x q[3]; h q[3]; ccx q[0],q[1],q[3]; cx q[2],q[3]; h q[3]; x q[0]; x q[1]; x q[2]; x q[3]; h q[0]; h q[1]; h q[2]; h q[3]; measure q -> c;', |
| 'Quantum Neural Neuron': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[4]; creg c[4]; ry(pi/4) q[0]; ry(pi/4) q[1]; ry(pi/4) q[2]; ry(pi/4) q[3]; barrier q; cx q[0],q[1]; cx q[1],q[2]; cx q[2],q[3]; u3(0.1,0,0) q[0]; u3(0.5,0,0) q[1]; u3(-0.3,0,0) q[2]; u3(0.8,0,0) q[3]; measure q -> c;', |
| 'Approx QFT (Optimized)': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[4]; creg c[4]; h q[3]; cp(pi/2) q[2],q[3]; cp(pi/4) q[1],q[3]; h q[2]; cp(pi/2) q[1],q[2]; h q[1]; cp(pi/2) q[0],q[1]; h q[0]; barrier q; measure q -> c;', |
| 'Quantum Neural Layer': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[4]; creg c[4]; rz(pi/4) q[0]; rz(pi/4) q[1]; rz(pi/4) q[2]; rz(pi/4) q[3]; barrier q; cx q[0],q[1]; cx q[1],q[2]; cx q[2],q[3]; cx q[3],q[0]; ry(0.5) q[0]; ry(0.5) q[1]; ry(0.5) q[2]; ry(0.5) q[3]; measure q -> c;', |
| 'Quantum Game Theory': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[2]; creg c[2]; cx q[0],q[1]; h q[0]; x q[1]; u3(pi/2,0,pi/2) q[0]; u3(pi/2,0,pi/2) q[1]; h q[0]; x q[1]; cx q[0],q[1]; measure q -> c;', |
| 'Quantum Teleportation': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[3]; creg c[2]; h q[1]; cx q[1],q[2]; cx q[0],q[1]; h q[0]; measure q[0] -> c[0]; measure q[1] -> c[1]; x q[2] if(c[1]==1); z q[2] if(c[0]==1);', |
| 'Pixel Encoder (Phase)': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[2]; creg c[1]; h q[0]; h q[1]; cu1(pi/4) q[0],q[1]; measure q[1] -> c[0];', |
| 'Hardware Stress Test': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[1]; creg c[1]; h q[0]; barrier q[0]; id q[0]; id q[0]; id q[0]; measure q[0] -> c[0];', |
| 'Universal Swap Test (3q)': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[3]; creg c[1]; h q[0]; cswap q[0],q[1],q[2]; h q[0]; measure q[0] -> c[0];', |
| 'Bio-Sequence Matcher (8q)': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[8]; creg c[8]; h q[0]; h q[1]; h q[2]; h q[3]; h q[4]; h q[5]; h q[6]; h q[7]; cx q[0],q[4]; cx q[1],q[5]; cp(pi/4) q[0],q[4]; cp(pi/2) q[1],q[5]; cx q[2],q[6]; cx q[3],q[7]; cp(pi/8) q[2],q[6]; x q[4]; x q[5]; x q[6]; x q[7]; h q[7]; ccx q[4],q[5],q[7]; ccx q[6],q[7],q[3]; h q[7]; x q[4]; x q[5]; x q[6]; x q[7]; h q[0]; h q[1]; h q[2]; h q[3]; x q[0]; x q[1]; x q[2]; x q[3]; h q[3]; ccx q[0],q[1],q[3]; h q[3]; x q[0]; x q[1]; x q[2]; x q[3]; h q[0]; h q[1]; h q[2]; h q[3]; measure q -> c;', |
| 'Grover AA Lys Search (K=01011)': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[5]; creg c[5]; h q[0]; h q[1]; h q[2]; h q[3]; h q[4]; x q[0]; x q[2]; x q[4]; h q[4]; ccx q[0],q[1],q[4]; cx q[2],q[4]; cx q[3],q[4]; h q[4]; x q[0]; x q[2]; x q[4]; h q[0]; h q[1]; h q[2]; h q[3]; h q[4]; x q[0]; x q[1]; x q[2]; x q[3]; x q[4]; h q[4]; ccx q[0],q[2],q[4]; cx q[1],q[4]; cx q[3],q[4]; h q[4]; x q[0]; x q[1]; x q[2]; x q[3]; x q[4]; h q[0]; h q[1]; h q[2]; h q[3]; h q[4]; measure q -> c;', |
| 'Alpha-helix Detector (5q)': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[5]; creg c[5]; h q[0]; h q[1]; h q[2]; h q[3]; h q[4]; cx q[0],q[2]; cx q[1],q[3]; rz(0.5) q[2]; rz(-0.25) q[3]; cx q[0],q[2]; cx q[1],q[3]; cx q[2],q[4]; cx q[3],q[4]; rz(0.785) q[4]; cx q[3],q[4]; cx q[2],q[4]; h q[0]; h q[1]; h q[2]; h q[3]; measure q -> c;', |
| 'HP Lattice 5-mer (10q)': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[10]; creg c[10]; h q[0]; h q[1]; h q[2]; h q[3]; h q[4]; h q[5]; h q[6]; h q[7]; h q[8]; h q[9]; cx q[0],q[2]; cx q[1],q[3]; cx q[4],q[6]; cx q[5],q[7]; rz(0.785) q[2]; rz(0.392) q[3]; rz(-0.392) q[6]; rz(-0.785) q[7]; cx q[0],q[2]; cx q[1],q[3]; cx q[4],q[6]; cx q[5],q[7]; cx q[2],q[4]; cx q[3],q[5]; cx q[6],q[8]; cx q[7],q[9]; rz(0.5) q[4]; rz(-0.5) q[5]; rz(0.25) q[8]; rz(-0.25) q[9]; cx q[2],q[4]; cx q[3],q[5]; cx q[6],q[8]; cx q[7],q[9]; measure q -> c;', |
| 'VQE BeH2 (8q-UCCSD)': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[8]; creg c[8]; x q[0]; x q[1]; x q[2]; h q[0]; h q[1]; h q[2]; h q[3]; cx q[0],q[1]; cx q[1],q[2]; cx q[2],q[3]; cx q[3],q[4]; rz(0.18) q[4]; rz(0.09) q[6]; cx q[3],q[4]; cx q[2],q[3]; cx q[1],q[2]; cx q[0],q[1]; h q[4]; cx q[4],q[5]; cx q[5],q[6]; cx q[6],q[7]; rz(-0.18) q[7]; cx q[6],q[7]; cx q[5],q[6]; cx q[4],q[5]; h q[4]; measure q -> c;', |
| 'Bernstein-Vazirani (101)': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[4]; creg c[4]; h q[0]; h q[1]; h q[2]; x q[3]; h q[3]; cx q[0],q[3]; cx q[2],q[3]; h q[0]; h q[1]; h q[2]; measure q -> c;', |
| 'Deutsch-Jozsa bilanciata': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[3]; creg c[3]; h q[0]; h q[1]; x q[2]; h q[2]; cx q[0],q[2]; cx q[1],q[2]; h q[0]; h q[1]; measure q -> c;', |
| 'Toffoli (CCX)': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[3]; creg c[3]; h q[2]; cx q[1],q[2]; tdg q[2]; cx q[0],q[2]; t q[2]; cx q[1],q[2]; tdg q[2]; cx q[0],q[2]; t q[1]; t q[2]; h q[2]; cx q[0],q[1]; t q[0]; tdg q[1]; cx q[0],q[1]; measure q -> c;', |
| 'Grover 3q target 101': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[3]; creg c[3]; h q[0]; h q[1]; h q[2]; x q[0]; x q[1]; h q[2]; ccx q[0],q[1],q[2]; h q[2]; x q[0]; x q[1]; h q[0]; h q[1]; x q[0]; x q[1]; h q[1]; cx q[0],q[1]; h q[1]; x q[0]; x q[1]; h q[0]; h q[1]; measure q->c;', |
| 'VQE ansatz H₂': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[2]; creg c[2]; ry(0.5) q[0]; rx(0.5) q[1]; cx q[0],q[1]; rz(0.2) q[1]; cx q[0],q[1]; ry(0.5) q[0]; rx(0.5) q[1]; measure q -> c;', |
| 'Adder 2-bit': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[5]; creg c[5]; cx q[0],q[3]; cx q[1],q[3]; ccx q[0],q[1],q[4]; cx q[2],q[4]; cx q[3],q[4]; measure q -> c;', |
| 'Quantum Supremacy (toy)': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[5]; creg c[5]; h q[0]; h q[1]; h q[2]; h q[3]; h q[4]; cx q[0],q[1]; cx q[1],q[2]; cx q[2],q[3]; cx q[3],q[4]; rx(pi/4) q[0]; ry(pi/4) q[1]; rz(pi/4) q[2]; rx(pi/4) q[3]; ry(pi/4) q[4]; cx q[0],q[1]; cx q[1],q[2]; cx q[2],q[3]; cx q[3],q[4]; measure q -> c;', |
| 'Random Entanglement': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[4]; creg c[4]; h q[0]; h q[1]; h q[2]; h q[3]; cx q[0],q[1]; rz(0.3) q[1]; cx q[2],q[3]; ry(0.7) q[3]; cx q[1],q[2]; measure q -> c;', |
| 'HP Lattice 3-mer (6q)': '''include "qelib1.inc"; |
| // HP Lattice 3-mer: HHP |
| // 2 turn angles * 2 qubit + 2 ancilla |
| qreg q[6]; |
| creg c[6]; |
| h q[0]; h q[1]; h q[2]; h q[3]; |
| cx q[0],q[1]; cx q[2],q[3]; |
| rz(0.785) q[1]; rz(-0.392) q[3]; |
| cx q[0],q[1]; cx q[2],q[3]; |
| cx q[1],q[4]; cx q[3],q[5]; |
| rz(0.5) q[4]; rz(-0.25) q[5]; |
| cx q[1],q[4]; cx q[3],q[5]; |
| h q[4]; h q[5]; |
| measure q->c;''', |
| 'NH3 Complex (4q)': '''OPENQASM 2.0; |
| include "qelib1.inc"; |
| qreg q[4]; |
| creg c[4]; |
| // Complex NH3 Ansatz (4-qubit) |
| // Layer 1 |
| ry(pi/2) q[0]; |
| rz(pi/4) q[1]; |
| ry(pi/2) q[2]; |
| rz(pi/4) q[3]; |
| cx q[0],q[1]; |
| cx q[1],q[2]; |
| cx q[2],q[3]; |
| |
| // Layer 2 |
| ry(0.6) q[0]; |
| rz(0.3) q[1]; |
| ry(0.9) q[2]; |
| rz(0.5) q[3]; |
| cx q[3],q[2]; |
| cx q[2],q[1]; |
| cx q[1],q[0]; |
| |
| // Layer 3 |
| ry(0.1) q[0]; |
| rz(0.8) q[1]; |
| ry(0.4) q[2]; |
| rz(0.7) q[3]; |
| cx q[0],q[2]; |
| cx q[1],q[3]; |
| |
| // Layer 4 (Final Rotations) |
| ry(0.2) q[0]; |
| rz(0.5) q[1]; |
| ry(0.3) q[2]; |
| rz(0.6) q[3]; |
| |
| measure q -> c;''', |
| 'Amplitude Estimation (Finance)': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[4]; creg c[3]; h q[0]; h q[1]; h q[2]; ry(pi/4) q[3]; cp(pi/2) q[2],q[3]; cp(pi) q[1],q[3]; h q[0]; cp(-pi/2) q[0],q[1]; h q[1]; cp(-pi/4) q[0],q[2]; cp(-pi/2) q[1],q[2]; h q[2]; measure q[0:2] -> c;', |
| 'VQE Water (FORCE)': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[10]; creg c[10]; h q[0]; h q[1]; h q[2]; h q[3]; ry(0.5) q[0]; ry(1.0) q[1]; ry(1.5) q[2]; ry(2.0) q[3]; cx q[0],q[1]; cx q[2],q[3]; measure q -> c;', |
| 'VQE LiH Ansatz': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[4]; creg c[4]; x q[0]; x q[1]; ry(0.15) q[0]; ry(0.15) q[1]; cx q[0],q[2]; cx q[1],q[3]; ry(0.05) q[2]; ry(0.05) q[3]; measure q -> c;', |
| 'QFT 8q Safe-Scan': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[8]; creg c[8]; h q[0]; h q[1]; h q[2]; h q[3]; cp(pi/2) q[0],q[1]; cp(pi/4) q[1],q[2]; cp(pi/8) q[2],q[3]; h q[4]; h q[5]; h q[6]; h q[7]; measure q -> c;', |
| 'HHL Matrix Inversion': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[4]; creg c[2]; h q[1]; h q[2]; cp(pi/2) q[1],q[3]; cp(pi) q[2],q[3]; ch q[1],q[0]; ch q[2],q[0]; measure q[1:2] -> c;', |
| 'QAOA Max-Cut 4q (Pro)': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[4]; creg c[4]; h q[0]; h q[1]; h q[2]; h q[3]; cx q[0],q[1]; rz(1.57) q[1]; cx q[0],q[1]; cx q[2],q[3]; rz(1.57) q[3]; cx q[2],q[3]; rx(0.78) q[0]; rx(0.78) q[1]; rx(0.78) q[2]; rx(0.78) q[3]; measure q -> c;', |
| 'QML ZZ-FeatureMap': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[2]; creg c[2]; h q[0]; h q[1]; rz(0.5) q[0]; rz(1.2) q[1]; cx q[0],q[1]; rz(0.6) q[1]; cx q[0],q[1]; ry(0.2) q[0]; ry(0.2) q[1]; measure q -> c;', |
| 'QPE Precision 5q': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[5]; creg c[4]; h q[0]; h q[1]; h q[2]; h q[3]; x q[4]; cp(pi/8) q[0],q[4]; cp(pi/4) q[1],q[4]; cp(pi/2) q[2],q[4]; cp(pi) q[3],q[4]; h q[0]; cp(-pi/2) q[0],q[1]; h q[1]; measure q[0:3] -> c;', |
| 'Interference Stress Test': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[4]; creg c[4]; h q[0]; ry(0.9) q[1]; cx q[0],q[1]; rz(1.3) q[1]; h q[0]; measure q -> c;', |
| 'Shor 15 (Simplified)': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[8]; creg c[8]; h q[0:3]; x q[4]; cx q[2],q[5]; cx q[2],q[6]; h q[0:3]; measure q -> c;', |
| 'Ising Model Simulation': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[4]; creg c[4]; h q[0]; h q[1]; rz(0.5) q[0]; cx q[0],q[1]; rz(0.3) q[1]; cx q[1],q[0]; measure q -> c;', |
| 'Grover 4-item Search': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[2]; creg c[2]; h q[0]; h q[1]; x q[1]; h q[1]; cx q[0],q[1]; h q[1]; x q[1]; h q[0]; h q[1]; x q[0]; x q[1]; h q[1]; cx q[0],q[1]; h q[1]; x q[0]; x q[1]; h q[0]; h q[1]; measure q -> c;', |
| 'VQE Water (H2O) 6q': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[6]; creg c[6]; x q[0]; x q[1]; ry(0.1) q[0]; ry(0.1) q[1]; cx q[0],q[2]; cx q[1],q[3]; cx q[2],q[4]; cx q[3],q[5]; measure q -> c;', |
| 'Quantum Key Distribution': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[2]; creg c[2]; h q[0]; cx q[0],q[1]; h q[0]; h q[1]; measure q -> c;', |
| 'QFT 8 qubit High-Res': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[8]; creg c[8]; h q[7]; cp(pi/2) q[6],q[7]; cp(pi/4) q[5],q[7]; cp(pi/8) q[4],q[7]; h q[6]; cp(pi/2) q[5],q[6]; measure q -> c;', |
| 'Quantum Walk FORCE': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[4]; creg c[4]; h q[0]; h q[1]; h q[2]; cx q[0],q[1]; ccx q[1],q[2],q[3]; rz(1.5) q[3]; measure q -> c;', |
| 'Error Mitigation (Real-Stress)': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[15]; creg c[15]; h q[0]; cx q[0],q[1]; rz(0.45) q[1]; cx q[0],q[1]; rz(0.45) q[1]; cx q[0],q[1]; h q[0]; measure q -> c;', |
| 'Thermalizer VQT': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[4]; creg c[4]; ry(0.4) q[0]; ry(0.8) q[1]; ry(1.2) q[2]; ry(1.6) q[3]; cx q[0],q[1]; cx q[2],q[3]; measure q -> c;', |
| 'Ising Spectrum (Multi-Color)': 'OPENQASM 2.0; include "qelib1.inc"; qreg q[4]; creg c[4]; h q[0]; ry(0.8) q[1]; cx q[0],q[1]; rz(pi/4) q[0]; h q[2]; cx q[1],q[2]; measure q -> c;', |
| 'NH3 Simplified (4q)': '''OPENQASM 2.0; |
| include "qelib1.inc"; |
| qreg q[4]; |
| creg c[4]; |
| // Simplified NH3 VQE-like ansatz |
| ry(pi/2) q[0]; |
| rz(pi/4) q[1]; |
| ry(pi/2) q[2]; |
| rz(pi/4) q[3]; |
| cx q[0],q[1]; |
| cx q[1],q[2]; |
| cx q[2],q[3]; |
| ry(0.5) q[0]; |
| rz(0.3) q[1]; |
| ry(0.7) q[2]; |
| rz(0.4) q[3]; |
| cx q[0],q[1]; |
| cx q[1],q[2]; |
| cx q[2],q[3]; |
| measure q -> c;''', |
| 'Beta-sheet pattern detector (5q)': '''OPENQASM 2.0; |
| include "qelib1.inc"; |
| // Beta-sheet pattern detector |
| // Sheet residues: V(19),I(9),F(13),Y(18),W(17) |
| qreg q[5]; |
| creg c[5]; |
| h q[0]; h q[1]; h q[2]; h q[3]; h q[4]; |
| x q[0]; x q[2]; |
| cx q[0],q[4]; cx q[2],q[4]; |
| rz(0.785) q[4]; |
| cx q[0],q[4]; cx q[2],q[4]; |
| x q[0]; x q[2]; |
| h q[0]; h q[1]; h q[2]; h q[3]; h q[4]; |
| x q[0]; x q[1]; x q[2]; x q[3]; x q[4]; |
| cx q[0],q[4]; cx q[1],q[4]; |
| x q[0]; x q[1]; x q[2]; x q[3]; x q[4]; |
| h q[0]; h q[1]; h q[2]; h q[3]; h q[4]; |
| measure q->c;''', |
| } |
|
|
|
|
| def infer_qubit_count_from_qasm(qasm_text: str): |
| """Cheap qubit-count guess from raw QASM text (regex on `qreg q[N]`), |
| used only to pre-filter the Hamiltonian-compatibility dropdown in the UI |
| before a circuit actually runs. The real, authoritative qubit count |
| always comes from run_simulation()'s res['n_qubits'] (full QASM parse); |
| this is not used for execution. Returns None if no qreg declaration is found.""" |
| import re |
| match = re.search(r'qreg\s+\w+\s*\[\s*(\d+)\s*\]', qasm_text or '') |
| return int(match.group(1)) if match else None |
|
|