dense-Evolution / dense_evolution /stress_test.py
Tatopenn's picture
Upload 20 files
4eff328 verified
import time
import numpy as np
from dense_evolution import DenseSVSimulator, QASMParser, QuantumTranspiler, NoiseModel
print("====================================================")
print("🔬 ADVANCED PRODUCTION STRESS-TEST: KRAUS & JIT SIMULATION")
print("====================================================")
try:
qasm_bench = """
OPENQASM 2.0;
include "qelib1.inc";
qreg q[6];
h q[0];
cx q[0], q[1];
cx q[1], q[2];
cx q[2], q[3];
cx q[3], q[4];
cx q[4], q[5];
rx(1.570796) q[0];
ry(0.785398) q[1];
rz(0.392699) q[2];
"""
print("1. Parsing e Transpilazione del circuito QASM...")
# Questo testa la corretta importazione e funzione di parser.py e compiler.py
parser = QASMParser()
circ = parser.parse(qasm_bench)
tuples = QuantumTranspiler.transpile(circ.to_tuples())
n_qubits = circ.n_qubits
print(f"✓ Parsing completato. Qubit: {n_qubits}, Gate transpilati: {len(tuples)}")
print("\n2. Validazione Core JIT in modalità ideale (simulator.py)...")
t0 = time.perf_counter()
sim_ideale = DenseSVSimulator(n_qubits)
sim_ideale.run_circuit_jit_beast_mode(tuples)
t_ideale = time.perf_counter() - t0
prob_ideale = sim_ideale.get_probabilities()
print(f"✓ Successo ideale in {t_ideale:.4f} s | Dimensione stato: {len(prob_ideale)}")
print("\n3. Validazione NoiseModel (registry.py): Canale stocastico Amplitude Damping...")
# Run Noisy 1
t0 = time.perf_counter()
sim_noisy1 = DenseSVSimulator(n_qubits)
sim_noisy1.run_circuit_jit_beast_mode(tuples)
# Iniezione diretta del rumore Kraus sullo statevector compilato
sim_noisy1.sv = NoiseModel.apply_to_sv(sim_noisy1.sv, n_qubits, model='amplitude_damping', p=0.15)
prob_noisy1 = sim_noisy1.get_probabilities()
t_noisy1 = time.perf_counter() - t0
# Run Noisy 2
sim_noisy2 = DenseSVSimulator(n_qubits)
sim_noisy2.run_circuit_jit_beast_mode(tuples)
sim_noisy2.sv = NoiseModel.apply_to_sv(sim_noisy2.sv, n_qubits, model='amplitude_damping', p=0.15)
prob_noisy2 = sim_noisy2.get_probabilities()
print(f"✓ Successo noisy in {t_noisy1:.4f} s")
print("\n4. Analisi statistica delle fluttuazioni (Shot Noise Reale)...")
scostamento_stocastico = np.linalg.norm(prob_noisy1 - prob_noisy2)
scostamento_ideale = np.linalg.norm(prob_ideale - prob_noisy1)
print(f"🔬 Distanza ideale-noisy: {scostamento_ideale:.6f}")
print(f"🔬 Fluttuazione quantistica indipendente (Shot Noise): {scostamento_stocastico:.6f}")
if scostamento_stocastico > 1e-12:
print("\n✅ TEST SUPERATO: Moduli collegati, PRNG JAX funzionante e rumore autenticamente non-deterministico!")
else:
print("\n❌ FALLIMENTO: Il rumore è ancora lineare o statico. Le due run hanno prodotto stati identici.")
print("====================================================")
except Exception as e:
print(f"\n❌ CRASH DURANTE L'ELABORAZIONE HARDWARE: {str(e)}")
print("====================================================")