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))
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]]
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'))
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'
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)
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