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.
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/CHANGELOG.rst +8 -0
- {iqm_benchmarks-2.24/src/iqm_benchmarks.egg-info → iqm_benchmarks-2.26}/PKG-INFO +6 -4
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/README.md +3 -2
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/requirements.txt +35 -35
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/benchmark.py +5 -1
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/compressive_gst/compressive_gst.py +26 -21
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/compressive_gst/gst_analysis.py +27 -22
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/entanglement/ghz.py +1 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/optimization/qscore.py +7 -5
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/quantum_volume/clops.py +1 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/quantum_volume/quantum_volume.py +3 -2
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/clifford_rb/clifford_rb.py +11 -4
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/interleaved_rb/interleaved_rb.py +10 -6
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/mirror_rb/mirror_rb.py +4 -3
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/randomized_benchmarking_common.py +23 -13
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/utils.py +38 -14
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26/src/iqm_benchmarks.egg-info}/PKG-INFO +6 -4
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm_benchmarks.egg-info/SOURCES.txt +2 -1
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/tests/test_gst.py +2 -1
- iqm_benchmarks-2.26/tests/unit/test_submit_execute.py +172 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/.github/workflows/main.yml +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/.github/workflows/publish.yml +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/.github/workflows/tag_and_release.yml +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/.gitignore +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/LICENSE +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/MANIFEST.in +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/benchmark_runner.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docbuild +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/API.rst +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/Makefile +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/_static/images/favicon.ico +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/_static/images/logo.png +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/_templates/autosummary-class-template.rst +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/_templates/autosummary-module-template.rst +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/changelog.rst +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/conf.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/development/development.rst +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/development/generate_2qubit_cliffords.ipynb +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/development/how_to_make_your_own_benchmark.ipynb +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/devices/devices.rst +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/devices/spark.ipynb +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/devices/star.ipynb +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/examples/example_clifford_rb.ipynb +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/examples/example_clops.ipynb +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/examples/example_experiment_all.ipynb +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/examples/example_ghz.ipynb +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/examples/example_ghz_deneb.ipynb +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/examples/example_gst.ipynb +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/examples/example_interleaved_rb.ipynb +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/examples/example_mirror_rb.ipynb +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/examples/example_qscore.ipynb +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/examples/example_quantum_volume.ipynb +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/examples/example_quantum_volume_deneb.ipynb +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/examples/examples.rst +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/index.rst +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/license.rst +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/docs/readme.md +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/format +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/pyproject.toml +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/scheduled_experiments/adonis/__init__.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/scheduled_experiments/adonis/weekly.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/setup.cfg +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/__init__.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/benchmark_definition.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/circuit_containers.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/compressive_gst/__init__.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/entanglement/__init__.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/logging_config.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/optimization/__init__.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/quantum_volume/__init__.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/__init__.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/clifford_1q.pkl +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/clifford_2q.pkl +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/clifford_rb/__init__.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/interleaved_rb/__init__.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/mirror_rb/__init__.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/multi_lmfit.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/readout_mitigation.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm_benchmarks.egg-info/dependency_links.txt +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm_benchmarks.egg-info/requires.txt +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm_benchmarks.egg-info/top_level.txt +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/mGST/LICENSE +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/mGST/README.md +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/mGST/additional_fns.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/mGST/algorithm.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/mGST/compatibility.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/mGST/low_level_jit.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/mGST/optimization.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/mGST/qiskit_interface.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/mGST/reporting/figure_gen.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/mGST/reporting/reporting.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/tag-from-pipeline.sh +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/test +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/tests/test_ghz.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/tests/test_qscore.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/tests/test_qv.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/tests/test_rb.py +0 -0
- {iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/tests/unit/test_benchmark_circuit.py +0 -0
- {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.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: iqm-benchmarks
|
|
3
|
-
Version: 2.
|
|
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=
|
|
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
|
-
|
|
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=
|
|
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
|
-
|
|
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.
|
|
933
|
-
--hash=sha256:
|
|
934
|
-
--hash=sha256:
|
|
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.
|
|
1509
|
-
--hash=sha256:
|
|
1510
|
-
--hash=sha256:
|
|
1511
|
-
--hash=sha256:
|
|
1512
|
-
--hash=sha256:
|
|
1513
|
-
--hash=sha256:
|
|
1514
|
-
--hash=sha256:
|
|
1515
|
-
--hash=sha256:
|
|
1516
|
-
--hash=sha256:
|
|
1517
|
-
--hash=sha256:
|
|
1518
|
-
--hash=sha256:
|
|
1519
|
-
--hash=sha256:
|
|
1520
|
-
--hash=sha256:
|
|
1521
|
-
--hash=sha256:
|
|
1522
|
-
--hash=sha256:
|
|
1523
|
-
--hash=sha256:
|
|
1524
|
-
--hash=sha256:
|
|
1525
|
-
--hash=sha256:
|
|
1526
|
-
--hash=sha256:
|
|
1527
|
-
--hash=sha256:
|
|
1528
|
-
--hash=sha256:
|
|
1529
|
-
--hash=sha256:
|
|
1530
|
-
--hash=sha256:
|
|
1531
|
-
--hash=sha256:
|
|
1532
|
-
--hash=sha256:
|
|
1533
|
-
--hash=sha256:
|
|
1534
|
-
--hash=sha256:
|
|
1535
|
-
--hash=sha256:
|
|
1536
|
-
--hash=sha256:
|
|
1537
|
-
--hash=sha256:
|
|
1538
|
-
--hash=sha256:
|
|
1539
|
-
--hash=sha256:
|
|
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
|
-
|
|
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"
|
{iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/compressive_gst/compressive_gst.py
RENAMED
|
@@ -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
|
-
|
|
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(
|
|
167
|
+
circ_parallel = QuantumCircuit(len(backend_qubits), len(set(all_qubits)))
|
|
165
168
|
clbits = np.arange(self.num_qubits)
|
|
166
|
-
for qubit_layout in
|
|
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=
|
|
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. "
|
|
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. "
|
|
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", "
|
|
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 = ["
|
|
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
|
-
"
|
|
489
|
-
"
|
|
490
|
-
"
|
|
491
|
-
"
|
|
492
|
-
"
|
|
493
|
-
"
|
|
494
|
-
"
|
|
495
|
-
"
|
|
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 = ["
|
|
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 + ":" + "
|
|
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)
|
{iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/compressive_gst/gst_analysis.py
RENAMED
|
@@ -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"
|
|
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"
|
|
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"
|
|
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"
|
|
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"
|
|
240
|
-
f"
|
|
241
|
-
f"
|
|
242
|
-
f"
|
|
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"
|
|
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"
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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"
|
|
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"
|
|
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"
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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}
|
|
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
|
-
|
|
824
|
-
|
|
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=
|
|
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(
|
|
485
|
+
identifier=BenchmarkObservationIdentifier(qubit_indices),
|
|
485
486
|
),
|
|
486
487
|
BenchmarkObservation(
|
|
487
488
|
name="is_succesful",
|
|
488
489
|
value=str(success),
|
|
489
|
-
identifier=BenchmarkObservationIdentifier(
|
|
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(
|
|
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.
|
|
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
|
|
{iqm_benchmarks-2.24 → iqm_benchmarks-2.26}/src/iqm/benchmarks/quantum_volume/quantum_volume.py
RENAMED
|
@@ -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
|
|
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 =
|
|
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
|
-
"
|
|
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
|
-
{
|
|
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
|
-
"
|
|
144
|
-
"
|
|
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
|
)
|