def test_observable_expectation_supported_qubits(executor): executor = functools.partial(executor, noise_level=(0, )) a, b, c = cirq.LineQubit.range(3) circuit = cirq.Circuit(cirq.I(a), cirq.X.on(b), cirq.H.on(c)) # <Z0> = 1. obs = Observable(PauliString(spec="Z", support=(0, ))) assert np.isclose(obs.expectation(circuit, executor), 1.0) # <Z1> = -1. obs = Observable(PauliString(spec="Z", support=(1, ))) assert np.isclose(obs.expectation(circuit, executor), -1.0) # <Z2> = 0. obs = Observable(PauliString(spec="Z", support=(2, ))) assert np.isclose(obs.expectation(circuit, executor), 0.0, atol=5e-2)
def test_observable_expectation_one_circuit(n, executor): executor = functools.partial(executor, noise_level=(0, )) qubits = cirq.LineQubit.range(n) obs = Observable(PauliString(spec="X" * n)) circuit = cirq.Circuit(cirq.H.on_each(qubits)) expectation = obs.expectation(circuit, executor) assert np.isclose(expectation, 1.0)
def test_observable_expectation_two_circuits(n, executor): executor = functools.partial(executor, noise_level=(0, )) obs = Observable(PauliString(spec="X" * n, coeff=-2.0), PauliString(spec="Z" * n)) qubits = cirq.LineQubit.range(n) circuit = cirq.Circuit(cirq.H.on_each(qubits)) expectation = obs.expectation(circuit, executor) assert np.isclose(expectation, -2.0, atol=1e-1)