Exemple #1
0
def test_run_batch():
    program = ParentProgram(
        [
            cirq.Circuit(
                cirq.X(Q)**sympy.Symbol('t'), cirq.measure(Q, key='m')),
            cirq.Circuit(
                cirq.X(Q)**sympy.Symbol('x'), cirq.measure(Q, key='m2')),
        ],
        None,
    )
    job = SimulatedLocalJob(
        job_id='test_job',
        processor_id='test1',
        parent_program=program,
        repetitions=100,
        sweeps=[
            cirq.Points(key='t', points=[1, 0]),
            cirq.Points(key='x', points=[0, 1])
        ],
    )
    assert job.execution_status() == quantum.enums.ExecutionStatus.State.READY
    results = job.batched_results()
    assert np.all(results[0][0].measurements['m'] == 1)
    assert np.all(results[0][1].measurements['m'] == 0)
    assert np.all(results[1][0].measurements['m2'] == 0)
    assert np.all(results[1][1].measurements['m2'] == 1)
    assert job.execution_status(
    ) == quantum.enums.ExecutionStatus.State.SUCCESS
Exemple #2
0
def test_cancel():
    program = ParentProgram(
        [cirq.Circuit(cirq.X(Q), cirq.measure(Q, key='m'))], None)
    job = SimulatedLocalJob(job_id='test_job',
                            processor_id='test1',
                            parent_program=program,
                            repetitions=100,
                            sweeps=[])
    job.cancel()
    assert job.execution_status() == quantum.ExecutionStatus.State.CANCELLED
Exemple #3
0
def test_run_calibration_unsupported():
    program = ParentProgram([cirq.Circuit()], None)
    job = SimulatedLocalJob(
        job_id='test_job',
        processor_id='test1',
        parent_program=program,
        repetitions=100,
        sweeps=[{}],
    )
    with pytest.raises(NotImplementedError):
        _ = job.calibration_results()
Exemple #4
0
 def run_sweep(
     self,
     program: cirq.AbstractCircuit,
     program_id: Optional[str] = None,
     job_id: Optional[str] = None,
     params: cirq.Sweepable = None,
     repetitions: int = 1,
     program_description: Optional[str] = None,
     program_labels: Optional[Dict[str, str]] = None,
     job_description: Optional[str] = None,
     job_labels: Optional[Dict[str, str]] = None,
 ) -> SimulatedLocalJob:
     if program_id is None:
         program_id = self._create_id(id_type='program')
     if job_id is None:
         job_id = self._create_id(id_type='job')
     self._program_validator([program], [params], repetitions, CIRCUIT_SERIALIZER)
     self._programs[program_id] = SimulatedLocalProgram(
         program_id=program_id,
         simulation_type=self._simulation_type,
         circuits=[program],
         processor=self,
         engine=self.engine(),
     )
     job = SimulatedLocalJob(
         job_id=job_id,
         processor_id=self.processor_id,
         parent_program=self._programs[program_id],
         repetitions=repetitions,
         sweeps=[params],
         sampler=self._sampler,
         simulation_type=self._simulation_type,
     )
     self._programs[program_id].add_job(job_id, job)
     return job
Exemple #5
0
 def run_batch(
     self,
     programs: Sequence[cirq.AbstractCircuit],
     program_id: Optional[str] = None,
     job_id: Optional[str] = None,
     params_list: Sequence[cirq.Sweepable] = None,
     repetitions: int = 1,
     program_description: Optional[str] = None,
     program_labels: Optional[Dict[str, str]] = None,
     job_description: Optional[str] = None,
     job_labels: Optional[Dict[str, str]] = None,
 ) -> SimulatedLocalJob:
     if program_id is None:
         program_id = self._create_id(id_type='program')
     if job_id is None:
         job_id = self._create_id(id_type='job')
     self._program_validator(programs, params_list or [{}], repetitions, CIRCUIT_SERIALIZER)
     self._programs[program_id] = SimulatedLocalProgram(
         program_id=program_id,
         simulation_type=self._simulation_type,
         circuits=programs,
         engine=self.engine(),
         processor=self,
     )
     job = SimulatedLocalJob(
         job_id=job_id,
         processor_id=self.processor_id,
         parent_program=self._programs[program_id],
         repetitions=repetitions,
         sweeps=list(params_list) if params_list is not None else None,
         sampler=self._sampler,
         simulation_type=self._simulation_type,
     )
     self._programs[program_id].add_job(job_id, job)
     return job
Exemple #6
0
def test_run_async():
    qubits = cirq.LineQubit.range(20)
    c = cirq.testing.random_circuit(qubits, n_moments=20, op_density=1.0)
    c.append(cirq.measure(*qubits))
    program = ParentProgram([c], None)
    job = SimulatedLocalJob(
        job_id='test_job',
        processor_id='test1',
        parent_program=program,
        repetitions=100,
        sweeps=[{}],
        simulation_type=LocalSimulationType.ASYNCHRONOUS,
    )
    assert job.execution_status() == quantum.ExecutionStatus.State.RUNNING
    _ = job.results()
    assert job.execution_status() == quantum.ExecutionStatus.State.SUCCESS
