Dense Evolution

io.github.tatopenn-cellPublished by GitHub account tatopenn-cellv8.1.52Updated Oct 24, 2026

Real quantum circuit simulator, VQE, molecular Hamiltonians, QM/MM forces, and MD via 21 tools.

VerifiedSTDIODesktop onlyDeveloper ToolsAI & ML

Overview

AI-generated overview

Local MCP server that lets an assistant drive the Dense Evolution Composer, a quantum circuit editor and simulator, through about 22 tools.

What you can do
Drive the Dense Evolution Composer circuit editor from an agent, building and editing circuits graphically or in OpenQASM 2.0/3.0 through the exposed tools (the manifest lists no individual tool names). Run quantum simulations on the local kernel, including statevector and MPS engines, noise models and zero-noise extrapolation. Work with VQE, molecular Hamiltonians, QM/MM forces and molecular dynamics, per the registry description. Use the wider toolkit's reversible arithmetic, postselection, QEC decoding and Qiskit/PennyLane interop from the same package.
When to use it
Useful when you want an assistant to build, edit and simulate quantum circuits in a local Composer session, or to run VQE, chemistry and QM/MM calculations without leaving the chat. It is a desktop-only tool for quantum computing work rather than general automation.
Requirements
Runs locally over stdio, installed from PyPI with uvx (the mcp extra). A running Composer kernel is required, started first with the serve command (composer extra); its address is set by the DENSE_EVOLUTION_KERNEL_URL environment variable, defaulting to a local address. JAX is a core dependency; optional extras add GPU, dashboard, Qiskit/PennyLane and Hartree-Fock support. No authentication is declared.
Before you install
The server talks to a local kernel whose address comes from DENSE_EVOLUTION_KERNEL_URL; point it only at a kernel you started yourself. Simulations can be memory- and compute-heavy, and disk overflow is a slower fallback. On macOS with the Qiskit extra, Qiskit is known to crash the process; the PennyLane extra is the suggested alternative. Actions taken through the tools change the Composer session's circuits.

Installation

In SourceWeft

  1. Open Dense Evolution in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

[Dense Evolution — NISQ quantum simulation toolkit, JAX-native]

A high-performance quantum simulation toolkit Statevector/MPS engines with compilation, noise, VQE, QEC, chemistry, and agent-native tooling.

[Image]
Download the Dense Evolution Dashboard (Streamlit)
Windows (.bat) · macOS / Linux (.sh)

[CI] [Docs] [codecov] [PyPI] [PyPI Downloads] [Python] [License] [Build] [Cross-Validation CI] [Latest Release] [Last Commit] [Issues] [Stars] [JAX] [DOI] [Featured in Awesome Quantum Software]


Table of Contents

▍ What It Is

Run up to 28 qubits in about 3 seconds, without crashing. Dense Evolution JIT-compiles statevector circuits through JAX XLA, automatically chunks and — past even that RAM ceiling — spills to disk when memory fills up, so a real simulation stays alive instead of OOM-ing.

📖 Full documentation, API reference, and worked examples →

A local Streamlit dashboard and web-based Composer editor are also included — see Composer & MCP Server below.


▍ Install

bash
pip install dense-evolution  # JAX is a core dependency, installed by default
# full stack: GPU · dashboard · Qiskit/PennyLane interoppip install dense-evolution[full]
# just the interop bridgepip install dense-evolution[qiskit]pip install dense-evolution[pennylane]
# native Hartree-Fock (basis-set data)pip install dense-evolution[hf]
# Composer's local kernel (see "Composer" below)pip install dense-evolution[composer]
# MCP server for the Composer kernel (see "MCP Server" below)pip install dense-evolution[mcp]
# developmentgit clone https://github.com/tatopenn-cell/Dense-Evolution.gitcd Dense-Evolution && pip install -e .[full]
⚠️ macOS + dense-evolution[qiskit] users

Qiskit's own QuantumCircuit.__init__ is known to segfault the whole process on macOS/arm64 (an upstream Qiskit bug, not something Dense-Evolution can fix from its side — see release v8.1.43 for the full reproduction). dense_evolution/interop.py now warns (RuntimeWarning, once per process) the first time you touch the Qiskit bridge on sys.platform == 'darwin', but it does not block — some Qiskit/macOS combinations may work fine. If you hit a crash, pip install dense-evolution[pennylane] gives the same circuit-interop functionality without constructing any Qiskit object.

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 / 3.0 string -- single-qubit rotations, a barrier# (a real OpenQASM synchronization marker: parsed like hardware would, no# effect on the simulated state), then an entangling layerqasm = """OPENQASM 2.0;include "qelib1.inc";qreg q[3];rx(pi/3) q[0];ry(pi/4) q[1];h q[2];barrier q;cx q[0], q[1];cx q[1], q[2];rz(pi/6) q[2];"""
parser = QASMParser()circuit = parser.parse(qasm)
sim = DenseSVSimulator(n_qubits=3)sim.run_circuit_jit(circuit.to_tuples())
probs = sim.get_probabilities()sv    = sim.get_statevector()# probs = [0.3201 0.3201 0.0549 0.0549 0.0183 0.0183 0.1067 0.1067]

Noise:

python
import numpy as npfrom dense_evolution import DenseSVSimulator, QASMParser, NoiseModel
qasm = 'OPENQASM 2.0; include "qelib1.inc"; qreg q[2]; h q[0]; cx q[0],q[1];'circuit = QASMParser().parse(qasm)
sim = DenseSVSimulator(n_qubits=2)sim.run_circuit_jit(circuit.to_tuples())
noisy_sv = NoiseModel.apply_to_sv(np.asarray(sim.sv), n=2, model='depolarizing', p=0.05, rng=np.random.default_rng(0))np.abs(noisy_sv) ** 2# [0.   0.5  0.5  0.  ]

