Пример #1
0
def test_compiling_twice_exception(backend):
    """Check that compiling a circuit a second time raises error."""
    c = Circuit(2)
    c.add([gates.H(0), gates.H(1)])
    c.compile()
    with pytest.raises(RuntimeError):
        c.compile()
Пример #2
0
def test_compiled_circuit(backend):
    """Check that compiling with `Circuit.compile` does not break results."""
    original_backend = qibo.get_backend()
    qibo.set_backend(backend)
    def create_circuit(theta = 0.1234):
        c = Circuit(2)
        c.add(gates.X(0))
        c.add(gates.X(1))
        c.add(gates.CZPow(0, 1, theta))
        return c

    # Try to compile circuit without gates
    empty_c = Circuit(2)
    with pytest.raises(RuntimeError):
        empty_c.compile()

    # Run eager circuit
    c1 = create_circuit()
    r1 = c1.execute().numpy()

    # Run compiled circuit
    c2 = create_circuit()
    if backend == "custom":
        with pytest.raises(RuntimeError):
            c2.compile()
    else:
        c2.compile()
        r2 = c2.execute().numpy()
        init_state = c2._default_initial_state()
        r3, _ = c2._execute_for_compile(init_state.numpy().reshape((2, 2)))
        r3 = r3.numpy().ravel()
        np.testing.assert_allclose(r1, r2)
        np.testing.assert_allclose(r1, r3)
    qibo.set_backend(original_backend)
Пример #3
0
def test_compiled_execute(backend):
    original_backend = qibo.get_backend()
    qibo.set_backend(backend)

    def create_circuit(theta=0.1234):
        c = Circuit(2)
        c.add(gates.X(0))
        c.add(gates.X(1))
        c.add(gates.CU1(0, 1, theta))
        return c

    # Try to compile circuit without gates
    empty_c = Circuit(2)
    with pytest.raises(RuntimeError):
        empty_c.compile()

    # Run eager circuit
    c1 = create_circuit()
    r1 = c1.execute()

    # Run compiled circuit
    c2 = create_circuit()
    if backend == "custom":
        with pytest.raises(RuntimeError):
            c2.compile()
    else:
        c2.compile()
        r2 = c2()
        init_state = c2.get_initial_state()
        r3, _ = c2._execute_for_compile(np.reshape(init_state, (2, 2)))
        r3 = np.reshape(r3, (4, ))
        np.testing.assert_allclose(r1, r2)
        np.testing.assert_allclose(r1, r3)
    qibo.set_backend(original_backend)
Пример #4
0
def test_compiling_twice_exception():
    """Check that compiling a circuit a second time raises error."""
    original_backend = qibo.get_backend()
    qibo.set_backend("matmuleinsum")
    c = Circuit(2)
    c.add([gates.H(0), gates.H(1)])
    c.compile()
    with pytest.raises(RuntimeError):
        c.compile()
    qibo.set_backend(original_backend)
Пример #5
0
def test_entropy_in_compiled_circuit(backend):
    """Check that entropy calculation works when circuit is compiled."""
    from qibo import get_backend
    entropy = callbacks.EntanglementEntropy([0])
    c = Circuit(2)
    c.add(gates.CallbackGate(entropy))
    c.add(gates.H(0))
    c.add(gates.CallbackGate(entropy))
    c.add(gates.CNOT(0, 1))
    c.add(gates.CallbackGate(entropy))
    c.compile()
    final_state = c()
    K.assert_allclose(entropy[:], [0, 0, 1.0], atol=_atol)
def test_entropy_in_compiled_circuit():
    """Check that entropy calculation works when circuit is compiled."""
    import qibo
    original_backend = qibo.get_backend()
    qibo.set_backend("matmuleinsum")
    entropy = callbacks.EntanglementEntropy([0])
    c = Circuit(2)
    c.add(gates.CallbackGate(entropy))
    c.add(gates.H(0))
    c.add(gates.CallbackGate(entropy))
    c.add(gates.CNOT(0, 1))
    c.add(gates.CallbackGate(entropy))
    c.compile()
    state = c()
    qibo.set_backend("custom")

    target = [0, 0, 1.0]
    np.testing.assert_allclose(entropy[:].numpy(), target, atol=_atol)
    qibo.set_backend(original_backend)
Пример #7
0
def test_entropy_in_compiled_circuit(backend):
    """Check that entropy calculation works when circuit is compiled."""
    original_backend = qibo.get_backend()
    qibo.set_backend(backend)
    entropy = callbacks.EntanglementEntropy([0])
    c = Circuit(2)
    c.add(gates.CallbackGate(entropy))
    c.add(gates.H(0))
    c.add(gates.CallbackGate(entropy))
    c.add(gates.CNOT(0, 1))
    c.add(gates.CallbackGate(entropy))
    if backend == "custom":
        with pytest.raises(RuntimeError):
            c.compile()
    else:
        c.compile()
        final_state = c()
        np.testing.assert_allclose(entropy[:], [0, 0, 1.0], atol=_atol)
    qibo.set_backend(original_backend)
Пример #8
0
def test_compiled_execute(backend):
    def create_circuit(theta = 0.1234):
        c = Circuit(2)
        c.add(gates.X(0))
        c.add(gates.X(1))
        c.add(gates.CU1(0, 1, theta))
        return c

    # Try to compile circuit without gates
    empty_c = Circuit(2)
    with pytest.raises(RuntimeError):
        empty_c.compile()

    # Run eager circuit
    c1 = create_circuit()
    r1 = c1.execute()

    # Run compiled circuit
    c2 = create_circuit()
    c2.compile()
    r2 = c2()
    init_state = c2.get_initial_state()
    np.testing.assert_allclose(r1, r2)