コード例 #1
0
def test_with_qubits():
    old_qubits = cirq.LineQubit.range(9)
    new_qubits = cirq.LineQubit.range(9, 18)
    qubit_pauli_map = {q: cirq.Pauli.by_index(q.x) for q in old_qubits}
    pauli_string = cirq.PauliString(qubit_pauli_map, negated=True)

    assert (cirq.PauliStringExpectation(pauli_string).with_qubits(
        *new_qubits) == cirq.PauliStringExpectation(
            pauli_string.with_qubits(*new_qubits)))
    assert (cirq.ApproxPauliStringExpectation(
        pauli_string, num_samples=1).with_qubits(
            *new_qubits) == cirq.ApproxPauliStringExpectation(
                pauli_string.with_qubits(*new_qubits), num_samples=1))
コード例 #2
0
def test_run_ignore_displays(dtype):
    simulator = cirq.DensityMatrixSimulator(dtype=dtype)
    q0 = cirq.LineQubit(0)
    display = cirq.ApproxPauliStringExpectation(cirq.PauliString({q0: cirq.Z}),
                                                num_samples=1)
    circuit = cirq.Circuit.from_ops(cirq.X(q0), display, cirq.measure(q0))
    result = simulator.run(circuit)
    assert result.measurements['0'] == [[True]]
コード例 #3
0
def test_pauli_string_expectation_helper():
    qubits = cirq.LineQubit.range(9)
    qubit_pauli_map = {q: cirq.Pauli.by_index(q.x) for q in qubits}
    pauli_string = cirq.PauliString(qubit_pauli_map, negated=True)

    assert (cirq.pauli_string_expectation(
        pauli_string, key='a') == cirq.PauliStringExpectation(pauli_string,
                                                              key='a'))
    assert (cirq.pauli_string_expectation(
        pauli_string,
        5, key='a') == cirq.ApproxPauliStringExpectation(pauli_string,
                                                         5,
                                                         key='a'))
コード例 #4
0
def test_properties():
    qubits = cirq.LineQubit.range(9)
    qubit_pauli_map = {q: cirq.Pauli.by_index(q.x) for q in qubits}
    pauli_string = cirq.PauliString(qubit_pauli_map, negated=True)

    pauli_string_expectation = cirq.PauliStringExpectation(pauli_string,
                                                           key='a')
    assert pauli_string_expectation.qubits == tuple(qubits)
    assert pauli_string_expectation.key == 'a'

    approx_pauli_string_expectation = cirq.ApproxPauliStringExpectation(
        pauli_string, num_samples=5, key='a')
    assert approx_pauli_string_expectation.qubits == tuple(qubits)
    assert approx_pauli_string_expectation.num_samples == 5
    assert approx_pauli_string_expectation.key == 'a'
コード例 #5
0
def test_approx_pauli_string_expectation_measurement_basis_change(paulis):
    qubits = cirq.LineQubit.range(2)
    display = cirq.ApproxPauliStringExpectation(cirq.PauliString({
        qubits[0]:
        paulis[0],
        qubits[1]:
        paulis[1]
    }),
                                                num_samples=1)
    matrix = np.kron(cirq.unitary(paulis[0]), cirq.unitary(paulis[1]))

    circuit = cirq.Circuit.from_ops(display.measurement_basis_change())
    unitary = circuit.to_unitary_matrix(qubit_order=qubits)

    ZZ = np.diag([1, -1, -1, 1])
    np.testing.assert_allclose(
        np.dot(unitary, np.dot(matrix, unitary.T.conj())), ZZ)
コード例 #6
0
def test_approx_pauli_string_expectation_value(measurements, value):
    display = cirq.ApproxPauliStringExpectation(cirq.PauliString({}),
                                                num_samples=1)
    assert display.value_derived_from_samples(measurements) == value