Esempio n. 1
0
def test_intermediate_sweeps():
    simulator = cirq.SimulatesIntermediateState()

    final_state = np.array([1, 0, 0, 0])

    def steps(*args, **kwargs):
        result = mock.Mock()
        result.measurements = {'a': np.array([True, True])}
        result.simulator_state.return_value = final_state
        yield result

    simulator._simulator_iterator.side_effect = steps
    circuit = mock.Mock(cirq.Circuit)
    param_resolvers = [
        mock.Mock(cirq.ParamResolver),
        mock.Mock(cirq.ParamResolver)
    ]
    qubit_order = mock.Mock(cirq.QubitOrder)
    results = simulator.simulate_sweep(program=circuit,
                                       params=param_resolvers,
                                       qubit_order=qubit_order,
                                       initial_state=2)
    expected_results = [
        cirq.SimulationTrialResult(measurements={'a': np.array([True, True])},
                                   params=param_resolvers[0],
                                   final_simulator_state=final_state),
        cirq.SimulationTrialResult(measurements={'a': np.array([True, True])},
                                   params=param_resolvers[1],
                                   final_simulator_state=final_state)
    ]
    assert results == expected_results
Esempio n. 2
0
def test_intermediate_simulator():
    simulator = cirq.SimulatesIntermediateState()

    final_simulator_state = np.array([1, 0, 0, 0])

    def steps(*args, **kwargs):
        result = mock.Mock()
        result.measurements = {'a': [True, True]}
        yield result
        result = mock.Mock()
        result.measurements = {'b': [True, False]}
        result.simulator_state.return_value = final_simulator_state
        yield result

    simulator._simulator_iterator.side_effect = steps
    circuit = mock.Mock(cirq.Circuit)
    param_resolver = mock.Mock(cirq.ParamResolver)
    qubit_order = mock.Mock(cirq.QubitOrder)
    result = simulator.simulate(program=circuit,
                                param_resolver=param_resolver,
                                qubit_order=qubit_order,
                                initial_state=2)
    np.testing.assert_equal(result.measurements['a'], [True, True])
    np.testing.assert_equal(result.measurements['b'], [True, False])
    assert set(result.measurements.keys()) == {'a', 'b'}
    assert result.params == param_resolver
    np.testing.assert_equal(result.final_simulator_state,
                            final_simulator_state)
Esempio n. 3
0
 def steps(*args, **kwargs):
     result = mock.Mock()
     result.measurements = {'a': [True, True]}
     yield result
     result = mock.Mock()
     result.measurements = {'b': [True, False]}
     result.simulator_state.return_value = final_simulator_state
     yield result
Esempio n. 4
0
def test_run_simulator_run():
    simulator = cirq.SimulatesSamples()
    expected_measurements = {'a': np.array([[1]])}
    simulator._run.return_value = expected_measurements
    circuit = mock.Mock(cirq.Circuit)
    param_resolver = mock.Mock(cirq.ParamResolver)
    expected_result = cirq.TrialResult(repetitions=10,
                                       measurements=expected_measurements,
                                       params=param_resolver)
    assert expected_result == simulator.run(program=circuit,
                                            repetitions=10,
                                            param_resolver=param_resolver)
    simulator._run.assert_called_once_with(circuit=circuit,
                                           repetitions=10,
                                           param_resolver=param_resolver)
Esempio n. 5
0
def test_circuit_device_validation_passes_non_xmon_gate(build):
    service = mock.Mock()
    build.return_value = service
    programs = service.projects().programs()
    jobs = programs.jobs()
    programs.create().execute.return_value = {
        'name': 'projects/project-id/programs/test'
    }
    jobs.create().execute.return_value = {
        'name': 'projects/project-id/programs/test/jobs/test',
        'executionStatus': {
            'state': 'READY'
        }
    }
    jobs.get().execute.return_value = {
        'name': 'projects/project-id/programs/test/jobs/test',
        'executionStatus': {
            'state': 'SUCCESS'
        }
    }
    jobs.getResult().execute.return_value = {'result': _A_RESULT}

    circuit = cirq.Circuit.from_ops(cirq.H.on(cirq.GridQubit(0, 1)),
                                    device=cg.Foxtail)
    result = cg.Engine(api_key="key").run(
        program=circuit, job_config=cg.JobConfig('project-id'))
    assert result.repetitions == 1
