|
51 | 51 | from azure.quantum.target.rigetti import RigettiTarget |
52 | 52 |
|
53 | 53 |
|
| 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 | + |
54 | 76 | ##################################################################### |
55 | 77 | ##################################################################### |
56 | 78 | ##################################################################### |
@@ -634,8 +656,11 @@ def test_qiskit_submit_ionq_5_qubit_superposition(self): |
634 | 656 | self.assertEqual(result.data()["probabilities"], {"0": 0.5, "1": 0.5}) |
635 | 657 | counts = result.get_counts() |
636 | 658 | 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") |
639 | 664 |
|
640 | 665 | @pytest.mark.ionq |
641 | 666 | @pytest.mark.live_test |
@@ -673,8 +698,11 @@ def test_qiskit_submit_ionq_5_qubit_superposition_passthrough(self): |
673 | 698 | self.assertEqual(result.data()["probabilities"], {"0": 0.5, "1": 0.5}) |
674 | 699 | counts = result.get_counts() |
675 | 700 | 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") |
678 | 706 |
|
679 | 707 | def test_qiskit_provider_init_with_workspace_not_raises_deprecation(self): |
680 | 708 | # 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): |
1016 | 1044 | self.assertEqual(result.data()["probabilities"], {"000": 0.5, "111": 0.5}) |
1017 | 1045 | counts = result.get_counts() |
1018 | 1046 | 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")) |
1021 | 1050 |
|
1022 | 1051 | def _test_qiskit_submit_ionq_passthrough(self, circuit, **kwargs): |
1023 | 1052 | workspace = self.create_workspace() |
@@ -1057,8 +1086,9 @@ def _test_qiskit_submit_ionq_passthrough(self, circuit, **kwargs): |
1057 | 1086 | self.assertEqual(result.data()["probabilities"], {"000": 0.5, "111": 0.5}) |
1058 | 1087 | counts = result.get_counts() |
1059 | 1088 | 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")) |
1062 | 1092 |
|
1063 | 1093 |
|
1064 | 1094 | @pytest.mark.live_test |
@@ -1770,9 +1800,12 @@ def _test_qiskit_submit_quantinuum(self, circuit, target="quantinuum.sim.h2-1e", |
1770 | 1800 | result = qiskit_job.result() |
1771 | 1801 | self.assertIn("counts", result.data()) |
1772 | 1802 | 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") |
1776 | 1809 |
|
1777 | 1810 | def _test_qiskit_submit_quantinuum_passthrough(self, circuit, target="quantinuum.sim.h2-1e", **kwargs): |
1778 | 1811 | workspace = self.create_workspace() |
@@ -1815,9 +1848,12 @@ def _test_qiskit_submit_quantinuum_passthrough(self, circuit, target="quantinuum |
1815 | 1848 | result = qiskit_job.result() |
1816 | 1849 | self.assertIn("counts", result.data()) |
1817 | 1850 | 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") |
1821 | 1857 |
|
1822 | 1858 | @pytest.mark.quantinuum |
1823 | 1859 | def test_translate_quantinuum_qir(self): |
|
0 commit comments