def test_variational_layer_call(nqubits): original_backend = qibo.get_backend() qibo.set_backend("custom") theta = 2 * np.pi * np.random.random(nqubits) c = Circuit(nqubits) c.add((gates.RY(i, t) for i, t in enumerate(theta))) c.add((gates.CZ(i, i + 1) for i in range(0, nqubits - 1, 2))) target_state = c().numpy() pairs = list((i, i + 1) for i in range(0, nqubits - 1, 2)) gate = gates.VariationalLayer(range(nqubits), pairs, gates.RY, gates.CZ, theta) final_state = gate(c._default_initial_state()).numpy() np.testing.assert_allclose(target_state, final_state) qibo.set_backend(original_backend)
def test_custom_circuit(backend): """Check consistency between Circuit and custom circuits""" import tensorflow as tf original_backend = qibo.get_backend() qibo.set_backend(backend) theta = 0.1234 c = Circuit(2) c.add(gates.X(0)) c.add(gates.X(1)) c.add(gates.CZPow(0, 1, theta)) r1 = c.execute().numpy() # custom circuit def custom_circuit(initial_state, theta): l1 = gates.X(0)(initial_state) l2 = gates.X(1)(l1) o = gates.CZPow(0, 1, theta)(l2) return o init2 = c._default_initial_state() init3 = c._default_initial_state() if backend != "custom": init2 = tf.reshape(init2, (2, 2)) init3 = tf.reshape(init3, (2, 2)) r2 = custom_circuit(init2, theta).numpy().ravel() np.testing.assert_allclose(r1, r2) tf_custom_circuit = tf.function(custom_circuit) if backend == "custom": with pytest.raises(NotImplementedError): r3 = tf_custom_circuit(init3, theta).numpy().ravel() else: r3 = tf_custom_circuit(init3, theta).numpy().ravel() np.testing.assert_allclose(r2, r3) qibo.set_backend(original_backend)