def test_save_all(self): """Test saving all.""" exp_data = self._create_experiment_data() exp_data.tags = ["foo", "bar"] aresult = AnalysisResult( value={}, name="qiskit_test", device_components=self.device_components, experiment_id=exp_data.experiment_id, ) exp_data.add_analysis_results(aresult) hello_bytes = str.encode("hello world") exp_data.add_figures(hello_bytes, figure_names="hello.svg") exp_data.save() rexp = DbExperimentData.load(exp_data.experiment_id, self.experiment) self.assertEqual(["foo", "bar"], rexp.tags) self.assertEqual(aresult.result_id, rexp.analysis_results(0).result_id) self.assertEqual(hello_bytes, rexp.figure(0)) exp_data.delete_analysis_result(0) exp_data.delete_figure(0) with mock.patch("builtins.input", lambda _: "y"): exp_data.save() rexp = DbExperimentData.load(exp_data.experiment_id, self.experiment) self.assertRaises(IBMExperimentEntryNotFound, rexp.figure, "hello.svg") self.assertRaises(DbExperimentEntryNotFound, rexp.analysis_results, aresult.result_id)
def test_new_experiment_data(self): """Test creating a new experiment data.""" metadata = {"complex": 2 + 3j, "numpy": np.zeros(2)} exp_data = DbExperimentData( backend=self.backend, experiment_type="qiskit_test", tags=["foo", "bar"], share_level="hub", metadata=metadata, notes="some notes", ) job_ids = [] for _ in range(2): job = self._run_circuit() exp_data.add_jobs(job) job_ids.append(job.job_id()) exp_data.save() self.experiments_to_delete.append(exp_data.experiment_id) credentials = self.backend.provider().credentials rexp = DbExperimentData.load(exp_data.experiment_id, self.experiment) self._verify_experiment_data(exp_data, rexp) self.assertEqual(credentials.hub, rexp.hub) # pylint: disable=no-member self.assertEqual(credentials.group, rexp.group) # pylint: disable=no-member self.assertEqual(credentials.project, rexp.project) # pylint: disable=no-member
def load(cls, experiment_id: str, service: DatabaseService) -> ExperimentData: expdata = DbExperimentData.load(experiment_id, service) expdata.__class__ = ExperimentData expdata._experiment = None child_data_ids = expdata.metadata.pop("child_data_ids", []) child_data = [ExperimentData.load(child_id, service) for child_id in child_data_ids] expdata._set_child_data(child_data) return expdata
def test_delete_analysis_result(self): """Test deleting an analysis result.""" aresult, exp_data = self._create_analysis_result() with mock.patch("builtins.input", lambda _: "y"): exp_data.delete_analysis_result(0) exp_data.save() rexp = DbExperimentData.load(exp_data.experiment_id, self.experiment) self.assertRaises(DbExperimentEntryNotFound, rexp.analysis_results, aresult.result_id) self.assertRaises(IBMExperimentEntryNotFound, self.experiment.analysis_result, aresult.result_id)
def test_add_figures_plot(self): """Test adding a matplotlib figure.""" import matplotlib.pyplot as plt figure, axes = plt.subplots() axes.plot([1, 2, 3]) exp_data = self._create_experiment_data() exp_data.add_figures(figure, save_figure=True) rexp = DbExperimentData.load(exp_data.experiment_id, self.experiment) self.assertTrue(rexp.figure(0))
def test_add_figures_file(self): """Test adding a figure file.""" exp_data = self._create_experiment_data() hello_bytes = str.encode("hello world") file_name = "hello_world.svg" self.addCleanup(os.remove, file_name) with open(file_name, "wb") as file: file.write(hello_bytes) exp_data.add_figures(figures=file_name, save_figure=True) rexp = DbExperimentData.load(exp_data.experiment_id, self.experiment) self.assertEqual(rexp.figure(0), hello_bytes)
def test_update_analysis_result(self): """Test updating an analysis result.""" aresult, exp_data = self._create_analysis_result() rdata = {"complex": 2 + 3j, "numpy": np.zeros(2)} aresult.value = rdata aresult.quality = ResultQuality.GOOD aresult.verified = True aresult.tags = ["foo", "bar"] aresult.save() rexp = DbExperimentData.load(exp_data.experiment_id, self.experiment) rresult = rexp.analysis_results(0) self._verify_analysis_result(aresult, rresult)
def test_update_experiment_data(self): """Test updating an experiment.""" exp_data = self._create_experiment_data() for _ in range(2): job = self._run_circuit() exp_data.add_jobs(job) exp_data.tags = ["foo", "bar"] exp_data.share_level = "hub" exp_data.notes = "some notes" exp_data.save() rexp = DbExperimentData.load(exp_data.experiment_id, self.experiment) self._verify_experiment_data(exp_data, rexp)
def test_add_figures(self): """Test adding a figure to the experiment data.""" exp_data = self._create_experiment_data() hello_bytes = str.encode("hello world") sub_tests = ["hello.svg", None] for idx, figure_name in enumerate(sub_tests): with self.subTest(figure_name=figure_name): exp_data.add_figures(figures=hello_bytes, figure_names=figure_name, save_figure=True) rexp = DbExperimentData.load(exp_data.experiment_id, self.experiment) self.assertEqual(rexp.figure(idx), hello_bytes)
def load(cls, experiment_id: str, service: DatabaseServiceV1) -> "ExperimentData": """Load a saved experiment data from a database service. Args: experiment_id: Experiment ID. service: the database service. Returns: The loaded experiment data. """ expdata = DbExperimentDataV1.load(experiment_id, service) expdata.__class__ = ExperimentData expdata._experiment = None return expdata
def test_delete_figure(self): """Test deleting a figure.""" exp_data = self._create_experiment_data() hello_bytes = str.encode("hello world") figure_name = "hello.svg" exp_data.add_figures(figures=hello_bytes, figure_names=figure_name, save_figure=True) with mock.patch("builtins.input", lambda _: "y"): exp_data.delete_figure(0) exp_data.save() rexp = DbExperimentData.load(exp_data.experiment_id, self.experiment) self.assertRaises(IBMExperimentEntryNotFound, rexp.figure, figure_name) self.assertRaises(IBMExperimentEntryNotFound, self.experiment.figure, exp_data.experiment_id, figure_name)
def test_update_figure(self): """Test updating a figure.""" exp_data = self._create_experiment_data() hello_bytes = str.encode("hello world") figure_name = "hello.svg" exp_data.add_figures(figures=hello_bytes, figure_names=figure_name, save_figure=True) self.assertEqual(exp_data.figure(0), hello_bytes) friend_bytes = str.encode("hello friend") exp_data.add_figures(figures=friend_bytes, figure_names=figure_name, overwrite=True, save_figure=True) rexp = DbExperimentData.load(exp_data.experiment_id, self.experiment) self.assertEqual(rexp.figure(0), friend_bytes) self.assertEqual(rexp.figure(figure_name), friend_bytes)
def load_matrix(self, experiment_id): exp_data = DbExperimentData.load( experiment_id, self.backend.provider().service("experiment")) self._load_from_exp_data(exp_data)