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)
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)