qibolab.instruments.rfsoc package#
RFSoC module driver for qibosoq.
Submodules#
qibolab.instruments.rfsoc.convert module#
Convert helper functions for rfsoc driver.
- qibolab.instruments.rfsoc.convert.replace_pulse_shape(rfsoc_pulse: Pulse, shape: PulseShape, sampling_rate: float) Pulse [source]#
Set pulse shape parameters in rfsoc_pulses pulse object.
- qibolab.instruments.rfsoc.convert.pulse_lo_frequency(pulse: Pulse, qubits: dict[int, qibolab.qubits.Qubit]) int [source]#
Return local_oscillator frequency (HZ) of a pulse.
- qibolab.instruments.rfsoc.convert.convert_units_sweeper(sweeper: Sweeper, sequence: PulseSequence, qubits: dict[int, qibolab.qubits.Qubit])[source]#
Convert units for qibosoq.abstract.Sweeper considering also LOs.
- qibolab.instruments.rfsoc.convert.convert(*args)[source]#
- qibolab.instruments.rfsoc.convert.convert(qubit: Qubit) Qubit
- qibolab.instruments.rfsoc.convert.convert(sequence: PulseSequence, qubits: dict[int, qibolab.qubits.Qubit], sampling_rate: float) list[qibosoq.components.pulses.Pulse]
- qibolab.instruments.rfsoc.convert.convert(pulse: Pulse, qubits: dict[int, qibolab.qubits.Qubit], start_delay: float, sampling_rate: float) Pulse
- qibolab.instruments.rfsoc.convert.convert(par: Parameter) Parameter
- qibolab.instruments.rfsoc.convert.convert(sweeper: Sweeper, sequence: PulseSequence, qubits: dict[int, qibolab.qubits.Qubit]) Sweeper
Convert from qibolab obj to qibosoq obj, overloaded.
qibolab.instruments.rfsoc.driver module#
RFSoC FPGA driver.
- class qibolab.instruments.rfsoc.driver.RFSoCPort(name: int, offset: float = 0.0)[source]#
Bases:
Port
Port object of the RFSoC.
- class qibolab.instruments.rfsoc.driver.RFSoC(name: str, address: str, port: int, sampling_rate: float = 1.0)[source]#
Bases:
Controller
Instrument object for controlling RFSoC FPGAs.
The two way of executing pulses are with
play
(for arbitrary qibolabPulseSequence
) or withsweep
that execute aPulseSequence
object with one or moreSweeper
.- cfg#
Configuration dictionary required for pulse execution.
- Type:
rfsoc.Config
- property sampling_rate#
Sampling rate of control electronics in giga samples per second (GSps).
- play(qubits: dict[int, qibolab.qubits.Qubit], couplers: dict[int, qibolab.couplers.Coupler], sequence: PulseSequence, execution_parameters: ExecutionParameters) dict[str, Union[qibolab.result.IntegratedResults, qibolab.result.SampleResults]] [source]#
Execute the sequence of instructions and retrieves readout results.
Each readout pulse generates a separate acquisition. The relaxation_time and the number of shots have default values.
- Parameters:
qubits (dict) – List of qibolab.platforms.utils.Qubit objects passed from the platform.
execution_parameters (qibolab.ExecutionParameters) – Parameters (nshots, relaxation_time, fast_reset, acquisition_type, averaging_mode)
sequence (qibolab.pulses.PulseSequence) – Pulse sequence to play.
- Returns:
A dictionary mapping the readout pulses serial and respective qubits to qibolab results objects
- static validate_input_command(sequence: PulseSequence, execution_parameters: ExecutionParameters, sweep: bool)[source]#
Check if sequence and execution_parameters are supported.
- update_cfg(execution_parameters: ExecutionParameters)[source]#
Update rfsoc.Config object with new parameters.
- classify_shots(i_values: ndarray[Any, dtype[float64]], q_values: ndarray[Any, dtype[float64]], qubit: Qubit) ndarray[Any, dtype[float64]] [source]#
Classify IQ values using qubit threshold and rotation_angle if available in runcard.
- play_sequence_in_sweep_recursion(qubits: dict[int, qibolab.qubits.Qubit], couplers: dict[int, qibolab.couplers.Coupler], sequence: PulseSequence, or_sequence: PulseSequence, execution_parameters: ExecutionParameters) dict[str, Union[qibolab.result.IntegratedResults, qibolab.result.SampleResults]] [source]#
Last recursion layer, if no sweeps are present.
After playing the sequence, the resulting dictionary keys need to be converted to the correct values. Even indexes correspond to qubit number and are not changed. Odd indexes correspond to readout pulses serials and are convert to match the original sequence (of the sweep) and not the one just executed.
- recursive_python_sweep(qubits: dict[int, qibolab.qubits.Qubit], couplers: dict[int, qibolab.couplers.Coupler], sequence: PulseSequence, or_sequence: PulseSequence, *sweepers: Sweeper, execution_parameters: ExecutionParameters) dict[str, Union[qibolab.result.IntegratedResults, qibolab.result.SampleResults]] [source]#
Execute a sweep of an arbitrary number of Sweepers via recursion.
- Parameters:
qubits (list) – List of qibolab.platforms.utils.Qubit objects passed from the platform.
sequence (qibolab.pulses.PulseSequence) – Pulse sequence to play. This object is a deep copy of the original sequence and gets modified.
or_sequence (qibolab.pulses.PulseSequence) – Reference to original sequence to not modify.
*sweepers (qibolab.Sweeper) – Sweeper objects.
execution_parameters (qibolab.ExecutionParameters) – Parameters (nshots, relaxation_time, fast_reset, acquisition_type, averaging_mode)
- Returns:
A dictionary mapping the readout pulses serial and respective qubits to results objects
- static merge_sweep_results(dict_a: dict[str, Union[qibolab.result.IntegratedResults, qibolab.result.SampleResults]], dict_b: dict[str, Union[qibolab.result.IntegratedResults, qibolab.result.SampleResults]]) dict[str, Union[qibolab.result.IntegratedResults, qibolab.result.SampleResults]] [source]#
Merge two dictionary mapping pulse serial to Results object.
If dict_b has a key (serial) that dict_a does not have, simply add it, otherwise sum the two results
- get_if_python_sweep(sequence: PulseSequence, *sweepers: Sweeper) bool [source]#
Check if a sweeper must be run with python loop or on hardware.
- To be run on qick internal loop a sweep must:
not be on the readout frequency
not be a duration sweeper
only one pulse per channel supported
flux pulses are not compatible with sweepers
- Parameters:
sequence (qibolab.pulses.PulseSequence) –
*sweepers (qibosoq.abstract.Sweeper) – Sweeper objects.
- Returns:
A boolean value true if the sweeper must be executed by python loop, false otherwise
- convert_sweep_results(original_ro: PulseSequence, qubits: dict[int, qibolab.qubits.Qubit], toti: list[list[list[float]]], totq: list[list[list[float]]], execution_parameters: ExecutionParameters) dict[str, Union[qibolab.result.IntegratedResults, qibolab.result.SampleResults]] [source]#
Convert sweep res to qibolab dict res.
- Parameters:
original_ro (qibolab.pulses.PulseSequence) – Original PulseSequence
qubits (list) – List of qibolab.platforms.utils.Qubit objects passed from the platform.
toti (list) – i values
totq (list) – q values
results_type – qibolab results object
execution_parameters (qibolab.ExecutionParameters) – Parameters (nshots, relaxation_time, fast_reset, acquisition_type, averaging_mode)
- Returns:
A dict mapping the readout pulses serial to qibolab results objects
- sweep(qubits: dict[int, qibolab.qubits.Qubit], couplers: dict[int, qibolab.couplers.Coupler], sequence: PulseSequence, execution_parameters: ExecutionParameters, *sweepers: Sweeper) dict[str, Union[qibolab.result.IntegratedResults, qibolab.result.SampleResults]] [source]#
Execute the sweep and retrieves the readout results.
Each readout pulse generates a separate acquisition. The relaxation_time and the number of shots have default values.
- Parameters:
qubits (list) – List of qibolab.platforms.utils.Qubit objects passed from the platform.
execution_parameters (qibolab.ExecutionParameters) – Parameters (nshots, relaxation_time, fast_reset, acquisition_type, averaging_mode)
sequence (qibolab.pulses.PulseSequence) –
*sweepers (qibolab.Sweeper) – Sweeper objects.
- Returns:
A dictionary mapping the readout pulses serial and respective qubits to results objects