iqm-benchmarks 2.38__tar.gz → 2.40__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.
Files changed (108) hide show
  1. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/CHANGELOG.rst +8 -0
  2. {iqm_benchmarks-2.38/src/iqm_benchmarks.egg-info → iqm_benchmarks-2.40}/PKG-INFO +2 -2
  3. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/pyproject.toml +1 -1
  4. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/requirements.txt +50 -50
  5. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/utils.py +3 -1
  6. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40/src/iqm_benchmarks.egg-info}/PKG-INFO +2 -2
  7. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm_benchmarks.egg-info/requires.txt +1 -1
  8. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/tests/test_ghz.py +4 -2
  9. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/tests/test_graph_states.py +8 -4
  10. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/tests/test_gst.py +2 -1
  11. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/tests/test_qscore.py +3 -2
  12. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/tests/test_qv.py +2 -1
  13. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/tests/test_rb.py +5 -6
  14. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/tests/unit/test_backend_transpilation.py +72 -9
  15. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/tests/unit/test_submit_execute.py +12 -29
  16. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/.github/workflows/main.yml +0 -0
  17. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/.github/workflows/publish.yml +0 -0
  18. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/.github/workflows/tag_and_release.yml +0 -0
  19. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/.gitignore +0 -0
  20. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/LICENSE +0 -0
  21. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/MANIFEST.in +0 -0
  22. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/README.md +0 -0
  23. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/benchmark_runner.py +0 -0
  24. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docbuild +0 -0
  25. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/API.rst +0 -0
  26. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/Makefile +0 -0
  27. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/_static/images/favicon.ico +0 -0
  28. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/_static/images/logo.png +0 -0
  29. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/_templates/autosummary-class-template.rst +0 -0
  30. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/_templates/autosummary-module-template.rst +0 -0
  31. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/changelog.rst +0 -0
  32. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/conf.py +0 -0
  33. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/development/development.rst +0 -0
  34. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/development/generate_2qubit_cliffords.ipynb +0 -0
  35. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/development/how_to_make_your_own_benchmark.ipynb +0 -0
  36. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/devices/devices.rst +0 -0
  37. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/devices/spark.ipynb +0 -0
  38. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/devices/star.ipynb +0 -0
  39. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/examples/example_clifford_rb.ipynb +0 -0
  40. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/examples/example_clops.ipynb +0 -0
  41. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/examples/example_eplg.ipynb +0 -0
  42. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/examples/example_experiment_all.ipynb +0 -0
  43. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/examples/example_ghz.ipynb +0 -0
  44. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/examples/example_graphstate.ipynb +0 -0
  45. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/examples/example_gst.ipynb +0 -0
  46. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/examples/example_interleaved_rb.ipynb +0 -0
  47. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/examples/example_mirror_rb.ipynb +0 -0
  48. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/examples/example_qscore.ipynb +0 -0
  49. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/examples/example_quantum_volume.ipynb +0 -0
  50. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/examples/examples.rst +0 -0
  51. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/index.rst +0 -0
  52. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/license.rst +0 -0
  53. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/docs/readme.md +0 -0
  54. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/format +0 -0
  55. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/scheduled_experiments/adonis/__init__.py +0 -0
  56. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/scheduled_experiments/adonis/weekly.py +0 -0
  57. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/setup.cfg +0 -0
  58. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/__init__.py +0 -0
  59. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/benchmark.py +0 -0
  60. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/benchmark_definition.py +0 -0
  61. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/circuit_containers.py +0 -0
  62. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/compressive_gst/__init__.py +0 -0
  63. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/compressive_gst/compressive_gst.py +0 -0
  64. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/compressive_gst/gst_analysis.py +0 -0
  65. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/entanglement/__init__.py +0 -0
  66. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/entanglement/ghz.py +0 -0
  67. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/entanglement/graph_states.py +0 -0
  68. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/logging_config.py +0 -0
  69. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/optimization/__init__.py +0 -0
  70. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/optimization/qscore.py +0 -0
  71. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/quantum_volume/__init__.py +0 -0
  72. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/quantum_volume/clops.py +0 -0
  73. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/quantum_volume/quantum_volume.py +0 -0
  74. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/randomized_benchmarking/__init__.py +0 -0
  75. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/randomized_benchmarking/clifford_1q.pkl +0 -0
  76. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/randomized_benchmarking/clifford_2q.pkl +0 -0
  77. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/randomized_benchmarking/clifford_rb/__init__.py +0 -0
  78. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/randomized_benchmarking/clifford_rb/clifford_rb.py +0 -0
  79. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/randomized_benchmarking/direct_rb/__init__.py +0 -0
  80. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/randomized_benchmarking/direct_rb/direct_rb.py +0 -0
  81. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/randomized_benchmarking/eplg/__init__.py +0 -0
  82. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/randomized_benchmarking/eplg/eplg.py +0 -0
  83. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/randomized_benchmarking/interleaved_rb/__init__.py +0 -0
  84. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/randomized_benchmarking/interleaved_rb/interleaved_rb.py +0 -0
  85. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/randomized_benchmarking/mirror_rb/__init__.py +0 -0
  86. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/randomized_benchmarking/mirror_rb/mirror_rb.py +0 -0
  87. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/randomized_benchmarking/multi_lmfit.py +0 -0
  88. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/randomized_benchmarking/randomized_benchmarking_common.py +0 -0
  89. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/readout_mitigation.py +0 -0
  90. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/utils_plots.py +0 -0
  91. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm/benchmarks/utils_shadows.py +0 -0
  92. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm_benchmarks.egg-info/SOURCES.txt +0 -0
  93. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm_benchmarks.egg-info/dependency_links.txt +0 -0
  94. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/iqm_benchmarks.egg-info/top_level.txt +0 -0
  95. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/mGST/LICENSE +0 -0
  96. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/mGST/README.md +0 -0
  97. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/mGST/additional_fns.py +0 -0
  98. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/mGST/algorithm.py +0 -0
  99. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/mGST/compatibility.py +0 -0
  100. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/mGST/low_level_jit.py +0 -0
  101. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/mGST/optimization.py +0 -0
  102. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/mGST/qiskit_interface.py +0 -0
  103. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/mGST/reporting/figure_gen.py +0 -0
  104. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/src/mGST/reporting/reporting.py +0 -0
  105. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/tag-from-pipeline.sh +0 -0
  106. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/test +0 -0
  107. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/tests/unit/test_benchmark_circuit.py +0 -0
  108. {iqm_benchmarks-2.38 → iqm_benchmarks-2.40}/update-requirements.py +0 -0
