SME solver guide¶
The stochastic master equation (SME) solver adds measurement-conditioned open-system evolution on top of the v0.5 Lindblad solver.
What it solves¶
For homodyne detection, QubitOS evolves the conditional density matrix
d rho_c = L(rho_c) dt + sqrt(eta) H[c](rho_c) dW
where:
L(.) Lindblad drift term
eta measurement efficiency in [0, 1]
H[c](.) measurement innovation superoperator
dW Wiener increment
When eta = 0, the solver dispatches to the existing Lindblad path exactly.
Python API¶
import numpy as np
from qubitos.lindblad import CollapseOperator
from qubitos.sme import SMEConfig, SMESolver
rho0 = np.array([[0.5, 0.5], [0.5, 0.5]], dtype=np.complex128)
hamiltonians = [np.zeros((2, 2), dtype=np.complex128) for _ in range(80)]
collapse_ops = [CollapseOperator.amplitude_damping(t1_us=50.0)]
config = SMEConfig(
num_time_steps=80,
duration_ns=160.0,
measurement_efficiency=0.6,
random_seed=123,
store_measurement_record=True,
)
solver = SMESolver(config=config, collapse_ops=collapse_ops)
result = solver.solve_trajectory(rho0, hamiltonians)
Key result fields¶
final_density_matrix
Final conditional state.
measurement_record
Homodyne current samples for accepted substeps.
max_trace_deviation
Largest unit-trace drift seen before renormalization.
positivity_violations
Count of accepted steps whose minimum eigenvalue fell below the
configured tolerance before any optional projection.
dt_history
Accepted adaptive timesteps in seconds.
Ensembles¶
Use solve_ensemble(...) to average many conditional trajectories.
ensemble = solver.solve_ensemble(
rho0,
hamiltonians,
num_trajectories=256,
)
The ensemble result reports:
mean_density_matrix
variance_real
variance_imag
mean_fidelity / std_fidelity
convergence_trace_distance
Validation¶
Every density-matrix surface emitted by qubitos.sme is validated at the module boundary. Trajectory outputs use a stochastic tolerance override; ensemble averages use the strict density-matrix tolerance.