def test_timeout(patched_time_sleep, get_job): qjob = qtypes.QuantumJob(execution_status=qtypes.ExecutionStatus( state=qtypes.ExecutionStatus.State.RUNNING)) get_job.return_value = qjob job = cg.EngineJob('a', 'b', 'steve', EngineContext(timeout=500)) with pytest.raises(RuntimeError, match='Timed out'): job.results()
def test_calibration_results_not_a_calibration(get_job_results): qjob = qtypes.QuantumJob(execution_status=qtypes.ExecutionStatus( state=qtypes.ExecutionStatus.State.SUCCESS)) get_job_results.return_value = RESULTS job = cg.EngineJob('a', 'b', 'steve', EngineContext(), _job=qjob) with pytest.raises(ValueError, match='calibration results'): job.calibration_results()
def test_results_len(get_job_results): qjob = qtypes.QuantumJob(execution_status=qtypes.ExecutionStatus( state=qtypes.ExecutionStatus.State.SUCCESS)) get_job_results.return_value = RESULTS job = cg.EngineJob('a', 'b', 'steve', EngineContext(), _job=qjob) assert len(job) == 2
def test_get_calibration(get_calibration): qjob = qtypes.QuantumJob(execution_status=qtypes.ExecutionStatus( calibration_name='projects/a/processors/p/calibrations/123')) calibration = qtypes.QuantumCalibration(data=_to_any( Merge( """ timestamp_ms: 123000, metrics: [{ name: 'xeb', targets: ['0_0', '0_1'], values: [{ double_val: .9999 }] }, { name: 't1', targets: ['0_0'], values: [{ double_val: 321 }] }, { name: 'globalMetric', values: [{ int32_val: 12300 }] }] """, v2.metrics_pb2.MetricsSnapshot(), ))) get_calibration.return_value = calibration job = cg.EngineJob('a', 'b', 'steve', EngineContext(), _job=qjob) assert list(job.get_calibration()) == ['xeb', 't1', 'globalMetric'] get_calibration.assert_called_once_with('a', 'p', 123)
def test_status(get_job): qjob = qtypes.QuantumJob(execution_status=qtypes.ExecutionStatus( state=qtypes.ExecutionStatus.State.RUNNING)) get_job.return_value = qjob job = cg.EngineJob('a', 'b', 'steve', EngineContext()) assert job.status() == 'RUNNING' get_job.assert_called_once()
def test_results_getitem(get_job_results): qjob = qtypes.QuantumJob(execution_status=qtypes.ExecutionStatus( state=qtypes.ExecutionStatus.State.SUCCESS)) get_job_results.return_value = RESULTS job = cg.EngineJob('a', 'b', 'steve', EngineContext(), _job=qjob) assert str(job[0]) == 'q=0110' assert str(job[1]) == 'q=1010' with pytest.raises(IndexError): _ = job[2]
def test_results_iter(get_job_results): qjob = qtypes.QuantumJob(execution_status=qtypes.ExecutionStatus( state=qtypes.ExecutionStatus.State.SUCCESS)) get_job_results.return_value = RESULTS job = cg.EngineJob('a', 'b', 'steve', EngineContext(), _job=qjob) results = [str(r) for r in job] assert len(results) == 2 assert results[0] == 'q=0110' assert results[1] == 'q=1010'
def test_failure_with_no_error(): job = cg.EngineJob( 'a', 'b', 'steve', EngineContext(), _job=qtypes.QuantumJob(execution_status=qtypes.ExecutionStatus( state=qtypes.ExecutionStatus.State.SUCCESS, )), ) assert not job.failure()
def test_results(get_job_results): qjob = qtypes.QuantumJob(execution_status=qtypes.ExecutionStatus( state=qtypes.ExecutionStatus.State.SUCCESS)) get_job_results.return_value = RESULTS job = cg.EngineJob('a', 'b', 'steve', EngineContext(), _job=qjob) data = job.results() assert len(data) == 2 assert str(data[0]) == 'q=0110' assert str(data[1]) == 'q=1010' get_job_results.assert_called_once_with('a', 'b', 'steve')
def test_calibration_defaults(get_job_results): qjob = qtypes.QuantumJob(execution_status=qtypes.ExecutionStatus( state=qtypes.ExecutionStatus.State.SUCCESS)) result = v2.calibration_pb2.FocusedCalibrationResult() result.results.add() get_job_results.return_value = qtypes.QuantumResult(result=_to_any(result)) job = cg.EngineJob('a', 'b', 'steve', EngineContext(), _job=qjob) data = job.calibration_results() get_job_results.assert_called_once_with('a', 'b', 'steve') assert len(data) == 1 assert data[0].code == v2.calibration_pb2.CALIBRATION_RESULT_UNSPECIFIED assert data[0].error_message is None assert data[0].token is None assert data[0].valid_until is None assert len(data[0].metrics) == 0
def test_failure(): job = cg.EngineJob( 'a', 'b', 'steve', EngineContext(), _job=qtypes.QuantumJob(execution_status=qtypes.ExecutionStatus( state=qtypes.ExecutionStatus.State.FAILURE, failure=qtypes.ExecutionStatus.Failure( error_code=qtypes.ExecutionStatus.Failure.Code.SYSTEM_ERROR, error_message='boom', ), )), ) assert job.failure() == ('SYSTEM_ERROR', 'boom')
def test_run_delegation(create_job, get_results): create_job.return_value = ( 'steve', qtypes.QuantumJob( name='projects/a/programs/b/jobs/steve', execution_status=qtypes.ExecutionStatus( state=qtypes.ExecutionStatus.State.SUCCESS), ), ) get_results.return_value = qtypes.QuantumResult(result=_to_any( Merge( """sweep_results: [{ repetitions: 4, parameterized_results: [{ params: { assignments: { key: 'a' value: 1 } }, measurement_results: { key: 'q' qubit_measurement_results: [{ qubit: { id: '1_1' } results: '\006' }] } }] }] """, v2.result_pb2.Result(), ))) program = cg.EngineProgram('a', 'b', EngineContext()) param_resolver = cirq.ParamResolver({}) results = program.run(job_id='steve', repetitions=10, param_resolver=param_resolver, processor_ids=['mine']) assert results == cirq.Result( params=cirq.ParamResolver({'a': 1.0}), measurements={ 'q': np.array([[False], [True], [True], [False]], dtype=bool) }, )
def test_calibration_results(get_job_results): qjob = qtypes.QuantumJob(execution_status=qtypes.ExecutionStatus( state=qtypes.ExecutionStatus.State.SUCCESS)) get_job_results.return_value = CALIBRATION_RESULT job = cg.EngineJob('a', 'b', 'steve', EngineContext(), _job=qjob) data = job.calibration_results() get_job_results.assert_called_once_with('a', 'b', 'steve') assert len(data) == 1 assert data[0].code == v2.calibration_pb2.ERROR_CALIBRATION_FAILED assert data[0].error_message == 'uh oh' assert data[0].token == 'abc' assert data[0].valid_until.timestamp() == 1234567891 assert len(data[0].metrics) assert data[0].metrics['theta'] == { (cirq.GridQubit(0, 0), cirq.GridQubit(0, 1)): [0.9999] }
def test_get_processor_no_processor(): qjob = qtypes.QuantumJob(execution_status=qtypes.ExecutionStatus()) job = cg.EngineJob('a', 'b', 'steve', EngineContext(), _job=qjob) assert not job.get_processor()
def test_get_processor(): qjob = qtypes.QuantumJob(execution_status=qtypes.ExecutionStatus( processor_name='projects/a/processors/p')) job = cg.EngineJob('a', 'b', 'steve', EngineContext(), _job=qjob) assert job.get_processor().processor_id == 'p'