def test_belltest(qvm):
    """
    Generate a bell state with fake qvm and qvm and compare
    """
    prog = Program().inst([Hgate(0), CNOTgate(0, 1)])
    bellout, _ = qvm.wavefunction(prog)
    bell = np.zeros(4)
    bell[0] = bell[-1] = 1.0 / np.sqrt(2)
    assert np.allclose(bellout.amplitudes, bell)
def test_tensor_gates_single_qubit():
    prog = Program().inst([Hgate(0)])
    test_unitary = tensor_gates(gate_matrix, {}, prog.instructions[0], 1).toarray()
    true_unitary = gate_matrix['H']
    assert np.allclose(test_unitary, true_unitary)

    prog = Program().inst([Hgate(0)])
    test_unitary = tensor_gates(gate_matrix, {}, prog.instructions[0], 5).toarray()
    true_unitary = np.kron(np.eye(2**4), gate_matrix['H'])
    assert np.allclose(test_unitary, true_unitary)

    prog = Program().inst([RXgate(0.2, 3)])
    test_unitary = tensor_gates(gate_matrix, {}, prog.instructions[0], 5).toarray()
    true_unitary = np.kron(np.eye(2**1), np.kron(gate_matrix['RX'](0.2),  np.eye(2**3)))
    assert np.allclose(test_unitary, true_unitary)

    prog = Program().inst([RXgate(0.5, 4)])
    test_unitary = tensor_gates(gate_matrix, {}, prog.instructions[0], 5).toarray()
    true_unitary = np.kron(np.eye(2**0), np.kron(gate_matrix['RX'](0.5),  np.eye(2**4)))
    assert np.allclose(test_unitary, true_unitary)
def test_larger_qaoa_circuit(qvm):
    square_qaoa_circuit = [
        Hgate(0),
        Hgate(1),
        Hgate(2),
        Hgate(3),
        Xgate(0),
        PHASEgate(0.3928244130249029)(0),
        Xgate(0),
        PHASEgate(0.3928244130249029)(0),
        CNOTgate(0, 1),
        RZgate(0.78564882604980579)(1),
        CNOTgate(0, 1),
        Xgate(0),
        PHASEgate(0.3928244130249029)(0),
        Xgate(0),
        PHASEgate(0.3928244130249029)(0),
        CNOTgate(0, 3),
        RZgate(0.78564882604980579)(3),
        CNOTgate(0, 3),
        Xgate(0),
        PHASEgate(0.3928244130249029)(0),
        Xgate(0),
        PHASEgate(0.3928244130249029)(0),
        CNOTgate(1, 2),
        RZgate(0.78564882604980579)(2),
        CNOTgate(1, 2),
        Xgate(0),
        PHASEgate(0.3928244130249029)(0),
        Xgate(0),
        PHASEgate(0.3928244130249029)(0),
        CNOTgate(2, 3),
        RZgate(0.78564882604980579)(3),
        CNOTgate(2, 3),
        Hgate(0),
        RZgate(-0.77868204192240842)(0),
        Hgate(0),
        Hgate(1),
        RZgate(-0.77868204192240842)(1),
        Hgate(1),
        Hgate(2),
        RZgate(-0.77868204192240842)(2),
        Hgate(2),
        Hgate(3),
        RZgate(-0.77868204192240842)(3),
        Hgate(3)
    ]

    prog = Program(square_qaoa_circuit)
    wf_test, _ = qvm.wavefunction(prog)

    wf_true = np.array([
        8.43771693e-05 - 0.1233845 * 1j, -1.24927731e-01 + 0.00329533 * 1j,
        -1.24927731e-01 + 0.00329533 * 1j, -2.50040954e-01 + 0.12661547 * 1j,
        -1.24927731e-01 + 0.00329533 * 1j, -4.99915497e-01 - 0.12363516 * 1j,
        -2.50040954e-01 + 0.12661547 * 1j, -1.24927731e-01 + 0.00329533 * 1j,
        -1.24927731e-01 + 0.00329533 * 1j, -2.50040954e-01 + 0.12661547 * 1j,
        -4.99915497e-01 - 0.12363516 * 1j, -1.24927731e-01 + 0.00329533 * 1j,
        -2.50040954e-01 + 0.12661547 * 1j, -1.24927731e-01 + 0.00329533 * 1j,
        -1.24927731e-01 + 0.00329533 * 1j, 8.43771693e-05 - 0.1233845 * 1j
    ])

    assert np.allclose(wf_test.amplitudes, wf_true)
示例#4
0
def test_larger_qaoa_density():
    square_qaoa_circuit = [
        Hgate(0),
        Hgate(1),
        Hgate(2),
        Hgate(3),
        Xgate(0),
        PHASEgate(0.3928244130249029)(0),
        Xgate(0),
        PHASEgate(0.3928244130249029)(0),
        CNOTgate(0, 1),
        RZgate(0.78564882604980579)(1),
        CNOTgate(0, 1),
        Xgate(0),
        PHASEgate(0.3928244130249029)(0),
        Xgate(0),
        PHASEgate(0.3928244130249029)(0),
        CNOTgate(0, 3),
        RZgate(0.78564882604980579)(3),
        CNOTgate(0, 3),
        Xgate(0),
        PHASEgate(0.3928244130249029)(0),
        Xgate(0),
        PHASEgate(0.3928244130249029)(0),
        CNOTgate(1, 2),
        RZgate(0.78564882604980579)(2),
        CNOTgate(1, 2),
        Xgate(0),
        PHASEgate(0.3928244130249029)(0),
        Xgate(0),
        PHASEgate(0.3928244130249029)(0),
        CNOTgate(2, 3),
        RZgate(0.78564882604980579)(3),
        CNOTgate(2, 3),
        Hgate(0),
        RZgate(-0.77868204192240842)(0),
        Hgate(0),
        Hgate(1),
        RZgate(-0.77868204192240842)(1),
        Hgate(1),
        Hgate(2),
        RZgate(-0.77868204192240842)(2),
        Hgate(2),
        Hgate(3),
        RZgate(-0.77868204192240842)(3),
        Hgate(3)
    ]

    prog = Program(square_qaoa_circuit)
    qvm = QVMConnection(type_trans='density')
    rho_test = qvm.density(prog)
    wf_true = np.array([
        8.43771693e-05 - 0.1233845 * 1j, -1.24927731e-01 + 0.00329533 * 1j,
        -1.24927731e-01 + 0.00329533 * 1j, -2.50040954e-01 + 0.12661547 * 1j,
        -1.24927731e-01 + 0.00329533 * 1j, -4.99915497e-01 - 0.12363516 * 1j,
        -2.50040954e-01 + 0.12661547 * 1j, -1.24927731e-01 + 0.00329533 * 1j,
        -1.24927731e-01 + 0.00329533 * 1j, -2.50040954e-01 + 0.12661547 * 1j,
        -4.99915497e-01 - 0.12363516 * 1j, -1.24927731e-01 + 0.00329533 * 1j,
        -2.50040954e-01 + 0.12661547 * 1j, -1.24927731e-01 + 0.00329533 * 1j,
        -1.24927731e-01 + 0.00329533 * 1j, 8.43771693e-05 - 0.1233845 * 1j
    ])

    wf_true = np.reshape(wf_true, (2**4, 1))
    rho_true = np.dot(wf_true, np.conj(wf_true).T)
    assert np.isclose(rho_test.todense(), rho_true).all()