qibocal.protocols.rabi package#

Submodules#

qibocal.protocols.rabi.amplitude module#

qibocal.protocols.rabi.amplitude.rabi_amplitude = Routine(acquisition=<function _acquisition>, fit=<function _fit>, report=<function _plot>, update=<function _update>, two_qubit_gates=False)#

RabiAmplitude Routine object.

qibocal.protocols.rabi.amplitude_frequency module#

Rabi experiment that sweeps amplitude and frequency.

qibocal.protocols.rabi.amplitude_frequency.rabi_amplitude_frequency = Routine(acquisition=<function _acquisition>, fit=<function _fit>, report=<function _plot>, update=<function _update>, two_qubit_gates=False)#

Rabi amplitude with frequency tuning.

qibocal.protocols.rabi.amplitude_frequency_signal module#

Rabi experiment that sweeps amplitude and frequency (with probability).

class qibocal.protocols.rabi.amplitude_frequency_signal.RabiAmplitudeSignalResults(amplitude: dict[Union[int, str], Union[float, list[float]]], length: dict[Union[int, str], Union[float, list[float]]], fitted_parameters: dict[Union[int, str], dict[str, float]], rx90: bool)[source]#

Bases: Results

RabiAmplitude outputs.

amplitude: dict[Union[int, str], Union[float, list[float]]]#

Drive amplitude for each qubit.

length: dict[Union[int, str], Union[float, list[float]]]#

Drive pulse duration. Same for all qubits.

fitted_parameters: dict[Union[int, str], dict[str, float]]#

Raw fitted parameters.

rx90: bool#

Pi or Pi_half calibration

_to_json(path: Path, filename: str)#

Helper function to dump to json.

_to_npz(path: Path, filename: str)#

Helper function to use np.savez while converting keys into strings.

static load_data(path: Path, filename: str)#

Load data stored in a npz file.

static load_params(path: Path, filename: str)#

Load parameters stored in a json file.

property params: dict#

Convert non-arrays attributes into dict.

save(path: Path)#

Store results to file.

class qibocal.protocols.rabi.amplitude_frequency_signal.RabiAmplitudeFrequencySignalParameters(min_amp: float, max_amp: float, step_amp: float, min_freq: int, max_freq: int, step_freq: int, rx90: bool = False, pulse_length: Optional[float] = None)[source]#

Bases: Parameters

RabiAmplitudeFrequency runcard inputs.

min_amp: float#

Minimum amplitude.

max_amp: float#

Maximum amplitude.

step_amp: float#

Step amplitude.

min_freq: int#

Minimum frequency as an offset.

max_freq: int#

Maximum frequency as an offset.

step_freq: int#

Frequency to use as step for the scan.

rx90: bool = False#

Calibration of native pi pulse, if true calibrates pi/2 pulse

pulse_length: Optional[float] = None#

RX pulse duration [ns].

hardware_average: bool = False#

By default hardware average will be performed.

nshots: int#

Number of executions on hardware.

relaxation_time: float#

Wait time for the qubit to decohere back to the gnd state.

class qibocal.protocols.rabi.amplitude_frequency_signal.RabiAmplitudeFreqSignalData(rx90: bool, durations: dict[typing.Union[int, str], float] = <factory>, data: dict[typing.Union[int, str], numpy.ndarray[typing.Any, numpy.dtype[dtype([('amp', '<f8'), ('freq', '<f8'), ('signal', '<f8'), ('phase', '<f8')])]]] = <factory>)[source]#

Bases: Data

RabiAmplitudeFreqSignal data acquisition.

_to_json(path: Path, filename: str)#

Helper function to dump to json.

_to_npz(path: Path, filename: str)#

Helper function to use np.savez while converting keys into strings.

static load_data(path: Path, filename: str)#

Load data stored in a npz file.

static load_params(path: Path, filename: str)#

Load parameters stored in a json file.

property pairs#

Access qubit pairs ordered alphanumerically from data structure.

property params: dict#

Convert non-arrays attributes into dict.

property qubits#

Access qubits from data structure.

save(path: Path)#

Store data to file.

rx90: bool#

Pi or Pi_half calibration

durations: dict[Union[int, str], float]#

Pulse durations provided by the user.

data: dict[typing.Union[int, str], numpy.ndarray[typing.Any, numpy.dtype[dtype([('amp', '<f8'), ('freq', '<f8'), ('signal', '<f8'), ('phase', '<f8')])]]]#

Raw data acquired.

register_qubit(qubit, freq, amp, signal, phase)[source]#

Store output for single qubit.

amplitudes(qubit)[source]#

Unique qubit amplitudes.

frequencies(qubit)[source]#

Unique qubit frequency.