@@ -2,6 +2,14 @@
2
2
  Changelog
3
3
  =========
4
4
 
5
+ Version 2.40
6
+ ============
7
+ * Added optimise_single_qubit_gates option for crystal processors.
8
+
9
+ Version 2.39
10
+ ============
11
+ * Relax `numba` dependency to allow easier interoperability with other client libraries.
12
+
5
13
  Version 2.38
6
14
  ============
7
15
  * Update `iqm-client` dependency to `29.0+`.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iqm-benchmarks
3
- Version: 2.38
3
+ Version: 2.40
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
@@ -35,7 +35,7 @@ Requires-Dist: pip-licenses==5.0.0; extra == "cicd"
35
35
  Provides-Extra: examples
36
36
  Requires-Dist: notebook==7.2.1; extra == "examples"
37
37
  Provides-Extra: mgst
38
- Requires-Dist: numba==0.60.0; extra == "mgst"
38
+ Requires-Dist: numba>=0.61.0; extra == "mgst"
39
39
  Requires-Dist: pygsti[diamond_norm]==0.9.12.3; extra == "mgst"
40
40
  Requires-Dist: tqdm==4.66.5; extra == "mgst"
41
41
  Provides-Extra: test
@@ -70,7 +70,7 @@ examples = [
70
70
  ]
71
71
 
72
72
  mgst = [
73
- "numba == 0.60.0",
73
+ "numba >= 0.61.0",
74
74
  "pygsti[diamond_norm] == 0.9.12.3",
75
75
  "tqdm == 4.66.5",
76
76
  ]
@@ -824,18 +824,18 @@ ipykernel==6.29.5 \
824
824
  ipython==8.31.0 \
825
825
  --hash=sha256:46ec58f8d3d076a61d128fe517a51eb730e3aaf0c184ea8c17d16e366660c6a6 \
826
826
  --hash=sha256:b6a2274606bec6166405ff05e54932ed6e5cfecaca1fc05f2cacde7bb074d70b
827
- iqm-client==29.0.0 \
828
- --hash=sha256:7b050f37ffa0b5807b62d32919119ebfa01d76b1fb2ca25f26211ec229f8686b \
829
- --hash=sha256:fc91e50f3ad0f619700182f28e561526af27285708f86eeef49a912961fa84a0
827
+ iqm-client==29.3.0 \
828
+ --hash=sha256:4fc8494056ff03babf7fda3826fefd087ce24d58cd1101455f0c4819f68ced20 \
829
+ --hash=sha256:e553e97ab23a150ae94908ee19cbea86e46814fe48085c05596fe90db72d2c6a
830
830
  iqm-data-definitions==2.13 \
831
831
  --hash=sha256:0de52e2a1ffdc63375b13825b28170d0868b12cda011e782b9348bb143083a0e \
832
832
  --hash=sha256:be6a71ab2e5b04c6e6c4d53094c89c088cc4b6e8e293f412f9fa937cf8dc980c
833
833
  iqm-exa-common==26.24.0 \
834
834
  --hash=sha256:92e880913589015b78baf8e0267f82cadc8a52cb090c8e7b5226d1d9a8ddbd26 \
835
835
  --hash=sha256:fc3edd89b501961b3ad034f4c37983bb879735626df4f342ea0edcab3bce8182
836
- iqm-station-control-client==9.3.0 \
837
- --hash=sha256:1f21e12d3160100f5ba82bb737ed08f7faa41625f87c99db6c940f7069420598 \
838
- --hash=sha256:557889329d25cf2953cdbdaf24b6079f542e014d2ae5e9aa2ceb877edd097c76
836
+ iqm-station-control-client==9.4.0 \
837
+ --hash=sha256:1cd6262ce8b84a6ebd7eeb763e752962d47d23271e47dde2f6bcdfbf75add36d \
838
+ --hash=sha256:e893ea59bdbbb1a348e386a501e898417a202d21621ca3a00e57d11ae1f5b927
839
839
  isoduration==20.11.0 \
840
840
  --hash=sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9 \
841
841
  --hash=sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042
@@ -974,28 +974,28 @@ kiwisolver==1.4.8 \
974
974
  --hash=sha256:eb158fe28ca0c29f2260cca8c43005329ad58452c36f0edf298204de32a9a3ed \
975
975
  --hash=sha256:ed33ca2002a779a2e20eeb06aea7721b6e47f2d4b8a8ece979d8ba9e2a167e34 \
976
976
  --hash=sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794
