Пример #1
0
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)
Пример #2
0
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)