def test_noiseless_rpe(qvm):
    qvm.qam.random_seed = 5
    angle = pi / 4 - .5  # pick arbitrary angle
    expt = rpe.generate_rpe_experiment(RZ(angle, 0), I(0), num_depths=7)
    expt = rpe.acquire_rpe_data(qvm, expt, multiplicative_factor=10.)
    xs, ys, x_stds, y_stds = rpe.get_moments(expt)
    result = rpe.estimate_phase_from_moments(xs, ys, x_stds, y_stds)
    assert np.abs(angle -
                  result) < 2 * np.sqrt(rpe.get_variance_upper_bound(expt))
    # test that wrapper yields same result
    result = rpe.robust_phase_estimate(expt)
    assert np.abs(angle -
                  result) < 2 * np.sqrt(rpe.get_variance_upper_bound(expt))
Пример #2
0
def test_noiseless_rpe(qvm):
    qvm.qam.random_seed = 5
    angle = pi / 4 - .5  # pick arbitrary angle
    q = 0
    num_depths = 7
    mult_factor = 10
    expts = rpe.generate_rpe_experiments(
        RZ(angle, q),
        *rpe.all_eigenvector_prep_meas_settings([q], I(q)),
        num_depths=num_depths)
    results = rpe.acquire_rpe_data(qvm,
                                   expts,
                                   multiplicative_factor=mult_factor)
    est = rpe.robust_phase_estimate(results, [q])
    assert np.abs(angle - est) < 2 * np.sqrt(
        rpe.get_variance_upper_bound(num_depths, mult_factor))
Пример #3
0
def test_noisy_rpe(qvm):
    qvm.qam.random_seed = 5
    angles = pi * np.linspace(2 / 9, 2.0 - 2 / 9, 3)
    add_error = .15
    q = 0

    def add_damping_dephasing_noise(prog, T1, T2, gate_time):
        p = Program()
        p.defgate("noise", np.eye(2))
        p.define_noisy_gate("noise", [q],
                            damping_after_dephasing(T1, T2, gate_time))
        for elem in prog:
            p.inst(elem)
            if isinstance(elem, Measurement):
                continue  # skip measurement
            p.inst(("noise", q))
        return p

    def add_noise_to_experiments(expts, t1, t2, p00, p11, q):
        gate_time = 200 * 10**(-9)
        for ex in expts:
            ex.program = add_damping_dephasing_noise(
                ex.program, t1, t2,
                gate_time).define_noisy_readout(q, p00, p11)

    tolerance = .1
    # scan over each angle and check that RPE correctly predicts the angle to within .1 radians
    for angle in angles:
        RH = Program(RY(-pi / 4, q)).inst(RZ(angle, q)).inst(RY(pi / 4, q))
        evecs = rpe.bloch_rotation_to_eigenvectors(pi / 4, q)
        cob_matrix = rpe.get_change_of_basis_from_eigvecs(evecs)
        cob = rpe.change_of_basis_matrix_to_quil(qvm, [q], cob_matrix)
        prep, meas, settings = rpe.all_eigenvector_prep_meas_settings([q], cob)
        expts = rpe.generate_rpe_experiments(RH,
                                             prep,
                                             meas,
                                             settings,
                                             num_depths=7)
        add_noise_to_experiments(expts, 25 * 10**(-6.), 20 * 10**(-6.), .92,
                                 .87, q)
        results = rpe.acquire_rpe_data(qvm,
                                       expts,
                                       multiplicative_factor=5.,
                                       additive_error=add_error)
        phase_estimate = rpe.robust_phase_estimate(results, [q])
        assert np.allclose(phase_estimate, angle, atol=tolerance)
def test_noisy_rpe(qvm):
    qvm.qam.random_seed = 5
    angles = pi * np.linspace(2 / 9, 2.0 - 2 / 9, 3)
    add_error = .15

    def add_damping_dephasing_noise(prog, T1, T2, gate_time):
        p = Program()
        p.defgate("noise", np.eye(2))
        p.define_noisy_gate("noise", [0],
                            damping_after_dephasing(T1, T2, gate_time))
        for elem in prog:
            p.inst(elem)
            if isinstance(elem, Measurement):
                continue  # skip measurement
            p.inst(("noise", 0))
        return p

    def add_noise_to_experiments(df, t1, t2, p00, p11):
        gate_time = 200 * 10**(-9)
        df["Program"] = Series([
            add_damping_dephasing_noise(prog, t1, t2,
                                        gate_time).define_noisy_readout(
                                            0, p00, p11)
            for prog in df["Program"].values
        ])

    tolerance = .1
    # scan over each angle and check that RPE correctly predicts the angle to within .1 radians
    for angle in angles:
        RH = Program(RY(-pi / 4, 0)).inst(RZ(angle, 0)).inst(RY(pi / 4, 0))
        evecs = rpe.bloch_rotation_to_eigenvectors(pi / 4, 0)
        cob = rpe.get_change_of_basis_from_eigvecs(evecs)
        expt = rpe.generate_rpe_experiment(RH, cob, num_depths=7)
        expt = rpe.add_programs_to_rpe_dataframe(qvm, expt)
        add_noise_to_experiments(expt, 25 * 10**(-6.), 20 * 10**(-6.), .92,
                                 .87)
        expt = rpe.acquire_rpe_data(qvm,
                                    expt,
                                    multiplicative_factor=5.,
                                    additive_error=add_error)
        phase_estimate = rpe.robust_phase_estimate(expt)
        assert np.allclose(phase_estimate, angle, atol=tolerance)