977
- llvmlite==0.43.0 \
978
- --hash=sha256:14f0e4bf2fd2d9a75a3534111e8ebeb08eda2f33e9bdd6dfa13282afacdde0ed \
979
- --hash=sha256:18e9953c748b105668487b7c81a3e97b046d8abf95c4ddc0cd3c94f4e4651ae8 \
980
- --hash=sha256:35d80d61d0cda2d767f72de99450766250560399edc309da16937b93d3b676e7 \
981
- --hash=sha256:3e8d0618cb9bfe40ac38a9633f2493d4d4e9fcc2f438d39a4e854f39cc0f5f98 \
982
- --hash=sha256:47e147cdda9037f94b399bf03bfd8a6b6b1f2f90be94a454e3386f006455a9b4 \
983
- --hash=sha256:6912a87782acdff6eb8bf01675ed01d60ca1f2551f8176a300a886f09e836a6a \
984
- --hash=sha256:6d4fd101f571a31acb1559ae1af30f30b1dc4b3186669f92ad780e17c81e91bc \
985
- --hash=sha256:74937acd22dc11b33946b67dca7680e6d103d6e90eeaaaf932603bec6fe7b03a \
986
- --hash=sha256:7a2872ee80dcf6b5dbdc838763d26554c2a18aa833d31a2635bff16aafefb9c9 \
987
- --hash=sha256:7d434ec7e2ce3cc8f452d1cd9a28591745de022f931d67be688a737320dfcead \
988
- --hash=sha256:977525a1e5f4059316b183fb4fd34fa858c9eade31f165427a3977c95e3ee749 \
989
- --hash=sha256:9cd2a7376f7b3367019b664c21f0c61766219faa3b03731113ead75107f3b66c \
990
- --hash=sha256:a289af9a1687c6cf463478f0fa8e8aa3b6fb813317b0d70bf1ed0759eab6f761 \
991
- --hash=sha256:ae2b5b5c3ef67354824fb75517c8db5fbe93bc02cd9671f3c62271626bc041d5 \
992
- --hash=sha256:bc9efc739cc6ed760f795806f67889923f7274276f0eb45092a1473e40d9b867 \
993
- --hash=sha256:c1da416ab53e4f7f3bc8d4eeba36d801cc1894b9fbfbf2022b29b6bad34a7df2 \
994
- --hash=sha256:d5bd550001d26450bd90777736c69d68c487d17bf371438f975229b2b8241a91 \
995
- --hash=sha256:df6509e1507ca0760787a199d19439cc887bfd82226f5af746d6977bd9f66844 \
996
- --hash=sha256:e0a9a1a39d4bf3517f2af9d23d479b4175ead205c592ceeb8b89af48a327ea57 \
997
- --hash=sha256:eccce86bba940bae0d8d48ed925f21dbb813519169246e2ab292b5092aba121f \
998
- --hash=sha256:f99b600aa7f65235a5a05d0b9a9f31150c390f31261f2a0ba678e26823ec38f7
977
+ llvmlite==0.44.0 \
978
+ --hash=sha256:07667d66a5d150abed9157ab6c0b9393c9356f229784a4385c02f99e94fc94d4 \
979
+ --hash=sha256:1d671a56acf725bf1b531d5ef76b86660a5ab8ef19bb6a46064a705c6ca80aad \
980
+ --hash=sha256:2fb7c4f2fb86cbae6dca3db9ab203eeea0e22d73b99bc2341cdf9de93612e930 \
981
+ --hash=sha256:319bddd44e5f71ae2689859b7203080716448a3cd1128fb144fe5c055219d516 \
982
+ --hash=sha256:40526fb5e313d7b96bda4cbb2c85cd5374e04d80732dd36a282d72a560bb6408 \
983
+ --hash=sha256:41e3839150db4330e1b2716c0be3b5c4672525b4c9005e17c7597f835f351ce2 \
984
+ --hash=sha256:46224058b13c96af1365290bdfebe9a6264ae62fb79b2b55693deed11657a8bf \
985
+ --hash=sha256:5f79a728e0435493611c9f405168682bb75ffd1fbe6fc360733b850c80a026db \
986
+ --hash=sha256:7202b678cdf904823c764ee0fe2dfe38a76981f4c1e51715b4cb5abb6cf1d9e8 \
987
+ --hash=sha256:9c58867118bad04a0bb22a2e0068c693719658105e40009ffe95c7000fcde88e \
988
+ --hash=sha256:9fbadbfba8422123bab5535b293da1cf72f9f478a65645ecd73e781f962ca614 \
989
+ --hash=sha256:aa0097052c32bf721a4efc03bd109d335dfa57d9bffb3d4c24cc680711b8b4fc \
990
+ --hash=sha256:ace564d9fa44bb91eb6e6d8e7754977783c68e90a471ea7ce913bff30bd62427 \
991
+ --hash=sha256:c0143a5ef336da14deaa8ec26c5449ad5b6a2b564df82fcef4be040b9cacfea9 \
992
+ --hash=sha256:c5d22c3bfc842668168a786af4205ec8e3ad29fb1bc03fd11fd48460d0df64c1 \
993
+ --hash=sha256:cccf8eb28f24840f2689fb1a45f9c0f7e582dd24e088dcf96e424834af11f791 \
994
+ --hash=sha256:d752f89e31b66db6f8da06df8b39f9b91e78c5feea1bf9e8c1fba1d1c24c065d \
995
+ --hash=sha256:d8489634d43c20cd0ad71330dde1d5bc7b9966937a263ff1ec1cebb90dc50955 \
996
+ --hash=sha256:eae7e2d4ca8f88f89d315b48c6b741dcb925d6a1042da694aa16ab3dd4cbd3a1 \
997
+ --hash=sha256:eed7d5f29136bda63b6d7804c279e2b72e08c952b7c5df61f45db408e0ee52f3 \
998
+ --hash=sha256:f01a394e9c9b7b1d4e63c327b096d10f6f0ed149ef53d38a09b3749dcf8c9610
999
999
  lmfit==1.3.3 \
