def test_vs_ref_simulator(n_qubits, prog_length, include_measures): if include_measures: seed = 52 else: seed = None for _ in range(10): prog = _generate_random_program(n_qubits=n_qubits, length=prog_length, include_measures=include_measures) ref_qam = PyQVM(n_qubits=n_qubits, seed=seed, quantum_simulator_type=ReferenceWavefunctionSimulator) ref_qam.execute(prog) ref_wf = ref_qam.wf_simulator.wf es_qam = PyQVM(n_qubits=n_qubits, seed=seed, quantum_simulator_type=NumpyWavefunctionSimulator) es_qam.execute(prog) es_wf = es_qam.wf_simulator.wf # einsum has its wavefunction as a vector of shape (2, 2, 2, ...) where qubits are indexed # from left to right. We transpose then flatten. es_wf = es_wf.transpose().reshape(-1) np.testing.assert_allclose(ref_wf, es_wf, atol=1e-15)
def test_expectation_vs_ref_qvm(qvm, n_qubits): for repeat_i in range(20): prog = _generate_random_program(n_qubits=n_qubits, length=10) operator = _generate_random_pauli(n_qubits=n_qubits, n_terms=5) print(prog) print(operator) ref_wf = ReferenceWavefunctionSimulator(n_qubits=n_qubits).do_program(prog) ref_exp = ref_wf.expectation(operator=operator) np_wf = NumpyWavefunctionSimulator(n_qubits=n_qubits).do_program(prog) np_exp = np_wf.expectation(operator=operator) np.testing.assert_allclose(ref_exp, np_exp, atol=1e-15)