def test_circuit_decompose_execution(backend): c = Circuit(6) c.add(gates.RX(0, 0.1234)) c.add(gates.RY(1, 0.4321)) c.add((gates.H(i) for i in range(2, 6))) c.add(gates.CNOT(0, 1)) c.add(gates.X(3).controlled_by(0, 1, 2, 4)) decomp_c = c.decompose(5) K.assert_allclose(c(), decomp_c(), atol=1e-6)
def test_circuit_decompose_execution(backend): original_backend = qibo.get_backend() qibo.set_backend(backend) c = Circuit(6) c.add(gates.RX(0, 0.1234)) c.add(gates.RY(1, 0.4321)) c.add((gates.H(i) for i in range(2, 6))) c.add(gates.CNOT(0, 1)) c.add(gates.X(3).controlled_by(0, 1, 2, 4)) decomp_c = c.decompose(5) np.testing.assert_allclose(c(), decomp_c(), atol=1e-6) qibo.set_backend(original_backend)
def test_circuit_decompose_with_measurements(): """Check ``circuit.decompose`` for circuit with measurements.""" c = Circuit(8) c.add(gates.X(4).controlled_by(0, 2, 5, 6, 7)) c.add(gates.M(0, 2, 4, 6, register_name="A")) c.add(gates.M(1, 3, 5, 7, register_name="B")) target_c = Circuit(8) target_c.add(gates.X(4).controlled_by(0, 2, 5, 6, 7).decompose(1, 3)) target_c.add(gates.M(0, 2, 4, 6, register_name="A")) target_c.add(gates.M(1, 3, 5, 7, register_name="B")) decomp_c = c.decompose(1, 3) assert_circuit_same_gates(decomp_c, target_c)
def test_circuit_decompose(): """Check ``circuit.decompose`` agrees with multi-control ``X`` decomposition.""" c = Circuit(6) c.add(gates.RX(0, 0.1234)) c.add(gates.RY(1, 0.4321)) c.add((gates.H(i) for i in range(2, 6))) c.add(gates.CNOT(0, 1)) c.add(gates.X(3).controlled_by(0, 1, 2, 4)) decomp_c = c.decompose(5) init_state = utils.random_numpy_state(c.nqubits) target_state = c(np.copy(init_state)).numpy() final_state = decomp_c(np.copy(init_state)).numpy() np.testing.assert_allclose(final_state, target_state, atol=_ATOL) target_c = Circuit(c.nqubits) target_c.add(gates.RX(0, 0.1234)) target_c.add(gates.RY(1, 0.4321)) target_c.add((gates.H(i) for i in range(2, 6))) target_c.add(gates.CNOT(0, 1)) target_c.add(gates.X(3).controlled_by(0, 1, 2, 4).decompose(5)) assert_circuit_same_gates(decomp_c, target_c)