def test_direct_fidelity_estimation_no_noise_clifford():
    qubits = cirq.LineQubit.range(3)
    circuit = cirq.Circuit(cirq.Z(qubits[0]), cirq.X(qubits[1]),
                           cirq.X(qubits[2]))

    no_noise_simulator = cirq.DensityMatrixSimulator()

    estimated_fidelity, _ = dfe.direct_fidelity_estimation(
        circuit,
        qubits,
        no_noise_simulator,
        n_measured_operators=3,
        samples_per_term=0)
    assert np.isclose(estimated_fidelity, 1.0, atol=0.01)
def test_direct_fidelity_estimation_no_noise_clifford():
    qubits = cirq.LineQubit.range(3)
    circuit = cirq.Circuit(cirq.Z(qubits[0]), cirq.X(qubits[1]),
                           cirq.X(qubits[2]))

    no_noise = cirq.ConstantQubitNoiseModel(cirq.depolarize(0.0))
    no_noise_simulator = cirq.DensityMatrixSimulator(noise=no_noise)

    estimated_fidelity, _ = dfe.direct_fidelity_estimation(circuit,
                                                           qubits,
                                                           no_noise_simulator,
                                                           n_trials=100,
                                                           n_clifford_trials=3,
                                                           samples_per_term=0)
    assert np.isclose(estimated_fidelity, 1.0, atol=0.01)
def test_direct_fidelity_estimation_with_noise_clifford():
    qubits = cirq.LineQubit.range(3)
    circuit = cirq.Circuit(cirq.Z(qubits[0]), cirq.X(qubits[1]),
                           cirq.X(qubits[2]))

    noise = cirq.ConstantQubitNoiseModel(cirq.depolarize(0.1))
    noisy_simulator = cirq.DensityMatrixSimulator(noise=noise)

    estimated_fidelity, _ = dfe.direct_fidelity_estimation(
        circuit,
        qubits,
        noisy_simulator,
        n_measured_operators=None,
        samples_per_term=100)
    assert estimated_fidelity >= -1.0 and estimated_fidelity <= 1.0
def test_direct_fidelity_estimation_clifford_all_trials():
    qubits = cirq.LineQubit.range(2)
    circuit = cirq.Circuit(cirq.Z(qubits[0]), cirq.X(qubits[1]))

    no_noise_simulator = cirq.DensityMatrixSimulator()

    for n_measured_operators in [1, 2, 3, 4, None]:
        estimated_fidelity, _ = dfe.direct_fidelity_estimation(
            circuit,
            qubits,
            no_noise_simulator,
            n_measured_operators=n_measured_operators,
            samples_per_term=0,
        )
        assert np.isclose(estimated_fidelity, 1.0, atol=0.01)
Exemplo n.º 5
0
def test_direct_fidelity_estimation_no_noise_non_clifford():
    qubits = cirq.LineQubit.range(3)
    circuit = cirq.Circuit(
        cirq.Z(qubits[0])**0.123, cirq.X(qubits[1]), cirq.X(qubits[2]))

    no_noise = cirq.ConstantQubitNoiseModel(cirq.depolarize(0.0))

    estimated_fidelity = direct_fidelity_estimation.direct_fidelity_estimation(
        circuit,
        qubits,
        no_noise,
        n_trials=100,
        n_clifford_trials=3,
        samples_per_term=0)
    assert np.isclose(estimated_fidelity, 1.0, atol=0.01)
def test_direct_fidelity_estimation_with_noise():
    qubits = cirq.LineQubit.range(3)
    circuit = cirq.Circuit(
        cirq.Z(qubits[0])**0.25,  # T-Gate, non Clifford.
        cirq.X(qubits[1])**0.123,
        cirq.X(qubits[2])**0.456)

    noise = cirq.ConstantQubitNoiseModel(cirq.depolarize(0.1))
    noisy_simulator = cirq.DensityMatrixSimulator(noise=noise)

    estimated_fidelity, _ = dfe.direct_fidelity_estimation(circuit,
                                                           qubits,
                                                           noisy_simulator,
                                                           n_trials=10,
                                                           n_clifford_trials=3,
                                                           samples_per_term=10)
    assert estimated_fidelity >= -1.0 and estimated_fidelity <= 1.0
def test_direct_fidelity_estimation_intermediate_results():
    qubits = cirq.LineQubit.range(1)
    circuit = cirq.Circuit(cirq.I(qubits[0]))
    no_noise_simulator = cirq.DensityMatrixSimulator()

    _, intermediate_result = dfe.direct_fidelity_estimation(
        circuit,
        qubits,
        no_noise_simulator,
        n_measured_operators=1,
        samples_per_term=0)
    # We only test a few fields to be sure that they are set properly. In
    # particular, some of them are random, and so we don't test them.
    np.testing.assert_allclose(
        intermediate_result.clifford_state.ch_form.gamma, [0])

    np.testing.assert_equal(len(intermediate_result.pauli_traces), 1)
    assert np.isclose(intermediate_result.pauli_traces[0].rho_i, 1.0)
    assert np.isclose(intermediate_result.pauli_traces[0].Pr_i, 0.5)

    np.testing.assert_equal(len(intermediate_result.trial_results), 1)
    assert np.isclose(intermediate_result.trial_results[0].sigma_i, 1.0)