1000
1000
  --hash=sha256:73321e6b881f2f686235721a7dfc02af6bb0f030a25efeb66638f62b1c6053a1 \
1001
1001
  --hash=sha256:a9e9ec7d0d0ec962cc6c078ad1ec6c8311d3ac0e5f0947a00a91f5509dacc2b2
@@ -1210,28 +1210,28 @@ notebook==7.2.1 \
1210
1210
  notebook-shim==0.2.4 \
1211
1211
  --hash=sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef \
1212
1212
  --hash=sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb
1213
- numba==0.60.0 \
1214
- --hash=sha256:01ef4cd7d83abe087d644eaa3d95831b777aa21d441a23703d649e06b8e06b74 \
1215
- --hash=sha256:0b983bd6ad82fe868493012487f34eae8bf7dd94654951404114f23c3466d34b \
1216
- --hash=sha256:0ebaa91538e996f708f1ab30ef4d3ddc344b64b5227b67a57aa74f401bb68b9d \
1217
- --hash=sha256:1527dc578b95c7c4ff248792ec33d097ba6bef9eda466c948b68dfc995c25781 \
1218
- --hash=sha256:159e618ef213fba758837f9837fb402bbe65326e60ba0633dbe6c7f274d42c1b \
1219
- --hash=sha256:19407ced081d7e2e4b8d8c36aa57b7452e0283871c296e12d798852bc7d7f198 \
1220
- --hash=sha256:3031547a015710140e8c87226b4cfe927cac199835e5bf7d4fe5cb64e814e3ab \
1221
- --hash=sha256:38d6ea4c1f56417076ecf8fc327c831ae793282e0ff51080c5094cb726507b1c \
1222
- --hash=sha256:3fb02b344a2a80efa6f677aa5c40cd5dd452e1b35f8d1c2af0dfd9ada9978e4b \
1223
- --hash=sha256:4142d7ac0210cc86432b818338a2bc368dc773a2f5cf1e32ff7c5b378bd63ee8 \
1224
- --hash=sha256:5d761de835cd38fb400d2c26bb103a2726f548dc30368853121d66201672e651 \
1225
- --hash=sha256:5df6158e5584eece5fc83294b949fd30b9f1125df7708862205217e068aabf16 \
1226
- --hash=sha256:5f4fde652ea604ea3c86508a3fb31556a6157b2c76c8b51b1d45eb40c8598703 \
1227
- --hash=sha256:62908d29fb6a3229c242e981ca27e32a6e606cc253fc9e8faeb0e48760de241e \
1228
- --hash=sha256:819a3dfd4630d95fd574036f99e47212a1af41cbcb019bf8afac63ff56834449 \
1229
- --hash=sha256:a17b70fc9e380ee29c42717e8cc0bfaa5556c416d94f9aa96ba13acb41bdece8 \
1230
- --hash=sha256:c151748cd269ddeab66334bd754817ffc0cabd9433acb0f551697e5151917d25 \
1231
- --hash=sha256:cac02c041e9b5bc8cf8f2034ff6f0dbafccd1ae9590dc146b3a02a45e53af4e2 \
1232
- --hash=sha256:d7da4098db31182fc5ffe4bc42c6f24cd7d1cb8a14b59fd755bfee32e34b8404 \
1233
- --hash=sha256:f75262e8fe7fa96db1dca93d53a194a38c46da28b112b8a4aca168f0df860347 \
1234
- --hash=sha256:fe0b28abb8d70f8160798f4de9d486143200f34458d34c4a214114e445d7124e
1213
+ numba==0.61.2 \
1214
+ --hash=sha256:34fba9406078bac7ab052efbf0d13939426c753ad72946baaa5bf9ae0ebb8dd2 \
1215
+ --hash=sha256:3945615cd73c2c7eba2a85ccc9c1730c21cd3958bfcf5a44302abae0fb07bb60 \
1216
+ --hash=sha256:3a10a8fc9afac40b1eac55717cece1b8b1ac0b946f5065c89e00bde646b5b154 \
1217
+ --hash=sha256:48a53a3de8f8793526cbe330f2a39fe9a6638efcbf11bd63f3d2f9757ae345cd \
1218
+ --hash=sha256:49c980e4171948ffebf6b9a2520ea81feed113c1f4890747ba7f59e74be84b1b \
1219
+ --hash=sha256:4ddce10009bc097b080fc96876d14c051cc0c7679e99de3e0af59014dab7dfe8 \
1220
+ --hash=sha256:59321215e2e0ac5fa928a8020ab00b8e57cda8a97384963ac0dfa4d4e6aa54e7 \
1221
+ --hash=sha256:5b1bb509d01f23d70325d3a5a0e237cbc9544dd50e50588bc581ba860c213546 \
1222
+ --hash=sha256:5f154aaea625fb32cfbe3b80c5456d514d416fcdf79733dd69c0df3a11348e9e \
1223
+ --hash=sha256:76bcec9f46259cedf888041b9886e257ae101c6268261b19fda8cfbc52bec9d1 \
1224
+ --hash=sha256:7d3bcada3c9afba3bed413fba45845f2fb9cd0d2b27dd58a1be90257e293d140 \
1225
+ --hash=sha256:8750ee147940a6637b80ecf7f95062185ad8726c8c28a2295b8ec1160a196f7d \
1226
+ --hash=sha256:97cf4f12c728cf77c9c1d7c23707e4d8fb4632b46275f8f3397de33e5877af18 \
1227
+ --hash=sha256:ae45830b129c6137294093b269ef0a22998ccc27bf7cf096ab8dcf7bca8946f9 \
1228
+ --hash=sha256:ae8c7a522c26215d5f62ebec436e3d341f7f590079245a2f1008dfd498cc1642 \
1229
+ --hash=sha256:bbfdf4eca202cebade0b7d43896978e146f39398909a42941c9303f82f403a18 \
1230
+ --hash=sha256:bd1e74609855aa43661edffca37346e4e8462f6903889917e9f41db40907daa2 \
1231
+ --hash=sha256:bdbca73ad81fa196bd53dc12e3aaf1564ae036e0c125f237c7644fe64a4928ab \
1232
+ --hash=sha256:cf9f9fc00d6eca0c23fc840817ce9f439b9f03c8f03d6246c0e7f0cb15b7162a \
1233
+ --hash=sha256:ea0247617edcb5dd61f6106a56255baab031acc4257bddaeddb3a1003b4ca3fd \
1234
+ --hash=sha256:efd3db391df53aaa5cfbee189b6c910a5b471488749fd6606c3f33fc984c2ae2
1235
1235
  numpy==1.26.4 \
