def test_trial_result_initializer(): resolver = cirq.ParamResolver() step = mock.Mock(cirq.StepResultBase) step._simulator_state.return_value = 1 state = 3 with pytest.raises(ValueError, match='Exactly one of'): _ = SimulationTrialResult(resolver, {}, None, None) with pytest.raises(ValueError, match='Exactly one of'): _ = SimulationTrialResult(resolver, {}, state, step) with pytest.raises(ValueError, match='Exactly one of'): _ = SimulationTrialResult(resolver, {}, final_simulator_state=None, final_step_result=None) with pytest.raises(ValueError, match='Exactly one of'): _ = SimulationTrialResult(resolver, {}, final_simulator_state=state, final_step_result=step) with cirq.testing.assert_deprecated(deadline='v0.16'): x = SimulationTrialResult(resolver, {}, final_step_result=step) assert x._final_simulator_state == 1 with cirq.testing.assert_deprecated(deadline='v0.16'): x = SimulationTrialResult(resolver, {}, None, final_step_result=step) assert x._final_simulator_state == 1 with cirq.testing.assert_deprecated(deadline='v0.16'): x = SimulationTrialResult(resolver, {}, None, step) assert x._final_simulator_state == 1 with cirq.testing.assert_deprecated(deadline='v0.16'): x = SimulationTrialResult(resolver, {}, final_simulator_state=None, final_step_result=step) assert x._final_simulator_state == 1 x = SimulationTrialResult(resolver, {}, state) assert x._final_simulator_state == 3 x = SimulationTrialResult(resolver, {}, final_simulator_state=state) assert x._final_simulator_state == 3
def test_iter_definitions(): dummy_trial_result = SimulationTrialResult(params={}, measurements={}, final_simulator_state=[]) class FakeNonIterSimulatorImpl( SimulatesAmplitudes, SimulatesExpectationValues, SimulatesFinalState ): """A class which defines the non-Iterator simulator API methods. After v0.12, simulators are expected to implement the *_iter methods. """ def compute_amplitudes_sweep( self, program: 'cirq.AbstractCircuit', bitstrings: Sequence[int], params: study.Sweepable, qubit_order: cirq.QubitOrderOrList = cirq.QubitOrder.DEFAULT, ) -> Sequence[Sequence[complex]]: return [[1.0]] def simulate_expectation_values_sweep( self, program: 'cirq.AbstractCircuit', observables: Union['cirq.PauliSumLike', List['cirq.PauliSumLike']], params: 'study.Sweepable', qubit_order: cirq.QubitOrderOrList = cirq.QubitOrder.DEFAULT, initial_state: Any = None, permit_terminal_measurements: bool = False, ) -> List[List[float]]: return [[1.0]] def simulate_sweep( self, program: 'cirq.AbstractCircuit', params: study.Sweepable, qubit_order: cirq.QubitOrderOrList = cirq.QubitOrder.DEFAULT, initial_state: Any = None, ) -> List[SimulationTrialResult]: return [dummy_trial_result] non_iter_sim = FakeNonIterSimulatorImpl() q0 = cirq.LineQubit(0) circuit = cirq.Circuit(cirq.X(q0)) bitstrings = [0b0] params = {} assert non_iter_sim.compute_amplitudes_sweep(circuit, bitstrings, params) == [[1.0]] amp_iter = non_iter_sim.compute_amplitudes_sweep_iter(circuit, bitstrings, params) assert next(amp_iter) == [1.0] obs = cirq.X(q0) assert non_iter_sim.simulate_expectation_values_sweep(circuit, obs, params) == [[1.0]] ev_iter = non_iter_sim.simulate_expectation_values_sweep_iter(circuit, obs, params) assert next(ev_iter) == [1.0] assert non_iter_sim.simulate_sweep(circuit, params) == [dummy_trial_result] state_iter = non_iter_sim.simulate_sweep_iter(circuit, params) assert next(state_iter) == dummy_trial_result
def _create_simulator_trial_result( self, params: study.ParamResolver, measurements: Dict[str, np.ndarray], final_step_result: TStepResult, ) -> 'SimulationTrialResult': """This method creates a default trial result. Args: params: The ParamResolver for this trial. measurements: The measurement results for this trial. final_step_result: The final step result of the simulation. Returns: The SimulationTrialResult. """ return SimulationTrialResult(params=params, measurements=measurements, final_step_result=final_step_result)
def test_trial_result_initializer(): with pytest.raises(ValueError, match='Exactly one of'): _ = SimulationTrialResult(cirq.ParamResolver(), {}, None, None) with pytest.raises(ValueError, match='Exactly one of'): _ = SimulationTrialResult(cirq.ParamResolver(), {}, object(), mock.Mock(TStepResult))