qibocal.protocols.rabi.amplitude_frequency_signal._update(results: RabiAmplitudeFrequencySignalResults, platform: CalibrationPlatform, target: Union[int, str])[source]#
qibocal.protocols.rabi.amplitude_frequency_signal.rabi_amplitude_frequency_signal = Routine(acquisition=<function _acquisition>, fit=<function _fit>, report=<function _plot>, update=<function _update>, two_qubit_gates=False)#

Rabi amplitude with frequency tuning.

qibocal.protocols.rabi.amplitude_signal module#

class qibocal.protocols.rabi.amplitude_signal.RabiAmplitudeSignalResults(amplitude: dict[Union[int, str], Union[float, list[float]]], length: dict[Union[int, str], Union[float, list[float]]], fitted_parameters: dict[Union[int, str], dict[str, float]], rx90: bool)[source]#

Bases: Results

RabiAmplitude outputs.

amplitude: dict[Union[int, str], Union[float, list[float]]]#

Drive amplitude for each qubit.

length: dict[Union[int, str], Union[float, list[float]]]#

Drive pulse duration. Same for all qubits.

fitted_parameters: dict[Union[int, str], dict[str, float]]#

Raw fitted parameters.

rx90: bool#

Pi or Pi_half calibration

_to_json(path: Path, filename: str)#

Helper function to dump to json.

_to_npz(path: Path, filename: str)#

Helper function to use np.savez while converting keys into strings.

static load_data(path: Path, filename: str)#

Load data stored in a npz file.

static load_params(path: Path, filename: str)#

Load parameters stored in a json file.

property params: dict#

Convert non-arrays attributes into dict.

save(path: Path)#

Store results to file.

class qibocal.protocols.rabi.amplitude_signal.RabiAmplitudeSignalParameters(min_amp: float, max_amp: float, step_amp: float, pulse_length: Optional[float] = None, rx90: bool = False)[source]#

Bases: Parameters

RabiAmplitude runcard inputs.

min_amp: float#

Minimum amplitude.

max_amp: float#

Maximum amplitude.

step_amp: float#

Step amplitude.

pulse_length: Optional[float] = None#

RX pulse duration [ns].

rx90: bool = False#

Calibration of native pi pulse, if true calibrates pi/2 pulse

hardware_average: bool = False#

By default hardware average will be performed.

nshots: int#

Number of executions on hardware.

relaxation_time: float#

Wait time for the qubit to decohere back to the gnd state.

class qibocal.protocols.rabi.amplitude_signal.RabiAmplitudeSignalData(rx90: bool, durations: dict[typing.Union[int, str], float] = <factory>, data: dict[typing.Union[int, str], numpy.ndarray[typing.Any, numpy.dtype[dtype([('amp', '<f8'), ('signal', '<f8'), ('phase', '<f8')])]]] = <factory>)[source]#

Bases: Data

RabiAmplitudeSignal data acquisition.

_to_json(path: Path, filename: str)#

Helper function to dump to json.

_to_npz(path: Path, filename: str)#

Helper function to use np.savez while converting keys into strings.

static load_data(path: Path, filename: str)#

Load data stored in a npz file.

static load_params(path: Path, filename: str)#

Load parameters stored in a json file.

property pairs#

Access qubit pairs ordered alphanumerically from data structure.

property params: dict#

Convert non-arrays attributes into dict.

property qubits#

Access qubits from data structure.

register_qubit(dtype, data_keys, data_dict)#

Store output for single qubit.

Parameters:
  • data_keys (tuple) – Keys of Data.data.

  • data_dict (dict) – The keys are the fields of dtype and

  • arrays. (the values are the related) –

save(path: Path)#

Store data to file.

rx90: bool#

Pi or Pi_half calibration

durations: dict[Union[int, str], float]#

Pulse durations provided by the user.

data: dict[typing.Union[int, str], numpy.ndarray[typing.Any, numpy.dtype[dtype([('amp', '<f8'), ('signal', '<f8'), ('phase', '<f8')])]]]#

Raw data acquired.

qibocal.protocols.rabi.amplitude_signal.rabi_amplitude_signal = Routine(acquisition=<function _acquisition>, fit=<function _fit>, report=<function _plot>, update=<function _update>, two_qubit_gates=False)#

RabiAmplitude Routine object.

qibocal.protocols.rabi.amplitude_signal._fit(data: RabiAmplitudeSignalData) RabiAmplitudeSignalResults[source]#

Post-processing for RabiAmplitude.

qibocal.protocols.rabi.amplitude_signal.RabiAmpSignalType = dtype([('amp', '<f8'), ('signal', '<f8'), ('phase', '<f8')])#

