示例#1
0
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
示例#2
0
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
示例#3
0
    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)
示例#4
0
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))