def test_variance_bootstrap():
    qubits = [0, 1]
    qc = get_test_qc(n_qubits=len(qubits))
    state_prep = Program([H(q) for q in qubits])
    state_prep.inst(CZ(qubits[0], qubits[1]))
    tomo_expt = generate_state_tomography_experiment(state_prep, qubits)
    results = list(
        measure_observables(qc=qc, tomo_experiment=tomo_expt, n_shots=4000))
    estimate, status = iterative_mle_state_estimate(results=results,
                                                    qubits=qubits,
                                                    dilution=0.5)
    rho_est = estimate.estimate.state_point_est
    purity = np.trace(rho_est @ rho_est)
    purity = np.real_if_close(purity)
    assert purity.imag == 0.0

    def my_mle_estimator(_r, _q):
        return iterative_mle_state_estimate(results=_r,
                                            qubits=_q,
                                            dilution=0.5,
                                            entropy_penalty=0.0,
                                            beta=0.0)[0]

    boot_purity, boot_var = estimate_variance(results=results,
                                              qubits=qubits,
                                              tomo_estimator=my_mle_estimator,
                                              functional=dm.purity,
                                              n_resamples=5,
                                              project_to_physical=False)

    np.testing.assert_allclose(purity,
                               boot_purity,
                               atol=2 * np.sqrt(boot_var),
                               rtol=0.01)
def test_maxent_two_qubit(two_q_tomo_fixture):
    qubits = [0, 1]
    results, rho_true = two_q_tomo_fixture
    rho_est = iterative_mle_state_estimate(results=results, qubits=qubits, entropy_penalty=.001,
                                           tol=1e-5)

    np.testing.assert_allclose(rho_true, rho_est, atol=0.02)
Esempio n. 3
0
def test_hedged_two_qubit(two_q_tomo_fixture):
    qubits = [0, 1]
    results, rho_true = two_q_tomo_fixture
    estimate, status = iterative_mle_state_estimate(results=results, qubits=qubits,
                                                    dilution=0.5, beta=0.5)
    rho_est = estimate.estimate.state_point_est
    np.testing.assert_allclose(rho_true, rho_est, atol=0.01)
Esempio n. 4
0
def test_maxent_two_qubit(two_q_tomo_fixture):
    qubits = [0, 1]
    results, rho_true = two_q_tomo_fixture
    estimate, status = iterative_mle_state_estimate(results=results, qubits=qubits,
                                                    dilution=0.5, entropy_penalty=1.0, tol=1e-5)
    rho_est = estimate.estimate.state_point_est
    np.testing.assert_allclose(rho_true, rho_est, atol=0.01)
Esempio n. 5
0
def test_variance_bootstrap(two_q_tomo_fixture):
    qubits = [0, 1]
    results, rho_true = two_q_tomo_fixture
    rho_est = iterative_mle_state_estimate(results=results,
                                           qubits=qubits,
                                           tol=1e-4)
    purity = np.trace(rho_est @ rho_est)
    purity = np.real_if_close(purity)
    assert purity.imag == 0.0

    faster_tomo_est = partial(iterative_mle_state_estimate,
                              epsilon=.0001,
                              beta=.5,
                              tol=1e-3)

    boot_purity, boot_var = estimate_variance(results=results,
                                              qubits=qubits,
                                              tomo_estimator=faster_tomo_est,
                                              functional=dm.purity,
                                              n_resamples=50,
                                              project_to_physical=False)

    np.testing.assert_allclose(purity,
                               boot_purity,
                               atol=2 * np.sqrt(boot_var),
                               rtol=0.01)
def test_single_qubit_mle(single_q_tomo_fixture):
    qubits = [0]
    results, rho_true = single_q_tomo_fixture
    estimate, status = iterative_mle_state_estimate(results=results,
                                                    qubits=qubits,
                                                    dilution=0.5)
    rho_est = estimate.estimate.state_point_est
    np.testing.assert_allclose(rho_true, rho_est, atol=0.01)
Esempio n. 7
0
def test_hedged_two_qubit(two_q_tomo_fixture):
    qubits = [0, 1]
    results, rho_true = two_q_tomo_fixture
    rho_est = iterative_mle_state_estimate(results=results,
                                           qubits=qubits,
                                           epsilon=.0001,
                                           beta=0.5,
                                           tol=1e-3)
    np.testing.assert_allclose(rho_true, rho_est, atol=0.02)
 def my_mle_estimator(_r, _q):
     return iterative_mle_state_estimate(results=_r,
                                         qubits=_q,
                                         dilution=0.5,
                                         entropy_penalty=0.0,
                                         beta=0.0)[0]
def test_two_qubit_mle(two_q_tomo_fixture):
    qubits = [0, 1]
    results, rho_true = two_q_tomo_fixture
    rho_est = iterative_mle_state_estimate(results=results, qubits=qubits)

    np.testing.assert_allclose(rho_true, rho_est, atol=0.01)