Esempio n. 6
0
def test_run_circuit_failed(build):
    service = mock.Mock()
    build.return_value = service
    programs = service.projects().programs()
    jobs = programs.jobs()
    programs.create().execute.return_value = {
        'name': 'projects/project-id/programs/test'
    }
    jobs.create().execute.return_value = {
        'name': 'projects/project-id/programs/test/jobs/test',
        'executionStatus': {
            'state': 'READY'
        }
    }
    jobs.get().execute.return_value = {
        'name': 'projects/project-id/programs/test/jobs/test',
        'executionStatus': {
            'state': 'FAILURE'
        }
    }

    with pytest.raises(RuntimeError, match='It is in state FAILURE'):
        cg.Engine(api_key="key").run(program=cirq.Circuit(),
                                     job_config=cg.JobConfig(
                                         'project-id',
                                         gcs_prefix='gs://bucket/folder'))
Esempio n. 7
0
def test_default_prefix(build):
    service = mock.Mock()
    build.return_value = service
    programs = service.projects().programs()
    jobs = programs.jobs()
    programs.create().execute.return_value = {
        'name': 'projects/project-id/programs/test'
    }
    jobs.create().execute.return_value = {
        'name': 'projects/project-id/programs/test/jobs/test',
        'executionStatus': {
            'state': 'READY'
        }
    }
    jobs.get().execute.return_value = {
        'name': 'projects/project-id/programs/test/jobs/test',
        'executionStatus': {
            'state': 'SUCCESS'
        }
    }
    jobs.getResult().execute.return_value = {'result': _A_RESULT}

    result = cg.Engine(api_key="key").run(
        program=cirq.Circuit(), job_config=cg.JobConfig('org.com:project-id'))
    assert result.repetitions == 1
    assert result.params.param_dict == {'a': 1}
    assert result.measurements == {'q': np.array([[0]], dtype='uint8')}
    build.assert_called_with(
        'quantum',
        'v1alpha1',
        discoveryServiceUrl=('https://{api}.googleapis.com'
                             '/$discovery/rest?version='
                             '{apiVersion}&key=key'))
    assert programs.create.call_args[1]['body']['gcs_code_location'][
        'uri'].startswith('gs://gqe-project-id/programs/')
Esempio n. 8
0
def test_cancel(build):
    service = mock.Mock()
    build.return_value = service
    programs = service.projects().programs()
    jobs = programs.jobs()
    programs.create().execute.return_value = {
        'name': 'projects/project-id/programs/test'
    }
    jobs.create().execute.return_value = {
        'name': 'projects/project-id/programs/test/jobs/test',
        'executionStatus': {
            'state': 'READY'
        }
    }
    jobs.get().execute.return_value = {
        'name': 'projects/project-id/programs/test/jobs/test',
        'executionStatus': {
            'state': 'CANCELLED'
        }
    }

    job = cg.Engine(api_key="key").run_sweep(
        program=cirq.Circuit(),
        job_config=cg.JobConfig('project-id', gcs_prefix='gs://bucket/folder'))
    job.cancel()
    assert job.job_resource_name == ('projects/project-id/programs/test/'
                                     'jobs/test')
    assert job.status() == 'CANCELLED'
    assert jobs.cancel.call_args[1][
        'name'] == 'projects/project-id/programs/test/jobs/test'
Esempio n. 9
0
def test_anneal_minimize_calls_trace_func():
    trace_func = mock.Mock()

    anneal.anneal_minimize(
        'initial', lambda s: 1.0 if s == 'initial' else 0.0,
        lambda s: 'better', lambda: 1.0, 1.0, 0.5, 0.5, 1,
        trace_func=trace_func)

    trace_func.assert_has_calls([mock.call('initial', 1.0, 1.0, 1.0, True),
                                 mock.call('better', 1.0, 0.0, 1.0, True)])
Esempio n. 10
0
def test_run_sweep_params(build):
    service = mock.Mock()
    build.return_value = service
    programs = service.projects().programs()
    jobs = programs.jobs()
    programs.create().execute.return_value = {
        'name': 'projects/project-id/programs/test'
    }
    jobs.create().execute.return_value = {
        'name': 'projects/project-id/programs/test/jobs/test',
        'executionStatus': {
            'state': 'READY'
        }
    }
    jobs.get().execute.return_value = {
        'name': 'projects/project-id/programs/test/jobs/test',
        'executionStatus': {
            'state': 'SUCCESS'
        }
    }
    jobs.getResult().execute.return_value = {'result': _RESULTS}

    job = cg.Engine(api_key="key").run_sweep(
        program=cirq.moment_by_moment_schedule(cirq.UnconstrainedDevice,
                                               cirq.Circuit()),
        job_config=cg.JobConfig('project-id', gcs_prefix='gs://bucket/folder'),
        params=[cirq.ParamResolver({'a': 1}),
                cirq.ParamResolver({'a': 2})])
    results = job.results()
    assert len(results) == 2
    for i, v in enumerate([1, 2]):
        assert results[i].repetitions == 1
        assert results[i].params.param_dict == {'a': v}
        assert results[i].measurements == {'q': np.array([[0]], dtype='uint8')}
    build.assert_called_with(
        'quantum',
        'v1alpha1',
        discoveryServiceUrl=('https://{api}.googleapis.com'
                             '/$discovery/rest?version='
                             '{apiVersion}&key=key'))
    assert programs.create.call_args[1]['parent'] == 'projects/project-id'
    sweeps = programs.create.call_args[1]['body']['code']['parameter_sweeps']
    assert len(sweeps) == 2
    for i, v in enumerate([1, 2]):
        assert sweeps[i]['repetitions'] == 1
        assert sweeps[i]['sweep']['factors'][0]['sweeps'][0]['points'][
            'points'] == [v]
    assert jobs.create.call_args[1][
        'parent'] == 'projects/project-id/programs/test'
    assert jobs.get().execute.call_count == 1
    assert jobs.getResult().execute.call_count == 1
Esempio n. 11
0
def test_search_converts_trace_func(anneal_minimize):
    q00 = GridQubit(0, 0)
    q01 = GridQubit(0, 1)
    seqs = [[q00, q01]]
    edges = {(q00, q01)}
    anneal_minimize.return_value = seqs, edges
    trace_func = mock.Mock()

    assert AnnealSequenceSearch(_create_device(
        []), seed=0xF00D0002).search(trace_func=trace_func) == seqs
    wrapper_func = anneal_minimize.call_args[1]['trace_func']

    wrapper_func((seqs, edges), 1.0, 2.0, 3.0, True)
    trace_func.assert_called_once_with(seqs, 1.0, 2.0, 3.0, True)
Esempio n. 12
0
def test_run_simulator_sweeps():
    simulator = cirq.SimulatesSamples()
    expected_measurements = {'a': np.array([[1]])}
    simulator._run.return_value = expected_measurements
    circuit = mock.Mock(cirq.Circuit)
    param_resolvers = [
        mock.Mock(cirq.ParamResolver),
        mock.Mock(cirq.ParamResolver)
    ]
    expected_results = [
        cirq.TrialResult(repetitions=10,
                         measurements=expected_measurements,
                         params=param_resolvers[0]),
        cirq.TrialResult(repetitions=10,
                         measurements=expected_measurements,
                         params=param_resolvers[1])
    ]
    assert expected_results == simulator.run_sweep(program=circuit,
                                                   repetitions=10,
                                                   params=param_resolvers)
    simulator._run.assert_called_with(circuit=circuit,
                                      repetitions=10,
                                      param_resolver=mock.ANY)
    assert simulator._run.call_count == 2
Esempio n. 13
0
def test_wave_simulator_no_steps():
    simulator = cirq.SimulatesIntermediateWaveFunction()

    initial_state = np.array([1, 0, 0, 0], dtype=np.complex64)

    simulator._simulator_iterator.return_value = iter([])
    circuit = cirq.testing.random_circuit(2, 20, 0.99)
    param_resolver = mock.Mock(cirq.ParamResolver)
    qubit_order = circuit.all_qubits()
    result = simulator.simulate(circuit=circuit,
                                param_resolver=param_resolver,
                                qubit_order=list(qubit_order),
                                initial_state=initial_state)
    assert len(result.measurements) == 0
    assert result.params == param_resolver
    np.testing.assert_equal(result.final_state, initial_state)
Esempio n. 14
0
def test_run_circuit(build):
    service = mock.Mock()
    build.return_value = service
    programs = service.projects().programs()
    jobs = programs.jobs()
    programs.create().execute.return_value = {
        'name': 'projects/project-id/programs/test'
    }
    jobs.create().execute.return_value = {
        'name': 'projects/project-id/programs/test/jobs/test',
        'executionStatus': {
            'state': 'READY'
        }
    }
    jobs.get().execute.return_value = {
        'name': 'projects/project-id/programs/test/jobs/test',
        'executionStatus': {
            'state': 'SUCCESS'
        }
    }
    jobs.getResult().execute.return_value = {
        'result': MessageToDict(_A_RESULT)
    }

    result = cg.Engine(api_key="key").run(program=cirq.Circuit(),
                                          job_config=cg.JobConfig(
                                              'project-id',
                                              gcs_prefix='gs://bucket/folder'))
    assert result.repetitions == 1
    assert result.params.param_dict == {'a': 1}
    assert result.measurements == {'q': np.array([[0]], dtype='uint8')}
    build.assert_called_with(
        'quantum',
        'v1alpha1',
        discoveryServiceUrl=('https://{api}.googleapis.com'
                             '/$discovery/rest?version='
                             '{apiVersion}&key=key'))
    assert programs.create.call_args[1]['parent'] == 'projects/project-id'
    assert jobs.create.call_args[1][
        'parent'] == 'projects/project-id/programs/test'
    assert jobs.get().execute.call_count == 1
    assert jobs.getResult().execute.call_count == 1
Esempio n. 15
0
def test_job_labels(build):
    job_name = 'projects/my-proj/programs/my-prog/jobs/my-job'
    service = mock.Mock()
    build.return_value = service
    jobs = service.projects().programs().jobs()
    engine = cg.Engine(api_key="key")

    def body():
        return jobs.patch.call_args[1]['body']

    jobs.get().execute.return_value = {'labels': {'a': '1', 'b': '1'}}
    engine.add_job_labels(job_name, {'a': '2', 'c': '1'})

    assert body()['labels'] == {'a': '2', 'b': '1', 'c': '1'}
    assert body()['labelFingerprint'] == ''

    jobs.get().execute.return_value = {
        'labels': {
            'a': '1',
            'b': '1'
        },
        'labelFingerprint': 'abcdef'
    }
    engine.set_job_labels(job_name, {'s': '1', 'p': '1'})
    assert body()['labels'] == {'s': '1', 'p': '1'}
    assert body()['labelFingerprint'] == 'abcdef'

    jobs.get().execute.return_value = {
        'labels': {
            'a': '1',
            'b': '1'
        },
        'labelFingerprint': 'abcdef'
    }
    engine.remove_job_labels(job_name, ['a', 'c'])
    assert body()['labels'] == {'b': '1'}
    assert body()['labelFingerprint'] == 'abcdef'
Esempio n. 16
0
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Tests for simulator.py"""

from typing import List, Dict

import numpy as np
import pytest

import cirq
from cirq.testing.mock import mock


@mock.patch.multiple(cirq.SimulatesSamples, _run=mock.Mock())
def test_run_simulator_run():
    simulator = cirq.SimulatesSamples()
    expected_measurements = {'a': [[1]]}
    simulator._run.return_value = expected_measurements
    circuit = mock.Mock(cirq.Circuit)
    param_resolver = mock.Mock(cirq.ParamResolver)
    expected_result = cirq.TrialResult(repetitions=10,
                                       measurements=expected_measurements,
                                       params=param_resolver)
    assert expected_result == simulator.run(circuit=circuit,
                                            repetitions=10,
                                            param_resolver=param_resolver)
    simulator._run.assert_called_once_with(circuit=circuit,
                                           repetitions=10,
                                           param_resolver=param_resolver)
Esempio n. 17
0
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Tests for simulator.py"""

import numpy as np
import pytest

import cirq
from cirq.testing.mock import mock


@mock.patch.multiple(cirq.SimulatesSamples,
                     __abstractmethods__=set(),
                     _run=mock.Mock())
def test_run_simulator_run():
    simulator = cirq.SimulatesSamples()
    expected_measurements = {'a': np.array([[1]])}
    simulator._run.return_value = expected_measurements
    circuit = mock.Mock(cirq.Circuit)
    param_resolver = mock.Mock(cirq.ParamResolver)
    expected_result = cirq.TrialResult(repetitions=10,
                                       measurements=expected_measurements,
                                       params=param_resolver)
    assert expected_result == simulator.run(program=circuit,
                                            repetitions=10,
                                            param_resolver=param_resolver)
    simulator._run.assert_called_once_with(circuit=circuit,
                                           repetitions=10,
                                           param_resolver=param_resolver)
Esempio n. 18
0
 def steps(*args, **kwargs):
     result = mock.Mock()
     result.measurements = {'a': np.array([True, True])}
     result.simulator_state.return_value = final_state
     yield result