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. It is the standard single-parameter model, used by Sheldon et al., PRA 93, 060302 (2016) for two-qubit gate calibration. Sarovar et al., Quantum 4, 321 (2020) used it 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 one control line by delta_t ns.

Gain(line, factor)

Scale every signal on one control line by a complex factor.

SignalTransform(**values)

A signal-map transform with shared parameter and setting declarations.

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 (SignalProgram) – Complete envelope, timing, phase, and carrier program.

  • carrier (Any or None, default=None) – Carrier frequency in GHz, when uniquely defined.

  • phase_reference (Any or None, default=None) – Reference used to track coherent phase alignment.

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.

A detuning multiplies the envelope by exp(-2πi detuning τ) at local time τ = t - start_time. Its phase is therefore zero at the pulse start, and the delivered carrier frequency is freq + detuning.

Parameters:

pulse (object) – Scheduled pulse entry with envelope, timing, phase, carrier, and an optional detuning in GHz.

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.

Parameters:
  • t (array-like) – Evaluation times in ns.

  • xp (array namespace or None, default=None) – Numerical array module; inferred when omitted.

shifted(delta_t)[source]

Return a delayed signal.

Parameters:

delta_t (Any) – Delay in ns.

scaled(factor)[source]

Return a signal multiplied by a complex factor.

Parameters:

factor (Any) – Dimensionless complex scale factor.

polar_scaled(amplitude, theta)[source]

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

Parameters:
  • amplitude (Any) – Dimensionless amplitude scale.

  • theta (Any) – Phase rotation in radians.

class quchip.control.signal.SignalTransform(**values)[source]

Bases: Registrable, ABC

A signal-map transform with shared parameter and setting declarations.

Implement apply and declare serializable=True on classes whose fields can be saved. Import the extension before loading its instances.

Parameters:

**values (Any) – Settings and numerical parameters declared by the concrete transform.

validate()[source]

Validate relationships between declared fields after construction or rebinding.

parameter_values()[source]

Return the transform’s declared numerical values.

copy()[source]

Copy authored fields while preserving native differentiation leaves.

with_parameter_value(name, value)[source]

Validate and rebind one numerical field on an independent transform.

Parameters:
  • name (str) – Declared numerical field name.

  • value (Any) – Replacement value in the field’s declared units.

to_dict()[source]

Serialize declared fields for a class that opted into persistence.

abstractmethod apply(signals)[source]

Return the transformed signal map.

Parameters:

signals (SignalMap) – Signals keyed by control line and source index.

referenced_lines()[source]

Return control-line labels referenced by this transform.

without_line(line)[source]

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

Parameters:

line (str) – Removed control-line label.

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

Bases: SignalTransform

Shift every signal on one control line by delta_t ns.

Parameters:
  • line (str or object) – Drive label or drive object.

  • delta_t (float) – Delay in ns; positive values shift the signal later.

line: str = Setting(default=unbound, serialize=True, kw_only=True)
delta_t: float = Parameter(default=unbound, positive=False, nonnegative=False, serialize=True, unit=None, symbol=None, noise=False, kw_only=False, required=True)
apply(signals)[source]

Time-shift every signal on line by delta_t ns.

Parameters:

signals (SignalMap) – Signals keyed by (line, source_index).

referenced_lines()[source]

Return the line label affected by this delay.

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

Bases: SignalTransform

Scale every signal on one control line by a complex factor.

Parameters:
  • line (str or object) – Drive label or drive object.

  • factor (complex) – Dimensionless amplitude and phase multiplier.

line: str = Setting(default=unbound, serialize=True, kw_only=True)
factor: complex = Parameter(default=unbound, positive=False, nonnegative=False, serialize=True, unit=None, symbol=None, noise=False, kw_only=False, required=True)
apply(signals)[source]

Scale every signal on line by the complex factor.

Parameters:

signals (SignalMap) – Signals keyed by (line, source_index).

referenced_lines()[source]

Return the line label affected by this 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, so delaying it includes the carrier phase \(2\pi f\Delta t\) without a separate correction. See 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 = Setting(default=unbound, serialize=True, kw_only=True)
victim: str = Setting(default=unbound, serialize=True, kw_only=True)
beta: Any = Parameter(default=unbound, positive=False, nonnegative=False, serialize=True, unit=None, symbol=None, noise=False, kw_only=False, required=True)
theta: Any = Parameter(default=0.0, positive=False, nonnegative=False, serialize=True, unit=None, symbol=None, noise=False, kw_only=False, required=False)
delay: Any = Parameter(default=0.0, positive=False, nonnegative=False, serialize=True, unit=None, symbol=None, noise=False, kw_only=False, required=False)
apply(signals)[source]

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

Parameters:

signals (SignalMap) – Signals keyed by (line, source_index).

referenced_lines()[source]

Return source and victim labels referenced by this crosstalk edge.