def test_zne_decorator():
    qp = generate_rb_circuits(
        n_qubits=1, num_cliffords=TEST_DEPTH, trials=1, return_type="pyquil",
    )

    result = decorated_executor(*qp)
    assert np.isclose(result, 1.0, atol=1e-5)
Example #2
0
def test_qiskit_mitigate_executor_with_shot_list():
    true_zne_value = 1.0

    scale_factors = [1.0, 3.0]
    shot_list = [10_000, 30_000]

    fac = inference.ExpFactory(
        scale_factors=scale_factors, shot_list=shot_list, asymptote=0.5,
    )
    mitigated_executor = mitigate_executor(qiskit_executor, factory=fac)

    circuit = qiskit_measure(
        *generate_rb_circuits(
            n_qubits=1,
            num_cliffords=TEST_DEPTH,
            trials=1,
            return_type="qiskit",
        ),
        0,
    )
    base = qiskit_executor(circuit)
    zne_value = mitigated_executor(circuit)

    assert abs(true_zne_value - zne_value) < abs(true_zne_value - base)

    for i in range(len(fac._instack)):
        assert fac._instack[i] == {
            "scale_factor": scale_factors[i],
            "shots": shot_list[i],
        }
Example #3
0
def test_qiskit_run_factory_with_number_of_shots():
    true_zne_value = 1.0

    scale_factors = [1.0, 3.0]
    shot_list = [10_000, 30_000]

    fac = inference.ExpFactory(
        scale_factors=scale_factors, shot_list=shot_list, asymptote=0.5,
    )

    circuit = qiskit_measure(
        *generate_rb_circuits(
            n_qubits=1,
            num_cliffords=TEST_DEPTH,
            trials=1,
            return_type="qiskit",
        ),
        0,
    )
    base = qiskit_executor(circuit)
    zne_value = fac.run(
        circuit, qiskit_executor, scale_noise=scaling.fold_gates_at_random,
    ).reduce()

    assert abs(true_zne_value - zne_value) < abs(true_zne_value - base)

    for i in range(len(fac._instack)):
        assert fac._instack[i] == {
            "scale_factor": scale_factors[i],
            "shots": shot_list[i],
        }
def test_mitigate_executor():
    qp = generate_rb_circuits(
        n_qubits=1, num_cliffords=TEST_DEPTH, trials=1, return_type="pyquil",
    )

    new_executor = mitigate_executor(noiseless_executor)
    result = new_executor(*qp)
    assert np.isclose(result, 1.0, atol=1e-5)
def test_run_factory():
    qp = generate_rb_circuits(
        n_qubits=1, num_cliffords=TEST_DEPTH, trials=1, return_type="pyquil",
    )

    fac = inference.RichardsonFactory([1.0, 2.0, 3.0])

    fac.run(*qp, noiseless_executor, scale_noise=scaling.fold_gates_at_random)
    result = fac.reduce()
    assert np.isclose(result, 1.0, atol=1e-5)
def test_rb_conversion(n_qubits, return_type):
    depth = 10
    for trials in [2, 3]:
        circuits = generate_rb_circuits(
            n_qubits=n_qubits,
            num_cliffords=depth,
            trials=trials,
            return_type=return_type,
        )
        for qc in circuits:
            assert return_type in qc.__module__
Example #7
0
def random_one_qubit_identity_circuit(num_cliffords: int) -> QuantumCircuit:
    """Returns a single-qubit identity circuit.

    Args:
        num_cliffords (int): Number of cliffords used to generate the circuit.

    Returns:
        circuit: Quantum circuit as a :class:`qiskit.QuantumCircuit` object.
    """
    return to_qiskit(*generate_rb_circuits(
        n_qubits=1, num_cliffords=num_cliffords, trials=1))
def test_rb_circuits(n_qubits):
    depth = 10

    # test single qubit RB
    for trials in [2, 3]:
        circuits = generate_rb_circuits(n_qubits=n_qubits,
                                        num_cliffords=depth,
                                        trials=trials)
        for qc in circuits:
            # we check the ground state population to ignore any global phase
            wvf = qc.final_state_vector()
            zero_prob = abs(wvf[0]**2)
            assert np.isclose(zero_prob, 1)
Example #9
0
def test_qiskit_execute_with_zne():
    true_zne_value = 1.0

    circuit = qiskit_measure(
        *generate_rb_circuits(
            n_qubits=1,
            num_cliffords=TEST_DEPTH,
            trials=1,
            return_type="qiskit",
        ),
        0,
    )
    base = qiskit_executor(circuit)
    zne_value = execute_with_zne(circuit, qiskit_executor)
    assert abs(true_zne_value - zne_value) < abs(true_zne_value - base)
Example #10
0
def test_mitigate_executor():
    true_zne_value = 1.0

    circuit = measure(
        *generate_rb_circuits(
            n_qubits=1,
            num_cliffords=TEST_DEPTH,
            trials=1,
            return_type="qiskit",
        ),
        0,
    )
    base = qiskit_executor(circuit)

    mitigated_executor = zne.mitigate_executor(qiskit_executor)
    zne_value = mitigated_executor(circuit)
    assert abs(true_zne_value - zne_value) < abs(true_zne_value - base)
Example #11
0
def test_random_benchmarks(scale_noise, fac):
    trials = 3
    circuits = generate_rb_circuits(n_qubits=2, num_cliffords=4, trials=trials)
    noise = 0.01
    obs = np.diag([1, 0, 0, 0])

    def executor(qc):
        return noisy_simulation(qc, noise=noise, obs=obs)

    mit_executor = mitigate_executor(executor, fac, scale_noise)

    unmitigated = []
    mitigated = []
    for qc in circuits:
        unmitigated.append(executor(qc))
        mitigated.append(mit_executor(qc))

    unmit_err = np.abs(1.0 - np.asarray(unmitigated))
    mit_err = np.abs(1.0 - np.asarray(mitigated))

    assert np.average(unmit_err) >= np.average(mit_err)
def test_execute_with_zne():
    qp = generate_rb_circuits(
        n_qubits=1, num_cliffords=TEST_DEPTH, trials=1, return_type="pyquil",
    )
    result = execute_with_zne(*qp, noiseless_executor)
    assert np.isclose(result, 1.0, atol=1e-5)