def test_ugates_cirq(): c1 = Circuit(3) c1.add(gates.RX(0, 0.1)) c1.add(gates.RZ(1, 0.4)) c1.add(gates.U2(2, 0.5, 0.6)) final_state_c1 = c1() c2 = circuit_from_qasm(c1.to_qasm()) c2depth = len(cirq.Circuit(c2.all_operations())) assert c1.depth == c2depth final_state_c2 = cirq.Simulator().simulate(c2).final_state np.testing.assert_allclose(final_state_c1, final_state_c2, atol=_atol) c3 = Circuit.from_qasm(c2.to_qasm()) assert c3.depth == c2depth final_state_c3 = c3() np.testing.assert_allclose(final_state_c3, final_state_c2, atol=_atol) c1 = Circuit(3) c1.add(gates.RX(0, 0.1)) c1.add(gates.RZ(1, 0.4)) c1.add(gates.U2(2, 0.5, 0.6)) c1.add(gates.CU3(2, 1, 0.2, 0.3, 0.4)) # catches unknown gate "cu3" with pytest.raises(exception.QasmException): c2 = circuit_from_qasm(c1.to_qasm())
def test_ugates_cirq(backend): import qibo original_backend = qibo.get_backend() qibo.set_backend(backend) c1 = Circuit(3) c1.add(gates.RX(0, 0.1)) c1.add(gates.RZ(1, 0.4)) c1.add(gates.U2(2, 0.5, 0.6)) final_state_c1 = c1() c2 = circuit_from_qasm(c1.to_qasm()) c2depth = len(cirq.Circuit(c2.all_operations())) assert c1.depth == c2depth final_state_c2 = cirq.Simulator().simulate(c2).final_state_vector # pylint: disable=no-member np.testing.assert_allclose(final_state_c1, final_state_c2, atol=_atol) c3 = Circuit.from_qasm(c2.to_qasm()) assert c3.depth == c2depth final_state_c3 = c3() np.testing.assert_allclose(final_state_c3, final_state_c2, atol=_atol) c1 = Circuit(3) c1.add(gates.RX(0, 0.1)) c1.add(gates.RZ(1, 0.4)) c1.add(gates.U2(2, 0.5, 0.6)) c1.add(gates.CU3(2, 1, 0.2, 0.3, 0.4)) # catches unknown gate "cu3" with pytest.raises(exception.QasmException): c2 = circuit_from_qasm(c1.to_qasm()) qibo.set_backend(original_backend)
def test_controlled_u2(backend): phi = 0.1234 lam = 0.4321 c = Circuit(3) c.add([gates.X(0), gates.X(1)]) c.add(gates.U2(2, phi, lam).controlled_by(0, 1)) c.add([gates.X(0), gates.X(1)]) final_state = c() c = Circuit(3) c.add([gates.X(0), gates.X(1)]) c.add(gates.U2(2, phi, lam)) c.add([gates.X(0), gates.X(1)]) target_state = c() K.assert_allclose(final_state, target_state) # for coverage gate = gates.CU2(0, 1, phi, lam) assert gate.parameters == (phi, lam)
def test_u2(backend): original_backend = qibo.get_backend() qibo.set_backend(backend) phi = 0.1234 lam = 0.4321 initial_state = random_state(1) final_state = apply_gates([gates.U2(0, phi, lam)], initial_state=initial_state) matrix = np.array([[np.exp(-1j * (phi + lam) / 2), -np.exp(-1j * (phi - lam) / 2)], [np.exp(1j * (phi - lam) / 2), np.exp(1j * (phi + lam) / 2)]]) target_state = matrix.dot(initial_state) / np.sqrt(2) np.testing.assert_allclose(final_state, target_state) qibo.set_backend(original_backend)
def test_controlled_u2(backend): """Check controlled by U2.""" original_backend = qibo.get_backend() qibo.set_backend(backend) phi = 0.1234 lam = 0.4321 c = Circuit(3) c.add([gates.X(0), gates.X(1)]) c.add(gates.U2(2, phi, lam).controlled_by(0, 1)) c.add([gates.X(0), gates.X(1)]) final_state = c() c = Circuit(3) c.add([gates.X(0), gates.X(1)]) c.add(gates.U2(2, phi, lam)) c.add([gates.X(0), gates.X(1)]) target_state = c() np.testing.assert_allclose(final_state, target_state) # for coverage gate = gates.CU2(0, 1, phi, lam) assert gate.parameter == (phi, lam)
def test_from_qasm_ugates(): import numpy as np target = """OPENQASM 2.0; qreg q[2]; u1(0.1) q[0]; u2(0.2,0.6) q[1]; cu3(0.3,0.4,0.5) q[0],q[1];""" c = Circuit.from_qasm(target) assert c.depth == 2 assert isinstance(c.queue[0], gates.U1) assert isinstance(c.queue[1], gates.U2) assert isinstance(c.queue[2], gates.CU3) c2 = Circuit(2) c2.add([gates.U1(0, 0.1), gates.U2(1, 0.2, 0.6)]) c2.add(gates.U3(1, 0.3, 0.4, 0.5).controlled_by(0)) np.testing.assert_allclose(c2().numpy(), c().numpy())
def test_u2(backend): """Check U2 gate on random state.""" original_backend = qibo.get_backend() qibo.set_backend(backend) phi = 0.1234 lam = 0.4321 initial_state = utils.random_numpy_state(1) c = Circuit(1) c.add(gates.U2(0, phi, lam)) final_state = c(np.copy(initial_state)) matrix = np.array([[np.exp(-1j * (phi + lam) / 2), -np.exp(-1j * (phi - lam) / 2)], [np.exp(1j * (phi - lam) / 2), np.exp(1j * (phi + lam) / 2)]]) target_state = matrix.dot(initial_state) / np.sqrt(2) np.testing.assert_allclose(final_state, target_state) qibo.set_backend(original_backend)
def test_inverse_circuit_execution(backend, accelerators, fuse): original_backend = qibo.get_backend() qibo.set_backend(backend) c = Circuit(4, accelerators) c.add(gates.RX(0, theta=0.1)) c.add(gates.U2(1, phi=0.2, lam=0.3)) c.add(gates.U3(2, theta=0.1, phi=0.3, lam=0.2)) c.add(gates.CNOT(0, 1)) c.add(gates.CZ(1, 2)) c.add(gates.fSim(0, 2, theta=0.1, phi=0.3)) c.add(gates.CU2(0, 1, phi=0.1, lam=0.1)) if fuse: c = c.fuse() invc = c.invert() target_state = np.ones(2 ** 4) / 4 final_state = invc(c(np.copy(target_state))) np.testing.assert_allclose(final_state, target_state) qibo.set_backend(original_backend)
def test_inverse_circuit_execution(backend, accelerators, fuse): c = Circuit(4, accelerators) c.add(gates.RX(0, theta=0.1)) c.add(gates.U2(1, phi=0.2, lam=0.3)) c.add(gates.U3(2, theta=0.1, phi=0.3, lam=0.2)) c.add(gates.CNOT(0, 1)) c.add(gates.CZ(1, 2)) c.add(gates.fSim(0, 2, theta=0.1, phi=0.3)) c.add(gates.CU2(0, 1, phi=0.1, lam=0.1)) if fuse: if accelerators: with pytest.raises(NotImplementedError): c = c.fuse() else: c = c.fuse() invc = c.invert() target_state = np.ones(2**4) / 4 final_state = invc(c(np.copy(target_state))) K.assert_allclose(final_state, target_state)
def test_ugates(): c = Circuit(3) c.add(gates.RX(0, 0.1)) c.add(gates.RZ(1, 0.4)) c.add(gates.U2(2, 0.5, 0.6)) c.add(gates.CU1(0, 1, 0.7)) c.add(gates.CU3(2, 1, 0.2, 0.3, 0.4)) target = f"""// Generated by QIBO {__version__} OPENQASM 2.0; include "qelib1.inc"; qreg q[3]; rx(0.1) q[0]; rz(0.4) q[1]; u2(0.5, 0.6) q[2]; cu1(0.7) q[0],q[1]; cu3(0.2, 0.3, 0.4) q[2],q[1];""" assert_strings_equal(c.to_qasm(), target) c = Circuit(2) c.add(gates.CU2(0, 1, 0.1, 0.2)) with pytest.raises(ValueError): target = c.to_qasm()