laboneq_applications.contrib.experiments.measurement_qndness
¶
This module defines the qubit measurement QND experiment.
In this experiment, we first prepare the qubit in a superposition state using an x90 pulse, ensuring a random yet equal probability of measuring each qubit state. We then perform an initial measurement pulse, followed by additional measurement pulses. By comparing the results of these measurements, we can determine whether the qubit state is preserved after the initial measurement.
The pulse sequence for the qubit measurement QND experiment is as follows:
qb - [ x90 ] [ measure ] - [ delay (fixed) ] - [ measure ]
If multiple qubits are passed to the run
workflow, the above pulses are applied
in parallel on all the qubits.
QNDnessExperimentOptions
¶
Base options for the resonator spectroscopy experiment.
Additional attributes
acquisition_type:
Acquisition type to use for the experiment.
Default: AcquisitionType.DISCRIMINATION
.
averaging_mode:
Averaging mode to use for the experiment.
Default: AveragingMode.SINGLE_SHOT
.
acquisition_type = option_field(AcquisitionType.DISCRIMINATION, description='Acquisition type to use for the experiment.')
class-attribute
instance-attribute
¶
averaging_mode = option_field(AveragingMode.SINGLE_SHOT, description='Averaging mode to use for the experiment.')
class-attribute
instance-attribute
¶
delay_between_measurements = option_field(1e-06, description='Time delay between successive measurement operations.')
class-attribute
instance-attribute
¶
transition = option_field('ge', description='Transition to perform the experiment on. May be any transition supported by the quantum operations.')
class-attribute
instance-attribute
¶
use_cal_traces = option_field(True, description='Whether to include calibration traces in the experiment.')
class-attribute
instance-attribute
¶
create_experiment(qpu, qubits, options=None)
¶
Creates a Measurement QND Experiment.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
qpu
|
QPU
|
The QPU consisting of the original QPUs and quantum operations. |
required |
qubits
|
Qubits
|
The qubits to run the experiments on. May be either a single qubit or a list of qubits. |
required |
options
|
QNDnessExperimentOptions | None
|
The options for building the experiment. See [QNDnessExperimentOptions] and [BaseExperimentOptions] for accepted options. |
None
|
Returns:
Name | Type | Description |
---|---|---|
Experiment |
Experiment
|
The generated LabOne Q experiment instance to be compiled |
Experiment
|
and executed. |
Example
options = QNDnessExperimentOptions()
qpu = QPU(
qubits=[q1, q2],
)
create_experiment(
qpu=qpu,
qubits=[q1, q2],
options=options,
)
experiment_workflow(session, qpu, qubits, temporary_parameters=None, options=None)
¶
The Qubit Measurement QNDness Workflow.
The workflow consists of the following steps:
Parameters:
Name | Type | Description | Default |
---|---|---|---|
session
|
Session
|
The connected session to use for running the experiment. |
required |
qpu
|
QPU
|
The qpu consisting of the original qubits and quantum operations. |
required |
qubits
|
Qubits
|
The qubits to run the experiments on. May be either a single qubit or a list of qubits. |
required |
temporary_parameters
|
dict[str, dict | QuantumParameters] | None
|
The temporary parameters to update the qubits with. |
None
|
options
|
TuneUpWorkflowOptions | None
|
The options for building the workflow. In addition to options from [WorkflowOptions], the following custom options are supported: - create_experiment: The options for creating the experiment. |
None
|
Returns:
Type | Description |
---|---|
None
|
None |
Example
options = experiment_workflow.options()
options.count(2**9)
options.delay_between_measurements(1e-6)
qpu = QPU(
qubits=[TunableTransmonQubit("q0"), TunableTransmonQubit("q1")],
quantum_operations=TunableTransmonOperations(),
)
qubits = qpu.qubits
temporary_parameters = {}
for q in qubits_to_measure:
temp_pars = deepcopy(q.parameters)
temporary_parameters[q.uid] = temp_pars
result = experiment_workflow(
session=session,
qpu=qpu,
qubits=qubits_to_measure,
temporary_parameters=temporary_parameters,
options=options,
).run()