Skip to content

Commit bbbe868

Browse files
committed
Introduce lightweight helpers in test suite that coerce headers to dict-like access while preserving attribute support.
1 parent abdd404 commit bbbe868

File tree

1 file changed

+50
-14
lines changed

1 file changed

+50
-14
lines changed

azure-quantum/tests/unit/test_qiskit.py

Lines changed: 50 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,28 @@
5151
from azure.quantum.target.rigetti import RigettiTarget
5252

5353

54+
_HEADER_MISSING = object()
55+
56+
57+
def _get_header_field(header: Any, key: str, default: Any = _HEADER_MISSING) -> Any:
58+
# Helper to read ExperimentResult.header across Qiskit 1.x and 2.x shapes.
59+
if header is None:
60+
return default
61+
if isinstance(header, dict):
62+
return header.get(key, default)
63+
if hasattr(header, key):
64+
return getattr(header, key)
65+
if hasattr(header, "to_dict"):
66+
header_dict = header.to_dict()
67+
if isinstance(header_dict, dict):
68+
return header_dict.get(key, default)
69+
return default
70+
71+
72+
def _header_has_field(header: Any, key: str) -> bool:
73+
return _get_header_field(header, key) is not _HEADER_MISSING
74+
75+
5476
#####################################################################
5577
#####################################################################
5678
#####################################################################
@@ -634,8 +656,11 @@ def test_qiskit_submit_ionq_5_qubit_superposition(self):
634656
self.assertEqual(result.data()["probabilities"], {"0": 0.5, "1": 0.5})
635657
counts = result.get_counts()
636658
self.assertEqual(counts, result.data()["counts"])
637-
self.assertEqual(result.results[0].header.num_qubits, 5)
638-
self.assertEqual(result.results[0].header.metadata["some"], "data")
659+
header = result.results[0].header
660+
num_qubits = _get_header_field(header, "num_qubits")
661+
self.assertEqual(str(num_qubits), "5")
662+
metadata = _get_header_field(header, "metadata", {})
663+
self.assertEqual(metadata.get("some"), "data")
639664

640665
@pytest.mark.ionq
641666
@pytest.mark.live_test
@@ -673,8 +698,11 @@ def test_qiskit_submit_ionq_5_qubit_superposition_passthrough(self):
673698
self.assertEqual(result.data()["probabilities"], {"0": 0.5, "1": 0.5})
674699
counts = result.get_counts()
675700
self.assertEqual(counts, result.data()["counts"])
676-
self.assertEqual(result.results[0].header.num_qubits, '5')
677-
self.assertEqual(result.results[0].header.metadata["some"], "data")
701+
header = result.results[0].header
702+
num_qubits = _get_header_field(header, "num_qubits")
703+
self.assertEqual(str(num_qubits), "5")
704+
metadata = _get_header_field(header, "metadata", {})
705+
self.assertEqual(metadata.get("some"), "data")
678706

679707
def test_qiskit_provider_init_with_workspace_not_raises_deprecation(self):
680708
# testing warning according to https://docs.python.org/3/library/warnings.html#testing-warnings
@@ -1016,8 +1044,9 @@ def _test_qiskit_submit_ionq(self, circuit, **kwargs):
10161044
self.assertEqual(result.data()["probabilities"], {"000": 0.5, "111": 0.5})
10171045
counts = result.get_counts()
10181046
self.assertEqual(counts, result.data()["counts"])
1019-
self.assertTrue(hasattr(result.results[0].header, "num_qubits"))
1020-
self.assertTrue(hasattr(result.results[0].header, "metadata"))
1047+
header = result.results[0].header
1048+
self.assertTrue(_header_has_field(header, "num_qubits"))
1049+
self.assertTrue(_header_has_field(header, "metadata"))
10211050

10221051
def _test_qiskit_submit_ionq_passthrough(self, circuit, **kwargs):
10231052
workspace = self.create_workspace()
@@ -1057,8 +1086,9 @@ def _test_qiskit_submit_ionq_passthrough(self, circuit, **kwargs):
10571086
self.assertEqual(result.data()["probabilities"], {"000": 0.5, "111": 0.5})
10581087
counts = result.get_counts()
10591088
self.assertEqual(counts, result.data()["counts"])
1060-
self.assertTrue(hasattr(result.results[0].header, "num_qubits"))
1061-
self.assertTrue(hasattr(result.results[0].header, "metadata"))
1089+
header = result.results[0].header
1090+
self.assertTrue(_header_has_field(header, "num_qubits"))
1091+
self.assertTrue(_header_has_field(header, "metadata"))
10621092

10631093

10641094
@pytest.mark.live_test
@@ -1770,9 +1800,12 @@ def _test_qiskit_submit_quantinuum(self, circuit, target="quantinuum.sim.h2-1e",
17701800
result = qiskit_job.result()
17711801
self.assertIn("counts", result.data())
17721802
self.assertIn("probabilities", result.data())
1773-
self.assertTrue(hasattr(result.results[0].header, "num_qubits"))
1774-
self.assertEqual(result.results[0].header.num_qubits, num_qubits)
1775-
self.assertEqual(result.results[0].header.metadata["some"], "data")
1803+
header = result.results[0].header
1804+
self.assertTrue(_header_has_field(header, "num_qubits"))
1805+
num_qubits_value = _get_header_field(header, "num_qubits")
1806+
self.assertEqual(str(num_qubits_value), str(num_qubits))
1807+
metadata = _get_header_field(header, "metadata", {})
1808+
self.assertEqual(metadata.get("some"), "data")
17761809

17771810
def _test_qiskit_submit_quantinuum_passthrough(self, circuit, target="quantinuum.sim.h2-1e", **kwargs):
17781811
workspace = self.create_workspace()
@@ -1815,9 +1848,12 @@ def _test_qiskit_submit_quantinuum_passthrough(self, circuit, target="quantinuum
18151848
result = qiskit_job.result()
18161849
self.assertIn("counts", result.data())
18171850
self.assertIn("probabilities", result.data())
1818-
self.assertTrue(hasattr(result.results[0].header, "num_qubits"))
1819-
self.assertEqual(result.results[0].header.num_qubits, str(num_qubits))
1820-
self.assertEqual(result.results[0].header.metadata["some"], "data")
1851+
header = result.results[0].header
1852+
self.assertTrue(_header_has_field(header, "num_qubits"))
1853+
num_qubits_value = _get_header_field(header, "num_qubits")
1854+
self.assertEqual(str(num_qubits_value), str(num_qubits))
1855+
metadata = _get_header_field(header, "metadata", {})
1856+
self.assertEqual(metadata.get("some"), "data")
18211857

18221858
@pytest.mark.quantinuum
18231859
def test_translate_quantinuum_qir(self):

0 commit comments

Comments
 (0)