Skip to content

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()