Source code for quchip.devices.protocols

"""Runtime-checkable Protocols for physical-operator drive dispatch.

Devices expose their *physical* charge / phase / flux operators in their
authored local basis. Drives require these declarations so their matrix
elements remain physically explicit; the engine then
applies the device's resolved local-basis transformation with every other
attached operator.

These Protocols are :func:`typing.runtime_checkable` so that
``isinstance(device, ChargeCoupled)`` works at runtime. A device
conforms by defining the named method — no explicit subclassing
required. This includes
:class:`~quchip.interop.eigenbasis.EigenbasisDevice` and external devices.

The accessors follow the common operator extension contract: symbolic
expressions are preferred, while matrices and pure JAX callables remain
valid. The engine resolves every form through the same local-basis boundary.
"""

from __future__ import annotations

from typing import Any, Protocol, runtime_checkable

from quchip.backend.protocol import Operator


[docs] @runtime_checkable class ChargeCoupled(Protocol): """Device exposes the physical charge operator in its authored local basis. :class:`~quchip.control.drive.ChargeDrive` dispatches against this Protocol and emits drives using :meth:`charge_coupling_operator`. """
[docs] def charge_coupling_operator(self) -> Operator: """Return the physical charge operator in the authored local basis.""" ...
[docs] @runtime_checkable class PhaseCoupled(Protocol): """Device exposes the physical phase-space coupling operator. Returns :math:`\\sin\\hat\\varphi` on a charge-basis transmon (where :math:`\\hat\\varphi` is not single-valued in the integer charge basis) or :math:`\\hat\\varphi` on a fluxonium (where it is well-defined). Used by :class:`~quchip.control.drive.PhaseDrive`. """
[docs] def phase_coupling_operator(self) -> Operator: """Return the physical phase-space coupling operator in the authored basis.""" ...
[docs] @runtime_checkable class FluxCoupled(Protocol): """Device exposes the physical flux-line coupling operator. For a fluxonium this is :math:`\\hat\\varphi`. Used by :class:`~quchip.control.drive.FluxDrive`. """
[docs] def flux_coupling_operator(self) -> Operator: """Return the physical flux-line coupling operator in the authored basis.""" ...
[docs] @runtime_checkable class FrequencyControlled(Protocol): """Device exposes a frequency-vs-flux relation, i.e. it is frequency-tunable. :func:`~quchip.chip.transformations.eliminate_device.reduce_device` uses ``isinstance(mode, FrequencyControlled)`` to decide whether an eliminated mode's mediated-exchange fold should stay tunable — emitting a :class:`~quchip.chip.couplings.TunableCapacitive` — rather than a fixed :class:`~quchip.chip.couplings.Capacitive`. :class:`~quchip.devices.transmon.flux_tunable.FluxTunableTransmon` satisfies this Protocol structurally, with no explicit subclassing. """
[docs] def frequency_at(self, flux: Any) -> Any: """Return the device's transition frequency at the given flux bias.""" ...