def test_empty_calibration(self): backend_name = 'test_sim_backend' backend_version = '1.2.0' qobj_id = '42' job_id = '42' success = True experiment_result = [self.experiment_result_3] qi_result = QIResult(backend_name, backend_version, qobj_id, job_id, success, experiment_result) calibration = qi_result.get_calibration() self.assertIsNone(calibration)
def _result(self, result_function: Callable[[Job], List[ExperimentResult]], timeout: Optional[float] = None, wait: float = 0.5) -> QIResult: """ Return the result for the experiments. :param result_function: backend function for fetching the requested results. :param timeout: Timeout in seconds. :param wait: Wait time between queries to the Quantum Inspire platform. :return: Result object containing results from the experiments. :raises JobTimeoutError: If timeout is reached. :raises QiskitBackendError: If an error occurs during simulation. """ start_time = time.time() while self.status() not in JOB_FINAL_STATES: elapsed_time = time.time() - start_time if timeout is not None and elapsed_time > timeout: raise JobTimeoutError('Failed getting result: timeout reached.') time.sleep(wait) experiment_results = result_function(self) total_time_taken = sum(getattr(experiment_result, "time_taken", 0.0) for experiment_result in experiment_results) return QIResult(backend_name=self._backend.backend_name, backend_version=quantum_inspire_version, job_id=self.job_id(), qobj_id=self.job_id(), success=True, results=experiment_results, status=self.status(), time_taken=total_time_taken)
def test_no_probabilities(self): backend_name = 'test_backend' backend_version = '1.2.0' qobj_id = '42' job_id = '42' success = True experiment_result = [self.experiment_result_3] qi_result = QIResult(backend_name, backend_version, qobj_id, job_id, success, experiment_result) self.assertRaisesRegex(QisKitBackendError, 'No probabilities for experiment "0"', qi_result.get_probabilities, 0)
def test_no_calibration_data(self): backend_name = 'test_backend' backend_version = '1.2.0' qobj_id = '42' job_id = '42' success = True experiment_result = [self.experiment_result_4] qi_result = QIResult(backend_name, backend_version, qobj_id, job_id, success, experiment_result) self.assertRaisesRegex(QiskitBackendError, 'No calibration data for experiment "0"', qi_result.get_calibration, 0)
def test_constructor(self): backend_name = 'test_backend' backend_version = '1.2.0' qobj_id = '42' job_id = '42' success = True date = '07-07-2020' experiment_result = self.experiment_result_1 qi_result = QIResult(backend_name, backend_version, qobj_id, job_id, success, [experiment_result], date) self.assertEqual(date, qi_result.date) self.assertEqual(job_id, qi_result.job_id) self.assertIsNotNone(qi_result.results) self.assertListEqual(['Test1'], [r.name for r in qi_result.results])
def result(self, timeout: Optional[float] = None, wait: float = 0.5) -> QIResult: """ Args: timeout: Timeout in seconds. wait: Wait time between queries to the quantum-inspire platform. Returns: QIResult object containing results from the experiments. Raises: JobTimeoutError: If timeout is reached. QisKitBackendError: If an error occurs during simulation. """ start_time = time.time() while self.status() not in JOB_FINAL_STATES: elapsed_time = time.time() - start_time if timeout is not None and elapsed_time > timeout: raise JobTimeoutError('Failed getting result: timeout reached.') time.sleep(wait) experiment_results = self._backend.get_experiment_results(self) return QIResult(backend_name=self._backend.backend_name, backend_version=quantum_inspire_version, job_id=self.job_id(), qobj_id=self.job_id(), success=True, results=experiment_results)
def test_more_results(self): backend_name = 'test_backend' backend_version = '1.2.0' qobj_id = '42' job_id = '42' success = True experiment_result = [ self.experiment_result_1, self.experiment_result_2 ] qi_result = QIResult(backend_name, backend_version, qobj_id, job_id, success, experiment_result) probabilities = qi_result.get_probabilities('Test1') self.assertDictEqual(probabilities, {'00': 0.42, '11': 0.58}) probabilities = qi_result.get_probabilities('Test2') self.assertDictEqual(probabilities, { '000': 0.24, '001': 0.25, '010': 0.23, '011': 0.28 }) probabilities = qi_result.get_probabilities(1) self.assertDictEqual(probabilities, { '000': 0.24, '001': 0.25, '010': 0.23, '011': 0.28 }) probabilities = qi_result.get_probabilities() self.assertListEqual(probabilities, [{ '00': 0.42, '11': 0.58 }, { '000': 0.24, '001': 0.25, '010': 0.23, '011': 0.28 }])
def test_more_results(self): backend_name = 'test_backend' backend_version = '1.2.0' qobj_id = '42' job_id = '42' success = True experiment_result = [ self.experiment_result_1, self.experiment_result_2 ] qi_result = QIResult(backend_name, backend_version, qobj_id, job_id, success, experiment_result) probabilities = qi_result.get_probabilities('Test1') self.assertDictEqual(probabilities, {'00': 0.42, '11': 0.58}) probabilities = qi_result.get_probabilities('Test2') self.assertDictEqual(probabilities, { '000': 0.24, '001': 0.25, '010': 0.23, '011': 0.28 }) probabilities = qi_result.get_probabilities(1) self.assertDictEqual(probabilities, { '000': 0.24, '001': 0.25, '010': 0.23, '011': 0.28 }) probabilities = qi_result.get_probabilities() self.assertListEqual(probabilities, [{ '00': 0.42, '11': 0.58 }, { '000': 0.24, '001': 0.25, '010': 0.23, '011': 0.28 }]) calibration = qi_result.get_calibration('Test1') self.assertDictEqual(calibration, { 'fridge_temperature': 26.9, 'unit': 'mK' }) calibration = qi_result.get_calibration('Test2') self.assertDictEqual(calibration, { 'fridge_temperature': 25.0, 'unit': 'mK' }) calibration = qi_result.get_calibration(1) self.assertDictEqual(calibration, { 'fridge_temperature': 25.0, 'unit': 'mK' }) calibration = qi_result.get_calibration() self.assertListEqual(calibration, [{ 'fridge_temperature': 26.9, 'unit': 'mK' }, { 'fridge_temperature': 25.0, 'unit': 'mK' }])