Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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)