Skip to content

Commit

Permalink
Figure extraction from experiment data by name without extension (#1287)
Browse files Browse the repository at this point in the history
### Summary

Figure names could be referred without ".svg" at the ending.
### Details and comments

Some details that should be in this section include:
In #629 , an issue was raised where a figure that was saved with the
name "abcd" couldn't be accessed. This issue is caused by that the
'add_figures()' method in `ExperimentData` class added ".svg"
automatically. As it explicitly written that SVG extension is added if
the file name doesn't have one, we can conclude that all figure names
have ".svg" extension. To not make a major change in the code I added to
the `figure` method in `ExperimentData` class a check for the extension
of the `figure_key`. If it doesn't have ".svg" ending, it adds one
before trying to pull it from the dict of figures.

---------

Co-authored-by: Yael Ben-Haim <[email protected]>
  • Loading branch information
ItamarGoldman and yaelbh authored Oct 23, 2023
1 parent cfb47e2 commit 7e920d3
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 0 deletions.
6 changes: 6 additions & 0 deletions qiskit_experiments/framework/experiment_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -1311,6 +1311,12 @@ def figure(
raise ExperimentEntryNotFound(f"Figure {figure_key} not found.")
figure_key = self._figures.keys()[figure_key]

# All figures must have '.svg' in their names when added, as the extension is added to the key
# name in the `add_figures()` method of this class.
if isinstance(figure_key, str):
if not figure_key.endswith(".svg"):
figure_key += ".svg"

figure_data = self._figures.get(figure_key, None)
if figure_data is None and self.service:
figure = self.service.figure(experiment_id=self.experiment_id, figure_name=figure_key)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
upgrade:
- |
Figures in `ExperimentData` objects can now be accessed without '.svg' extension.
7 changes: 7 additions & 0 deletions test/database_service/test_db_experiment_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -409,6 +409,8 @@ def test_get_figure(self):
exp_data = ExperimentData(experiment_type="qiskit_test")
figure_template = "hello world {}"
name_template = "figure_{}.svg"
name_template_wo_ext = "figure_{}"

for idx in range(3):
exp_data.add_figures(
str.encode(figure_template.format(idx)), figure_names=name_template.format(idx)
Expand All @@ -418,6 +420,11 @@ def test_get_figure(self):
self.assertEqual(expected_figure, exp_data.figure(name_template.format(idx)).figure)
self.assertEqual(expected_figure, exp_data.figure(idx).figure)

# Check that figure will be returned without file extension in name
expected_figure = str.encode(figure_template.format(idx))
self.assertEqual(expected_figure, exp_data.figure(name_template_wo_ext.format(idx)).figure)
self.assertEqual(expected_figure, exp_data.figure(idx).figure)

file_name = uuid.uuid4().hex
self.addCleanup(os.remove, file_name)
exp_data.figure(idx, file_name)
Expand Down

0 comments on commit 7e920d3

Please sign in to comment.