dense-Evolution / docs /index.md
Tatopenn's picture
Sync v8.1.42: docs site launch, examples/benchmarks/contributing pages, doc-example CI tests
b9d7591 verified
|
Raw
History Blame Contribute Delete
4.36 kB

Dense-Evolution

Dense statevector quantum simulator · JAX XLA · NISQ · VQE · QML

CI PyPI Python JAX

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

What's in here

  • DenseSVSimulator — the core dense statevector engine, JIT-fused circuit execution, projective measurement.
  • MPSSimulator — matrix-product-state engine for low-entanglement circuits at hundreds of qubits, with a jax.lax.scan-fused execution path.
  • Chunk — anti-OOM statevector chunking for circuits too large for a single dense allocation, including a real multi-device distributed dispatch path.
  • QASMParser — OpenQASM 2.0 / 3.0 parsing, including for loops, range syntax, and QASM3 classical bit registers.
  • dense_evolution.mitigation — Zero-Noise Extrapolation, both the classic scalar/vector form and a density-matrix extension (Smolin-Gambetta-Smith physical projection, Uhlmann fidelity), every entry point with a jax.jit-compatible variant.
  • dense_evolution.healing — the predictive-healing primitives (calculate_delta_preemp, calculate_vettore_dinamico, ...) ZNE's healing-adapted branch is built on.
  • NoiseModel — Kraus-channel noise (depolarizing, bitflip, phaseflip, amplitude damping, and a combined worst-case model), JAX- and NumPy-native.
  • Interop with Qiskit and PennyLane, and autodiff through circuit_to_energy_fn for gradient-based VQE.

Module dependencies

Real module graph, traced from the actual import statements in each file (not an idealized layering) -- circuit sources feed three interchangeable execution engines, which in turn feed the higher-level mitigation/autodiff layers.

flowchart LR
    subgraph core["Core"]
        parser["parser<br/>(QASMParser)"]
        gates["gates"]
        registry["registry<br/>(NoiseModel)"]
        compiler["compiler<br/>(QuantumTranspiler)"]
    end

    subgraph engines["Engines"]
        simulator["simulator<br/>(DenseSVSimulator)"]
        mps["mps<br/>(MPSSimulator)"]
        chunk["chunk<br/>(Chunk)"]
    end

    subgraph higher["Higher-level"]
        interop["interop<br/>(Qiskit / PennyLane)"]
        autodiff["autodiff<br/>(circuit_to_energy_fn)"]
        healing["healing<br/>(predictive primitives)"]
        mitigation["mitigation<br/>(ZNE)"]
    end

    gates --> registry
    simulator --> registry
    simulator --> gates
    simulator --> compiler
    mps --> compiler
    mps --> gates
    chunk --> simulator
    chunk --> compiler
    chunk --> gates
    interop --> parser
    interop --> simulator
    autodiff --> parser
    autodiff --> gates
    autodiff --> compiler
    autodiff --> registry
    mitigation --> healing

Where to start

New to the package? Start with Getting Started.

Looking for a specific function or class? Jump straight to the API Reference.

Want to see what changed recently? Check the Changelog.

Honesty as a design principle

This library's docstrings and changelog document real, measured findings — including negative results and rejected approaches — not just the features that worked. Where a number is quoted (a speedup, a fidelity improvement, a coverage percentage), it was measured directly and the measurement is described, not assumed. See the Changelog for the full history.