1236
1236
  --hash=sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b \
1237
1237
  --hash=sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818 \
@@ -40,7 +40,7 @@ import xarray as xr
40
40
  from iqm.benchmarks.logging_config import qcvv_logger
41
41
  from iqm.iqm_client.models import CircuitCompilationOptions
42
42
  from iqm.qiskit_iqm import IQMCircuit as QuantumCircuit
43
- from iqm.qiskit_iqm import IQMFakeDeneb, transpile_to_IQM
43
+ from iqm.qiskit_iqm import IQMFakeDeneb, optimize_single_qubit_gates, transpile_to_IQM
44
44
  from iqm.qiskit_iqm.fake_backends.fake_adonis import IQMFakeAdonis
45
45
  from iqm.qiskit_iqm.fake_backends.fake_apollo import IQMFakeApollo
46
46
  from iqm.qiskit_iqm.iqm_backend import IQMBackendBase
@@ -575,6 +575,8 @@ def perform_backend_transpilation(
575
575
  initial_layout=qubits if aux_qc is None else None,
576
576
  routing_method=routing_method,
577
577
  )
578
+ if optimize_sqg:
579
+ transpiled = optimize_single_qubit_gates(transpiled, drop_final_rz=drop_final_rz)
578
580
  if backend.has_resonators():
579
581
  transpiled = transpile_to_IQM(
580
582
  qc, backend=backend, optimize_single_qubits=optimize_sqg, remove_final_rzs=drop_final_rz
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iqm-benchmarks
3
- Version: 2.38
3
+ Version: 2.40
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
@@ -35,7 +35,7 @@ Requires-Dist: pip-licenses==5.0.0; extra == "cicd"
35
35
  Provides-Extra: examples
36
36
  Requires-Dist: notebook==7.2.1; extra == "examples"
37
37
  Provides-Extra: mgst
38
- Requires-Dist: numba==0.60.0; extra == "mgst"
38
+ Requires-Dist: numba>=0.61.0; extra == "mgst"
39
39
  Requires-Dist: pygsti[diamond_norm]==0.9.12.3; extra == "mgst"
40
40
  Requires-Dist: tqdm==4.66.5; extra == "mgst"
41
41
  Provides-Extra: test
@@ -30,7 +30,7 @@ myst-parser<5,>=4.0.0
30
30
  notebook==7.2.1
31
31
 
32
32
  [mgst]
33
- numba==0.60.0
33
+ numba>=0.61.0
34
34
  pygsti[diamond_norm]==0.9.12.3
35
35
  tqdm==4.66.5
36
36
 
@@ -6,6 +6,7 @@ from iqm.benchmarks.entanglement.ghz import GHZBenchmark, GHZConfiguration
6
6
  from iqm.qiskit_iqm.fake_backends.fake_apollo import IQMFakeApollo
7
7
  from iqm.qiskit_iqm.fake_backends.fake_deneb import IQMFakeDeneb
8
8
 
9
+
9
10
  class TestGHZ:
10
11
  backend = IQMFakeApollo()
11
12
 
@@ -25,7 +26,7 @@ class TestGHZ:
25
26
  num_RMs=10,
26
27
  rem=False,
27
28
  mit_shots=10,
28
- use_dd = True
29
+ use_dd=True,
29
30
  )
30
31
  benchmark = GHZBenchmark(self.backend, MINIMAL_GHZ)
31
32
  benchmark.run()
@@ -70,5 +71,6 @@ class TestGHZ:
70
71
  benchmark.analyze()
71
72
  mock_fig.assert_called()
72
73
 
74
+
73
75
  class TestGHZDeneb(TestGHZ):
74
- backend = IQMFakeDeneb()
76
+ backend = IQMFakeDeneb()
@@ -4,7 +4,10 @@ from unittest.mock import patch
4
4
 
5
5
  from iqm.benchmarks.entanglement.graph_states import *
6
6
  from iqm.qiskit_iqm.fake_backends.fake_apollo import IQMFakeApollo
7
- #from iqm.qiskit_iqm.fake_backends.fake_deneb import IQMFakeDeneb
7
+
8
+
9
+ # from iqm.qiskit_iqm.fake_backends.fake_deneb import IQMFakeDeneb
10
+
8
11
 
9
12
  class TestGraphState:
10
13
  backend = IQMFakeApollo()
