def test_aqt_sampler_sim(): theta = sympy.Symbol('theta') num_points = 10 max_angle = np.pi repetitions = 1000 num_qubits = 4 _, qubits = get_aqt_device(num_qubits) sampler = AQTSamplerLocalSimulator() sampler.simulate_ideal = True circuit = cirq.Circuit( cirq.X(qubits[3])**theta, cirq.X(qubits[0]), cirq.X(qubits[0]), cirq.X(qubits[1]), cirq.X(qubits[1]), cirq.X(qubits[2]), cirq.X(qubits[2]), ) circuit.append( cirq.PhasedXPowGate(phase_exponent=0.5, exponent=-0.5).on(qubits[0])) circuit.append( cirq.PhasedXPowGate(phase_exponent=0.5, exponent=0.5).on(qubits[0])) sweep = cirq.Linspace(key='theta', start=0.1, stop=max_angle / np.pi, length=num_points) results = sampler.run_sweep(circuit, params=sweep, repetitions=repetitions) excited_state_probs = np.zeros(num_points) for i in range(num_points): excited_state_probs[i] = np.mean(results[i].measurements['m']) assert excited_state_probs[-1] == 0.25
def test_aqt_sampler_error_handling(): for e_return in [ EngineError(), EngineErrorSecond(), EngineNoStatus(), EngineNoStatus2(), EngineNoid(), ]: with mock.patch('cirq_aqt.aqt_sampler.put', return_value=e_return, side_effect=e_return.update) as _mock_method: theta = sympy.Symbol('theta') num_points = 1 max_angle = np.pi repetitions = 10 sampler = AQTSampler(remote_host="http://localhost:5000", access_token='testkey') _, qubits = get_aqt_device(1) circuit = cirq.Circuit(cirq.X(qubits[0])**theta) sweep = cirq.Linspace(key='theta', start=0.1, stop=max_angle / np.pi, length=num_points) with pytest.raises(RuntimeError): _results = sampler.run_sweep(circuit, params=sweep, repetitions=repetitions)
def test_aqt_sampler(): put_call_args0 = { 'access_token': 'testkey', 'id': '2131da', } e_return = EngineReturn() with mock.patch('cirq_aqt.aqt_sampler.put', return_value=e_return, side_effect=e_return.update) as mock_method: theta = sympy.Symbol('theta') num_points = 1 max_angle = np.pi repetitions = 10 sampler = AQTSampler(remote_host="http://localhost:5000", access_token='testkey') _, qubits = get_aqt_device(1) circuit = cirq.Circuit(cirq.X(qubits[0])**theta) sweep = cirq.Linspace(key='theta', start=0.1, stop=max_angle / np.pi, length=num_points) results = sampler.run_sweep(circuit, params=sweep, repetitions=repetitions) excited_state_probs = np.zeros(num_points) for i in range(num_points): excited_state_probs[i] = np.mean(results[i].measurements['m']) callargs = mock_method.call_args[1]['data'] for keys in put_call_args0: assert callargs[keys] == put_call_args0[keys] assert mock_method.call_count == 3
def test_aqt_sampler_ms(): repetitions = 1000 num_qubits = 4 _, qubits = get_aqt_device(num_qubits) sampler = AQTSamplerLocalSimulator() circuit = cirq.Circuit(cirq.Z.on_each(*qubits), cirq.Z.on_each(*qubits)) for _dummy in range(9): circuit.append(cirq.XX(qubits[0], qubits[1])**0.5) circuit.append(cirq.Z(qubits[0])**0.5) results = sampler.run(circuit, repetitions=repetitions) hist = results.histogram(key='m') assert hist[12] > repetitions / 3 assert hist[0] > repetitions / 3
def test_x_crosstalk_n_noise(): num_qubits = 4 noise_mod = AQTNoiseModel() device, qubits = get_aqt_device(num_qubits) circuit = cirq.Circuit(device=device) circuit.append(cirq.Y(qubits[1])**0.5) circuit.append(cirq.Z(qubits[1])**0.5) circuit.append(cirq.X(qubits[1])**0.5) for moment in circuit.moments: noisy_moment = noise_mod.noisy_moment(moment, qubits) assert noisy_moment == [ (cirq.X**0.5).on(cirq.LineQubit(1)), cirq.depolarize(p=0.001).on(cirq.LineQubit(1)), (cirq.X**0.015).on(cirq.LineQubit(0)), (cirq.X**0.015).on(cirq.LineQubit(2)), ]
def test_aqt_sampler_empty_circuit(): num_points = 10 max_angle = np.pi repetitions = 1000 num_qubits = 4 _, _qubits = get_aqt_device(num_qubits) sampler = AQTSamplerLocalSimulator() sampler.simulate_ideal = True circuit = cirq.Circuit() sweep = cirq.Linspace(key='theta', start=0.1, stop=max_angle / np.pi, length=num_points) with pytest.raises(RuntimeError): _results = sampler.run_sweep(circuit, params=sweep, repetitions=repetitions)
def test_aqt_sampler_sim_xtalk(): num_points = 10 max_angle = np.pi repetitions = 100 num_qubits = 4 device, qubits = get_aqt_device(num_qubits) sampler = AQTSamplerLocalSimulator() sampler.simulate_ideal = False circuit = cirq.Circuit(cirq.X(qubits[0]), cirq.X(qubits[3]), cirq.X(qubits[2]), device=device) sweep = cirq.Linspace(key='theta', start=0.1, stop=max_angle / np.pi, length=num_points) _results = sampler.run_sweep(circuit, params=sweep, repetitions=repetitions)