quchip.analysis.dispersive_readout

Calculate steady-state dispersive pointer states and detected information.

The model is a linear resonator with vacuum energy loss and fixed qubit state. It excludes ring-up transients, thermal noise, and measurement-induced qubit T1. kappa is the total energy linewidth. kappa_detected is the observed part, before detector efficiency. Elimination’s intrinsic downward-decay summary is not a general linewidth or detected rate.

For drive detuning delta_j = 2pi*(delta_r + j*chi_eff), alpha_j = -i*eps/(kappa/2 + i*delta_j). The ground-state photon number is nbar_0 = |alpha_0|². The dephasing rate is Gamma_m = kappa*|alpha_1-alpha_0|²/2. Heterodyne detection gives SNR = |alpha_1-alpha_0|*sqrt(2*efficiency*kappa_detected*tau).

chi is the full pull f_r|1-f_r|0 in GHz. With Z=|0><0|-|1><1|, the angular coefficient of Z*n_r is -pi*chi. The small-pull limit is 8*(pi*chi)²*nbar_0/kappa divided by 1+(4pi*delta_r/kappa)². It reduces to the usual expression on resonance.

The optional chi/(1+nbar_0/n_crit) interpolation is phenomenological. It does not extend dispersive theory into a controlled strong-drive regime. For a two-level Jaynes-Cummings model, n_crit=Delta²/(4g²) uses the resolved exchange matrix element. Multilevel dispersive limits depend on both qubit transition detunings and the occupied levels.

References

Koch et al., PRA 76, 042319 (2007), section III B: https://arxiv.org/abs/cond-mat/0703002. Gambetta et al., PRA 74, 042318 (2006): https://arxiv.org/abs/cond-mat/0602322. Krantz et al., Applied Physics Reviews 6, 021318 (2019), section V: https://arxiv.org/abs/1904.06560. Blais et al., RMP 93, 025005 (2021), section III.3: https://arxiv.org/abs/2005.12667.

Functions

analyze_dispersive_readout(chi, kappa, tau, *)

Calculate closed-form steady-state readout figures of merit from (chi, kappa).

Classes

DispersiveReadoutResult(pointer_states, ...)

Store steady-state dispersive-readout figures of merit.

class quchip.analysis.dispersive_readout.DispersiveReadoutResult(pointer_states, photon_numbers, sigma, snr, assignment_error, dephasing_rate, chi_eff, validity, notes)[source]

Bases: object

Store steady-state dispersive-readout figures of merit.

All numeric fields stay in the inputs’ array namespace (JAX in, JAX out), so the full result traces under jax.jit/grad. If n_crit was given, validity holds {"n_over_ncrit", "below_ncrit"}, and otherwise is empty. Under jit/grad, below_ncrit is a traced boolean, so read it outside the traced region or branch with jnp.where. Here, chi is the full pull f_r|1 − f_r|0 in GHz.

Variables:
  • pointer_states (Any) – Complex α_j in the IQ plane, shape (levels,).

  • photon_numbers (Any) – Steady-state photons |α_j|², shape (levels,).

  • sigma (Any) – Integrated vacuum-noise width in the cavity amplitude plane. It is 1/sqrt(2*efficiency*kappa_detected*tau), or infinity without detection.

  • snr (Any) – Pointer separation divided by sigma.

  • assignment_error (Any) – ½·erfc(SNR/(2√2)), the optimal linear discriminant between two equal Gaussians.

  • dephasing_rate (Any) – Measurement-induced dephasing Γ_m = κ·|α₁ − α₀|²/2 in 1/ns.

  • chi_eff (Any) – chi, or chi/(1 + n̄₀/n_crit) when n_crit was given (GHz).

  • validity (dict[str, Any]) – See above.

  • notes (list[str]) – Physics that the analysis explicitly drops.

pointer_states: Any
photon_numbers: Any
sigma: Any
snr: Any
assignment_error: Any
dephasing_rate: Any
chi_eff: Any
validity: dict[str, Any]
notes: list[str]
summary()[source]

Print and return a formatted summary.

Concrete values only. Call it outside jax.jit/grad regions.

quchip.analysis.dispersive_readout.analyze_dispersive_readout(chi, kappa, tau, *, n_photons=None, eps=None, delta_r=0.0, n_crit=None, levels=2, kappa_detected=None, efficiency=1.0)[source]

Calculate closed-form steady-state readout figures of merit from (chi, kappa).

Parameters:
  • chi (Any) – Full pull f_r|1-f_r|0 in ordinary GHz. Its signed Pauli coefficient is -chi/2 for Z=|0><0|-|1><1|. Elimination reports this full pull.

  • kappa (Any) – Positive total resonator energy linewidth in 1/ns, including observed and unobserved vacuum loss. Exclude pure dephasing. Elimination’s intrinsic downward-decay diagnostic is not a general replacement.

  • tau (Any) – Positive integration time in ns.

  • n_photons (Any) – Nonnegative ground-state steady photon number, or None. Give exactly one of n_photons and eps. This sets eps=sqrt(n_photons*((kappa/2)**2+(2*pi*delta_r)**2)).

  • eps (Any) – Complex drive rate in rad/ns, or None. Give exactly one of eps and n_photons. It is the coefficient driving the cavity amplitude.

  • delta_r (Any) – Real f_r|0-f_drive in GHz. The default zero drives the ground-state cavity resonance. Positive values place the drive below resonance.

  • n_crit (Any) – Positive critical-occupation estimate, or None by default. When given, apply the phenomenological interpolation chi/(1+nbar_0/n_crit). Report n_over_ncrit and below_ncrit without certifying validity.

  • levels (int) – Static Python integer of at least two, default two. Level j has the assumed pull j*chi. Higher conditional frequencies are not derived from a multilevel Hamiltonian.

  • kappa_detected (Any) – Observed energy-loss rate in 1/ns, between zero and kappa. None defaults to kappa, representing complete collection.

  • efficiency (Any) – Detection efficiency between zero and one, default one. Zero gives zero SNR, infinite sigma, and assignment error one half.

Return type:

DispersiveReadoutResult

Raises:

ValueError – If drive arguments are ambiguous, levels is invalid, or concrete numerical values are nonfinite or outside their stated domains. Numerical domain checks are skipped for tracers. Callers must keep traced inputs within the same physical domains.

Examples

>>> from quchip import analyze_dispersive_readout
>>> ro = analyze_dispersive_readout(chi=0.002, kappa=0.005, tau=500.0, n_photons=2.0)
>>> snr, p_err = ro.snr, ro.assignment_error

Specify total and detected loss from the physical cavity and receiver. For example, kappa_detected=0.004 with kappa=0.005 leaves 0.001/ns unobserved.