@@ -13,7 +16,7 @@ class TestGraphState:
13
16
  def test_state_tomo(self, mock_fig):
14
17
  MINIMAL_GRAPHSTATE = GraphStateConfiguration(
15
18
  qubits=list(range(5)),
16
- shots=2 ** 10,
19
+ shots=2**10,
17
20
  tomography="state_tomography",
18
21
  num_bootstraps=10,
19
22
  )
@@ -26,7 +29,7 @@ class TestGraphState:
26
29
  def test_shadows(self, mock_fig):
27
30
  MINIMAL_GRAPHSTATE = GraphStateConfiguration(
28
31
  qubits=list(range(5)),
29
- shots=2 ** 6,
32
+ shots=2**6,
30
33
  tomography="shadow_tomography",
31
34
  num_bootstraps=2,
32
35
  n_random_unitaries=10,
@@ -37,5 +40,6 @@ class TestGraphState:
37
40
  benchmark.analyze()
38
41
  mock_fig.assert_called()
39
42
 
43
+
40
44
  # class TestGraphStateDeneb(TestGraphState):
41
- # backend = IQMFakeDeneb()
45
+ # backend = IQMFakeDeneb()
@@ -43,5 +43,6 @@ class TestGST:
43
43
  benchmark.analyze()
44
44
  mock_fig.assert_called()
45
45
 
46
+
46
47
  class TestGSTDeneb(TestGST):
47
- backend = IQMFakeDeneb()
48
+ backend = IQMFakeDeneb()
@@ -7,7 +7,7 @@ from iqm.qiskit_iqm.fake_backends.fake_deneb import IQMFakeDeneb
7
7
 
8
8
  class TestQScore:
9
9
  backend = IQMFakeApollo()
10
- custom_qubits_array = [[0, 1, 3], [0, 1, 2, 3] , [0, 1, 2, 3, 4]]
10
+ custom_qubits_array = [[0, 1, 3], [0, 1, 2, 3], [0, 1, 2, 3, 4]]
11
11
 
12
12
  def test_qscore(self):
13
13
  EXAMPLE_QSCORE = QScoreConfiguration(
@@ -29,6 +29,7 @@ class TestQScore:
29
29
  benchmark.run()
30
30
  benchmark.analyze()
31
31
 
32
+
32
33
  class TestQScoreDeneb(TestQScore):
33
34
  backend = IQMFakeDeneb()
34
- custom_qubits_array = [[1], [1, 2], [1, 2, 3, 4], [1, 2, 3, 4, 5]]
35
+ custom_qubits_array = [[1], [1, 2], [1, 2, 3, 4], [1, 2, 3, 4, 5]]
@@ -46,5 +46,6 @@ class TestQV:
46
46
  benchmark.run()
47
47
  benchmark.analyze()
48
48
 
49
+
49
50
  class TestQVDeneb(TestQV):
50
- backend = IQMFakeDeneb()
51
+ backend = IQMFakeDeneb()
@@ -6,6 +6,7 @@ from iqm.benchmarks.randomized_benchmarking.clifford_rb.clifford_rb import (
6
6
  CliffordRandomizedBenchmarking,
7
7
  CliffordRBConfiguration,
8
8
  )
9
+ from iqm.benchmarks.randomized_benchmarking.eplg.eplg import EPLGBenchmark, EPLGConfiguration
9
10
  from iqm.benchmarks.randomized_benchmarking.interleaved_rb.interleaved_rb import (
10
11
  InterleavedRandomizedBenchmarking,
11
12
  InterleavedRBConfiguration,
@@ -14,13 +15,10 @@ from iqm.benchmarks.randomized_benchmarking.mirror_rb.mirror_rb import (
14
15
  MirrorRandomizedBenchmarking,
15
16
  MirrorRBConfiguration,
16
17
  )
17
- from iqm.benchmarks.randomized_benchmarking.eplg.eplg import (
18
- EPLGConfiguration,
19
- EPLGBenchmark,
20
- )
21
18
  from iqm.qiskit_iqm.fake_backends.fake_apollo import IQMFakeApollo
22
19
  from iqm.qiskit_iqm.fake_backends.fake_deneb import IQMFakeDeneb
23
20
 
21
+
24
22
  class TestRB:
25
23
  backend = IQMFakeApollo()
26
24
 
@@ -70,7 +68,7 @@ class TestRB:
70
68
 
71
69
  def test_eplg(self):
72
70
  EXAMPLE_EPLG = EPLGConfiguration(
73
- custom_qubits_array=[[0,1],[1,4],[4,5]],
71
+ custom_qubits_array=[[0, 1], [1, 4], [4, 5]],
74
72
  drb_depths=sorted(list(set(np.geomspace(1, 100, num=5, endpoint=True, dtype=int).tolist())), reverse=True),
75
73
  drb_circuit_samples=5,
76
74
  shots=2**8,
@@ -81,5 +79,6 @@ class TestRB:
81
79
  benchmark.run()
82
80
  benchmark.analyze()
83
81
 
82
+
84
83
  class TestRBDeneb(TestRB):
85
- backend = IQMFakeDeneb()
84
+ backend = IQMFakeDeneb()
@@ -1,10 +1,14 @@
1
1
  import unittest
2
+
2
3
  import numpy as np
3
4
  from qiskit import QuantumCircuit
4
- from iqm.qiskit_iqm import transpile_to_IQM
5
5
  from qiskit.quantum_info import Operator
6
+ from scipy.optimize import minimize
7
+
8
+ from iqm.benchmarks.utils import perform_backend_transpilation, reduce_to_active_qubits, set_coupling_map
9
+ from iqm.qiskit_iqm import transpile_to_IQM
6
10
  from iqm.qiskit_iqm.fake_backends.fake_apollo import IQMFakeApollo
7
- from iqm.benchmarks.utils import perform_backend_transpilation, set_coupling_map, reduce_to_active_qubits
11
+ from mGST.additional_fns import multikron
8
12
 
9
13
 
10
14
  class TestPerformBackendTranspilation(unittest.TestCase):
@@ -64,6 +68,63 @@ class TestPerformBackendTranspilation(unittest.TestCase):
64
68
 
65
69
  return len(active_qubits)
66
70
 
71
+ def equiv_up_to_local_z(self, op1: "Operator", op2: "Operator", atol: float = 1e-6) -> bool:
72
+ """
73
+ Check if two operators are equivalent up to local Z rotations and global phase at the beginning
74
+ or end of the circuit.
75
+
76
+ Args:
77
+ op1: First Qiskit Operator object to compare
78
+ op2: Second Qiskit Operator object to compare
79
+ atol: Absolute tolerance for numerical comparison
80
+
81
+ Returns:
82
+ bool: True if operators are equivalent up to local Z rotations
83
+ """
84
+
85
+ # First check dimensions match
86
+ if op1.dim != op2.dim:
87
+ return False
88
+
89
+ def u_rz(u: np.ndarray, angles: np.ndarray) -> np.ndarray:
90
+ """
91
+ Apply before-and-after local Z rotations and global phase to a unitary matrix.
92
+
93
+ Args:
94
+ u: Input unitary matrix
95
+ angles: Rotation angles (first is global phase, others for local Z rotations)
96
+
97
+ Returns:
98
+ np.ndarray: Modified unitary matrix
99
+ """
100
+ rz_l = multikron(np.array([np.array([[1, 0], [0, np.exp(1j * angle)]]) for angle in angles[2::2]]))
101
+ rz_r = multikron(np.array([np.array([[1, 0], [0, np.exp(1j * angle)]]) for angle in angles[1::2]]))
102
+ return np.exp(1j * angles[0]) * rz_l @ u @ rz_r
103
+
104
+ def dist_up_to_rz(angles: np.ndarray, u1: np.ndarray, u2: np.ndarray) -> float:
105
+ """
106
+ Compute the distance between two unitary matrices up to local Z rotations.
107
+
108
+ Args:
109
+ angles: Rotation angles to optimize
110
+ u1: First unitary matrix
111
+ u2: Second unitary matrix
112
+
113
+ Returns:
114
+ float: Frobenius norm of the difference between the modified matrices
115
+ """
116
+ u1_rz = u_rz(u1, angles)
117
+ return np.linalg.norm(u1_rz - u2, ord='fro')
118
+
119
+ res = minimize(
120
+ dist_up_to_rz,
121
+ x0=np.ones(2 * int(np.log2(op1.dim[0])) + 1),
122
+ args=(op1.to_matrix(), op2.to_matrix()),
123
+ method='L-BFGS-B',
124
+ )
125
+
126
+ return res.fun < atol
127
+
67
128
  def test_basic_transpilation(self):
68
129
  """Test basic transpilation functionality."""
69
130
 
@@ -73,7 +134,7 @@ class TestPerformBackendTranspilation(unittest.TestCase):
73
134
  self.qubit_layout,
74
135
  self.coupling_map,
75
136
  qiskit_optim_level=1,
76
- optimize_sqg=True,
137
+ optimize_sqg=False,
77
138
  )
78
139
 
79
140
  # Verify we get the same number of circuits back
@@ -99,8 +160,9 @@ class TestPerformBackendTranspilation(unittest.TestCase):
99
160
  reduced_qc_transp.remove_final_measurements()
100
161
  op = Operator(reduced_qc)
101
162
  op_transp = Operator(reduced_qc_transp)
102
- fidelity = np.abs(op.equiv(op_transp))
103
- self.assertGreaterEqual(fidelity, 0.9999)
163
+ self.assertTrue(
164
+ op.equiv(op_transp), f"Circuit {i} failed unitary equivalence check after transpilation"
165
+ )
104
166
 
105
167
  def test_transpilation_with_sqg_optimization(self):
106
168
  """Test with and without single-qubit gate optimization."""
@@ -126,7 +188,8 @@ class TestPerformBackendTranspilation(unittest.TestCase):
126
188
 
127
189
  # The circuits should be functionally equivalent
128
190
  for i in range(len(self.test_circuits)):
129
- # For small circuits we can check unitary equivalence
191
+ # For small circuits we can check unitary equivalence, this time up to global phase and local Z rotations
192
+ # since those are ignored in the single qubit gate optimization
130
193
  if self.test_circuits[i].num_qubits <= 3:
131
194
  reduced_qc_with = reduce_to_active_qubits(transpiled_with_opt[i])
132
195
  reduced_qc_with.remove_final_measurements()
@@ -134,8 +197,8 @@ class TestPerformBackendTranspilation(unittest.TestCase):
134
197
  reduced_qc_without.remove_final_measurements()
135
198
  op_with = Operator(reduced_qc_with)
136
199
  op_without = Operator(reduced_qc_without)
137
- fidelity = np.abs(op_with.equiv(op_without))
138
- self.assertGreaterEqual(fidelity, 0.9999)
200
+ equiv_rz = self.equiv_up_to_local_z(op_with, op_without)
201
+ self.assertTrue(equiv_rz, f"Circuit {i} failed unitary equivalence check after transpilation")
139
202
 
140
203
  def test_transpilation_with_parameter_binding(self):
141
204
  """Test transpilation with parameter binding."""
@@ -160,7 +223,7 @@ class TestPerformBackendTranspilation(unittest.TestCase):
160
223
  initial_layout=self.qubit_layout[:2], # Only need 2 qubits
161
224
  coupling_map=self.coupling_map,
162
225
  optimization_level=1,
163
- seed_transpiler=42
226
+ seed_transpiler=42,
164
227
  )
165
228
 
166
229
  # Check that the output circuit has no free parameters
@@ -1,12 +1,11 @@
1
1
  import unittest
2
- from unittest.mock import Mock, patch, call
2
+ from unittest.mock import Mock, call, patch
3
3
 
4
+ from iqm.benchmarks.utils import submit_execute
5
+ from iqm.iqm_client.models import CircuitCompilationOptions
4
6
  from iqm.qiskit_iqm import IQMCircuit as QuantumCircuit
5
7
  from iqm.qiskit_iqm.iqm_backend import IQMBackendBase
6
8
  from iqm.qiskit_iqm.iqm_job import IQMJob
7
- from iqm.iqm_client.models import CircuitCompilationOptions
8
- from iqm.benchmarks.utils import submit_execute
9
-
10
9
 
11
10
 
12
11
  class TestSubmitExecute(unittest.TestCase):
@@ -53,7 +52,7 @@ class TestSubmitExecute(unittest.TestCase):
53
52
  @patch('iqm.benchmarks.utils.qcvv_logger')
54
53
  def test_submit_execute_no_restrictions(self, mock_logger):
55
54
  """Test with no batch size restrictions."""
56
- jobs,_ = submit_execute(self.sorted_circuits, self.mock_backend, shots=1000)
55
+ jobs, _ = submit_execute(self.sorted_circuits, self.mock_backend, shots=1000)
57
56
 
58
57
  # Should return after first batch
59
58
  self.assertEqual(len(jobs), 2)
@@ -61,21 +60,14 @@ class TestSubmitExecute(unittest.TestCase):
61
60
  # Check that backend.run was called with each circuit list
62
61
  expected_calls = []
63
62
  for key in self.sorted_circuits.keys():
64
- expected_calls.append(call(
65
- self.sorted_circuits[key], shots=1000, calibration_set_id=None
66
- ))
63
+ expected_calls.append(call(self.sorted_circuits[key], shots=1000, calibration_set_id=None))
67
64
  self.mock_backend.run.assert_has_calls(expected_calls, any_order=True)
68
65
 
69
66
  @patch('iqm.benchmarks.utils.qcvv_logger')
70
67
  def test_submit_execute_max_circuits(self, mock_logger):
71
68
  """Test with max_circuits_per_batch restriction."""
72
69
 
73
- jobs, _ = submit_execute(
74
- self.sorted_circuits,
75
- self.mock_backend,
76
- shots=1000,
77
- max_circuits_per_batch=2
78
- )
70
+ jobs, _ = submit_execute(self.sorted_circuits, self.mock_backend, shots=1000, max_circuits_per_batch=2)
79
71
 
80
72
  # Check that backend.run was called with correct batches
81
73
  expected_calls = [
@@ -101,12 +93,7 @@ class TestSubmitExecute(unittest.TestCase):
101
93
 
102
94
  # Each small circuit has 5 operations, each large has 10
103
95
  # Set max_gates_per_batch to a value that will test different batch sizes
104
- jobs,_ = submit_execute(
105
- self.sorted_circuits,
106
- self.mock_backend,
107
- shots=1000,
108
- max_gates_per_batch=15
109
- )
96
+ jobs, _ = submit_execute(self.sorted_circuits, self.mock_backend, shots=1000, max_gates_per_batch=15)
110
97
 
111
98
  # For large circuits (12 operations each), batches should have 1 circuit per batch
112
99
  # For small circuits (5 operations each), batches should have 3 circuits per batch
@@ -117,8 +104,7 @@ class TestSubmitExecute(unittest.TestCase):
117
104
  actual_batch_sizes = [len(args[0]) for args, _ in self.mock_backend.run.call_args_list]
118
105
 
119
106
  # Verify we have the right number of batches
120
- self.assertEqual(len(actual_batch_sizes),
121
- len(expected_batch_sizes_large) + len(expected_batch_sizes_small))
107
+ self.assertEqual(len(actual_batch_sizes), len(expected_batch_sizes_large) + len(expected_batch_sizes_small))
122
108
 
123
109
  # Verify batch sizes match our expectations
124
110
  self.assertEqual(actual_batch_sizes[4:], expected_batch_sizes_large)
@@ -132,12 +118,8 @@ class TestSubmitExecute(unittest.TestCase):
132
118
  def test_submit_execute_both_restrictions(self, mock_logger):
133
119
  """Test with both max_gates_per_batch and max_circuits_per_batch restrictions."""
134
120
 
135
- jobs,_ = submit_execute(
136
- self.sorted_circuits,
137
- self.mock_backend,
138
- shots=1000,
139
- max_gates_per_batch=15,
140
- max_circuits_per_batch=2
121
+ jobs, _ = submit_execute(
122
+ self.sorted_circuits, self.mock_backend, shots=1000, max_gates_per_batch=15, max_circuits_per_batch=2
141
123
  )
142
124
 
143
125
  # For large circuits:
@@ -168,5 +150,6 @@ class TestSubmitExecute(unittest.TestCase):
168
150
  # Circuits per batch should not exceed max_circuits_per_batch
169
151
  self.assertLessEqual(batch_size, 2)
170
152
 
153
+
171
154
  if __name__ == '__main__':
172
- unittest.main()
155
+ unittest.main()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes