File size: 13,303 Bytes
a535c7f
 
 
 
 
 
92b1ba8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2c5c318
92b1ba8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
---
license: bsl-1.0
language:
- en
pipeline_tag: feature-extraction
---
```
β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ•—   β–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—
β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ–ˆβ–ˆβ•—  β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ•”β•β•β•β•β•
β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—  β–ˆβ–ˆβ•”β–ˆβ–ˆβ•— β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—  
β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β•  β–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘β•šβ•β•β•β•β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β•  
β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘ β•šβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—
β•šβ•β•β•β•β•β• β•šβ•β•β•β•β•β•β•β•šβ•β•  β•šβ•β•β•β•β•šβ•β•β•β•β•β•β•β•šβ•β•β•β•β•β•β•
β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•—   β–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ•—     β–ˆβ–ˆβ•—   β–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ•—   β–ˆβ–ˆβ•—
β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘     β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β•šβ•β•β–ˆβ–ˆβ•”β•β•β•β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ•—  β–ˆβ–ˆβ•‘
β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—  β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘     β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β–ˆβ–ˆβ•— β–ˆβ–ˆβ•‘
β–ˆβ–ˆβ•”β•β•β•  β•šβ–ˆβ–ˆβ•— β–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘     β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘
β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β•šβ–ˆβ–ˆβ–ˆβ–ˆβ•”β• β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•   β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•‘ β•šβ–ˆβ–ˆβ–ˆβ–ˆβ•‘
β•šβ•β•β•β•β•β•β•  β•šβ•β•β•β•  β•šβ•β•β•β•β•β• β•šβ•β•β•β•β•β•β• β•šβ•β•β•β•β•β•    β•šβ•β•   β•šβ•β• β•šβ•β•β•β•β•β• β•šβ•β•  β•šβ•β•β•β•
```


**Dense Statevector Quantum Simulator Β· JAX XLA Β· NISQ Β· VQE Β· QML**

