where \(\omega\) is the cavity frequency (GHz, ordinary) and \(K\)
is the Kerr nonlinearity (GHz, positive). Eigenvalues are:
\[E_n = \omega n - K n(n-1)\]
The Kerr term shifts higher Fock levels down by \(K\) per pair of
photons, creating the anharmonic energy ladder that stabilises cat states
when combined with a two-photon parametric drive.
This is an effective single-mode model after adiabatic elimination of the
SNAIL or STS-SQUID that provides the nonlinearity. The Kerr coefficient
\(K\) captures the leading-order nonlinearity; higher-order corrections
are neglected. The Hilbert space is truncated at levels Fock states —
choose levels>=4*(eps2/K)+10 to avoid truncation artefacts.
The nonlinearity \(K\) shifts the photon-number eigenenergies,
making the cavity anharmonic. Combined with a two-photon parametric
drive at \(2\omega\), the steady state becomes a cat state with
amplitude \(\alpha = \sqrt{\varepsilon_2 / K}\).
Parameters:
freq (float) – Cavity frequency \(\omega\) in GHz. Must be positive.
May be a JAX tracer for sweeps / gradients.
kerr (float) – Kerr nonlinearity \(K\) in GHz. Non-negative; positive
value shifts even-photon levels downward. Typically 1–100 MHz
in superconducting circuits.
levels (int) – Fock-space truncation dimension. Choose at least
4*(eps2/K)+10 to avoid truncation artefacts.
Default 30.
**noise_kwargs – Forwarded to BaseDevice:
T1, T2, thermal_population, etc.
Notes
This Hamiltonian is diagonal in the Fock basis and does not itself
define a computational subspace. Combined with a two-photon parametric
drive, the steady state can be engineered into a cat-code manifold
spanned by the even cat state \(|C^+_\alpha\rangle\) and the odd
cat state \(|C^-_\alpha\rangle\). Bit-flip errors within that
manifold are exponentially suppressed, \(\sim e^{-2|\alpha|^2}\),
in the stabilized regime. This class’s inherited Pauli surface
(computational is False) addresses the bare Fock |0>,
|1> subspace; see physics_notes() for the caveat.
Bare parameters this device exposes as differentiable / tunable
scalars. fit_a_dress walks this tuple to discover what it is
allowed to optimize on each device, decoupling the inverse-design
surface from any specific device model. Three states, keyed on
whether the value is explicitly declared:
No explicit declaration anywhere in theDeviceModellineage — the
default is derived: every declared
parameter() field, in
declaration order (see DeviceModel.__init_subclass__).
Explicit tuple on the class or an ancestor — exact curation,
validated at class-definition time; authoritative and inherited
until a subclass explicitly replaces it.
Explicit empty tuple — deliberately freezes the device (and its
subclasses, until one replaces it) out of inverse design.
On a plain (non-DeviceModel) BaseDevice subclass there is
no derivation; the default stays empty unless the subclass declares
its own tuple — e.g. Fluxonium uses
("E_C","E_J","E_L","phi_ext").
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.