Source code for quchip.extensions.drives

"""Reference drives with multi-observable coupling and drive-owned loss."""

from __future__ import annotations

from typing import Any

from quchip.control.drive import ChargeDrive, DeviceDrive
from quchip.declarative.dissipation import CollapseChannel
from quchip.declarative.parameters import UNBOUND, Scalar, parameter
from quchip.devices.base import BaseDevice
from quchip.devices.protocols import ChargeCoupled, PhaseCoupled


[docs] class ChargePhaseDrive(DeviceDrive): """Map delivered I and Q quadratures to charge and phase observables. Parameters ---------- target : device or None, default None Optional target device. ``None`` allows attachment through the normal drive connection API. label : str or None, default None Drive label. """ _type_prefix = "charge_phase"
[docs] def hamiltonian(self, target: Any, signal: Any) -> Any: """Return the I/Q Hamiltonian for a charge-and-phase coupled target. Parameters ---------- target : device Device implementing charge and phase coupling protocols. signal : signal Delivered I/Q signal. """ if not isinstance(target, ChargeCoupled) or not isinstance(target, PhaseCoupled): raise TypeError( f"ChargePhaseDrive requires {type(target).__name__} to define " "charge_coupling_operator() and phase_coupling_operator()." ) return ( signal.i * target.charge_coupling_operator() - signal.q * target.phase_coupling_operator() )
[docs] class LossyChargeDrive(ChargeDrive): """Charge-control line with an effective target-relaxation rate. Parameters ---------- line_loss_rate : float Non-negative effective relaxation rate in 1/ns. target : device or None, default None Optional target passed to :class:`~quchip.control.drive.ChargeDrive`. label : str or None, default None Drive label. """ _type_prefix = "lossy_charge" line_loss_rate: Scalar = parameter( default=UNBOUND, nonnegative=True, unit="1/ns", noise=True, kw_only=True, )
[docs] def dissipation(self, device: BaseDevice, op: Any, p: Any) -> tuple[CollapseChannel, ...]: """Return the effective line-loss collapse channel. Parameters ---------- device : BaseDevice Target device. op : operator namespace Target lowering operator namespace. p : ParameterNamespace Bound drive parameters. """ return ( CollapseChannel( op.a, p.line_loss_rate, "line_relaxation", ), )