Custom dtype for rabi amplitude.

qibocal.protocols.rabi.ef module#

qibocal.protocols.rabi.ef.rabi_amplitude_ef = Routine(acquisition=<function _acquisition>, fit=<function _fit>, report=<function _plot>, update=<function _update>, two_qubit_gates=False)#

RabiAmplitudeEF Routine object.

qibocal.protocols.rabi.length module#

qibocal.protocols.rabi.length.rabi_length = Routine(acquisition=<function _acquisition>, fit=<function _fit>, report=<function _plot>, update=<function _update>, two_qubit_gates=False)#

RabiLength Routine object.

qibocal.protocols.rabi.length_frequency module#

Rabi experiment that sweeps length and frequency (with probability).

qibocal.protocols.rabi.length_frequency.rabi_length_frequency = Routine(acquisition=<function _acquisition>, fit=<function _fit>, report=<function _plot>, update=<function _update>, two_qubit_gates=False)#

Rabi length with frequency tuning.

qibocal.protocols.rabi.length_frequency_signal module#

Rabi experiment that sweeps length and frequency.

qibocal.protocols.rabi.length_frequency_signal.rabi_length_frequency_signal = Routine(acquisition=<function _acquisition>, fit=<function _fit>, report=<function _plot>, update=<function _update>, two_qubit_gates=False)#

Rabi length with frequency tuning.

class qibocal.protocols.rabi.length_frequency_signal.RabiLengthFrequencySignalParameters(pulse_duration_start: float, pulse_duration_end: float, pulse_duration_step: float, min_freq: int, max_freq: int, step_freq: int, pulse_amplitude: Optional[float] = None, rx90: bool = False, interpolated_sweeper: bool = False)[source]#

Bases: Parameters

RabiLengthFrequency runcard inputs.

pulse_duration_start: float#

Initial pi pulse duration [ns].

pulse_duration_end: float#

Final pi pulse duration [ns].

pulse_duration_step: float#

Step pi pulse duration [ns].

min_freq: int#

Minimum frequency as an offset.

max_freq: int#

Maximum frequency as an offset.

step_freq: int#

Frequency to use as step for the scan.

pulse_amplitude: Optional[float] = None#

Pi pulse amplitude. Same for all qubits.

rx90: bool = False#

Calibration of native pi pulse, if true calibrates pi/2 pulse

interpolated_sweeper: bool = False#

Use real-time interpolation if supported by instruments.

hardware_average: bool = False#

By default hardware average will be performed.

nshots: int#

Number of executions on hardware.

relaxation_time: float#

Wait time for the qubit to decohere back to the gnd state.

class qibocal.protocols.rabi.length_frequency_signal.RabiLengthFreqSignalData(rx90: bool, amplitudes: dict[typing.Union[int, str], float] = <factory>, data: dict[typing.Union[int, str], numpy.ndarray[typing.Any, numpy.dtype[dtype([('len', '<f8'), ('freq', '<f8'), ('signal', '<f8'), ('phase', '<f8')])]]] = <factory>)[source]#

Bases: Data

RabiLengthFreqSignal data acquisition.

_to_json(path: Path, filename: str)#

Helper function to dump to json.

_to_npz(path: Path, filename: str)#

Helper function to use np.savez while converting keys into strings.

static load_data(path: Path, filename: str)#

Load data stored in a npz file.

static load_params(path: Path, filename: str)#

Load parameters stored in a json file.

property pairs#

Access qubit pairs ordered alphanumerically from data structure.

property params: dict#

Convert non-arrays attributes into dict.

property qubits#

Access qubits from data structure.

save(path: Path)#

Store data to file.

rx90: bool#

Pi or Pi_half calibration

amplitudes: dict[Union[int, str], float]#

Pulse amplitudes provided by the user.

data: dict[typing.Union[int, str], numpy.ndarray[typing.Any, numpy.dtype[dtype([('len', '<f8'), ('freq', '<f8'), ('signal', '<f8'), ('phase', '<f8')])]]]#

Raw data acquired.

register_qubit(qubit, freq, lens, signal, phase)[source]#

Store output for single qubit.

durations(qubit)[source]#

Unique qubit lengths.

frequencies(qubit)[source]#

Unique qubit frequency.

qibocal.protocols.rabi.length_frequency_signal._update(results: RabiLengthFrequencySignalResults, platform: CalibrationPlatform, target: Union[int, str])[source]#
class qibocal.protocols.rabi.length_frequency_signal.RabiLengthFrequencySignalResults(length: dict[Union[int, str], Union[int, list[float]]], amplitude: dict[Union[int, str], Union[float, list[float]]], fitted_parameters: dict[Union[int, str], dict[str, float]], rx90: bool, frequency: dict[Union[int, str], Union[float, list[float]]])[source]#

