DriveCrossTalk#

Module: iqm.pulse.gates.drive_crosstalk

class iqm.pulse.gates.drive_crosstalk.DriveCrossTalk(parent, name, locus, calibration_data, builder)#

Bases: GateImplementation

Calibration container and pulse builder for drive crosstalk compensation.

This implementation carries the drive crosstalk calibration data so that it can be calibrated and fetched like any other gate, and it builds the compensation pulses for a resolved schedule. The apply_drive_crosstalk compiler pass fetches this implementation via the builder and calls it with a schedule, e.g.:

impl = builder.get_implementation("drive_crosstalk", (), impl_name="drive_crosstalk")
compensation_box = impl(schedule, crosstalk_loci)  # TimeBox with the target aux-channel compensation pulses

The drive crosstalk is described by a complex matrix, where the element \(C_{tc}\) describes the crosstalk drive seen by the target t when the control c is driven: its absolute value is the relative crosstalk amplitude, and its argument the crosstalk phase. To cancel it, apply_drive_crosstalk replays the control’s drive on an auxiliary drive channel of the target, scaled by the amplitude and phase-shifted accordingly.

The matrix is given in a sparse form via three calibration parameters (we do not support dict- or xarray-valued Parameters yet). Parameter matrix_index lists the relevant (non-zero) elements as a flat list of strings of the form <target>__<control>. Parameters crosstalk_amplitudes and crosstalk_phases list the corresponding amplitudes \(|C_{tc}|\) and phases \(\arg C_{tc}\) (in radians). The three arrays must have equal lengths.

TODO: this is for now an experimental R&D implementation, and everything here is subject to change still.

Attributes

parameters

Required calibration data, may be nested

id

Unique str identifier, needed for certain caching properties.

sub_implementations

Single-component sub-implementations for factorizable gates with len(locus) > 1, otherwise empty.

Methods

locus_mapping_function

One-qubit loci.

Parameters:
parameters: NestedParams = {'crosstalk_amplitudes': Parameter(name='crosstalk_amplitudes', label='Drive crosstalk relative amplitudes', unit='', data_type=<DataType.FLOAT: 1>, collection_type=<CollectionType.NDARRAY: 2>, element_indices=None), 'crosstalk_phases': Parameter(name='crosstalk_phases', label='Drive crosstalk phases', unit='rad', data_type=<DataType.FLOAT: 1>, collection_type=<CollectionType.NDARRAY: 2>, element_indices=None), 'matrix_index': Parameter(name='matrix_index', label='Drive crosstalk sparse matrix index', unit='', data_type=<DataType.STRING: 3>, collection_type=<CollectionType.LIST: 1>, element_indices=None)}#

Required calibration data, may be nested

static locus_mapping_function(station_properties)#

One-qubit loci.

Parameters:

station_properties (StationProperties)

Return type:

dict[tuple[str, …], tuple[str, …]]

Inheritance

Inheritance diagram of iqm.pulse.gates.drive_crosstalk.DriveCrossTalk