qbench.schemes package#

qbench.scheme.postselection module#

Module implementing postselection experiment.

qbench.schemes.postselection.assemble_postselection_circuits(target, ancilla, state_preparation, u_dag, v0_dag, v1_dag)#

Assemble circuits required for running Fourier discrimination experiment using postselection.

Parameters:
  • target (int) – index of qubit measured either in Z-basis or the alternative one.

  • ancilla (int) – index of auxiliary qubit.

  • state_preparation (Instruction) – instruction preparing the initial state of both qubits.

  • u_dag (Instruction) – hermitian adjoint of matrix U s.t. i-th column corresponds to i-th effect of alternative measurement. Can be viewed as matrix for a change of basis in which measurement is being performed.

  • v0_dag (Instruction) – hermitian adjoint of positive part of Holevo-Helstrom measurement.

  • v1_dag (Instruction) – hermitian adjoint of negative part of Holevo-Helstrom measurement.

Returns:

dictionary with keys “id_v0”, “id_v1”, “u_v0”, “u_v1” mapped to corresponding circuits. (e.g. id_v0 maps to a circuit with identity measurement followed by v0 measurement on ancilla)

Return type:

Dict[str, QuantumCircuit]

qbench.schemes.postselection.benchmark_using_postselection(backend, target, ancilla, state_preparation, u_dag, v0_dag, v1_dag, num_shots_per_measurement)#

Estimate prob. of distinguishing between measurements in computational and other basis.

Parameters:
  • backend (Union[BackendV1, BackendV2]) – backend to use for sampling.

  • target (int) – index of qubit measured either in Z-basis or the alternative one.

  • ancilla (int) – index of auxiliary qubit.

  • state_preparation (Instruction) – instruction preparing the initial state of both qubits.

  • u_dag (Instruction) – hermitian adjoint of matrix U s.t. i-th column corresponds to i-th effect of alternative measurement. Can be viewed as matrix for a change of basis in which measurement is being performed.

  • v0_dag (Instruction) – hermitian adjoint of positive part of Holevo-Helstrom measurement.

  • v1_dag (Instruction) – hermitian adjoint of negative part of Holevo-Helstrom measurement.

  • num_shots_per_measurement (int) – number of shots to be performed for Z-basis and alternative measurement. Since each measurement on target qubit is combined with each measurement on ancilla qubit, the total number of shots done in the experiment is 4 * num_shots_per_measurement.

Returns:

estimated probability of distinguishing between computational basis and alternative measurement.

Return type:

float

Note

The circuits used for sampling have the form::

         ┌────────────────────┐ ┌─────┐
 target: ┤0                   ├─┤ Mi† ├
         │  state_preparation │ ├─────┤
ancilla: ┤1                   ├─┤ Vj† ├
         └────────────────────┘ └─────┘

for i=0,1, j=0,1 where M0 = U, M1 = identity. Refer to the paper for details how the terminal measurements are interpreted.

qbench.schemes.postselection.compute_probabilities_from_postselection_measurements(id_v0_counts, id_v1_counts, u_v0_counts, u_v1_counts)#

Convert measurements obtained from postselection Fourier discrimination experiment to probabilities.

Parameters:
  • id_v0_counts (Dict[str, int]) – measurements for circuit with identity measurement on target and v0 measurement on ancilla.

  • id_v1_counts (Dict[str, int]) – measurements for circuit with identity measurement on target and v1 measurement on ancilla.

  • u_v0_counts (Dict[str, int]) – measurements for circuit with U measurement on target and v0 measurement on ancilla.

  • u_v1_counts (Dict[str, int]) – measurements for circuit with U measurement on target and v1 measurement on ancilla.

Returns:

probability of distinguishing between u and identity measurements.

Return type:

float

qbench.scheme.direct_sum module#

Module implementing experiment using direct sum of V0† ⊕ V1†.

qbench.schemes.direct_sum.assemble_direct_sum_circuits(target, ancilla, state_preparation, u_dag, v0_v1_direct_sum_dag)#

Assemble circuits required for running Fourier discrimination experiment using direct-sum.

Parameters:
  • target (int) – index of qubit measured either in Z-basis or the alternative one.

  • ancilla (int) – index of auxiliary qubit.

  • state_preparation (Instruction) – instruction preparing the initial state of both qubits.

  • u_dag (Instruction) – hermitian adjoint of matrix U s.t. i-th column corresponds to i-th effect of alternative measurement. Can be viewed as matrix for a change of basis in which measurement is being performed.

  • v0_v1_direct_sum_dag (Instruction) – block-diagonal operator comprising hermitian adjoints of both parts of Holevo-Helstrom measurement.

Returns:

dictionary with keys “id”, “u”mapped to corresponding circuits. The “u” key corresponds to a circuit for which U measurement has been performed, while “id” key corresponds to a circuit for which identity measurement has been performed.

Return type:

Dict[str, QuantumCircuit]

qbench.schemes.direct_sum.benchmark_using_direct_sum(backend, target, ancilla, state_preparation, u_dag, v0_v1_direct_sum_dag, num_shots_per_measurement)#

Estimate prob. of distinguishing between measurements in computational and other basis.

Parameters:
  • backend (Union[BackendV1, BackendV2]) – backend to be used for sampling.

  • target (int) – index of qubit measured either in computational basis or the alternative one.

  • ancilla (int) – index of auxiliary qubit.

  • state_preparation (Instruction) – instruction preparing the initial state of both qubits.

  • u_dag (Instruction) – hermitian adjoint of matrix U s.t. i-th column corresponds to i-th effect of alternative measurement. Can be viewed as matrix for a change of basis in which measurement is being performed.

  • v0_v1_direct_sum_dag (Instruction) – block-diagonal operator comprising hermitian adjoints of both parts of Holevo-Helstrom measurement.

  • num_shots_per_measurement (int) – number of shots to be performed for computational basis and alternative measurement. The total number of shots done in the experiment is therefore 2 * num_shots_per_measurement.

Returns:

estimated probability of distinguishing between computational basis and alternative measurement.

Return type:

float

Note

The circuits used for sampling have the form:

         ┌────────────────────┐┌────┐┌────────────┐
 target: ┤0                   ├┤ M† ├┤0           ├─
         │  state_preparation │└────┘│  V0† ⊕ V1† │
ancilla: ┤1                   ├──────┤1           ├─
         └────────────────────┘      └────────────┘

where M defines the measurement to be performed (M=identity or M=U†). Refer to the paper for details how the final measurements are interpreted.

qbench.schemes.direct_sum.compute_probabilities_from_direct_sum_measurements(id_counts, u_counts)#

Convert measurements obtained from direct_sum Fourier experiment to probabilities.

Parameters:
  • id_counts (Dict[str, int]) – measurements for circuit with identity measurement on target qubit.

  • u_counts (Dict[str, int]) – measurements for circuit with U measurement on target qubit.

Returns:

probability of distinguishing between u and identity measurements.

Return type:

float