Skip to content

SME trajectory tutorial

This example runs one monitored amplitude-damping trajectory and inspects the measurement record.

Example

import numpy as np

from qubitos.lindblad import CollapseOperator
from qubitos.sme import SMEConfig, SMESolver

rho0 = np.array(
    [[0.0, 0.0],
     [0.0, 1.0]],
    dtype=np.complex128,
)

hamiltonians = [
    np.zeros((2, 2), dtype=np.complex128)
    for _ in range(400)
]

config = SMEConfig(
    num_time_steps=400,
    duration_ns=500_000.0,
    measurement_efficiency=1.0,
    random_seed=3,
    store_trajectory=True,
    store_measurement_record=True,
)

solver = SMESolver(
    config=config,
    collapse_ops=[CollapseOperator.amplitude_damping(t1_us=50.0)],
)

result = solver.solve_trajectory(rho0, hamiltonians)

print("ground population:", result.final_density_matrix[0, 0].real)
print("accepted substeps:", result.steps)
print("positivity violations:", result.positivity_violations)
print("largest current sample:", max(abs(x) for x in result.measurement_record))

What to look for

ground population
    Approaches 1.0 after several T1 lifetimes.

accepted substeps
    May exceed num_time_steps if adaptive halving triggers.

positivity violations
    Usually zero for modest timesteps. If nonzero, reduce the nominal
    timestep or enable positivity_projection.

measurement record
    Contains the feedback-ready homodyne current exposed by v0.6.0.