qibocal.protocols.couplers package#
Submodules#
qibocal.protocols.couplers.coupler_chevron module#
- class qibocal.protocols.couplers.coupler_chevron.ChevronCouplersParameters(amplitude_min_factor: float, amplitude_max_factor: float, amplitude_step_factor: float, duration_min: float, duration_max: float, duration_step: float, dt: Optional[int] = 0, parking: bool = True, native: str = 'CZ', native_gate: Optional[str] = 'CZ')[source]#
Bases:
ChevronParameters
- property amplitude_range#
- property duration_range#
- class qibocal.protocols.couplers.coupler_chevron.ChevronCouplersData(native_amplitude: dict[typing.Tuple[typing.Union[str, int], typing.Union[str, int]], float] = <factory>, native: str = 'CZ', sweetspot: dict[typing.Tuple[typing.Union[str, int], typing.Union[str, int]], float] = <factory>, data: dict[typing.Tuple[typing.Union[str, int], typing.Union[str, int]], numpy.ndarray[typing.Any, numpy.dtype[dtype([('amp', '<f8'), ('length', '<f8'), ('prob_high', '<f8'), ('prob_low', '<f8')])]]] = <factory>)[source]#
Bases:
ChevronData
Data structure for chevron couplers protocol.
- _to_npz(path: Path, filename: str)#
Helper function to use np.savez while converting keys into strings.
- amplitudes(pair)#
Unique pair amplitudes.
- durations(pair)#
Unique pair durations.
- high_frequency(pair)#
- low_frequency(pair)#
- property pairs#
Access qubit pairs ordered alphanumerically from data structure.
- property qubits#
Access qubits from data structure.
- register_qubit(low_qubit, high_qubit, length, amp, prob_low, prob_high)#
Store output for single qubit.
- qibocal.protocols.couplers.coupler_chevron._aquisition(params: ChevronCouplersParameters, platform: Platform, targets: list[Tuple[Union[str, int], Union[str, int]]]) ChevronData [source]#
Perform an CZ experiment between pairs of qubits by changing the coupler state, qubits need to be pulses into their interaction point.
- Parameters:
platform – Platform to use.
params – Experiment parameters.
targets (list) – List of pairs to use sequentially.
- Returns:
Acquisition data.
- Return type:
- class qibocal.protocols.couplers.coupler_chevron.ChevronCouplersResults[source]#
Bases:
Results
Empty fitting outputs for chevron couplers is not implemented in this case.
- qibocal.protocols.couplers.coupler_chevron._fit(data: ChevronCouplersData) ChevronCouplersResults [source]#
“Results for ChevronCouplers.
- qibocal.protocols.couplers.coupler_chevron.plot(data: ChevronCouplersData, fit: ChevronCouplersResults, target)[source]#
- qibocal.protocols.couplers.coupler_chevron.coupler_chevron = Routine(acquisition=<function _aquisition>, fit=<function _fit>, report=<function plot>, update=<function _dummy_update>, two_qubit_gates=True)#
Coupler cz/swap flux routine.
qibocal.protocols.couplers.coupler_qubit_spectroscopy module#
- class qibocal.protocols.couplers.coupler_qubit_spectroscopy.CouplerSpectroscopyParametersQubit(freq_width: int, freq_step: int, bias_width: Optional[float] = None, bias_step: Optional[float] = None, measured_qubits: Optional[list[Union[str, int]]] = None, amplitude: Optional[Union[int, float]] = None)[source]#
Bases:
CouplerSpectroscopyParameters
- drive_duration: Optional[int] = 2000#
Drive pulse duration to excite the qubit before the measurement
- qibocal.protocols.couplers.coupler_qubit_spectroscopy._acquisition(params: CouplerSpectroscopyParametersQubit, platform: Platform, targets: list[Tuple[Union[str, int], Union[str, int]]]) CouplerSpectroscopyData [source]#
Data acquisition for CouplerQubit spectroscopy.
This consist on a frequency sweep on the qubit frequency while we change the flux coupler pulse amplitude of the coupler pulse. We expect to enable the coupler during the amplitude sweep and detect an avoided crossing that will be followed by the frequency sweep. This needs the qubits at resonance, the routine assumes a sweetspot value for the higher frequency qubit that moves it to the lower frequency qubit instead of trying to calibrate both pulses at once. This should be run after qubit_spectroscopy to further adjust the coupler sweetspot if needed and get some information on the flux coupler pulse amplitude requiered to enable 2q interactions.
- qibocal.protocols.couplers.coupler_qubit_spectroscopy.coupler_qubit_spectroscopy = Routine(acquisition=<function _acquisition>, fit=<function _fit>, report=<function _plot>, update=<function _update>, two_qubit_gates=False)#
CouplerQubitSpectroscopy Routine object.
qibocal.protocols.couplers.coupler_resonator_spectroscopy module#
- qibocal.protocols.couplers.coupler_resonator_spectroscopy._acquisition(params: CouplerSpectroscopyParameters, platform: Platform, targets: list[Tuple[Union[str, int], Union[str, int]]]) CouplerSpectroscopyData [source]#
Data acquisition for CouplerResonator spectroscopy.
This consist on a frequency sweep on the readout frequency while we change the flux coupler pulse amplitude of the coupler pulse. We expect to enable the coupler during the amplitude sweep and detect an avoided crossing that will be followed by the frequency sweep. No need to have the qubits at resonance. This should be run after resonator_spectroscopy to detect couplers and adjust the coupler sweetspot if needed and get some information on the flux coupler pulse amplitude requiered to enable 2q interactions.
- qibocal.protocols.couplers.coupler_resonator_spectroscopy._fit(data: CouplerSpectroscopyData) CouplerSpectroscopyResults [source]#
Post-processing function for CouplerResonatorSpectroscopy.
- qibocal.protocols.couplers.coupler_resonator_spectroscopy._plot(data: CouplerSpectroscopyData, target: Tuple[Union[str, int], Union[str, int]], fit: CouplerSpectroscopyResults)[source]#
We may want to measure both qubits on the pair, that will require a different plotting that takes both.
- qibocal.protocols.couplers.coupler_resonator_spectroscopy._update(results: CouplerSpectroscopyResults, platform: Platform, target: Tuple[Union[str, int], Union[str, int]])[source]#
- qibocal.protocols.couplers.coupler_resonator_spectroscopy.coupler_resonator_spectroscopy = Routine(acquisition=<function _acquisition>, fit=<function _fit>, report=<function _plot>, update=<function _update>, two_qubit_gates=False)#
CouplerResonatorSpectroscopy Routine object.
qibocal.protocols.couplers.utils module#
- class qibocal.protocols.couplers.utils.CouplerSpectroscopyParameters(freq_width: int, freq_step: int, bias_width: Optional[float] = None, bias_step: Optional[float] = None, measured_qubits: Optional[list[Union[str, int]]] = None, amplitude: Optional[Union[int, float]] = None)[source]#
Bases:
ResonatorFluxParameters
CouplerResonatorSpectroscopy and CouplerQubitSpectroscopy runcard inputs.
- qibocal.protocols.couplers.utils.CouplerSpecType = dtype([('freq', '<f8'), ('bias', '<f8'), ('signal', '<f8'), ('phase', '<f8')])#
Custom dtype for coupler resonator spectroscopy.
- class qibocal.protocols.couplers.utils.CouplerSpectroscopyResults(sweetspot: dict[Union[str, int], float], pulse_amp: dict[Union[str, int], float], fitted_parameters: dict[Union[str, int], dict[str, float]])[source]#
Bases:
Results
CouplerResonatorSpectroscopy or CouplerQubitSpectroscopy outputs.
- class qibocal.protocols.couplers.utils.CouplerSpectroscopyData(resonator_type: str, offset: dict[typing.Union[str, int], float] = <factory>, data: dict[typing.Union[str, int], numpy.ndarray[typing.Any, numpy.dtype[dtype([('freq', '<f8'), ('bias', '<f8'), ('signal', '<f8'), ('phase', '<f8')])]]] = <factory>)[source]#
Bases:
Data
Data structure for CouplerResonatorSpectroscopy or CouplerQubitSpectroscopy.
- _to_npz(path: Path, filename: str)#
Helper function to use np.savez while converting keys into strings.
- property pairs#
Access qubit pairs ordered alphanumerically from data structure.
- property qubits#
Access qubits from data structure.
- data: dict[typing.Union[str, int], numpy.ndarray[typing.Any, numpy.dtype[dtype([('freq', '<f8'), ('bias', '<f8'), ('signal', '<f8'), ('phase', '<f8')])]]]#
Raw data acquired.