VQE:

python
import jaximport jax.numpy as jnpfrom dense_evolution import QASMParser, circuit_to_energy_fn
qasm = 'OPENQASM 2.0; include "qelib1.inc"; qreg q[1]; ry(0.0) q[0];'circuit = QASMParser().parse(qasm)energy_fn, n_params = circuit_to_energy_fn(circuit, n_qubits=1)h = jnp.array([[1.0, 0.0], [0.0, -1.0]], dtype=jnp.complex128)  # Pauli Z
theta = jnp.array([0.1])grad_fn = jax.value_and_grad(energy_fn, argnums=0, has_aux=True)for _ in range(40):    (energy, sv), grad = grad_fn(theta, h)    theta = theta - 0.5 * grad# energy = -1.0, theta = [3.14159265]

Mitigation (ZNE):

python
import dense_evolution as de
e1, e2, e3 = 1.234, 0.876, 0.611  # values at 1x, 2x, 3x noisede.zero_noise_extrapolation([e1, e2, e3], [1.0, 2.0, 3.0])# 1.622

Dashboard (local, Streamlit):

bash
pip install "dense-evolution[dashboard]"  # JAX already included by defaultstreamlit run tools/dashboard/app.py

Anti-OOM for large circuits:

python
from dense_evolution import Chunk, QASMParser
qasm = 'OPENQASM 2.0; include "qelib1.inc"; qreg q[27]; h q[0:27];'circuit = QASMParser().parse(qasm)
sim = Chunk(27)sim.run_chunk(circuit.to_tuples(), chunk_size_gates=500)

▍ Key Features

[Image]
  • JIT-fused statevector engine. No Kronecker-product overhead — stride-sliced linear kernel fusion compiled through JAX XLA, real GPU/TPU dispatch with no code change. Simulator · MPS backend for low-entanglement circuits at scale.
  • Anti-OOM Chunk engine. Circuits too large for one array, split dynamically and sized off the real compute device's own free memory — with disk-backed overflow past even that ceiling. Chunk guide.
  • Real noise, real mitigation. Stochastic Kraus channels, real-device noise imported from Qiskit backends, and Zero-Noise Extrapolation, with the shot budget split optimally across noise factors and a single-qubit Bloch-vector variant that always returns a valid state, to correct for it. Noise · Mitigation · what noise/mitigation/healing each mean.
  • Differentiable VQE, from scratch. circuit_to_energy_fn is the same JAX-differentiable engine real molecular VQE runs on — real Hartree-Fock Hamiltonians, UCCSD/hardware-efficient ansätze, Adam optimization. Autodiff.
  • libcint integrals on Windows, macOS and Linux. pip install dense-evolution ships libcint compiled for each system: the full two-electron tensor of ethanol in 6-31G* in 0.32 s. Open-shell molecules with UHF and ROHF (run_uhf, run_cuhf). native_hf.
  • Reversible arithmetic. Register adders, subtraction, comparisons and modular arithmetic up to modular exponentiation, applied as exact basis permutations, and as OPENQASM 2.0 gate circuits (Cuccaro, Draper and Beauregard adders, controlled modular multiplication), up to Shor order finding with one control qubit. Arithmetic.
  • Postselection. Keep the branch where a qubit is found in |0>, |1>, |±> or |±i>, with its probability. Postselection.
  • OpenQASM 2.0/3.0, both directions. A real parser, plus Qiskit/PennyLane interop bridges. QASM Parser · Interop.
  • Code-agnostic QEC decoding, Majorana/Jordan-Wigner fermion mapping, from-scratch Hartree-Fock for elements outside PennyLane's own basis set, a traversable-wormhole-inspired teleportation protocol, and real QM/MM region partitioning (ring-safe BFS, Diffuse2Seg-derived relevance propagation) — see the full API reference for all of it.

▍ Benchmarks

Measured on Windows, CPU only, 8 GB RAM — PennyLane's default.qubit allocates the full statevector; Dense Evolution's Chunk holds constant ~2 GB regardless of qubit count.

QubitsHilbert SpacePennyLaneDense EvolutionChunk Geometry
2667,108,864✅ 1,074 MB✅ 2,050 MB1× (2²⁷)
28268,435,456❌ OOM✅ 2,050 MB2× (2²⁷)
324,294,967,296❌ OOM✅ 2,048 MB32× (2²⁷)

On Google Colab (12 GB RAM), n=28 runs in ~3s end-to-end (JIT-compiled, num_chunks=2) — the multi-chunk path is fast, not just OOM-safe. Past the real RAM ceiling (Chunk alone raises MemoryPressureError cleanly rather than crashing the process), allow_disk_overflow=True falls back to a slower disk-backed path instead of failing — correctness-first, not benchmarked for speed yet. Full measured table: docs/api/chunk.md.

▍ Composer & MCP Server

A real circuit editor (graphical or OpenQASM) running on your own machine, plus an MCP server exposing 22 tools so an agent (Claude Code, Claude Desktop, ...) can drive it directly. Composer · MCP Server.

▍ Key Resources


▍ Changelog

📜 Full Changelog & Releases — every version, latest first.


▍ License

GNU Affero General Public License v3.0 or later. A commercial licence is available on request.

Releases up to 8.3.2 were published under the Business Source License 1.1: LICENSE-BUSL-1.1-until-8.3.2.md

Full text: LICENSE


▍ Cite This

If Dense-Evolution is useful in academic work, please cite it via the metadata in CITATION.cff (recognized by GitHub's own "Cite this repository" button, and by reference managers that support the Citation File Format).

Archived on Zenodo:


© 2026 Salvatore Pennacchio — Dense Evolution

Source: README.md at commit 3baff9e

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v8.1.52LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts