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)
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()