quchip.control.signal

Signal-chain transforms for control equipment.

Transforms operate on complete analytic signals keyed by (line_label, source_index) and are owned by ControlEquipment (not by individual drives). The equipment applies them after scheduling and before each destination drive maps physical I/Q quadratures into the Hamiltonian.

Available transforms

  • Delay — per-line time shift.

  • Gain — per-line complex scaling (IQ imbalance, attenuation).

  • Crosstalk — linear leakage from a source line onto a victim line, parameterized by amplitude beta, angle theta, and relative delay. This is the standard single-parameter crosstalk model used e.g. in Sheldon et al., PRA 93, 060302 (2016) for two-qubit gate calibration, and in Sarovar et al., Quantum 4, 321 (2020) for crosstalk characterization.

Examples

>>> from quchip import ChargeDrive, Crosstalk, Delay, Gain
>>> # Crosstalk between two already-constructed drives:
>>> # xt = Crosstalk(source=drive_a, victim=drive_b, beta=0.02, theta=0.1)

Classes

AnalyticSignal(program[, carrier, ...])

Complete complex classical signal delivered on one control line.

Crosstalk(source, victim, beta[, theta, delay])

Linear crosstalk from a source drive line onto a victim line.

Delay(line, delta_t)

Shift every signal on line in time by delta_t ns.

Gain(line, factor)

Scale every signal on line by a complex factor.

SignalTransform()

Abstract base for signal-map transforms, auto-registered for serialization.

class quchip.control.signal.AnalyticSignal(program, carrier=None, phase_reference=None)[source]

Bases: object

Complete complex classical signal delivered on one control line.

program includes the envelope, schedule timing and phase, and any carrier. Classical equipment transforms this complete value before a drive maps its physical quadratures into the quantum Hamiltonian.

Parameters:
program: SignalNode
carrier: Any | None = None
phase_reference: Any | None = None
classmethod from_pulse(pulse)[source]

Build the complete scheduled signal for one pulse record.

Parameters:

pulse (Any)

Return type:

AnalyticSignal

property i: PhysicsExpr

In-phase physical quadrature of the delivered signal.

property q: PhysicsExpr

Quadrature-phase physical component of the delivered signal.

evaluate(t, *, xp=None)[source]

Evaluate the complete complex signal at time t.

Parameters:
Return type:

Any

shifted(delta_t)[source]

Return the signal delayed by delta_t ns.

Parameters:

delta_t (Any)

Return type:

AnalyticSignal

scaled(factor)[source]

Return the signal multiplied by a complex factor.

Parameters:

factor (Any)

Return type:

AnalyticSignal

polar_scaled(amplitude, theta)[source]

Return the signal multiplied by amplitude * exp(i theta).

Parameters:
Return type:

AnalyticSignal

class quchip.control.signal.SignalTransform[source]

Bases: Registrable, ABC

Abstract base for signal-map transforms, auto-registered for serialization.

The type registry, the {"type": ...} to_dict() stamp, and the from_dict dispatch are owned by the shared Registrable mixin; the parameter-less default reconstruction (cls()) covers transforms that carry no persisted state, while payload-carrying transforms override to_dict() / from_dict().

parameter_values()[source]

Return transform-owned bindable values declared by the subclass.

Return type:

dict[str, Any]

with_parameter_value(name, value)[source]

Return this transform with one declared numerical value replaced.

Parameters:
Return type:

SignalTransform

abstractmethod apply(signals)[source]

Return the transformed signal map.

Parameters:

signals (dict[tuple[str, int], AnalyticSignal])

Return type:

dict[tuple[str, int], AnalyticSignal]

referenced_lines()[source]

Return control-line labels referenced by this transform.

Return type:

tuple[str, …]

without_line(line)[source]

Return this transform without line, or None when it must be dropped.

Parameters:

line (str)

Return type:

SignalTransform | None

class quchip.control.signal.Delay(line, delta_t)[source]

Bases: SignalTransform

Shift every signal on line in time by delta_t ns.

Parameters:
line: str
delta_t: float
apply(signals)[source]

Time-shift every signal on line by delta_t ns.

Parameters:

signals (dict[tuple[str, int], AnalyticSignal])

Return type:

dict[tuple[str, int], AnalyticSignal]

referenced_lines()[source]

Return control-line labels referenced by this transform.

Return type:

tuple[str, …]

to_dict()[source]

Serialize into a JSON-safe dictionary.

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:

Delay

class quchip.control.signal.Gain(line, factor)[source]

Bases: SignalTransform

Scale every signal on line by a complex factor.

Parameters:
line: str
factor: complex
apply(signals)[source]

Scale every signal on line by the complex factor.

Parameters:

signals (dict[tuple[str, int], AnalyticSignal])

Return type:

dict[tuple[str, int], AnalyticSignal]

referenced_lines()[source]

Return control-line labels referenced by this transform.

Return type:

tuple[str, …]

to_dict()[source]

Serialize into a JSON-safe dictionary.

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:

Gain

class quchip.control.signal.Crosstalk(source, victim, beta, theta=0.0, delay=0.0)[source]

Bases: SignalTransform

Linear crosstalk from a source drive line onto a victim line.

For each scheduled operation on the source line, adds

\[\beta\, e^{i\theta}\, s_\mathrm{src}(t - \Delta t)\]

onto the victim line. \(s_\mathrm{src}\) is the complete source signal, including its carrier, phase, and both quadratures. Delaying it therefore includes the carrier phase \(2\pi f\Delta t\) without a separate correction (Balewski et al., arXiv:2502.05362; Sheldon et al., PRA 93, 060302 (2016); Sarovar et al., Quantum 4, 321 (2020)).

Parameters:
  • source (str | BaseDrive) – Source drive or its label.

  • victim (str | BaseDrive) – Victim drive or its label.

  • beta (float) – Leakage amplitude (dimensionless).

  • theta (float) – Phase shift applied to the leaked signal, radians.

  • delay (float) – Time shift of the leaked signal relative to the source, ns.

source: str
victim: str
beta: float
theta: float = 0.0
delay: float = 0.0
apply(signals)[source]

Add the phase-rotated, delayed source signal onto the victim line.

Parameters:

signals (dict[tuple[str, int], AnalyticSignal])

Return type:

dict[tuple[str, int], AnalyticSignal]

referenced_lines()[source]

Return control-line labels referenced by this transform.

Return type:

tuple[str, …]

to_dict()[source]

Serialize into a JSON-safe dictionary.

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:

Crosstalk