Skip to main content

Quantum Simulation Toolkit - Error bounds and Trotterization tools

Project description

Qsimkit - Quantum Simulation Toolkit

License Release

A Python package for quantum simulation with error bounds and Trotterization tools. Built on Qiskit and OpenFermion.

Features

  • Hamiltonians: Spin lattice models (nearest-neighbor, power-law, IQP) and fermionic systems
  • Trotter Formulas: First, second, and high-order product formulas with JAX acceleration
  • Error Bounds: Analytical and numerical bounds for Trotter error analysis
  • States: Entangled states (GHZ, W) and random states
  • Channels: Quantum noise channels and transformations
  • Utilities: Binary search for optimal Trotter steps, plotting tools

Installation

From PyPI (coming soon)

pip install qsimkit

From source

git clone https://github.com/Jue-Xu/Qsimkit.git
cd Qsimkit
pip install -e .

Requirements

  • Python >= 3.10
  • Core: numpy, scipy, qiskit, matplotlib
  • Optional: jax/jaxlib (GPU acceleration), openfermion (fermionic systems)

Quick Start

import qsimkit
from qsimkit.spin import Nearest_Neighbour_1d
from qsimkit.trotter import pf
from qsimkit.bounds import tight_bound

# Create a spin Hamiltonian
H = Nearest_Neighbour_1d(n=4, Jx=1.0, Jy=1.0, Jz=1.0, hx=0.5)
h_list = H.ham  # Get Hamiltonian terms

# Compute Trotter approximation
t = 1.0  # Evolution time
r = 100  # Number of Trotter steps
U_approx = pf(h_list, t, r, order=2)

# Estimate error bound
error = tight_bound(h_list, order=2, t=t, r=r, type='spectral')
print(f"Error bound: {error}")

Usage Examples

1. Hamiltonian Models

from qsimkit import spin, fermion

# Nearest-neighbor 1D spin chain
nn_chain = spin.Nearest_Neighbour_1d(
    n=10,           # 10 qubits
    Jx=1.0,         # X coupling
    Jy=1.0,         # Y coupling
    Jz=1.0,         # Z coupling
    hx=0.5,         # X field
    pbc=False       # Open boundary
)

# Get Hamiltonian in different groupings
h_parity = nn_chain.ham_par  # Parity grouping
h_xyz = nn_chain.ham_xyz      # XYZ grouping

# 2D lattice
lattice_2d = spin.Nearest_Neighbour_2d(nx=4, ny=4, Jx=1.0, Jy=1.0, Jz=1.0)

# Cluster Ising model
cluster = spin.Cluster_Ising(n=8, J=1.0, g=0.5)

2. Trotter Methods

from qsimkit.trotter import pf, pf_high

# First-order Trotter
U1 = pf(h_list, t=1.0, r=50, order=1)

# Second-order Trotter (symmetric)
U2 = pf(h_list, t=1.0, r=50, order=2)

# High-order Trotter (4th, 6th, 8th order)
U4 = pf_high(h_list, t=1.0, r=50, order=4)
U6 = pf_high(h_list, t=1.0, r=50, order=6)

# With JAX acceleration (if available)
U2_jax = pf(h_list, t=1.0, r=50, order=2, use_jax=True)

3. Error Bounds

from qsimkit.bounds import (
    tight_bound,
    analytic_bound,
    interference_bound,
    lc_tail_bound
)

# Tight commutator-based bound
error = tight_bound(h_list, order=2, t=1.0, r=100, type='spectral')

# Analytical bound
error_analytic = analytic_bound(H=h_list, k=1, t=1.0, r=100)

# Two-term interference bound (Layden 2022)
if len(h_list) == 2:
    bound, e1, e2, e3 = interference_bound(h_list, t=1.0, r=100)

# Light-cone tail bound (for nearest-neighbor Hamiltonians)
error_lc = lc_tail_bound(r=100, n=10, h=nn_chain, t=1.0, ob_type='singl')

4. Finding Optimal Trotter Steps

from qsimkit.utils import binary_search_r

# Find minimum r to achieve target error
target_error = 1e-3
r_optimal = binary_search_r(
    h_list=h_list,
    order=2,
    t=1.0,
    target_error=target_error,
    norm_type='spectral'
)
print(f"Need r={r_optimal} steps for error < {target_error}")

Package Structure

qsimkit/
├── spin.py           # Spin Hamiltonian models
├── fermion.py        # Fermionic Hamiltonians
├── states.py         # Quantum states (GHZ, W, random)
├── trotter.py        # Trotter-Suzuki product formulas
├── bounds.py         # Error bound calculations
├── measure.py        # Operators (commutator, norm, etc.)
├── channel.py        # Quantum channels
├── utils.py          # Utility functions
└── plot_config.py    # Plotting configuration

Documentation

More examples and tutorials: https://jue-xu.github.io/cookbook-quantum-simulation

Citation

If you use Qsimkit in your research, please cite:

@software{qsimkit,
  author = {Xu, Jue},
  title = {Qsimkit: Quantum Simulation Toolkit},
  url = {https://github.com/Jue-Xu/Qsimkit},
  year = {2024}
}

Migration from quantum-simulation-recipe

If you're upgrading from the old quantum-simulation-recipe package:

# Old imports
from quantum_simulation_recipe.spin import Nearest_Neighbour_1d
from quantum_simulation_recipe.trotter import pf
from quantum_simulation_recipe.bounds import tight_bound

# New imports (just change package name)
from qsimkit.spin import Nearest_Neighbour_1d
from qsimkit.trotter import pf
from qsimkit.bounds import tight_bound

All functionality remains the same, just the package name has changed.

Development

Running Tests

pytest tests/

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

Apache License 2.0 - see LICENSE file for details.

Contact

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

qsimkit-0.1.12.tar.gz (25.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

qsimkit-0.1.12-py3-none-any.whl (25.8 kB view details)

Uploaded Python 3

File details

Details for the file qsimkit-0.1.12.tar.gz.

File metadata

  • Download URL: qsimkit-0.1.12.tar.gz
  • Upload date:
  • Size: 25.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for qsimkit-0.1.12.tar.gz
Algorithm Hash digest
SHA256 de34e84c62705b062e8b6b16a130e5dbae8c33d76edac66ecb738edab9c9dedf
MD5 cf359465e4b4f519b9ebf026e63d3d6e
BLAKE2b-256 259a0e26970e12f0180789103cd8a986fb33b5548ea2f4feaf8e481356fccfb1

See more details on using hashes here.

File details

Details for the file qsimkit-0.1.12-py3-none-any.whl.

File metadata

  • Download URL: qsimkit-0.1.12-py3-none-any.whl
  • Upload date:
  • Size: 25.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for qsimkit-0.1.12-py3-none-any.whl
Algorithm Hash digest
SHA256 aa9ccdcffe6ff01158e726d77a2aa1db560093fa77c88737f1e6207f12d6c060
MD5 e1622d2c7ef8461d060325986f53342f
BLAKE2b-256 97d74a1b1b7c39943a2da9aae9d216a5ed1cf3c6f0129d8c9882269a036a1177

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page