=
[![PyPI](https://img.shields.io/pypi/v/dense-evolution?style=flat-square&color=00e5ff)](https://pypi.org/project/dense-evolution/)
[![Python](https://img.shields.io/badge/Python-3.9+-blue?style=flat-square&logo=python&logoColor=white)](https://www.python.org/)
[![License](https://img.shields.io/badge/License-BSL_1.1-orange?style=flat-square)](LICENSE.md)
[![Build](https://img.shields.io/badge/Build-Passing-00ff9d?style=flat-square)](https://github.com/tatopenn-cell/Dense-Evolution/actions)
[![Cross-Validation CI](https://github.com/tatopenn-cell/Dense-Evolution-Ising-Tests/actions/workflows/ci.yml/badge.svg)](https://github.com/tatopenn-cell/Dense-Evolution-Ising-Tests/actions/workflows/ci.yml)
=======

**Dense Statevector Quantum Simulator Β· JAX XLA Β· NISQ Β· VQE Β· QML**

---

## ▍ What It Is

**Dense Evolution** is a high-performance statevector simulator engineered for deep NISQ circuits, VQE pipelines, and QML workloads. It eliminates Kronecker product overhead entirely via stride-sliced linear kernel fusion compiled through JAX XLA β€” keeping memory at the theoretical minimum of `2ⁿ Γ— 16 bytes`.

The integrated `dash.py` dashboard provides live ipywidgets telemetry across 6 quantum observables per simulation run, directly inside Google Colab or Jupyter.

---

## ▍ Install

```bash
pip install dense-evolution

# full stack: JAX Β· GPU Β· dashboard
pip install dense-evolution[full]

# development
git clone https://github.com/tatopenn-cell/Dense-Evolution.git
cd Dense-Evolution && pip install -e .[full]
```

**Google Colab (3 lines):**

```python
!git clone https://github.com/tatopenn-cell/Dense-Evolution.git
%cd Dense-Evolution
!pip install -e .
```

---

## ▍ Quick Start

```python
from dense_evolution import DenseSVSimulator, QASMParser

# parse any OpenQASM 2.0 string
qasm = """
OPENQASM 2.0;
include "qelib1.inc";
qreg q[3];
h q[0];
cx q[0], q[1];
cx q[1], q[2];
"""

parser = QASMParser()
circuit = parser.parse(qasm)

sim = DenseSVSimulator(n_qubits=3)
sim.run_circuit_jit_beast_mode(circuit.ops)
```

---

**Dashboard (Colab / Jupyter):**

```python
import dash
from IPython.display import display, clear_output

clear_output()
display(dash.dashboard_unificata)
```

---

## ▍ Architecture

```
dense_evolution/
β”œβ”€β”€ registry.py       hardware detection Β· JAX / CuPy / NumPy capability flags
β”œβ”€β”€ gates.py          GATES{} Β· PARAMETRIC_GATES{} Β· GATE_IDS{}
β”œβ”€β”€ noise_model.py    Kraus channels Β· stochastic trajectory engine
β”œβ”€β”€ parser.py         QASMParser Β· QASMCircuit Β· OpenQASM 2.0 / 3.0
β”œβ”€β”€ compiler.py       _apply_gate_fast_step (jit) Β· _compile_and_run_circuit_jit
β”œβ”€β”€ simulator.py      DenseSVSimulator Β· vmap batch VQE Β· chunked execution
└── dash.py           ipywidgets dashboard Β· VQE engine Β· MD simulation
```

**Data flow per run:**
```
β–Ά Run
 └─ core_calcolo_quantistico()          parse β†’ JIT execute β†’ apply noise
     β”œβ”€ ottimizza_vqe()                 Hellmann-Feynman AD β†’ ADAM β†’ df_vqe_telemetry
     β”œβ”€ run_md_simulation_dummy()       QM/MM dynamics β†’ df_md_telemetry + Pearson matrix
     └─ build_panel_*(res)              matplotlib figure β†’ display()
```

---

## ▍ Core Features

| Feature | Detail |
|---|---|
| **Linear Kernel Fusion** | Stride-sliced tensor ops via JAX XLA β€” zero Kronecker matrices |
| **Circuit Chunking** | Fixed-size JIT blocks eliminate tracer overhead on 1000+ gate circuits |
| **Kraus Noise Channels** | `depolarizing` `amplitude_damping` `phase_damping` `bitflip` `combined` β€” stochastic, O(2ⁿ) cost |
| **VQE + ADAM** | Hellmann-Feynman gradient via JAX AD Β· positional parameter injection into any QASM 2.0 |
| **vmap Batch Sweep** | `run_parametric_batch_jit()` evaluates full parameter grids in one JIT call |
| **Backend Agnostic** | NumPy CPU Β· JAX XLA CPU/TPU Β· CuPy CUDA β€” runtime selection, zero code changes |
| **Live Dashboard** | 8-panel ipywidgets telemetry: probability, VQE energy, entropy, purity, gradient, noise, ΞΈ-correction, Pearson heatmap |

---

## ▍ Benchmarks

> Measured on Google Colab Free Tier (CPU runtime)

| Metric | Value |
|---|---|
| Numerical drift (30-layer Ansatz, 1360 gates) | `Ξ” = 1.11 Γ— 10⁻¹⁢` |
| Memory footprint @ 20q | `32 MB` (float64) Β· `16 MB` (float32) |
| JIT compile overhead (first run) | `< 400 ms` |
| Gate throughput after warm-up | `> 10⁢ gates/s` (CPU) |
| Maximum tested qubits (Colab Free) | `24q` stable Β· `33q` high-RAM runtime |

---

## ▍ Dashboard Panels

| Panel | Contents |
|---|---|
| **Overview** | R0 header Β· R1 P(\|n⟩) histogram + Top-12 states Β· R2 wavefunction helix 3D + metrics table Β· R3 noise analysis + shot histogram Β· R4–R6 VQE telemetry Γ— 6 Β· R7 Pearson heatmap |
| **Fisica Stato** | Bloch projection Β· Schmidt rank Β· coherence vector |
| **Mosaico 1008q** | 2D probability density map up to 1008 qubits |
| **VQE Results** | 6-subplot telemetry: energy convergence, entropy, purity, β€–βˆ‡Lβ€–, noise factor, ΞΈ-correction |
| **MD Results** | 6-subplot MD telemetry + masked Pearson correlation heatmap |
| **Performance** | Gate throughput Β· JIT compile time Β· RAM usage |

---


## ▍ Circuit Library (30+ presets)

All circuits are stored as OpenQASM 2.0 strings in `QASM_LIBRARY`.

**Standard** β€” Bell Φ⁺, QFT 4q/8q, Toffoli, Adder 2-bit, Deutsch-Jozsa, Bernstein-Vazirani  
**Algorithms** β€” Grover 3q/4q, Simon 4q, Shor 15, HHL, QAOA Max-Cut 4q, QPE 5q, Quantum Walk, Teleportation, BB84  

---

## ▍ VQE Engine

**Positional parameter injection** β€” `QASMParser` tokenizes all literals to `0.0` for JIT speed. VQE recovers parameters by:
1. counting parametric gates (`rx ry rz p u1 cp crz`) β†’ `n_params`
2. initializing `ΞΈ ∈ ℝⁿ` uniform in `[βˆ’Ο€, Ο€]`
3. injecting `ΞΈ[i]` sequentially by gate order in the AST via `risolvi_qasm()`

Compatible with any custom OpenQASM 2.0 string without pre-labelling.

**Gradient & update rule:**

$$\frac{\partial E}{\partial \theta_i} = \langle\psi(\theta)|\,\frac{\partial H}{\partial \theta_i}\,|\psi(\theta)\rangle \qquad \theta \leftarrow \theta - \frac{\alpha\,\hat{m}_t}{\sqrt{\hat{v}_t}+\varepsilon}$$

**Telemetry columns** (β†’ `df_vqe_telemetry`):

| Column | Unit | Description |
|---|---|---|
| `VQE_Energy` | Ha | ⟨ψ\|H\|ψ⟩ |
| `Entropy` | bit | βˆ’Tr(ρ logβ‚‚ ρ) |
| `Purity` | β€” | Tr(ρ²) ∈ [1/d, 1] |
| `Gradient` | β€” | β€–βˆ‡Lβ€– β€” barren plateau detection |
| `Noise_Factor` | β€” | fidelity-derived noise proxy |
| `Theta_Correction` | rad | ADAM step norm |

---

## ▍ Hamiltonian Library

Auto-filtered by qubit count to prevent shape mismatch.

| Molecule | Qubits | Bond length | Eβ‚€ (Ha) |
|---|:---:|:---:|:---:|
| Hβ‚‚ | 2 | 0.74 Γ… | βˆ’1.13 |
| H₃⁺ | 3 | 0.85 Γ… | βˆ’1.28 |
| LiH | 4 | 1.40 Γ… | βˆ’2.31 |
| Hβ‚‚O | 5 | 0.96 Γ… | βˆ’4.12 |

Custom: JSON array of diagonal eigenvalues, length `2^n_qubits`.

---

## ▍ Noise Models

All channels applied as post-circuit Kraus operations on the full statevector.

| Model | Kraus operators | Physical process |
|---|---|---|
| `ideal` | I | noiseless |
| `depolarizing` | {√(1βˆ’p)I, √(p/3)X,Y,Z} | isotropic Pauli error |
| `amplitude_damping` | {Kβ‚€, K₁} | T₁ energy relaxation |
| `phase_damping` | {Kβ‚€, K₁} | Tβ‚‚ dephasing |
| `bitflip` | {√(1βˆ’p)I, √pΒ·X} | bit flip Οƒβ‚“ |
| `combined` | depolarizing(p/2) ∘ amp_damp(p/3) | worst-case NISQ |

Fidelity: Bhattacharyya `F = Ξ£α΅’ √(pα΅’qα΅’)` and TVD `= Β½Ξ£α΅’|pα΅’βˆ’qα΅’|` computed on every noisy run.

---

## ▍ Mitigation & Predictive Healing Models

Active error tracking and stabilization parameters integrated natively into the simulation runtime.


| Model | Variables / Operators | Physical process |
|---|---|---|
| `dephasing_tracking` | Ξ”_pre_emp ∘ Ξ£ | predictive deviation vs ideal eigenstate |
| `kappa_stabilization` | ΞΊ-strength routine | proactive statevector profile shielding |
| `richardson_integration` | {λ₁ = 1.0, Ξ»β‚‚ = 2.0} | dual-point zero-noise trajectory approximation |

Compilation: Full **XLA Kernel Fusion** via `@jax.jit` for mass-parallelized trajectory sweeps (< 1.0s).

---

## ▍ Chunk Engines (Anti-OOM)

All operations parcellized dynamically using dual-stage longitudinal and transverse architectural shields.


| Model | Execution parameters | Physical process |
|---|---|---|
| `chunk1` | `circuit_slice = target[i : i + chunk_size]` | instruction loop-unroll kill |
| `chunk2` | `alloc_dim = 2 ** chunk_size_bits` | transverse Hilbert slicing |
| `Chunk` | `sim = Chunk(n_qubits)` | hardware-adaptive anti-OOM |

Performance: Hard-locked at `15%` max RAM available with **-86.47% Latency Collapse** via global static JIT cache injection.

---

### πŸͺ [SHIELD::OOM] // Chunk Engine

```python
from dense_evolution import Chunk

sim = Chunk(27)
circuit_ops = [['h', i] for i in range(27)]
sim.run_chunk(circuit_ops, 500)
```

### 🧬 [SYS::ARCH]
* `chunk1` -> Slices gate arrays into windows to kill JAX compilation stalls.
* `chunk2` -> Slices raw Hilbert statevectors into isolated RAM allocations.

### ⚑ [BENCH::VERDICT]
* **Qubits**: 27 Qubits // 134M States.
* **Memory**: Hard-locked at 15% RAM threshold.
* **Speed**: **-86.47% Latency Collapse** via Static JIT.

\---

### Anti-OOM Chunk Engine vs PennyLane β€” Windows CPU (8 GB RAM)

> Dense Evolution maintains constant ~2 GB RAM at any qubit count via dynamic chunking.  
> PennyLane allocates the full statevector β€” OOM beyond 26q.


| Qubits | Hilbert Space | PennyLane | PennyLane RAM | Dense Evolution | Dense RAM | Chunk Geometry |
|:------:|:-------------:|:---------:|:-------------:|:---------------:|:---------:|:--------------:|
| 24 | 16,777,216 | βœ… SUCCESS | 307 MB | βœ… SUCCESS | 516 MB | 1Γ— (2²⁷) |
| 26 | 67,108,864 | βœ… SUCCESS | 1,074 MB | βœ… SUCCESS | 2,050 MB | 1Γ— (2²⁷) |
| 28 | 268,435,456 | ❌ OOM | β€” | βœ… SUCCESS | 2,050 MB | 2Γ— (2²⁷) |
| 30 | 1,073,741,824 | ❌ OOM | β€” | βœ… SUCCESS | 2,048 MB | 8Γ— (2²⁷) |
| 32 | 4,294,967,296 | ❌ OOM | β€” | βœ… SUCCESS | 2,048 MB | 32Γ— (2²⁷) |

---

## ▍ Changelog

### v8.1.5
- `chunk.py` β€” `SafeMemoryGuard` class: hard block at configurable free-RAM threshold (default 15%), soft warning at 2Γ— threshold, `gc.collect()` before every check
- `chunk.py` β€” `Chunk` no longer subclasses `DenseSVSimulator`; inner simulator allocated at `safe_qubits` only β€” eliminates `RESOURCE_EXHAUSTED` on 28q–34q circuits
- `chunk.py` β€” `CircuitChunker.split_circuit` RAM-checks every gate-slice before dispatch
- `chunk.py` β€” `MemoryChunker` attributes (`num_chunks`, `chunk_size_bits`, `dtype`) forwarded as `@property` on `Chunk` for benchmark compatibility

### v8.1.6
- Modular package structure (`dense_evolution/` directory)
## ▍ License

**Business Source License 1.1** β€” converts automatically to **Apache 2.0** on **1 June 2029**.

- Non-commercial use: unrestricted
- Commercial use: ≀ 24 allocated qubits Β· ≀ 1000 circuits/day Β· ≀ 10,000 shots/circuit
- Attribution required on all copies: `Β© 2026 Salvatore Pennacchio <jtatopenn@libero.it> β€” Dense Evolution`

Full text: [LICENSE.md](LICENSE.md)

---

<div align="center">
  <sub>Β© 2026 Salvatore Pennacchio β€” Dense Evolution</sub>
</div>