quchip.devices.fluxonium

Fluxonium — phase-basis fluxonium qubit model.

Hamiltonian (native basis):

\[H = 4 E_C \hat n^2 + \tfrac{1}{2} E_L (\hat\varphi + 2\pi \varphi_\mathrm{ext})^2 - E_J \cos\hat\varphi\]

where \(\hat\varphi\) is diagonal on a plane-wave phase grid and \(\hat n = -i \partial_\varphi\) via 2nd-order central finite difference. Non-periodic phase basis because \(E_L\) breaks the compact-phase symmetry.

Convergence

The kinetic term uses 2nd-order central finite differences on the phase grid, so the discretization error scales as 1/num_basis**2. As a measured example (not a general guarantee): at E_J=4, E_C=1, E_L=0.9 at the flux sweet spot (phi_ext=0.5), the default num_basis=400 gives an eigenvalue error of about 1.3e-2 GHz relative to a converged reference. Double num_basis until the observable of interest stabilizes.

References

  • Manucharyan, Koch, Glazman & Devoret, Fluxonium: single Cooper-pair circuit free of charge offsets, Science 326, 113 (2009).

  • Nguyen et al., Blueprint for a High-Performance Fluxonium Quantum Processor, PRX Quantum 3, 037001 (2022).

  • Smith, Kou, Vool, Koch, Glazman & Devoret, Superconducting circuit protected by two-Cooper-pair tunneling, npj QI 6, 8 (2020) — relaxation matrix-element conventions.

Example

>>> from quchip.devices.fluxonium import Fluxonium
>>> q = Fluxonium(E_C=1.0, E_J=4.0, E_L=1.0, phi_ext=0.5, levels=5)

Classes

Fluxonium(E_C, E_J, E_L[, phi_ext, levels, ...])

Fluxonium qubit on a non-periodic plane-wave phase basis.

class quchip.devices.fluxonium.Fluxonium(E_C, E_J, E_L, phi_ext=0.0, levels=10, label=None, *, num_basis=400, phi_max=None, collapse_model='fermi_golden', coupling_channel=None, collapse_rate_threshold=1e-08, **noise_kwargs)[source]

Bases: CircuitDevice

Fluxonium qubit on a non-periodic plane-wave phase basis.

Parameters:
  • E_C (float) – Charging energy in GHz. Positive. JAX-traceable.

  • E_J (float) – Josephson energy in GHz. Positive. JAX-traceable.

  • E_L (float) – Inductive energy in GHz. Positive. JAX-traceable.

  • phi_ext (float, default 0.0) – External flux in units of \(\Phi_0\) (0.5 = half-flux sweet spot). JAX-traceable.

  • levels (int, default 10) – Truncated eigenbasis size.

  • label (str or None)

  • num_basis (int, default 400) – Phase-basis grid points.

  • phi_max (float, default 5 * pi) – Phase grid half-range; grid is [-phi_max, +phi_max).

  • collapse_model (see) – CircuitDevice. coupling_channel is required when collapse_model='fermi_golden' (the default) with T1 set — pick 'flux' at or near the flux sweet spot (phi_ext = 0.5), where relaxation is flux-noise-dominated, and 'charge' for charge-operator-limited T1 regimes.

  • coupling_channel (see) – CircuitDevice. coupling_channel is required when collapse_model='fermi_golden' (the default) with T1 set — pick 'flux' at or near the flux sweet spot (phi_ext = 0.5), where relaxation is flux-noise-dominated, and 'charge' for charge-operator-limited T1 regimes.

  • collapse_rate_threshold (see) – CircuitDevice. coupling_channel is required when collapse_model='fermi_golden' (the default) with T1 set — pick 'flux' at or near the flux sweet spot (phi_ext = 0.5), where relaxation is flux-noise-dominated, and 'charge' for charge-operator-limited T1 regimes.

  • **noise_kwargs – Forwarded to BaseDevice.

Notes

The T1 collapse-operator model depends on coupling_channel: 'charge' uses \(\hat n\) matrix elements (Breuer-Petruccione §3.4, Smith 2020 §III.B); 'flux' uses \(\hat\varphi\) matrix elements (proportional to \(\partial H/\partial\varphi_\mathrm{ext}\) since only the \(\hat\varphi\) term is operator-valued there). Inherited pure dephasing uses level-index scaling — physically incomplete for fluxonium away from sweet spot, where flux-noise-weighted dephasing is the physical channel. Sweet-spot accurate dephasing is a follow-up PR.

tunable_param_names = ('E_C', 'E_J', 'E_L', 'phi_ext')

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 the DeviceModel lineage — 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").

approximation = 'Exact diagonalization on a finite phase grid; 2nd-order central finite differences for the kinetic term; accuracy governed by num_basis.'

Declared approximation-regime statement surfaced by physics_notes(), mirroring approximation — this class does not inherit from DeviceModel, so the attribute and its surfacing are declared here directly.

flux_coupling_operator()[source]

Return the flux-line coupling operator \(V^\dagger \hat\varphi V\).

Return type:

Any

physics_notes()[source]

Return declared phase-basis discretization assumptions.

Return type:

list[str]

property computational: bool

Fluxonium is a computational qubit.

to_dict()[source]

Extend CircuitDevice.to_dict() with the fluxonium circuit parameters.

Return type:

dict[str, Any]

classmethod from_dict(d)[source]

Reconstruct from to_dict() output.

On the registry root, dispatch to the concrete subclass named by data["type"] (forwarding *args / **kwargs). On a concrete subclass, defer to _from_dict_payload(). Concrete subclasses that carry payload override this method directly.

Parameters:

d (dict[str, Any])

Return type:

Fluxonium