def test_copy_metadata_pending_job(self): """Test copy metadata with a pending job.""" event = threading.Event() self.addCleanup(event.set) job_results1 = self._get_job_result(1) job_results2 = self._get_job_result(1) def _job1_result(): event.wait(timeout=15) return job_results1 def _job2_result(): event.wait(timeout=15) return job_results2 exp_data = DbExperimentData(experiment_type="qiskit_test") job = mock.create_autospec(Job, instance=True) job.result = _job1_result exp_data.add_jobs(job) copied = exp_data.copy(copy_results=False) job2 = mock.create_autospec(Job, instance=True) job2.result = _job2_result copied.add_jobs(job2) event.set() exp_data.block_for_results() copied.block_for_results() self.assertEqual(1, len(exp_data.data())) self.assertEqual(2, len(copied.data())) self.assertIn( exp_data.data(0)["counts"], [copied.data(0)["counts"], copied.data(1)["counts"]] )
def test_add_data_result_metadata(self): """Test add result metadata.""" exp_data = DbExperimentData(backend=self.backend, experiment_type="qiskit_test") result1 = self._get_job_result(1, has_metadata=False) result2 = self._get_job_result(1, has_metadata=True) exp_data.add_data(result1) exp_data.add_data(result2) self.assertNotIn("metadata", exp_data.data(0)) self.assertIn("metadata", exp_data.data(1))
def test_get_data(self): """Test getting data.""" data1 = [] for _ in range(5): data1.append({"counts": {"00": randrange(1024)}}) results = self._get_job_result(3) exp_data = DbExperimentData(experiment_type="qiskit_test") exp_data.add_data(data1) exp_data.add_data(results) self.assertEqual(data1[1], exp_data.data(1)) self.assertEqual(data1[2:4], exp_data.data(slice(2, 4))) self.assertEqual( results.get_counts(), [sdata["counts"] for sdata in exp_data.data(results.job_id)] )
def test_copy_metadata(self): """Test copy metadata.""" exp_data = DbExperimentData(experiment_type="qiskit_test") exp_data.add_data(self._get_job_result(1)) result = mock.MagicMock() exp_data.add_analysis_results(result) copied = exp_data.copy(copy_results=False) self.assertEqual(exp_data.data(), copied.data()) self.assertFalse(copied.analysis_results())
def test_add_data_dict(self): """Test add data in dictionary.""" exp_data = DbExperimentData(backend=self.backend, experiment_type="qiskit_test") a_dict = {"counts": {"01": 518}} dicts = [{"counts": {"00": 284}}, {"counts": {"00": 14}}] exp_data.add_data(a_dict) exp_data.add_data(dicts) self.assertEqual([a_dict] + dicts, exp_data.data())
def test_add_data_result(self): """Test add result data.""" exp_data = DbExperimentData(backend=self.backend, experiment_type="qiskit_test") a_result = self._get_job_result(1) results = [self._get_job_result(2), self._get_job_result(3)] expected = [a_result.get_counts()] for res in results: expected.extend(res.get_counts()) exp_data.add_data(a_result) exp_data.add_data(results) self.assertEqual(expected, [sdata["counts"] for sdata in exp_data.data()]) self.assertIn(a_result.job_id, exp_data.job_ids)
def test_add_data_job(self): """Test add job to experiment data.""" exp_data = DbExperimentData(backend=self.backend, experiment_type="qiskit_test") transpiled = transpile(ReferenceCircuits.bell(), self.backend) transpiled.metadata = {"foo": "bar"} job = self._run_circuit(transpiled) exp_data.add_jobs(job) self.assertEqual([job.job_id()], exp_data.job_ids) result = job.result() exp_data.block_for_results() circuit_data = exp_data.data(0) self.assertEqual(result.get_counts(0), circuit_data["counts"]) self.assertEqual(job.job_id(), circuit_data["job_id"]) self.assertEqual(transpiled.metadata, circuit_data["metadata"])
def test_add_data_job(self): """Test add job data.""" a_job = mock.create_autospec(Job, instance=True) a_job.result.return_value = self._get_job_result(3) jobs = [] for _ in range(2): job = mock.create_autospec(Job, instance=True) job.result.return_value = self._get_job_result(2) job.status.return_value = JobStatus.DONE jobs.append(job) expected = a_job.result().get_counts() for job in jobs: expected.extend(job.result().get_counts()) exp_data = DbExperimentData(backend=self.backend, experiment_type="qiskit_test") exp_data.add_jobs(a_job) self.assertExperimentDone(exp_data) exp_data.add_jobs(jobs) self.assertExperimentDone(exp_data) self.assertEqual(expected, [sdata["counts"] for sdata in exp_data.data()]) self.assertIn(a_job.job_id(), exp_data.job_ids)