Continuous-time Lindblad dynamics and open-system observables

Open
#174 1 comment 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
25/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Active
Tech stack
python

Research direction

Start with tensorcircuit/timeevol.py and the repository’s backend fixtures to understand the existing JAX ODE path and integration conventions. The proposal asks maintainers to first settle the public contract, backend coverage, and native solver versus adapter boundary; it does not identify a specific implementation file or test. Done means a scoped solver interface with the stated validation, gradient checks, and first paper example, after that design is agreed.

Written by the indexing model from the issue text.

Description

TEP - Continuous-time Lindblad dynamics and open-system observables

Abstract

Add a reusable continuous-time open-system workflow, starting with finite-dimensional, time-dependent Lindblad evolution. It would connect Hamiltonians, collapse operators, initial density matrices and observables to trajectories and parameter gradients. Steady states, quantum-regression correlations and stochastic trajectories would be separately scoped follow-ups.

Assessment baseline: upstream d7793995, checked on 2026-10-22. This is an idea for maintainer discussion.

Motivation and Scope

TCNG already provides density-matrix circuits, Kraus channels and Hamiltonian/time-evolution utilities. The existing ODE path is JAX-only. These components do not provide a public workflow that directly accepts a Lindblad model and returns its continuous dissipative dynamics. Users currently have to construct and validate that solver themselves or use another package.

The first milestone would support:

  • Static or time-dependent finite-dimensional Hamiltonians and collapse operators, with the convention $L_k=\sqrt{\gamma_k}A_k$.
  • Density-matrix initial states, requested output times, observables and integration diagnostics.
  • Gradients of deterministic terminal objectives with respect to control parameters, plus JIT and batched evaluation on explicitly supported backends.
  • Direct action of the Lindblad generator on the density matrix, without requiring a dense $D^2\times D^2$ Liouvillian.

Steady-state/QRT observables are the next milestone. Quantum jumps and continuous-monitoring SME/SSE require separate random-process and measurement-record contracts. Non-Markovian memory belongs in a separate process-tensor proposal.

Usage and Impact

Illustrative API for discussion only; the namespace and functions below do not exist:

import tensorcircuit as tc

def loss(parameters):
    result = tc.open_systems.lindblad_solve(
        hamiltonian=lambda t: driven_hamiltonian(t, parameters),
        collapse_operators=collapse_operators,
        initial_state=rho0,
        times=times,
        observables=observables,
    )
    return terminal_loss(result.states[-1])

compiled_loss_and_grad = tc.backend.jit(tc.backend.value_and_grad(loss))

The Hamiltonian, operators, time grid and objective are supplied by the user. This allows pulse calibration and dissipative parameter sweeps to compose with TCNG workflows.

Paper calculations enabled by the proposed stages:

Paper Calculation TCNG cannot directly perform through an existing workflow Proposed reproduction target
Hyyppä et al., Reducing Leakage of Single-Qubit Gates for Superconducting Quantum Processors Using Analytical Control Pulse Envelopes, PRX Quantum 5, 030353 (2024) Four-level driven Duffing dynamics with relaxation, thermal excitation and dephasing. Appendix C explicitly uses QuTiP mesolve. First milestone: numerical gate-error/leakage curves in Fig. 3a and 3c, using the paper's pulse and noise parameters.
Herrmann et al., Coherent Coupling of a Diamond Tin-Vacancy Center to a Tunable Open Microcavity, PRX 14, 041013 (2024) Steady-state transmission and two-time photon correlations; Appendix E uses QuTiP. Later steady-state/QRT milestone: theoretical curves in Fig. 4c and 4d, matching Fock cutoff and time binning.

These additions would supply the missing numerical workflows. The examples would still need the published model parameters and convergence checks; experimental data acquisition is outside scope. For the first paper, the public archive includes data and pulse helpers, but a complete master-equation reproduction script has not been confirmed.

Follow-up applications: quantum jumps and continuous monitoring. These require separately scoped stochastic solvers and measurement-record contracts.

  • Xu et al., Fault-Tolerant Operation of Bosonic Qubits with Discrete-Variable Ancillae, PRX 14, 031016 (2024), use QuTiP Monte Carlo evolution for fault-tolerant operations. Their public Teleportation_Sweep.py calls mcsolve. Selected teleportation average-infidelity points in Fig. 7a would test continuous no-jump evolution, jump events, conditional operations and trajectory averaging. The script's default sampling settings still require convergence checks.
  • Schmolke and Lutz, Measurement-Induced Quantum Synchronization and Multiplexing, PRL 132, 010402 (2024), motivate conditional magnetization trajectories in an eight-spin chain under continuous monitoring (Fig. 1). Deterministic ensemble evolution cannot replace this observable. The authors' software has not been confirmed; QuTiP smesolve and Dynamiqs dsmesolve are independent implementation references.
  • Zhu et al., Minimalistic and scalable quantum reservoir computing enhanced with feedback, npj Quantum Information 11, 195 (2025), explicitly use QuTiP smesolve. Fig. 7a provides a complementary target for finite measurement-trajectory effects. This motivates conditional states and measurement records; the reservoir architecture remains in the example. The paper also uses an infinite-sampling deterministic limit, so this SME target should not be generalized to all its results.

Backward compatibility

Use an additive solver interface and preserve existing circuit/noise semantics. Reference packages should remain optional. Backend support must be explicit: extending the existing JAX ODE path does not establish NumPy, TensorFlow or PyTorch support.

Related Work

Implementation

  • Agree on the public contract, backend coverage and native-solver versus adapter boundary.
  • Implement the generator through tc.backend, reuse suitable integration infrastructure, and validate trace/Hermiticity, analytical amplitude damping and the unitary limit.
  • Validate parameter gradients independently and compare against QuTiP/Dynamiqs at matched numerical error. Separate compilation time, execution time and memory.
  • Add the first paper example, API documentation and changelog entry. Use repository backend fixtures and highp where needed; run the required checks for the eventual code PR.
  • Design steady-state/QRT separately, including how non-unique steady states are handled. Regression must propagate unnormalized, potentially non-Hermitian auxiliary operators such as $B\rho$ without forcing their trace to one.
  • For jump/SME solvers, define monitored and unmonitored channels, monitoring efficiencies, explicit random keys, conditional states and measurement/jump records.
  • Validate stochastic ensemble averages against the corresponding master equation, as well as waiting-time or measurement-record statistics. Identical integer seeds in different packages do not imply identical trajectories. Separate stochastic time-discretization error from Monte Carlo uncertainty.

Alternatives

A thin optional Dynamiqs/QuTiP adapter may deliver more value than a new integrator. Discrete noisy circuits can approximate some models after a separate discretization analysis, but do not supply the requested continuous-time interface.

Questions for maintainers: Is a native Lindblad model/solver interface useful enough to add? Should the first implementation reuse the current JAX ODE path or wrap an external solver? Should steady-state/QRT be a separate TEP?

References

Dominant language
Python
Stars
92
Forks
25
Avg merge
21h 12m
Merged PRs (30d)
57

Getting set up

Open in Codespaces

Starts the project's dev container in your browser, under your own GitHub account.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from tensorcircuit/tensorcircuit-ng

All issues in tensorcircuit/tensorcircuit-ng

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.