quchip.devices.transmon.duffing

Duffing-approximation transmon qubit.

Hamiltonian:

\[H = \omega \, \hat{n} + \tfrac{\alpha}{2} \, \hat{n}\,(\hat{n} - \mathbb{1})\]

where \(\hat{n} = a^\dagger a\), \(\omega\) is the bare 0 -> 1 transition frequency and \(\alpha\) is the anharmonicity (conventionally negative for a transmon, \(\alpha \sim -200\ \text{MHz}\)).

Approximation & regime of validity

The Kerr / Duffing expansion of the transmon’s cosine Josephson potential truncated at quartic order:

\[H_{\text{full}} = 4 E_C (\hat{n} - n_g)^2 - E_J \cos \hat{\phi}\]

expanded to \(\hat{\phi}^4\) after rotating-frame normal ordering. Validity conditions (Koch et al. 2007):

  • Transmon regime, \(E_J / E_C \gtrsim 50\). The charge-dispersion of the lowest levels becomes exponentially small in \(\sqrt{8 E_J / E_C}\), so offset-charge noise is suppressed and a weakly anharmonic oscillator is a good approximation of the qubit.

  • Low-lying levels only. Higher levels probe more of the cosine nonlinearity and deviate from the quartic truncation.

  • Anharmonicity \(\alpha \approx -E_C\), with \(\omega_{01} \approx \sqrt{8 E_J E_C} - E_C\).

Not captured: full charge-basis spectrum, higher-order nonlinearities (\(\hat{\phi}^6\) and beyond), flux-tunability, two-qubit dispersive shifts beyond what couplings/drives supply.

References

  • Koch, Yu, Gambetta, Houck, Schuster, Majer, Blais, Devoret, Girvin & Schoelkopf, Charge-insensitive qubit design derived from the Cooper pair box, Physical Review A 76, 042319 (2007), Eq. 2.6 (Duffing form); Eqs. 2.11–2.12 (regime of validity).

  • Didier, Sete, da Silva & Rigetti, Analytical modeling of parametrically modulated transmon qubits, Physical Review A 97, 022330 (2018) — anharmonic-oscillator sector used in pulse-level modelling.

  • Krantz, Kjaergaard, Yan, Orlando, Gustavsson & Oliver, A quantum engineer’s guide to superconducting qubits, Applied Physics Reviews 6, 021318 (2019) — §III.B for the Duffing form, §V for the T1 / T2 / thermal channels that the base class attaches.

Noise hooks inherited from BaseDevice (T1, T2, thermal_occupation) produce the standard Lindblad channels described in that base class.

Example

>>> from quchip.chip import Chip
>>> from quchip.devices import DuffingTransmon, Resonator
>>> q = DuffingTransmon(freq=5.0, anharmonicity=-0.25, levels=3, label="q")
>>> r = Resonator(freq=7.0, levels=6, label="r")
>>> chip = Chip(devices=[q, r])
>>> q.computational, q.freq, q.anharmonicity
(True, 5.0, -0.25)

Functions

duffing_expr(op, freq, anharmonicity)

Shared Duffing local Hamiltonian H = omega n + (alpha/2) n (n - I).

Classes

DuffingTransmon([freq, anharmonicity, ...])

Transmon modelled as a weakly anharmonic Duffing oscillator.

quchip.devices.transmon.duffing.duffing_expr(op, freq, anharmonicity)[source]

Shared Duffing local Hamiltonian H = omega n + (alpha/2) n (n - I).

class quchip.devices.transmon.duffing.DuffingTransmon(freq=unbound, anharmonicity=unbound, *, levels=3, label=None, T1=None, T2=None, thermal_occupation=None)[source]

Bases: FockDevice

Transmon modelled as a weakly anharmonic Duffing oscillator.

Parameters:
  • freq (float) – Bare 0 -> 1 transition frequency ω in GHz. Must be positive. Can be a JAX tracer for sweeps / gradients.

  • anharmonicity (float) – Anharmonicity α in GHz. Usually negative for superconducting transmons (for example -0.25 GHz). Can be a JAX tracer.

  • levels (int, default 3) – Fock-space truncation. Three levels suffice for leakage-aware single-qubit modelling. Increase it for higher-level physics (for example iSWAP-family gates through the |02>-|11> crossing).

  • label (str | None, default None) – If omitted, auto-generated as duffing_{idx} with the shared labeling counter.

  • T1 (float or None, default None) – Energy-relaxation time in ns. None disables T1 relaxation.

  • T2 (float or None, default None) – Total 0-1 coherence time in ns, not a pure-dephasing time. If both are set, it must satisfy T2 <= 2*T1. None disables T2 noise.

  • thermal_occupation (float or None, default None) – Dimensionless mean bath occupation. None disables thermal absorption.

References

Koch et al., Phys. Rev. A 76, 042319 (2007), https://doi.org/10.1103/PhysRevA.76.042319.

Example

>>> from quchip.devices import DuffingTransmon
>>> q = DuffingTransmon(freq=5.0, anharmonicity=-0.25, T1=30_000.0, T2=20_000.0)
>>> len(q.collapse_operators()) >= 1
True
tunable_param_names = ('freq', 'anharmonicity')

Parameters eligible for inverse design. DeviceModel derives these from declared fields unless the class or an ancestor supplies a tuple. Explicit tuples remain authoritative when inherited; an empty tuple excludes the device from inverse design. Plain BaseDevice subclasses default to an empty tuple without derivation.

dressed_fit_target_fields = (('freq', 'freq'), ('anharmonicity', 'anharmonicity'))

(dressed_observable, declared_field) pairs used when this device appears in the desired-chip form of fit_a_dress. Empty means that the model makes no automatic dressed-target claim; circuit-level models can remain fixed until the user supplies explicit constraints.

dressed_fit_param_names = ('freq', 'anharmonicity')

Bare parameters normally varied to reproduce dressed_fit_target_fields. This remains separate from tunable_param_names: a model may expose parameters for sweeps without claiming that inverse design can identify all of them from its default dressed observables.

approximation = 'Duffing expansion: cosine Josephson potential truncated at 4th order.'

Declared approximation-regime statement surfaced by physics_notes() — the mechanism that keeps a model’s stated validity range attached to the class rather than buried in a docstring a caller may not read.

computational = True

Whether this device represents a computational qubit, as opposed to e.g. a bus resonator or a coupler element.

freq: Scalar = Parameter(default=unbound, positive=True, nonnegative=False, serialize=True, unit='GHz', symbol='\\omega', noise=False, kw_only=False, required=False)
anharmonicity: Scalar = Parameter(default=unbound, positive=False, nonnegative=False, serialize=True, unit='GHz', symbol='\\alpha', noise=False, kw_only=False, required=False)
local_hamiltonian(op, p)[source]

Return the local Duffing Hamiltonian.

Parameters:
physics_notes()[source]

Return declared Duffing-approximation validity notes.