quchip.devices.transmon¶
Transmon device models.
DuffingTransmon— weakly anharmonic Duffing approximation (valid in the transmon regime \(E_J \gg E_C\); Koch et al. PRA 76, 042319 (2007)).FluxTunableTransmon— SQUID-dispersion flux-tunable transmon (symmetric or asymmetric), suitable for parametric/flux-driven operations and tunable couplers. Inherits fromBaseDevicedirectly; constructor takes physical dressed parameters.ChargeBasisTransmon— exact charge-basis diagonalization; captures charge-dispersion with \(n_g\) outside the deep transmon regime.
- class quchip.devices.transmon.ChargeBasisTransmon(E_C, E_J, n_g=0.0, levels=3, label=None, *, num_basis=61, collapse_model='fermi_golden', coupling_channel=None, collapse_rate_threshold=1e-08, **noise_kwargs)[source]¶
Bases:
CircuitDeviceTransmon in the integer charge basis — exact diagonalization.
- Parameters:
E_C (float) – Charging energy in GHz. Must be positive. May be a JAX tracer.
E_J (float) – Josephson energy in GHz. Must be positive. May be a JAX tracer.
n_g (float, default
0.0) – Offset charge (units of \(2e\)). May be a JAX tracer.levels (int, default
3) – Truncated eigenbasis size.label (str or None) – Auto-generated as
charge_basis_transmon_{n}if omitted.num_basis (int, default
61) – Charge-basis cutoff — must be odd, corresponding to \(n \in [-n_\mathrm{cut}, +n_\mathrm{cut}]\) with \(n_\mathrm{cut} = (\text{num\_basis} - 1)/2\).collapse_model (
"fermi_golden"or"ladder", default"fermi_golden") – SeeCircuitDevice.collapse_rate_threshold (float, default
1e-8) – SeeCircuitDevice.**noise_kwargs – Forwarded to
BaseDevice(T1,T2,thermal_population).coupling_channel (Literal['charge', 'flux'] | None)
Notes
The T1 collapse-operator normalization assumes T1 is set by charge-operator-coupled relaxation (Breuer & Petruccione §3.4). For phonon / quasiparticle / flux-dominated T1, override
collapse_operators()or passcollapse_model='ladder'.- tunable_param_names = ('E_C', 'E_J', 'n_g')¶
Bare parameters this device exposes as differentiable / tunable scalars.
fit_a_dresswalks 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
DeviceModellineage — the default is derived: every declaredparameter()field, in declaration order (seeDeviceModel.__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)BaseDevicesubclass there is no derivation; the default stays empty unless the subclass declares its own tuple — e.g.Fluxoniumuses("E_C", "E_J", "E_L", "phi_ext").
- approximation = 'Exact diagonalization in the truncated integer charge basis; accuracy governed by num_basis.'¶
Declared approximation-regime statement surfaced by
physics_notes(), mirroringapproximation— this class does not inherit fromDeviceModel, so the attribute and its surfacing are declared here directly.
- tunable_param_bounds(name, value)[source]¶
n_glives in[-0.5, 0.5](one charge period); other params delegate.
- classmethod from_frequency(freq, anharmonicity, n_g=0.0, levels=3, label=None, *, num_basis=61, collapse_model='fermi_golden', coupling_channel=None, collapse_rate_threshold=1e-08, **noise_kwargs)[source]¶
Construct from (freq, anharmonicity) using the Koch-regime inversion.
Uses \(E_C = -\alpha\) and \(E_J = (\omega + E_C)^2 / (8 E_C)\). Residual between the Duffing approximation and the exact diagonalized spectrum is typically <1% for \(E_J/E_C > 50\), growing below that. A concrete-scalar warning fires at \(E_J/E_C < 20\).
- Parameters:
- Return type:
- 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:
- Return type:
- class quchip.devices.transmon.DuffingTransmon(freq, anharmonicity, *, levels=3, label=None, T1=None, T2=None, thermal_population=None)[source]¶
Bases:
DeviceModelTransmon modelled as a weakly anharmonic Duffing oscillator.
- Parameters:
freq (float) – Bare
0 -> 1transition frequency ω in GHz. Must be positive. May be a JAX tracer for sweeps / gradients.anharmonicity (float) – Anharmonicity α in GHz. Typically negative for superconducting transmons (e.g.
-0.25GHz). May be a JAX tracer.levels (int, default 3) – Fock-space truncation. Three levels suffice for leakage-aware single-qubit modelling; increase for higher-level physics (e.g. iSWAP-family gates via the
|02>-|11>crossing).label (str | None, default None) – If omitted, auto-generated as
duffing_{idx}via the shared labeling counter.**noise_kwargs – Forwarded to
BaseDevice—T1,T2,thermal_population.
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')¶
Bare parameters this device exposes as differentiable / tunable scalars.
fit_a_dresswalks 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
DeviceModellineage — the default is derived: every declaredparameter()field, in declaration order (seeDeviceModel.__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)BaseDevicesubclass there is no derivation; the default stays empty unless the subclass declares its own tuple — e.g.Fluxoniumuses("E_C", "E_J", "E_L", "phi_ext").
- 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=<object object>, positive=True, nonnegative=False, serialize=True, unit='GHz')¶
- anharmonicity: Scalar = Parameter(default=<object object>, positive=False, nonnegative=False, serialize=True, unit='GHz')¶
- class quchip.devices.transmon.FluxTunableTransmon(freq, anharmonicity, flux_bias=0.0, asymmetry=0.0, *, levels=3, label=None, T1=None, T2=None, thermal_population=None)[source]¶
Bases:
DeviceModelSQUID-dispersion flux-tunable transmon.
The constructor takes the calibrated local physical parameters; SQUID metadata is derived on read and is not part of the public interface.
- Parameters:
freq (float) – Calibrated local
0 -> 1transition frequency ω in GHz, at the storedflux_bias. Must be positive. May be a JAX tracer.anharmonicity (float) – Calibrated local anharmonicity α in GHz, at the stored
flux_bias. Must be negative (α ≈ −E_C). May be a JAX tracer.flux_bias (float, default 0.0) – Calibration-anchor operating point Φ/Φ₀. Any real value; the SQUID inversion is undefined only at the symmetric-SQUID degenerate point (
asymmetry == 0andflux_biasa half-integer — seevalidate()). The local Hamiltonian does not reference this value directly —freqandanharmonicityalready carry it. A pytree leaf, so it is differentiable / sweepable like every other device parameter.asymmetry (float, default 0.0) – SQUID junction asymmetry d = (E_{J1}−E_{J2})/(E_{J1}+E_{J2}). Must be in [0, 1).
levels (int, default 3) – Fock-space truncation.
label (str | None, default None) – Auto-generated as
fluxtunable_{idx}when omitted.**noise_kwargs – Forwarded to
BaseDevice—T1,T2,thermal_population.
- tunable_param_names = ('freq', 'anharmonicity')¶
Bare parameters this device exposes as differentiable / tunable scalars.
fit_a_dresswalks 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
DeviceModellineage — the default is derived: every declaredparameter()field, in declaration order (seeDeviceModel.__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)BaseDevicesubclass there is no derivation; the default stays empty unless the subclass declares its own tuple — e.g.Fluxoniumuses("E_C", "E_J", "E_L", "phi_ext").
- computational = True¶
Whether this device represents a computational qubit, as opposed to e.g. a bus resonator or a coupler element.
- approximation = 'Duffing-approximated SQUID transmon; adiabatic flux (calibration-anchor, no Landau-Zener).'¶
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.
- freq: Scalar = Parameter(default=<object object>, positive=True, nonnegative=False, serialize=True, unit='GHz')¶
- anharmonicity: Scalar = Parameter(default=<object object>, positive=False, nonnegative=False, serialize=True, unit='GHz')¶
- flux_bias: Scalar = Parameter(default=0.0, positive=False, nonnegative=False, serialize=True, unit='Phi_0')¶
- asymmetry: Scalar = Parameter(default=0.0, positive=False, nonnegative=False, serialize=True, unit=None)¶
- validate()[source]¶
Range checks on concrete scalars only; traced values pass unchecked.
- Return type:
None
- local_hamiltonian(op)[source]¶
Return the Duffing Hamiltonian built from the calibrated freq and anharmonicity.
H = ω n + (α/2) n(n − I). Does not referenceflux_bias.- Parameters:
op (LocalOps)
- Return type:
- flux_for_frequency(target_freq)[source]¶
Inverse SQUID dispersion on the monotonic lobe Φ/Φ₀ ∈ [0, 0.5).
- Derivation:
ω(Φ) = sqrt(8 E_C E_J_max sqrt(cos²(πΦ) + d²sin²(πΦ))) − E_C → let S = (ω + E_C)² / (8 E_C E_J_max) → cos²(πΦ)(1 − d²) + d² = S² → cos²(πΦ) = (S² − d²) / (1 − d²)
- Raises:
ValueError – If target_freq is concrete and lands outside the frequency range
frequency_at()reaches over Φ/Φ₀ ∈ [0, 0.5) at the current calibration anchor. A traced target_freq (or a traced anchor) skips this check; the returned flux clips to the lobe endpoint, so out-of-domain behavior is undefined for traced inputs.- Parameters:
target_freq (Any)
- Return type:
Modules
Charge-basis transmon — circuit-level transmon in the integer charge basis. |
|
Duffing-approximation transmon qubit. |
|
Symmetric/asymmetric-SQUID flux-tunable transmon. |