Bases: RabiLengthSignalResults

RabiLengthFrequency outputs.

rx90: bool#

Pi or Pi_half calibration

frequency: dict[Union[int, str], Union[float, list[float]]]#

Drive frequency for each qubit.

_to_json(path: Path, filename: str)#

Helper function to dump to json.

_to_npz(path: Path, filename: str)#

Helper function to use np.savez while converting keys into strings.

static load_data(path: Path, filename: str)#

Load data stored in a npz file.

static load_params(path: Path, filename: str)#

Load parameters stored in a json file.

property params: dict#

Convert non-arrays attributes into dict.

save(path: Path)#

Store results to file.

length: dict[Union[int, str], Union[int, list[float]]]#

Pi pulse duration for each qubit.

amplitude: dict[Union[int, str], Union[float, list[float]]]#

Pi pulse amplitude. Same for all qubits.

fitted_parameters: dict[Union[int, str], dict[str, float]]#

Raw fitting output.

qibocal.protocols.rabi.length_signal module#

qibocal.protocols.rabi.length_signal.rabi_length_signal = Routine(acquisition=<function _acquisition>, fit=<function _fit>, report=<function _plot>, update=<function _update>, two_qubit_gates=False)#

RabiLength Routine object.

class qibocal.protocols.rabi.length_signal.RabiLengthSignalResults(length: dict[Union[int, str], Union[int, list[float]]], amplitude: dict[Union[int, str], Union[float, list[float]]], fitted_parameters: dict[Union[int, str], dict[str, float]], rx90: bool)[source]#

Bases: Results

RabiLengthSignal outputs.

length: dict[Union[int, str], Union[int, list[float]]]#

Pi pulse duration for each qubit.

amplitude: dict[Union[int, str], Union[float, list[float]]]#

Pi pulse amplitude. Same for all qubits.

fitted_parameters: dict[Union[int, str], dict[str, float]]#

Raw fitting output.

rx90: bool#

Pi or Pi_half calibration

_to_json(path: Path, filename: str)#

Helper function to dump to json.

_to_npz(path: Path, filename: str)#

Helper function to use np.savez while converting keys into strings.

static load_data(path: Path, filename: str)#

Load data stored in a npz file.

static load_params(path: Path, filename: str)#

Load parameters stored in a json file.

property params: dict#

Convert non-arrays attributes into dict.

save(path: Path)#

Store results to file.

qibocal.protocols.rabi.utils module#

qibocal.protocols.rabi.utils.rabi_amplitude_function(x, offset, amplitude, period, phase)[source]#

Fit function of Rabi amplitude signal experiment.

Parameters:

x – Input data.

qibocal.protocols.rabi.utils.rabi_length_function(x, offset, amplitude, period, phase, t2_inv)[source]#

Fit function of Rabi length signal experiment.

Parameters:

x – Input data.

qibocal.protocols.rabi.utils.plot(data, qubit, fit, rx90)[source]#
qibocal.protocols.rabi.utils.plot_probabilities(data, qubit, fit, rx90)[source]#
qibocal.protocols.rabi.utils.extract_rabi(data)[source]#

Extract Rabi fit info.

qibocal.protocols.rabi.utils.period_correction_factor(phase: float)[source]#

Correct period by taking phase into account.

https://github.com/qiboteam/qibocal/issues/656

We want to find the first maximum or minimum which will correspond to an exchange of population between 0 and 1. To find it we need to solve the following equation \(\cos(2 \pi x / T + \phi) = \pm 1\) which will give us the following solution

\[x = ( k - \phi / \pi) T / 2\]

for integer \(k\), which is chosen such that we get the smallest multiplicative correction compared to \(T/2\).

qibocal.protocols.rabi.utils.sequence_amplitude(targets: list[Union[int, str]], params: Parameters, platform: Platform, rx90: bool) tuple[qibolab._core.sequence.PulseSequence, dict, dict, dict][source]#

Return sequence for rabi amplitude.

qibocal.protocols.rabi.utils.sequence_length(targets: list[Union[int, str]], params: Parameters, platform: Platform, rx90: bool, use_align: bool = False) tuple[qibolab._core.sequence.PulseSequence, dict, dict, dict][source]#

Return sequence for rabi length.

qibocal.protocols.rabi.utils.fit_length_function(x, y, guess, sigma=None, signal=True, x_limits=(None, None), y_limits=(None, None))[source]#
qibocal.protocols.rabi.utils.fit_amplitude_function(x, y, guess, sigma=None, signal=True, x_limits=(None, None), y_limits=(None, None))[source]#