Exemple #1
0
def test_run_correlations(dtype):
    q0, q1 = cirq.LineQubit.range(2)
    simulator = TFWaveFunctionSimulator(dtype=dtype)
    circuit = cirq.Circuit.from_ops(cirq.H(q0), cirq.CNOT(q0, q1))
    for _ in range(10):
        circuit_op = simulator.simulate(circuit)
        with tf.Session() as sess:
            wf = sess.run(circuit_op)
        measurements = cirq.sample_state_vector(wf.reshape(-1), [0, 1])
Exemple #2
0
def test_resolve_named_placeholder():
    """Resolve named placeholders via feed_dict."""
    wf = cirq.testing.random_superposition(2).astype(np.complex64)

    # placeholders can be instantiated without references in circuit gates!
    var_names = ["v_{}".format(i) for i in range(5)]
    params = np.random.randn(5)
    placeholder_circuit = cirq.Circuit()
    for i in range(5):
        placeholder_circuit += cirq.Rx(
            tf.placeholder(tf.complex64, shape=(), name=f"theta_{i}"))(q(0))

    circuit_op = TFWaveFunctionSimulator(dtype=tf.complex64).simulate(
        placeholder_circuit, initial_state=wf)
    placeholder_names = ["theta_{}:0".format(i) for i in range(5)]
    feed_dict = dict(zip(placeholder_names, params))
    with tf.Session() as sess:
        tf_result = sess.run(circuit_op, feed_dict=feed_dict).reshape(-1)

    circuit = cirq.Circuit()
    for theta in params:
        circuit += cirq.Rx(theta)(q(0))
    cirq_result = cirq.Simulator().simulate(
        circuit, initial_state=np.copy(wf)).final_state
    np.testing.assert_array_almost_equal(tf_result, cirq_result)
Exemple #3
0
def test_run_bit_flips(dtype):
    q0, q1 = cirq.LineQubit.range(2)
    simulator = TFWaveFunctionSimulator(dtype=dtype)
    for b0 in [0, 1]:
        for b1 in [0, 1]:
            circuit = cirq.Circuit.from_ops((cirq.X**b0)(q0), (cirq.X**b1)(q1))
            circuit_op = simulator.simulate(circuit)
        with tf.Session() as sess:
            sess.run(tf.global_variables_initializer())
            wf = sess.run(circuit_op)
        measurements = cirq.sample_state_vector(wf, [0, 1])
        np.testing.assert_array_almost_equal(measurements[0], [b0, b1])
        expected_state = np.zeros(shape=(2, 2))
        expected_state[b0][b1] = 1.0
        cirq.testing.assert_allclose_up_to_global_phase(wf.reshape(-1),
                                                        np.reshape(
                                                            expected_state, 4),
                                                        atol=1e-6)
Exemple #4
0
def test_tf_wavefunction_simulator_vs_cirq_parametrized_two_qubit_gates(g, e):
    circuit = cirq.Circuit.from_ops(g(exponent=e)(q(0), q(1)))
    wf = cirq.testing.random_superposition(4).astype(np.complex64)
    cirq_result = cirq.Simulator().simulate(
        circuit, initial_state=np.copy(wf)).final_state
    circuit_op = TFWaveFunctionSimulator(dtype=tf.complex64).simulate(
        circuit, initial_state=np.copy(wf))
    with tf.Session() as sess:
        tf_result = sess.run(circuit_op).reshape(-1)
    np.testing.assert_array_almost_equal(tf_result, cirq_result)
Exemple #5
0
def test_tf_wavefunction_simulator_vs_cirq_parametrized_single_qubit_gates(
        g, e):
    inst = g(e)(q(0))
    circuit = cirq.Circuit.from_ops(inst)
    # wrapped = tf_gate_wrapper(inst)
    wf = cirq.testing.random_superposition(2).astype(np.complex64)
    cirq_result = cirq.Simulator().simulate(
        circuit, initial_state=np.copy(wf)).final_state
    circuit_op = TFWaveFunctionSimulator(dtype=tf.complex64).simulate(
        circuit, initial_state=np.copy(wf))
    with tf.Session() as sess:
        tf_result = sess.run(circuit_op).reshape(-1)
    np.testing.assert_array_almost_equal(tf_result, cirq_result, decimal=4)
Exemple #6
0
def compile_tensorboard_session():
    theta = tf.Variable(np.pi)
    circuit = cirq.Circuit.from_ops(
        cirq.Ry(theta)(q(0)), cirq.CNOT(q(0), q(1)))
    tf.summary.scalar('theta', theta)

    initial_state = np.asarray([1, 0, 0, 0])
    circuit_op = TFWaveFunctionSimulator(dtype=tf.complex64).simulate(
        circuit, initial_state=initial_state)
    # with tf.Session() as sess:
    #     sess.run(tf.global_variables_initializer())
    #     wf = sess.run(circuit_op)
    # return

    tensorboard_session(circuit_op, {theta: np.pi / 2})
Exemple #7
0
def test_tf_wavefunction_simulator_vs_cirq_single_qubit_gates(g):

    wf = np.complex64(cirq.testing.random_superposition(2))
    # print(rand_init)
    for wf in [
            np.array([1, 0], dtype=np.complex64),
            np.array([0, 1], dtype=np.complex64)
    ]:
        circuit = cirq.Circuit.from_ops(g(q(0)))
        cirq_result = cirq.Simulator().simulate(
            circuit, initial_state=np.copy(wf)).final_state

        circuit_op = TFWaveFunctionSimulator(dtype=tf.complex64).simulate(
            circuit, initial_state=np.copy(wf))
        with tf.Session() as sess:
            tf_result = sess.run(circuit_op).reshape(-1)
    # !hep-qml CHANGES: testing assertion
    np.testing.assert_array_almost_equal(tf_result, cirq_result)
Exemple #8
0
def test_resolve_scalar_placeholder():
    """Resolve scalar placeholders via feed_dict."""
    wf = cirq.testing.random_superposition(4).astype(np.complex64)
    params = [0.83, 1.2]
    theta_x = tf.placeholder(tf.complex64, shape=(), name="theta_x")
    theta_y = tf.placeholder(tf.complex64, shape=(), name="theta_y")
    placeholder_circuit = cirq.Circuit.from_ops([
        cirq.Rx(theta_x)(q(0)),
        cirq.Ry(theta_y)(q(1)),
    ])
    circuit_op = TFWaveFunctionSimulator(dtype=tf.complex64).simulate(
        placeholder_circuit, initial_state=wf)
    feed_dict = dict(zip([theta_x, theta_y], params))
    with tf.Session() as sess:
        tf_result = sess.run(circuit_op, feed_dict=feed_dict).reshape(-1)

    circuit = cirq.Circuit.from_ops([
        cirq.Rx(params[0])(q(0)),
        cirq.Ry(params[1])(q(1)),
    ])
    cirq_result = cirq.Simulator().simulate(
        circuit, initial_state=np.copy(wf)).final_state
    np.testing.assert_array_almost_equal(tf_result, cirq_result)
Exemple #9
0
def test_tf_wavefunction_simulator_instantiate():
    _ = TFWaveFunctionSimulator()