β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ•—   β–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—
β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ–ˆβ–ˆβ•—  β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ•”β•β•β•β•β•
β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—  β–ˆβ–ˆβ•”β–ˆβ–ˆβ•— β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—  
β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β•  β–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘β•šβ•β•β•β•β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β•  
β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘ β•šβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—
β•šβ•β•β•β•β•β• β•šβ•β•β•β•β•β•β•β•šβ•β•  β•šβ•β•β•β•β•šβ•β•β•β•β•β•β•β•šβ•β•β•β•β•β•β•
β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•—   β–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ•—     β–ˆβ–ˆβ•—   β–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ•—   β–ˆβ–ˆβ•—
β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘     β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β•šβ•β•β–ˆβ–ˆβ•”β•β•β•β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ•—  β–ˆβ–ˆβ•‘
β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—  β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘     β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β–ˆβ–ˆβ•— β–ˆβ–ˆβ•‘
β–ˆβ–ˆβ•”β•β•β•  β•šβ–ˆβ–ˆβ•— β–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘     β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘
β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β•šβ–ˆβ–ˆβ–ˆβ–ˆβ•”β• β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•   β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•‘ β•šβ–ˆβ–ˆβ–ˆβ–ˆβ•‘
β•šβ•β•β•β•β•β•β•  β•šβ•β•β•β•  β•šβ•β•β•β•β•β• β•šβ•β•β•β•β•β•β• β•šβ•β•β•β•β•β•    β•šβ•β•   β•šβ•β• β•šβ•β•β•β•β•β• β•šβ•β•  β•šβ•β•β•β•

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

= PyPI Python License Build Cross-Validation CI

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

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):

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

▍ Quick Start

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):

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:

βˆ‚Eβˆ‚ΞΈi=⟨ψ(ΞΈ)βˆ£β€‰βˆ‚Hβˆ‚ΞΈiβ€‰βˆ£Οˆ(ΞΈ)βŸ©ΞΈβ†ΞΈβˆ’Ξ±β€‰m^tv^t+Ξ΅\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

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


Β© 2026 Salvatore Pennacchio β€” Dense Evolution
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support