iqm-benchmarks 2.25__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.25 → iqm_benchmarks-2.26}/CHANGELOG.rst +4 -0
- {iqm_benchmarks-2.25/src/iqm_benchmarks.egg-info → iqm_benchmarks-2.26}/PKG-INFO +3 -2
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/compressive_gst/compressive_gst.py +24 -21
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/compressive_gst/gst_analysis.py +27 -22
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/optimization/qscore.py +6 -5
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/clifford_rb/clifford_rb.py +9 -4
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/interleaved_rb/interleaved_rb.py +6 -6
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/mirror_rb/mirror_rb.py +3 -3
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/randomized_benchmarking_common.py +12 -12
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/utils.py +1 -1
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26/src/iqm_benchmarks.egg-info}/PKG-INFO +3 -2
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/tests/test_gst.py +2 -1
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/.github/workflows/main.yml +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/.github/workflows/publish.yml +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/.github/workflows/tag_and_release.yml +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/.gitignore +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/LICENSE +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/MANIFEST.in +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/README.md +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/benchmark_runner.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docbuild +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/API.rst +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/Makefile +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/_static/images/favicon.ico +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/_static/images/logo.png +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/_templates/autosummary-class-template.rst +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/_templates/autosummary-module-template.rst +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/changelog.rst +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/conf.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/development/development.rst +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/development/generate_2qubit_cliffords.ipynb +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/development/how_to_make_your_own_benchmark.ipynb +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/devices/devices.rst +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/devices/spark.ipynb +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/devices/star.ipynb +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/examples/example_clifford_rb.ipynb +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/examples/example_clops.ipynb +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/examples/example_experiment_all.ipynb +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/examples/example_ghz.ipynb +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/examples/example_ghz_deneb.ipynb +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/examples/example_gst.ipynb +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/examples/example_interleaved_rb.ipynb +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/examples/example_mirror_rb.ipynb +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/examples/example_qscore.ipynb +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/examples/example_quantum_volume.ipynb +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/examples/example_quantum_volume_deneb.ipynb +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/examples/examples.rst +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/index.rst +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/license.rst +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/readme.md +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/format +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/pyproject.toml +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/requirements.txt +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/scheduled_experiments/adonis/__init__.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/scheduled_experiments/adonis/weekly.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/setup.cfg +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/__init__.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/benchmark.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/benchmark_definition.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/circuit_containers.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/compressive_gst/__init__.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/entanglement/__init__.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/entanglement/ghz.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/logging_config.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/optimization/__init__.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/quantum_volume/__init__.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/quantum_volume/clops.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/quantum_volume/quantum_volume.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/__init__.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/clifford_1q.pkl +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/clifford_2q.pkl +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/clifford_rb/__init__.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/interleaved_rb/__init__.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/mirror_rb/__init__.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/multi_lmfit.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/readout_mitigation.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm_benchmarks.egg-info/SOURCES.txt +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm_benchmarks.egg-info/dependency_links.txt +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm_benchmarks.egg-info/requires.txt +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm_benchmarks.egg-info/top_level.txt +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/mGST/LICENSE +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/mGST/README.md +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/mGST/additional_fns.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/mGST/algorithm.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/mGST/compatibility.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/mGST/low_level_jit.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/mGST/optimization.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/mGST/qiskit_interface.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/mGST/reporting/figure_gen.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/mGST/reporting/reporting.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/tag-from-pipeline.sh +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/test +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/tests/test_ghz.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/tests/test_qscore.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/tests/test_qv.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/tests/test_rb.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/tests/unit/test_benchmark_circuit.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/tests/unit/test_submit_execute.py +0 -0
- {iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/update-requirements.py +0 -0
|
@@ -2,6 +2,10 @@
|
|
|
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
|
+
|
|
5
9
|
Version 2.25
|
|
6
10
|
============
|
|
7
11
|
* Added optional configuration parameter (`max_circuits_per_batch`) to specify the maximum amount of circuits per batch.
|
|
@@ -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
|
|
{iqm_benchmarks-2.25 → 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,
|
|
@@ -388,7 +391,7 @@ def parse_gate_set(
|
|
|
388
391
|
gate_set: List[QuantumCircuit]
|
|
389
392
|
A list of gates defined as quantum circuit objects
|
|
390
393
|
gate_labels_dict: Dict[str, Dict[int, str]]
|
|
391
|
-
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.
|
|
392
395
|
num_gates: int
|
|
393
396
|
The number of gates in the gate set
|
|
394
397
|
|
|
@@ -447,7 +450,7 @@ def create_predefined_gate_set(
|
|
|
447
450
|
gates: List[QuantumCircuit]
|
|
448
451
|
The gate set as a list of circuits
|
|
449
452
|
gate_labels_dict: Dict[str, Dict[int, str]]
|
|
450
|
-
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.
|
|
451
454
|
num_gates: int
|
|
452
455
|
The number of gates in the gate set
|
|
453
456
|
|
|
@@ -460,7 +463,7 @@ def create_predefined_gate_set(
|
|
|
460
463
|
gate_qubits = [[0], [0], [0]]
|
|
461
464
|
for i, gate in enumerate(gate_list):
|
|
462
465
|
gates[i].append(gate, gate_qubits[i])
|
|
463
|
-
gate_labels = ["Idle", "
|
|
466
|
+
gate_labels = ["Idle", "Rx_pi_2", "Ry_pi_2"]
|
|
464
467
|
elif gate_set == "2QXYCZ":
|
|
465
468
|
gate_qubits = [[0], [1], [0], [1], [0, 1]]
|
|
466
469
|
gates = [QuantumCircuit(num_qubits, 0) for _ in range(5)]
|
|
@@ -469,7 +472,7 @@ def create_predefined_gate_set(
|
|
|
469
472
|
gates[2].append(RGate(0.5 * np.pi, np.pi / 2), [0])
|
|
470
473
|
gates[3].append(RGate(0.5 * np.pi, np.pi / 2), [1])
|
|
471
474
|
gates[4].append(CZGate(), [0, 1])
|
|
472
|
-
gate_labels = ["
|
|
475
|
+
gate_labels = ["Rx_pi_2", "Rx_pi_2", "Ry_pi_2", "Ry_pi_2", "cz"]
|
|
473
476
|
elif gate_set == "2QXYCZ_extended":
|
|
474
477
|
gate_qubits = [[0], [1], [0], [1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1]]
|
|
475
478
|
gates = [QuantumCircuit(num_qubits, 0) for _ in range(9)]
|
|
@@ -487,14 +490,14 @@ def create_predefined_gate_set(
|
|
|
487
490
|
gates[7].append(RGate(0.5 * np.pi, np.pi / 2), [1])
|
|
488
491
|
gates[8].append(CZGate(), [[0], [1]])
|
|
489
492
|
gate_labels = [
|
|
490
|
-
"
|
|
491
|
-
"
|
|
492
|
-
"
|
|
493
|
-
"
|
|
494
|
-
"
|
|
495
|
-
"
|
|
496
|
-
"
|
|
497
|
-
"
|
|
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",
|
|
498
501
|
"CZ",
|
|
499
502
|
]
|
|
500
503
|
elif gate_set == "3QXYCZ":
|
|
@@ -512,7 +515,7 @@ def create_predefined_gate_set(
|
|
|
512
515
|
gate_qubits = [[0], [1], [2], [0], [1], [2], [0, 1], [0, 2]]
|
|
513
516
|
for i, gate in enumerate(gate_list):
|
|
514
517
|
gates[i].append(gate, gate_qubits[i])
|
|
515
|
-
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"]
|
|
516
519
|
else:
|
|
517
520
|
raise ValueError(
|
|
518
521
|
f"Invalid gate set, choose among 1QXYI, 2QXYCZ, 2QXYCZ_extended,"
|
|
@@ -528,6 +531,6 @@ def create_predefined_gate_set(
|
|
|
528
531
|
iqm_qubits = [f"QB{q + 1}" for q in qubit_layout]
|
|
529
532
|
gate_qubits_iqm = [(iqm_qubits[q] for q in qubits) for qubits in gate_qubits]
|
|
530
533
|
for key, value in layout_label_dict.items():
|
|
531
|
-
layout_label_dict[key] = value + ":" + "
|
|
534
|
+
layout_label_dict[key] = value + ":" + "__".join(gate_qubits_iqm[key])
|
|
532
535
|
gate_label_dict.update({BenchmarkObservationIdentifier(qubit_layout).string_identifier: layout_label_dict})
|
|
533
536
|
return gates, gate_label_dict, len(gates)
|
{iqm_benchmarks-2.25 → 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)
|
|
@@ -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})
|
|
@@ -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),
|
|
@@ -173,14 +173,14 @@ def interleaved_rb_analysis(run: BenchmarkRunResult) -> BenchmarkAnalysisResult:
|
|
|
173
173
|
)
|
|
174
174
|
|
|
175
175
|
processed_results[rb_type] = {
|
|
176
|
-
"
|
|
176
|
+
"average_gate_fidelity": {"value": fidelity.value, "uncertainty": fidelity.stderr},
|
|
177
177
|
}
|
|
178
178
|
|
|
179
179
|
if len(qubits) == 1 and rb_type == "clifford":
|
|
180
180
|
fidelity_native = rb_fit_results.params["fidelity_per_native_sqg"]
|
|
181
181
|
processed_results[rb_type].update(
|
|
182
182
|
{
|
|
183
|
-
"
|
|
183
|
+
"average_gate_fidelity_native": {
|
|
184
184
|
"value": fidelity_native.value,
|
|
185
185
|
"uncertainty": fidelity_native.stderr,
|
|
186
186
|
}
|
|
@@ -190,7 +190,7 @@ def interleaved_rb_analysis(run: BenchmarkRunResult) -> BenchmarkAnalysisResult:
|
|
|
190
190
|
fidelity_native_sqg = rb_fit_results.params["fidelity_per_native_sqg"]
|
|
191
191
|
processed_results[rb_type].update(
|
|
192
192
|
{
|
|
193
|
-
"
|
|
193
|
+
"average_gate_fidelity_native_sqg": {
|
|
194
194
|
"value": fidelity_native_sqg.value,
|
|
195
195
|
"uncertainty": fidelity_native_sqg.stderr,
|
|
196
196
|
}
|
|
@@ -200,7 +200,7 @@ def interleaved_rb_analysis(run: BenchmarkRunResult) -> BenchmarkAnalysisResult:
|
|
|
200
200
|
observations.extend(
|
|
201
201
|
[
|
|
202
202
|
BenchmarkObservation(
|
|
203
|
-
name=f"{key}_{
|
|
203
|
+
name=f"{key}_{interleaved_gate}" if "native" not in key else f"{key}",
|
|
204
204
|
identifier=BenchmarkObservationIdentifier(qubits),
|
|
205
205
|
value=values["value"],
|
|
206
206
|
uncertainty=values["uncertainty"],
|
|
@@ -216,8 +216,8 @@ def interleaved_rb_analysis(run: BenchmarkRunResult) -> BenchmarkAnalysisResult:
|
|
|
216
216
|
"fit_amplitude": {"value": popt["amplitude"].value, "uncertainty": popt["amplitude"].stderr},
|
|
217
217
|
"fit_offset": {"value": popt["offset"].value, "uncertainty": popt["offset"].stderr},
|
|
218
218
|
"fidelities": fidelities[str(qubits)][rb_type],
|
|
219
|
-
"
|
|
220
|
-
"
|
|
219
|
+
"average_fidelities_nominal_values": average_fidelities,
|
|
220
|
+
"average_fidelities_stderr": stddevs_from_mean,
|
|
221
221
|
"fitting_method": str(rb_fit_results.method),
|
|
222
222
|
"num_function_evals": int(rb_fit_results.nfev),
|
|
223
223
|
"data_points": int(rb_fit_results.ndata),
|
|
@@ -522,7 +522,7 @@ def mrb_analysis(run: BenchmarkRunResult) -> BenchmarkAnalysisResult:
|
|
|
522
522
|
fidelity = rb_fit_results.params["fidelity_mrb"]
|
|
523
523
|
|
|
524
524
|
processed_results = {
|
|
525
|
-
"
|
|
525
|
+
"average_gate_fidelity": {"value": fidelity.value, "uncertainty": fidelity.stderr},
|
|
526
526
|
}
|
|
527
527
|
|
|
528
528
|
dataset.attrs[qubits_idx].update(
|
|
@@ -531,8 +531,8 @@ def mrb_analysis(run: BenchmarkRunResult) -> BenchmarkAnalysisResult:
|
|
|
531
531
|
"fit_amplitude": {"value": popt["amplitude"].value, "uncertainty": popt["amplitude"].stderr},
|
|
532
532
|
"fit_offset": {"value": popt["offset"].value, "uncertainty": popt["offset"].stderr},
|
|
533
533
|
"polarizations": polarizations,
|
|
534
|
-
"
|
|
535
|
-
"
|
|
534
|
+
"average_polarization_nominal_values": average_polarizations,
|
|
535
|
+
"average_polatization_stderr": stddevs_from_mean,
|
|
536
536
|
"fitting_method": str(rb_fit_results.method),
|
|
537
537
|
"num_function_evals": int(rb_fit_results.nfev),
|
|
538
538
|
"data_points": int(rb_fit_results.ndata),
|
|
@@ -637,11 +637,11 @@ def plot_rb_decay(
|
|
|
637
637
|
str(q): dataset.attrs[q_idx]["polarizations"] for q_idx, q in enumerate(qubits_array, qubits_index)
|
|
638
638
|
}
|
|
639
639
|
average_polarizations[identifier] = {
|
|
640
|
-
str(q): dataset.attrs[q_idx]["
|
|
640
|
+
str(q): dataset.attrs[q_idx]["average_polarization_nominal_values"]
|
|
641
641
|
for q_idx, q in enumerate(qubits_array, qubits_index)
|
|
642
642
|
}
|
|
643
643
|
stddevs_from_mean[identifier] = {
|
|
644
|
-
str(q): dataset.attrs[q_idx]["
|
|
644
|
+
str(q): dataset.attrs[q_idx]["average_polatization_stderr"]
|
|
645
645
|
for q_idx, q in enumerate(qubits_array, qubits_index)
|
|
646
646
|
}
|
|
647
647
|
else: # identifier == "clifford"
|
|
@@ -653,28 +653,28 @@ def plot_rb_decay(
|
|
|
653
653
|
str(q): dataset.attrs[q_idx]["fidelities"] for q_idx, q in enumerate(qubits_array, qubits_index)
|
|
654
654
|
}
|
|
655
655
|
average_polarizations[identifier] = {
|
|
656
|
-
str(q): dataset.attrs[q_idx]["
|
|
656
|
+
str(q): dataset.attrs[q_idx]["average_fidelities_nominal_values"]
|
|
657
657
|
for q_idx, q in enumerate(qubits_array, qubits_index)
|
|
658
658
|
}
|
|
659
659
|
stddevs_from_mean[identifier] = {
|
|
660
|
-
str(q): dataset.attrs[q_idx]["
|
|
660
|
+
str(q): dataset.attrs[q_idx]["average_fidelities_stderr"]
|
|
661
661
|
for q_idx, q in enumerate(qubits_array, qubits_index)
|
|
662
662
|
}
|
|
663
663
|
fidelity_native1q_value[identifier] = {
|
|
664
|
-
str(q): observations[q_idx]["
|
|
664
|
+
str(q): observations[q_idx]["average_native_gate_fidelity"]["value"] if len(q) == 1 else np.nan
|
|
665
665
|
for q_idx, q in enumerate(qubits_array, qubits_index)
|
|
666
666
|
}
|
|
667
667
|
fidelity_native1q_stderr[identifier] = {
|
|
668
|
-
str(q): observations[q_idx]["
|
|
668
|
+
str(q): observations[q_idx]["average_native_gate_fidelity"]["uncertainty"] if len(q) == 1 else np.nan
|
|
669
669
|
for q_idx, q in enumerate(qubits_array, qubits_index)
|
|
670
670
|
}
|
|
671
671
|
# These are common to both MRB and standard Clifford
|
|
672
672
|
fidelity_value[identifier] = {
|
|
673
|
-
str(q): observations[q_idx]["
|
|
673
|
+
str(q): observations[q_idx]["average_gate_fidelity"]["value"]
|
|
674
674
|
for q_idx, q in enumerate(qubits_array, qubits_index)
|
|
675
675
|
}
|
|
676
676
|
fidelity_stderr[identifier] = {
|
|
677
|
-
str(q): observations[q_idx]["
|
|
677
|
+
str(q): observations[q_idx]["average_gate_fidelity"]["uncertainty"]
|
|
678
678
|
for q_idx, q in enumerate(qubits_array, qubits_index)
|
|
679
679
|
}
|
|
680
680
|
decay_rate[identifier] = {
|
|
@@ -699,19 +699,19 @@ def plot_rb_decay(
|
|
|
699
699
|
for q_idx, q in enumerate(qubits_array, qubits_index)
|
|
700
700
|
}
|
|
701
701
|
average_polarizations[rb_type] = {
|
|
702
|
-
str(q): dataset.attrs[q_idx][rb_type]["
|
|
702
|
+
str(q): dataset.attrs[q_idx][rb_type]["average_fidelities_nominal_values"]
|
|
703
703
|
for q_idx, q in enumerate(qubits_array, qubits_index)
|
|
704
704
|
}
|
|
705
705
|
stddevs_from_mean[rb_type] = {
|
|
706
|
-
str(q): dataset.attrs[q_idx][rb_type]["
|
|
706
|
+
str(q): dataset.attrs[q_idx][rb_type]["average_fidelities_stderr"]
|
|
707
707
|
for q_idx, q in enumerate(qubits_array, qubits_index)
|
|
708
708
|
}
|
|
709
709
|
fidelity_value[rb_type] = {
|
|
710
|
-
str(q): observations[q_idx][rb_type]["
|
|
710
|
+
str(q): observations[q_idx][rb_type]["average_gate_fidelity"]["value"]
|
|
711
711
|
for q_idx, q in enumerate(qubits_array, qubits_index)
|
|
712
712
|
}
|
|
713
713
|
fidelity_stderr[rb_type] = {
|
|
714
|
-
str(q): observations[q_idx][rb_type]["
|
|
714
|
+
str(q): observations[q_idx][rb_type]["average_gate_fidelity"]["uncertainty"]
|
|
715
715
|
for q_idx, q in enumerate(qubits_array, qubits_index)
|
|
716
716
|
}
|
|
717
717
|
decay_rate[rb_type] = {
|
|
@@ -561,7 +561,7 @@ def submit_execute(
|
|
|
561
561
|
qcvv_logger.warning(
|
|
562
562
|
"Both max_gates_per_batch and max_circuits_per_batch are not None. Selecting the one giving the smallest batches."
|
|
563
563
|
)
|
|
564
|
-
batching_size = min(max_circuits_per_batch, max(1, floor(max_gates_per_batch / avg_gates_per_qc)))
|
|
564
|
+
batching_size = min(max_circuits_per_batch, max(1, floor(max_gates_per_batch / avg_gates_per_qc))) # type: ignore
|
|
565
565
|
if batching_size == max_circuits_per_batch:
|
|
566
566
|
restriction = "max_circuits_per_batch"
|
|
567
567
|
else:
|
|
@@ -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
|
|
|
@@ -13,13 +13,14 @@ class TestGST:
|
|
|
13
13
|
@patch('matplotlib.pyplot.figure')
|
|
14
14
|
def test_1q(self, mock_fig):
|
|
15
15
|
minimal_1Q_config = GSTConfiguration(
|
|
16
|
-
qubit_layouts=[[
|
|
16
|
+
qubit_layouts=[[4], [1]],
|
|
17
17
|
gate_set="1QXYI",
|
|
18
18
|
num_circuits=10,
|
|
19
19
|
shots=10,
|
|
20
20
|
rank=4,
|
|
21
21
|
bootstrap_samples=2,
|
|
22
22
|
max_iterations=[1, 1],
|
|
23
|
+
parallel_execution=True,
|
|
23
24
|
)
|
|
24
25
|
benchmark = CompressiveGST(self.backend, minimal_1Q_config)
|
|
25
26
|
benchmark.run()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/development/generate_2qubit_cliffords.ipynb
RENAMED
|
File without changes
|
{iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/development/how_to_make_your_own_benchmark.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/docs/examples/example_quantum_volume_deneb.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/quantum_volume/quantum_volume.py
RENAMED
|
File without changes
|
{iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm/benchmarks/randomized_benchmarking/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iqm_benchmarks-2.25 → iqm_benchmarks-2.26}/src/iqm_benchmarks.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|