File size: 3,162 Bytes
4eff328
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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("====================================================")