iqm-benchmarks 2.19__py3-none-any.whl → 2.21__py3-none-any.whl
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/__init__.py +2 -0
- iqm/benchmarks/entanglement/ghz.py +1 -1
- iqm/benchmarks/quantum_volume/clops.py +15 -4
- iqm/benchmarks/randomized_benchmarking/mirror_rb/mirror_rb.py +22 -5
- iqm/benchmarks/readout_mitigation.py +1 -1
- iqm/benchmarks/utils.py +49 -0
- {iqm_benchmarks-2.19.dist-info → iqm_benchmarks-2.21.dist-info}/METADATA +2 -2
- {iqm_benchmarks-2.19.dist-info → iqm_benchmarks-2.21.dist-info}/RECORD +11 -11
- {iqm_benchmarks-2.19.dist-info → iqm_benchmarks-2.21.dist-info}/LICENSE +0 -0
- {iqm_benchmarks-2.19.dist-info → iqm_benchmarks-2.21.dist-info}/WHEEL +0 -0
- {iqm_benchmarks-2.19.dist-info → iqm_benchmarks-2.21.dist-info}/top_level.txt +0 -0
iqm/benchmarks/__init__.py
CHANGED
|
@@ -27,6 +27,7 @@ from .benchmark_definition import (
|
|
|
27
27
|
)
|
|
28
28
|
from .circuit_containers import BenchmarkCircuit, CircuitGroup, Circuits
|
|
29
29
|
from .entanglement.ghz import GHZBenchmark, GHZConfiguration
|
|
30
|
+
from .optimization.qscore import QScoreBenchmark, QScoreConfiguration
|
|
30
31
|
from .quantum_volume.clops import CLOPSBenchmark, CLOPSConfiguration
|
|
31
32
|
from .quantum_volume.quantum_volume import QuantumVolumeBenchmark, QuantumVolumeConfiguration
|
|
32
33
|
from .randomized_benchmarking.clifford_rb.clifford_rb import CliffordRandomizedBenchmarking, CliffordRBConfiguration
|
|
@@ -44,6 +45,7 @@ AVAILABLE_BENCHMARKS = {
|
|
|
44
45
|
CliffordRandomizedBenchmarking.name: CliffordRandomizedBenchmarking,
|
|
45
46
|
InterleavedRandomizedBenchmarking.name: InterleavedRandomizedBenchmarking,
|
|
46
47
|
MirrorRandomizedBenchmarking.name: MirrorRandomizedBenchmarking,
|
|
48
|
+
QScoreBenchmark.name: QScoreBenchmark,
|
|
47
49
|
}
|
|
48
50
|
|
|
49
51
|
try:
|
|
@@ -682,7 +682,7 @@ class GHZBenchmark(Benchmark):
|
|
|
682
682
|
)
|
|
683
683
|
final_ghz = ghz_native_transpiled
|
|
684
684
|
elif routine == "star":
|
|
685
|
-
ghz
|
|
685
|
+
ghz = generate_ghz_star(qubit_count)
|
|
686
686
|
circuit_group.add_circuit(ghz)
|
|
687
687
|
ghz_native_transpiled, _ = perform_backend_transpilation(
|
|
688
688
|
[ghz],
|
|
@@ -30,7 +30,12 @@ import xarray as xr
|
|
|
30
30
|
|
|
31
31
|
from iqm.benchmarks import Benchmark
|
|
32
32
|
from iqm.benchmarks.benchmark import BenchmarkConfigurationBase
|
|
33
|
-
from iqm.benchmarks.benchmark_definition import
|
|
33
|
+
from iqm.benchmarks.benchmark_definition import (
|
|
34
|
+
BenchmarkAnalysisResult,
|
|
35
|
+
BenchmarkObservation,
|
|
36
|
+
BenchmarkObservationIdentifier,
|
|
37
|
+
BenchmarkRunResult,
|
|
38
|
+
)
|
|
34
39
|
from iqm.benchmarks.circuit_containers import BenchmarkCircuit, CircuitGroup, Circuits
|
|
35
40
|
from iqm.benchmarks.logging_config import qcvv_logger
|
|
36
41
|
from iqm.benchmarks.utils import (
|
|
@@ -232,11 +237,12 @@ def clops_analysis(run: BenchmarkRunResult) -> BenchmarkAnalysisResult:
|
|
|
232
237
|
AnalysisResult corresponding to CLOPS
|
|
233
238
|
"""
|
|
234
239
|
plots: Dict[str, Any] = {}
|
|
235
|
-
|
|
240
|
+
obs_dict = {}
|
|
236
241
|
dataset = run.dataset
|
|
237
242
|
|
|
238
243
|
# Retrieve dataset values
|
|
239
244
|
# backend_name = dataset.attrs["backend_configuration_name"]
|
|
245
|
+
qubits = dataset.attrs["qubits"]
|
|
240
246
|
num_circuits = dataset.attrs["num_circuits"]
|
|
241
247
|
num_updates = dataset.attrs["num_updates"]
|
|
242
248
|
num_shots = dataset.attrs["num_shots"]
|
|
@@ -291,7 +297,7 @@ def clops_analysis(run: BenchmarkRunResult) -> BenchmarkAnalysisResult:
|
|
|
291
297
|
)
|
|
292
298
|
|
|
293
299
|
# UPDATE OBSERVATIONS
|
|
294
|
-
|
|
300
|
+
obs_dict.update({1: processed_results})
|
|
295
301
|
|
|
296
302
|
# PLOT
|
|
297
303
|
# Get all execution elapsed times
|
|
@@ -305,7 +311,7 @@ def clops_analysis(run: BenchmarkRunResult) -> BenchmarkAnalysisResult:
|
|
|
305
311
|
else:
|
|
306
312
|
qcvv_logger.info(f'\t"{k}": {overall_elapsed[k]:.2f} sec')
|
|
307
313
|
|
|
308
|
-
fig_name, fig = plot_times(dataset,
|
|
314
|
+
fig_name, fig = plot_times(dataset, obs_dict)
|
|
309
315
|
plots[fig_name] = fig
|
|
310
316
|
else:
|
|
311
317
|
qcvv_logger.info("There is no elapsed-time data associated to jobs (e.g., execution on simulator)")
|
|
@@ -313,6 +319,11 @@ def clops_analysis(run: BenchmarkRunResult) -> BenchmarkAnalysisResult:
|
|
|
313
319
|
# Sort the final dataset
|
|
314
320
|
dataset.attrs = dict(sorted(dataset.attrs.items()))
|
|
315
321
|
|
|
322
|
+
observations = [
|
|
323
|
+
BenchmarkObservation(name="clops_v", value=int(clops_v), identifier=BenchmarkObservationIdentifier(qubits)),
|
|
324
|
+
BenchmarkObservation(name="clops_h", value=int(clops_h), identifier=BenchmarkObservationIdentifier(qubits)),
|
|
325
|
+
]
|
|
326
|
+
|
|
316
327
|
return BenchmarkAnalysisResult(dataset=dataset, plots=plots, observations=observations)
|
|
317
328
|
|
|
318
329
|
|
|
@@ -15,7 +15,12 @@ from qiskit_aer import Aer, AerSimulator
|
|
|
15
15
|
from scipy.spatial.distance import hamming
|
|
16
16
|
import xarray as xr
|
|
17
17
|
|
|
18
|
-
from iqm.benchmarks import
|
|
18
|
+
from iqm.benchmarks import (
|
|
19
|
+
BenchmarkAnalysisResult,
|
|
20
|
+
BenchmarkObservation,
|
|
21
|
+
BenchmarkObservationIdentifier,
|
|
22
|
+
BenchmarkRunResult,
|
|
23
|
+
)
|
|
19
24
|
from iqm.benchmarks.benchmark import BenchmarkConfigurationBase
|
|
20
25
|
from iqm.benchmarks.benchmark_definition import Benchmark, add_counts_to_dataset
|
|
21
26
|
from iqm.benchmarks.circuit_containers import BenchmarkCircuit, CircuitGroup, Circuits
|
|
@@ -431,7 +436,8 @@ def mrb_analysis(run: BenchmarkRunResult) -> BenchmarkAnalysisResult:
|
|
|
431
436
|
AnalysisResult corresponding to MRB
|
|
432
437
|
"""
|
|
433
438
|
plots = {}
|
|
434
|
-
|
|
439
|
+
obs_dict = {}
|
|
440
|
+
observations: list[BenchmarkObservation] = []
|
|
435
441
|
dataset = run.dataset.copy(deep=True)
|
|
436
442
|
|
|
437
443
|
# shots = dataset.attrs["shots"]
|
|
@@ -539,25 +545,36 @@ def mrb_analysis(run: BenchmarkRunResult) -> BenchmarkAnalysisResult:
|
|
|
539
545
|
)
|
|
540
546
|
|
|
541
547
|
# Update observations
|
|
542
|
-
|
|
548
|
+
obs_dict.update({qubits_idx: processed_results})
|
|
543
549
|
|
|
544
550
|
# Generate plots
|
|
545
551
|
fig_name, fig = plot_rb_decay(
|
|
546
552
|
"mrb",
|
|
547
553
|
[qubits],
|
|
548
554
|
dataset,
|
|
549
|
-
|
|
555
|
+
obs_dict,
|
|
550
556
|
mrb_2q_density=density_2q_gates,
|
|
551
557
|
mrb_2q_ensemble=two_qubit_gate_ensemble,
|
|
552
558
|
)
|
|
553
559
|
plots[fig_name] = fig
|
|
554
560
|
|
|
561
|
+
observations.extend(
|
|
562
|
+
[
|
|
563
|
+
BenchmarkObservation(
|
|
564
|
+
name="decay_rate",
|
|
565
|
+
identifier=BenchmarkObservationIdentifier(qubits),
|
|
566
|
+
value=popt["decay_rate"].value,
|
|
567
|
+
uncertainty=popt["decay_rate"].stderr,
|
|
568
|
+
)
|
|
569
|
+
]
|
|
570
|
+
)
|
|
571
|
+
|
|
555
572
|
# Generate the combined plot
|
|
556
573
|
fig_name, fig = plot_rb_decay(
|
|
557
574
|
"mrb",
|
|
558
575
|
qubits_array,
|
|
559
576
|
dataset,
|
|
560
|
-
|
|
577
|
+
obs_dict,
|
|
561
578
|
mrb_2q_density=density_2q_gates,
|
|
562
579
|
mrb_2q_ensemble=two_qubit_gate_ensemble,
|
|
563
580
|
)
|
|
@@ -25,7 +25,7 @@ from mthree.exceptions import M3Error
|
|
|
25
25
|
from mthree.mitigation import _job_thread
|
|
26
26
|
from mthree.utils import final_measurement_mapping
|
|
27
27
|
from qiskit import transpile # pylint: disable = no-name-in-module
|
|
28
|
-
from qiskit.providers import
|
|
28
|
+
from qiskit.providers import BackendV1, BackendV2
|
|
29
29
|
|
|
30
30
|
from iqm.benchmarks.logging_config import qcvv_logger
|
|
31
31
|
from iqm.benchmarks.utils import get_iqm_backend, timeit
|
iqm/benchmarks/utils.py
CHANGED
|
@@ -25,6 +25,7 @@ from typing import Any, Dict, Iterable, List, Literal, Optional, Sequence, Tuple
|
|
|
25
25
|
from more_itertools import chunked
|
|
26
26
|
from mthree.utils import final_measurement_mapping
|
|
27
27
|
import numpy as np
|
|
28
|
+
from numpy.random import Generator
|
|
28
29
|
from qiskit import ClassicalRegister, transpile
|
|
29
30
|
from qiskit.converters import circuit_to_dag
|
|
30
31
|
from qiskit.transpiler import CouplingMap
|
|
@@ -65,6 +66,54 @@ def timeit(f):
|
|
|
65
66
|
return wrap
|
|
66
67
|
|
|
67
68
|
|
|
69
|
+
def bootstrap_counts(
|
|
70
|
+
original_counts: Dict[str, int],
|
|
71
|
+
num_bootstrap_samples: int = 100,
|
|
72
|
+
rgen: Optional[Generator] = None,
|
|
73
|
+
include_original_counts: bool = False,
|
|
74
|
+
) -> List[Dict[str, int]]:
|
|
75
|
+
"""Returns num_bootstrap_samples resampled copies of the original_counts.
|
|
76
|
+
|
|
77
|
+
Args:
|
|
78
|
+
original_counts (Dict[str, int]): The original dictionary of counts to bootstrap from.
|
|
79
|
+
num_bootstrap_samples (int): The number of bootstrapping samples to generate.
|
|
80
|
+
* Default is 100.
|
|
81
|
+
rgen (Optional[Generator]): The random number generator.
|
|
82
|
+
* Default is None: assigns numpy's default_rng().
|
|
83
|
+
include_original_counts (bool): Whether to include the original counts in the returned bootstrapped count samples.
|
|
84
|
+
* Default is False.
|
|
85
|
+
Returns:
|
|
86
|
+
List[Dict[str, int]]: A list of bootstrapped counts.
|
|
87
|
+
"""
|
|
88
|
+
if rgen is None:
|
|
89
|
+
rgen = np.random.default_rng()
|
|
90
|
+
|
|
91
|
+
keys = list(original_counts.keys())
|
|
92
|
+
values = list(original_counts.values())
|
|
93
|
+
tot_shots = int(sum(values))
|
|
94
|
+
|
|
95
|
+
# Pre-calculate cumulative sum and create bins
|
|
96
|
+
cumulative_sum = np.cumsum(values)
|
|
97
|
+
bins = np.insert(cumulative_sum, 0, 0)
|
|
98
|
+
|
|
99
|
+
if include_original_counts:
|
|
100
|
+
bs_counts_fast = [original_counts]
|
|
101
|
+
else:
|
|
102
|
+
bs_counts_fast = []
|
|
103
|
+
|
|
104
|
+
for _ in range(num_bootstrap_samples):
|
|
105
|
+
# Generate random integers
|
|
106
|
+
random_integers = rgen.integers(low=0, high=tot_shots, size=tot_shots)
|
|
107
|
+
# Bin the random integers
|
|
108
|
+
binned_integers = np.digitize(random_integers, bins) - 1
|
|
109
|
+
# Count occurrences in each bin
|
|
110
|
+
occurrences = np.bincount(binned_integers, minlength=len(keys))
|
|
111
|
+
# Create dictionary mapping keys to occurrence counts
|
|
112
|
+
bs_counts_fast.append(dict(zip(keys, occurrences)))
|
|
113
|
+
|
|
114
|
+
return bs_counts_fast
|
|
115
|
+
|
|
116
|
+
|
|
68
117
|
@timeit
|
|
69
118
|
def count_2q_layers(circuit_list: List[QuantumCircuit]) -> List[int]:
|
|
70
119
|
"""Calculate the number of layers of parallel 2-qubit gates in a list of circuits.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: iqm-benchmarks
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.21
|
|
4
4
|
Summary: A package for implementation of Quantum Characterization, Verification and Validation (QCVV) techniques on IQM's hardware at gate level abstraction
|
|
5
|
-
Author-email: IQM Finland Oy <developers@meetiqm.com>,
|
|
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
|
|
7
7
|
Classifier: Development Status :: 4 - Beta
|
|
8
8
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
iqm/benchmarks/__init__.py,sha256=
|
|
1
|
+
iqm/benchmarks/__init__.py,sha256=8SRHlADqZjlP8PtbKTMvu-ejpcEZkW8cPmgW8GVKJg8,2638
|
|
2
2
|
iqm/benchmarks/benchmark.py,sha256=SGhBcSxLPUu-cVXAjG4Db2TRobFCRBYoE1NtTDK1lJg,4432
|
|
3
3
|
iqm/benchmarks/benchmark_definition.py,sha256=AZkvANrf0_0glbq_P_uo_YqbBU9IZa2gJlMVz6qT6VU,10500
|
|
4
4
|
iqm/benchmarks/circuit_containers.py,sha256=anEtZEsodYqOX-34oZRmuKGeEpp_VfgG5045Mz4-4hI,7562
|
|
5
5
|
iqm/benchmarks/logging_config.py,sha256=U7olP5Kr75AcLJqNODf9VBhJLVqIvA4AYR6J39D5rww,1052
|
|
6
|
-
iqm/benchmarks/readout_mitigation.py,sha256=
|
|
7
|
-
iqm/benchmarks/utils.py,sha256=
|
|
6
|
+
iqm/benchmarks/readout_mitigation.py,sha256=Q2SOGWTNgmklOYkNxepAaSaXlxSj0QQyymYY1bOkT8A,11756
|
|
7
|
+
iqm/benchmarks/utils.py,sha256=B3dusTNC4n0gW3KZSaQA6ZZeGok3ABtte-N3JEXCtN0,23022
|
|
8
8
|
iqm/benchmarks/compressive_gst/__init__.py,sha256=LneifgYXtcwo2jcXo7GdUEHL6_peipukShhkrdaTRCA,929
|
|
9
9
|
iqm/benchmarks/compressive_gst/compressive_gst.py,sha256=spq6jP0NLbjaJDzESpbfRPs0N_YheFWl2Wa6USHS5sI,22398
|
|
10
10
|
iqm/benchmarks/compressive_gst/gst_analysis.py,sha256=PxCThBfh2zdQpipI-6gAvLKdmkbYv_KSEpejltVkk7o,35330
|
|
11
11
|
iqm/benchmarks/entanglement/__init__.py,sha256=9T7prOwqMmFWdb4t6ETAHZXKK5o6FvU2DvVb6WhNi-U,682
|
|
12
|
-
iqm/benchmarks/entanglement/ghz.py,sha256=
|
|
12
|
+
iqm/benchmarks/entanglement/ghz.py,sha256=tQXKiav6pKZlV3ZU4BOrYrP7PfBAGn0zOsSUORQn5kw,42652
|
|
13
13
|
iqm/benchmarks/optimization/__init__.py,sha256=_ajW_OibYLCtzU5AUv5c2zuuVYn8ZNeZUcUUSIGt51M,747
|
|
14
14
|
iqm/benchmarks/optimization/qscore.py,sha256=xAv97MRVUNB_YjRbxzM6Ph0Pz0ctJjSA46J9lrbwe-w,37541
|
|
15
15
|
iqm/benchmarks/quantum_volume/__init__.py,sha256=i-Q4SpDWELBw7frXnxm1j4wJRcxbIyrS5uEK_v06YHo,951
|
|
16
|
-
iqm/benchmarks/quantum_volume/clops.py,sha256=
|
|
16
|
+
iqm/benchmarks/quantum_volume/clops.py,sha256=abuYvc7XaRTuqLDim9jwZvG_W_KybEbiBs6SD0JUtcA,31319
|
|
17
17
|
iqm/benchmarks/quantum_volume/quantum_volume.py,sha256=njX5lBty9jcWMuJnl7uNqRfwE9akMe5gcX-f1_uYDXk,36791
|
|
18
18
|
iqm/benchmarks/randomized_benchmarking/__init__.py,sha256=IkKo-7zUChxZZd3my_csQCJfJfZNsV3-JTvdG8uqys4,734
|
|
19
19
|
iqm/benchmarks/randomized_benchmarking/clifford_1q.pkl,sha256=vvSd0pRWxtzyirohO9yf_58mjevkc2-pbuWIEb-4gaw,46928
|
|
@@ -25,7 +25,7 @@ iqm/benchmarks/randomized_benchmarking/clifford_rb/clifford_rb.py,sha256=v8GDsEC
|
|
|
25
25
|
iqm/benchmarks/randomized_benchmarking/interleaved_rb/__init__.py,sha256=sq6MgN_hwlpkOj10vyCU4e6eKSX-oLcF2L9na6W2Gt4,681
|
|
26
26
|
iqm/benchmarks/randomized_benchmarking/interleaved_rb/interleaved_rb.py,sha256=4hBjIXxqy18WKC8hgpCU6T6Vv2cvJu4AImj7QQDqI1k,27956
|
|
27
27
|
iqm/benchmarks/randomized_benchmarking/mirror_rb/__init__.py,sha256=ZekEqI_89nXzGO1vjM-b5Uwwicy59M4fYHXfA-f0MIg,674
|
|
28
|
-
iqm/benchmarks/randomized_benchmarking/mirror_rb/mirror_rb.py,sha256=
|
|
28
|
+
iqm/benchmarks/randomized_benchmarking/mirror_rb/mirror_rb.py,sha256=XYJpfXHeN4PtkiuoCQeyRQIeaKr1PxFNasBjLs2ns7k,34830
|
|
29
29
|
mGST/LICENSE,sha256=TtHNq55cUcbglb7uhVudeBLUh_qPdUoAEvU0BBwFz-k,1098
|
|
30
30
|
mGST/README.md,sha256=v_5kw253csHF4-RfE-44KqFmBXIsSMRmOtN0AUPrRxE,5050
|
|
31
31
|
mGST/additional_fns.py,sha256=_SEJ10FRNM7_CroysT8hCLZTfpm6ZhEIDCY5zPTnhjo,31390
|
|
@@ -36,8 +36,8 @@ mGST/optimization.py,sha256=YHwkzIkYvsZOPjclR-BCQWh24jeqjuXp0BB0WX5Lwow,10559
|
|
|
36
36
|
mGST/qiskit_interface.py,sha256=L4H-4SdhP_bjSFFvpQoF1E7EyGbIJ_CI_y4a7_YEwmU,10102
|
|
37
37
|
mGST/reporting/figure_gen.py,sha256=6Xd8vwfy09hLY1YbJY6TRevuMsQSU4MsWqemly3ZO0I,12970
|
|
38
38
|
mGST/reporting/reporting.py,sha256=We1cccz9BKbITYcSlZHdmBGdjMWAa1xNZe5tKP-yh_E,26004
|
|
39
|
-
iqm_benchmarks-2.
|
|
40
|
-
iqm_benchmarks-2.
|
|
41
|
-
iqm_benchmarks-2.
|
|
42
|
-
iqm_benchmarks-2.
|
|
43
|
-
iqm_benchmarks-2.
|
|
39
|
+
iqm_benchmarks-2.21.dist-info/LICENSE,sha256=2Ncb40-hqkTil78RPv3-YiJfKaJ8te9USJgliKqIdSY,11558
|
|
40
|
+
iqm_benchmarks-2.21.dist-info/METADATA,sha256=y-gRyH1c_MMl0hDu-Kv6d_yL78We2Ksctl3UkKc_7tE,10384
|
|
41
|
+
iqm_benchmarks-2.21.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
42
|
+
iqm_benchmarks-2.21.dist-info/top_level.txt,sha256=3G23Z-1LGf-IOzTCUl6QwWqiQ3USz25Zt90Ihq192to,9
|
|
43
|
+
iqm_benchmarks-2.21.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|