Exemple #7
0
def test_delete():
    program = SimulatedLocalProgram([cirq.Circuit()], None, program_id='program')
    job1 = SimulatedLocalJob(
        job_id='test_job1', processor_id='test1', parent_program=program, repetitions=100, sweeps=[]
    )
    job2 = SimulatedLocalJob(
        job_id='test_job2', processor_id='test1', parent_program=program, repetitions=100, sweeps=[]
    )
    job3 = SimulatedLocalJob(
        job_id='test_job3', processor_id='test1', parent_program=program, repetitions=100, sweeps=[]
    )
    program.add_job(job1.id(), job1)
    program.add_job(job2.id(), job2)
    program.add_job(job3.id(), job3)
    assert set(program.list_jobs()) == {job1, job2, job3}
    program.delete_job(job2.id())
    assert set(program.list_jobs()) == {job1, job3}
    program.delete(delete_jobs=True)
    assert program.list_jobs() == []
Exemple #8
0
def test_run_batch(simulation_type):
    program = ParentProgram(
        [
            cirq.Circuit(
                cirq.X(Q)**sympy.Symbol('t'), cirq.measure(Q, key='m')),
            cirq.Circuit(
                cirq.X(Q)**sympy.Symbol('x'), cirq.measure(Q, key='m2')),
        ],
        None,
    )
    job = SimulatedLocalJob(
        job_id='test_job',
        processor_id='test1',
        parent_program=program,
        simulation_type=simulation_type,
        repetitions=100,
        sweeps=[
            cirq.Points(key='t', points=[1, 0]),
            cirq.Points(key='x', points=[0, 1])
        ],
    )
    if simulation_type == LocalSimulationType.ASYNCHRONOUS:
        # Note: The simulation could have finished already
        assert (job.execution_status() == quantum.ExecutionStatus.State.RUNNING
                or job.execution_status()
                == quantum.ExecutionStatus.State.SUCCESS)
    else:
        assert job.execution_status() == quantum.ExecutionStatus.State.READY
    results = job.batched_results()
    assert np.all(results[0][0].measurements['m'] == 1)
    assert np.all(results[0][1].measurements['m'] == 0)
    assert np.all(results[1][0].measurements['m2'] == 0)
    assert np.all(results[1][1].measurements['m2'] == 1)
    assert job.execution_status() == quantum.ExecutionStatus.State.SUCCESS
    # Using flattened results
    results = job.results()
    assert np.all(results[0].measurements['m'] == 1)
    assert np.all(results[1].measurements['m'] == 0)
    assert np.all(results[2].measurements['m2'] == 0)
    assert np.all(results[3].measurements['m2'] == 1)

    for result in results:
        assert result.job_id == 'test_job'
        assert result.job_finished_time is not None
    assert results == cirq.read_json(json_text=cirq.to_json(results))
Exemple #9
0
def test_run():
    program = ParentProgram(
        [cirq.Circuit(cirq.X(Q), cirq.measure(Q, key='m'))], None)
    job = SimulatedLocalJob(job_id='test_job',
                            processor_id='test1',
                            parent_program=program,
                            repetitions=100,
                            sweeps=[])
    assert job.id() == 'test_job'
    assert job.execution_status() == quantum.enums.ExecutionStatus.State.READY
    results = job.results()
    assert np.all(results[0].measurements['m'] == 1)
    assert job.execution_status(
    ) == quantum.enums.ExecutionStatus.State.SUCCESS
Exemple #10
0
def test_unsupported_types():
    program = ParentProgram(
        [cirq.Circuit(cirq.X(Q), cirq.measure(Q, key='m'))], None)
    job = SimulatedLocalJob(
        job_id='test_job',
        processor_id='test1',
        parent_program=program,
        repetitions=100,
        sweeps=[],
        simulation_type=LocalSimulationType.ASYNCHRONOUS,
    )
    with pytest.raises(ValueError, match='Unsupported simulation type'):
        job.results()
    with pytest.raises(ValueError, match='Unsupported simulation type'):
        job.batched_results()
Exemple #11
0
def test_failure():
    program = ParentProgram(
        [cirq.Circuit(cirq.X(Q)**sympy.Symbol('t'), cirq.measure(Q, key='m'))],
        None)
    job = SimulatedLocalJob(
        job_id='test_job',
        processor_id='test1',
        parent_program=program,
        repetitions=100,
        sweeps=[cirq.Points(key='x', points=[1, 0])],
    )
    try:
        _ = job.results()
    except ValueError:
        code, message = job.failure()
        assert code == '500'
        assert 'Circuit contains ops whose symbols were not specified' in message

    try:
        _ = job.batched_results()
    except ValueError:
        code, message = job.failure()
        assert code == '500'
        assert 'Circuit contains ops whose symbols were not specified' in message