def test_zne_decorator(): qp = generate_rb_circuits( n_qubits=1, num_cliffords=TEST_DEPTH, trials=1, return_type="pyquil", ) result = decorated_executor(*qp) assert np.isclose(result, 1.0, atol=1e-5)
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_qiskit_run_factory_with_number_of_shots(): 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, ) 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 = fac.run( circuit, qiskit_executor, scale_noise=scaling.fold_gates_at_random, ).reduce() 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_run_factory(): qp = generate_rb_circuits( n_qubits=1, num_cliffords=TEST_DEPTH, trials=1, return_type="pyquil", ) fac = inference.RichardsonFactory([1.0, 2.0, 3.0]) fac.run(*qp, noiseless_executor, scale_noise=scaling.fold_gates_at_random) result = fac.reduce() assert np.isclose(result, 1.0, atol=1e-5)
def test_rb_conversion(n_qubits, return_type): depth = 10 for trials in [2, 3]: circuits = generate_rb_circuits( n_qubits=n_qubits, num_cliffords=depth, trials=trials, return_type=return_type, ) for qc in circuits: assert return_type in qc.__module__
def random_one_qubit_identity_circuit(num_cliffords: int) -> QuantumCircuit: """Returns a single-qubit identity circuit. Args: num_cliffords (int): Number of cliffords used to generate the circuit. Returns: circuit: Quantum circuit as a :class:`qiskit.QuantumCircuit` object. """ return to_qiskit(*generate_rb_circuits( n_qubits=1, num_cliffords=num_cliffords, trials=1))
def test_rb_circuits(n_qubits): depth = 10 # test single qubit RB for trials in [2, 3]: circuits = generate_rb_circuits(n_qubits=n_qubits, num_cliffords=depth, trials=trials) for qc in circuits: # we check the ground state population to ignore any global phase wvf = qc.final_state_vector() zero_prob = abs(wvf[0]**2) assert np.isclose(zero_prob, 1)
def test_qiskit_execute_with_zne(): 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) zne_value = execute_with_zne(circuit, qiskit_executor) assert abs(true_zne_value - zne_value) < abs(true_zne_value - base)
def test_mitigate_executor(): true_zne_value = 1.0 circuit = measure( *generate_rb_circuits( n_qubits=1, num_cliffords=TEST_DEPTH, trials=1, return_type="qiskit", ), 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_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_execute_with_zne(): qp = generate_rb_circuits( n_qubits=1, num_cliffords=TEST_DEPTH, trials=1, return_type="pyquil", ) result = execute_with_zne(*qp, noiseless_executor) assert np.isclose(result, 1.0, atol=1e-5)