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], }
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_mitigate_executor(): rand_circ = random_identity_circuit(depth=TEST_DEPTH) qp = measure(rand_circ, qid=0) new_executor = mitigate_executor(basic_executor, None, scale_noise) # bad_result is computed with native noise (scale = 1) bad_result = basic_executor(scale_noise(qp, 1)) good_result = new_executor(qp) assert not np.isclose(bad_result, 1.0, atol=1.0e-1) assert np.isclose(good_result, 1.0, atol=1.0e-1)
def test_mitigate_executor(): true_zne_value = 1.0 circuit = measure( random_one_qubit_identity_circuit(num_cliffords=TEST_DEPTH), 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)
def test_mitigate_executor(): """Tests a random identity circuit executor.""" rand_circ = random_one_qubit_identity_circuit(num_cliffords=TEST_DEPTH) qp = measure(rand_circ, qid=0) new_executor = mitigate_executor(basic_executor, scale_noise=scale_noise) # bad_result is computed with native noise (scale = 1) bad_result = basic_executor(scale_noise(qp, 1)) good_result = new_executor(qp) assert not np.isclose(bad_result, 1.0, atol=1.0e-1) assert np.isclose(good_result, 1.0, atol=1.0e-1)
def test_doc_is_preserved(): """Tests that the doc of the original executor is preserved.""" def first_executor(circuit): """Doc of the original executor.""" return 0 mit_executor = mitigate_executor(first_executor) assert mit_executor.__doc__ == first_executor.__doc__ @zne_decorator() def second_executor(circuit): """Doc of the original executor.""" return 0 assert second_executor.__doc__ == first_executor.__doc__
def test_qiskit_mitigate_executor(): 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) mitigated_executor = mitigate_executor(qiskit_executor) zne_value = mitigated_executor(circuit) assert abs(true_zne_value - zne_value) < abs(true_zne_value - base)
def test_mitigate_executor_with_shot_list(): """Tests the mitigation of an executor using different shots for each noise scale factor. """ rand_circ = random_one_qubit_identity_circuit(num_cliffords=TEST_DEPTH) qp = measure(rand_circ, qid=0) fac = RichardsonFactory( [1.0, 2.0, 3.0], shot_list=[10 ** 4, 10 ** 5, 10 ** 6] ) new_executor = mitigate_executor( basic_executor, scale_noise=scale_noise, factory=fac ) # bad_result is computed with native noise (scale = 1) bad_result = basic_executor(scale_noise(qp, 1)) good_result = new_executor(qp) assert not np.isclose(bad_result, 1.0, atol=1.0e-1) assert np.isclose(good_result, 1.0, atol=1.0e-1) assert fac._instack[0] == {"scale_factor": 1.0, "shots": 10 ** 4} assert fac._instack[1] == {"scale_factor": 2.0, "shots": 10 ** 5} assert fac._instack[2] == {"scale_factor": 3.0, "shots": 10 ** 6}
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_mitigate_executor_with_shot_list(): true_zne_value = 1.0 scale_factors = [1.0, 2.0, 3.0] shot_list = [1_000, 2_000, 3_000] fac = zne.inference.ExpFactory(scale_factors=scale_factors, shot_list=shot_list) mitigated_executor = zne.mitigate_executor(qiskit_executor, fac) circuit = measure( random_one_qubit_identity_circuit(num_cliffords=TEST_DEPTH), 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], }
def test_mitigate_executor(): qp = random_one_qubit_identity_circuit(num_cliffords=TEST_DEPTH) new_executor = mitigate_executor(noiseless_executor) result = new_executor(qp) assert np.isclose(result, 1.0, atol=1e-5)