iqm-benchmarks 2.24__tar.gz → 2.26__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of iqm-benchmarks might be problematic. Click here for more details.

Files changed (99) hide show
  1. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/CHANGELOG.rst +8 -0
  2. {iqm_benchmarks-2.24/src/iqm_benchmarks.egg-info → iqm_benchmarks-2.26}/PKG-INFO +6 -4
  3. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/README.md +3 -2
  4. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/requirements.txt +35 -35
  5. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/benchmark.py +5 -1
  6. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/compressive_gst/compressive_gst.py +26 -21
  7. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/compressive_gst/gst_analysis.py +27 -22
  8. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/entanglement/ghz.py +1 -0
  9. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/optimization/qscore.py +7 -5
  10. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/quantum_volume/clops.py +1 -0
  11. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/quantum_volume/quantum_volume.py +3 -2
  12. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/clifford_rb/clifford_rb.py +11 -4
  13. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/interleaved_rb/interleaved_rb.py +10 -6
  14. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/mirror_rb/mirror_rb.py +4 -3
  15. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/randomized_benchmarking_common.py +23 -13
  16. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/utils.py +38 -14
  17. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26/src/iqm_benchmarks.egg-info}/PKG-INFO +6 -4
  18. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm_benchmarks.egg-info/SOURCES.txt +2 -1
  19. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/tests/test_gst.py +2 -1
  20. iqm_benchmarks-2.26/tests/unit/test_submit_execute.py +172 -0
  21. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/.github/workflows/main.yml +0 -0
  22. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/.github/workflows/publish.yml +0 -0
  23. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/.github/workflows/tag_and_release.yml +0 -0
  24. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/.gitignore +0 -0
  25. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/LICENSE +0 -0
  26. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/MANIFEST.in +0 -0
  27. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/benchmark_runner.py +0 -0
  28. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docbuild +0 -0
  29. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/API.rst +0 -0
  30. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/Makefile +0 -0
  31. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/_static/images/favicon.ico +0 -0
  32. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/_static/images/logo.png +0 -0
  33. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/_templates/autosummary-class-template.rst +0 -0
  34. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/_templates/autosummary-module-template.rst +0 -0
  35. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/changelog.rst +0 -0
  36. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/conf.py +0 -0
  37. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/development/development.rst +0 -0
  38. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/development/generate_2qubit_cliffords.ipynb +0 -0
  39. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/development/how_to_make_your_own_benchmark.ipynb +0 -0
  40. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/devices/devices.rst +0 -0
  41. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/devices/spark.ipynb +0 -0
  42. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/devices/star.ipynb +0 -0
  43. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/examples/example_clifford_rb.ipynb +0 -0
  44. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/examples/example_clops.ipynb +0 -0
  45. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/examples/example_experiment_all.ipynb +0 -0
  46. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/examples/example_ghz.ipynb +0 -0
  47. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/examples/example_ghz_deneb.ipynb +0 -0
  48. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/examples/example_gst.ipynb +0 -0
  49. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/examples/example_interleaved_rb.ipynb +0 -0
  50. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/examples/example_mirror_rb.ipynb +0 -0
  51. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/examples/example_qscore.ipynb +0 -0
  52. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/examples/example_quantum_volume.ipynb +0 -0
  53. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/examples/example_quantum_volume_deneb.ipynb +0 -0
  54. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/examples/examples.rst +0 -0
  55. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/index.rst +0 -0
  56. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/license.rst +0 -0
  57. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/readme.md +0 -0
  58. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/format +0 -0
  59. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/pyproject.toml +0 -0
  60. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/scheduled_experiments/adonis/__init__.py +0 -0
  61. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/scheduled_experiments/adonis/weekly.py +0 -0
  62. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/setup.cfg +0 -0
  63. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/__init__.py +0 -0
  64. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/benchmark_definition.py +0 -0
  65. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/circuit_containers.py +0 -0
  66. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/compressive_gst/__init__.py +0 -0
  67. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/entanglement/__init__.py +0 -0
  68. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/logging_config.py +0 -0
  69. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/optimization/__init__.py +0 -0
  70. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/quantum_volume/__init__.py +0 -0
  71. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/__init__.py +0 -0
  72. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/clifford_1q.pkl +0 -0
  73. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/clifford_2q.pkl +0 -0
  74. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/clifford_rb/__init__.py +0 -0
  75. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/interleaved_rb/__init__.py +0 -0
  76. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/mirror_rb/__init__.py +0 -0
  77. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/multi_lmfit.py +0 -0
  78. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/readout_mitigation.py +0 -0
  79. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm_benchmarks.egg-info/dependency_links.txt +0 -0
  80. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm_benchmarks.egg-info/requires.txt +0 -0
  81. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm_benchmarks.egg-info/top_level.txt +0 -0
  82. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/mGST/LICENSE +0 -0
  83. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/mGST/README.md +0 -0
  84. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/mGST/additional_fns.py +0 -0
  85. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/mGST/algorithm.py +0 -0
  86. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/mGST/compatibility.py +0 -0
  87. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/mGST/low_level_jit.py +0 -0
  88. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/mGST/optimization.py +0 -0
  89. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/mGST/qiskit_interface.py +0 -0
  90. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/mGST/reporting/figure_gen.py +0 -0
  91. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/mGST/reporting/reporting.py +0 -0
  92. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/tag-from-pipeline.sh +0 -0
  93. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/test +0 -0
  94. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/tests/test_ghz.py +0 -0
  95. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/tests/test_qscore.py +0 -0
  96. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/tests/test_qv.py +0 -0
  97. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/tests/test_rb.py +0 -0
  98. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/tests/unit/test_benchmark_circuit.py +0 -0
  99. {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/update-requirements.py +0 -0
@@ -2,6 +2,14 @@
2
2
  Changelog
3
3
  =========
4
4
 
5
+ Version 2.26
6
+ ============
7
+ * Changed benchmark observation names and identifiers to be more consistent with guidelines.
8
+
9
+ Version 2.25
10
+ ============
11
+ * Added optional configuration parameter (`max_circuits_per_batch`) to specify the maximum amount of circuits per batch.
12
+
5
13
  Version 2.24
6
14
  ============
7
15
  * Added rustworkx dependency range to fix wrong edge thickness assignment in qubit selection plot.
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: iqm-benchmarks
3
- Version: 2.24
3
+ Version: 2.26
4
4
  Summary: A package for implementation of Quantum Characterization, Verification and Validation (QCVV) techniques on IQM's hardware at gate level abstraction
5
5
  Author-email: IQM Finland Oy <developers@meetiqm.com>, Adrian Auer <adrian.auer@meetiqm.com>, Raphael Brieger <raphael.brieger@meetiqm.com>, Alessio Calzona <alessio.calzona@meetiqm.com>, Pedro Figueroa Romero <pedro.romero@meetiqm.com>, Amin Hosseinkhani <amin.hosseinkhani@meetiqm.com>, Miikka Koistinen <miikka@meetiqm.com>, Nadia Milazzo <nadia.milazzo@meetiqm.com>, Vicente Pina Canelles <vicente.pina@meetiqm.com>, Aniket Rath <aniket.rath@meetiqm.com>, Jami Rönkkö <jami@meetiqm.com>, Stefan Seegerer <stefan.seegerer@meetiqm.com>
6
6
  Project-URL: Homepage, https://github.com/iqm-finland/iqm-benchmarks
@@ -50,6 +50,7 @@ Provides-Extra: docs
50
50
  Requires-Dist: sphinx==7.2.6; extra == "docs"
51
51
  Requires-Dist: sphinx-book-theme==1.1.2; extra == "docs"
52
52
  Requires-Dist: myst-parser<5,>=4.0.0; extra == "docs"
53
+ Dynamic: license-file
53
54
 
54
55
  # IQM Benchmarks
55
56
 
@@ -194,7 +195,7 @@ EXAMPLE_MRB = MirrorRBConfiguration(
194
195
  )
195
196
 
196
197
  EXAMPLE_QV = QuantumVolumeConfiguration(
197
- num_circuits=500,
198
+ num_circuits=800,
198
199
  shots=2**8,
199
200
  calset_id=None,
200
201
  num_sigmas=2,
@@ -204,7 +205,8 @@ EXAMPLE_QV = QuantumVolumeConfiguration(
204
205
  optimize_sqg=True,
205
206
  routing_method="sabre",
206
207
  physical_layout="fixed",
207
- max_gates_per_batch=60_000,
208
+ max_circuits_per_batch=500,
209
+ max_gates_per_batch=60_000, # Will be used if it renders a smaller max batch size than max_circuits_per_batch
208
210
  rem=True,
209
211
  mit_shots=1_000,
210
212
  )
@@ -141,7 +141,7 @@ EXAMPLE_MRB = MirrorRBConfiguration(
141
141
  )
142
142
 
143
143
  EXAMPLE_QV = QuantumVolumeConfiguration(
144
- num_circuits=500,
144
+ num_circuits=800,
145
145
  shots=2**8,
146
146
  calset_id=None,
147
147
  num_sigmas=2,
@@ -151,7 +151,8 @@ EXAMPLE_QV = QuantumVolumeConfiguration(
151
151
  optimize_sqg=True,
152
152
  routing_method="sabre",
153
153
  physical_layout="fixed",
154
- max_gates_per_batch=60_000,
154
+ max_circuits_per_batch=500,
155
+ max_gates_per_batch=60_000, # Will be used if it renders a smaller max batch size than max_circuits_per_batch
155
156
  rem=True,
156
157
  mit_shots=1_000,
157
158
  )
@@ -929,9 +929,9 @@ llvmlite==0.43.0 \
929
929
  --hash=sha256:e0a9a1a39d4bf3517f2af9d23d479b4175ead205c592ceeb8b89af48a327ea57 \
930
930
  --hash=sha256:eccce86bba940bae0d8d48ed925f21dbb813519169246e2ab292b5092aba121f \
931
931
  --hash=sha256:f99b600aa7f65235a5a05d0b9a9f31150c390f31261f2a0ba678e26823ec38f7
932
- lmfit==1.3.2 \
933
- --hash=sha256:2b834f054cd7a5172f3b431345b292e5d95ea387d6f96d60ad35a11b8efee6ac \
934
- --hash=sha256:31beeae1f027c1b8c14dcd7f2e8488a80b75fb389e77fca677549bdc2fe597bb
932
+ lmfit==1.3.3 \
933
+ --hash=sha256:73321e6b881f2f686235721a7dfc02af6bb0f030a25efeb66638f62b1c6053a1 \
934
+ --hash=sha256:a9e9ec7d0d0ec962cc6c078ad1ec6c8311d3ac0e5f0947a00a91f5509dacc2b2
935
935
  markdown-it-py==3.0.0 \
936
936
  --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \
937
937
  --hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb
@@ -1505,38 +1505,38 @@ pyaml==25.1.0 \
1505
1505
  pycparser==2.22 \
1506
1506
  --hash=sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6 \
1507
1507
  --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc
1508
- pycurl==7.45.4 \
1509
- --hash=sha256:0470bff6cc24d8c2f63c80931aa239463800871609dafc6bcc9ca10f5a12a04e \
1510
- --hash=sha256:1324a859b50bdb0abdbd5620e42f74240d0b7daf2d5925fa303695d9fc3ece18 \
1511
- --hash=sha256:13c4b18f44637859f34639493efd297a08670f45e4eec34ab2dcba724e3cb5fc \
1512
- --hash=sha256:13eb1643ab0bf4fdc539a2cdf1021029b07095d3196c5cee5a4271af268d3d31 \
1513
- --hash=sha256:236600bfe2cd72efe47333add621286667e8fa027dadf1247349afbf30333e95 \
1514
- --hash=sha256:247b4af8eab7d04137a7f1a98391930e04ea93dc669b64db5625070fe15f80a3 \
1515
- --hash=sha256:2548c3291a33c821f0f80bf9989fc43b5d90fb78b534a7015c8419b83c6f5803 \
1516
- --hash=sha256:26745c6c5ebdccfe8a828ac3fd4e6da6f5d2245696604f04529eb7894a02f4db \
1517
- --hash=sha256:32c8e237069273f4260b6ae13d1e0f99daae938977016021565dc6e11050e803 \
1518
- --hash=sha256:3452459668bd01d646385482362b021834a31c036aa1c02acd88924ddeff7d0d \
1519
- --hash=sha256:4f25d52c97dbca6ebea786f0961b49c1998fa05178abf1964a977c825b3d8ae6 \
1520
- --hash=sha256:561f88697f7540634b1c750146f37bdc0da367b15f6b4ab2bb780871ee6ab005 \
1521
- --hash=sha256:57971d7215fc6fdedcfc092f880a59f04f52fcaf2fd329151b931623d7b59a9c \
1522
- --hash=sha256:587a4891039803b5f48392066f97b7cd5e7e9a166187abb5cb4b4806fdb8fbef \
1523
- --hash=sha256:688d09ba2c6a0d4a749d192c43422839d73c40c85143c50cc65c944258fe0ba8 \
1524
- --hash=sha256:731c46e7c0acffaab19f7c2ecc3d9e7ee337500e87b260b4e0b9fae2d90fa133 \
1525
- --hash=sha256:73df3eb5940a7fbf4cf62f7271e9f23a8e9f80e352c838ee9a8448a70c01d3f5 \
1526
- --hash=sha256:9940e3234c1ca3d30f27a2202d325dbc25291605c98e9585100a351cacd935e8 \
1527
- --hash=sha256:9bd493ce598f1dc76c8e50043c47debec27c583fa313a836b2d3667640f875d5 \
1528
- --hash=sha256:a39f28f031885485325034918386be352036c220ca45625c7e286d3938eb579d \
1529
- --hash=sha256:acf25cfdaf914db21a2a6e9e274b6d95e3fa2b6018c38f2c58c94b5d8ac3d1b7 \
1530
- --hash=sha256:b0e38e3eb83b0c891f391853f798fc6a97cb5a86a4a731df0b6320e539ae54ae \
1531
- --hash=sha256:b485fdaf78553f0b8e1c2803bb7dcbe47a7b47594f846fc7e9d3b94d794cfc89 \
1532
- --hash=sha256:caec8b634763351dd4e1b729a71542b1e2de885d39710ba8e7202817a381b453 \
1533
- --hash=sha256:d14f954ecd21a070038d65ef1c6d1d3ab220f952ff703d48313123222097615c \
1534
- --hash=sha256:d192a48b3cec2e13ad432196b65c22e99620db92feae39c0476635354eff68c6 \
1535
- --hash=sha256:df5f94c051c5a163fa85064559ca94979575e2da26740ff91c078c50c541c465 \
1536
- --hash=sha256:e7ae49b88a5d57485fbabef004534225dfe04dc15716a61fae1a0c7f46f2279e \
1537
- --hash=sha256:f6c0e22052946bbfa25be67f9d1d6639eff10781c89f0cf6f3ff2099273d1bad \
1538
- --hash=sha256:fd167f73d34beb0cb8064334aee76d9bdd13167b30be6d5d36fb07d0c8223b71 \
1539
- --hash=sha256:ffd3262f98b8997ad04940061d5ebd8bab2362169b9440939c397e24a4a135b0
1508
+ pycurl==7.45.6 \
1509
+ --hash=sha256:0cd6b7794268c17f3c660162ed6381769ce0ad260331ef49191418dfc3a2d61a \
1510
+ --hash=sha256:1309fc0f558a80ca444a3a5b0bdb1572a4d72b195233f0e65413b4d4dd78809b \
1511
+ --hash=sha256:26839d43dc7fff6b80e0067f185cc1d0e9be2ae6e2e2361ae8488cead5901c04 \
1512
+ --hash=sha256:2a21e13278d7553a04b421676c458449f6c10509bebf04993f35154b06ee2b20 \
1513
+ --hash=sha256:2b73e66b22719ea48ac08a93fc88e57ef36d46d03cb09d972063c9aa86bb74e6 \
1514
+ --hash=sha256:2d1a49418b8b4c61f52e06d97b9c16142b425077bd997a123a2ba9ef82553203 \
1515
+ --hash=sha256:334721ce1ccd71ff8e405470768b3d221b4393570ccc493fcbdbef4cd62e91ed \
1516
+ --hash=sha256:3441ee77e830267aa6e2bb43b29fd5f8a6bd6122010c76a6f0bf84462e9ea9c7 \
1517
+ --hash=sha256:357ea634395310085b9d5116226ac5ec218a6ceebf367c2451ebc8d63a6e9939 \
1518
+ --hash=sha256:361bf94b2a057c7290f9ab84e935793ca515121fc012f4b6bef6c3b5e4ea4397 \
1519
+ --hash=sha256:3fc0b505c37c7c54d88ced27e1d9e3241130987c24bf1611d9bbd9a3e499e07c \
1520
+ --hash=sha256:56d1197eadd5774582b259cde4364357da71542758d8e917f91cc6ed7ed5b262 \
1521
+ --hash=sha256:56f841b6f2f7a8b2d3051b9ceebd478599dbea3c8d1de8fb9333c895d0c1eea5 \
1522
+ --hash=sha256:6f57ad26d6ab390391ad5030790e3f1a831c1ee54ad3bf969eb378f5957eeb0a \
1523
+ --hash=sha256:7c09b7180799af70fc1d4eed580cfb1b9f34fda9081f73a3e3bc9a0e5a4c0e9b \
1524
+ --hash=sha256:81005c0f681d31d5af694d1d3c18bbf1bed0bc8b2bb10fb7388cb1378ba9bd6a \
1525
+ --hash=sha256:878ae64484db18f8f10ba99bffc83fefb4fe8f5686448754f93ec32fa4e4ee93 \
1526
+ --hash=sha256:8a99e56d2575aa74c48c0cd08852a65d5fc952798f76a34236256d5589bf5aa0 \
1527
+ --hash=sha256:942b352b69184cb26920db48e0c5cb95af39874b57dbe27318e60f1e68564e37 \
1528
+ --hash=sha256:9f721e3394e5bd7079802ec1819b19c5be4842012268cc45afcb3884efb31cf0 \
1529
+ --hash=sha256:a554a2813d415a7bb9a996a6298f3829f57e987635dcab9f1197b2dccd0ab3b2 \
1530
+ --hash=sha256:a721c2696a71b1aa5ecf82e6d0ade64bc7211b7317f1c9c66e82f82e2264d8b4 \
1531
+ --hash=sha256:abe1b204a2f96f2eebeaf93411f03505b46d151ef6d9d89326e6dece7b3a008a \
1532
+ --hash=sha256:ae893144b82d72d95c932ebdeb81fc7e9fde758e5ecd5dd10ad5b67f34a8b8ee \
1533
+ --hash=sha256:bb9eff0c7794af972da769a887c87729f1bcd8869297b1c01a2732febbb75876 \
1534
+ --hash=sha256:c04230b9e9cfdca9cf3eb09a0bec6cf2f084640f1f1ca1929cca51411af85de2 \
1535
+ --hash=sha256:c31b390f1e2cd4525828f1bb78c1f825c0aab5d1588228ed71b22c4784bdb593 \
1536
+ --hash=sha256:c6fd295f03c928da33a00f56c91765195155d2ac6f12878f6e467830b5dce5f5 \
1537
+ --hash=sha256:c872d4074360964697c39c1544fe8c91bfecbff27c1cdda1fee5498e5fdadcda \
1538
+ --hash=sha256:d0b5501d527901369aba307354530050f56cd102410f2a3bacd192dc12c645e3 \
1539
+ --hash=sha256:f0198ebcda8686b3a0c66d490a687fa5fd466f8ecc2f20a0ed0931579538ae3d
1540
1540
  pydantic==2.9.2 \
1541
1541
  --hash=sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f \
1542
1542
  --hash=sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12
@@ -51,6 +51,7 @@ class BenchmarkBase(ABC):
51
51
  self.shots = self.configuration.shots
52
52
  self.calset_id = self.configuration.calset_id
53
53
  self.max_gates_per_batch = self.configuration.max_gates_per_batch
54
+ self.max_circuits_per_batch = self.configuration.max_circuits_per_batch
54
55
 
55
56
  self.routing_method = self.configuration.routing_method
56
57
  self.physical_layout = self.configuration.physical_layout
@@ -92,6 +93,8 @@ class BenchmarkConfigurationBase(BaseModel):
92
93
  * Default for all benchmarks is 2**8.
93
94
  max_gates_per_batch (Optional[int]): the maximum number of gates per circuit batch.
94
95
  * Default for all benchmarks is None.
96
+ max_circuits_per_batch (Optional[int]): the maximum number of circuits per batch.
97
+ * Default for all benchmarks is None.
95
98
  calset_id (Optional[str]): the calibration ID to use in circuit execution.
96
99
  * Default for all benchmarks is None (uses last available calibration ID).
97
100
  routing_method (Literal["basic", "lookahead", "stochastic", "sabre", "none"]): the Qiskit routing method to use in transpilation.
@@ -100,13 +103,14 @@ class BenchmarkConfigurationBase(BaseModel):
100
103
  - "fixed": physical layout is constrained during transpilation to the selected initial physical qubits.
101
104
  - "batching": physical layout is allowed to use any other physical qubits, and circuits are batched according to final measured qubits.
102
105
  * Default for all benchmarks is "fixed".
103
- use_DD (bool): Boolean flag determining if dynamical decoupling is enabled during circuit execution
106
+ use_dd (bool): Boolean flag determining whether to enable dynamical decoupling during circuit execution.
104
107
  * Default: False
105
108
  """
106
109
 
107
110
  benchmark: Type[BenchmarkBase]
108
111
  shots: int = 2**8
109
112
  max_gates_per_batch: Optional[int] = None
113
+ max_circuits_per_batch: Optional[int] = None
110
114
  calset_id: Optional[str] = None
111
115
  routing_method: Literal["basic", "lookahead", "stochastic", "sabre", "none"] = "sabre"
112
116
  physical_layout: Literal["fixed", "batching"] = "fixed"
@@ -81,10 +81,7 @@ class CompressiveGST(Benchmark):
81
81
  if configuration.opt_method not in ["GD", "SFN", "auto"]:
82
82
  raise ValueError("Invalid optimization method, valid options are: GD, SFN, auto")
83
83
  if configuration.opt_method == "auto":
84
- if (self.num_qubits == 2 and configuration.rank > 2) or self.num_qubits > 2:
85
- self.opt_method = "GD"
86
- else:
87
- self.opt_method = "SFN"
84
+ self.opt_method = "GD" # Currently the fastest method in all cases
88
85
  else:
89
86
  self.opt_method = configuration.opt_method
90
87
 
@@ -160,17 +157,23 @@ class CompressiveGST(Benchmark):
160
157
  "Qubit layouts can't overlap when parallel_execution is enabled, please choose non-overlapping layouts."
161
158
  )
162
159
  raw_qc_list_parallel = []
160
+ if "move" in self.backend.operation_names:
161
+ backend_qubits = np.arange(1, self.backend.num_qubits)
162
+ qubit_layouts = [[q - 1 for q in layout] for layout in self.qubit_layouts]
163
+ else:
164
+ backend_qubits = np.arange(self.backend.num_qubits)
165
+ qubit_layouts = self.qubit_layouts
163
166
  for circ in raw_qc_list:
164
- circ_parallel = QuantumCircuit(self.backend.num_qubits, len(set(all_qubits)))
167
+ circ_parallel = QuantumCircuit(len(backend_qubits), len(set(all_qubits)))
165
168
  clbits = np.arange(self.num_qubits)
166
- for qubit_layout in self.qubit_layouts:
169
+ for qubit_layout in qubit_layouts:
167
170
  circ_parallel.compose(circ, qubits=qubit_layout, clbits=clbits, inplace=True)
168
171
  clbits += self.num_qubits
169
172
  raw_qc_list_parallel.append(circ_parallel)
170
173
  transpiled_qc_list, _ = perform_backend_transpilation(
171
174
  raw_qc_list_parallel,
172
175
  self.backend,
173
- qubits=np.arange(self.backend.num_qubits),
176
+ qubits=backend_qubits,
174
177
  coupling_map=self.backend.coupling_map,
175
178
  qiskit_optim_level=0,
176
179
  optimize_sqg=False,
@@ -239,6 +242,7 @@ class CompressiveGST(Benchmark):
239
242
  self.configuration.shots,
240
243
  self.calset_id,
241
244
  max_gates_per_batch=self.configuration.max_gates_per_batch,
245
+ max_circuits_per_batch=self.configuration.max_circuits_per_batch,
242
246
  circuit_compilation_options=self.circuit_compilation_options,
243
247
  )
244
248
  # Retrieve
@@ -255,6 +259,7 @@ class CompressiveGST(Benchmark):
255
259
  self.configuration.shots,
256
260
  self.calset_id,
257
261
  max_gates_per_batch=self.configuration.max_gates_per_batch,
262
+ max_circuits_per_batch=self.configuration.max_circuits_per_batch,
258
263
  )
259
264
  # Retrieve all
260
265
  qcvv_logger.info(f"Now executing the corresponding circuit batch")
@@ -386,7 +391,7 @@ def parse_gate_set(
386
391
  gate_set: List[QuantumCircuit]
387
392
  A list of gates defined as quantum circuit objects
388
393
  gate_labels_dict: Dict[str, Dict[int, str]]
389
- The names of gates, i.e. "Rx(pi/2)" for a pi/2 rotation around the x-axis.
394
+ The names of gates, i.e. "Rx_pi_2" for a pi/2 rotation around the x-axis.
390
395
  num_gates: int
391
396
  The number of gates in the gate set
392
397
 
@@ -445,7 +450,7 @@ def create_predefined_gate_set(
445
450
  gates: List[QuantumCircuit]
446
451
  The gate set as a list of circuits
447
452
  gate_labels_dict: Dict[str, Dict[int, str]]
448
- The names of gates, i.e. "Rx(pi/2)" for a pi/2 rotation around the x-axis.
453
+ The names of gates, i.e. "Rx_pi_2" for a pi/2 rotation around the x-axis.
449
454
  num_gates: int
450
455
  The number of gates in the gate set
451
456
 
@@ -458,7 +463,7 @@ def create_predefined_gate_set(
458
463
  gate_qubits = [[0], [0], [0]]
459
464
  for i, gate in enumerate(gate_list):
460
465
  gates[i].append(gate, gate_qubits[i])
461
- gate_labels = ["Idle", "Rx(pi/2)", "Ry(pi/2)"]
466
+ gate_labels = ["Idle", "Rx_pi_2", "Ry_pi_2"]
462
467
  elif gate_set == "2QXYCZ":
463
468
  gate_qubits = [[0], [1], [0], [1], [0, 1]]
464
469
  gates = [QuantumCircuit(num_qubits, 0) for _ in range(5)]
@@ -467,7 +472,7 @@ def create_predefined_gate_set(
467
472
  gates[2].append(RGate(0.5 * np.pi, np.pi / 2), [0])
468
473
  gates[3].append(RGate(0.5 * np.pi, np.pi / 2), [1])
469
474
  gates[4].append(CZGate(), [0, 1])
470
- gate_labels = ["Rx(pi/2)", "Rx(pi/2)", "Ry(pi/2)", "Ry(pi/2)", "CZ"]
475
+ gate_labels = ["Rx_pi_2", "Rx_pi_2", "Ry_pi_2", "Ry_pi_2", "cz"]
471
476
  elif gate_set == "2QXYCZ_extended":
472
477
  gate_qubits = [[0], [1], [0], [1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1]]
473
478
  gates = [QuantumCircuit(num_qubits, 0) for _ in range(9)]
@@ -485,14 +490,14 @@ def create_predefined_gate_set(
485
490
  gates[7].append(RGate(0.5 * np.pi, np.pi / 2), [1])
486
491
  gates[8].append(CZGate(), [[0], [1]])
487
492
  gate_labels = [
488
- "Rx(pi/2)",
489
- "Rx(pi/2)",
490
- "Ry(pi/2)",
491
- "Ry(pi/2)",
492
- "Rx(pi/2)-Rx(pi/2)",
493
- "Rx(pi/2)-Ry(pi/2)",
494
- "Ry(pi/2)-Rx(pi/2)",
495
- "Ry(pi/2)-Ry(pi/2)",
493
+ "Rx_pi_2",
494
+ "Rx_pi_2",
495
+ "Ry_pi_2",
496
+ "Ry_pi_2",
497
+ "Rx_pi_2-Rx_pi_2",
498
+ "Rx_pi_2-Ry_pi_2",
499
+ "Ry_pi_2-Rx_pi_2",
500
+ "Ry_pi_2-Ry_pi_2",
496
501
  "CZ",
497
502
  ]
498
503
  elif gate_set == "3QXYCZ":
@@ -510,7 +515,7 @@ def create_predefined_gate_set(
510
515
  gate_qubits = [[0], [1], [2], [0], [1], [2], [0, 1], [0, 2]]
511
516
  for i, gate in enumerate(gate_list):
512
517
  gates[i].append(gate, gate_qubits[i])
513
- gate_labels = ["Rx(pi/2)", "Rx(pi/2)", "Rx(pi/2)", "Ry(pi/2)", "Ry(pi/2)", "Ry(pi/2)", "CZ", "CZ"]
518
+ gate_labels = ["Rx_pi_2", "Rx_pi_2", "Rx_pi_2", "Ry_pi_2", "Ry_pi_2", "Ry_pi_2", "cz", "cz"]
514
519
  else:
515
520
  raise ValueError(
516
521
  f"Invalid gate set, choose among 1QXYI, 2QXYCZ, 2QXYCZ_extended,"
@@ -526,6 +531,6 @@ def create_predefined_gate_set(
526
531
  iqm_qubits = [f"QB{q + 1}" for q in qubit_layout]
527
532
  gate_qubits_iqm = [(iqm_qubits[q] for q in qubits) for qubits in gate_qubits]
528
533
  for key, value in layout_label_dict.items():
529
- layout_label_dict[key] = value + ":" + "-".join(gate_qubits_iqm[key])
534
+ layout_label_dict[key] = value + ":" + "__".join(gate_qubits_iqm[key])
530
535
  gate_label_dict.update({BenchmarkObservationIdentifier(qubit_layout).string_identifier: layout_label_dict})
531
536
  return gates, gate_label_dict, len(gates)
@@ -2,6 +2,7 @@
2
2
  Data analysis code for compressive gate set tomography
3
3
  """
4
4
 
5
+ import ast
5
6
  from itertools import product
6
7
  from time import perf_counter
7
8
  from typing import Any, List, Tuple, Union
@@ -218,16 +219,16 @@ def generate_non_gate_results(
218
219
  percentiles_o_low, percentiles_o_high = np.nanpercentile(df_o_array, [2.5, 97.5], axis=0)
219
220
  df_o_final = DataFrame(
220
221
  {
221
- f"Mean TVD: estimate - data": reporting.number_to_str(
222
+ f"mean_total_variation_distance_estimate_data": reporting.number_to_str(
222
223
  df_o.values[0, 1].copy(), [percentiles_o_high[0, 1], percentiles_o_low[0, 1]], precision=5
223
224
  ),
224
- f"Mean TVD: target - data": reporting.number_to_str(
225
+ f"mean_total_variation_distance_target_data": reporting.number_to_str(
225
226
  df_o.values[0, 2].copy(), [percentiles_o_high[0, 2], percentiles_o_low[0, 2]], precision=5
226
227
  ),
227
- f"POVM - diamond dist.": reporting.number_to_str(
228
+ f"povm_diamond_distance": reporting.number_to_str(
228
229
  df_o.values[0, 3].copy(), [percentiles_o_high[0, 3], percentiles_o_low[0, 3]], precision=5
229
230
  ),
230
- f"State - trace dist.": reporting.number_to_str(
231
+ f"state_trace_distance": reporting.number_to_str(
231
232
  df_o.values[0, 4].copy(), [percentiles_o_high[0, 4], percentiles_o_low[0, 4]], precision=5
232
233
  ),
233
234
  },
@@ -236,10 +237,10 @@ def generate_non_gate_results(
236
237
  else:
237
238
  df_o_final = DataFrame(
238
239
  {
239
- f"Mean TVD: estimate - data": reporting.number_to_str(df_o.values[0, 1].copy(), precision=5),
240
- f"Mean TVD: target - data": reporting.number_to_str(df_o.values[0, 2].copy(), precision=5),
241
- f"POVM - diamond dist.": reporting.number_to_str(df_o.values[0, 3].copy(), precision=5),
242
- f"State - trace dist.": reporting.number_to_str(df_o.values[0, 4].copy(), precision=5),
240
+ f"mean_total_variation_distance_estimate_data": reporting.number_to_str(df_o.values[0, 1].copy(), precision=5),
241
+ f"mean_total_variation_distance_target_data": reporting.number_to_str(df_o.values[0, 2].copy(), precision=5),
242
+ f"povm_diamond_distance": reporting.number_to_str(df_o.values[0, 3].copy(), precision=5),
243
+ f"state_trace_distance": reporting.number_to_str(df_o.values[0, 4].copy(), precision=5),
243
244
  },
244
245
  index=[""],
245
246
  )
@@ -290,13 +291,13 @@ def generate_unit_rank_gate_results(
290
291
 
291
292
  df_g_final = DataFrame(
292
293
  {
293
- r"Avg. gate fidelity": [
294
+ r"average_gate_fidelity": [
294
295
  reporting.number_to_str(
295
296
  df_g.values[i, 0], [percentiles_g_high[i, 0], percentiles_g_low[i, 0]], precision=5
296
297
  )
297
298
  for i in range(len(dataset.attrs["gate_labels"][identifier]))
298
299
  ],
299
- r"Diamond distance": [
300
+ r"diamond_distance": [
300
301
  reporting.number_to_str(
301
302
  df_g.values[i, 1], [percentiles_g_high[i, 1], percentiles_g_low[i, 1]], precision=5
302
303
  )
@@ -338,10 +339,10 @@ def generate_unit_rank_gate_results(
338
339
  else:
339
340
  df_g_final = DataFrame(
340
341
  {
341
- "Avg. gate fidelity": [
342
+ "average_gate_fidelity": [
342
343
  reporting.number_to_str(df_g.values[i, 0], precision=5) for i in range(dataset.attrs["num_gates"])
343
344
  ],
344
- "Diamond distance": [
345
+ "diamond_distance": [
345
346
  reporting.number_to_str(df_g.values[i, 1], precision=5) for i in range(dataset.attrs["num_gates"])
346
347
  ],
347
348
  }
@@ -442,19 +443,19 @@ def generate_gate_results(
442
443
 
443
444
  df_g_final = DataFrame(
444
445
  {
445
- r"Avg. gate fidelity": [
446
+ r"average_gate_fidelity": [
446
447
  reporting.number_to_str(
447
448
  df_g.values[i, 0], [percentiles_g_high[i, 0], percentiles_g_low[i, 0]], precision=5
448
449
  )
449
450
  for i in range(dataset.attrs["num_gates"])
450
451
  ],
451
- r"Diamond distance": [
452
+ r"diamond_distance": [
452
453
  reporting.number_to_str(
453
454
  df_g.values[i, 1], [percentiles_g_high[i, 1], percentiles_g_low[i, 1]], precision=5
454
455
  )
455
456
  for i in range(dataset.attrs["num_gates"])
456
457
  ],
457
- r"Unitarity": [
458
+ r"unitarity": [
458
459
  reporting.number_to_str(
459
460
  reporting.unitarities(X_opt_pp)[i],
460
461
  [percentiles_u_high[i], percentiles_u_low[i]],
@@ -468,15 +469,15 @@ def generate_gate_results(
468
469
  else:
469
470
  df_g_final = DataFrame(
470
471
  {
471
- "Avg. gate fidelity": [
472
+ "average_gate_fidelity": [
472
473
  reporting.number_to_str(df_g.values[i, 0].copy(), precision=5)
473
474
  for i in range(len(dataset.attrs["gate_labels"][identifier]))
474
475
  ],
475
- "Diamond distance": [
476
+ "diamond_distance": [
476
477
  reporting.number_to_str(df_g.values[i, 1].copy(), precision=5)
477
478
  for i in range(len(dataset.attrs["gate_labels"][identifier]))
478
479
  ],
479
- "Unitarity": [
480
+ "unitarity": [
480
481
  reporting.number_to_str(reporting.unitarities(X_opt_pp)[i], precision=5)
481
482
  for i in range(len(dataset.attrs["gate_labels"][identifier]))
482
483
  ],
@@ -574,11 +575,12 @@ def pandas_results_to_observations(
574
575
  """
575
576
  observation_list: list[BenchmarkObservation] = []
576
577
  err = dataset.attrs["bootstrap_samples"] > 0
578
+ qubits = "__".join([f"QB{i+1}" for i in ast.literal_eval(identifier.string_identifier)])
577
579
  for idx, gate_label in enumerate(dataset.attrs["gate_labels"][identifier.string_identifier].values()):
578
580
  observation_list.extend(
579
581
  [
580
582
  BenchmarkObservation(
581
- name=f"{name} - {gate_label}",
583
+ name=f"{name}_{gate_label}:crosstalk_components={qubits}",
582
584
  identifier=identifier,
583
585
  value=result_str_to_floats(df_g[name].iloc[idx], err)[0],
584
586
  uncertainty=result_str_to_floats(df_g[name].iloc[idx], err)[1],
@@ -754,6 +756,7 @@ def mgst_analysis(run: BenchmarkRunResult) -> BenchmarkAnalysisResult:
754
756
  dataset = run.dataset
755
757
  pdim = dataset.attrs["pdim"]
756
758
  plots = {}
759
+ observations = []
757
760
  for i, qubit_layout in enumerate(dataset.attrs["qubit_layouts"]):
758
761
  identifier = BenchmarkObservationIdentifier(qubit_layout).string_identifier
759
762
 
@@ -820,8 +823,10 @@ def mgst_analysis(run: BenchmarkRunResult) -> BenchmarkAnalysisResult:
820
823
  plots[f"layout_{qubit_layout}_gate_metrics"] = fig_g
821
824
  plots[f"layout_{qubit_layout}_other_metrics"] = fig_o
822
825
 
823
- observation_list = pandas_results_to_observations(
824
- dataset, df_g_final, df_o_final, BenchmarkObservationIdentifier(qubit_layout)
826
+ observations.extend(
827
+ pandas_results_to_observations(
828
+ dataset, df_g_final, df_o_final, BenchmarkObservationIdentifier(qubit_layout)
829
+ )
825
830
  )
826
831
 
827
832
  dataset.attrs["results_layout_" + identifier].update(
@@ -865,4 +870,4 @@ def mgst_analysis(run: BenchmarkRunResult) -> BenchmarkAnalysisResult:
865
870
  )
866
871
  plt.close("all")
867
872
 
868
- return BenchmarkAnalysisResult(dataset=dataset, observations=observation_list, plots=plots)
873
+ return BenchmarkAnalysisResult(dataset=dataset, observations=observations, plots=plots)
@@ -851,6 +851,7 @@ class GHZBenchmark(Benchmark):
851
851
  self.shots,
852
852
  self.calset_id,
853
853
  max_gates_per_batch=self.max_gates_per_batch,
854
+ max_circuits_per_batch=self.configuration.max_circuits_per_batch,
854
855
  circuit_compilation_options=self.circuit_compilation_options,
855
856
  )
856
857
 
@@ -475,23 +475,24 @@ def qscore_analysis(run: BenchmarkRunResult) -> BenchmarkAnalysisResult:
475
475
  qcvv_logger.info(
476
476
  f"Q-Score = {num_nodes} failed with approximation ratio (Beta) {approximation_ratio:.4f} < 0.2; Avg MaxCut size: {np.mean(cut_sizes_list):.4f}"
477
477
  )
478
+ qubit_indices = dataset.attrs[num_nodes]["qubit_set"][0]
478
479
  observations.extend(
479
480
  [
480
481
  BenchmarkObservation(
481
482
  name="mean_approximation_ratio",
482
483
  value=approximation_ratio,
483
484
  uncertainty=std_of_approximation_ratio,
484
- identifier=BenchmarkObservationIdentifier(num_nodes),
485
+ identifier=BenchmarkObservationIdentifier(qubit_indices),
485
486
  ),
486
487
  BenchmarkObservation(
487
488
  name="is_succesful",
488
489
  value=str(success),
489
- identifier=BenchmarkObservationIdentifier(num_nodes),
490
+ identifier=BenchmarkObservationIdentifier(qubit_indices),
490
491
  ),
491
492
  BenchmarkObservation(
492
493
  name="Qscore_result",
493
494
  value=qscore if success else 1,
494
- identifier=BenchmarkObservationIdentifier(num_nodes),
495
+ identifier=BenchmarkObservationIdentifier(qubit_indices),
495
496
  ),
496
497
  ]
497
498
  )
@@ -751,7 +752,7 @@ class QScoreBenchmark(Benchmark):
751
752
  else:
752
753
  nqubits = self.backend.num_qubits
753
754
 
754
- if self.custom_qubits_array is not None:
755
+ if self.choose_qubits_routine == "custom":
755
756
  if self.use_virtual_node:
756
757
  node_numbers = [len(qubit_layout) + 1 for qubit_layout in self.custom_qubits_array]
757
758
  else:
@@ -765,7 +766,7 @@ class QScoreBenchmark(Benchmark):
765
766
  max_num_nodes = nqubits
766
767
  else:
767
768
  max_num_nodes = self.max_num_nodes
768
- node_numbers = range(self.min_num_nodes, max_num_nodes + 1)
769
+ node_numbers = list(range(self.min_num_nodes, max_num_nodes + 1))
769
770
 
770
771
  dataset.attrs.update({"max_num_nodes": node_numbers[-1]})
771
772
  dataset.attrs.update({"node_numbers": node_numbers})
@@ -881,6 +882,7 @@ class QScoreBenchmark(Benchmark):
881
882
  self.shots,
882
883
  self.calset_id,
883
884
  max_gates_per_batch=self.max_gates_per_batch,
885
+ max_circuits_per_batch=self.configuration.max_circuits_per_batch,
884
886
  circuit_compilation_options=self.circuit_compilation_options,
885
887
  )
886
888
  qc_transpiled_list.append(transpiled_qc)
@@ -565,6 +565,7 @@ class CLOPSBenchmark(Benchmark):
565
565
  self.num_shots,
566
566
  self.calset_id,
567
567
  max_gates_per_batch=self.max_gates_per_batch,
568
+ max_circuits_per_batch=self.configuration.max_circuits_per_batch,
568
569
  circuit_compilation_options=self.circuit_compilation_options,
569
570
  )
570
571
 
@@ -26,7 +26,7 @@ from mthree.classes import QuasiCollection
26
26
  from mthree.utils import expval
27
27
  import numpy as np
28
28
  from qiskit.circuit.library import QuantumVolume
29
- from qiskit_aer import Aer
29
+ from qiskit_aer import StatevectorSimulator
30
30
  import xarray as xr
31
31
 
32
32
  from iqm.benchmarks.benchmark import BenchmarkConfigurationBase
@@ -119,7 +119,7 @@ def get_ideal_heavy_outputs(
119
119
  """
120
120
  simulable_circuits = deepcopy(qc_list)
121
121
  ideal_heavy_outputs: List[Dict[str, float]] = []
122
- ideal_simulator = Aer.get_backend("statevector_simulator")
122
+ ideal_simulator = StatevectorSimulator()
123
123
 
124
124
  # Separate according to sorted indices
125
125
  circuit_batches = {
@@ -698,6 +698,7 @@ class QuantumVolumeBenchmark(Benchmark):
698
698
  self.shots,
699
699
  self.calset_id,
700
700
  max_gates_per_batch=self.max_gates_per_batch,
701
+ max_circuits_per_batch=self.configuration.max_circuits_per_batch,
701
702
  circuit_compilation_options=self.circuit_compilation_options,
702
703
  )
703
704
  # qcvv_logger.info(
@@ -125,13 +125,18 @@ def clifford_rb_analysis(run: BenchmarkRunResult) -> BenchmarkAnalysisResult:
125
125
  fidelity = rb_fit_results.params["fidelity_per_clifford"]
126
126
 
127
127
  processed_results = {
128
- "avg_gate_fidelity": {"value": fidelity.value, "uncertainty": fidelity.stderr},
128
+ "average_gate_fidelity": {"value": fidelity.value, "uncertainty": fidelity.stderr},
129
129
  }
130
130
 
131
131
  if len(qubits) == 1:
132
132
  fidelity_native = rb_fit_results.params["fidelity_per_native_sqg"]
133
133
  processed_results.update(
134
- {"avg_native_gate_fidelity": {"value": fidelity_native.value, "uncertainty": fidelity_native.stderr}}
134
+ {
135
+ "average_native_gate_fidelity": {
136
+ "value": fidelity_native.value,
137
+ "uncertainty": fidelity_native.stderr,
138
+ }
139
+ }
135
140
  )
136
141
 
137
142
  dataset.attrs[qubits_idx].update(
@@ -140,8 +145,8 @@ def clifford_rb_analysis(run: BenchmarkRunResult) -> BenchmarkAnalysisResult:
140
145
  "fit_amplitude": {"value": popt["amplitude"].value, "uncertainty": popt["amplitude"].stderr},
141
146
  "fit_offset": {"value": popt["offset"].value, "uncertainty": popt["offset"].stderr},
142
147
  "fidelities": fidelities[str(qubits)],
143
- "avg_fidelities_nominal_values": average_fidelities,
144
- "avg_fidelities_stderr": stddevs_from_mean,
148
+ "average_fidelities_nominal_values": average_fidelities,
149
+ "average_fidelities_stderr": stddevs_from_mean,
145
150
  "fitting_method": str(rb_fit_results.method),
146
151
  "num_function_evals": int(rb_fit_results.nfev),
147
152
  "data_points": int(rb_fit_results.ndata),
@@ -294,6 +299,7 @@ class CliffordRandomizedBenchmarking(Benchmark):
294
299
  self.shots,
295
300
  self.calset_id,
296
301
  self.max_gates_per_batch,
302
+ self.configuration.max_circuits_per_batch,
297
303
  )
298
304
  )
299
305
  qcvv_logger.info(f"Job for sequence length {seq_length} submitted successfully!")
@@ -353,6 +359,7 @@ class CliffordRandomizedBenchmarking(Benchmark):
353
359
  self.backend,
354
360
  self.calset_id,
355
361
  max_gates_per_batch=self.max_gates_per_batch,
362
+ max_circuits_per_batch=self.configuration.max_circuits_per_batch,
356
363
  circuit_compilation_options=self.circuit_compilation_options,
357
364
  )
358
365
  )